@customize-agent/server 4.60.34 → 4.60.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +197 -297
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +3 -7
- package/.next/routes-manifest.json +19 -30
- package/.next/server/chunks/{8645.js → 1026.js} +1 -1
- package/.next/server/chunks/1146.js +1 -0
- package/.next/server/chunks/1547.js +385 -0
- package/.next/server/chunks/3074.js +1 -0
- package/.next/server/chunks/3750.js +2 -0
- package/.next/server/chunks/407.js +1 -0
- package/.next/server/chunks/5037.js +46 -0
- package/.next/server/chunks/5304.js +2 -2
- package/.next/server/chunks/5599.js +1 -0
- package/.next/server/chunks/5763.js +159 -0
- package/.next/server/chunks/6138.js +5 -0
- package/.next/server/chunks/6355.js +1 -0
- package/.next/server/chunks/6822.js +1 -1
- package/.next/server/chunks/702.js +3 -0
- package/.next/server/chunks/7296.js +1 -0
- package/.next/server/chunks/8176.js +1 -0
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/8459.js +11 -0
- package/.next/server/chunks/8570.js +1 -0
- package/.next/server/chunks/9270.js +1 -0
- package/.next/server/chunks/9283.js +7 -0
- package/.next/server/chunks/9301.js +2 -2
- package/.next/server/chunks/9522.js +5 -0
- package/.next/server/chunks/9559.js +1 -0
- package/.next/server/chunks/9688.js +10 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_app.js +1 -1
- package/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/server/pages/_document.js +1 -1
- package/.next/server/pages/_document.js.nft.json +1 -1
- package/.next/server/pages/_error.js +1 -1
- package/.next/server/pages/_error.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +2 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +2 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js +2 -3
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding.js +2 -3
- package/.next/server/pages/api/config/embedding.js.nft.json +1 -1
- package/.next/server/pages/api/config/healthCheck.js +2 -3
- package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/config/models.js +2 -3
- package/.next/server/pages/api/config/models.js.nft.json +1 -1
- package/.next/server/pages/api/config/providers/[provider].js +2 -3
- package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
- package/.next/server/pages/api/config/providers.js +2 -3
- package/.next/server/pages/api/config/providers.js.nft.json +1 -1
- package/.next/server/pages/api/config/reset.js +2 -3
- package/.next/server/pages/api/config/reset.js.nft.json +1 -1
- package/.next/server/pages/api/config/web-access.js +2 -3
- package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js +2 -1
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/delivery-review.js +2 -0
- package/.next/server/pages/api/documents/delivery-review.js.nft.json +1 -0
- package/.next/server/pages/api/documents/export.js +5 -2
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate/preview.js +6 -1
- package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js +2 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/events.js +4 -3
- package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/instruction.js +4 -2
- package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/messages.js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/messages.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/pause.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/preview.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/report.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +2 -1
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +2 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +2 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/health.js +1 -1
- package/.next/server/pages/api/health.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js +2 -2
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js +2 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js +2 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/features.js +2 -3
- package/.next/server/pages/api/kb/features.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js +2 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js +2 -1
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/open.js +2 -1
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js +2 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +1 -2
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js +2 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/source-preview.js +2 -1
- package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js +2 -2
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js +2 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/material-groups.js +2 -1
- package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js +2 -2
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js +1 -2
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js +2 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js +2 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -2
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js +1 -2
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/prompt/chat.js +3 -4
- package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
- package/.next/server/pages/api/skills/[id].js +2 -1
- package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/api/skills/validate.js +2 -1
- package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
- package/.next/server/pages/api/skills.js +2 -1
- package/.next/server/pages/api/skills.js.nft.json +1 -1
- package/.next/server/pages/api/system/data-health.js +2 -2
- package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
- package/.next/server/pages/api/system/reset.js +1 -1
- package/.next/server/pages/api/system/reset.js.nft.json +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/documents.js.nft.json +1 -1
- package/.next/server/pages/generation/[id].html +1 -0
- package/.next/server/pages/generation/[id].js.nft.json +1 -0
- package/.next/server/pages/generation.html +1 -0
- package/.next/server/pages/generation.js.nft.json +1 -0
- package/.next/server/pages/index.js +1 -0
- package/.next/server/pages/index.js.nft.json +1 -1
- package/.next/server/pages/jobs.html +1 -1
- package/.next/server/pages/jobs.js.nft.json +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/file-detail.js.nft.json +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/files.js.nft.json +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/manage.js.nft.json +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge/source-preview.js.nft.json +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/knowledge.js.nft.json +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/models.js.nft.json +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/settings.js.nft.json +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills/new.js.nft.json +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/skills.js.nft.json +1 -1
- package/.next/server/pages-manifest.json +35 -40
- package/.next/static/chunks/112-9eacc7c0686813d6.js +1 -0
- package/.next/static/chunks/127-5ee1899eef559281.js +1 -0
- package/.next/static/chunks/{1210-703ad87eaeee1e4e.js → 210-71eaf9de9aa92051.js} +1 -1
- package/.next/static/chunks/325-45106bb003a2c5ce.js +4 -0
- package/.next/static/chunks/326-a3915e61888b0dbf.js +1 -0
- package/.next/static/chunks/333-7642e65bff6b8465.js +1 -0
- package/.next/static/chunks/338-19ccbaec57a7bf9c.js +4 -0
- package/.next/static/chunks/350-87b9c900a356d9b9.js +1 -0
- package/.next/static/chunks/359-f87c659236e0e0fe.js +1 -0
- package/.next/static/chunks/{8399-a001bb2a0cb1640b.js → 399-aa8a45d80e989621.js} +1 -1
- package/.next/static/chunks/430-f288e16301b9aea5.js +1 -0
- package/.next/static/chunks/465-80fbb245d43232c8.js +6 -0
- package/.next/static/chunks/499-2233cadc6d4da647.js +10 -0
- package/.next/static/chunks/551-fd86e95935b0957f.js +16 -0
- package/.next/static/chunks/576-6699fed6c88502fe.js +1 -0
- package/.next/static/chunks/61-de1dd9c104680470.js +1 -0
- package/.next/static/chunks/665-0634aa49137defc4.js +1 -0
- package/.next/static/chunks/681-e31b13114497e058.js +1 -0
- package/.next/static/chunks/687-644a12a5b584e19f.js +1 -0
- package/.next/static/chunks/702-4d9cc8d4d7775ea9.js +1 -0
- package/.next/static/chunks/748-9e5bf4181d7482f3.js +1 -0
- package/.next/static/chunks/759-280cf4040fae83af.js +25 -0
- package/.next/static/chunks/855-cbf7cd1db33198f0.js +17 -0
- package/.next/static/chunks/862-13d1c84d0938b824.js +1 -0
- package/.next/static/chunks/937-ccd3ceb1b3739535.js +1 -0
- package/.next/static/chunks/{8964-e959915ecfae86b2.js → 964-82cc4701f08f7351.js} +1 -1
- package/.next/static/chunks/992-8032f477230baaaf.js +1 -0
- package/.next/static/chunks/framework-4b565b3ddc94cdac.js +1 -0
- package/.next/static/chunks/main-0c91f573696223ca.js +1 -0
- package/.next/static/chunks/pages/_app-a70de062f1be1c59.js +140 -0
- package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +1 -0
- package/.next/static/chunks/pages/documents-2d99ae9287f9739b.js +1 -0
- package/.next/static/chunks/pages/generation/[id]-1f97e47ce545bd11.js +1 -0
- package/.next/static/chunks/pages/generation-043e325d635c96af.js +1 -0
- package/.next/static/chunks/pages/index-24d1f8f39ae0beb0.js +1 -0
- package/.next/static/chunks/pages/jobs-ff2f899a081b616e.js +1 -0
- package/.next/static/chunks/pages/knowledge/file-detail-9a9a89e4fa33c0d9.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +1 -0
- package/.next/static/chunks/pages/knowledge/{source-preview-24936b9a746ed07f.js → source-preview-f000b4d63cd65a54.js} +1 -1
- package/.next/static/chunks/pages/knowledge-8fa842d21892e2c3.js +1 -0
- package/.next/static/chunks/pages/models-6d9b301009f82395.js +1 -0
- package/.next/static/chunks/pages/settings-08893ba8afa1a486.js +1 -0
- package/.next/static/chunks/pages/skills/[id]/edit-378249e662ebf31f.js +1 -0
- package/.next/static/chunks/pages/skills/[id]-0ca4cde22e4a518b.js +1 -0
- package/.next/static/chunks/pages/skills/new-c1eb16d98fad4e02.js +1 -0
- package/.next/static/chunks/pages/skills-9fb1fa2b669ad4e3.js +1 -0
- package/.next/static/chunks/{webpack-2da1769ff35eb1ed.js → webpack-6224d37324e372cb.js} +1 -1
- package/.next/static/css/1f6d2a1bf5e15e0f.css +1 -0
- package/.next/static/css/b420c193e0e99857.css +1 -0
- package/.next/static/e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2/_buildManifest.js +1 -0
- package/README.md +14 -4
- package/messages/en-US.json +46 -100
- package/messages/zh-CN.json +44 -98
- package/next.config.ts +6 -5
- package/package.json +5 -6
- package/scripts/build-identity.cjs +16 -5
- package/scripts/check-workspace-deps.cjs +3 -3
- package/scripts/purge-next-artifacts.cjs +8 -5
- package/scripts/upload-matrix.cjs +1 -2
- package/scripts/verify-next-static.js +1 -1
- package/.next/server/chunks/1001.js +0 -2
- package/.next/server/chunks/1243.js +0 -3
- package/.next/server/chunks/1928.js +0 -1
- package/.next/server/chunks/1936.js +0 -385
- package/.next/server/chunks/2328.js +0 -6
- package/.next/server/chunks/2434.js +0 -4
- package/.next/server/chunks/3806.js +0 -1
- package/.next/server/chunks/4974.js +0 -2
- package/.next/server/chunks/5746.js +0 -5
- package/.next/server/chunks/6321.js +0 -1
- package/.next/server/chunks/7848.js +0 -145
- package/.next/server/chunks/9666.js +0 -146
- package/.next/server/instrumentation.js +0 -1
- package/.next/server/instrumentation.js.nft.json +0 -1
- package/.next/server/pages/api/prompt.js +0 -2
- package/.next/server/pages/api/prompt.js.nft.json +0 -1
- package/.next/server/pages/api/system/logs.js +0 -2
- package/.next/server/pages/api/system/logs.js.nft.json +0 -1
- package/.next/server/pages/api/system/stats.js +0 -2
- package/.next/server/pages/api/system/stats.js.nft.json +0 -1
- package/.next/server/pages/canvas/[id].html +0 -1
- package/.next/server/pages/canvas/[id].js.nft.json +0 -1
- package/.next/server/pages/canvas.html +0 -1
- package/.next/server/pages/canvas.js.nft.json +0 -1
- package/.next/server/pages/guide.html +0 -1
- package/.next/server/pages/guide.js.nft.json +0 -1
- package/.next/server/pages/index.html +0 -1
- package/.next/server/pages/overview.html +0 -1
- package/.next/server/pages/overview.js.nft.json +0 -1
- package/.next/server/pages/prompt.html +0 -1
- package/.next/server/pages/prompt.js.nft.json +0 -1
- package/.next/server/pages/system/logs.html +0 -1
- package/.next/server/pages/system/logs.js.nft.json +0 -1
- package/.next/static/0e37797d2ec62d17ca5f253c10b385fa939228f353538722f095755edce292af/_buildManifest.js +0 -1
- package/.next/static/chunks/1141-d420a7685bc3623c.js +0 -1
- package/.next/static/chunks/1499-ff8f02f6bb6f3d45.js +0 -10
- package/.next/static/chunks/1702-f5e99af7aface475.js +0 -1
- package/.next/static/chunks/2864-b040f2bffa08c139.js +0 -6
- package/.next/static/chunks/3456-70bb03a39473f693.js +0 -1
- package/.next/static/chunks/3980-73841c40d55ddfa1.js +0 -1
- package/.next/static/chunks/4052-199e61ca9e6a33e7.js +0 -1
- package/.next/static/chunks/4337-a670a1a94ab505d9.js +0 -1
- package/.next/static/chunks/4530-8b9788da40548ec6.js +0 -1
- package/.next/static/chunks/4565-3c5ff667062ccec9.js +0 -21
- package/.next/static/chunks/4665-1984a3d8b0573fa1.js +0 -1
- package/.next/static/chunks/5061-80765d4a612286e0.js +0 -1
- package/.next/static/chunks/5544-d77b8289662b4c28.js +0 -4
- package/.next/static/chunks/5760-f4191aac081b12d4.js +0 -11
- package/.next/static/chunks/6409-5a3bb0fbad4f64b1.js +0 -14
- package/.next/static/chunks/6506-ac0ba7338cc84b7d.js +0 -1
- package/.next/static/chunks/6748-07b0b05bf03c72f0.js +0 -1
- package/.next/static/chunks/7217-416b8488e0d2d498.js +0 -1
- package/.next/static/chunks/7576-ba6fc03060415b0e.js +0 -1
- package/.next/static/chunks/7646-159733564c7eb8dc.js +0 -1
- package/.next/static/chunks/7795-c11ff1a81c67c5aa.js +0 -1
- package/.next/static/chunks/8318-cb3a94de1617f983.js +0 -1
- package/.next/static/chunks/8338-b2ea00050048ba9f.js +0 -4
- package/.next/static/chunks/8564-ac3e2f1bf87765b3.js +0 -1
- package/.next/static/chunks/8569-1d5c61a3f4fa0e26.js +0 -16
- package/.next/static/chunks/8715-ee013bd7f5ba38e8.js +0 -1
- package/.next/static/chunks/8750-a3c55a576effb3a6.js +0 -1
- package/.next/static/chunks/8787-49b1f35eb4acfac9.js +0 -10
- package/.next/static/chunks/9551-f4b09bf2213ad571.js +0 -16
- package/.next/static/chunks/9605-3dee531f8a7ecbe0.js +0 -4
- package/.next/static/chunks/9937-e4b2deadd24e3962.js +0 -1
- package/.next/static/chunks/framework-9cde5013cd555765.js +0 -1
- package/.next/static/chunks/main-b313efde54fa6d2e.js +0 -1
- package/.next/static/chunks/pages/_app-51c48c5efcf5c721.js +0 -140
- package/.next/static/chunks/pages/_error-c01b6fb772028676.js +0 -1
- package/.next/static/chunks/pages/canvas/[id]-18865f1b7e3a4696.js +0 -1
- package/.next/static/chunks/pages/canvas-1d3589790493e955.js +0 -1
- package/.next/static/chunks/pages/documents-a1af5c6be26daed2.js +0 -1
- package/.next/static/chunks/pages/guide-fdf0822dc1d28813.js +0 -1
- package/.next/static/chunks/pages/index-c572e9caa60cb278.js +0 -1
- package/.next/static/chunks/pages/jobs-ebd1877dbf788a83.js +0 -1
- package/.next/static/chunks/pages/knowledge/file-detail-3d1ffd43f4f0e47b.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-b796702bb5f8ac50.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-6d7b21cdca1255f2.js +0 -1
- package/.next/static/chunks/pages/knowledge-2a776c1740386874.js +0 -1
- package/.next/static/chunks/pages/models-8a89dd5bf0f81242.js +0 -1
- package/.next/static/chunks/pages/overview-7e8018014009682e.js +0 -1
- package/.next/static/chunks/pages/prompt-11f87694feb6514c.js +0 -1
- package/.next/static/chunks/pages/settings-e8dcaba1551a0b2b.js +0 -1
- package/.next/static/chunks/pages/skills/[id]/edit-99e616d5019e80b1.js +0 -1
- package/.next/static/chunks/pages/skills/[id]-71f696be252bbf0d.js +0 -1
- package/.next/static/chunks/pages/skills/new-00886ea4c676f927.js +0 -1
- package/.next/static/chunks/pages/skills-8ad2577b4aa17f3b.js +0 -1
- package/.next/static/chunks/pages/system/logs-0856f7c65432befb.js +0 -1
- package/.next/static/css/2da1c822e3bdb4bb.css +0 -1
- package/.next/static/css/9eb02c1a401fd278.css +0 -1
- package/scripts/half-built-scan.allow.json +0 -152
- package/scripts/half-built-scan.baseline.json +0 -190
- package/scripts/half-built-scan.mjs +0 -287
- /package/.next/static/{0e37797d2ec62d17ca5f253c10b385fa939228f353538722f095755edce292af → e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=8644,a.ids=[8644],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},17532:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.mjs")},19898:a=>{a.exports=require("@customize-agent/knowledge")},26735:(a,b,c)=>{c.r(b),c.d(b,{config:()=>a6,default:()=>a5,handler:()=>a8});var d={};c.r(d),c.d(d,{EXPORT_RECEIPT_HEADERS:()=>Z,__documentExportTest__:()=>a1,config:()=>Y,default:()=>a2});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c.n(i),k=c(76760),l=c.n(k),m=c(77598);let n="Noto Sans CJK SC";function o(){let a=[l().resolve(process.cwd(),"public/fonts"),l().resolve(process.cwd(),"apps/server/public/fonts")].map(a=>l().join(a,"NotoSansCJKsc-Regular.otf")).find(a=>j().existsSync(a));if(!a)throw Error("随服务发布的中文字体资源缺失,不能把缺字产物当作完整导出");return a}async function p(a,b){let c=Object.keys(a.files).filter(a=>/^word\/(?:document|styles|footer\d*|header\d*)\.xml$/u.test(a)),d=new Set,e=!1;for(let f of c){let c=a.file(f);if(!c)continue;let g=await c.async("string"),h=g.replace(/<w:rFonts\b[^>]*\/?>(?:<\/w:rFonts>)?/gu,a=>{let c=/w:eastAsia="([^"]+)"/u.exec(a)?.[1];return c===n?(e=!0,a):b?(e=!0,c&&d.add(c),a.replace(/\s+w:eastAsia(?:Theme)?="[^"]*"/gu,"").replace(/\/?>(?:<\/w:rFonts>)?$/u,` w:eastAsia="${n}"/>`)):a});h!==g&&a.file(f,h)}if(!e)return{embedded:!1,changedFamilies:[]};let f=o(),g=j().readFileSync(f),h=JSON.parse(j().readFileSync(l().join(l().dirname(f),"font-manifest.json"),"utf8")),i=(0,m.createHash)("sha256").update(g).digest("hex");if(i!==h.sha256||0!==h.embeddingFsType)throw Error("中文字体资源与可嵌入的发布清单不一致");let k=(0,m.randomUUID)(),p=Buffer.from(k.replace(/-/gu,""),"hex").reverse(),q=Buffer.from(g);for(let a=0;a<32;a++)q[a]^=p[a%16];a.file("word/fonts/NotoSansCJKsc-Regular.odttf",q);let r="http://schemas.openxmlformats.org/officeDocument/2006/relationships",s=await a.file("word/fontTable.xml")?.async("string")??'<w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>';s.includes("xmlns:r=")||(s=s.replace("<w:fonts",`<w:fonts xmlns:r="${r}"`));let t=`<w:font w:name="${n}"><w:family w:val="swiss"/><w:embedRegular r:id="portableCjkFont" w:fontKey="{${k.toUpperCase()}}"/></w:font>`;s=s.replace(RegExp(`<w:font w:name="${n}"[\\s\\S]*?</w:font>`,"gu"),""),s=/<\/w:fonts>/u.test(s)?s.replace("</w:fonts>",`${t}</w:fonts>`):s.replace("/>",`>${t}</w:fonts>`),a.file("word/fontTable.xml",s);let u="word/_rels/fontTable.xml.rels",v=await a.file(u)?.async("string")??'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';v=v.replace(/<Relationship\b[^>]*Id="portableCjkFont"[^>]*\/>/gu,""),a.file(u,v.replace("</Relationships>",`<Relationship Id="portableCjkFont" Type="${r}/font" Target="fonts/NotoSansCJKsc-Regular.odttf"/></Relationships>`));let w=await a.file("[Content_Types].xml").async("string");w.includes('Extension="odttf"')||(w=w.replace("</Types>",'<Default Extension="odttf" ContentType="application/vnd.openxmlformats-officedocument.obfuscatedFont"/></Types>')),a.file("[Content_Types].xml",w);let x=await a.file("word/settings.xml")?.async("string");return x&&!x.includes("embedTrueTypeFonts")&&a.file("word/settings.xml",x.replace("</w:settings>","<w:embedTrueTypeFonts/></w:settings>")),{embedded:!0,changedFamilies:[...d],sha256:i}}var q=c(96241),r=c(12866),s=c(7942),t=c(57349),u=c(85497),v=c(51342),w=c(12152),x=c(72275),y=c(13571),z=c(48161),A=c.n(z),B=c(88194),C=c.n(B),D=c(70949),E=c(31421);let F=require("node:url"),G=(0,c(57975).promisify)(E.execFile);async function H(a,b=!1,d=!1){let e;if(a.length)try{let[f,g]=await Promise.all([Promise.resolve().then(c.bind(c,17532)),Promise.resolve().then(c.bind(c,97864))]);globalThis.pdfjsWorker??=g,e=f.getDocument({data:Uint8Array.from(a),useWorkerFetch:!1,useSystemFonts:!1});let h=await e.promise;if(!Number.isInteger(h.numPages)||h.numPages<=0)return;let i=[];if(b)for(let a=1;a<=h.numPages;a+=1){let b=await (await h.getPage(a)).getTextContent();i.push(b.items.map(a=>"str"in a?a.str:"").join(""))}let j=new Map,k=async a=>{for(let b of a){let a="string"==typeof b.dest?await h.getDestination(b.dest):b.dest;if(a?.[0]){let c="number"==typeof a[0]?a[0]+1:await h.getPageIndex(a[0])+1;j.set(b.title,[...j.get(b.title)??[],c])}b.items?.length&&await k(b.items)}};return d&&await k(await h.getOutline()??[]),{pages:h.numPages,text:i.join(""),...d?{headingPages:Object.fromEntries([...j].filter(([,a])=>1===a.length).map(([a,b])=>[a,b[0]]))}:{}}}catch{return}finally{await e?.destroy()}}async function I(a){return(await H(a))?.pages}async function J(a){return(await H(a,!1,!0))?.headingPages}async function K(a,b={}){let c,d,e;if(!a||0===a.length)return{unavailableReason:"docx 为空"};try{let b=await C().loadAsync(a),d=await b.file("word/document.xml")?.async("string");if(!d)throw Error("正文缺席");c=[...d.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>a[1]).join("")}catch{return{unavailableReason:"DOCX正文无法解析,不能验证真实渲染页数"}}let f=async a=>{let b=await H(a,!0,!0);if(!b)return;let e=function(a,b){let c=new Map,d=new Map;for(let b of a.match(/\p{Script=Han}/gu)??[])c.set(b,(c.get(b)??0)+1);let e=[...c.values()].reduce((a,b)=>a+b,0);if(e<20)return null;for(let a of b.match(/\p{Script=Han}/gu)??[])d.set(a,(d.get(a)??0)+1);return[...c].reduce((a,[b,c])=>a+Math.min(c,d.get(b)??0),0)/e}(c,b.text);if(null!==e&&e<.98)throw Error(`中文文字渲染未保留(覆盖率${(100*e).toFixed(1)}%),请核查渲染器中文字体;不能将缺字版式计为合格页数`);return d=b.headingPages,b.pages},g=j().mkdtempSync(l().join(A().tmpdir(),"real-pages-")),h={...process.env};if("darwin"===process.platform&&!h.FONTCONFIG_FILE){let a=["/System/Library/Fonts","/System/Library/Fonts/Supplemental","/Library/Fonts"].filter(a=>j().existsSync(a));if(a.length){let b=l().join(g,"fonts.conf"),c=a=>a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">");j().writeFileSync(b,`<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig>${a.map(a=>`<dir>${c(a)}</dir>`).join("")}<cachedir>${c(l().join(g,"font-cache"))}</cachedir><alias><family>SimSun</family><prefer><family>Songti SC</family></prefer></alias><alias><family>宋体</family><prefer><family>Songti SC</family></prefer></alias></fontconfig>`),h.FONTCONFIG_FILE=b}}let i=l().join(g,"document.docx");j().writeFileSync(i,a);try{for(let a of function(){let a=[],b=process.env.CUSTOMIZE_DOCX_RENDERER;if(b){let c=j().existsSync(b.trim())?[b.trim()]:b.trim().split(/\s+/u);a.push({name:`env:${c[0]}`,command:c[0],args:c.slice(1)})}for(let b of["soffice","libreoffice"])a.push({name:b,command:b,args:[]});return a}()){let c,k=l().join(g,`out-${a.name.replace(/[^\w.-]/gu,"_")}`);j().mkdirSync(k,{recursive:!0});let m=a=>a.replace(/\{in\}/gu,i).replace(/\{out\}/gu,k).replace(/\{outfile\}/gu,l().join(k,"document.pdf")),n=a.args.length>0?a.args.map(m):[`-env:UserInstallation=${(0,F.pathToFileURL)(l().join(k,"profile")).href}`,"--headless","--convert-to","pdf","--outdir",k,i];try{await G(a.command,n,{timeout:b.timeoutMs??12e4,env:h})}catch(c){let b=c.code;if("ENOENT"===b)continue;e=`${a.name}:${c instanceof Error?c.message.split("\n")[0]:String(c)}`;continue}let o=l().join(k,"document.pdf");if(!j().existsSync(o)){let b,c=j().readdirSync(k).filter(a=>a.toLowerCase().endsWith(".pdf"));if(0===c.length){e=`${a.name}没有产生PDF`;continue}try{b=1===c.length?await f(j().readFileSync(l().join(k,c[0]))):void 0}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==b)return{pages:b,renderer:a.name,headingPages:d};e=c.length>1?`${a.name}产生多个PDF,无法确认对应文档`:`${a.name}的PDF页树解析失败`;continue}try{c=await f(j().readFileSync(o))}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==c)return{pages:c,renderer:a.name,headingPages:d};e=`${a.name}的PDF页树解析失败`}return{unavailableReason:e?`渲染器失败(${e})`:"未配置外部渲染器(CUSTOMIZE_DOCX_RENDERER 或 PATH 中的 soffice/libreoffice)——真页数待真渲染"}}finally{j().rmSync(g,{recursive:!0,force:!0})}}var L=c(44533),M=c(22157),N=c(52639),O=c(30055),P=c(35091);let Q=a=>(0,m.createHash)("sha256").update(a).digest("hex"),R=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function S(a,b,c){if(!b)return{};let d=(0,s.HM)(a,c,b);if(!j().existsSync(d))return{};try{let a=j().readFileSync(d);return{data:R(JSON.parse(a.toString("utf8"))),sha256:Q(a)}}catch{return{}}}function T(a){return Array.isArray(a)?a.flatMap(a=>{let b=R(a);return"string"==typeof b?.id&&"string"==typeof b.title?[{id:b.id,title:b.title}]:[]}):[]}var U=c(64406),V=c(191),W=c(16006),X=c(89900);let Y={api:{bodyParser:{sizeLimit:"50mb"},responseLimit:!1}},Z={notDeliverable:"X-Export-Not-Deliverable",exportPurpose:"X-Export-Purpose",bodySha256:"X-Export-Body-Sha256",issuesReport:"X-Export-Issues-Report",gatePassed:"X-Export-Gate-Passed",gateBinding:"X-Export-Gate-Binding",gateIssues:"X-Export-Gate-Issues",gateIssueCount:"X-Export-Gate-Issue-Count",contentIssues:"X-Export-Content-Issues",renderAudit:"X-Export-Render-Audit",figureInline:"X-Export-Figure-Inline",templateWarning:"X-Export-Template-Warning",pageLimit:"X-Export-Page-Limit",pdfPageCount:"X-PDF-Page-Count"};function $(){return{mode:"enforce",blockers:[],notices:[],ops:{headerlessTableRendered:0,captionStyled:0}}}function _(a){return{mode:a.mode,blockerCount:a.blockers.length,blockerCodes:[...new Set(a.blockers.map(a=>a.line>0?`${a.code}@L${a.line}`:a.code))].slice(0,20),notices:a.notices.map(a=>a.message).slice(0,10),ops:{...a.ops},opsTotal:Object.values(a.ops).reduce((a,b)=>a+b,0)}}function aa(a){return a.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document"}function ab(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let ac={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function ad(a){return ac[k.extname(a).toLowerCase()]||""}function ae(a,b){let c=k.relative(b,a);return!!c&&!c.startsWith("..")&&!k.isAbsolute(c)}function af(a,b=(0,L.aY)()){if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let c=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?.*)?$/u.exec(a)?.[1];if(c){let a=k.resolve((0,D.Gl)(b),"assets","figures"),d=k.resolve(a,c);return ae(d,a)&&i.existsSync(d)&&i.statSync(d).isFile()?d:null}let d=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!d||k.isAbsolute(d))return null;let e=k.resolve((0,L.NW)(b)),f=k.resolve((0,D.Gl)(b),"assets");return[d.startsWith("generatedDocuments/assets/")?k.resolve(f,d.replace(/^generatedDocuments\/assets\//u,"")):"",k.resolve(e,d)].filter(Boolean).find(a=>{let b=k.resolve(a);return(ae(b,e)||ae(b,f))&&!!ad(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function ag(a){let b=new Map,c=0,d=Math.round(8),e=Math.round(32);return f=>{let g=af(f,a);if(!g)return null;let h=i.statSync(g);if(h.size>8388608)return{reason:`超过单图内联上限 ${d}MB`};if(c+h.size>0x2000000)return{reason:`全篇内联总量超过 ${e}MB 上限`};let j=b.get(g);return j||(j=`data:${ad(g)};base64,${i.readFileSync(g).toString("base64")}`,b.set(g,j),c+=h.size),{dataUrl:j}}}function ah(a,b=(0,L.aY)(),c){let d=ag(b);return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,b,e,f)=>{let g=d(e);return g?"reason"in g?(c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:${g.reason},产物中为断图)`}),a):`<img${b}src="${g.dataUrl}"${f}>`:(/^\//u.test(e.trim())&&c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:未在知识库/生成资产根内找到,产物中为断图)`}),a)})}let ai=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?[^#]*)?$/u;function aj(a){let b=/^data:(image\/(?:png|jpeg|gif|webp|svg\+xml));base64,([A-Za-z0-9+/]+={0,2})$/u.exec(a);if(!b||b[2].length>4*Math.ceil(8388608/3))return null;let c=Buffer.from(b[2],"base64");return!c.length||c.length>8388608||c.toString("base64")!==b[2]||"image/svg+xml"===b[1]&&/<script\b|<foreignObject\b|\son\w+\s*=|(?:href|xlink:href)\s*=\s*["'](?!#)|url\(\s*(?!#)|<!ENTITY/iu.test(c.toString("utf8"))?null:{buffer:c,contentType:b[1]}}let ak=/^[a-z][a-z0-9+.-]*:\/\/[^/]+(\/api\/documents\/generated\/[^/]+\/figure\/[A-Za-z0-9._-]+\.svg(?:\?[^#]*)?)$/iu,al=/!\[([^\]]*)\]\(\s*(?:<([^>\s]+)>|([^()\s]+))(\s+(?:"[^"]*"|'[^']*'))?\s*\)/gu,am=/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu;function an(a,b=(0,L.aY)(),c){let d=ag(b),e={inlined:0,failed:[]},f=new Set,g=function(a){let b,c=[],d=0,e="";for(let f of a.split("\n")){let a=/^\s{0,3}(`{3,}|~{3,})/u.exec(f);a&&(void 0===b?(b=d,e=a[1][0]):a[1][0]===e&&(c.push({start:b,end:d+f.length}),b=void 0)),d+=f.length+1}return void 0!==b&&c.push({start:b,end:a.length}),c}(a),h=a=>g.some(b=>a>=b.start&&a<b.end),i=(a,b,c)=>{f.has(b)||(f.add(b),e.failed.push({name:a,src:b,reason:c}))},j=(a,b)=>a.trim()||ai.exec(b.trim())?.[1]||ak.exec(b.trim())?.[1]?.split("/").pop()||b.trim().split("/").pop()||b.trim(),k=a=>{let b=a.trim();if(!b||/^data:/iu.test(b))return{action:"keep"};let c=ak.exec(b)?.[1]??b;if(c===b&&/^[a-z][a-z0-9+.-]*:/iu.test(b))return/^https?:/iu.test(b)?{action:"keep-report",reason:"外部图源(导出链不联网,无法内联)"}:{action:"keep"};let e=d(c);if(!e){let a=ai.exec(c)?.[1],b=a?`图件文件不在生成资产根内(${a})`:"未在知识库/生成资产根内找到该图";return c.startsWith("/")?{action:"mark",reason:b}:{action:"keep-report",reason:b}}return"reason"in e?{action:"mark",reason:e.reason}:{action:"inline",dataUrl:e.dataUrl}},l=a.replace(al,(a,b,c,d,f,g,l)=>{if(h(g))return a;let m=(c??d??"").trim(),n=k(m);if("keep"===n.action)return a;let o=j(b,m);if("inline"===n.action)return e.inlined+=1,``;if(i(o,m,n.reason),"keep-report"===n.action)return a;let p=`图件未内联:${o}(原因:${n.reason})——请从成稿预览或 HTML/DOCX 交付件取图`;return 0===g||"\n"===l[g-1]?`> ${p}`:`【${p}】`});for(let a of(l=l.replace(am,(a,b,c,d,f)=>{if(h(f))return a;let g=k(c);return"keep"===g.action?a:"inline"===g.action?(e.inlined+=1,`<img${b}src="${g.dataUrl}"${d}>`):(i(j("",c),c,g.reason),"keep-report"===g.action)?a:`【图件未内联:${j("",c)}(原因:${g.reason})】`}),e.inlined>0&&c?.notices.push({code:"figure-inline",message:`MD 图件内联:${e.inlined} 张已内联为 data: URI(与 HTML/PDF 同源解析;MD 交付件不再依赖 /api/... 图件 URL)`}),e.failed.slice(0,10)))c?.notices.push({code:"figure-inline",message:`MD 图件未内联:${a.name}(原因:${a.reason})`});return{markdown:l,report:e}}function ao(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function ap(a){let b=a.trim();return!(!b||/^#{1,6}\s+/u.test(b)||ao(b))&&(b.match(/(?<!\\)\|/gu)||[]).length>=1}function aq(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split(/(?<!\\)\|/u).map(a=>a.replace(/\\\|/gu,"|").trim())}function ar(a){return a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/(\*\*|__)([\s\S]*?)\1/gu,"$2").replace(/(?<![\w\d])([*_])(?=\S)(.+?)\1(?![\w\d])/gu,"$2").replace(/`([^`]+)`/gu,"$1").replace(/~~(.+?)~~/gu,"$1").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function as(a){return a.split(",")[0].replace(/["'“”]/gu,"").trim()}function at(a){let b=as(a);return({宋体:"SimSun",仿宋:"FangSong",仿宋_GB2312:"FangSong_GB2312",黑体:"SimHei",楷体:"KaiTi",楷体_GB2312:"KaiTi_GB2312",微软雅黑:"Microsoft YaHei"})[b]||b}function au(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function av(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function aw(a){let b=a?.page??{},c=(b.paper??"A4").trim(),d=/\blandscape\b/iu.test(c),e=c.replace(/\s+(?:landscape|portrait)\s*$/iu,"").toUpperCase(),f={A3:[16838,23811],A4:[11906,16838],A5:[8391,11906],B5:[9978,14173],LETTER:[12240,15840],LEGAL:[12240,20160],TABLOID:[15840,24480]},g=/^(\d+(?:\.\d+)?(?:mm|cm|in|pt))\s+(\d+(?:\.\d+)?(?:mm|cm|in|pt))$/iu.exec(c);if(!g&&!f[e])throw Error(`DOCX尚未支持指定纸张:${c};不能静默换成A4`);let[h,i]=g?[av(g[1],21),av(g[2],29.7)]:f[e]??f.A4;d&&([h,i]=[i,h]);let j=h-av(b.marginLeft,2)-av(b.marginRight,2)-av(b.gutter,0),k=i-av(b.marginTop,2.5)-av(b.marginBottom,2.5)-560;if(j<=0||k<=0)throw Error("纸张和页边距没有可用正文区域");return{width:h,height:i,landscape:d,bodyWidth:j,maxImageWidthPx:Math.min(620,j/15),maxImageHeightPx:k/15}}function ax(a){let b=function(a){let b=a?.page||{},c=a?.typography||{},d=aM(b.paper,"A4"),e=aM(b.marginTop,"24mm"),f=aM(b.marginRight,"18mm"),g=aM(b.marginBottom,"22mm"),h=aM(b.marginLeft,"18mm"),i=c.fontFamily||"SimSun, 宋体, serif",j=c.bodyFont||c.fontFamily||"SimSun, 宋体, serif",k=c.headingFont||c.fontFamily||"SimSun, 宋体, serif",l=c.lineHeight||"18pt";return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,bodyFontFamily:j,headingFontFamily:k,lineHeight:l,titleSize:c.titleSize||"22pt",bodySize:c.bodySize||"12pt"}}(a),c=a?.typography||{},d=c.bodySize?au(c.bodySize,12):12,e=c.titleSize?au(c.titleSize,22):22,f=c.headingSize?au(c.headingSize,15):15,g=c.headingSize?au(c.headingSize,14):14,h=c.lineHeight?au(c.lineHeight,18):18,i=c.headingFont?c.headingFont:c.fontFamily?c.fontFamily:"黑体",j=c.bodyFont||c.fontFamily||"宋体";return{...b,bodyPt:d,h1Pt:e,h2Pt:f,h3Pt:g,linePt:h,bodyHalfPoints:Math.round(2*d),h1HalfPoints:Math.round(2*e),h2HalfPoints:Math.round(2*f),h3HalfPoints:Math.round(2*g),lineTwips:Math.round(20*h),fontHeading:as(i),fontHeadingAscii:at(i),fontBody:as(j),fontBodyAscii:at(j),bodyCss:`${d}pt`,h1Css:`${e}pt`,h2Css:`${f}pt`,h3Css:`${g}pt`,lineCss:`${h}pt`}}function ay(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${ab(d)}" w:hAnsi="${ab(d)}" w:eastAsia="${ab(c)}" w:cs="${ab(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${ab(a)}</w:t></w:r>`}function az(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:"",b.hanging?`w:hanging="${b.hanging}"`:""].filter(Boolean).join(" "),d=[b.styleId?`<w:pStyle w:val="${ab(b.styleId)}"/>`:"",b.keepNext?"<w:keepNext/>":"",!1===b.wordWrap?'<w:wordWrap w:val="0"/>':"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`,c?`<w:ind ${c}/>`:"",b.align?`<w:jc w:val="${b.align}"/>`:"","number"==typeof b.outlineLevel?`<w:outlineLvl w:val="${b.outlineLevel}"/>`:""].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${ay(a,b)}</w:p>`}function aA(a,b){if("image/png"===b&&a.length>=24&&"PNG"===a.toString("ascii",1,4))return{width:a.readUInt32BE(16),height:a.readUInt32BE(20)};if("image/jpeg"===b){let b=2;for(;b+9<a.length&&255===a[b];){let c=a[b+1],d=a.readUInt16BE(b+2);if(c>=192&&c<=195)return{height:a.readUInt16BE(b+5),width:a.readUInt16BE(b+7)};b+=2+d}}return{width:640,height:360}}async function aB(a,b,d){let e,f,g,h=new Map,j=new Map;for(let c of a.matchAll(/!\[[^\]]*\]\(([^)\s]+)[^)]*\)/gu)){let a=af(c[1].trim(),b);a&&".svg"===k.extname(a).toLowerCase()&&j.set(a,i.readFileSync(a));let d=aj(c[1].trim());d?.contentType==="image/svg+xml"&&j.set(c[1].trim(),d.buffer)}if(0===j.size)return h;try{let a=await Promise.resolve().then(c.t.bind(c,28183,23)),b=[process.env.CUSTOMIZE_CJK_FONT,o(),"/System/Library/Fonts/STHeiti Light.ttc","/System/Library/Fonts/Supplemental/Songti.ttc","/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc","/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf","C:\\Windows\\Fonts\\msyh.ttc"].filter(a=>!!a);if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let c of b)if(i.existsSync(c)&&a.GlobalFonts.registerFromPath(c,"Noto Sans CJK SC"))break}if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let b of["Microsoft YaHei","PingFang SC","Songti SC","Noto Sans CJK JP","Droid Sans Fallback"])if(a.GlobalFonts.has(b)&&a.GlobalFonts.setAlias(b,"Noto Sans CJK SC"))break}g=a.GlobalFonts.has("Noto Sans CJK SC"),e=a.loadImage,f=a.createCanvas}catch(a){return d?.notices.push({code:"docx-stage",message:`SVG 图件光栅化不可用(${a instanceof Error?a.message:String(a)}):${j.size} 张图件在 DOCX 中将缺失`}),h}for(let[a,b]of j)try{if(/\p{Script=Han}/u.test(b.toString("utf8"))&&!g)throw Error("图件包含中文但光栅化器没有可用中文字体;请配置CUSTOMIZE_CJK_FONT,不能把方框字图件当完整交付物");let c=await e(b),d=Math.max(1,Math.round(c.width)),i=Math.max(1,Math.round(c.height)),j=f(2*d,2*i),k=j.getContext("2d");k.scale(2,2),k.drawImage(c,0,0),h.set(a,j.toBuffer("image/png"))}catch(b){d?.notices.push({code:"docx-stage",message:`图件光栅化失败已跳过:${k.basename(a)}(${b instanceof Error?b.message:String(b)})`})}return h.size>0&&d?.notices.push({code:"docx-stage",message:`图件光栅化:${h.size}/${j.size} 张 SVG 已转 2\xd7 PNG 内联进 DOCX(DOCX 不支持内联 SVG)`}),h}function aC(a,b,c,d,e=!1){let f=Math.max(1,...a.map(a=>a.length)),g=a=>[...a].reduce((a,b)=>a+(b.codePointAt(0)>127?2:1),0),h=Array.from({length:f},(b,c)=>{let d=a.map(a=>g(a[c]??"")).sort((a,b)=>a-b);return Math.max(5,Math.min(40,d[Math.ceil((d.length-1)*.85)]??5))}),i=Array.from({length:f},(d,e)=>240+Math.max(2,Math.max(0,...a.slice(+!!c).flatMap(a=>[...(a[e]??"").matchAll(/[+−-]?\d[\d.,~~×*()()%‰µ\p{Script=Latin}\p{Script=Greek}℃°²³/\-+]*/gu)].map(a=>a[0])).filter(a=>a.length<=24).map(g)))*b.bodyHalfPoints*5),j=i.reduce((a,b)=>a+b,0),k=Math.max(0,d-j),l=h.reduce((a,b)=>a+b,0),m=h.map((a,b)=>Math.floor(j>d?d*i[b]/j:i[b]+k*a/l));m[f-1]+=d-m.reduce((a,b)=>a+b,0);let n=`<w:tblGrid>${m.map(a=>`<w:gridCol w:w="${a}"/>`).join("")}</w:tblGrid>`;return`<w:tbl><w:tblPr><w:tblW w:w="${d}" w:type="dxa"/><w:tblLook w:firstRow="${+!!c}" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:left w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:bottom w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:right w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:insideH w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/><w:insideV w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/></w:tblBorders></w:tblPr>${n}${a.map((d,f)=>`<w:tr><w:trPr><w:cantSplit/>${c&&0===f?"<w:tblHeader/>":""}</w:trPr>${m.map((g,h)=>{let i=d[h]||"",j=c&&0===f;return`<w:tc><w:tcPr><w:tcW w:w="${g}" w:type="dxa"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="120" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="120" w:type="dxa"/></w:tcMar>${!j&&/^[+−-]?\d[\d.,~~×*()()%‰μµmMkKgGtTsSVWA℃°²³\s/\-+]*$/u.test(i)&&i.length<=24?"<w:noWrap/>":""}${j&&!e?'<w:shd w:val="clear" w:fill="F3F4F6"/>':""}</w:tcPr>${az(i,{bold:j,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:0,wordWrap:!1,keepNext:j||f===a.length-2,align:j?"center":"left"})}</w:tc>`}).join("")}</w:tr>`).join("")}</w:tbl>`}function aD(a){return!!ar(a)&&!/^#{1,6}\s/u.test(a)&&!ap(a)}let aE="请在 Word 中右键更新目录";function aF(a){return`<w:p><w:pPr><w:spacing w:line="${a.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve">TOC \\o "1-2" \\h \\z \\u</w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r></w:p>`}function aG(a,b){return az(a,{bold:!0,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontHeading,fontAscii:b.fontHeadingAscii,align:"center",firstLine:0,spacingBefore:120,spacingAfter:60,keepNext:!0})}function aH(a,b,c,d){let e=ax(b),f=e.h1HalfPoints,g=e.bodyHalfPoints,h=a.replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),j=[],l=!1,m=!1,n=new Map,o=new Set;aQ(a).forEach((a,b)=>{a.level>3||(o.has(a.title)?n.delete(a.title):(o.add(a.title),n.set(a.title,`_doc_heading_${b+1}`)))});let p=-1,q=()=>{if(p<0)return;let a=j.splice(p);if(p=-1,0===a.length)return void j.push(aF(e).replace("</w:p>",`<w:r><w:t>${aE}</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>`));j.push(aF(e)),a.forEach((b,c)=>j.push(c===a.length-1?b.replace(/<\/w:p>$/u,'<w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>'):b))};for(let a=0;a<h.length;){let o=h[a].trim();if(!o){a+=1;continue}if(l&&("[[PAGE_BREAK]]"===o||/^#{1,4}\s+/u.test(o))&&(q(),l=!1,"[[PAGE_BREAK]]"!==o&&j.push(az("",{pageBreak:!0}))),/<div\s+class=["']document-cover["']\s*>/iu.test(o)){m=!0,a+=1;continue}if(m&&/^<\/div>$/iu.test(o)){m=!1,a+=1;continue}if("[[PAGE_BREAK]]"===o){l=!1,m=!1,q(),j.push(az("",{pageBreak:!0})),a+=1;continue}if(m){let b=ar(o.replace(/^#\s+/u,""));b&&j.push(az(b,{bold:!0,size:Math.max(f+8,44),line:Math.round(1.15*e.lineTwips),fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let r=c?function(a,b){let c=/!\[([^\]]*)\]\(([^)]+)\)/u.exec(a);if(!c)return null;let d=c[2].trim(),e=ai.exec(d)?.[1],f=af(d,b.projectRoot),g=aj(d);if(!f&&!g)return(e||d.startsWith("data:"))&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e??c[1]}(原因:图件不在生成资产根内,或内联格式/体积不合规)`}),null;let h=g?.buffer??i.readFileSync(f),j=g?.contentType??ad(f);if("image/svg+xml"===j){let a=b.rasterizedSvg?.get(f??d);if(!a)return b.audit?.notices.push({code:"figure-inline",message:`DOCX图件未进包:${e??c[1]}(SVG未完成光栅化)`}),null;h=a,j="image/png"}if(!j||h.length>8388608)return e&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e}(原因:超过单图体积上限 ${Math.round(8)}MB)`}),null;let l=b.images.length+1,m="image/png"===j?".png":g?`.${"jpeg"===j.split("/")[1]?"jpg":j.split("/")[1]}`:k.extname(f).toLowerCase()||".png",n=aA(h,j),o=b.pageBox?.maxImageWidthPx??620,p=b.pageBox?.maxImageHeightPx??aw().maxImageHeightPx,q=Math.min(1,o/Math.max(n.width,1),p/Math.max(n.height,1)),r=g?.contentType==="image/svg+xml"?g.buffer:f&&".svg"===k.extname(f).toLowerCase()?i.readFileSync(f):void 0;if(r?.includes(Buffer.from("data-source-node="))){let a=r.toString("utf8"),d=aA(r,"image/svg+xml"),e=[...a.matchAll(/font-size=["'](\d+(?:\.\d+)?)["']/gu)].map(a=>Number(a[1])),f=Math.min(...e)*n.width/Math.max(1,d.width)*q*.75;if(e.length&&f<7.95){let a=`图件${c[1]||l}完整缩放后最小标签约${f.toFixed(1)}pt,须在作者模型拆分或重新排版,不能缩成不可读的正式图件`;(b.imageLayoutIssues??=[]).push(a),b.audit?.notices.push({code:"docx-stage",message:a})}}let s={relationshipId:`rImage${l}`,fileName:`image${l}${m}`,buffer:h,contentType:j,widthEmu:Math.round(n.width*q*9525),heightEmu:Math.round(n.height*q*9525),altText:c[1]||`image${l}`};return b.images.push(s),s}(o,c):null;if(r){j.push(`<w:p><w:pPr><w:jc w:val="center"/><w:spacing w:after="120" w:line="240" w:lineRule="auto"/></w:pPr><w:r><w:drawing><wp:inline xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><wp:extent cx="${r.widthEmu}" cy="${r.heightEmu}"/><wp:docPr id="${r.relationshipId.replace(/\D/gu,"")||"1"}" name="${ab(r.altText||r.fileName)}"/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="${ab(r.fileName)}"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="${r.relationshipId}" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${r.widthEmu}" cy="${r.heightEmu}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p>`),a+=1;continue}let s=/^(`{3,}|~{3,})([^`~]*)$/u.exec(o);if(s){let b=RegExp(`^${s[1][0]}{${s[1].length},}\\s*$`,"u"),c=[h[a++]];for(;a<h.length;){let d=h[a++];if(c.push(d),b.test(d.trim()))break}for(let a of c)j.push(az(a,{size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,spacingAfter:0}));/^mermaid\b/u.test(s[2].trim())&&d?.notices.push({code:"docx-stage",message:"该图源尚未匹配到本轮结构化图件,按原字代码保留供审阅,不当作已渲染施工图。"});continue}let t=function(a,b){let c=a[b+1]?.trim()===""?b+2:b+1;if(c>=a.length||!ap(a[b]||"")||!ao(a[c]||""))return null;let d=aq(a[b]||"").map(a=>ar(a)),e=aq(a[c]||"").length,f=[],g=c+1;for(;g<a.length&&ap(a[g]||"");){var h;if(h=g,ao(((a[h+1]?.trim()===""?a[h+2]:a[h+1])||"").trim()))break;f.push(aq(a[g]||"").map(a=>ar(a))),g+=1}let i=Math.max(2,d.length,e,...f.map(a=>a.length)),j=a=>{let b=a.slice(0,i);for(a.length>i&&i>0&&(b[i-1]=[b[i-1],...a.slice(i)].filter(Boolean).join(" | "));b.length<i;)b.push("");return b};return{rows:[j(d),...f.map(j)],next:g,headerRow:!0}}(h,a);if(t){j.push(aC(t.rows,e,t.headerRow,c?.pageBox?.bodyWidth??aw(b).bodyWidth,c?.monoColor),az("",{spacingAfter:80,line:e.lineTwips})),a=t.next;continue}let u=!l&&ap(o)?function(a,b){let c=[],d=b;for(;d<a.length&&ap(a[d]||"");)c.push(a[d]||""),d+=1;let e=Math.max(...c.map(a=>aq(a).length),0);return c.length<2||e<2?null:{rows:c,columns:e,next:d}}(h,a):null;if(u){j.push(aC(u.rows.map(a=>aq(a).map(a=>ar(a))),e,!1,c?.pageBox?.bodyWidth??aw(b).bodyWidth),az("",{spacingAfter:80,line:e.lineTwips})),d&&(d.ops.headerlessTableRendered+=1,d.notices.push({code:"headerless-table",message:`docx 阶段按数据行渲染无表头表格 ${u.rows.length} 行 \xd7 ${u.columns} 列(首行不冒充表头):该表在源文档缺表头,需回源补齐`})),a=u.next;continue}if(ao(o)){a+=1;continue}let v=/^(#{1,4})\s+(.+)$/u.exec(o);if(v){let b=ar(v[2]);j.push("目录"===b?az(b,{bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):(()=>{var a;let c=(a=v[1].length,2===a?az(b,{styleId:"Heading1",outlineLevel:0,bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===a?az(b,{styleId:"Heading2",outlineLevel:1,bold:!0,size:e.h2HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:180,spacingAfter:100,keepNext:!0}):az(b,{styleId:"Heading3",outlineLevel:2,bold:!0,size:e.h3HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:120,spacingAfter:80,keepNext:!0})),d=n.get(b);if(!d)return c;let f=d.split("_").at(-1);return c.replace("</w:pPr>",`</w:pPr><w:bookmarkStart w:id="${f}" w:name="${d}"/>`).replace("</w:p>",`<w:bookmarkEnd w:id="${f}"/></w:p>`)})()),"目录"===b&&(l=!0,p=j.length),a+=1;continue}let w=ar(o),x=function(a){let b=/^\s*(\d+(?:\.\d+){0,2})([.、])\s+(.+)$/u.exec(a);return b?{level:Math.min(b[1].split(".").length-1,2),marker:`${b[1]}${b[2]}`,text:ar(b[3])}:null}(o),y=function(a){let b=/^\s*[-*+]\s+(.+)$/u.exec(a);return b?ar(b[1]):null}(o);if(!l&&x){let b=0===x.level?720:1===x.level?1080:1440,c=0===x.level?360:1===x.level?420:480;j.push(az(`${x.marker} ${x.text}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:b,hanging:c,spacingAfter:60})),a+=1;continue}if(!l&&y){j.push(az(`• ${y}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:720,hanging:360,spacingAfter:60})),a+=1;continue}let z=h.slice(a+1).find(a=>""!==a.trim()),A=/^!\[([^\]]*)\]\([^)]+\)\s*$/u.exec(z?.trim()??"")?.[1];if(!l&&A&&w===A){j.push(aG(w,e)),a+=1;continue}if(!l&&aD(o)&&z&&ap(z.trim())){j.push(aG(w,e)),d&&(d.ops.captionStyled+=1),a+=1;continue}let B=/^\*\*[^*]+\*\*\s*$/u.test(o)&&w.length<=40,C=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(o)||/^([一二三四五六七八九十]+)/u.test(w)||/^[一二三四五六七八九十]+、/u.test(w);j.push(l?function(a,b,c,d=9e3){let e=/^\s*\d+\.\d+\s+\S/u.test(a),f=az(ar(a),{bold:!e,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:e?30:80,indentLeft:420*!!e,align:"left"});return c?f.replace("</w:pPr>",`<w:tabs><w:tab w:val="right" w:leader="dot" w:pos="${d}"/></w:tabs></w:pPr>`).replace("</w:p>",`<w:r><w:tab/></w:r><w:fldSimple w:instr="PAGEREF ${c} \\h"><w:r><w:t></w:t></w:r></w:fldSimple></w:p>`):f}(o,e,n.get(w),c?.pageBox?.bodyWidth):az(w,{bold:C||B,size:B?Math.max(e.bodyHalfPoints+2,30):g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,align:B?"left":"both",firstLine:C||B?0:560,spacingBefore:B?120:80*!!C,spacingAfter:B?60:void 0})),a+=1}q();let r=j.join("");if(d){let b=aX(a,r);b.conserved||d.blockers.push({code:"content-not-conserved",line:0,message:`docx 渲染阶段存在未声明的正文改动(产物文本去标记比对):第 ${b.position} 字符附近分歧(入口「${b.sourceContext}」→ 产物「${b.productContext}」)`})}return r}async function aI(a,b,c,d=[],e=!0){a.folder("word")?.file("styles.xml",function(a){let b=ax(a),c=`w:ascii="${ab(b.fontBodyAscii)}" w:hAnsi="${ab(b.fontBodyAscii)}" w:eastAsia="${ab(b.fontBody)}" w:cs="${ab(b.fontBodyAscii)}"`,d=(a,d,e,f,g,h,i)=>`<w:style w:type="paragraph" w:styleId="${a}"><w:name w:val="${d}"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:uiPriority w:val="${9+f}"/><w:qFormat/><w:rPr><w:b/><w:rFonts ${c}/><w:sz w:val="${e}"/><w:szCs w:val="${e}"/></w:rPr><w:pPr><w:keepNext/><w:keepLines/><w:outlineLvl w:val="${f}"/><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:before="${g}" w:after="${h}"/>${i?`<w:jc w:val="${i}"/>`:""}</w:pPr></w:style>`;return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style>${d("Heading1","heading 1",Math.max(b.h1HalfPoints,24),0,260,180,"center")}${d("Heading2","heading 2",Math.max(b.h2HalfPoints,24),1,180,100)}${d("Heading3","heading 3",Math.max(b.h3HalfPoints,22),2,120,80)}<w:style w:type="paragraph" w:styleId="ListParagraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:uiPriority w:val="34"/><w:qFormat/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:style></w:styles>`}(c)),a.folder("word")?.file("settings.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:updateFields w:val="true"/><w:compat><w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/></w:compat></w:settings>'),e&&a.folder("word")?.file("footer.xml",`<?xml version="1.0" encoding="UTF-8"?><w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:pPr><w:jc w:val="center"/></w:pPr>${ay("第 ",{size:21})}<w:fldSimple w:instr="PAGE"/>${ay(" 页 / 共 ",{size:21})}<w:fldSimple w:instr="NUMPAGES"/>${ay(" 页",{size:21})}</w:p></w:ftr>`),a.folder("word")?.file("fontTable.xml",function(a){let b=ax(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="${ab(b.fontBody)}"><w:charset w:val="86"/><w:family w:val="roman"/></w:font><w:font w:name="${ab(b.fontBodyAscii)}"><w:family w:val="roman"/></w:font></w:fonts>`}(c)),a.folder("docProps")?.file("core.xml",function(a){let b=new Date().toISOString();return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${ab(a)}</dc:title><dc:creator>Customize Agent</dc:creator><cp:lastModifiedBy>Customize Agent</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">${b}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${b}</dcterms:modified></cp:coreProperties>`}(b)),a.folder("docProps")?.file("app.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Customize Agent</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>1.0</AppVersion></Properties>');let f=a.folder("word")?.folder("media");for(let a of d)f?.file(a.fileName,a.buffer);let g=a.file("word/_rels/document.xml.rels"),h=g?await g.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';for(let[a,b,c]of[["rStyle","http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles","styles.xml"],["rSettings","http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings","settings.xml"],["rFontTable","http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable","fontTable.xml"]])h.includes(b)||(h=h.replace("</Relationships>",`<Relationship Id="${a}" Type="${b}" Target="${c}"/></Relationships>`));for(let a of(e&&!h.includes('Id="rFooter"')&&(h=h.replace("</Relationships>",'<Relationship Id="rFooter" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer.xml"/></Relationships>')),d))h.includes(`Id="${a.relationshipId}"`)||(h=h.replace("</Relationships>",`<Relationship Id="${a.relationshipId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${a.fileName}"/></Relationships>`));a.folder("word")?.folder("_rels")?.file("document.xml.rels",h);let i=a.file("_rels/.rels"),j=i?await i.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>';j.includes("metadata/core-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rCore" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>')),j.includes("extended-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rApp" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>')),a.folder("_rels")?.file(".rels",j);let l=a.file("[Content_Types].xml"),m=l?await l.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/></Types>';for(let a of new Set(d.map(a=>k.extname(a.fileName).slice(1).toLowerCase()).filter(Boolean))){let b="jpg"===a||"jpeg"===a?"image/jpeg":"png"===a?"image/png":"gif"===a?"image/gif":"webp"===a?"image/webp":void 0;b&&!m.includes(`Extension="${a}"`)&&(m=m.replace("</Types>",`<Default Extension="${a}" ContentType="${b}"/></Types>`))}let n=[["/word/styles.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"],["/word/settings.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"],["/word/fontTable.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"],["/docProps/core.xml","application/vnd.openxmlformats-package.core-properties+xml"],["/docProps/app.xml","application/vnd.openxmlformats-officedocument.extended-properties+xml"]];for(let[a,b]of(e&&n.push(["/word/footer.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"]),n))m.includes(`PartName="${a}"`)||(m=m.replace("</Types>",`<Override PartName="${a}" ContentType="${b}"/></Types>`));a.file("[Content_Types].xml",m)}async function aJ(a,b,c,d,e=process.cwd(),f,g,h=!1){let i=async a=>{let b=await C().loadAsync(a),c=await p(b,h);return c.changedFamilies.length&&f?.notices.push({code:"docx-stage",message:`审阅中文显示使用随文档嵌入的Noto Sans CJK SC;替代${c.changedFamilies.join("、")},不宣称满足原指定字体要求。`}),c.embedded?b.generateAsync({type:"nodebuffer"}):a},j=function(a,b){let c=String(a||"").trim();if(!c)return{};let d=(0,X.n7)(c,[k.resolve(b),k.resolve((0,D.Gl)(b),"assets"),k.resolve(z.tmpdir()),k.join((0,v.J0)(),"export-templates")],{mustExist:!0,requireFile:!0});return d.ok?".docx"!==k.extname(d.absolute).toLowerCase()?{rejected:{path:c,reason:"模板必须是 .docx 文件"}}:{resolved:d.absolute}:{rejected:{path:c,reason:(0,X.vZ)(d.reason)}}}(d,e);if(j.rejected){let d=`DOCX 模板路径被拒绝(${j.rejected.reason}):${j.rejected.path}。已回退标准生成路径(正文正确、未套模板样式)。允许的来源:本项目目录 / 生成资产目录 / 导出模板目录。`;console.error(`[export] ${d}`);let h=await aL(a,b,c,void 0,e,f,d,g);return h.buffer=await aK(await i(h.buffer),f),h}let l=await aL(a,b,c,j.resolved,e,f,void 0,g);return l.buffer=await aK(await i(l.buffer),f),l}async function aK(a,b){let c=await C().loadAsync(a),d=c.file("word/document.xml");if(!d)return a;let e=await d.async("string");if(!/PAGEREF _doc_heading_/u.test(e))return a;let f=new Map;for(let a of e.matchAll(/<w:p\b[^>]*>[\s\S]*?<\/w:p>/gu)){let b=/<w:bookmarkStart\b[^>]*w:name="(_doc_heading_\d+)"/u.exec(a[0])?.[1];b&&f.set(b,aV(a[0]).replace(/\n/gu,""))}let g=(a,b)=>a.replace(/(<w:fldSimple w:instr="PAGEREF (_doc_heading_\d+) [^"]*">)[\s\S]*?<\/w:fldSimple>/gu,(a,c,d)=>`${c}<w:r><w:t>${b[f.get(d)??""]??""}</w:t></w:r></w:fldSimple>`);for(let d=0;d<3;d+=1){let d=await K(a);if(!d.headingPages||!Object.keys(d.headingPages).length)return b?.notices.push({code:"toc-reconcile",message:`DOCX目录保留可更新的原生页码域,实际页码缓存未取得:${d.unavailableReason??"渲染器没有输出章节书签"}`}),a;let f=g(e,d.headingPages);if(f===e)return a;e=f,c.file("word/document.xml",e),a=await c.generateAsync({type:"nodebuffer"})}return c.file("word/document.xml",g(e,{})),b?.notices.push({code:"toc-reconcile",message:"DOCX目录页码缓存的实际排版校验未收敛,已清空缓存;原生PAGEREF域保留,须更新后复核"}),c.generateAsync({type:"nodebuffer"})}async function aL(a,b,c,d,e,f,g,h){let j=h?.headersFooters!=="forbidden",k=aw(c),l={projectRoot:e,images:[],pageBox:k,monoColor:h?.monoColor,...f?{audit:f}:{}},m=await aB(b,e,f);m.size>0&&(l.rasterizedSvg=m);let n=aH(b,c,l,f),o={expected:[...b.matchAll(/!\[[^\]]*\]\(([^)]+)\)/gu)].length,embedded:l.images.length,...l.imageLayoutIssues?.length?{layoutIssues:l.imageLayoutIssues}:{}},p=g;if(d&&i.existsSync(d)){let b=await C().loadAsync(i.readFileSync(d)),e=b.file("word/document.xml");if(e){let f=await e.async("string");if(/\{\{content\}\}/u.test(f))return b.file("word/document.xml",function(a,b){let c=b?.page;if(!c)return a;let d=aw(b),e=`<w:pgSz w:w="${d.width}" w:h="${d.height}"${d.landscape?' w:orient="landscape"':""}/>`,f=a=>{let b=a;c.paper&&(b=/<w:pgSz\b[^>]*\/>/u.test(b)?b.replace(/<w:pgSz\b[^>]*\/>/u,e):b.replace("</w:sectPr>",`${e}</w:sectPr>`));let d=/<w:pgMar\b[^>]*\/>/u.exec(b)?.[0]??"<w:pgMar/>";for(let[a,b]of[["marginTop","top"],["marginRight","right"],["marginBottom","bottom"],["marginLeft","left"],["gutter","gutter"]])if(void 0!==c[a]){let e=` w:${b}="${av(c[a],0)}"`,f=RegExp(`\\s+w:${b}="[^"]*"`,"u");d=f.test(d)?d.replace(f,e):d.replace("/>",`${e}/>`)}return/<w:pgMar\b[^>]*\/>/u.test(b)?b.replace(/<w:pgMar\b[^>]*\/>/u,d):b.replace("</w:sectPr>",`${d}</w:sectPr>`)};return/<w:sectPr\b/u.test(a)?a.replace(/<w:sectPr\b[^>]*>[\s\S]*?<\/w:sectPr>/gu,f):a.replace("</w:body>",`${f("<w:sectPr></w:sectPr>")}</w:body>`)}(f.replace(/\{\{title\}\}/gu,ab(a)).replace(/\{\{content\}\}/gu,n),c)),await aI(b,a,c,l.images,j),{buffer:await b.generateAsync({type:"nodebuffer"}),imageReceipt:o};console.error(`[export] 模板缺少 {{content}} 占位符,已回退标准生成路径(正文正确、未套模板样式):${d}`),p=`模板缺少 {{content}} 占位符,已回退标准生成路径(未套模板样式)`}}let q=c?.page||{},r=new(C());return r.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>${n}<w:sectPr>${j?'<w:footerReference w:type="default" r:id="rFooter"/>':""}<w:pgSz w:w="${k.width}" w:h="${k.height}"${k.landscape?' w:orient="landscape"':""}/><w:pgMar w:top="${av(q.marginTop,2.5)}" w:right="${av(q.marginRight,2)}" w:bottom="${av(q.marginBottom,2)}" w:left="${av(q.marginLeft,2)}"${q.gutter?` w:gutter="${av(q.gutter,0)}"`:""}/></w:sectPr></w:body></w:document>`),await aI(r,a,c,l.images,j),{buffer:await r.generateAsync({type:"nodebuffer"}),templateWarning:p,imageReceipt:o}}function aM(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function aN(a){return a.replace(/<[^>]*>/gu,"").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/ | /gu," ").trim()}function aO(a){let b=new Map,c=new Set,d=0;return a.replace(/<(h[23])([^>]*)>([\s\S]*?)<\/\1>/gu,(a,e,f,g)=>{let h=aN(g);if("目录"===h)return a;let i=`document-heading-${++d}`;return b.has(h)?c.add(h):b.set(h,i),`<${e}${f} id="${i}">${g}</${e}>`}).replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>|<h2[^>]*>)/u,(a,d,e,f)=>{let g=e.split(/<br\s*\/?>|<\/p>|<\/li>/gu).flatMap(a=>{let d=aN(a);if(!d)return[];let e=c.has(d)?void 0:b.get(d),f=/^\d+\.\d+\s/u.test(d)?"toc-section":"toc-chapter";return[`<p class="${f}">${e?`<a href="#${e}"><span>${ab(d)}</span><span class="toc-page" data-toc-title="${ab(d)}"></span></a>`:ab(d)}</p>`]});return`<section class="document-toc">${d}${g.join("")}</section>${f}`})}function aP(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function aQ(a){return a.split(/\r?\n/u).map(a=>/^(#{2,4})\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({level:a[1].length,title:ar(a[2])})).filter(a=>a.title&&"目录"!==a.title)}function aR(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a]||"",e=/^(`{3,}|~{3,})/u.exec(d.trim());if(e){let b=RegExp(`^${e[1][0]}{${e[1].length},}\\s*$`,"u");for(a++;a<c.length&&!b.test(c[a].trim());)a++;continue}if(!ap(d))continue;let f=c[a+1]?.trim()===""?a+2:a+1;if(f<c.length&&ao(c[f]||"")){let e=[],g=f+1;for(;g<c.length&&ap(c[g]||"");)e.push(c[g]||""),g+=1;0===e.length&&b.push(`第 ${a+1} 行表格只有表头,没有数据行`);let h=[d,...e].map(a=>aq(a).length);Math.max(...h)-Math.min(...h)>2&&b.push(`第 ${a+1} 行附近表格列数差异较大,导出版式可能异常`),a=g-1;continue}a+1<c.length&&ap(c[a+1]||"")&&b.push(`第 ${a+1} 行附近疑似裸表格(缺少表头或分隔线),导出版式可能异常`)}return(a.match(/```/gu)||[]).length%2==1&&b.push("存在未闭合代码块,可能影响后续内容导出"),[...new Set(b)].slice(0,20)}function aS(a,b){let c=aP(a),d=b?aP(b):void 0,e=[];c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格");let f=aQ(a);0===f.length&&e.push("正文缺少章节标题"),f.some((a,b)=>b>0&&a.level-f[b-1].level>1)&&e.push("标题层级存在跳级,可能影响导出目录和导航");let g=a.split(/\r?\n/u).map(a=>ar(a)).filter(a=>a.length>0&&!/^#+\s/u.test(a));return g.some(a=>a.length<=1)&&e.push("正文存在孤立字或残缺段落"),g.some(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a))&&e.push("正文存在疑似截断句或未完结段落"),g.some(a=>a.length>380)&&e.push("正文存在过长段落,建议拆分以改善导出版式"),e.push(...aR(a)),[...new Set(e)]}function aT(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\r?\n/gu,"\n").split("\n").filter(a=>!ao(a.trim())&&!/^\s*```/u.test(a)).map(a=>ar(a.replace(/^#{1,6}\s+/u,"").replace(/^\s*[-*+]\s+/u,""))).join("").replace(/(?<!\\)\|/gu,"").replace(/\s+/gu,"")}function aU(a,b){if(a===b)return{conserved:!0};let c=0,d=Math.min(a.length,b.length);for(;c<d&&a[c]===b[c];)c+=1;return{conserved:!1,position:c,sourceContext:a.slice(Math.max(0,c-20),c+20),productContext:b.slice(Math.max(0,c-20),c+20)}}function aV(a){return[...a.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>(a[1]||"").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/&/gu,"&")).join("\n")}function aW(a){return aT(a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]*)\]\([^)]*\)/gu,"$1").replace(/\[\[PAGE_BREAK\]\]/gu,"").replace(/[•·]/gu,"").replace(RegExp(aE,"gu"),""))}function aX(a,b){return aU(aW(a),aW(aV(b)))}function aY(a,b){let c=$();for(let b of aR(a))c.blockers.push({code:"content-not-conserved",line:0,message:b});for(let b of(aT((0,U._D)(a).markdown)!==aT(a)&&c.notices.push({code:"toc-reconcile",message:"目录条目与正文章节不一致;审阅文件保留原稿,须在正文模型中修正"}),(0,y.q)(a)))c.blockers.push({code:"content-not-conserved",line:b.rowLine,message:`表格字段不守恒:${b.actual}/${b.expected},不能在渲染时补造字段`});return{markdown:a,baselineMarkdown:b??"",issues:aS(a,b),audit:c}}async function aZ(a,b,c,d,e=!1,f){return ah(function(a,b,c,d=!1){let e=ax(c),f=aO(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${ab(a)}</title><style>${function(a,b=!1){return`
|
|
1
|
+
"use strict";(()=>{var a={};a.id=8644,a.ids=[8644],a.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))))}},15751:a=>{a.exports=require("xlsx")},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)()},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},55540:(a,b,c)=>{c.r(b),c.d(b,{config:()=>bo,default:()=>bn,handler:()=>bq});var d={};c.r(d),c.d(d,{EXPORT_RECEIPT_HEADERS:()=>an,__documentExportTest__:()=>bj,config:()=>am,default:()=>bk});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c.n(i),k=c(76760),l=c.n(k),m=c(77598);let n="Noto Sans CJK SC";function o(){let a=[l().resolve(process.cwd(),"public/fonts"),l().resolve(process.cwd(),"apps/server/public/fonts")].map(a=>l().join(a,"NotoSansCJKsc-Regular.otf")).find(a=>j().existsSync(a));if(!a)throw Error("随服务发布的中文字体资源缺失,不能把缺字产物当作完整导出");return a}async function p(a,b){let c=Object.keys(a.files).filter(a=>/^word\/(?:document|styles|footer\d*|header\d*)\.xml$/u.test(a)),d=new Set,e=!1;for(let f of c){let c=a.file(f);if(!c)continue;let g=await c.async("string"),h=g.replace(/<w:rFonts\b[^>]*\/?>(?:<\/w:rFonts>)?/gu,a=>{let c=/w:eastAsia="([^"]+)"/u.exec(a)?.[1];return c===n?(e=!0,a):b?(e=!0,c&&d.add(c),a.replace(/\s+w:eastAsia(?:Theme)?="[^"]*"/gu,"").replace(/\/?>(?:<\/w:rFonts>)?$/u,` w:eastAsia="${n}"/>`)):a});h!==g&&a.file(f,h)}if(!e)return{embedded:!1,changedFamilies:[]};let f=o(),g=j().readFileSync(f),h=JSON.parse(j().readFileSync(l().join(l().dirname(f),"font-manifest.json"),"utf8")),i=(0,m.createHash)("sha256").update(g).digest("hex");if(i!==h.sha256||0!==h.embeddingFsType)throw Error("中文字体资源与可嵌入的发布清单不一致");let k=(0,m.randomUUID)(),p=Buffer.from(k.replace(/-/gu,""),"hex").reverse(),q=Buffer.from(g);for(let a=0;a<32;a++)q[a]^=p[a%16];a.file("word/fonts/NotoSansCJKsc-Regular.odttf",q);let r="http://schemas.openxmlformats.org/officeDocument/2006/relationships",s=await a.file("word/fontTable.xml")?.async("string")??'<w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>';s.includes("xmlns:r=")||(s=s.replace("<w:fonts",`<w:fonts xmlns:r="${r}"`));let t=`<w:font w:name="${n}"><w:family w:val="swiss"/><w:embedRegular r:id="portableCjkFont" w:fontKey="{${k.toUpperCase()}}"/></w:font>`;s=s.replace(RegExp(`<w:font w:name="${n}"[\\s\\S]*?</w:font>`,"gu"),""),s=/<\/w:fonts>/u.test(s)?s.replace("</w:fonts>",`${t}</w:fonts>`):s.replace("/>",`>${t}</w:fonts>`),a.file("word/fontTable.xml",s);let u="word/_rels/fontTable.xml.rels",v=await a.file(u)?.async("string")??'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';v=v.replace(/<Relationship\b[^>]*Id="portableCjkFont"[^>]*\/>/gu,""),a.file(u,v.replace("</Relationships>",`<Relationship Id="portableCjkFont" Type="${r}/font" Target="fonts/NotoSansCJKsc-Regular.odttf"/></Relationships>`));let w=await a.file("[Content_Types].xml").async("string");w.includes('Extension="odttf"')||(w=w.replace("</Types>",'<Default Extension="odttf" ContentType="application/vnd.openxmlformats-officedocument.obfuscatedFont"/></Types>')),a.file("[Content_Types].xml",w);let x=await a.file("word/settings.xml")?.async("string");return x&&!x.includes("embedTrueTypeFonts")&&a.file("word/settings.xml",x.replace("</w:settings>","<w:embedTrueTypeFonts/></w:settings>")),{embedded:!0,changedFamilies:[...d],sha256:i}}var q=c(73005),r=c(65020),s=c(47353);c(14911),c(21456),c(92736),c(82e3),c(78936),c(44967),c(46788),c(29815),new WeakMap,new WeakMap,new WeakMap,new WeakMap;var t=c(16698);RegExp(`(?:${/压实(?:度)?系数|摩擦系数|泊松比|抗滑系数|容积率/u.source})[\\s应宜为不得小大低高于少超过达到=::≥≤><]{0,18}([+−-]?\\d+(?:\\.\\d+)?)(?![\\d.%%]|\\s*(?:${r.RD}))`,"gu"),new WeakMap,new WeakMap,new WeakMap,new t.AsyncLocalStorage,new t.AsyncLocalStorage;let u=a=>"string"==typeof a?a.replace(/\r\n/gu,"\n").split("\n").map(a=>a.trim()).join("\n"):Array.isArray(a)?a.map(u):(a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0)(a)?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,u(b)])):a;c(21957),c(36487);let v=a=>a.replace(/\\/gu,"\\\\").replace(/\|/gu,"\\|").replace(/\r?\n/gu,"<br>"),w=a=>JSON.stringify(a.replace(/\r?\n/gu," "));var x=c(13380),y=c(88297),z=c(745),A=c(42165),B=c(85497),C=c(4053);let D=a=>(0,m.createHash)("sha256").update(a).digest("hex"),E=a=>{throw Error("CONSTRUCTION_FIGURE_IDENTITY_INVALID:"+a)},F=(a,b)=>{let c=j().realpathSync(a);return((a,b)=>{let c=l().relative(b,a);return!!c&&!c.startsWith("..")&&!l().isAbsolute(c)})(c,j().realpathSync(b))||E("资产或工作库不在本项目生成根内"),c};async function G(a,b,c,d){let e=a?.assets??[],f=e.filter(a=>"construction-figure"===a.artifactKind),g=e.filter(a=>"construction-figure-manifest"===a.artifactKind);if(!a||!f.length&&!g.length)return{bytes:new Map,receipts:[]};let h=[],i=await (0,B.c0)();i.walkTokens(i.lexer(d),a=>{if("image"===a.type&&h.push(a.href),"html"===a.type)for(let b of(0,B.C4)(a.text))"img"===b.name&&b.attributes.src&&h.push(b.attributes.src)});let k=l().resolve(c,"assets","figures"),m=[];for(let b of h)try{let d=/^\/api\/documents\/generated\/([^/]+)\/figure\/(author-graph-[a-f0-9]{64}\.svg)$/u.exec(new URL(b,"http://local.invalid").pathname);if(d){m.push({file:l().join(k,d[2]),documentId:d[1]});continue}let e=decodeURIComponent(b.split(/[?#]/u)[0]);if(!e.startsWith("generatedDocuments/assets/"))continue;let f=l().resolve(c,"assets",e.slice(26));l().dirname(f)===k&&/^author-graph-[a-f0-9]{64}\.svg$/u.test(l().basename(f))&&m.push({file:f,documentId:a.id})}catch{}if(!m.length)return{bytes:new Map,receipts:[]};try{a.runId&&1===g.length||E("缺少本记录唯一的实际图件清单");let d=g[0];d.runId===a.runId&&d.path&&d.sha256||E("图件清单未绑定本运行");let e=F(d.path,l().join(c,"runs",a.runId,"artifacts")),h=j().readFileSync(e);D(h)!==d.sha256&&E("图件清单字节与记录SHA不一致");let i=JSON.parse(h.toString("utf8"));i.runId===a.runId&&i.documentId===a.id&&i.documentHash===(0,A.Sl)(a.draft?.chapters??[],a.markdown)&&Array.isArray(i.receipts)&&i.sourceBindingHash===(0,z.Fu)(i.receipts)||E("图件清单与运行、正文或源绑定不符");let k=i.workspace?.identity,n=a.reviewMetadata?.contractQuality??a.draft?.reviewMetadata?.contractQuality;k&&k.projectId===b&&k.documentId===a.id&&k.contractId===n?.contractId&&k.sourceSnapshotId===n?.projectSnapshotId||E("图件源工作库身份不符");let o=[],p=new Map;for(let{file:b,documentId:d}of new Map(m.map(a=>[a.documentId+":"+a.file,a])).values()){d!==a.id&&E("图件来自其他文档");let e=f.find(c=>c.runId===a.runId&&c.path&&l().resolve(c.path)===l().resolve(b)),g=e?.sha256||E("实际图件没有本记录资产SHA"),h=i.receipts.filter(a=>l().resolve(a.file)===l().resolve(b));(!h.length||h.some(a=>a.svgHash!==g))&&E("实际图件没有本记录源清单绑定");let k=F(b,l().join(c,"assets","figures")),m=j().readFileSync(k);(D(m)!==g||l().basename(b)!==`author-graph-${g}.svg`)&&E("图件实际字节与内容身份不一致"),p.set(l().resolve(b),m),o.push(...h)}return y.l.inspectEntityHeads(F(i.workspace.file,c),k,o.map(a=>a.entityId),(a,b)=>{let c=o.map((b,c)=>{let d=a[c];(!d||d.deleted||"writing-unit"!==d.kind||d.value?.kind!=="figure"||d.version!==b.entityVersion||(0,z.Fu)(d)!==b.entityHash)&&E("图件所引源单元已改版、删除或身份不符");let e=(0,C.iC)(d);return{...e,references:e.references.filter(a=>"evidence"!==a.kind),assertions:e.assertions.filter(a=>"evidence"!==a.reference.kind)}}),d=(0,C.YK)({units:c,entityIdFor:(a,b)=>o[b].entityId,currentEntityVersion:b.currentEntityVersion,certificateValid:b.certificateCurrent,evidenceExists:()=>!1}).filter(a=>a.needsRecheck);d.length&&E("图件实际引用的决定或计算证书已失效:"+d.map(a=>a.entityId+":"+a.states.filter(a=>"current"!==a.state).map(a=>a.reason).join(";")).join(";"))}),{bytes:p,receipts:o}}catch(a){if(a instanceof Error&&a.message.startsWith("CONSTRUCTION_FIGURE_IDENTITY_INVALID"))throw a;return E(a instanceof Error?a.message:String(a))}}var H=c(13577),I=c(59339),J=c(69977),K=c(45408),L=c(19045),M=c(28013),N=c(61485),O=c(98459);function P(a){throw Error("CONSTRUCTION_DELIVERY_IDENTITY_INVALID:"+a)}var Q=c(29611),R=c(51342),S=c(12152);function T(a){let b=a.trim(),c=[],d="",e=0,f=!1;for(let a of b)(f="|"===a&&e%2==0)?(c.push(d.trim()),d=""):d+=a,e="\\"===a?e+1:0;return c.push(d.trim()),b.startsWith("|")&&c.shift(),f&&c.pop(),c}var U=c(48161),V=c(88194),W=c.n(V),X=c(85738),Y=c(56766),Z=c(44533),$=c(25821),_=c(6158),aa=c(69970);let ab={structure:"结构完整性",table:"表格质量",fact_consistency:"数值/事实一致性",evidence_coverage:"证据覆盖",professional_chain:"专业链条",control_loop:"控制闭环",format:"格式规范",style:"文风与模板化",scope:"范围与商务边界"},ac={local_deterministic:"确定性修复器(已执行未收敛:核对该检测器与修复器口径是否同源)",llm_repairable:"LLM 定向修复(自动轮次已耗尽:按定位与建议人工修订,或补齐锚点证据后续修重试)",manual_review:"人工复核(自动修复链不消费该类缺陷)",not_repair_needed:"系统判定无需修复(若仍阻断:复核检测器是否误报)"};var ad=c(3410);let ae=a=>(0,m.createHash)("sha256").update(a).digest("hex"),af=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function ag(a,b,c){if(!b)return{};let d=(0,x.HM)(a,c,b);if(!j().existsSync(d))return{};try{let a=j().readFileSync(d);return{data:af(JSON.parse(a.toString("utf8"))),sha256:ae(a)}}catch{return{}}}function ah(a){return Array.isArray(a)?a.flatMap(a=>{let b=af(a);return"string"==typeof b?.id&&"string"==typeof b.title?[{id:b.id,title:b.title}]:[]}):[]}var ai=c(63072),aj=c(191),ak=c(16006),al=c(89900);let am={api:{bodyParser:{sizeLimit:"50mb"},responseLimit:!1}},an={notDeliverable:"X-Export-Not-Deliverable",exportPurpose:"X-Export-Purpose",bodySha256:"X-Export-Body-Sha256",issuesReport:"X-Export-Issues-Report",gatePassed:"X-Export-Gate-Passed",gateBinding:"X-Export-Gate-Binding",gateIssues:"X-Export-Gate-Issues",gateIssueCount:"X-Export-Gate-Issue-Count",contentIssues:"X-Export-Content-Issues",renderAudit:"X-Export-Render-Audit",figureInline:"X-Export-Figure-Inline",templateWarning:"X-Export-Template-Warning",pageLimit:"X-Export-Page-Limit",pdfPageCount:"X-PDF-Page-Count"};function ao(){return{mode:"enforce",blockers:[],notices:[],ops:{headerlessTableRendered:0,captionStyled:0}}}function ap(a){return{mode:a.mode,blockerCount:a.blockers.length,blockerCodes:[...new Set(a.blockers.map(a=>a.line>0?`${a.code}@L${a.line}`:a.code))].slice(0,20),notices:a.notices.map(a=>a.message).slice(0,10),ops:{...a.ops},opsTotal:Object.values(a.ops).reduce((a,b)=>a+(b??0),0)}}function aq(a){return a.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document"}function ar(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let as={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function at(a){return as[k.extname(a).toLowerCase()]||""}function au(a,b){let c=k.relative(b,a);return!!c&&!c.startsWith("..")&&!k.isAbsolute(c)}function av(a,b=(0,Z.aY)(),c){if(c&&/^https?:/iu.test(a))try{let d=/^\/api\/documents\/generated\/[^/]+\/figure\/(author-graph-[a-f0-9]{64}\.svg)$/u.exec(new URL(a).pathname),e=d&&k.resolve((0,X.Gl)(b),"assets","figures",d[1]);if(e&&c.has(e))return e}catch{}if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let d=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?.*)?$/u.exec(a)?.[1];if(d){let a=k.resolve((0,X.Gl)(b),"assets","figures"),e=k.resolve(a,d);return au(e,a)&&(c?.has(e)||i.existsSync(e)&&i.statSync(e).isFile())?e:null}let e=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!e||k.isAbsolute(e))return null;let f=k.resolve((0,Z.NW)(b)),g=k.resolve((0,X.Gl)(b),"assets");return[e.startsWith("generatedDocuments/assets/")?k.resolve(g,e.replace(/^generatedDocuments\/assets\//u,"")):"",k.resolve(f,e)].filter(Boolean).find(a=>{let b=k.resolve(a);return(au(b,f)||au(b,g))&&!!at(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function aw(a,b){let c=new Map,d=0,e=Math.round(8),f=Math.round(32);return g=>{let h=av(g,a,b);if(!h)return null;let j=b?.get(h)??i.readFileSync(h);if(j.length>8388608)return{reason:`超过单图内联上限 ${e}MB`};if(d+j.length>0x2000000)return{reason:`全篇内联总量超过 ${f}MB 上限`};let k=c.get(h);return k||(k=`data:${at(h)};base64,${j.toString("base64")}`,c.set(h,k),d+=j.length),{dataUrl:k}}}function ax(a,b=(0,Z.aY)(),c){let d=aw(b,c?.verifiedFigures);return(0,B.DN)(a,a=>{let b=a.attributes.src??"",e=a.raw,f=d(b);return f?"reason"in f?(c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${b}(原因:${f.reason},产物中为断图)`}),e):(0,B.ht)(a,f.dataUrl):(/^\//u.test(b.trim())&&c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${b}(原因:未在知识库/生成资产根内找到,产物中为断图)`}),e)})}let ay=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?[^#]*)?$/u;function az(a){let b=/^data:(image\/(?:png|jpeg|gif|webp|svg\+xml));base64,([A-Za-z0-9+/]+={0,2})$/u.exec(a);if(!b||b[2].length>4*Math.ceil(8388608/3))return null;let c=Buffer.from(b[2],"base64");return!c.length||c.length>8388608||c.toString("base64")!==b[2]||"image/svg+xml"===b[1]&&/<script\b|<foreignObject\b|\son\w+\s*=|(?:href|xlink:href)\s*=\s*["'](?!#)|url\(\s*(?!#)|<!ENTITY/iu.test(c.toString("utf8"))?null:{buffer:c,contentType:b[1]}}let aA=/^[a-z][a-z0-9+.-]*:\/\/[^/]+(\/api\/documents\/generated\/[^/]+\/figure\/[A-Za-z0-9._-]+\.svg(?:\?[^#]*)?)$/iu,aB=/!\[([^\]]*)\]\(\s*(?:<([^>\s]+)>|([^()\s]+))(\s+(?:"[^"]*"|'[^']*'))?\s*\)/gu;function aC(a){let b,c=[],d=0,e="";for(let f of a.split("\n")){let a=/^\s{0,3}(`{3,}|~{3,})/u.exec(f);a&&(void 0===b?(b=d,e=a[1][0]):a[1][0]===e&&(c.push({start:b,end:d+f.length}),b=void 0)),d+=f.length+1}return void 0!==b&&c.push({start:b,end:a.length}),c}function aD(a,b=(0,Z.aY)(),c){let d=aw(b,c?.verifiedFigures),e={inlined:0,failed:[]},f=new Set,g=aC(a),h=(a,b,c)=>{f.has(b)||(f.add(b),e.failed.push({name:a,src:b,reason:c}))},i=(a,b)=>a.trim()||ay.exec(b.trim())?.[1]||aA.exec(b.trim())?.[1]?.split("/").pop()||b.trim().split("/").pop()||b.trim(),j=a=>{let b=a.trim();if(!b||/^data:/iu.test(b))return{action:"keep"};let c=aA.exec(b)?.[1]??b;if(c===b&&/^[a-z][a-z0-9+.-]*:/iu.test(b))return/^https?:/iu.test(b)?{action:"keep-report",reason:"外部图源(导出链不联网,无法内联)"}:{action:"keep"};let e=d(c);if(!e){let a=ay.exec(c)?.[1],b=a?`图件文件不在生成资产根内(${a})`:"未在知识库/生成资产根内找到该图";return c.startsWith("/")?{action:"mark",reason:b}:{action:"keep-report",reason:b}}return"reason"in e?{action:"mark",reason:e.reason}:{action:"inline",dataUrl:e.dataUrl}},k=a.replace(aB,(a,b,c,d,f,k,l)=>{if(g.some(a=>k>=a.start&&k<a.end))return a;let m=(c??d??"").trim(),n=j(m);if("keep"===n.action)return a;let o=i(b,m);if("inline"===n.action)return e.inlined+=1,``;if(h(o,m,n.reason),"keep-report"===n.action)return a;let p=`图件未内联:${o}(原因:${n.reason})——请从成稿预览或 HTML/DOCX 交付件取图`;return 0===k||"\n"===l[k-1]?`> ${p}`:`【${p}】`}),l=aC(k);for(let a of(k=(0,B.DN)(k,a=>{let b=a.attributes.src??"",c=a.raw;if(l.some(b=>a.start>=b.start&&a.start<b.end))return c;let d=j(b);return"keep"===d.action?c:"inline"===d.action?(e.inlined+=1,(0,B.ht)(a,d.dataUrl)):(h(i("",b),b,d.reason),"keep-report"===d.action)?c:`【图件未内联:${i("",b)}(原因:${d.reason})】`}),e.inlined>0&&c?.notices.push({code:"figure-inline",message:`MD 图件内联:${e.inlined} 张已内联为 data: URI(与 HTML/PDF 同源解析;MD 交付件不再依赖 /api/... 图件 URL)`}),e.failed.slice(0,10)))c?.notices.push({code:"figure-inline",message:`MD 图件未内联:${a.name}(原因:${a.reason})`});return{markdown:k,report:e}}function aE(a){return/(?<!\\)\|/u.test(a)&&aG(a).every(a=>/^:?-{3,}:?$/u.test(a))}function aF(a){let b=a.trim();return!(!b||/^#{1,6}\s+/u.test(b)||aE(b))&&(b.match(/(?<!\\)\|/gu)||[]).length>=1}function aG(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split(/(?<!\\)\|/u).map(a=>a.replace(/\\\|/gu,"|").trim())}function aH(a){return a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/(\*\*|__)([\s\S]*?)\1/gu,"$2").replace(/(?<![\w\d])([*_])(?=\S)(.+?)\1(?![\w\d])/gu,"$2").replace(/`([^`]+)`/gu,"$1").replace(/~~(.+?)~~/gu,"$1").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function aI(a){return a.split(",")[0].replace(/["'“”]/gu,"").trim()}function aJ(a){let b=aI(a);return({宋体:"SimSun",仿宋:"FangSong",仿宋_GB2312:"FangSong_GB2312",黑体:"SimHei",楷体:"KaiTi",楷体_GB2312:"KaiTi_GB2312",微软雅黑:"Microsoft YaHei"})[b]||b}function aK(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function aL(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function aM(a){let b=a?.page??{},c=(b.paper??"A4").trim(),d=/\blandscape\b/iu.test(c),e=c.replace(/\s+(?:landscape|portrait)\s*$/iu,"").toUpperCase(),f={A3:[16838,23811],A4:[11906,16838],A5:[8391,11906],B5:[9978,14173],LETTER:[12240,15840],LEGAL:[12240,20160],TABLOID:[15840,24480]},g=/^(\d+(?:\.\d+)?(?:mm|cm|in|pt))\s+(\d+(?:\.\d+)?(?:mm|cm|in|pt))$/iu.exec(c);if(!g&&!f[e])throw Error(`DOCX尚未支持指定纸张:${c};不能静默换成A4`);let[h,i]=g?[aL(g[1],21),aL(g[2],29.7)]:f[e]??f.A4;d&&([h,i]=[i,h]);let j=h-aL(b.marginLeft,2)-aL(b.marginRight,2)-aL(b.gutter,0),k=i-aL(b.marginTop,2.5)-aL(b.marginBottom,2.5)-560;if(j<=0||k<=0)throw Error("纸张和页边距没有可用正文区域");return{width:h,height:i,landscape:d,bodyWidth:j,maxImageWidthPx:Math.min(620,j/15),maxImageHeightPx:k/15}}function aN(a){let b=function(a){let b=a?.page||{},c=a?.typography||{},d=a2(b.paper,"A4"),e=a2(b.marginTop,"24mm"),f=a2(b.marginRight,"18mm"),g=a2(b.marginBottom,"22mm"),h=a2(b.marginLeft,"18mm"),i=c.fontFamily||"SimSun, 宋体, serif",j=c.bodyFont||c.fontFamily||"SimSun, 宋体, serif",k=c.headingFont||c.fontFamily||"SimSun, 宋体, serif",l=c.lineHeight||"18pt";return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,bodyFontFamily:j,headingFontFamily:k,lineHeight:l,titleSize:c.titleSize||"22pt",bodySize:c.bodySize||"12pt"}}(a),c=a?.typography||{},d=c.bodySize?aK(c.bodySize,12):12,e=c.titleSize?aK(c.titleSize,22):22,f=c.headingSize?aK(c.headingSize,15):15,g=c.headingSize?aK(c.headingSize,14):14,h=c.lineHeight?aK(c.lineHeight,18):18,i=c.headingFont?c.headingFont:c.fontFamily?c.fontFamily:"黑体",j=c.bodyFont||c.fontFamily||"宋体";return{...b,bodyPt:d,h1Pt:e,h2Pt:f,h3Pt:g,linePt:h,bodyHalfPoints:Math.round(2*d),h1HalfPoints:Math.round(2*e),h2HalfPoints:Math.round(2*f),h3HalfPoints:Math.round(2*g),lineTwips:Math.round(20*h),fontHeading:aI(i),fontHeadingAscii:aJ(i),fontBody:aI(j),fontBodyAscii:aJ(j),bodyCss:`${d}pt`,h1Css:`${e}pt`,h2Css:`${f}pt`,h3Css:`${g}pt`,lineCss:`${h}pt`}}function aO(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${ar(d)}" w:hAnsi="${ar(d)}" w:eastAsia="${ar(c)}" w:cs="${ar(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${ar(a)}</w:t></w:r>`}function aP(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:"",b.hanging?`w:hanging="${b.hanging}"`:""].filter(Boolean).join(" "),d=[b.styleId?`<w:pStyle w:val="${ar(b.styleId)}"/>`:"",b.keepNext?"<w:keepNext/>":"",!1===b.wordWrap?'<w:wordWrap w:val="0"/>':"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`,c?`<w:ind ${c}/>`:"",b.align?`<w:jc w:val="${b.align}"/>`:"","number"==typeof b.outlineLevel?`<w:outlineLvl w:val="${b.outlineLevel}"/>`:""].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${aO(a,b)}</w:p>`}function aQ(a,b){if("image/png"===b&&a.length>=24&&"PNG"===a.toString("ascii",1,4))return{width:a.readUInt32BE(16),height:a.readUInt32BE(20)};if("image/jpeg"===b){let b=2;for(;b+9<a.length&&255===a[b];){let c=a[b+1],d=a.readUInt16BE(b+2);if(c>=192&&c<=195)return{height:a.readUInt16BE(b+5),width:a.readUInt16BE(b+7)};b+=2+d}}return{width:640,height:360}}async function aR(a,b,d,e=!1){let f,g,h,j=new Map,l=new Map;for(let c of a.matchAll(/!\[[^\]]*\]\(([^)\s]+)[^)]*\)/gu)){let a=av(c[1].trim(),b,d?.verifiedFigures);a&&".svg"===k.extname(a).toLowerCase()&&l.set(a,d?.verifiedFigures?.get(a)??i.readFileSync(a));let e=az(c[1].trim());e?.contentType==="image/svg+xml"&&l.set(c[1].trim(),e.buffer)}if(0===l.size)return j;try{let a=await Promise.resolve().then(c.t.bind(c,28183,23)),b=[process.env.CUSTOMIZE_CJK_FONT,o(),"/System/Library/Fonts/STHeiti Light.ttc","/System/Library/Fonts/Supplemental/Songti.ttc","/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc","/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf","C:\\Windows\\Fonts\\msyh.ttc"].filter(a=>!!a);if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let c of b)if(i.existsSync(c)&&a.GlobalFonts.registerFromPath(c,"Noto Sans CJK SC"))break}if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let b of["Microsoft YaHei","PingFang SC","Songti SC","Noto Sans CJK JP","Droid Sans Fallback"])if(a.GlobalFonts.has(b)&&a.GlobalFonts.setAlias(b,"Noto Sans CJK SC"))break}h=a.GlobalFonts.has("Noto Sans CJK SC"),f=a.loadImage,g=a.createCanvas}catch(a){return d?.notices.push({code:"docx-stage",message:`SVG 图件光栅化不可用(${a instanceof Error?a.message:String(a)}):${l.size} 张图件在 DOCX 中将缺失`}),j}for(let[a,b]of l)try{if(/\p{Script=Han}/u.test(b.toString("utf8"))&&!h)throw Error("图件包含中文但光栅化器没有可用中文字体;请配置CUSTOMIZE_CJK_FONT,不能把方框字图件当完整交付物");let c=b.toString("utf8"),i=e&&d?.verifiedFigures?.has(a)&&h?c.replace(/\bfont-family\s*=\s*["'][^"']*["']/giu,'font-family="Noto Sans CJK SC"'):c;i!==c&&d?.notices.push({code:"review-font-fallback",message:"审阅原生图件光栅化使用Noto Sans CJK SC替代指定字体;冻结SVG原件与规则不改写,不宣称宋体或其他指定字体已安装、达标。"});let k=await f(i===c?b:Buffer.from(i)),l=Math.max(1,Math.round(k.width)),m=Math.max(1,Math.round(k.height)),n=g(2*l,2*m),o=n.getContext("2d");o.scale(2,2),o.drawImage(k,0,0),j.set(a,n.toBuffer("image/png"))}catch(b){d?.notices.push({code:"docx-stage",message:`图件光栅化失败已跳过:${k.basename(a)}(${b instanceof Error?b.message:String(b)})`})}return j.size>0&&d?.notices.push({code:"docx-stage",message:`图件光栅化:${j.size}/${l.size} 张 SVG 已转 2\xd7 PNG 内联进 DOCX(DOCX 不支持内联 SVG)`}),j}function aS(a,b,c,d,e=!1){let f=Math.max(1,...a.map(a=>a.length)),g=a=>[...a].reduce((a,b)=>a+(b.codePointAt(0)>127?2:1),0),h=Array.from({length:f},(b,c)=>{let d=a.map(a=>g(a[c]??"")).sort((a,b)=>a-b);return Math.max(5,Math.min(40,d[Math.ceil((d.length-1)*.85)]??5))}),i=Array.from({length:f},(d,e)=>240+Math.max(2,Math.max(0,...a.slice(+!!c).flatMap(a=>[...(a[e]??"").matchAll(/[+−-]?\d[\d.,~~×*()()%‰µ\p{Script=Latin}\p{Script=Greek}℃°²³/\-+]*/gu)].map(a=>a[0])).filter(a=>a.length<=24).map(g)))*b.bodyHalfPoints*5),j=i.reduce((a,b)=>a+b,0),k=Math.max(0,d-j),l=h.reduce((a,b)=>a+b,0),m=h.map((a,b)=>Math.floor(j>d?d*i[b]/j:i[b]+k*a/l));m[f-1]+=d-m.reduce((a,b)=>a+b,0);let n=`<w:tblGrid>${m.map(a=>`<w:gridCol w:w="${a}"/>`).join("")}</w:tblGrid>`;return`<w:tbl><w:tblPr><w:tblW w:w="${d}" w:type="dxa"/><w:tblLook w:firstRow="${+!!c}" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:left w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:bottom w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:right w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:insideH w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/><w:insideV w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/></w:tblBorders></w:tblPr>${n}${a.map((d,f)=>`<w:tr><w:trPr><w:cantSplit/>${c&&0===f?"<w:tblHeader/>":""}</w:trPr>${m.map((g,h)=>{let i=d[h]||"",j=c&&0===f;return`<w:tc><w:tcPr><w:tcW w:w="${g}" w:type="dxa"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="120" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="120" w:type="dxa"/></w:tcMar>${!j&&/^[+−-]?\d[\d.,~~×*()()%‰μµmMkKgGtTsSVWA℃°²³\s/\-+]*$/u.test(i)&&i.length<=24?"<w:noWrap/>":""}${j&&!e?'<w:shd w:val="clear" w:fill="F3F4F6"/>':""}</w:tcPr>${aP(i,{bold:j,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:0,wordWrap:!1,keepNext:j||f===a.length-2,align:j?"center":"left"})}</w:tc>`}).join("")}</w:tr>`).join("")}</w:tbl>`}function aT(a,b,c=aM(b).bodyWidth){let d=aN(b);return function(a,b,c){let d=a.projection,e=[...d.headerRows,...d.rows],f=d.columnWidths?.length??Math.max(0,...e.map(a=>a.cells.reduce((a,b)=>a+b.colSpan,0)));if(!f||!Number.isFinite(b)||b<=0)throw Error("ORIGINAL_FORM_RENDER_UNSUPPORTED:原表列宽/网格为空");let g=d.columnWidths??Array.from({length:f},()=>100/f);if(g.length!==f||g.some(a=>!Number.isFinite(a)||a<=0)||Math.abs(g.reduce((a,b)=>a+b,0)-100)>.001)throw Error("ORIGINAL_FORM_RENDER_UNSUPPORTED:原表审定列宽不是完整百分比");let h=g.map(a=>Math.floor(b*a/100));h[f-1]+=b-h.reduce((a,b)=>a+b,0);let i=new Map,j=e.map((a,b)=>{let e=new Map,g=[],j=0,k=0,l=(a,e,f,g)=>{let i=h.slice(e,e+f).reduce((a,b)=>a+b,0);return`<w:tc><w:tcPr><w:tcW w:w="${i}" w:type="dxa"/>${f>1?`<w:gridSpan w:val="${f}"/>`:""}${"restart"===g?'<w:vMerge w:val="restart"/>':"continue"===g?"<w:vMerge/>":""}<w:vAlign w:val="center"/></w:tcPr>${c(a,{bold:b<d.headerRows.length,align:b<d.headerRows.length?"center":"left",keepNext:b<d.headerRows.length})}</w:tc>`};for(;j<f;){let b=i.get(j);if(b){g.push(l("",j,b.span,"continue")),b.remaining>1&&e.set(j,{span:b.span,remaining:b.remaining-1}),j+=b.span;continue}let c=a.cells[k++];if(!c||!Number.isSafeInteger(c.colSpan)||!Number.isSafeInteger(c.rowSpan)||c.colSpan<1||c.rowSpan<1||j+c.colSpan>f||[...i.keys()].some(a=>a>j&&a<j+c.colSpan))throw Error("ORIGINAL_FORM_RENDER_UNSUPPORTED:原表合并网格无法完整映射");g.push(l(c.text,j,c.colSpan,c.rowSpan>1?"restart":void 0)),c.rowSpan>1&&e.set(j,{span:c.colSpan,remaining:c.rowSpan-1}),j+=c.colSpan}if(k!==a.cells.length)throw Error("ORIGINAL_FORM_RENDER_UNSUPPORTED:原表存在未进入网格的单元格");return i=e,`<w:tr><w:trPr><w:cantSplit/>${b<d.headerRows.length?"<w:tblHeader/>":""}</w:trPr>${g.join("")}</w:tr>`});if(i.size)throw Error("ORIGINAL_FORM_RENDER_UNSUPPORTED:原表纵向合并越过实际行边界");let k=d.notes.map(a=>`<w:tr><w:trPr><w:cantSplit/></w:trPr><w:tc><w:tcPr><w:tcW w:w="${b}" w:type="dxa"/>${f>1?`<w:gridSpan w:val="${f}"/>`:""}</w:tcPr>${c(a)}</w:tc></w:tr>`).join("");return`${d.caption?c(d.caption,{bold:!0,align:"center",keepNext:!0}):""}<w:tbl><w:tblPr><w:tblCaption w:val="tender-original-form:${a.contractHash.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}"/><w:tblW w:w="${b}" w:type="dxa"/><w:tblLayout w:type="fixed"/><w:tblBorders>${["top","left","bottom","right","insideH","insideV"].map(a=>`<w:${a} w:val="single" w:sz="6" w:color="000000"/>`).join("")}</w:tblBorders></w:tblPr><w:tblGrid>${h.map(a=>`<w:gridCol w:w="${a}"/>`).join("")}</w:tblGrid>${j.join("")}${k}</w:tbl>`}(a,c,(a,b)=>aP(a,{...b,size:d.bodyHalfPoints,line:d.lineTwips,fontEastAsia:d.fontBody,fontAscii:d.fontBodyAscii,spacingAfter:0}))}async function aU(a,b,c,d){if(!b.length&&void 0===d)return;let e=(await W().loadAsync(a)).file("word/document.xml");if(!e)throw Error("ORIGINAL_FORM_RENDER_INVALID:DOCX缺实际正文包");let f=await e.async("string"),g=b.map(a=>aT(a,c));if([...f.matchAll(/<w:tblCaption\b[^>]*w:val="tender-original-form:/gu)].length!==b.length||g.some(a=>f.split(a).length-1!==g.filter(b=>b===a).length))throw Error("ORIGINAL_FORM_RENDER_INVALID:DOCX实物中的原表合并结构、字段、固定行或说明不符");if(void 0!==d&&!bd(d,f.replace(/<w:fldSimple\b[^>]*w:instr="PAGEREF [^"]*"[^>]*>[\s\S]*?<\/w:fldSimple>/gu,""),b).conserved)throw Error("ORIGINAL_FORM_RENDER_INVALID:DOCX实际包存在本份原格式全文之外的增删或重排,整体模板不能替代同稿身份")}function aV(a){return!!aH(a)&&!/^#{1,6}\s/u.test(a)&&!aF(a)}let aW="请在 Word 中右键更新目录";function aX(a){return`<w:p><w:pPr><w:spacing w:line="${a.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve">TOC \\o "1-2" \\h \\z \\u</w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r></w:p>`}function aY(a,b){return aP(a,{bold:!0,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontHeading,fontAscii:b.fontHeadingAscii,align:"center",firstLine:0,spacingBefore:120,spacingAfter:60,keepNext:!0})}function aZ(a,b,c,d){let e=aN(b),f=e.h1HalfPoints,g=e.bodyHalfPoints,h=a.replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),j=[],l=!1,m=!1,n=!1,o=new Map,p=new Set;a6(a).forEach((a,b)=>{a.level>3||(p.has(a.title)?o.delete(a.title):(p.add(a.title),o.set(a.title,`_doc_heading_${b+1}`)))});let q=-1,r=()=>{if(q<0)return;let a=j.splice(q);if(q=-1,0===a.length)return void j.push(aX(e).replace("</w:p>",`<w:r><w:t>${aW}</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>`));j.push(aX(e)),a.forEach((b,c)=>j.push(c===a.length-1?b.replace(/<\/w:p>$/u,'<w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>'):b))};for(let a=0;a<h.length;){let p=h[a].trim();if(!p){a+=1;continue}if(l&&("[[PAGE_BREAK]]"===p||/^#{1,4}\s+/u.test(p))&&(r(),l=!1,"[[PAGE_BREAK]]"!==p&&j.push(aP("",{pageBreak:!0}))),/<div\s+class=["']document-cover["']\s*>/iu.test(p)){m=!0,a+=1;continue}if(m&&/^<\/div>$/iu.test(p)){m=!1,n=!0,a+=1;continue}if("[[PAGE_BREAK]]"===p){l=!1,m=!1,n=!1,r(),j.push(aP("",{pageBreak:!0})),a+=1;continue}if(n&&(j.push(aP("",{pageBreak:!0})),n=!1),m){let b=aH(p.replace(/^#\s+/u,""));b&&j.push(aP(b,{bold:!0,size:Math.max(f+8,44),line:Math.round(1.15*e.lineTwips),fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let s=c?function(a,b){let c=/!\[([^\]]*)\]\(([^)]+)\)/u.exec(a);if(!c)return null;let d=c[2].trim(),e=ay.exec(d)?.[1],f=av(d,b.projectRoot,b.audit?.verifiedFigures),g=az(d);if(!f&&!g)return(e||d.startsWith("data:"))&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e??c[1]}(原因:图件不在生成资产根内,或内联格式/体积不合规)`}),null;let h=g?.buffer??b.audit?.verifiedFigures?.get(f)??i.readFileSync(f),j=g?.contentType??at(f);if("image/svg+xml"===j){let a=b.rasterizedSvg?.get(f??d);if(!a)return b.audit?.notices.push({code:"figure-inline",message:`DOCX图件未进包:${e??c[1]}(SVG未完成光栅化)`}),null;h=a,j="image/png"}if(!j||h.length>8388608)return e&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e}(原因:超过单图体积上限 ${Math.round(8)}MB)`}),null;let l=b.images.length+1,m="image/png"===j?".png":g?`.${"jpeg"===j.split("/")[1]?"jpg":j.split("/")[1]}`:k.extname(f).toLowerCase()||".png",n=aQ(h,j),o=b.pageBox?.maxImageWidthPx??620,p=b.pageBox?.maxImageHeightPx??aM().maxImageHeightPx,q=Math.min(1,o/Math.max(n.width,1),p/Math.max(n.height,1)),r=g?.contentType==="image/svg+xml"?g.buffer:f&&".svg"===k.extname(f).toLowerCase()?b.audit?.verifiedFigures?.get(f)??i.readFileSync(f):void 0;if(r?.includes(Buffer.from("data-source-node="))){let a=r.toString("utf8"),d=aQ(r,"image/svg+xml"),e=[...a.matchAll(/font-size=["'](\d+(?:\.\d+)?)["']/gu)].map(a=>Number(a[1])),f=Math.min(...e)*n.width/Math.max(1,d.width)*q*.75;if(e.length&&f<7.95){let a=`图件${c[1]||l}完整缩放后最小标签约${f.toFixed(1)}pt,须在作者模型拆分或重新排版,不能缩成不可读的正式图件`;(b.imageLayoutIssues??=[]).push(a),b.audit?.notices.push({code:"docx-stage",message:a})}}let s={relationshipId:`rImage${l}`,fileName:`image${l}${m}`,buffer:h,contentType:j,widthEmu:Math.round(n.width*q*9525),heightEmu:Math.round(n.height*q*9525),altText:c[1]||`image${l}`};return b.images.push(s),s}(p,c):null;if(s){j.push(`<w:p><w:pPr><w:jc w:val="center"/><w:spacing w:after="120" w:line="240" w:lineRule="auto"/></w:pPr><w:r><w:drawing><wp:inline xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><wp:extent cx="${s.widthEmu}" cy="${s.heightEmu}"/><wp:docPr id="${s.relationshipId.replace(/\D/gu,"")||"1"}" name="${ar(s.altText||s.fileName)}"/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="${ar(s.fileName)}"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="${s.relationshipId}" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${s.widthEmu}" cy="${s.heightEmu}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p>`),a+=1;continue}let t=/^(`{3,}|~{3,})([^`~]*)$/u.exec(p);if(t){let b=RegExp(`^${t[1][0]}{${t[1].length},}\\s*$`,"u"),c=[h[a++]];for(;a<h.length;){let d=h[a++];if(c.push(d),b.test(d.trim()))break}for(let a of c)j.push(aP(a,{size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,spacingAfter:0}));/^mermaid\b/u.test(t[2].trim())&&d?.notices.push({code:"docx-stage",message:"该图源尚未匹配到本轮结构化图件,按原字代码保留供审阅,不当作已渲染施工图。"});continue}if(/^<table\b[^>]*\bdata-tender-original-form=/iu.test(p)){let e=h.slice(a).join("\n"),f=d?.verifiedDelivery?.originalForms?.find(a=>e.startsWith(a.html));if(!f)throw Error("ORIGINAL_FORM_RENDER_UNVERIFIED:原格式HTML没有当前冻结契约、单元与独审绑定");j.push(aT(f,b,c?.pageBox?.bodyWidth)),d&&(d.ops.originalFormsRendered=(d.ops.originalFormsRendered??0)+1),a+=f.html.split("\n").length;continue}let u=function(a,b){let c=a[b+1]?.trim()===""?b+2:b+1;if(c>=a.length||!aF(a[b]||"")||!aE(a[c]||""))return null;let d=aG(a[b]||"").map(a=>aH(a)),e=aG(a[c]||"").length,f=[],g=c+1;for(;g<a.length&&aF(a[g]||"");){var h;if(h=g,aE(((a[h+1]?.trim()===""?a[h+2]:a[h+1])||"").trim()))break;f.push(aG(a[g]||"").map(a=>aH(a))),g+=1}let i=Math.max(1,d.length,e,...f.map(a=>a.length)),j=a=>{let b=a.slice(0,i);for(a.length>i&&i>0&&(b[i-1]=[b[i-1],...a.slice(i)].filter(Boolean).join(" | "));b.length<i;)b.push("");return b};return{rows:[j(d),...f.map(j)],next:g,headerRow:!0}}(h,a);if(u){j.push(aS(u.rows,e,u.headerRow,c?.pageBox?.bodyWidth??aM(b).bodyWidth,c?.monoColor),aP("",{spacingAfter:80,line:e.lineTwips})),a=u.next;continue}let v=!l&&aF(p)?function(a,b){let c=[],d=b;for(;d<a.length&&aF(a[d]||"");)c.push(a[d]||""),d+=1;let e=Math.max(...c.map(a=>aG(a).length),0);return c.length<2||e<2?null:{rows:c,columns:e,next:d}}(h,a):null;if(v){j.push(aS(v.rows.map(a=>aG(a).map(a=>aH(a))),e,!1,c?.pageBox?.bodyWidth??aM(b).bodyWidth),aP("",{spacingAfter:80,line:e.lineTwips})),d&&(d.ops.headerlessTableRendered+=1,d.notices.push({code:"headerless-table",message:`docx 阶段按数据行渲染无表头表格 ${v.rows.length} 行 \xd7 ${v.columns} 列(首行不冒充表头):该表在源文档缺表头,需回源补齐`})),a=v.next;continue}if(aE(p)){a+=1;continue}let w=/^(#{1,4})\s+(.+)$/u.exec(p);if(w){let b=aH(w[2]);j.push("目录"===b?aP(b,{bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):(()=>{var a;let c=(a=w[1].length,2===a?aP(b,{styleId:"Heading1",outlineLevel:0,bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===a?aP(b,{styleId:"Heading2",outlineLevel:1,bold:!0,size:e.h2HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:180,spacingAfter:100,keepNext:!0}):aP(b,{styleId:"Heading3",outlineLevel:2,bold:!0,size:e.h3HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:120,spacingAfter:80,keepNext:!0})),d=o.get(b);if(!d)return c;let f=d.split("_").at(-1);return c.replace("</w:pPr>",`</w:pPr><w:bookmarkStart w:id="${f}" w:name="${d}"/>`).replace("</w:p>",`<w:bookmarkEnd w:id="${f}"/></w:p>`)})()),"目录"===b&&(l=!0,q=j.length),a+=1;continue}let x=aH(p),y=l?aH(p.replace(/^\s*[-*+]\s+/u,"")):x,z=function(a){let b=/^\s*(\d+(?:\.\d+){0,2})([.、])\s+(.+)$/u.exec(a);return b?{level:Math.min(b[1].split(".").length-1,2),marker:`${b[1]}${b[2]}`,text:aH(b[3])}:null}(p),A=function(a){let b=/^\s*[-*+]\s+(.+)$/u.exec(a);return b?aH(b[1]):null}(p);if(!l&&z){let b=0===z.level?720:1===z.level?1080:1440,c=0===z.level?360:1===z.level?420:480;j.push(aP(`${z.marker} ${z.text}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:b,hanging:c,spacingAfter:60})),a+=1;continue}if(!l&&A){j.push(aP(`• ${A}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:720,hanging:360,spacingAfter:60})),a+=1;continue}let B=h.slice(a+1).find(a=>""!==a.trim()),C=/^!\[([^\]]*)\]\([^)]+\)\s*$/u.exec(B?.trim()??"")?.[1];if(!l&&C&&x===C){j.push(aY(x,e)),a+=1;continue}if(!l&&aV(p)&&B&&aF(B.trim())){j.push(aY(x,e)),d&&(d.ops.captionStyled+=1),a+=1;continue}let D=/^\*\*[^*]+\*\*\s*$/u.test(p)&&x.length<=40,E=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(p)||/^([一二三四五六七八九十]+)/u.test(x)||/^[一二三四五六七八九十]+、/u.test(x);j.push(l?function(a,b,c,d=9e3){let e=a.replace(/^\s*[-*+]\s+/u,""),f=/^\s*\d+\.\d+\s+\S/u.test(e),g=aP(aH(e),{bold:!f,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:f?30:80,indentLeft:420*!!f,align:"left"});return c?g.replace("</w:pPr>",`<w:tabs><w:tab w:val="right" w:leader="dot" w:pos="${d}"/></w:tabs></w:pPr>`).replace("</w:p>",`<w:r><w:tab/></w:r><w:fldSimple w:instr="PAGEREF ${c} \\h"><w:r><w:t></w:t></w:r></w:fldSimple></w:p>`):g}(p,e,o.get(y),c?.pageBox?.bodyWidth):aP(x,{bold:E||D,size:D?Math.max(e.bodyHalfPoints+2,30):g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,align:D?"left":"both",firstLine:E||D?0:560,spacingBefore:D?120:80*!!E,spacingAfter:D?60:void 0})),a+=1}r();let s=j.join("");if(d){let b=bd(a,s,d.verifiedDelivery?.originalForms);b.conserved||d.blockers.push({code:"content-not-conserved",line:0,message:`docx 渲染阶段存在未声明的正文改动(产物文本去标记比对):第 ${b.position} 字符附近分歧(入口「${b.sourceContext}」→ 产物「${b.productContext}」)`})}return s}async function a$(a,b,c,d=[],e=!0){let f=c?.anonymize===!0;a.folder("word")?.file("styles.xml",function(a){let b=aN(a),c=`w:ascii="${ar(b.fontBodyAscii)}" w:hAnsi="${ar(b.fontBodyAscii)}" w:eastAsia="${ar(b.fontBody)}" w:cs="${ar(b.fontBodyAscii)}"`,d=(a,d,e,f,g,h,i)=>`<w:style w:type="paragraph" w:styleId="${a}"><w:name w:val="${d}"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:uiPriority w:val="${9+f}"/><w:qFormat/><w:rPr><w:b/><w:rFonts ${c}/><w:sz w:val="${e}"/><w:szCs w:val="${e}"/></w:rPr><w:pPr><w:keepNext/><w:keepLines/><w:outlineLvl w:val="${f}"/><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:before="${g}" w:after="${h}"/>${i?`<w:jc w:val="${i}"/>`:""}</w:pPr></w:style>`;return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style>${d("Heading1","heading 1",Math.max(b.h1HalfPoints,24),0,260,180,"center")}${d("Heading2","heading 2",Math.max(b.h2HalfPoints,24),1,180,100)}${d("Heading3","heading 3",Math.max(b.h3HalfPoints,22),2,120,80)}<w:style w:type="paragraph" w:styleId="ListParagraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:uiPriority w:val="34"/><w:qFormat/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:style></w:styles>`}(c)),a.folder("word")?.file("settings.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:updateFields w:val="true"/><w:compat><w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/></w:compat></w:settings>'),e&&a.folder("word")?.file("footer.xml",`<?xml version="1.0" encoding="UTF-8"?><w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:pPr><w:jc w:val="center"/></w:pPr>${aO("第 ",{size:21})}<w:fldSimple w:instr="PAGE"/>${aO(" 页 / 共 ",{size:21})}<w:fldSimple w:instr="NUMPAGES"/>${aO(" 页",{size:21})}</w:p></w:ftr>`),a.folder("word")?.file("fontTable.xml",function(a){let b=aN(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="${ar(b.fontBody)}"><w:charset w:val="86"/><w:family w:val="roman"/></w:font><w:font w:name="${ar(b.fontBodyAscii)}"><w:family w:val="roman"/></w:font></w:fonts>`}(c)),a.folder("docProps")?.file("core.xml",function(a,b=!1){let c=new Date(Date.now()-1e3).toISOString(),d=new Date().toISOString(),e=b?"":"Customize Agent";return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${ar(b?"":a)}</dc:title><dc:creator>${ar(e)}</dc:creator><cp:lastModifiedBy>${ar(e)}</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">${c}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${d}</dcterms:modified></cp:coreProperties>`}(b,f)),a.folder("docProps")?.file("app.xml",function(a=!1){return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>${ar(a?"":"Customize Agent")}</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>1.0</AppVersion></Properties>`}(f));let g=a.folder("word")?.folder("media");for(let a of d)g?.file(a.fileName,a.buffer);let h=a.file("word/_rels/document.xml.rels"),i=h?await h.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';for(let[a,b,c]of[["rStyle","http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles","styles.xml"],["rSettings","http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings","settings.xml"],["rFontTable","http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable","fontTable.xml"]])i.includes(b)||(i=i.replace("</Relationships>",`<Relationship Id="${a}" Type="${b}" Target="${c}"/></Relationships>`));for(let a of(e&&!i.includes('Id="rFooter"')&&(i=i.replace("</Relationships>",'<Relationship Id="rFooter" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer.xml"/></Relationships>')),d))i.includes(`Id="${a.relationshipId}"`)||(i=i.replace("</Relationships>",`<Relationship Id="${a.relationshipId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${a.fileName}"/></Relationships>`));a.folder("word")?.folder("_rels")?.file("document.xml.rels",i);let j=a.file("_rels/.rels"),l=j?await j.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>';l.includes("metadata/core-properties")||(l=l.replace("</Relationships>",'<Relationship Id="rCore" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>')),l.includes("extended-properties")||(l=l.replace("</Relationships>",'<Relationship Id="rApp" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>')),a.folder("_rels")?.file(".rels",l);let m=a.file("[Content_Types].xml"),n=m?await m.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/></Types>';for(let a of new Set(d.map(a=>k.extname(a.fileName).slice(1).toLowerCase()).filter(Boolean))){let b="jpg"===a||"jpeg"===a?"image/jpeg":"png"===a?"image/png":"gif"===a?"image/gif":"webp"===a?"image/webp":void 0;b&&!n.includes(`Extension="${a}"`)&&(n=n.replace("</Types>",`<Default Extension="${a}" ContentType="${b}"/></Types>`))}let o=[["/word/styles.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"],["/word/settings.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"],["/word/fontTable.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"],["/docProps/core.xml","application/vnd.openxmlformats-package.core-properties+xml"],["/docProps/app.xml","application/vnd.openxmlformats-officedocument.extended-properties+xml"]];for(let[a,b]of(e&&o.push(["/word/footer.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"]),o))n.includes(`PartName="${a}"`)||(n=n.replace("</Types>",`<Override PartName="${a}" ContentType="${b}"/></Types>`));a.file("[Content_Types].xml",n)}async function a_(a,b,c,d,e=process.cwd(),f,g,h=!1,i=h){let j=async a=>{let b=await W().loadAsync(a),c=await p(b,h);return c.changedFamilies.length&&f?.notices.push({code:"docx-stage",message:`审阅中文显示使用随文档嵌入的Noto Sans CJK SC;替代${c.changedFamilies.join("、")},不宣称满足原指定字体要求。`}),c.embedded?b.generateAsync({type:"nodebuffer"}):a},l=function(a,b){let c=String(a||"").trim();if(!c)return{};let d=(0,al.n7)(c,[k.resolve(b),k.resolve((0,X.Gl)(b),"assets"),k.resolve(U.tmpdir()),k.join((0,R.J0)(),"export-templates")],{mustExist:!0,requireFile:!0});return d.ok?".docx"!==k.extname(d.absolute).toLowerCase()?{rejected:{path:c,reason:"模板必须是 .docx 文件"}}:{resolved:d.absolute}:{rejected:{path:c,reason:(0,al.vZ)(d.reason)}}}(d,e);if(l.rejected){let d=`DOCX 模板路径被拒绝(${l.rejected.reason}):${l.rejected.path}。已回退标准生成路径(正文正确、未套模板样式)。允许的来源:本项目目录 / 生成资产目录 / 导出模板目录。`;console.error(`[export] ${d}`);let h=await a1(a,b,c,void 0,e,f,d,g,i);return h.buffer=await a0(await j(h.buffer),f),h}let m=await a1(a,b,c,l.resolved,e,f,void 0,g,i);return m.buffer=await a0(await j(m.buffer),f),m}async function a0(a,b){let c=await W().loadAsync(a),d=c.file("word/document.xml");if(!d)return a;let e=await d.async("string");if(!/PAGEREF _doc_heading_/u.test(e))return a;let f=new Map;for(let a of e.matchAll(/<w:p\b[^>]*>[\s\S]*?<\/w:p>/gu)){let b=/<w:bookmarkStart\b[^>]*w:name="(_doc_heading_\d+)"/u.exec(a[0])?.[1];b&&f.set(b,bb(a[0]).replace(/\n/gu,""))}let g=(a,b)=>a.replace(/(<w:fldSimple w:instr="PAGEREF (_doc_heading_\d+) [^"]*">)[\s\S]*?<\/w:fldSimple>/gu,(a,c,d)=>`${c}<w:r><w:t>${b[f.get(d)??""]??""}</w:t></w:r></w:fldSimple>`);for(let d=0;d<3;d+=1){let d=await (0,Y.Dx)(a);if(!d.headingPages||!Object.keys(d.headingPages).length)return b?.notices.push({code:"toc-reconcile",message:`DOCX目录保留可更新的原生页码域,实际页码缓存未取得:${d.unavailableReason??"渲染器没有输出章节书签"}`}),a;let f=g(e,d.headingPages);if(f===e)return a;e=f,c.file("word/document.xml",e),a=await c.generateAsync({type:"nodebuffer"})}return c.file("word/document.xml",g(e,{})),b?.notices.push({code:"toc-reconcile",message:"DOCX目录页码缓存的实际排版校验未收敛,已清空缓存;原生PAGEREF域保留,须更新后复核"}),c.generateAsync({type:"nodebuffer"})}async function a1(a,b,c,d,e,f,g,h,j=!1){let k=h?.headersFooters!=="forbidden",l=aM(c),m={projectRoot:e,images:[],pageBox:l,monoColor:h?.monoColor,...f?{audit:f}:{}},n=await aR(b,e,f,j);n.size>0&&(m.rasterizedSvg=n);let o=aZ(b,c,m,f),p={expected:[...b.matchAll(/!\[[^\]]*\]\(([^)]+)\)/gu)].length,embedded:m.images.length,...m.imageLayoutIssues?.length?{layoutIssues:m.imageLayoutIssues}:{}},q=g;if(d&&i.existsSync(d)){let b=await W().loadAsync(i.readFileSync(d)),e=b.file("word/document.xml");if(e){let f=await e.async("string");if(/\{\{content\}\}/u.test(f))return b.file("word/document.xml",function(a,b){let c=b?.page;if(!c)return a;let d=aM(b),e=`<w:pgSz w:w="${d.width}" w:h="${d.height}"${d.landscape?' w:orient="landscape"':""}/>`,f=a=>{let b=a;c.paper&&(b=/<w:pgSz\b[^>]*\/>/u.test(b)?b.replace(/<w:pgSz\b[^>]*\/>/u,e):b.replace("</w:sectPr>",`${e}</w:sectPr>`));let d=/<w:pgMar\b[^>]*\/>/u.exec(b)?.[0]??"<w:pgMar/>";for(let[a,b]of[["marginTop","top"],["marginRight","right"],["marginBottom","bottom"],["marginLeft","left"],["gutter","gutter"]])if(void 0!==c[a]){let e=` w:${b}="${aL(c[a],0)}"`,f=RegExp(`\\s+w:${b}="[^"]*"`,"u");d=f.test(d)?d.replace(f,e):d.replace("/>",`${e}/>`)}return/<w:pgMar\b[^>]*\/>/u.test(b)?b.replace(/<w:pgMar\b[^>]*\/>/u,d):b.replace("</w:sectPr>",`${d}</w:sectPr>`)};return/<w:sectPr\b/u.test(a)?a.replace(/<w:sectPr\b[^>]*>[\s\S]*?<\/w:sectPr>/gu,f):a.replace("</w:body>",`${f("<w:sectPr></w:sectPr>")}</w:body>`)}(f.replace(/\{\{title\}\}/gu,ar(a)).replace(/\{\{content\}\}/gu,o),c)),await a$(b,a,c,m.images,k),{buffer:await b.generateAsync({type:"nodebuffer"}),imageReceipt:p};console.error(`[export] 模板缺少 {{content}} 占位符,已回退标准生成路径(正文正确、未套模板样式):${d}`),q=`模板缺少 {{content}} 占位符,已回退标准生成路径(未套模板样式)`}}let r=c?.page||{},s=new(W());return s.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>${o}<w:sectPr>${k?'<w:footerReference w:type="default" r:id="rFooter"/>':""}<w:pgSz w:w="${l.width}" w:h="${l.height}"${l.landscape?' w:orient="landscape"':""}/><w:pgMar w:top="${aL(r.marginTop,2.5)}" w:right="${aL(r.marginRight,2)}" w:bottom="${aL(r.marginBottom,2)}" w:left="${aL(r.marginLeft,2)}"${r.gutter?` w:gutter="${aL(r.gutter,0)}"`:""}/></w:sectPr></w:body></w:document>`),await a$(s,a,c,m.images,k),{buffer:await s.generateAsync({type:"nodebuffer"}),templateWarning:q,imageReceipt:p}}function a2(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function a3(a){return a.replace(/<[^>]*>/gu,"").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/ | /gu," ").trim()}function a4(a){let b=new Map,c=new Set,d=0;return a.replace(/<(h[23])([^>]*)>([\s\S]*?)<\/\1>/gu,(a,e,f,g)=>{let h=a3(g);if("目录"===h)return a;let i=`document-heading-${++d}`;return b.has(h)?c.add(h):b.set(h,i),`<${e}${f} id="${i}">${g}</${e}>`}).replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>|<h2[^>]*>)/u,(a,d,e,f)=>{let g=e.split(/<br\s*\/?>|<\/p>|<\/li>/gu).flatMap(a=>{let d=a3(a);if(!d)return[];let e=c.has(d)?void 0:b.get(d),f=/^\d+\.\d+\s/u.test(d)?"toc-section":"toc-chapter";return[`<p class="${f}">${e?`<a href="#${e}"><span>${ar(d)}</span><span class="toc-page" data-toc-title="${ar(d)}"></span></a>`:ar(d)}</p>`]});return`<section class="document-toc">${d}${g.join("")}</section>${f}`})}function a5(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function a6(a){return a.split(/\r?\n/u).map(a=>/^(#{2,4})\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({level:a[1].length,title:aH(a[2])})).filter(a=>a.title&&"目录"!==a.title)}function a7(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a]||"",e=/^(`{3,}|~{3,})/u.exec(d.trim());if(e){let b=RegExp(`^${e[1][0]}{${e[1].length},}\\s*$`,"u");for(a++;a<c.length&&!b.test(c[a].trim());)a++;continue}if(!aF(d))continue;let f=c[a+1]?.trim()===""?a+2:a+1;if(f<c.length&&aE(c[f]||"")){let e=[],g=f+1;for(;g<c.length&&aF(c[g]||"");)e.push(c[g]||""),g+=1;0===e.length&&b.push(`第 ${a+1} 行表格只有表头,没有数据行`);let h=[d,...e].map(a=>aG(a).length);Math.max(...h)-Math.min(...h)>2&&b.push(`第 ${a+1} 行附近表格列数差异较大,导出版式可能异常`),a=g-1;continue}a+1<c.length&&aF(c[a+1]||"")&&b.push(`第 ${a+1} 行附近疑似裸表格(缺少表头或分隔线),导出版式可能异常`)}return(a.match(/```/gu)||[]).length%2==1&&b.push("存在未闭合代码块,可能影响后续内容导出"),[...new Set(b)].slice(0,20)}function a8(a,b){let c=a5(a),d=b?a5(b):void 0,e=[];c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格");let f=a6(a);0===f.length&&e.push("正文缺少章节标题"),f.some((a,b)=>b>0&&a.level-f[b-1].level>1)&&e.push("标题层级存在跳级,可能影响导出目录和导航");let g=a.split(/\r?\n/u).map(a=>aH(a)).filter(a=>a.length>0&&!/^#+\s/u.test(a));return g.some(a=>a.length<=1)&&e.push("正文存在孤立字或残缺段落"),g.some(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a))&&e.push("正文存在疑似截断句或未完结段落"),g.some(a=>a.length>380)&&e.push("正文存在过长段落,建议拆分以改善导出版式"),e.push(...a7(a)),[...new Set(e)]}function a9(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\r?\n/gu,"\n").split("\n").filter(a=>!aE(a.trim())&&!/^\s*```/u.test(a)).map(a=>aH(a.replace(/^#{1,6}\s+/u,"").replace(/^\s*[-*+]\s+/u,""))).join("").replace(/(?<!\\)\|/gu,"").replace(/\s+/gu,"")}function ba(a,b){if(a===b)return{conserved:!0};let c=0,d=Math.min(a.length,b.length);for(;c<d&&a[c]===b[c];)c+=1;return{conserved:!1,position:c,sourceContext:a.slice(Math.max(0,c-20),c+20),productContext:b.slice(Math.max(0,c-20),c+20)}}function bb(a){return[...a.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>(a[1]||"").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/&/gu,"&")).join("\n")}function bc(a){return a9(a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]*)\]\([^)]*\)/gu,"$1").replace(/\[\[PAGE_BREAK\]\]/gu,"").replace(/[•·]/gu,"").replace(RegExp(aW,"gu"),""))}function bd(a,b,c=[]){let d=a;for(let a of c){let b=[a.projection.caption,...[...a.projection.headerRows,...a.projection.rows].flatMap(a=>a.cells.map(a=>a.text)),...a.projection.notes].join("\n");d=d.replaceAll(a.html,b)}return ba(bc(d),bc(bb(b)))}function be(a,b){let c=ao();for(let b of a7(a))c.blockers.push({code:"content-not-conserved",line:0,message:b});for(let b of(a9((0,ai._D)(a).markdown)!==a9(a)&&c.notices.push({code:"toc-reconcile",message:"目录条目与正文章节不一致;审阅文件保留原稿,须在正文模型中修正"}),function(a){let b=String(a||"").split("\n"),c=[],d=0;for(;d<b.length;){if(!b[d].trim().startsWith("|")){d+=1;continue}let a=d;for(;d<b.length&&b[d].trim().startsWith("|");)d+=1;let e=b.slice(a,d);if(e.length<3)continue;let f=e.findIndex(a=>/^\|[\s:|-]+\|?$/u.test(a.trim()));if(f<=0)continue;let g=T(e[0]).filter(a=>a.length>0).length;if(g<2)continue;let h=a>0?b[a-1].trim():"",i=/^表\s*[\d一二三四五六七八九十]+/u.test(h)?h:"";for(let b=f+1;b<e.length;b+=1){if(/^\|[\s:|-]+\|?$/u.test(e[b].trim()))continue;let d=T(e[b]).length;d!==g&&c.push({caption:i,line:a+1,expected:g,actual:d,rowLine:a+b+1})}}return c}(a)))c.blockers.push({code:"content-not-conserved",line:b.rowLine,message:`表格字段不守恒:${b.actual}/${b.expected},不能在渲染时补造字段`});return{markdown:a,baselineMarkdown:b??"",issues:a8(a,b),audit:c}}async function bf(a,b,c,d,e=!1,f){let g=(await (0,B.c0)()).parse(b,{async:!1}).replace(/<h2([^>]*)>(第[一二三四五六七八九十百千万\d]+章\s*[\s\S]*?)<\/h2>/gu,(a,b,c)=>/\bclass=/iu.test(b)?`<h2${b.replace(/class=(['"])(.*?)\1/iu,(a,b,c)=>`class=${b}${c} document-chapter-heading${b}`)}>${c}</h2>`:`<h2${b} class="document-chapter-heading">${c}</h2>`).replace(/<p>\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)*\|?\s*<\/p>/giu,"").replace(/<p>([^<]*(?:<(?:strong|em)>[^<]*<\/(?:strong|em)>[^<]*)*)<\/p>\s*<table>/gu,"<table><caption>$1</caption>"),h=f?.verifiedDelivery?.originalForms??[];if([...g.matchAll(/<table\b[^>]*\bdata-tender-original-form=/giu)].length!==h.length||h.some(a=>g.split(a.html).length-1!==h.filter(b=>b.html===a.html).length))throw Error("ORIGINAL_FORM_RENDER_INVALID:HTML原格式表与当前已核完整结构不一致");return h.length&&f&&(f.ops.originalFormsRendered=h.length),ax(function(a,b,c,d=!1){let e=aN(c),f=a4(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${ar(a)}</title><style>${function(a,b=!1){return`
|
|
2
3
|
@page{size:${a.paper};margin:${a.marginTop} ${a.marginRight} ${a.marginBottom} ${a.marginLeft}}
|
|
3
4
|
*{box-sizing:border-box}
|
|
4
5
|
html,body{margin:0;padding:0;background:#fff}
|
|
@@ -25,4 +26,6 @@ th,td{font-family:${a.bodyFontFamily};font-size:${Math.max(a.bodyPt-1,9)}pt;line
|
|
|
25
26
|
th{background:${b?"#fff":"#f3f4f6"};font-weight:700;text-align:center}
|
|
26
27
|
pre{white-space:pre-wrap;font-family:${a.bodyFontFamily};font-size:${a.bodyCss};line-height:${a.lineCss};page-break-inside:avoid;break-inside:avoid}.page-break{page-break-after:always;break-after:page;height:0}
|
|
27
28
|
@media print{body{-webkit-print-color-adjust:exact;print-color-adjust:exact}a{text-decoration:none;color:${b?"#000":"#111827"}}}
|
|
28
|
-
`}(e,d)}</style></head><body>${f}</body></html>`}(a,(await (0,u.c)()).parse(b,{async:!1}).replace(/<h2([^>]*)>(第[一二三四五六七八九十百千万\d]+章\s*[\s\S]*?)<\/h2>/gu,(a,b,c)=>/\bclass=/iu.test(b)?`<h2${b.replace(/class=(['"])(.*?)\1/iu,(a,b,c)=>`class=${b}${c} document-chapter-heading${b}`)}>${c}</h2>`:`<h2${b} class="document-chapter-heading">${c}</h2>`).replace(/<p>\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)*\|?\s*<\/p>/giu,"").replace(/<p>([^<]*(?:<(?:strong|em)>[^<]*<\/(?:strong|em)>[^<]*)*)<\/p>\s*<table>/gu,"<table><caption>$1</caption>"),c,e),d,f)}async function a$(a,b,d){let{chromium:e}=await Promise.resolve().then(c.bind(c,83237)),f=[{label:"playwright-bundled-chromium",options:{headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-chrome-channel",options:{channel:"chrome",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-msedge-channel",options:{channel:"msedge",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},...(function(){let a=[process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH,process.env.CHROME_PATH].filter(Boolean),b=z.homedir();return[...new Set([...a,..."darwin"===process.platform?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",k.join(b,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),k.join(b,"Applications/Chromium.app/Contents/MacOS/Chromium")]:"win32"===process.platform?[k.join(process.env.PROGRAMFILES||"C:\\Program Files","Google/Chrome/Application/chrome.exe"),k.join(process.env["PROGRAMFILES(X86)"]||"C:\\Program Files (x86)","Google/Chrome/Application/chrome.exe"),k.join(process.env.LOCALAPPDATA||"","Google/Chrome/Application/chrome.exe"),k.join(process.env.PROGRAMFILES||"C:\\Program Files","Microsoft/Edge/Application/msedge.exe")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium","/usr/bin/microsoft-edge"]].filter(a=>a&&i.existsSync(a)))]})().map(a=>({label:a,options:{executablePath:a,headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}}))],g=[];for(let c of f)try{let f=await e.launch(c.options);try{let c=await f.newPage({locale:"zh-CN"});await c.setContent(a,{waitUntil:"load"}),await c.evaluate(async()=>{await document.fonts.ready}),await c.waitForFunction(()=>Array.from(document.images).every(a=>a.complete),void 0,{timeout:1e4}).catch(()=>void 0),await c.emulateMedia({media:"print"});let e=ax(b),g=d?.headersFooters==="forbidden"?{displayHeaderFooter:!1}:{displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:`<div style="font-family:${e.fontFamily};font-size:10.5pt;line-height:12pt;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>`},h=async()=>Buffer.from(await c.pdf({format:e.paper,printBackground:!0,preferCSSPageSize:!0,outline:!0,tagged:!0,margin:{top:e.marginTop,right:e.marginRight,bottom:e.marginBottom,left:e.marginLeft},...g})),i=await h();for(let a=0;a<3;a+=1){let a=await J(i);if(!a)throw Error("PDF实际页树/章节书签无法读取,不能编造目录页码");if(!await c.evaluate(a=>{let b=!1;for(let c of document.querySelectorAll("[data-toc-title]")){let d=c.dataset.tocTitle,e=void 0===a[d]?"":String(a[d]);c.textContent!==e&&(c.textContent=e,b=!0)}return b},a))return i;i=await h()}throw Error("PDF目录页码实际排版校验未收敛")}finally{await f.close()}}catch(a){g.push(`${c.label}: ${a instanceof Error?a.message:String(a)}`)}throw Error(g.join("\n"))}function a_(a,b,c,d,e=[],f,g,h,i){if(a)try{let j=a.draft,k=j?.reviewMetadata?.diagnostics?.quality,l=a.completedAt?Math.max(0,a.completedAt-a.createdAt):Math.max(0,Date.now()-a.createdAt),n=(a.draft?.exportGate?.manualReviewIssues||[]).map(a=>({...a,level:a.level??"warning"})),o=[...e,...n],p=o.length>0?(0,O.aF)(o,j?.chapters):void 0,q={format:b,exportPurpose:h,reviewReport:i,exportedAt:Date.now(),durationMs:l,ruleSummary:(j?.promptRules?.executionSummary||[]).slice(0,12),repairedCount:k?.repairedCount,blockingCount:k?.blockingCount,gatePassed:j?.exportGate?.passed===!0&&0===e.length&&(d?.blockerCount??0)===0,...a.runId&&j?.reviewMetadata?.contractQuality?{sourceIdentity:{runId:a.runId,documentHash:j.reviewMetadata.contractQuality.documentHash,contractId:j.reviewMetadata.contractQuality.contractId,buildId:(0,w.S)()?.sourceFingerprint}}:{},...g?{artifact:{sha256:(0,m.createHash)("sha256").update(g.content).digest("hex"),bytes:Buffer.byteLength(g.content)},renderDurationMs:Math.max(0,Date.now()-g.startedAt)}:{},healthAlerts:j?.reviewMetadata?.telemetry?.healthAlerts,repairHeat:j?.reviewMetadata?.telemetry?.repairHeat,...d?{renderAudit:d}:{},...p?{gateIssueCount:e.length,gateChecklist:p}:{},...f?{realPages:f}:{}};a.runId&&(0,s.tv)((0,D.Gl)(c),`export-receipt-${(0,m.createHash)("sha256").update(JSON.stringify(q)).digest("hex")}.json`,q,a.runId);let r=(0,D.getGeneratedDocument)(a.id,c),t=[...r?.exportReports||a.exportReports||[],q].slice(-20);(0,D.a6)(a.id,{exportReports:t},c)}catch(a){console.warn(`[export] 渲染审计报告归档失败(不影响本次导出,但该次导出不会进历史对照):${a instanceof Error?a.message:String(a)}`)}}async function a0(a,b){let c,d=Date.now();if("POST"!==a.method&&"GET"!==a.method)return b.status(405).json({error:"Method not allowed"});if("GET"===a.method&&("string"!=typeof a.query?.reviewReportId||Object.values(a.query).some(a=>"string"!=typeof a)))return b.status(400).json({error:"REVIEW_REPORT_REQUEST_REQUIRED"});let e="GET"===a.method?a.query:a.body;if(!e||"object"!=typeof e||Array.isArray(e))return b.status(400).json({error:"INVALID_EXPORT_REQUEST"});let f=new Set(["documentId","title","markdown","format","exportPurpose","reviewReportId","reviewRunId","useClientMarkdown","exportGate","wordTemplatePath","projectRoot"]);if(Object.keys(e).some(a=>!f.has(a)))return b.status(400).json({error:"INVALID_EXPORT_OPTION",message:"存在不受支持的导出参数,请使用明确的 exportPurpose。"});if(void 0!==e.exportPurpose&&"review"!==e.exportPurpose&&"delivery"!==e.exportPurpose)return b.status(400).json({error:"INVALID_EXPORT_PURPOSE"});let g=e.exportPurpose??"review",h=e.projectRoot||(0,L.aY)(),i=e.documentId?(0,D.getGeneratedDocument)(e.documentId,h):null;if(e.documentId&&(!i||i.id!==e.documentId))return b.status(404).json({error:"Document not found"});if(e.reviewReportId){if(!/^[a-f0-9]{64}$/u.test(e.reviewReportId))return b.status(400).json({error:"INVALID_REVIEW_REPORT_ID"});let a=function(a,b,c){if(!/^[a-f0-9]{64}$/u.test(b))throw Error("INVALID_REVIEW_REPORT_ID");let d=(0,s.HM)(a,`review-export-${b}.json`,c);if(!j().existsSync(d))return;let e=j().readFileSync(d);if(Q(e)!==b)throw Error("REVIEW_REPORT_IDENTITY_MISMATCH");let f=JSON.parse(e.toString("utf8"));if(f.runId!==(c??null))throw Error("REVIEW_REPORT_RUN_MISMATCH");return f}((0,D.Gl)(h),e.reviewReportId,e.reviewRunId);return a&&a.documentId===(i?.id??null)?(b.setHeader("Content-Type","application/json; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${aa(a.title)}_审阅问题报告_${a.body.sha256.slice(0,12)}.json`)}`),b.status(200).send(JSON.stringify(a))):b.status(404).json({error:"REVIEW_REPORT_NOT_FOUND"})}let k=i?.draft?.bidComposition,p=e.title||i?.title||"document",u=(0,N.b2)(k?.formatRules),v=function(a,b){if(void 0!==b)return b;if(a?.editedMarkdown!==void 0)return a.editedMarkdown;let c=a?.markdown||a?.draft?.markdown;return c?.trim()?c:(a?.checkpointChapters??[]).filter(a=>(0,t.a1)(a.content??"")).map(a=>a.content).join("\n\n")}(i,e.useClientMarkdown&&"string"==typeof e.markdown?e.markdown:i?void 0:e.markdown),y=v;if("review"!==g||e.useClientMarkdown||i?.editedMarkdown||(v=function(a,b,c,d){if(!a?.runId||!a.id||!d.includes("```mermaid"))return d;let e=l().dirname((0,s.HM)(b,"document-model-author.json",a.runId));if(!j().existsSync(e))return d;let f=j().readdirSync(e).filter(a=>/^document-model-checkpoint-\d+\.json$/u.test(a)).sort().at(-1);if(!f)return d;let g=JSON.parse(j().readFileSync(l().join(e,f),"utf8"));if(!g||"object"!=typeof g||!g.tasks||"object"!=typeof g.tasks)throw Error("当前审阅结构化稿无法读取,不能把图源假装渲染成功");let h=(0,q.rZ)({generatedDir:b,projectRoot:c,documentId:a.id}),i=d;for(let a of Object.values(g.tasks))for(let b of a.current?.output?.units??[]){if("figure"!==b.kind)continue;let a={...b,heading:void 0},c=(0,r.renderAuthorUnit)(a),d=c.indexOf("```mermaid");if(d<0)continue;let e=c.slice(d);if(!i.includes(e))continue;let f=h.renderer(a),g=("string"==typeof f?[f]:f).map((b,c)=>`![${a.caption.replaceAll("[","").replaceAll("]","")}${c?"(续)":""}](${b})`).join("\n\n");i=i.replace(e,g)}let k=h.receipts();if(k.length){let c=(0,m.createHash)("sha256").update(d).digest("hex"),e=(0,m.createHash)("sha256").update(i).digest("hex"),g=(0,m.createHash)("sha256").update(JSON.stringify([c,e,f])).digest("hex");(0,s.tv)(b,`review-figure-assets-${g}.json`,{runId:a.runId,documentId:a.id,modelFile:f,sourceHash:c,renderedHash:e,renderedFromExistingUnitsOnly:!0,receipts:k},a.runId)}return i}(i,(0,D.Gl)(h),h,v)),!(0,t.a1)(v))return b.status(422).json({error:"EMPTY_EXPORT_BODY",message:"当前没有已写入的正文,不能生成空白审阅文件。"});let z=i?.reviewMetadata?.contractQuality??i?.draft?.reviewMetadata?.contractQuality,A=i?.draft?.markdown||i?.markdown||"",B=aY(v,A===y?v:A),{markdown:C,audit:E}=B,F=e.format;if(!F||!["markdown","html","pdf","docx"].includes(F))return b.status(400).json({error:"INVALID_EXPORT_FORMAT",message:"请选择有效的导出格式。"});B.issues.length>0&&b.setHeader(Z.contentIssues,encodeURIComponent(JSON.stringify(B.issues.slice(0,20))));let G=_(E);G&&b.setHeader(Z.renderAudit,encodeURIComponent(JSON.stringify(G)));let H=i?.draft?.exportGate||e.exportGate,J=(H?.blockingIssues||[]).map(a=>({level:"error",...a})),O=H?.passed===!1&&0===J.length?[{level:"error",message:"导出门禁未通过:存在未完成的检查项"}]:[],U=[...J,...O],W=[i?.draft?.exportGate?.deliveryFingerprint,i?.draft?.exportGate?.textFingerprint].find(a=>"string"==typeof a&&a.length>0),X=(0,M.c6)(v),Y=W?W===X?"matched":"mismatch":"absent";"matched"!==Y&&b.setHeader(Z.gateBinding,Y);let $="mismatch"===Y?[{level:"error",severity:"blocker",message:"将交付的正文与门禁判定时的正文**不是同一份**(收口后被编辑/替换):放行依据对不上这份文本,本份正文尚未取得交付资格。",suggestion:"若改动是有意的:重新生成或重跑校验后再导出;若只是留档:请用审阅导出。"}]:[],ab=z&&(z.documentHash!==(0,x.Sl)(i?.draft?.chapters??[],v)||!(0,x.R3)(z))?[{level:"error",severity:"blocker",message:z.documentHash!==(0,x.Sl)(i?.draft?.chapters??[],v)?"正文已经变更,冻结合同的七维评价回执属于旧版本,须重新评价后交付。":"当前协议的七维职责核验及专业档位尚未达标,历史回执和客户端门禁声明不能替代。"}]:[],ac=i&&i.draft?.exportGate?.passed===!0&&"absent"!==Y||U.length||$.length||ab.length?[]:[{level:"error",severity:"blocker",message:"未取得服务端对本份正文的已通过评价及绑定回执;本次仅可作审阅导出,客户端声明不能替代评价。"}],ad=[...U,...$,...ab,...z?(0,x.ie)(z):[],...ac,...(function(a,b,c){if(!a?.runId)return["交付导出缺少当前生成运行身份"];let d=S(b,a.runId,"run-inputs.json").data,e=S(b,a.runId,"document-contract.json").data,f=S(b,a.runId,"project-model.json").data,g=S(b,a.runId,"contract-quality.json").data,h=S(b,a.runId,"tender-requirements.json").data,i=S(b,a.runId,"tender-source-coverage-review.json").data,j=S(b,a.runId,"professional-outline-plan.json").data,k=a.reviewMetadata?.contractQuality??a.draft?.reviewMetadata?.contractQuality,l=(0,x.Sl)(a.draft?.chapters??[],c),m=[];if(k&&k.documentHash===l&&(0,x.R3)(k)&&g&&JSON.stringify(g)===JSON.stringify(k)||m.push("缺少本份正文的当前实际冻结合同七维评价回执"),e&&f&&k&&k.contractId===e.id&&k.projectSnapshotId===f.snapshotId||m.push("评价回执与冻结合同、项目来源身份未绑定"),e){e.version!==P.GM&&m.push("冻结合同属于历史协议,须按当前写作及评价协议重新生成");let{id:a,...b}=e;a!==Q(JSON.stringify(b))&&m.push("冻结合同原始内容与身份不一致")}if(f){let{snapshotId:a,...b}=f;a!==Q(JSON.stringify(b))&&m.push("项目来源快照原始内容与身份不一致")}d&&d.runId===a.runId&&d.documentId===a.id&&Array.isArray(d.sources)&&d.sources.length||m.push("缺少本次运行的完整来源输入绑定");let n=a.draft?.exportGate?.checklist?.filter(a=>"tender-source-completeness"===a.key),o=R(h?.sourceLibrary),p=Array.isArray(o?.units)?o.units:void 0,q=Array.isArray(i?.batches)?i.batches.map(R):void 0,r=q?.flatMap(a=>Array.isArray(a?.requestedIndices)?a.requestedIndices:[]),s=q?.flatMap(a=>Array.isArray(a?.responseIndices)?a.responseIndices:[]),t=p?.map(a=>R(a)?.index),u=(a,b)=>!!(a&&b&&a.every(a=>Number.isSafeInteger(a)&&Number(a)>=0)&&new Set(a).size===a.length&&a.length===b.length&&a.every(a=>b.includes(a)));return!(!n||1!==n.length||!0!==n[0].passed||!i||"tender-source-coverage-review-v6-source-duty-routes"!==i.version||"measured"!==i.status||j?.version!=="professional-outline-plan-v7-source-duty-channels"||!Array.isArray(j.requirementAssignments)||i.candidateRoutesHash!==Q(JSON.stringify(j.requirementAssignments))||i.documentHash!==l||!o||i.sourceHash!==Q(JSON.stringify(o))||!Array.isArray(i.omissions)||!Array.isArray(i.bodyFindings)||i.bodyFindings.length!==i.omissions.length||i.bodyFindings.some((a,b)=>{let d=R(a);return!d||d.omissionIndex!==b||"covered"!==d.status||"string"!=typeof d.reason||!d.reason.trim()||!Array.isArray(d.quotes)||!d.quotes.length||d.quotes.some(a=>"string"!=typeof a||!a.trim()||!c.includes(a))})||!q?.length||q.some(a=>!Array.isArray(a?.errors)||a.errors.length||!u(Array.isArray(a.responseIndices)?a.responseIndices:void 0,Array.isArray(a.requestedIndices)?a.requestedIndices:void 0)))&&t?.length&&u(r,t)&&u(s,t)||m.push("完整来源技术义务漏项审阅未通过或回执与本份正文、原来源不一致"),m})(i,(0,D.Gl)(h),v).map(a=>({level:"error",severity:"blocker",message:a}))],ae=0===ad.length&&0===E.blockers.length,af=(a,d,e)=>{let f=function(a){let{record:b}=a,c=S(a.generatedDir,b?.runId,"run-inputs.json"),d=S(a.generatedDir,b?.runId,"document-contract.json").data,e=S(a.generatedDir,b?.runId,"document-model-final.json"),f=e.data?e:S(a.generatedDir,b?.runId,"document-model-author.json"),g=f.data,h=Array.isArray(c.data?.sources)?c.data.sources:void 0,i=T(d?.chapters??b?.draft?.chapters),j=(b?.draft?.chapters??b?.checkpointChapters??[]).filter(a=>(0,t.a1)(a.content??"")),k=T(j).filter(b=>j.some(c=>c.id===b.id&&a.markdown.includes(c.content))),l=i.length>0&&k.length===j.length,m=b?.reviewMetadata?.contractQuality??b?.draft?.reviewMetadata?.contractQuality,n=S(a.generatedDir,b?.runId,"tender-source-coverage-review.json"),o=R(c.data?.buildIdentity),p=!!(h&&c.sha256&&c.data?.runId===b?.runId&&c.data?.documentId===b?.id);return{version:1,purpose:a.purpose,capturedAt:Date.now(),documentId:b?.id??null,runId:b?.runId??null,title:a.title,format:a.format??"unmeasured",body:{sha256:Q(a.markdown),bytes:Buffer.byteLength(a.markdown),chars:a.markdown.length},identity:{exportBuildId:a.buildId??null,generationBuildId:"string"==typeof o?.sourceFingerprint?o.sourceFingerprint:null,runInputsSha256:c.sha256??null,sourceSnapshotSha256:h?Q(JSON.stringify(h)):null,sourceCount:h?.length??null,status:p?"bound":"unmeasured"},generation:{status:b?.status??"editor",error:b?.error??null,warnings:b?.warningIssues??[]},chapters:{status:l?"measured":"unmeasured",expected:i,written:k,missing:l?i.filter(a=>!k.some(b=>b.id===a.id)):[],...!l?{reason:"缺少完整章计划,或编辑后正文无法与原章节快照逐字对位;不把无法对位冒充已证缺章"}:{}},acceptance:{passed:a.acceptancePassed,issues:[...a.issues]},sourceCompleteness:{checklist:b?.draft?.exportGate?.checklist?.find(a=>"tender-source-completeness"===a.key)??null,receipt:n.data??null,receiptSha256:n.sha256??null},quality:{status:m?m.documentHash===(0,x.Sl)(b?.draft?.chapters??[],a.markdown)?"current":"historical":"unmeasured",receipt:m??null},rework:{status:g?"recorded":"unmeasured",modelSha256:f.sha256??null,authorPassSealed:"boolean"==typeof g?.authorPassSealed?g.authorPassSealed:null,c0ReferenceChars:"number"==typeof g?.c0ReferenceChars?g.c0ReferenceChars:null,ledger:g?.rework??null,revisionCount:Array.isArray(g?.revisions)?g.revisions.length:null,userRevisionCount:b?.revisionLog?.length??0},render:a.render??{status:"pending"}}}({record:i,generatedDir:(0,D.Gl)(h),markdown:v,title:p,purpose:g,format:F,buildId:(0,w.S)()?.sourceFingerprint,acceptancePassed:ae&&0===ad.length&&0===E.blockers.length,issues:[...ad.map(a=>a.message),...B.issues],render:{status:a,...d?{error:d}:{},audit:_(E),...void 0!==e?{artifact:{sha256:(0,m.createHash)("sha256").update(e).digest("hex"),bytes:Buffer.byteLength(e)}}:{}}});c={...function(a,b){let c=Q(JSON.stringify(b)),d=(0,s.tv)(a,`review-export-${c}.json`,b,b.runId??void 0);return{id:c,sha256:d.sha256,bodySha256:b.body.sha256}}((0,D.Gl)(h),f),...i?.runId?{runId:i.runId}:{}},b.setHeader(Z.issuesReport,encodeURIComponent(JSON.stringify(c))),b.setHeader(Z.bodySha256,f.body.sha256),b.setHeader(Z.exportPurpose,g),b.setHeader(Z.gatePassed,f.acceptance.passed?"true":"false")};if(af("pending"),"delivery"===g&&E.blockers.length>0)return af("failed",E.blockers.map(a=>a.message).join(";")),b.status(422).json({error:"EXPORT_SOURCE_STRUCTURAL_DEFECT",message:`导出源存在结构性缺陷,已按纯渲染模式阻断(不再补造表头):${E.blockers.slice(0,3).map(a=>a.message).join(";")}`,issues:E.blockers.slice(0,20)});if(!ae&&"delivery"===g)return af("failed","当前正文尚未通过交付验收"),b.status(422).json({error:"EXPORT_GATE_BLOCKED",message:`导出门禁未通过(${ad.length} 项阻断),文档未达交付标准,已阻止导出。请先使用审阅导出供专业人员核对,交付导出须通过本份正文的验收。`,issues:ad.slice(0,20)});b.setHeader(Z.gatePassed,ae?"true":"false"),b.setHeader(Z.notDeliverable,"review"===g?"true":"false"),ae||(b.setHeader(Z.gateIssues,encodeURIComponent(JSON.stringify(ad.map(a=>a.message).slice(0,20)))),b.setHeader(Z.gateIssueCount,String(ad.length)));let ag="review"===g?function(a){let b=a.lastIndexOf("."),c=b>0?a.slice(0,b):a;return c.endsWith("_审阅稿")?a:b>0?`${c}_审阅稿${a.slice(b)}`:`${a}_审阅稿`}(aa(p)):aa(p),ah=a=>{let c=function(a,b,c="enforce"){let d=b?.pageMin,e=b?.pageLimit;if("informational"===c)return{status:"informational",passed:!0,reason:"本轮按专业内容验收,真实页数仅供后续人工排版参考",pages:a??null,min:d??null,max:e??null};if(void 0===d&&void 0===e)return{status:"not-applicable",passed:!0,reason:"本轮没有页数上下限义务",pages:a??null,min:null,max:null};if(void 0!==d&&(!Number.isInteger(d)||d<=0)||void 0!==e&&(!Number.isInteger(e)||e<=0)||void 0!==d&&void 0!==e&&d>e)return{status:"unmeasured",passed:!1,reason:"冻结的页数义务不完整或上下限冲突,须回到合同编译处理",pages:a??null,min:d??null,max:e??null};if(void 0===a||!Number.isInteger(a)||a<=0)return{status:"unmeasured",passed:!1,reason:"实际渲染页数未完成测量,不能以字数或估算页数代替",pages:null,min:d??null,max:e??null};let f=(void 0===d||a>=d)&&(void 0===e||a<=e);return{status:f?"met":"not-met",passed:f,reason:f?`实际${a}页满足页数义务`:`实际${a}页未满足${void 0===d?"":`不少于${d}页`}${void 0!==d&&void 0!==e?"、":""}${void 0===e?"":`不超过${e}页`}`,pages:a,min:d??null,max:e??null}}(a,k?.formatRules,"informational"),d=k?.formatRules.pageLimit;if(d&&a&&a>d){let e=k?.formatRules.pageEvidence?.filter(a=>"max"===a.kind&&a.value===d),f=e?.length&&e.every(a=>"recommendation"===a.status)?"来源篇幅建议":"尚未核定适用范围的篇幅候选";b.setHeader(Z.pageLimit,encodeURIComponent(`${f}:当前${a}页,参考${d}页;${c.reason}`))}};try{if("markdown"===F){let a=an(C,h,E),e=_(E);return e&&b.setHeader(Z.renderAudit,encodeURIComponent(JSON.stringify(e))),b.setHeader(Z.figureInline,encodeURIComponent(JSON.stringify({inlined:a.report.inlined,failed:a.report.failed.map(a=>`${a.name}:${a.reason}`).slice(0,20)}))),af("succeeded",void 0,a.markdown),a_(i,F,h,e||G,ad,void 0,{content:a.markdown,startedAt:d},g,c),b.setHeader("Content-Type","text/markdown; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ag}.md`)}`),b.status(200).send(a.markdown)}if("docx"===F){let a=E.blockers.length,f=await aJ(p,C,u,"review"===g?void 0:e.wordTemplatePath,h,E,k?.formatRules,"review"===g),j=f.buffer;if(f.imageReceipt.embedded!==f.imageReceipt.expected||f.imageReceipt.layoutIssues?.length){let a=f.imageReceipt.layoutIssues?.join(";")??`DOCX图件未完整进包:应有${f.imageReceipt.expected}处,实际${f.imageReceipt.embedded}处;不能以文字占位代替图件交付`;if(ad.push({level:"error",severity:"blocker",message:a}),"delivery"===g)return af("failed",a),b.status(422).json({error:"EXPORT_FIGURE_NOT_CONSERVED",message:a});b.setHeader(Z.gatePassed,"false"),b.setHeader(Z.notDeliverable,"true"),b.setHeader(Z.gateIssues,encodeURIComponent(JSON.stringify(ad.map(a=>a.message).slice(0,20)))),b.setHeader(Z.gateIssueCount,String(ad.length))}f.templateWarning&&(b.setHeader(Z.templateWarning,encodeURIComponent(f.templateWarning)),console.error(`[export] ${f.templateWarning}`));let l=_(E);if(l&&b.setHeader(Z.renderAudit,encodeURIComponent(JSON.stringify(l))),"delivery"===g&&E.blockers.length>a){let c=E.blockers.slice(a);return af("failed",c.map(a=>a.message).join(";")),b.status(422).json({error:"EXPORT_RENDER_NOT_PURE",message:`docx 渲染阶段存在未声明的正文改动,已按纯渲染模式阻断:${c.slice(0,3).map(a=>a.message).join(";")}`,issues:c.slice(0,20)})}let m=await K(j).catch(a=>({unavailableReason:`渲染器异常:${a instanceof Error?a.message.split("\n")[0]:String(a)}`})),n=void 0!==m.pages&&null!==m.pages?{pages:m.pages,renderer:m.renderer||"unknown"}:{unavailableReason:m.unavailableReason||"未知原因"};return ah(m.pages),af("succeeded",void 0,j),a_(i,F,h,l||G,ad,n,{content:j,startedAt:d},g,c),b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ag}.docx`)}`),b.status(200).send(j)}let f=await aZ(p,C,u,h,k?.formatRules.monoColor===!0,E);"review"===g&&(f=function(a){let b=j().readFileSync(o()).toString("base64"),c=`<style>@font-face{font-family:"${n}";src:url(data:font/otf;base64,${b}) format("opentype");font-weight:400;font-style:normal;}body,body *{font-family:"${n}",sans-serif!important;}</style>`;if(!a.includes("</head>"))throw Error("审阅HTML缺少文档头,无法可靠嵌入中文字体");return a.replace("</head>",`${c}</head>`)}(f),E.notices.push({code:"review-font-fallback",message:"审阅HTML/PDF嵌入Noto Sans CJK SC,保证跨环境中文可读;字体替代未认定为指定投标字体达标"}));let l=_(E);if(l&&b.setHeader(Z.renderAudit,encodeURIComponent(JSON.stringify(l))),"html"===F)return af("succeeded",void 0,f),a_(i,F,h,l||G,ad,void 0,{content:f,startedAt:d},g,c),b.setHeader("Content-Type","text/html; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ag}.html`)}`),b.status(200).send(f);try{let a=await a$(f,u,k?.formatRules),e=await I(a);return ah(e),af("succeeded",void 0,a),a_(i,F,h,l||G,ad,e?{pages:e,renderer:"chromium-pdf-page-tree"}:{unavailableReason:"PDF页树解析失败,实际页数未完成验收"},{content:a,startedAt:d},g,c),b.setHeader("Content-Type","application/pdf"),e&&b.setHeader(Z.pdfPageCount,String(e)),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ag}.pdf`)}`),b.status(200).send(a)}catch(c){return af("failed",c instanceof Error?c.message:String(c)),(0,V.wF)({level:"error",source:"api/documents/export",functionName:"pdfExportChromium",error:c,req:a,meta:{fallback:"system-browser-attempted"}}),b.status(500).json({error:"PDF_RENDER_FAILED",message:"PDF 渲染失败:未找到或无法启动可用的 Chrome/Chromium/Edge。请安装 Chrome,或设置 PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH 后重试。"})}}catch(a){return af("failed",a instanceof Error?a.message:String(a)),b.status(500).json({error:"EXPORT_RENDER_FAILED",message:"渲染失败,独立审阅报告已保留。"})}}let a1={inlineLocalImages:ah,inlineMarkdownFigures:an,createInlineImageResolver:ag,resolveLocalImagePath:af,rasterizeMarkdownSvgFigures:aB,buildDocxInternal:aL,createExportRenderAudit:$,exportRenderAuditReport:_,canonicalExportText:aT,exportConservationDiff:function(a,b){return aU(aT(a),aT(b))},diffCanonicalText:aU,docxVisibleText:aV,canonicalDocxText:aW,docxStageConservationDiff:aX,prepareExportMarkdown:aY,stripInlineMarkdown:ar,enhanceTocHtml:aO,buildExportHtml:aZ,renderPdfBuffer:a$,resolveExportStyle:ax,buildDocx:aJ,markdownToDocxXml:aH,validateExportMarkdown:aS,isTableCaptionLine:aD,DOCX_TOC_FIELD_PLACEHOLDER:aE},a2=(0,W.j)("api/documents/export",a0);var a3=c(68970),a4=c(50296);let a5=(0,h.M)(d,"default"),a6=(0,h.M)(d,"config"),a7=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/export",pathname:"/api/documents/export",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function a8(a,b,c){let d=await a7.prepare(a,b,{srcPage:"/api/documents/export"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,a3.getTracer)(),e=d.getActiveScopeSpan(),j=a7.instrumentationOnRequestError.bind(a7),k=async e=>a7.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:a7.isDev,page:"/api/documents/export",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==a4.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(a4.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:a3.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(a7.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},57975:a=>{a.exports=require("node:util")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83142:a=>{a.exports=import("marked")},83237:a=>{a.exports=import("playwright")},85497:(a,b,c)=>{c.d(b,{c:()=>d});async function d(a){let{Marked:b}=await Promise.resolve().then(c.bind(c,83142));return new b({async:!1,gfm:!0,breaks:!0,...a?{renderer:a}:{},tokenizer:{del(a){if(a.startsWith("~~"))return!1}}})}},88194:a=>{a.exports=require("jszip")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")},97864:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.worker.mjs")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,5746,5304,3806,2434,1243,1001,9666],()=>b(b.s=26735));module.exports=c})();
|
|
29
|
+
`}(e,d)}</style></head><body>${f}</body></html>`}(a,g,c,e),d,f)}async function bg(a,b,d,e=[]){let{chromium:f}=await Promise.resolve().then(c.bind(c,83237)),g=[{label:"playwright-bundled-chromium",options:{headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-chrome-channel",options:{channel:"chrome",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-msedge-channel",options:{channel:"msedge",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},...(function(){let a=[process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH,process.env.CHROME_PATH].filter(Boolean),b=U.homedir();return[...new Set([...a,..."darwin"===process.platform?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",k.join(b,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),k.join(b,"Applications/Chromium.app/Contents/MacOS/Chromium")]:"win32"===process.platform?[k.join(process.env.PROGRAMFILES||"C:\\Program Files","Google/Chrome/Application/chrome.exe"),k.join(process.env["PROGRAMFILES(X86)"]||"C:\\Program Files (x86)","Google/Chrome/Application/chrome.exe"),k.join(process.env.LOCALAPPDATA||"","Google/Chrome/Application/chrome.exe"),k.join(process.env.PROGRAMFILES||"C:\\Program Files","Microsoft/Edge/Application/msedge.exe")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium","/usr/bin/microsoft-edge"]].filter(a=>a&&i.existsSync(a)))]})().map(a=>({label:a,options:{executablePath:a,headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}}))],h=[];for(let c of g)try{let g=await f.launch(c.options);try{let c=await g.newPage({locale:"zh-CN"});if(await c.setContent(a,{waitUntil:"load"}),e.length){let a=e.map(a=>({contractHash:a.contractHash,...function(a){return{caption:a.caption,rows:[...a.headerRows,...a.rows,...a.notes.map(b=>({cells:[{text:b,colSpan:a.columnWidths?.length??Math.max(1,...a.headerRows.map(a=>a.cells.reduce((a,b)=>a+b.colSpan,0))),rowSpan:1}]}))].map(a=>a.cells.map(a=>({text:a.text,colSpan:a.colSpan,rowSpan:a.rowSpan})))}}(a.projection)}));if(await c.evaluate(a=>{let b=[...document.querySelectorAll("table[data-tender-original-form]")],c=a=>String(a??"").replace(/\s+/gu,"");return b.length!==a.length||a.some((a,d)=>{let e=b[d],f=e.getBoundingClientRect();return e.dataset.tenderOriginalForm!==a.contractHash||c(e.caption?.textContent??"")!==c(a.caption)||f.width<=0||f.height<=0||e.rows.length!==a.rows.length||a.rows.some((a,b)=>{let d=[...e.rows[b].cells];return d.length!==a.length||a.some((a,b)=>{let e=d[b],f=e.getBoundingClientRect();return c(e.textContent)!==c(a.text)||e.colSpan!==a.colSpan||e.rowSpan!==a.rowSpan||f.width<=0||f.height<=0||e.scrollWidth>e.clientWidth+2||e.scrollHeight>e.clientHeight+2})})})},a))throw Error("ORIGINAL_FORM_RENDER_INVALID:PDF实际DOM的原格式表头、合并、固定行、说明或可见布局不符")}await c.evaluate(async()=>{await document.fonts.ready}),await c.waitForFunction(()=>Array.from(document.images).every(a=>a.complete),void 0,{timeout:1e4}).catch(()=>void 0),await c.emulateMedia({media:"print"});let f=aN(b),h=d?.headersFooters==="forbidden"?{displayHeaderFooter:!1}:{displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:`<div style="font-family:${f.fontFamily};font-size:10.5pt;line-height:12pt;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>`},i=async()=>Buffer.from(await c.pdf({format:f.paper,printBackground:!0,preferCSSPageSize:!0,outline:!0,tagged:!0,margin:{top:f.marginTop,right:f.marginRight,bottom:f.marginBottom,left:f.marginLeft},...h})),j=await i();for(let a=0;a<3;a+=1){let a=await (0,Y.GA)(j);if(!a)throw Error("PDF实际页树/章节书签无法读取,不能编造目录页码");if(!await c.evaluate(a=>{let b=!1;for(let c of document.querySelectorAll("[data-toc-title]")){let d=c.dataset.tocTitle,e=void 0===a[d]?"":String(a[d]);c.textContent!==e&&(c.textContent=e,b=!0)}return b},a))return j;j=await i()}throw Error("PDF目录页码实际排版校验未收敛")}finally{await g.close()}}catch(a){if(a instanceof Error&&a.message.startsWith("ORIGINAL_FORM_RENDER_"))throw a;h.push(`${c.label}: ${a instanceof Error?a.message:String(a)}`)}throw Error(h.join("\n"))}function bh(a,b,c,d,e=[],f,g,h,i){if(a)try{let j=a.draft,k=j?.reviewMetadata?.diagnostics?.quality,l=a.completedAt?Math.max(0,a.completedAt-a.createdAt):Math.max(0,Date.now()-a.createdAt),n=(a.draft?.exportGate?.manualReviewIssues||[]).map(a=>({...a,level:a.level??"warning"})),o=[...e,...n],p=o.length>0?function(a,b,c){let d=a.map((a,c)=>({index:c+1,category:a.category?ab[a.category]:"其他",location:function(a,b){if(a.chapterId){let c=b?.find(b=>b.id===a.chapterId);if(c?.title)return a.sectionTitle?`${c.title} / ${a.sectionTitle}`:c.title}if(a.sectionTitle)return a.sectionTitle;let c=a.message.match(/^(\d{1,2}(?:\.\d{1,2}){1,3}[\s\u00a0]*[^\s::]{2,24})[^::]{0,24}[::]/u);return c?c[1].trim():"全文"}(a,b),problem:a.message,action:a.suggestion||"人工核对后修订正文;修订必须同步导出源(doc.json.markdown)并复核守恒,或基于检查点续修重试。",repairPath:a.repairability?ac[a.repairability]:"自动修复链已执行(残留待人工定位)",detectorId:a.provenance?.detectorId}));return{suspended:!0,generatedAt:Date.now(),total:d.length,repairChainSummary:"已保存逐项问题与依据;实际自动处理范围以本轮执行回执为准",items:d,...{}}}(o,j?.chapters):void 0,q={format:b,exportPurpose:h,reviewReport:i,exportedAt:Date.now(),durationMs:l,ruleSummary:(j?.promptRules?.executionSummary||[]).slice(0,12),repairedCount:k?.repairedCount,blockingCount:k?.blockingCount,gatePassed:j?.exportGate?.passed===!0&&0===e.length&&(d?.blockerCount??0)===0,...a.runId&&j?.reviewMetadata?.contractQuality?{sourceIdentity:{runId:a.runId,documentHash:j.reviewMetadata.contractQuality.documentHash,contractId:j.reviewMetadata.contractQuality.contractId,buildId:(0,S.S)()?.sourceFingerprint}}:{},...g?{artifact:{sha256:(0,m.createHash)("sha256").update(g.content).digest("hex"),bytes:Buffer.byteLength(g.content)},renderDurationMs:Math.max(0,Date.now()-g.startedAt)}:{},healthAlerts:j?.reviewMetadata?.telemetry?.healthAlerts,repairHeat:j?.reviewMetadata?.telemetry?.repairHeat,...d?{renderAudit:d}:{},...p?{gateIssueCount:e.length,gateChecklist:p}:{},...f?{realPages:f}:{}};a.runId&&(0,x.tv)((0,X.Gl)(c),`export-receipt-${(0,m.createHash)("sha256").update(JSON.stringify(q)).digest("hex")}.json`,q,a.runId);let r=(0,X.v7)(a.id,c),s=[...r?.exportReports||a.exportReports||[],q].slice(-20);(0,X.a6)(a.id,{exportReports:s},c)}catch(a){console.warn(`[export] 渲染审计报告归档失败(不影响本次导出,但该次导出不会进历史对照):${a instanceof Error?a.message:String(a)}`)}}async function bi(a,b){let c,d,e=Date.now();if("POST"!==a.method&&"GET"!==a.method)return b.status(405).json({error:"Method not allowed"});if("GET"===a.method&&("string"!=typeof a.query?.reviewReportId||Object.values(a.query).some(a=>"string"!=typeof a)))return b.status(400).json({error:"REVIEW_REPORT_REQUEST_REQUIRED"});let f="GET"===a.method?a.query:a.body;if(!f||"object"!=typeof f||Array.isArray(f))return b.status(400).json({error:"INVALID_EXPORT_REQUEST"});let g=new Set(["documentId","title","markdown","format","exportPurpose","reviewReportId","reviewRunId","useClientMarkdown","exportGate","wordTemplatePath","projectRoot"]);if(Object.keys(f).some(a=>!g.has(a)))return b.status(400).json({error:"INVALID_EXPORT_OPTION",message:"存在不受支持的导出参数,请使用明确的 exportPurpose。"});if(void 0!==f.exportPurpose&&"review"!==f.exportPurpose&&"delivery"!==f.exportPurpose)return b.status(400).json({error:"INVALID_EXPORT_PURPOSE"});let h=f.exportPurpose??"review",i=f.projectRoot||(0,Z.aY)(),p=f.documentId?(0,X.v7)(f.documentId,i):null;if(f.documentId&&(!p||p.id!==f.documentId))return b.status(404).json({error:"Document not found"});if(f.reviewReportId){if(!/^[a-f0-9]{64}$/u.test(f.reviewReportId))return b.status(400).json({error:"INVALID_REVIEW_REPORT_ID"});let a=function(a,b,c){if(!/^[a-f0-9]{64}$/u.test(b))throw Error("INVALID_REVIEW_REPORT_ID");let d=(0,x.HM)(a,`review-export-${b}.json`,c);if(!j().existsSync(d))return;let e=j().readFileSync(d);if(ae(e)!==b)throw Error("REVIEW_REPORT_IDENTITY_MISMATCH");let f=JSON.parse(e.toString("utf8"));if(f.runId!==(c??null))throw Error("REVIEW_REPORT_RUN_MISMATCH");return f}((0,X.Gl)(i),f.reviewReportId,f.reviewRunId);return a&&a.documentId===(p?.id??null)?(b.setHeader("Content-Type","application/json; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${aq(a.title)}_审阅问题报告_${a.body.sha256.slice(0,12)}.json`)}`),b.status(200).send(JSON.stringify(a))):b.status(404).json({error:"REVIEW_REPORT_NOT_FOUND"})}let r=p?.draft?.bidComposition,t=f.title||p?.title||"document",u=(0,_.b2)(r?.formatRules);u&&r?.identityMarksForbidden&&(u.anonymize=!0);let B=function(a,b){if(void 0!==b)return b;if(a?.editedMarkdown!==void 0)return a.editedMarkdown;let c=a?.markdown||a?.draft?.markdown;return c?.trim()?c:(a?.checkpointChapters??[]).filter(a=>(0,Q.a1)(a.content??"")).map(a=>a.content).join("\n\n")}(p,f.useClientMarkdown&&"string"==typeof f.markdown?f.markdown:p?void 0:f.markdown),D=B;if("review"!==h||f.useClientMarkdown||p?.editedMarkdown||(B=function(a,b,c,d){if(!a?.runId||!a.id||!d.includes("```mermaid"))return d;let e=l().dirname((0,x.HM)(b,"document-model-author.json",a.runId));if(!j().existsSync(e))return d;let f=j().readdirSync(e).filter(a=>/^document-model-checkpoint-\d+\.json$/u.test(a)).sort().at(-1);if(!f)return d;let g=JSON.parse(j().readFileSync(l().join(e,f),"utf8"));if(!g||"object"!=typeof g||!g.tasks||"object"!=typeof g.tasks)throw Error("当前审阅结构化稿无法读取,不能把图源假装渲染成功");let h=(0,q.rZ)({generatedDir:b,projectRoot:c,documentId:a.id}),i=d;for(let a of Object.values(g.tasks))for(let b of a.current?.output?.units??[]){if("figure"!==b.kind)continue;let a={...b,heading:void 0},c=function(a,b=4,c,d,e){let f=function(a,b){let c=a=>a?.trim().replace(/^\d+(?:[..]\d+)*[\s、..]+/u,"").trim(),d=c(a.heading),e="paragraph"===a.kind?void 0:a.caption.replace(/^(?:表|图)\s*\d+(?:[.-—-]\d+)*\s*[::.、]?\s*/u,"").trim();return d&&d!==c(b)&&d!==e?d:void 0}(a,void 0),g=f?`${"#".repeat(b)} ${f}
|
|
30
|
+
|
|
31
|
+
`:"";if("paragraph"===a.kind)return g+a.text;if("table"===a.kind)return g+[a.caption,"",`| ${a.columns.map(a=>v(a.title+(a.unit?`(${a.unit})`:""))).join(" | ")} |`,`| ${a.columns.map(()=>"---").join(" | ")} |`,...a.rows.map(b=>`| ${a.columns.map(a=>v(b.cells[a.key])).join(" | ")} |`)].join("\n");let h=new Map(a.nodes.map((a,b)=>[a.id,`n${b}`]));return g+[a.caption,"","```mermaid","flowchart TD",...a.nodes.map(a=>` ${h.get(a.id)}[${w(a.label)}]`),...a.edges.map(a=>` ${h.get(a.from)} -->${a.label?`|${w(a.label)}|`:""} ${h.get(a.to)}`),"```"].join("\n")}(a),d=c.indexOf("```mermaid");if(d<0)continue;let e=c.slice(d);if(!i.includes(e))continue;let f=h.renderer(a),g=("string"==typeof f?[f]:f).map((b,c)=>`![${a.caption.replaceAll("[","").replaceAll("]","")}${c?"(续)":""}](${b})`).join("\n\n");i=i.replace(e,g)}let k=h.receipts();if(k.length){let c=(0,m.createHash)("sha256").update(d).digest("hex"),e=(0,m.createHash)("sha256").update(i).digest("hex"),g=(0,m.createHash)("sha256").update(JSON.stringify([c,e,f])).digest("hex");(0,x.tv)(b,`review-figure-assets-${g}.json`,{runId:a.runId,documentId:a.id,modelFile:f,sourceHash:c,renderedHash:e,renderedFromExistingUnitsOnly:!0,receipts:k},a.runId)}return i}(p,(0,X.Gl)(i),i,B)),!(0,Q.a1)(B))return b.status(422).json({error:"EMPTY_EXPORT_BODY",message:"当前没有已写入的正文,不能生成空白审阅文件。"});let E=p?.reviewMetadata?.contractQuality??p?.draft?.reviewMetadata?.contractQuality,F=p?.draft?.markdown||p?.markdown||"",R=be(B,F===D?B:F),{markdown:T,audit:U}=R,V=f.format;if(!V||!["markdown","html","pdf","docx"].includes(V))return b.status(400).json({error:"INVALID_EXPORT_FORMAT",message:"请选择有效的导出格式。"});R.issues.length>0&&b.setHeader(an.contentIssues,encodeURIComponent(JSON.stringify(R.issues.slice(0,20))));let W=ap(U);W&&b.setHeader(an.renderAudit,encodeURIComponent(JSON.stringify(W)));let ab=p?.draft?.exportGate||f.exportGate,ac=(ab?.blockingIssues||[]).map(a=>({level:"error",...a})),ai=ab?.passed===!1&&0===ac.length?[{level:"error",message:"导出门禁未通过:存在未完成的检查项"}]:[],ak=[...ac,...ai],al=[p?.draft?.exportGate?.deliveryFingerprint,p?.draft?.exportGate?.textFingerprint].find(a=>"string"==typeof a&&a.length>0),am=(0,$.c6)(B),ao=al?al===am?"matched":"mismatch":"absent";"matched"!==ao&&b.setHeader(an.gateBinding,ao);let ar="mismatch"===ao?[{level:"error",severity:"blocker",message:"将交付的正文与门禁判定时的正文**不是同一份**(收口后被编辑/替换):放行依据对不上这份文本,本份正文尚未取得交付资格。",suggestion:"若改动是有意的:重新生成或重跑校验后再导出;若只是留档:请用审阅导出。"}]:[],as=E&&(E.documentHash!==(0,A.Sl)(p?.draft?.chapters??[],B)||!(0,A.R3)(E))?[{level:"error",severity:"blocker",message:E.documentHash!==(0,A.Sl)(p?.draft?.chapters??[],B)?"正文已经变更,冻结合同的七维评价回执属于旧版本,须重新评价后交付。":"当前协议的七维职责核验及专业档位尚未达标,历史回执和客户端门禁声明不能替代。"}]:[],at=p&&p.draft?.exportGate?.passed===!0&&"absent"!==ao||ak.length||ar.length||as.length?[]:[{level:"error",severity:"blocker",message:"未取得服务端对本份正文的已通过评价及绑定回执;本次仅可作审阅导出,客户端声明不能替代评价。"}],au=[...ak,...ar,...as,...E?(0,A.ie)(E):[],...at,...(function(a,b,c){if(!a?.runId)return["交付导出缺少当前生成运行身份"];let d=ag(b,a.runId,"run-inputs.json").data,e=ag(b,a.runId,"document-contract.json").data,f=ag(b,a.runId,"project-model.json").data,g=ag(b,a.runId,"contract-quality.json").data,h=ag(b,a.runId,"construction-source-coverage.json").data,i=a.reviewMetadata?.contractQuality??a.draft?.reviewMetadata?.contractQuality,j=(0,A.Sl)(a.draft?.chapters??[],c),k=[];if(i&&i.documentHash===j&&(0,A.R3)(i)&&g&&JSON.stringify(g)===JSON.stringify(i)||k.push("缺少本份正文的当前实际冻结合同七维评价回执"),e&&f&&i&&i.contractId===e.id&&i.projectSnapshotId===f.snapshotId||k.push("评价回执与冻结合同、项目来源身份未绑定"),e){e.version!==s.GM&&k.push("冻结合同属于历史协议,须按当前写作及评价协议重新生成");let{id:a,...b}=e;a!==ae(JSON.stringify(b))&&k.push("冻结合同原始内容与身份不一致")}if(f){let{snapshotId:a,...b}=f;a!==ae(JSON.stringify(b))&&k.push("项目来源快照原始内容与身份不一致")}d&&d.runId===a.runId&&d.documentId===a.id&&Array.isArray(d.sources)&&d.sources.length||k.push("缺少本次运行的完整来源输入绑定");let l=af(h);if(l?.version!=="construction-source-coverage-ledger-v1")k.push("缺少本份正文的来源覆盖账(construction-source-coverage.json);未测不等于没问题,交付不就绪");else{let b=Array.isArray(l.sources)?l.sources.map(a=>String(af(a)?.filePath??"")):[],c=Array.isArray(l.missingOpinions)?l.missingOpinions.map(String):[],d=Array.isArray(l.omissions)?l.omissions:[],e=f?Object.keys(af(f.sources)??{}).length:b.length;"measured"!==l.status&&k.push("来源覆盖账未达就绪:"+(Array.isArray(l.reasons)?l.reasons.join(";"):"未测")),l.documentHash!==j&&k.push("来源覆盖账绑定的是另一版正文(账与同稿不同源)"),(b.length!==e||c.length||d.length)&&k.push("来源覆盖账没有覆盖全部冻结来源(或有未处置的未引用来源/漏项)");let g=a.draft?.exportGate?.checklist?.filter(a=>"source-coverage-ledger"===a.key);g&&1===g.length&&!0===g[0].passed||k.push("导出清单里没有通过的本份来源覆盖账检查项")}if(i){let a=Array.isArray(i.batches)?i.batches:[];a.length?(a.some(a=>"executed"!==a.status)&&k.push("七维回执存在未执行的审查批次(档位绑定旧版本或缺审)"),a.some(a=>!a.id.trim())&&k.push("审查批次缺少 review-invocation 身份")):k.push("七维回执没有独立审查批次(review-invocation);未审正文不得交付"),(!i.reviewAssessments||i.reviewAssessments.applied<1)&&k.push("七维回执没有可采纳的当前审查档位(review-assessment 为空或全部过期)")}return k})(p,(0,X.Gl)(i),B).map(a=>({level:"error",severity:"blocker",message:a}))],aw=0===au.length&&0===U.blockers.length,ax=(a,d,e)=>{let f=function(a){let{record:b}=a,c=ag(a.generatedDir,b?.runId,"run-inputs.json"),d=ag(a.generatedDir,b?.runId,"document-contract.json").data,e=ag(a.generatedDir,b?.runId,"document-model-final.json"),f=e.data?e:ag(a.generatedDir,b?.runId,"document-model-author.json"),g=f.data,h=Array.isArray(c.data?.sources)?c.data.sources:void 0,i=ah(d?.chapters??b?.draft?.chapters),j=(b?.draft?.chapters??b?.checkpointChapters??[]).filter(a=>(0,Q.a1)(a.content??"")),k=ah(j).filter(b=>j.some(c=>c.id===b.id&&a.markdown.includes(c.content))),l=i.length>0&&k.length===j.length,m=b?.reviewMetadata?.contractQuality??b?.draft?.reviewMetadata?.contractQuality,n=af(c.data?.buildIdentity),o=!!(h&&c.sha256&&c.data?.runId===b?.runId&&c.data?.documentId===b?.id);return{version:1,purpose:a.purpose,capturedAt:Date.now(),documentId:b?.id??null,runId:b?.runId??null,title:a.title,format:a.format??"unmeasured",body:{sha256:ae(a.markdown),bytes:Buffer.byteLength(a.markdown),chars:a.markdown.length},identity:{exportBuildId:a.buildId??null,generationBuildId:"string"==typeof n?.sourceFingerprint?n.sourceFingerprint:null,runInputsSha256:c.sha256??null,sourceSnapshotSha256:h?ae(JSON.stringify(h)):null,sourceCount:h?.length??null,status:o?"bound":"unmeasured"},generation:{status:b?.status??"editor",error:b?.error??null,warnings:b?.warningIssues??[]},chapters:{status:l?"measured":"unmeasured",expected:i,written:k,missing:l?i.filter(a=>!k.some(b=>b.id===a.id)):[],...!l?{reason:"缺少完整章计划,或编辑后正文无法与原章节快照逐字对位;不把无法对位冒充已证缺章"}:{}},acceptance:{passed:a.acceptancePassed,issues:[...a.issues]},sourceCompleteness:function(a,b,c,d){let e=ag(b,a?.runId,"construction-source-coverage.json"),f=e.data,g=[];if(a?.runId&&d?.runId===a.runId&&d.documentId===a.id||g.push("来源覆盖账缺少本运行及本稿的输入身份绑定"),f?.version!==ad.YU)g.push("缺少当前来源覆盖账(construction-source-coverage.json)");else{f.documentHash!==(0,A.Sl)(a?.draft?.chapters??[],c)&&g.push("来源覆盖账属于另一版正文,不能显示为当前证据");let b=a=>{if(!Array.isArray(a)||!a.length)return;let b=a.map(af);if(b.some(a=>"string"!=typeof a?.filePath||!a.filePath||"string"!=typeof a.sha256||!a.sha256))return;let c=b.map(a=>[a.filePath,a.sha256]);if(new Set(c.map(([a])=>a)).size===c.length)return c.sort(([a],[b])=>a.localeCompare(b))},e=b(d?.sources),h=b(f.sources);e&&h&&JSON.stringify(e)===JSON.stringify(h)||g.push("来源覆盖账与本次冻结输入的来源文件/SHA不一致"),(!["measured","unmeasured"].includes(String(f.status))||["unreferenced","opinions","missingOpinions","conflicts","omissions","reasons"].some(a=>!Array.isArray(f[a])))&&g.push("当前来源覆盖账字段不完整,不能把旧审查摘要当作来源覆盖测量")}let h=0===g.length;return{status:h?"bound":"unmeasured",issues:g,checklist:h?a?.draft?.exportGate?.checklist?.find(a=>"source-coverage-ledger"===a.key)??null:null,receipt:h?f:null,receiptSha256:h?e.sha256:null}}(b,a.generatedDir,a.markdown,c.data),quality:{status:m?m.documentHash===(0,A.Sl)(b?.draft?.chapters??[],a.markdown)?"current":"historical":"unmeasured",receipt:m??null},rework:{status:g?"recorded":"unmeasured",modelSha256:f.sha256??null,authorPassSealed:"boolean"==typeof g?.authorPassSealed?g.authorPassSealed:null,c0ReferenceChars:"number"==typeof g?.c0ReferenceChars?g.c0ReferenceChars:null,ledger:g?.rework??null,revisionCount:Array.isArray(g?.revisions)?g.revisions.length:null,userRevisionCount:b?.revisionLog?.length??0},render:a.render??{status:"pending"}}}({record:p,generatedDir:(0,X.Gl)(i),markdown:B,title:t,purpose:h,format:V,buildId:(0,S.S)()?.sourceFingerprint,acceptancePassed:aw&&0===au.length&&0===U.blockers.length,issues:[...au.map(a=>a.message),...R.issues],render:{status:a,...d?{error:d}:{},audit:ap(U),...void 0!==e?{artifact:{sha256:(0,m.createHash)("sha256").update(e).digest("hex"),bytes:Buffer.byteLength(e)}}:{}}});c={...function(a,b){let c=ae(JSON.stringify(b)),d=(0,x.tv)(a,`review-export-${c}.json`,b,b.runId??void 0);return{id:c,sha256:d.sha256,bodySha256:b.body.sha256}}((0,X.Gl)(i),f),...p?.runId?{runId:p.runId}:{}},b.setHeader(an.issuesReport,encodeURIComponent(JSON.stringify(c))),b.setHeader(an.bodySha256,f.body.sha256),b.setHeader(an.exportPurpose,h),b.setHeader(an.gatePassed,f.acceptance.passed?"true":"false")};try{let a=await G(p,i,(0,X.Gl)(i),B);U.verifiedFigures=a.bytes,d=a.receipts,U.verifiedFigures.size&&U.notices.push({code:"figure-inline",message:`原生图件验身:${U.verifiedFigures.size}份实际字节及所引源版本已核,本次渲染固定采用这些字节;不是专业资格。`})}catch(c){let a=c instanceof Error?c.message:String(c);return au.push({level:"error",severity:"blocker",message:a}),ax("failed",a),b.setHeader(an.notDeliverable,"true"),b.status(422).json({error:"CONSTRUCTION_FIGURE_IDENTITY_INVALID",message:a})}try{if(U.verifiedDelivery=function(a,b,c,d,e={}){if(!a?.runId)return{bodyMarkdown:d,appendixMarkdown:""};let f=(0,x.HM)(c,"document-delivery-placements.json",a.runId),g=a.reviewMetadata?.contractQuality??a.draft?.reviewMetadata?.contractQuality,h=g&&g.deliveryPlacements;if(!j().existsSync(f)){let b=(0,x.HM)(c,"planning-context.json",a.runId),e=j().existsSync(b)?JSON.parse(j().readFileSync(b,"utf8")):void 0,f=e?.outputObligations?.some(a=>a.applicability?.delivery?.location==="technical-appendix"||a.applicability?.delivery?.originalForm==="required");return(h?.units.some(a=>"technical-appendix"===a.location||a.binding?.originalFormContractHash)||f)&&P("本运行交付位置原始回执缺失,原格式或技术附表不得借删除回执绕过"),{bodyMarkdown:d,appendixMarkdown:""}}try{let g=JSON.parse(j().readFileSync(f,"utf8")),i=(0,H.loadConstructionFrozenInputs)(b,a.runId,a.id,void 0,{requirePlanningContext:!0}),k=i.planningContext,m=(0,A.Sl)(a.draft?.chapters??[],d),n={projectId:b,documentId:a.id,sourceSnapshotId:i.project.snapshotId,contractId:i.contract.id};(g.runId!==a.runId||g.documentId!==a.id||g.workspaceId!==(0,z.qX)(n)||g.planningContextHash!==(0,z.Fu)(k)||g.documentHash!==m)&&P("交付位置回执与运行、冻结规划、合同工作库或本份全文不符"),h&&(0,z.Fu)(h)===(0,z.Fu)(g.placements)||P("交付位置原始回执与当前合同七维回执不同源");let o=i.tenderResponsePlan;o||P("交付位置回执缺少本运行冻结响应计划");let p=i.runStart.tenderResponsePlanHash;for(let a of(p&&(0,z.Fu)(o)===p||P("冻结响应计划与本运行起始身份不符"),o.sections.flatMap(a=>a.requiredOutputs))){if(!a.applicability&&!a.obligationId)continue;let b=k.outputObligations.find(b=>b.id===a.obligationId);b&&(0,J.oY)(b)&&(0,z.Fu)(a.applicability)===(0,z.Fu)(b.applicability)&&(0,z.Fu)(a.originalForm??null)===(0,z.Fu)(b.originalForm??null)||P("响应计划输出的适用性或原格式不属于当前冻结义务")}for(let a of k.outputObligations.filter(J.oY))("technical-appendix"===a.applicability.delivery.location||"required"===a.applicability.delivery.originalForm)&&1!==o.sections.flatMap(a=>a.requiredOutputs).filter(b=>b.obligationId===a.id).length&&P("原格式或技术附表义务没有唯一的当前输出承接");let q=(0,I.rL)(o),r=l().join(c,"construction","workflow-state.sqlite"),s=j().realpathSync(r),t=j().realpathSync(c),u=l().relative(t,s);return(!u||u.startsWith("..")||l().isAbsolute(u))&&P("交付源工作库不在本项目生成根内"),y.l.inspectEntityHeads(s,n,[],(a,b)=>{let c=i.runStart.scope?.sectionIds,f=b.entityHeads("writing-unit").filter(a=>!a.deleted&&(0,C.iC)(a)).filter(a=>!c?.length||(0,C.iC)(a).sectionIds?.some(a=>c.includes(a))),h=f.map(a=>{let b=(0,C.iC)(a);return{entityId:a.id,entityVersion:a.version,entityHash:(0,z.Fu)(a),...b.originalFormContractHash?{originalFormContractHash:b.originalFormContractHash}:{},..."figure"===b.kind?{figure:{semanticHash:(0,K.CA)(b),notesHash:(0,K.Zc)(b.notes??[])}}:{}}}),j=(0,K.$H)(d,g.placements,{outputPlacements:q,units:h});j.valid||P(j.issues.join(";"));let k=f.map(a=>(0,C.iC)(a));for(let a of k){let b=(0,I.B$)(a,o,a.sectionIds);b.length&&P("实际单元的交付位置/原格式已失效:"+b.join(";"))}(0,C.YK)({units:k.map(a=>({...a,references:a.references.filter(a=>"evidence"!==a.kind),assertions:a.assertions.filter(a=>"evidence"!==a.reference.kind)})),currentEntityVersion:b.currentEntityVersion,certificateValid:b.certificateCurrent,evidenceExists:()=>!1}).some(a=>a.needsRecheck)&&P("交付所引决定或计算证书已失效");let l=f.map((a,b)=>({entityId:a.id,unit:k[b],sectionIds:k[b].sectionIds??[]})),n=(0,M.ut)({contract:i.contract,units:l}),p=(0,M.Lz)({units:l,carriers:n}),r={entity:a=>{let c=b.currentEntityVersion(a);return void 0===c?void 0:b.entityVersion(a,c)},certificate:b.certificate},s=b.entityHeads("review-assessment").filter(a=>!a.deleted).flatMap(a=>{let{value:b}=(0,N.fv)(a.value);return b?[{id:a.id,value:b}]:[]}).filter(a=>(0,N.O4)(r,a.value,void 0,(0,N.IQ)(i.bidComposition,i.bidCompositionSources),o)&&(0,N.O0)(r,a.value)),t=(0,O.b)({contract:i.contract,plan:o,units:f.map((a,b)=>({...l[b],responsibilityId:String(a.value?.responsibilityId??""),purpose:String(a.value?.purpose??""),sectionIds:[...l[b].sectionIds],entityVersion:a.version,entityHash:(0,z.Fu)(a)})),composition:{markdown:d,documentHash:m,deliveryPlacements:g.placements},assessments:s,reviewStore:r,figureAssets:e.figureAssets,verifiedFigureBytes:e.verifiedFigureBytes,figureStyle:{monoColor:i.bidComposition?.formatRules.monoColor,fontFamily:i.bidComposition?.formatRules.bodyFont||i.bidComposition?.formatRules.fontFamily},expectedBidCompositionHash:(0,N.IQ)(i.bidComposition,i.bidCompositionSources),scopeSectionIds:c}).find(a=>"met"!==a.status);t&&P("原格式实际载体未通过当前结构与独审核验:"+t.checks.filter(a=>"met"!==a.status).map(a=>a.reason).join(";"));let u=[];for(let a=0;a<f.length;a++){let b=f[a],c=k[a],e=(0,I.nI)(c,o,c.sectionIds);if(!e?.originalForm||e.applicability?.delivery.originalForm!=="required"||"figure"===e.originalForm.kind)continue;let h=(0,L.O9)({contract:e.originalForm,unit:p.units[a]});"met"===h.status&&h.html&&h.projection||P("原格式实际产物不能按已审完整结构渲染");let i=g.placements.units.find(a=>a.entityId===b.id).range,j=d.slice(i.start,i.end);2!==j.split(h.html).length&&P("原格式实际HTML与当前单元、发布编号或冻结母版不同源"),u.push({contractHash:e.originalForm.hash,unitEntityId:b.id,html:h.html,projection:h.projection})}return u.sort((a,b)=>g.placements.units.find(b=>b.entityId===a.unitEntityId).range.start-g.placements.units.find(a=>a.entityId===b.unitEntityId).range.start),{bodyMarkdown:j.bodyMarkdown,appendixMarkdown:j.appendixMarkdown,placements:g.placements,outputPlacements:q,originalForms:u}})}catch(a){if(a instanceof Error&&a.message.startsWith("CONSTRUCTION_DELIVERY_IDENTITY_INVALID"))throw a;return P(a instanceof Error?a.message:String(a))}}(p,i,(0,X.Gl)(i),B,{figureAssets:d,verifiedFigureBytes:U.verifiedFigures}),U.verifiedDelivery.placements&&T!==B)throw Error("CONSTRUCTION_DELIVERY_IDENTITY_INVALID:导出预处理改变了已冻结位置的全文,请先重新装配核验")}catch(c){let a=c instanceof Error?c.message:String(c);return au.push({level:"error",severity:"blocker",message:a}),ax("failed",a),b.setHeader(an.notDeliverable,"true"),b.status(422).json({error:"CONSTRUCTION_DELIVERY_IDENTITY_INVALID",message:a})}if((0,aa.Kf)(r)){let a=await (0,aa.m3)();au.push(...a({markdown:B,spec:r,...U.verifiedDelivery?.placements?{deliveryPlacements:U.verifiedDelivery.placements,outputPlacements:U.verifiedDelivery.outputPlacements}:{},isVerifiedDiagram:a=>{let b=av(a,i,U.verifiedFigures);return!!(b&&U.verifiedFigures?.has(k.resolve(b)))}}))}if(aw=0===au.length&&0===U.blockers.length,ax("pending"),"delivery"===h&&U.blockers.length>0)return ax("failed",U.blockers.map(a=>a.message).join(";")),b.status(422).json({error:"EXPORT_SOURCE_STRUCTURAL_DEFECT",message:`导出源存在结构性缺陷,已按纯渲染模式阻断(不再补造表头):${U.blockers.slice(0,3).map(a=>a.message).join(";")}`,issues:U.blockers.slice(0,20)});if(!aw&&"delivery"===h)return ax("failed","当前正文尚未通过交付验收"),b.status(422).json({error:"EXPORT_GATE_BLOCKED",message:`导出门禁未通过(${au.length} 项阻断),文档未达交付标准,已阻止导出。请先使用审阅导出供专业人员核对,交付导出须通过本份正文的验收。`,issues:au.slice(0,20)});b.setHeader(an.gatePassed,aw?"true":"false"),b.setHeader(an.notDeliverable,"review"===h?"true":"false"),aw||(b.setHeader(an.gateIssues,encodeURIComponent(JSON.stringify(au.map(a=>a.message).slice(0,20)))),b.setHeader(an.gateIssueCount,String(au.length)));let ay="review"===h?function(a){let b=a.lastIndexOf("."),c=b>0?a.slice(0,b):a;return c.endsWith("_审阅稿")?a:b>0?`${c}_审阅稿${a.slice(b)}`:`${a}_审阅稿`}(aq(t)):aq(t),az=a=>{let c=function(a,b,c="enforce"){let d=b?.pageMin,e=b?.pageLimit;if("informational"===c)return{status:"informational",passed:!0,reason:"本轮按专业内容验收,真实页数仅供后续人工排版参考",pages:a??null,min:d??null,max:e??null};if(void 0===d&&void 0===e)return{status:"not-applicable",passed:!0,reason:"本轮没有页数上下限义务",pages:a??null,min:null,max:null};if(void 0!==d&&(!Number.isInteger(d)||d<=0)||void 0!==e&&(!Number.isInteger(e)||e<=0)||void 0!==d&&void 0!==e&&d>e)return{status:"unmeasured",passed:!1,reason:"冻结的页数义务不完整或上下限冲突,须回到合同编译处理",pages:a??null,min:d??null,max:e??null};if(void 0===a||!Number.isInteger(a)||a<=0)return{status:"unmeasured",passed:!1,reason:"实际渲染页数未完成测量,不能以字数或估算页数代替",pages:null,min:d??null,max:e??null};let f=(void 0===d||a>=d)&&(void 0===e||a<=e);return{status:f?"met":"not-met",passed:f,reason:f?`实际${a}页满足页数义务`:`实际${a}页未满足${void 0===d?"":`不少于${d}页`}${void 0!==d&&void 0!==e?"、":""}${void 0===e?"":`不超过${e}页`}`,pages:a,min:d??null,max:e??null}}(a,r?.formatRules,"informational"),d=r?.formatRules.pageLimit;if(d&&a&&a>d){let e=r?.formatRules.pageEvidence?.filter(a=>"max"===a.kind&&a.value===d),f=e?.length&&e.every(a=>"recommendation"===a.status)?"来源篇幅建议":"尚未核定适用范围的篇幅候选";b.setHeader(an.pageLimit,encodeURIComponent(`${f}:当前${a}页,参考${d}页;${c.reason}`))}};try{if("markdown"===V){let a=aD(T,i,U),d=ap(U);return d&&b.setHeader(an.renderAudit,encodeURIComponent(JSON.stringify(d))),b.setHeader(an.figureInline,encodeURIComponent(JSON.stringify({inlined:a.report.inlined,failed:a.report.failed.map(a=>`${a.name}:${a.reason}`).slice(0,20)}))),ax("succeeded",void 0,a.markdown),bh(p,V,i,d||W,au,void 0,{content:a.markdown,startedAt:e},h,c),b.setHeader("Content-Type","text/markdown; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ay}.md`)}`),b.status(200).send(a.markdown)}if("docx"===V){let a=U.blockers.length,d=await a_(t,T,u,"review"===h?void 0:f.wordTemplatePath,i,U,r?.formatRules,!1,"review"===h),g=d.buffer;if(await aU(g,U.verifiedDelivery?.originalForms??[],u,U.verifiedDelivery?.outputPlacements?.some(a=>a.originalFormContractHash)?T:void 0),d.imageReceipt.embedded!==d.imageReceipt.expected||d.imageReceipt.layoutIssues?.length){let a=d.imageReceipt.layoutIssues?.join(";")??`DOCX图件未完整进包:应有${d.imageReceipt.expected}处,实际${d.imageReceipt.embedded}处;不能以文字占位代替图件交付`;if(au.push({level:"error",severity:"blocker",message:a}),"delivery"===h)return ax("failed",a),b.status(422).json({error:"EXPORT_FIGURE_NOT_CONSERVED",message:a});b.setHeader(an.gatePassed,"false"),b.setHeader(an.notDeliverable,"true"),b.setHeader(an.gateIssues,encodeURIComponent(JSON.stringify(au.map(a=>a.message).slice(0,20)))),b.setHeader(an.gateIssueCount,String(au.length))}d.templateWarning&&(b.setHeader(an.templateWarning,encodeURIComponent(d.templateWarning)),console.error(`[export] ${d.templateWarning}`));let j=ap(U);if(j&&b.setHeader(an.renderAudit,encodeURIComponent(JSON.stringify(j))),"delivery"===h&&U.blockers.length>a){let c=U.blockers.slice(a);return ax("failed",c.map(a=>a.message).join(";")),b.status(422).json({error:"EXPORT_RENDER_NOT_PURE",message:`docx 渲染阶段存在未声明的正文改动,已按纯渲染模式阻断:${c.slice(0,3).map(a=>a.message).join(";")}`,issues:c.slice(0,20)})}let k=await (0,Y.Dx)(g).catch(a=>({unavailableReason:`渲染器异常:${a instanceof Error?a.message.split("\n")[0]:String(a)}`})),l=void 0!==k.pages&&null!==k.pages?{pages:k.pages,renderer:k.renderer||"unknown"}:{unavailableReason:k.unavailableReason||"未知原因"};return az(k.pages),ax("succeeded",void 0,g),bh(p,V,i,j||W,au,l,{content:g,startedAt:e},h,c),b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ay}.docx`)}`),b.status(200).send(g)}let d=await bf(t,T,u,i,r?.formatRules.monoColor===!0,U);"review"===h&&(d=function(a){let b=j().readFileSync(o()).toString("base64"),c=`<style>@font-face{font-family:"${n}";src:url(data:font/otf;base64,${b}) format("opentype");font-weight:400;font-style:normal;}body,body *{font-family:"${n}",sans-serif!important;}</style>`;if(!a.includes("</head>"))throw Error("审阅HTML缺少文档头,无法可靠嵌入中文字体");return a.replace("</head>",`${c}</head>`)}(d),U.notices.push({code:"review-font-fallback",message:"审阅HTML/PDF嵌入Noto Sans CJK SC,保证跨环境中文可读;字体替代未认定为指定投标字体达标"}));let g=ap(U);if(g&&b.setHeader(an.renderAudit,encodeURIComponent(JSON.stringify(g))),"html"===V)return ax("succeeded",void 0,d),bh(p,V,i,g||W,au,void 0,{content:d,startedAt:e},h,c),b.setHeader("Content-Type","text/html; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ay}.html`)}`),b.status(200).send(d);try{let a=await bg(d,u,r?.formatRules,U.verifiedDelivery?.originalForms),f=await (0,Y.kN)(a);return az(f),ax("succeeded",void 0,a),bh(p,V,i,g||W,au,f?{pages:f,renderer:"chromium-pdf-page-tree"}:{unavailableReason:"PDF页树解析失败,实际页数未完成验收"},{content:a,startedAt:e},h,c),b.setHeader("Content-Type","application/pdf"),f&&b.setHeader(an.pdfPageCount,String(f)),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${ay}.pdf`)}`),b.status(200).send(a)}catch(c){if(ax("failed",c instanceof Error?c.message:String(c)),c instanceof Error&&c.message.startsWith("ORIGINAL_FORM_RENDER_"))return b.status(422).json({error:c.message.split(":")[0],message:c.message});return(0,aj.wF)({level:"error",source:"api/documents/export",functionName:"pdfExportChromium",error:c,req:a,meta:{fallback:"system-browser-attempted"}}),b.status(500).json({error:"PDF_RENDER_FAILED",message:"PDF 渲染失败:未找到或无法启动可用的 Chrome/Chromium/Edge。请安装 Chrome,或设置 PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH 后重试。"})}}catch(a){if(ax("failed",a instanceof Error?a.message:String(a)),a instanceof Error&&a.message.startsWith("ORIGINAL_FORM_RENDER_"))return b.status(422).json({error:a.message.split(":")[0],message:a.message});return b.status(500).json({error:"EXPORT_RENDER_FAILED",message:"渲染失败,独立审阅报告已保留。"})}}let bj={inlineLocalImages:ax,inlineMarkdownFigures:aD,createInlineImageResolver:aw,resolveLocalImagePath:av,rasterizeMarkdownSvgFigures:aR,buildDocxInternal:a1,createExportRenderAudit:ao,exportRenderAuditReport:ap,canonicalExportText:a9,exportConservationDiff:function(a,b){return ba(a9(a),a9(b))},diffCanonicalText:ba,docxVisibleText:bb,canonicalDocxText:bc,docxStageConservationDiff:bd,prepareExportMarkdown:be,stripInlineMarkdown:aH,enhanceTocHtml:a4,buildExportHtml:bf,renderPdfBuffer:bg,resolveExportStyle:aN,buildDocx:a_,markdownToDocxXml:aZ,validateExportMarkdown:a8,isTableCaptionLine:aV,DOCX_TOC_FIELD_PLACEHOLDER:aW,verifyOriginalFormDocxPackage:aU},bk=(0,ak.j)("api/documents/export",bi);var bl=c(68970),bm=c(50296);let bn=(0,h.M)(d,"default"),bo=(0,h.M)(d,"config"),bp=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/export",pathname:"/api/documents/export",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function bq(a,b,c){let d=await bp.prepare(a,b,{srcPage:"/api/documents/export"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,bl.getTracer)(),e=d.getActiveScopeSpan(),j=bp.instrumentationOnRequestError.bind(bp),k=async e=>bp.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:bp.isDev,page:"/api/documents/export",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==bm.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(bm.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:bl.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(bp.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},56766:(a,b,c)=>{c.d(b,{Dx:()=>t,GA:()=>s,kN:()=>r});var d=c(19898),e=c(31421),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j),l=c(73136),m=c(57975),n=c(88194),o=c.n(n);let p=(0,m.promisify)(e.execFile);async function q(a,b=!1,c=!1){let e;if(a.length)try{if(e=await (0,d.loadPdfDocument)(a),!Number.isInteger(e.pageCount)||e.pageCount<=0)return;let f=[];if(b)for(let a=0;a<e.pageCount;a+=1){let b=await e.getPage(a);try{f.push(await b.getText())}finally{await b.close()}}let g=new Map,h=a=>{for(let b of a)void 0!==b.page&&Number.isInteger(b.page)&&b.page>0&&b.page<=e.pageCount&&g.set(b.title,[...g.get(b.title)??[],b.page]),b.children.length&&h(b.children)};return c&&h(await e.getOutline()),{pages:e.pageCount,text:f.join(""),...c?{headingPages:Object.fromEntries([...g].filter(([,a])=>1===a.length).map(([a,b])=>[a,b[0]]))}:{}}}catch{return}finally{await e?.close()}}async function r(a){return(await q(a))?.pages}async function s(a){return(await q(a,!1,!0))?.headingPages}async function t(a,b={}){let c,d,e;if(!a||0===a.length)return{unavailableReason:"docx 为空"};try{let b=await o().loadAsync(a),d=await b.file("word/document.xml")?.async("string");if(!d)throw Error("正文缺席");c=[...d.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>a[1]).join("")}catch{return{unavailableReason:"DOCX正文无法解析,不能验证真实渲染页数"}}let f=async a=>{let e=await q(a,!0,!0);if(!e)return;let f=function(a,b){let c=new Map,d=new Map;for(let b of a.match(/\p{Script=Han}/gu)??[])c.set(b,(c.get(b)??0)+1);let e=[...c.values()].reduce((a,b)=>a+b,0);if(e<20)return null;for(let a of b.match(/\p{Script=Han}/gu)??[])d.set(a,(d.get(a)??0)+1);return[...c].reduce((a,[b,c])=>a+Math.min(c,d.get(b)??0),0)/e}(c,e.text);if(null!==f&&f<.98)throw Error(`中文文字渲染未保留(覆盖率${(100*f).toFixed(1)}%),请核查渲染器中文字体;不能将缺字版式计为合格页数`);return d=e.headingPages,await b.onRenderedPdf?.(a),e.pages},h=g().mkdtempSync(k().join(i().tmpdir(),"real-pages-")),j={...process.env};if("darwin"===process.platform&&!j.FONTCONFIG_FILE){let a=["/System/Library/Fonts","/System/Library/Fonts/Supplemental","/Library/Fonts"].filter(a=>g().existsSync(a));if(a.length){let b=k().join(h,"fonts.conf"),c=a=>a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">");g().writeFileSync(b,`<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig>${a.map(a=>`<dir>${c(a)}</dir>`).join("")}<cachedir>${c(k().join(h,"font-cache"))}</cachedir><alias><family>SimSun</family><prefer><family>Songti SC</family></prefer></alias><alias><family>宋体</family><prefer><family>Songti SC</family></prefer></alias></fontconfig>`),j.FONTCONFIG_FILE=b}}let m=k().join(h,"document.docx");g().writeFileSync(m,a);try{for(let a of function(){let a=[],b=process.env.CUSTOMIZE_DOCX_RENDERER;if(b){let c=g().existsSync(b.trim())?[b.trim()]:b.trim().split(/\s+/u);a.push({name:`env:${c[0]}`,command:c[0],args:c.slice(1)})}for(let b of["soffice","libreoffice"])a.push({name:b,command:b,args:[]});return a}()){let c,i=k().join(h,`out-${a.name.replace(/[^\w.-]/gu,"_")}`);g().mkdirSync(i,{recursive:!0});let n=a=>a.replace(/\{in\}/gu,m).replace(/\{out\}/gu,i).replace(/\{outfile\}/gu,k().join(i,"document.pdf")),o=a.args.length>0?a.args.map(n):[`-env:UserInstallation=${(0,l.pathToFileURL)(k().join(i,"profile")).href}`,"--headless","--convert-to","pdf","--outdir",i,m];try{await p(a.command,o,{timeout:b.timeoutMs??12e4,env:j})}catch(c){let b=c.code;if("ENOENT"===b)continue;e=`${a.name}:${c instanceof Error?c.message.split("\n")[0]:String(c)}`;continue}let q=k().join(i,"document.pdf");if(!g().existsSync(q)){let b,c=g().readdirSync(i).filter(a=>a.toLowerCase().endsWith(".pdf"));if(0===c.length){e=`${a.name}没有产生PDF`;continue}try{b=1===c.length?await f(g().readFileSync(k().join(i,c[0]))):void 0}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==b)return{pages:b,renderer:a.name,headingPages:d};e=c.length>1?`${a.name}产生多个PDF,无法确认对应文档`:`${a.name}的PDF页树解析失败`;continue}try{c=await f(g().readFileSync(q))}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==c)return{pages:c,renderer:a.name,headingPages:d};e=`${a.name}的PDF页树解析失败`}return{unavailableReason:e?`渲染器失败(${e})`:"未配置外部渲染器(CUSTOMIZE_DOCX_RENDERER 或 PATH 中的 soffice/libreoffice)——真页数待真渲染"}}finally{g().rmSync(h,{recursive:!0,force:!0})}}},57975:a=>{a.exports=require("node:util")},73024:a=>{a.exports=require("node:fs")},73136:a=>{a.exports=require("node:url")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83142:a=>{a.exports=import("marked")},83237:a=>{a.exports=import("playwright")},88194:a=>{a.exports=require("jszip")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,5763,3074,702,9522,8459],()=>b(b.s=55540));module.exports=c})();
|