@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
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";exports.id=6138,exports.ids=[6138],exports.modules={17175:(a,b,c)=>{c.d(b,{i:()=>m,T:()=>k});var d=c(77598),e=c(19898),f=c(73859);let g=[{id:"report",label:"报告",patterns:[/报告|调研|分析|评估|研究|复盘|总结/iu],output:["报告"]},{id:"plan",label:"实施方案",patterns:[/方案|规划|计划|预案|路径|路线图/iu],output:["实施方案"]},{id:"standard",label:"规范说明",patterns:[/规范|标准|制度|规则|指南|手册/iu],output:["规范说明"]},{id:"proposal",label:"建议方案",patterns:[/建议|提案|需求|响应|说明书/iu],output:["建议方案"]}];var h=c(17655),i=c(45304),j=c(23105);function k(a){return{id:a.id,name:a.title,outputTitle:a.title,category:a.documentType,description:"",chapters:a.chapters}}function l(...a){let b=new Set,c=[];for(let d of a)for(let a of d??[]){let d=a.trim();0===d.length||b.has(d)||(b.add(d),c.push(d))}return c}function m(a){let b=(a.requirement||"").trim(),c=function(a){let b=(a.projectName||"").trim();return b||a.projectRoot.replace(/[\\/]+$/u,"").split(/[\\/]/u).filter(Boolean).at(-1)||"当前项目"}(a),k=a.projectType??"general",m=a.skills??(0,i.loadGenerationSkills)(),n=`${a.title||""}
|
|
2
|
+
${c}
|
|
3
|
+
${b}`,o=(0,f.E6)(n)?f.IB.name:function(a,b){for(let c of b)for(let b of c.patterns)if(b.lastIndex=0,b.test(a))return c.output[0]}(n,g)||"文档",p=[{id:`chapter-${(0,d.createHash)("sha256").update(JSON.stringify(["placeholder",o,b])).digest("hex").slice(0,16)}`,title:`${o}(章节待招标确认)`,purpose:"种子章:仅支撑项目引导初始化;运行内由招标文件确认章节后编译正式合同替换本清单",queries:[o,...b.trim()?[b.trim()]:[]],requiredFacts:[],sections:[]}],q=(0,h.a)({skills:m,chapters:p.map(a=>({title:a.title,sections:a.sections})),projectType:k,maxChapters:a.maxChapters}),{chapters:r,perChapter:s}=function(a,b,c){let d=new Map(b.chapters.map(a=>[a.title.trim(),a])),e=[],f=[];return{chapters:a.map(a=>{f=[];let b=d.get(a.title.trim()),g=(a.sections??[]).filter(Boolean),h=(0,j.Yj)(b?.sections??[],{chapterTitle:a.title,outlineSections:g,acceptedTitles:f,evidenceText:`${a.title}
|
|
4
|
+
${a.purpose??""}
|
|
5
|
+
${c}`});for(let a of h)"section"===a.kind&&f.push(a.title);let i=h.filter(a=>"section"===a.kind).map(a=>a.title),k=h.filter(a=>"content-requirement"===a.kind).map(a=>({title:a.title,...a.attachTo?{attachTo:a.attachTo}:{},reason:a.reason,required:a.required})),m=h.filter(a=>"duplicate"===a.kind).map(a=>({title:a.title,...a.attachTo?{attachTo:a.attachTo}:{},reason:a.reason,required:a.required})),n=l(a.queries,b?.checklist.queries,b?.sections.map(a=>a.title)),o=b?.checklist.purpose?.trim(),p=a.purpose&&!a.purpose.startsWith("种子章:")?a.purpose:o||a.purpose;return e.push({title:a.title,domains:b?.domains??[],skillIds:b?.skillIds??[],sectionsFromOutline:g,sectionsFromSkills:i,contentRequirementsFromSkills:k,duplicateSkillSections:m,conflicts:b?.conflicts.length??0}),{...a,purpose:p,queries:n,requiredFacts:l(a.requiredFacts,b?.checklist.requiredFacts),...g.length>0?{sections:g}:{}}}),perChapter:e}}(p,q,n),{title:t,source:u}=function(a){let b=(a.title||"").trim();if(b)return{title:b,source:"human"};let c=(a.plan.outputTitle||"").trim(),d=c||a.documentType,e=a.projectName.trim();return{title:e?`${e}${d}`:d,source:c?"skill":"derived"}}({title:a.title,projectName:c,documentType:o,plan:q});return{id:function(a,b){let c=(0,d.createHash)("sha1").update(JSON.stringify({root:(0,e.computeProjectId)(a.projectRoot),title:b,requirement:a.requirement||""})).digest("hex").slice(0,12);return`doc-spec-${c}`}(a,t),title:t,documentType:o,chapters:r,derivation:{skillPoolSize:q.poolSize,matchReads:q.matchReads,matchedSkillIds:q.matchedSkillIds,outlineSource:"招标文件确认(运行内编译正式章节)",projectType:k,titleSource:u,projectName:c,requirementChars:b.length,perChapter:s}}}},38627:(a,b,c)=>{c.d(b,{W9:()=>k,O:()=>j,Hz:()=>l,Br:()=>n,_W:()=>m});var d=c(76760);c(19898),c(17154);var e=c(44533);c(77598),c(55723);let f={tender_document:"招标文件正文",bill_of_quantities:"工程量清单",drawing:"图纸/设计资料",addendum:"补疑/澄清/答疑",contract:"合同资料",technical_specification:"技术规范/技术要求",schedule_document:"工期/进度资料",quality_safety_document:"质量安全文明资料",other:"其他资料"},g={addendum:100,tender_document:90,contract:80,technical_specification:75,bill_of_quantities:70,drawing:65,schedule_document:60,quality_safety_document:60,other:10};function h(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}let i=/\.(?:dwg|dxf|dwt|dws)$/iu;function j(a){if(i.test(d.basename(h(a))))return{kind:"drawing",confidence:.95,signals:["CAD 图形格式(扩展名判定,与目录名无关)"]};let b=h(a).toLowerCase(),c=[],e=(d,e)=>(d.lastIndex=0,(!!d.test(a)||!!d.test(b))&&(c.push(e),!0));return e(/补疑|答疑|澄清|疑问回复|答复|变更|更正|补充通知|addendum|clarification/iu,"补疑/澄清关键词")?{kind:"addendum",confidence:.92,signals:c}:e(/清单|工程量|分部分项|措施项目|项目特征|招标控制价|boq|bill.?of.?quantities/iu,"清单/工程量关键词")?{kind:"bill_of_quantities",confidence:.9,signals:c}:e(/图纸|施工图|建筑图|结构图|安装图|设计图|总平|平面图|立面图|剖面图|节点|dwg|drawing|cad/iu,"图纸/设计关键词")?{kind:"drawing",confidence:.88,signals:c}:e(/招标文件|投标人须知|评标办法|招标公告|招标正文|招标需求|tender|bidding/iu,"招标文件关键词")?{kind:"tender_document",confidence:.9,signals:c}:e(/合同|协议书|专用条款|通用条款|contract/iu,"合同关键词")?{kind:"contract",confidence:.82,signals:c}:e(/技术规范|技术要求|施工规范|验收规范|标准|做法说明|specification|standard/iu,"技术规范关键词")?{kind:"technical_specification",confidence:.8,signals:c}:e(/工期|进度|计划|节点|里程碑|schedule/iu,"工期进度关键词")?{kind:"schedule_document",confidence:.72,signals:c}:e(/质量|安全|文明|环保|危大|验收|quality|safety/iu,"质量安全关键词")?{kind:"quality_safety_document",confidence:.72,signals:c}:{kind:"other",confidence:.35,signals:["未命中明确资料类型,按其他资料处理"]}}function k(a,b){let c=function(a,b){let c=new Set((b.selectedFiles||[]).map(a=>h(a)).filter(Boolean)),d=[...b.selectedRoots||[]],e=a.filter(a=>c.has(h(a.relativePath))&&"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0);return{files:e,roots:d,warnings:0===e.length?["所选资料范围内没有可用文件(未索引/未切片/文件缺失)。"]:[]}}((0,e.Yy)(a),b),i={tender_document:[],bill_of_quantities:[],drawing:[],addendum:[],contract:[],technical_specification:[],schedule_document:[],quality_safety_document:[],other:[]},k=c.files.map(a=>{let b=j(a.relativePath),c={filePath:a.relativePath,fileName:d.basename(a.relativePath),kind:b.kind,confidence:b.confidence,priority:g[b.kind],chunkCount:a.chunkCount,summary:`${f[b.kind]||"其他资料"}:${d.basename(a.relativePath)},可用切片 ${a.chunkCount||0} 条。`,keySignals:b.signals};return i[b.kind].push(c),c}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence),l=(c.roots[0]||function(a){let b=h(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}(k[0]?.filePath||"")||"当前知识库项目").replace(/\.(?:pdf|docx?|xlsx?|xls|dwg|zip)$/iu,"").replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").trim(),m=[...c.warnings];return 0===i.tender_document.length&&m.push("未识别到招标文件正文,工程概况、招标响应和评审要求可能不足。"),0===i.bill_of_quantities.length&&m.push("未识别到工程量清单,施工范围、资源配置和主要工程内容可能不足。"),0===i.drawing.length&&m.push("未识别到图纸/设计资料,施工方法、专业接口和构造做法可能不足。"),{projectName:l,materialRoots:c.roots,files:k,groups:i,warnings:m}}function l(a){let b=new Map,c=new Map;for(let d of a.files)b.set(d.filePath,d.kind),c.set(d.filePath,"drawing"===d.kind?"drawing":"bill_of_quantities"===d.kind?"table":"technical_specification"===d.kind?"specification":"tender_document"===d.kind||"addendum"===d.kind?"rule":"reference");return{kindByPath:b,processingByPath:c}}function m(a){return a||"other"}function n(a){return"drawing"===a?"drawing":"bill_of_quantities"===a?"table":"technical_specification"===a?"specification":"tender_document"===a||"addendum"===a?"rule":"reference"}},95424:(a,b,c)=>{c.d(b,{$:()=>f});var d=c(19898),e=c(44533);function f(a,b){return(0,e.VD)(a,a=>{let c=new Map(a.listIndexSourceStates(b).map(a=>[a.relativePath,a])),e=new Map(a.getPdfSourceCoverageStates(b).map(a=>[a.relativePath,a])),f=new Set(a.listActiveIndexJobPaths([...b])),g=[];for(let h of b){let b=a.getFileParseAttempt(h),i=c.get(h);if(f.has(h)||b?.status==="parsing")g.push({level:"error",message:`资料尚在解析或索引中:${h}`});else if(b?.status==="error")g.push({level:"error",message:`资料最近一次解析失败:${h};${b.error||"须重新解析成功后生成"}${b.recordRetained?"。已保留旧解析供追溯,不能冒充本次解析成功":""}`});else if(!i||"active"!==i.status||i.indexedAt<=0)g.push({level:"error",message:`资料没有有效解析结果:${h};请完成入库后生成`});else{let a=e.get(h);a?.internalPageCountConflict?g.push({level:"error",message:`PDF解析页数与实际引用页号不一致:${h};不能把部分页面当作完整资料,请重新解析`}):a&&!(0,d.isCompletePdfSourceCoverage)(a.coverage,i.contentHash)?g.push({level:"error",message:`PDF全页读取尚未取得完整且同源的回执:${h};请重新解析当前文件,未处理或失败页面不能默认为成功`}):a&&!(0,d.isCurrentPdfNativeLayout)(a.nativeLayoutVersion)&&g.push({level:"error",message:`PDF原生文字布局缺少当前版本回执:${h};请重新解析当前PDF,旧原文或OCR覆盖不能代替本次布局`})}}return g})}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=6355,exports.ids=[6355],exports.modules={34933:(a,b,c)=>{c.d(b,{x:()=>f});var d=c(77598),e=c(49584);function f(a){let b=(0,e.modelConfigurationForRun)(a),c=b.models.active,f=c&&b.models.list.find(a=>a.name===c.name&&a.provider===c.provider),g=f?b.providers[f.provider]:void 0;return(0,d.createHash)("sha256").update(JSON.stringify({version:"single-selected-model-v1",active:c,selected:f?{name:f.name,provider:f.provider,thinking:f.thinking??"follow-task"}:null,endpointHash:g?(0,d.createHash)("sha256").update(JSON.stringify([g.baseUrl,g.protocol,g.directEndpoint])).digest("hex"):null})).digest("hex")}},46355:(a,b,c)=>{c.r(b),c.d(b,{APPLICABILITY_REVIEW_SCHEMA:()=>N,TENDER_OBLIGATION_EXTRACTION_VERSION:()=>K,TENDER_OBLIGATION_SCHEMA:()=>U,TENDER_ORIGINAL_FORM_PROPOSAL_SCHEMA:()=>S,extractTenderObligationsWithAgent:()=>ah,materiallyUncoveredNamedOutputs:()=>ae,reconcileNamedTenderOutputCoverage:()=>af,tenderReferenceParentRoleFacts:()=>ag});var d=c(745),e=c(76760),f=c.n(e),g=c(77598);function h(a,b,c,d,e,f=[]){if(!Array.isArray(a))return{resolved:[],errors:[`${e} 必须是选择数组`]};let g=[],i=[];for(let[h,j]of a.entries()){if(j&&"object"==typeof j&&!Array.isArray(j)&&Object.keys(j).some(a=>!["from","through",...f].includes(a))){i.push(`${e}[${h}]:TENDER_EVIDENCE_SELECTION_SHAPE;只能填from/through${f.length?`与${f.join("/")}`:""}`);continue}let a=j&&"object"==typeof j&&!Array.isArray(j)?{from:j.from,...Object.hasOwn(j,"through")?{through:j.through}:{}}:j;try{let e=d.resolve(b,c,a);g.push({sourceFile:e.sourceFile,quote:e.quote,start:e.start,end:e.end})}catch(a){i.push(`${e}[${h}]:${a instanceof Error?a.message:String(a)};只能使用该候选目录中的from/through,不得改写quote、sourceFile或位置`)}}return{resolved:g,errors:i}}function i(a,b){let c;if(!a||"object"!=typeof a||Array.isArray(a))return{errors:["审查结论必须是对象"]};if("string"!=typeof a.candidateId||"string"!=typeof a.candidateHash||"string"!=typeof a.reason||!["accepted","disputed","unmeasured"].includes(String(a.status))||"technical-content"!==a.target&&"output-delivery"!==a.target)return{errors:["审查结论缺少当前candidateId/candidateHash/target/status/reason"]};let d=h(a.evidence,a.candidateId,a.candidateHash,b,"evidence");if(d.errors.length)return{errors:d.errors};if(void 0!==a.contentScope){let d=a.contentScope;if(!d||"object"!=typeof d||Array.isArray(d))return{errors:["contentScope 必须是对象"]};let e=h(d.technical,a.candidateId,a.candidateHash,b,"contentScope.technical",["response"]),f=h(d.excluded,a.candidateId,a.candidateHash,b,"contentScope.excluded",["reason"]);if(e.errors.length||f.errors.length)return{errors:[...e.errors,...f.errors]};let g=Array.isArray(d.technical)?d.technical:[],i=Array.isArray(d.excluded)?d.excluded:[];c={technical:e.resolved.map((a,b)=>({...a,response:"string"==typeof g[b]?.response?g[b].response:""})),excluded:f.resolved.map((a,b)=>({...a,reason:"string"==typeof i[b]?.reason?i[b].reason:""}))}}return{resolved:{candidateId:a.candidateId,candidateHash:a.candidateHash,target:a.target,status:a.status,reason:a.reason,...!0===a.headingOnly?{headingOnly:!0}:{},evidence:d.resolved,...c?{contentScope:c}:{}},errors:[]}}var j=c(69977);let k="tender-evidence-selection-v1";function l(a,b){let c=new Map(a.files.map(a=>[a.filePath,a.text]));if(c.size!==a.files.length||a.files.some(a=>(0,d.Fu)(a.text)!==a.sourceTextHash)||(0,d.Fu)(a.files.map(a=>[a.filePath,a.sourceTextHash]).sort((a,b)=>a[0].localeCompare(b[0])))!==a.sourceHash)throw Error("TENDER_EVIDENCE_SELECTION_SOURCE_IDENTITY");if(new Set(b.map(a=>a.candidateId)).size!==b.length||b.some(a=>!a.candidateId.trim()))throw Error("TENDER_EVIDENCE_SELECTION_CANDIDATE_IDENTITY");let e=b.map(({candidateId:b,applicability:c})=>{let{bindingHash:e,...f}=c;if(c.version!==j.q$||e!==(0,d.Fu)(f))throw Error("TENDER_EVIDENCE_SELECTION_CANDIDATE_BINDING");let{review:g,bindingHash:h,...i}=c,k={...i,status:"unresolved",bindingHash:""};k.bindingHash=(0,d.Fu)((({bindingHash:a,...b})=>b)(k));let l=[...(0,j.N3)(k,a.files,void 0,a).issues,...c.issues],m=[];if(!l.length)for(let a of[{anchor:c.source,origin:"source"},...c.basisRefs.map(a=>({anchor:a,origin:`basis:${a.refId}`}))]){let b=m.find(b=>b.anchor.sourceFile===a.anchor.sourceFile&&b.anchor.start===a.anchor.start&&b.anchor.end===a.anchor.end);if(b)b.origins.push(a.origin);else{let{nodeId:b,sourceFile:c,start:d,end:e,quote:f}=a.anchor;m.push({anchor:{nodeId:b,sourceFile:c,start:d,end:e,quote:f},origins:[a.origin]})}}return{candidateId:b,candidateHash:(0,j.DB)(c),target:(0,j.Vc)(c),issues:l,anchors:m}}),f=(0,d.Fu)([k,a.sourceHash,e]),g=new Map,h=a=>{let b=`e${f.slice(0,24)}:${g.size}`;return g.set(b,{...a}),b},i=e.map(a=>({candidateId:a.candidateId,candidateHash:a.candidateHash,target:a.target,issues:[...a.issues],groups:a.anchors.map(({anchor:b,origins:c},d)=>{let e={candidateId:a.candidateId,candidateHash:a.candidateHash,sourceFile:b.sourceFile,group:d};return{ref:h({...e,start:b.start,end:b.end,whole:!0,ordinal:-1}),sourceFile:b.sourceFile,start:b.start,end:b.end,quote:b.quote,origins:[...c],parts:(function(a){let b=[],c=0,d=d=>{let e=a.quote.slice(c,d),f=e.trim();if(f){let d=c+e.length-e.trimStart().length;b.push({start:a.start+d,end:a.start+d+f.length,quote:f})}c=d};for(let b of a.quote.matchAll(/[,,;;。!?!?]/gu))d(b.index+b[0].length);return d(a.quote.length),b})(b).map((a,b)=>({...a,ref:h({...e,start:a.start,end:a.end,whole:!1,ordinal:b})}))}})})),l=new Map(e.map(a=>[a.candidateId,a.candidateHash])),m={version:k,sourceHash:a.sourceHash,bindingHash:f,instructions:"目录只列当前候选已绑定source/basis的冻结原字。evidence/contentScope每项只填from(连续片段可加through,含末片段),只能同一候选同一组按顺序选择,整组ref只能单独选择。程序按ref恢复原字与位置;不得抄写或改写quote、sourceFile、位置或parentNodeId。选择不等于批准,仍须独立业务审查;没有可选目录时保持未决。",candidates:i};return{directory:m,modelDirectory:a=>{let b=a?new Set(a):void 0;if(b){for(let a of b)if(!i.some(b=>b.candidateId===a))throw Error("TENDER_EVIDENCE_SELECTION_UNKNOWN_CANDIDATE")}return{version:m.version,sourceHash:m.sourceHash,bindingHash:m.bindingHash,instructions:m.instructions,candidates:i.filter(a=>!b||b.has(a.candidateId)).map(a=>({candidateId:a.candidateId,groups:a.groups.map(a=>({ref:a.ref,origins:[...a.origins],quote:a.quote,parts:a.parts.map(a=>({ref:a.ref,quote:a.quote}))}))}))}},resolve(a,b,e){var f;if(!l.has(a)||l.get(a)!==b)throw Error("TENDER_EVIDENCE_SELECTION_STALE_CANDIDATE");if(!e||"object"!=typeof e||Array.isArray(e)||Object.keys(e).some(a=>"from"!==a&&"through"!==a))throw Error("TENDER_EVIDENCE_SELECTION_SHAPE");let{from:h,through:i}=e;if("string"!=typeof h||void 0!==i&&"string"!=typeof i)throw Error("TENDER_EVIDENCE_SELECTION_SHAPE");let j=g.get(h),k=g.get(i??h);if(!j||!k)throw Error("TENDER_EVIDENCE_SELECTION_UNKNOWN_REFERENCE");let m=function(a,b,c,d,e,f){if(![e,f].every(c=>c.candidateId===a&&c.candidateHash===b))return`当前候选=${a};from=${c} 属于候选=${e.candidateId};${void 0===d?"未提供through":`through=${d} 属于候选=${f.candidateId}`};即使原字相同也不能跨候选借用ref。程序不会自动换ref或补basis;须按当前候选已绑定目录重新审查,无依据则保留真实未决,不得删掉范围后继续accepted`}(a,b,h,i,j,k);if(m)throw Error(`TENDER_EVIDENCE_SELECTION_FOREIGN_CANDIDATE:${m}`);let n=(f=void 0!==i,j.group!==k.group||j.sourceFile!==k.sourceFile?"两个端点属于不同证据组,不能跨组或跨文件组成范围":f&&(j.whole||k.whole)?`from为${j.whole?"整组":"片段"}引用,through为${k.whole?"整组":"片段"}引用;整组只能单独填from并省略through(即使两者相同也不合法);片段范围必须由同一组parts中的首末ref组成。须自行重新选择,程序不会删去through或替换端点`:j.ordinal>k.ordinal||j.start>k.start?"片段端点倒序;from必须先于或等于through,程序不会自动调序":void 0);if(n)throw Error(`TENDER_EVIDENCE_SELECTION_INVALID_RANGE:from=${h},through=${i??"未提供"};${n}`);let o=c.get(j.sourceFile).slice(j.start,k.end);return{sourceFile:j.sourceFile,start:j.start,end:k.end,quote:o,nodeId:`tender-source:${(0,d.Fu)([j.sourceFile,j.start,o]).slice(0,24)}`}}}}var m=c(68515),n=c(98943),o=c(13380),p=c(36980),q=c(62369);let r=JSON.parse('{"version":"construction-requirement-taxonomy-v1","description":"通用招标要求语义分类(领域基线,不是项目条款位置):只用于在任意招标/补疑/答疑原文中发现要求类条款;条款号、页码、章节位置一律由文档索引动态确定。","requirementHints":["应","须","必须","不得","严禁","按照","满足","编制","提交","采用","执行","设置","配备","验收","评分","评审","要求","规定","标准","清单","专项施工方案","表格","图件","图表","附表","附图"],"strongRequirementHints":["必须","不得","严禁","要求","规定","标准","清单","专项施工方案","评分","评审","验收","提交","编制","采用","设置","配备","表格","图件","图表","附表","附图"],"categories":[{"id":"dangerous-works","label":"危险性较大的分部分项工程","priority":10,"terms":["危险性较大","危大工程","危大","超过一定规模"],"addAsContent":true},{"id":"major-construction-method","label":"主要施工方法/施工方案","priority":9,"terms":["主要施工方法","主要施工方案","施工方法","施工方案","施工工艺","施工顺序","施工部署","流水施工","特殊工艺","专项施工方案","工法"],"addAsContent":true},{"id":"evaluation","label":"评标/评分/评审因素","priority":8,"terms":["评标","评分","评审因素","评分标准","评审标准","技术文件评分"],"addAsContent":false},{"id":"technical-requirement","label":"技术标准/技术规格/施工要求","priority":7,"terms":["技术标准","技术规格","技术要求","施工要求","技术条件"],"addAsContent":true},{"id":"quality","label":"质量/验收/创优","priority":6,"terms":["质量目标","质量要求","质量验收","质量标准","创优","检验批","标准化工地"],"addAsContent":true},{"id":"safety-environment","label":"安全/文明/环保/绿色施工","priority":6,"terms":["安全生产","安全管理","安全文明","文明施工","环保","绿色施工","职业健康","扬尘","噪声"],"addAsContent":true},{"id":"schedule","label":"工期/进度/节点","priority":5,"terms":["工期要求","工期目标","进度计划","节点目标","开竣工","赶工","里程碑"],"addAsContent":true},{"id":"resources","label":"人材机/分包/甲供乙供","priority":5,"terms":["劳动力计划","材料供应","机械设备","专业分包","甲供","乙供","暂估"],"addAsContent":true},{"id":"bid-format","label":"投标文件格式/技术文件编制","priority":6,"terms":["投标文件格式","技术文件","施工组织设计","图表","页数","暗标","编制要求"],"addAsContent":false},{"id":"contract","label":"合同条款/变更/索赔/保修/移交","priority":4,"terms":["合同条款","专用合同条款","通用合同条款","变更","索赔","保修","移交"],"addAsContent":false},{"id":"site-condition","label":"现场条件/地勘/水文/周边/季节","priority":4,"terms":["现场条件","地勘","地质","水文","周边环境","交通组织","临水临电","雨季","冬季施工"],"addAsContent":true},{"id":"technology","label":"新技术/新工艺/知识产权/深化设计","priority":5,"terms":["新技术","新工艺","知识产权","深化设计","BIM","智慧工地","信息化"],"addAsContent":true},{"id":"handover","label":"验收/移交/竣工资料","priority":4,"terms":["竣工验收","移交","竣工资料","档案","保修"],"addAsContent":false}]}'),s=a=>a.replace(/\s+/gu,"").normalize("NFKC").replace(/[“”‘’"'`]/gu,""),t=a=>(0,g.createHash)("sha256").update(a).digest("hex").slice(0,24),u=/PDF\s*第\s*(\d+)\s*页/gu,v=/^\s*(?:第[一二三四五六七八九十百零〇\d]+[章节条款]|[一二三四五六七八九十]+、|([一二三四五六七八九十\d]+)|\d+(?:[..]\d+)*[、..]?\s+)/u,w=/^\s*\|/u;function x(a){let b=a.search(/[::]/u);if(b<0)return[];let c=a.slice(b+1).trim().replace(/[。;;]\s*$/u,"").replace(/等\s*$/u,"");if(/[。\n\r]/u.test(c))return[];let d=c.split(/[,,、;;]/u).map(a=>a.trim().replace(/^[((]?[一二三四五六七八九十\d]+[))、..]\s*/u,"")).filter(a=>a.length>=2&&a.length<=32);return d.length<2||d.length>12?[]:[...new Set(d)]}let y=/[。!?!?]/u;function z(a,b){if(!b?.length||/[\r\n]/u.test(a)||y.test(a.trim().replace(/[。!?!?]+$/u,"")))return[];let c=s(a),d=[];for(let a of b){let b=a.trim();!(b.length<2||b.length>32||y.test(b)||/[\r\n]/u.test(b))&&c.includes(s(b))&&(d.includes(b)||d.push(b))}return d.length>1?d:[]}function A(a,b){let c=s(a);return!!r.strongRequirementHints.some(a=>c.includes(s(a)))||b.some(a=>a.priority>=7)&&r.requirementHints.some(a=>c.includes(s(a)))}let B=JSON.parse('{"version":"construction-output-obligation-terms-v2","rules":[{"context":"投标文件格式|项目管理机构|人员组成|附件|合同条款","terms":["组织机构图","人员组成表","机械设备表"]},{"context":"施工组织设计|技术文件|进度计划|施工部署|总平面|平面布置","terms":["横道图","网络图","施工总平面布置图","平面布置图","劳动力计划表","材料进场计划"]}],"deliveryVerbs":["应附","提交","提供","包括","编制","报送","格式","装订","加盖","填写","附"],"skipContextPatterns":["目录"]}'),C="tender-source-discovery-v1",D=a=>a.replace(/\s+/gu,"").normalize("NFKC").replace(/[“”‘’"'`]/gu,"");function E(a,b,c){if(!a||"object"!=typeof a||!Array.isArray(a.evidenceRequests))return["evidenceRequests 必须是数组"];let d=a.evidenceRequests,e=d.length>4?["evidenceRequests 每批最多4项"]:[];return d.forEach((a,d)=>{let f=`evidenceRequests[${d}]`;if(!a||"object"!=typeof a)return void e.push(`${f} 必须是对象`);b.some(b=>b.candidateId===a.candidateId&&b.candidateHash===a.candidateHash)||e.push(`${f} candidateId/candidateHash 不属于当前批次`),c.files.some(b=>b.filePath===a.sourceFile)||e.push(`${f} sourceFile 不属于冻结目录`),Object.hasOwn(a,"quote")===Object.hasOwn(a,"queryTerms")?e.push(`${f} 必须且只能选择逐字quote或发现queryTerms`):Object.hasOwn(a,"quote")?("string"!=typeof a.quote||D(a.quote).length<2)&&e.push(`${f} quote 必须包含至少2个有效字符`):F(a.queryTerms)||e.push(`${f} queryTerms 须为1至4个不同检索词,每词2至120字符`)}),e}function F(a){return Array.isArray(a)&&a.length>=1&&a.length<=4&&a.every(a=>"string"==typeof a&&a.length<=120&&D(a).length>=2)&&new Set(a.map(D)).size===a.length}var G=c(68011),H=c(34933),I=c(49584),J=c(19045);let K="construction-tender-obligation-extraction-v1",L=(a,b)=>({type:"object",additionalProperties:!1,required:a,properties:b}),M=L(["technicalContent","delivery","reason","basisRefs"],{technicalContent:{type:"string",enum:["required-response","technical-constraint","reference","not-applicable","unresolved"]},delivery:L(["requirement","location","originalForm","stage","conditions"],{requirement:{type:"string",enum:["required","recommended","not-required","unresolved"]},location:{type:"string",enum:["technical-body","technical-appendix","business-file","contract-performance","construction-submission","unresolved"]},originalForm:{type:"string",enum:["required","adaptable","not-required","unresolved"]},stage:{type:"string",enum:["bid","contract","construction","multiple","unresolved"]},stages:{type:"array",items:{type:"string",enum:["bid","contract","construction"]}},conditions:{type:"array",items:{type:"string"}}}),reason:{type:"string",minLength:1},parentNodeId:{type:"string"},basisQuote:{type:"string"},basisRefs:{type:"array",items:L(["refId","sourceFile","quote","relation","explanation","linkedTo"],{refId:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},quote:{type:"string",minLength:1},parentNodeId:{type:"string"},relation:{type:"string",enum:["includes","constrains","overrides","shared-delivery","scope","refers-to"]},explanation:{type:"string",minLength:1},linkedTo:{type:"array",items:{type:"string"}}})}}),N=L(["decisions"],{decisions:{type:"array",items:L(["candidateId","candidateHash","target","status","reason","headingOnly","evidence"],{candidateId:{type:"string",minLength:1},candidateHash:{type:"string",minLength:1},target:{type:"string",enum:["technical-content","output-delivery"]},status:{type:"string",enum:["accepted","disputed","unmeasured"]},reason:{type:"string",minLength:1},headingOnly:{type:"boolean",description:"必须显式返回 true/false,不得省略。仅当原句本身只是章节标题/引导句、没有独立技术响应内容时为 true;冒号结尾但有对象/措施/责任/验收要求时必须为 false。"},evidence:{type:"array",items:L(["from"],{from:{type:"string",minLength:1},through:{type:"string",minLength:1}})},contentScope:L(["technical","excluded"],{technical:{type:"array",items:L(["from","response"],{from:{type:"string",minLength:1},through:{type:"string",minLength:1},response:{type:"string",minLength:1}})},excluded:{type:"array",items:L(["from","reason"],{from:{type:"string",minLength:1},through:{type:"string",minLength:1},reason:{type:"string",minLength:1}})}})})}}),O=L(["decisions"],{decisions:{type:"array",items:L(["candidateId","candidateHash","applicability"],{candidateId:{type:"string",minLength:1},candidateHash:{type:"string",minLength:1},applicability:M})}}),P=L(["decisions","evidenceRequests"],{decisions:O.properties.decisions,evidenceRequests:{type:"array",maxItems:4,items:L(["candidateId","candidateHash","sourceFile"],{candidateId:{type:"string",minLength:1},candidateHash:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},quote:{type:"string",minLength:2,description:"与queryTerms二选一:已知原文的逐字查询;不会改为模糊查找"},queryTerms:{type:"array",minItems:1,maxItems:4,description:"与quote二选一:资料发现检索词,同一窗口须含全部词;结果不是已绑定证据",items:{type:"string",minLength:2,maxLength:120}}})}}),Q=L(["repairs"],{repairs:{type:"array",items:L(["candidateId","candidateHash","source","basisRefs"],{candidateId:{type:"string",minLength:1},candidateHash:{type:"string",minLength:1},source:L([],{parentNodeId:{type:"string"}}),basisRefs:{type:"array",items:L(["index","refId","sourceFile","quote","linkedTo"],{index:{type:"integer",minimum:0},refId:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},quote:{type:"string",minLength:1},parentNodeId:{type:"string"},linkedTo:{type:"array",items:{type:"string"}}})}})}}),R={type:"array",items:L(["sourceFile","quote"],{sourceFile:{type:"string",minLength:1},quote:{type:"string",minLength:1},parentNodeId:{type:"string"}})},S=L(["sourceRefs","fields","rowGroups","instructions","formatRules"],{sourceRefs:R,fields:{type:"array",items:L(["id","label","headerPath","order","presence","valueRequired","conditions","basisRefs"],{id:{type:"string",minLength:1},label:{type:"string",minLength:1},headerPath:{type:"array",items:{type:"string",minLength:1}},order:{type:"integer",minimum:0},presence:{type:"string",enum:["required","conditional","optional"]},valueRequired:{type:"boolean"},conditions:{type:"array",items:{type:"string"}},unit:{type:"string"},basisRefs:R,condition:L(["status","reason","basisRefs"],{status:{type:"string",enum:["applies","not-applicable","unresolved"]},reason:{type:"string",minLength:1},basisRefs:R})})},rowGroups:{type:"array",items:L(["id","label","order","fixedRows","basisRefs"],{id:{type:"string",minLength:1},label:{type:"string",minLength:1},order:{type:"integer",minimum:0},basisRefs:R,fixedRows:{type:"array",items:L(["id","label","labelFieldId","required","repeatable"],{id:{type:"string",minLength:1},label:{type:"string",minLength:1},labelFieldId:{type:"string",minLength:1},required:{type:"boolean"},repeatable:{type:"boolean"}})}})},instructions:{type:"array",items:L(["id","text","targets","basisRefs"],{id:{type:"string",minLength:1},text:{type:"string",minLength:1},targets:{type:"array",items:{type:"string"}},basisRefs:R})},formatRules:{type:"array",items:L(["id","kind","text","targets","sourceRefs"],{id:{type:"string",minLength:1},kind:{type:"string",enum:["column-order","row-group-order","merged-header","fixed-text","diagram-area","description-area","visual-layout"]},text:{type:"string",minLength:1},targets:{type:"array",items:{type:"string"}},sourceRefs:R})}}),T=L(["candidateHash","status","reason","evidence"],{candidateHash:{type:"string",minLength:1},status:{type:"string",enum:["accepted","disputed","unmeasured"]},reason:{type:"string",minLength:1},evidence:R}),U=L(["contentObligations","outputObligations","unresolved"],{contentObligations:{type:"array",items:L(["text","kind","quote","sourceFile","applicability"],{clause:{type:"string"},text:{type:"string",minLength:1},kind:{type:"string",enum:["content","procedure"]},quote:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},page:{type:"string"},items:{type:"array",items:{type:"string",minLength:1}},applicability:M})},outputObligations:{type:"array",items:L(["form","element","quote","sourceFile","applicability"],{clause:{type:"string",minLength:1},form:{type:"string",minLength:1},element:{type:"string",minLength:1},quote:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},applicability:M})},unresolved:{type:"array",items:L(["question"],{question:{type:"string",minLength:2},sourceFile:{type:"string"}})}}),V=L(["outputObligations"],{outputObligations:{type:"array",items:L(["form","element","quote","sourceFile","applicability"],{form:{type:"string",minLength:1},element:{type:"string",minLength:1},quote:{type:"string",minLength:1},sourceFile:{type:"string",minLength:1},applicability:M})}}),W="你是施工组织设计投标策划智能体。你只从给定的冻结招标/补疑/答疑原文中提取**明确要求**。\n不得凭经验补条款,不得把其他项目的义务带进来,不得改写原文。\n按当前JSON接口提交完整结构;不调用未提供的工具,不返回自由文本或markdown。",X="你是施工组织设计投标策划智能体。只补提取给定原文句中明确点名的图表输出,不补造名称。",Y="你是适用性提案编制者,仅补全已有候选的多维解释,不承担独立审查。",Z="你是与义务提取分开的独立适用性审查者。以冻结原文、上下文与交叉引用逐项审查,禁止按父域自动排除或收录。",$="你是原格式母版提案者。只能读取冻结依据建立可验收模板,不自报审查通过。",_="你是与模板提案分开的独立原格式审查者。冻结原文定位不等于格式解释正确;逐项审查母版完整性。",aa=a=>{let b=a.trim().toLowerCase(),c={表:"table",表格:"table",图:"figure",图件:"figure",示意图:"diagram",框图:"diagram",组织机构图:"org_chart",organization_chart:"org_chart",organizational_chart:"org_chart",bar_chart:"chart",pie_chart:"chart",曲线:"chart",图表:"chart"};return c[b]?c[b]:/org|组织|机构/u.test(b)?"org_chart":/网络图|横道图|进度图|平面布置|流程|示意|框图|diagram/u.test(b)?"diagram":/曲线|chart|柱状|饼图/u.test(b)?"chart":/表|table/u.test(b)?"table":/图|figure|image/u.test(b)?"figure":void 0};function ab(a){return a.replace(/\s+/gu,"").normalize("NFKC").replace(/[“”‘’"'`]/gu,"")}function ac(a,b){let c=[...a.slice(0,Math.max(0,b)).matchAll(/PDF\s*第\s*(\d+)\s*页/gu)];return c.at(-1)?.[1]}function ad(a){let b=RegExp(B.deliveryVerbs.map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("|"),"u"),c=(B.skipContextPatterns??[]).map(a=>RegExp(a,"u")),d=new Map;for(let e of a)for(let a of e.text.matchAll(/[^。;\n]+/gu)){let f=a[0],g=a.index;if(b.test(f)){for(let a of B.rules)if(RegExp(a.context,"u").test(f))for(let b of a.terms){if(!f.includes(b))continue;let a=function(a,b){let c=a.lastIndexOf("\n",b)+1,d=a.indexOf("\n",b),e=a.slice(c,-1===d?a.length:d),f=/^\s{0,3}#{1,6}\s+.+?\s*#*\s*$/u.test(e),g=[...a.slice(0,f?-1===d?a.length:d:b).matchAll(/^\s{0,3}(#{1,6})\s+(.+?)\s*#*\s*$/gmu)].map(a=>({level:a[1].length,title:a[2].replace(/\s+/gu,"").trim(),index:a.index})).filter(a=>a.index<=b);if(!g.length)return"";let h=[];for(let a of g){for(;h.length&&h[h.length-1].level>=a.level;)h.pop();h.push(a)}return h.map(a=>a.title).join("\0")}(e.text,g);if(c.some(b=>b.test(a)))continue;let h={term:b,filePath:e.filePath,start:g,end:g+f.length,excerpt:f.trim(),context:a};d.set(JSON.stringify([e.filePath,g,b]),h)}}}return[...d.values()]}function ae(a){let b=new Set(a.occurrences.filter(a=>a.witnesses.some(a=>!0===a.accepted||a.review?.status==="accepted")).map(a=>`${a.term}\u0000${a.filePath}\u0000${a.context}`));return a.uncovered.filter(a=>!b.has(`${a.term}\u0000${a.filePath}\u0000${a.context}`))}function af(a){let b=(0,j.ML)(a.sourceFiles),c=(a,b)=>a.sourceFile===b.filePath&&a.start<b.end&&a.end>b.start,e=a.outputs.map((e,f)=>{let g=e.applicability,h=g&&g.sourceHash===b.sourceHash&&g.sourceTextHash===b.files.find(a=>a.filePath===e.sourceFile)?.sourceTextHash&&"output"===g.subject.kind&&g.subject.element===e.element&&g.source.sourceFile===e.sourceFile&&ab(g.source.quote)===ab(e.quote)&&(a=>{let c=b.files.find(b=>b.filePath===a.sourceFile);return c&&a.start>=0&&a.end===a.start+a.quote.length&&c.text.slice(a.start,a.end)===a.quote&&a.nodeId===`tender-source:${(0,d.Fu)([a.sourceFile,a.start,a.quote]).slice(0,24)}`})(g.source),i=g&&(0,j.xL)(e)&&(0,j.N3)(g,a.sourceFiles,{kind:"output",sourceFile:e.sourceFile,quote:e.quote,element:e.element},b).valid,k=new Set(["source"]);if(g&&i){for(let a of g.basisRefs)c(a,{filePath:g.source.sourceFile,start:g.source.start,end:g.source.end})&&k.add(a.refId);let a=!0;for(;a;)for(let b of(a=!1,g.basisRefs))for(let c of b.linkedTo)(k.has(b.refId)||k.has(c))&&(k.has(b.refId)&&k.has(c)||(a=!0),k.add(b.refId),k.add(c))}return{output:e,scope:g,sourceBound:h,accepted:i,connected:k,candidateId:`output-${f}`}}),f=ad(a.sourceFiles).map(a=>{let b=[];for(let{output:d,scope:f,sourceBound:g,accepted:h,connected:i,candidateId:j}of e)if(f&&(d.element.includes(a.term)||a.term.includes(d.element))&&(g&&c(f.source,a)&&b.push({candidateId:j,type:"primary-found",anchor:f.source,applicabilityBindingHash:f.bindingHash,accepted:h}),h))for(let e of f.basisRefs)["includes","shared-delivery"].includes(e.relation)&&i.has(e.refId)&&ab(e.quote).includes(ab(d.element))&&c(e,a)&&b.push({candidateId:j,type:"independently-reviewed-basis",anchor:e,applicabilityBindingHash:f.bindingHash,basisRefId:e.refId,relation:e.relation,review:{candidateHash:f.review.candidateHash,sourceHash:f.review.sourceHash,inputHash:f.review.inputHash,status:"accepted"}});return{...a,witnesses:b}});return{occurrences:f,uncovered:f.filter(a=>!a.witnesses.length).map(({witnesses:a,...b})=>b)}}function ag(a){if(!(a.length<2)&&a.some(a=>a.parents.some(b=>b.nodeId===a.match.nodeId)))return{rule:"节点是否具有父角色只看该处冻结parents;真实heading可同时是match和parent,允许选用;不在parents的普通原句节点仍不能作parent。共同父节点如仍命中多处,不能完成消歧。",occurrences:a.map(b=>({match:b.match,parents:b.parents.map(c=>({node:c,alsoMatchedHeading:c.nodeId===b.match.nodeId,matchingOccurrences:a.filter(a=>a.parents.some(a=>a.nodeId===c.nodeId)).length}))}))}}async function ah(a){let b;if(!a.sourceFiles.length)throw Error("TENDER_OBLIGATION_SOURCE_MISSING:没有冻结招标/补疑/答疑原文,不能提取义务");let c=a.maxExcerptCharsPerBatch??m.NX.$,e=new Map(a.sourceFiles.map(a=>[a.filePath,a.text])),k=a.sourceFiles,y=(0,j.ML)(a.sourceFiles),B=(a,b)=>{let c=e.get(a);if(!c||!b)return 0;let d=0,f=c.indexOf(b);for(;f>=0;)d+=1,f=c.indexOf(b,f+b.length);return d},L=a=>{if(!a)return!1;let b=e.get(a.sourceFile);return!!(b&&a.start>=0&&a.end===a.start+a.quote.length&&b.slice(a.start,a.end)===a.quote&&a.nodeId===`tender-source:${(0,d.Fu)([a.sourceFile,a.start,a.quote]).slice(0,24)}`)},M=(0,g.randomUUID)(),R=`tender-extraction-inputs-${M}.json`,ae=a.diagnostics&&(0,I.frozenModelConfigurationForRun)(a.diagnostics),ah=ae?{status:"recorded",sha256:(0,H.x)(a.diagnostics)}:{status:"unavailable",reason:"no-frozen-model-configuration"},ai=a.artifactDir&&ae?(0,G.G)(f().join(a.artifactDir,"tender-obligation-response-cache"),a.diagnostics,"tender-obligation-response-v1",a.runId):void 0,aj=(a,b)=>{let c=b===N?function(a,b){let c=a.candidates,e=a.evidenceSelectionDirectory;if(!Array.isArray(c)||!e?.candidates||new Set(c.map(a=>a.candidateId)).size!==c.length)throw Error("TENDER_REVIEW_WIRE_INPUT");let f=new Map(c.map(a=>[a.candidateId,{candidateId:a.candidateId,candidateHash:a.candidateHash,target:a.target}])),g=new Map,h=new Map,i=c.map((a,b)=>{let c=e.candidates.find(b=>b.candidateId===a.candidateId);if(!c||!a.candidateHash||!a.target)throw Error("TENDER_REVIEW_WIRE_IDENTITY");let d=new Map,f=[],i=a=>{let c=`c${b+1}e${f.length+1}`;if(g.has(a))throw Error("TENDER_REVIEW_WIRE_DUPLICATE_REFERENCE");return g.set(a,c),d.set(c,a),f.push(c),c},j=c.groups.map(a=>({...a,ref:i(a.ref),parts:a.parts.map(a=>({...a,ref:i(a.ref)}))}));return h.set(a.candidateId,d),{candidateId:c.candidateId,groups:j}}),j=b.properties.decisions.items,k=a=>{let b=a.properties&&Object.fromEntries(Object.entries(a.properties).filter(([a])=>!["candidateId","candidateHash","target"].includes(a)).map(([a,b])=>[a,k(b)]));return{...a,...Array.isArray(a.required)?{required:a.required.filter(a=>!["candidateId","candidateHash","target"].includes(a))}:{},...b?{properties:b}:{},...a.items?{items:k(a.items)}:{}}},l=`^(?:${c.map(a=>a.candidateId.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("|")})$`,m={type:"object",additionalProperties:!1,required:["decisions"],properties:{decisions:{type:"object",additionalProperties:!1,required:c.map(a=>a.candidateId),patternProperties:{[l]:k(j)}}}},n=a=>Array.isArray(a)?a.map(n):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).filter(([a])=>"candidateHash"!==a).map(([a,b])=>[a,["from","through","ref"].includes(a)&&"string"==typeof b?g.get(b)??b:n(b)])):a;return{payload:{...n(a),reviewReplyProtocol:{version:"tender-review-bound-reply-v1",instructions:"decisions是按当前candidateId为键的对象,每键一个结论。值只写status/reason/headingOnly/evidence/contentScope;headingOnly 必须显式返回 true/false,不得省略:仅当原句本身只是标题/引导句、无独立技术响应内容时为 true,冒号结尾但有实质要求必须为 false;不返回candidateId/candidateHash/target,身份及审查目标由本次请求绑定。证据仅选择本候选给出的短ref,不能跨候选借用。此封装不产生语义批准。"},evidenceSelectionDirectory:{...e,candidates:i}},schema:m,binding:{version:"tender-review-bound-reply-v1",requestBindingHash:(0,d.Fu)([e.bindingHash,[...f.values()],i]),candidates:[...f.values()],references:[...h].map(([a,b])=>({candidateId:a,refs:[...b]}))},restore(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("TENDER_REVIEW_WIRE_SHAPE");if(!a.decisions||"object"!=typeof a.decisions||Array.isArray(a.decisions)||Object.keys(a).some(a=>"decisions"!==a))throw Error("TENDER_REVIEW_WIRE_SHAPE:decisions必须为按当前候选键索引的对象");let b=a.decisions;if(Object.keys(b).some(a=>!f.has(a)))throw Error("TENDER_REVIEW_WIRE_CANDIDATES:不接受额外或旧候选");return{decisions:Object.keys(b).map(a=>{let c=f.get(a),d=b[a];if(!d||"object"!=typeof d||Array.isArray(d)||["candidateId","candidateHash","target"].some(a=>Object.hasOwn(d,a)))throw Error("TENDER_REVIEW_WIRE_IDENTITY:身份由本次请求绑定,不允许模型覆盖");let e=b=>Array.isArray(b)?b.map(e):b&&"object"==typeof b?Object.fromEntries(Object.entries(b).map(([b,c])=>{if("from"!==b&&"through"!==b)return[b,e(c)];let d="string"==typeof c?h.get(a).get(c):void 0;if(!d)throw Error(`TENDER_REVIEW_WIRE_FOREIGN_REFERENCE:${a}.${b}必须选择本候选短ref,实际=${String(c)};合法选项=${[...h.get(a).keys()].join(",")}`);return[b,d]})):b;return{...e(d),...c}})}}}}(a,b):void 0,e=(0,j.El)(c?.payload??a,y),f={...e,restoreResponse:a=>{let b=e.restoreResponse(a);return void 0===b?void 0:c?c.restore(b):b}},g=a=>({...a,...a.properties?{properties:Object.fromEntries(Object.entries(a.properties).filter(([a])=>"parentNodeId"!==a||f.parentReferences.length).map(([a,b])=>[a,"parentNodeId"===a?{...b,enum:f.parentReferences}:g(b)]))}:{},...a.items&&!Array.isArray(a.items)?{items:g(a.items)}:{}});return{projection:f,...c?{wireBinding:c.binding}:{},schema:c?.schema??(b===N?{...b,properties:g(b).properties}:b)}},ak=(a,b,c)=>{let d=aj(b,c);return(0,n.documentJsonSystemPrompt)(a,d.schema).length+JSON.stringify(d.projection.prompt).length},al=[],am=[],an=[],ao=[],ap=[],aq=(a,b,c,e,f)=>{let g=aj(c,e);return am.push({stage:a,modelInputChars:ak(b,c,e),inputHash:(0,d.Fu)([(0,n.documentJsonSystemPrompt)(b,g.schema),JSON.stringify(g.projection.prompt)]),reason:f}),f},ar=0,as=(b,d=!1)=>{let e=d?R.replace(/\.json$/u,`-snapshot-${++ar}.json`):R;a.artifactDir&&a.runId&&(0,o.tv)(a.artifactDir,e,{version:"tender-extraction-inputs-v1",invocationId:M,inputBudgetChars:c,unit:"utf16-code-units",qualification:"logical-request-input-not-provider-attempt-usage",frozenModelIdentity:ah,...b?{blockedWindow:b}:{},calls:al,blockedInputs:am,referenceRepairs:an,applicabilityReviews:ao,semanticRevisions:ap},a.runId)},at=b=>{a.artifactDir&&a.runId&&(0,o.tv)(a.artifactDir,`tender-extraction-input-${M}-${String(b.ordinal).padStart(6,"0")}-${b.status}.json`,{version:"tender-extraction-input-v1",invocationId:M,qualification:"logical-request-input-not-provider-attempt-usage",inputBudgetChars:c,unit:"utf16-code-units",frozenModelIdentity:ah,...b},a.runId)},au=async(b,e,f,g,i)=>{let j=aj(f,g),k=j.projection;g=j.schema;let l=JSON.stringify(k.prompt),m=(0,n.documentJsonSystemPrompt)(e,g);if(m.length+l.length>c)throw Error(aq(b,e,f,g,`TENDER_OBLIGATION_INPUT_OVERSIZE:${b} 实际消息 ${m.length+l.length} 字符超过 ${c},未派发`));let p={ordinal:al.length+1,stage:b,status:"invoked",systemChars:m.length,promptChars:l.length,..."string"==typeof f.version?{operation:f.version}:{},schemaChars:JSON.stringify(g).length,modelInputChars:m.length+l.length,inputHash:(0,d.Fu)([m,l]),payloadFields:Object.fromEntries(Object.entries(k.prompt).map(([a,b])=>[a,JSON.stringify(b).length]))};if(Array.isArray(f.files)){let a=f.files;p.sourceChars=a.reduce((a,b)=>a+b.excerpts.reduce((a,b)=>a+b.length,0),0),p.sourceContextChars=a.reduce((a,b)=>a+JSON.stringify(b.sourceContext).length,0),p.sourceRanges=a.flatMap(a=>a.ranges.map(b=>({filePath:a.filePath,...b})))}p.sourceProjectionChars=JSON.stringify(k.prompt.sourceProtocol).length,Array.isArray(k.prompt.data.files)&&(p.sourceContextReferenceChars=k.prompt.data.files.reduce((a,b)=>a+JSON.stringify(b.sourceContext).length,0)),al.push(p),at(p),j.wireBinding&&a.artifactDir&&a.runId&&(0,o.tv)(a.artifactDir,`tender-review-wire-${M}-${p.ordinal}.json`,{inputHash:p.inputHash,...j.wireBinding},a.runId);try{var q;let d=await a.caller(e,l,{schema:g,diagnostics:a.diagnostics,signal:a.signal,validateProtocol:c=>{let d=k.restoreResponse(c);return[..."tender-applicability-review"===b?function(a,b,c){let d=a&&"object"==typeof a&&"decisions"in a?a.decisions:void 0;if(!Array.isArray(d))return["decisions 必须是当前候选的审查数组"];let e=[],f=new Map(b.map(a=>[a.candidateId,a])),g=new Map;for(let[a,b]of d.entries()){let d=`decisions[${a}]`;if(!b||"object"!=typeof b){e.push(`${d} 必须是审查对象`);continue}let h="string"==typeof b.candidateId?b.candidateId:"",i=f.get(h);if(!i){e.push(`${d}.candidateId 不属于本批当前候选`);continue}if(g.set(h,(g.get(h)??0)+1),b.candidateHash!==i.candidateHash&&e.push(`${d}(${h}).candidateHash 必须原样为 ${i.candidateHash},不能使用其它候选的 hash`),b.target!==i.target&&e.push(`${d}(${h}).target 必须为 ${i.target}`),c&&"technical-content"===i.target&&"accepted"===b.status){let a=b.contentScope;a&&Array.isArray(a.technical)&&Array.isArray(a.excluded)||e.push(`${d}(${h}).contentScope:accepted 的 technical-content 必须提供 technical/excluded 数组;reason 不能代替范围。若尚无依据,保留真实 disputed/unmeasured,不得编造批准。`)}}for(let a of b)1!==g.get(a.candidateId)&&e.push(`候选 ${a.candidateId} 必须恰有一个当前独审结论;依据不足可返回 unmeasured,不得漏项或重复`);return e}(d,f.candidates,!!a.requireContentScope):[],..."tender-applicability-review"===b&&i?function(a,b){let c=function(a){if(!a||"object"!=typeof a||!("decisions"in a))return;let b=a.decisions;return Array.isArray(b)?b:void 0}(a);if(!c)return[];let d=new Map(b.directory.candidates.map(a=>[a.candidateId,a])),e=[];for(let[a,f]of c.entries()){if(!f||"object"!=typeof f)continue;let c="string"==typeof f.candidateId?f.candidateId:"",g=d.get(c);if(!g||f.candidateHash!==g.candidateHash)continue;let i=`decisions[${a}](${c})`;void 0!==f.evidence&&e.push(...h(f.evidence,c,g.candidateHash,b,`${i}.evidence`).errors);let j=f.contentScope;if(j&&"object"==typeof j&&!Array.isArray(j))for(let a of["technical","excluded"]){let d=j[a];void 0!==d&&e.push(...h(d,c,g.candidateHash,b,`${i}.contentScope.${a}`,["technical"===a?"response":"reason"]).errors)}}return e}(d,i):[],..."tender-applicability-revision-v2"===f.version?E(d,f.candidates,y):[]]},onAttempt:c=>{if(c.raw)try{k.restoreResponse(JSON.parse(c.raw))}catch(d){if(d instanceof SyntaxError||!a.artifactDir||!a.runId)return;(0,o.tv)(a.artifactDir,`tender-source-reference-failure-${M}-${p.ordinal}-${c.ordinal}.json`,{version:"tender-source-reference-failure-v1",stage:b,inputHash:p.inputHash,raw:c.raw,reason:d instanceof Error?d.message:String(d),reusedAsValidResponse:!1},a.runId)}},maxInputChars:c,temperature:0,taskKind:(q=String(f.version??""),"tender-applicability-reference-repair-v1"===q&&"1"===process.env.DOCUMENT_BINDING_SELECTION_LOW_REASONING?"binding-selection":"reasoning"),callKind:b,prefixKey:`tender:${b}`,...ai?{responseCache:ai,onResponseCache:a=>{"hit"===a.event?p.cache={requestKey:a.requestKey,responseSha256:a.responseSha256,originRunId:a.originRunId}:p.cacheErrors=a.errors}}:{}}),j=k.restoreResponse(d);if(void 0!==j&&"tender-applicability-revision-v2"===f.version){let a=E(j,f.candidates,y);if(a.length)throw Error(a.join(";"))}return p.status=p.cache?"cache-hit":void 0===d?"failed":"completed",j}catch(a){throw p.status="failed",p.error=a instanceof Error?a.message:String(a),a}finally{at(p)}},av=a=>({...a,sourceContext:a.excerpts.map((b,c)=>{let d=a.ranges[c];return(0,j.rP)(y,a.filePath,b).filter(a=>a.start===d.start&&a.end===d.end).map(a=>({...a,parents:a.parents.map(a=>({nodeId:a.nodeId,start:a.start,end:a.end,sourceDomain:a.sourceDomain,...a.start>=d.start&&a.end<=d.end?{}:{quote:a.quote}})),boundaries:a.boundaries.map(a=>({nodeId:a.nodeId,start:a.start,end:a.end,sourceDomain:a.sourceDomain}))}))})}),aw=new WeakMap,ax=(a,b)=>{let c=structuredClone(b.applicability??{}),d=(0,j.IG)({index:y,sourceFile:b.sourceFile,quote:b.quote,kind:a,...b.element?{element:b.element}:{},requested:c});return aw.set(d,c),d},ay=[],az=(a,b)=>{let c=ab(b);if(!c)return;let d=e.get(a);if(d){let e=d.indexOf(b);if(e>=0||ab(d).includes(c))return{filePath:a,...ac(d,Math.max(0,e))?{page:ac(d,Math.max(0,e))}:{}}}for(let a of k){let d=a.text.indexOf(b);if(d>=0||ab(a.text).includes(c))return{filePath:a.filePath,...ac(a.text,Math.max(0,d))?{page:ac(a.text,Math.max(0,d))}:{}}}},aA=a=>{let b=a.trim();if(!b)return;let c=/表|图|框图|曲线|网络图|横道图|平面布置|组织机构|人员组成|机械设备|附件/u;if(c.test(b))for(let a of k){let d=a.text.indexOf(b);if(d<0)continue;let e=Math.max(a.text.lastIndexOf("。",d),a.text.lastIndexOf(";",d),a.text.lastIndexOf("\n",d))+1,f=[a.text.indexOf("。",d),a.text.indexOf(";",d),a.text.indexOf("\n",d)].filter(a=>a>=0),g=f.length?Math.min(...f)+1:a.text.length,h=a.text.slice(e,g).trim();if(h&&c.test(h))return{filePath:a.filePath,quote:h,...ac(a.text,d)?{page:ac(a.text,d)}:{}}}},aB=[],aC=[],aD=[],aE=(a,b,c)=>({task:"从冻结招标原文提取施工组织设计的内容义务与明确输出要求",batch:{index:b+1,count:c},rules:["本次只处理给定原字窗口;ranges记录连续页与原窗口区间,不要假设其他页没有条件。来源标题的结构引用指向excerpts内原字,范围未明确时保留unresolved,不按分页断口解释适用性。","只提取原文明确要求的内容;原文没有的,不补。","**评审因素/评分标准不是内容义务**:它们由章节响应承载,不要作为 contentObligations 返回;**纯提交/修改/期限/份数等程序要求**也不要返回,除非它直接决定正文必须包含什么。","补疑/答疑中明确要求施工组织设计包含或编制的内容(如专项施工方案、深化设计、专项措施)**必须提取**;是否单独成节由规划决定,不要因为“可能另行报审”而排除。","contentObligations:招标/合同条款要求施工组织设计必须包括、说明或提交的内容。按**原子项**拆分(每项只表达一个可落实的义务),text 用简短名词短语,quote 逐字摘录包含该义务的连续原文(保持原文完整语义,不得改写、拼接或截断到失去条件)。","**逐项列举必须拆开**:同一句原文用“(1)(2)…”“① ② ③”“第一、第二”或顿号/分号列出多个可执行类别时,必须在同一义务的 `items` 中逐项列出(如危大工程的模板工程、起重吊装、脚手架、拆除、钢结构安装);不得合并成一条摘要,也不得只保留前几项。","kind=content 表示正文必须落实的工程/管理内容;kind=procedure 表示提交、修改、期限、确认等程序要求。","outputObligations:原文**点名具体名称**的表格、图件、网络图、横道图、平面布置图、组织机构图、人员组成表、机械设备表、曲线等。form 按实际形态选择;element 用原文名称;quote 逐字摘录包含该要求的连续原文。","sourceContext中的sourceDomain与父链仅是原文定位元数据,不能决定适用性:合同、附录、商务载体可能含本技术方案的最低人员、机械、工期、质量、深化设计等真实约束,必须完整保留并逐项判断,不能按父域或表名排除。","每个content/output必须给applicability独立维度:technicalContent判断required-response/technical-constraint/reference/not-applicable/unresolved;delivery分别判断强制程度requirement、交付文件location、是否必须原格式originalForm、阶段stage和conditions。technicalContent要求响应不等于本技术正文必须提交该原表;建议不能升级必出,施工阶段专项成果不等于投标时完整成果。","reason解释原句与跨引用;basisRefs可来自多个给定冻结文件,逐项给refId/sourceFile/quote/relation/explanation/linkedTo(可链接source或其他refId);parentNodeId只用于消歧。来源原句不必包含“施工组织设计”字眼,不能依关键词当语义证明。stage=multiple须在stages明确列出bid/contract/construction,不能只写自然语言条件。","同一条款可同时有技术内容约束和另一文件/阶段原表义务,分别保留content与output;匿名岗位配置可响应技术资源要求,但去姓名不自动等于完整具名表履约;共享附件与补疑覆盖须保留可核交叉引用。主提取不得自行提供review/verified,全部决定(含排除)需后续独立scope审查。","补疑中的工程技术责任可作为content响应,不因没有“施工组织设计”字样而删除;但施工期独立编制报审的专项成果,不能自动作为本篇必出表图。归属未能裁决时保留typed unresolved;自由文本unresolved不能代替条目的applicability。","纯商务、资格或报价原表不等于技术必出;但表类名称不决定去留,有技术交叉引用或共享附件时保留独立内容约束与原表交付记录,分别给出多维解释,不按名称删除。实际要求暗标时另核身份约束,不借匿名化改写原表归属。","泛称“文字并结合图表形式编制”不单独作为一项输出;只有点名具体图表名称时才提取。","不要从“评审因素/评分标准”里推断输出形式;只提取原文明确点名的输出。","sourceFile 必须使用 sourceProtocol.files 给出的 fileRef;服务端恢复规范文件路径。page 可不填,程序会按 quote 定位。","同一 quote 可以支撑多条义务;不同义务不要重复。","有歧义时写入 unresolved,不要猜。"],files:a.map(av),outputProtocol:"严格遵循system中的当前JSON schema与全部枚举;每条content/output的applicability必须完整。basisRefs/reason属于applicability,不是外层义务;originalForm是枚举字符串,不能填boolean;不用mandatory、bid-technical-file或中文自造枚举。"});try{b=(0,p.tenderObligationExcerptBatches)(a.sourceFiles,c,a=>ak(W,aE(a,Number.MAX_SAFE_INTEGER-1,Number.MAX_SAFE_INTEGER),U))}catch(a){throw as(a instanceof Error?a.message:String(a)),a}let{batches:aF,windowsTotal:aG,charsTotal:aH,pagesTotal:aI}=b;if(!aF.length)throw Error("TENDER_OBLIGATION_EXCERPTS_EMPTY:冻结招标来源全文为空,不能提取义务");let aJ=async(a,b)=>{let c,d=[],e=[],f=[],g=[],h=0;try{c=await au("tender-obligation-extraction",W,aE(b,a,aF.length),U)}catch(b){throw Error(`TENDER_OBLIGATION_EXTRACTION_FAILED:第 ${a+1}/${aF.length} 批失败:${b instanceof Error?b.message:String(b)}`,{cause:b})}if(!c||"object"!=typeof c)throw Error(`TENDER_OBLIGATION_EXTRACTION_FAILED:第 ${a+1}/${aF.length} 批模型未返回 JSON 结果`);let i=c;for(let a of i.contentObligations??[]){let b=String(a?.text??"").trim(),c=String(a?.quote??"").trim();if(!b||!c)continue;let e=az(String(a?.sourceFile??""),c);if(!e){g.push({kind:"content",text:b,reason:"quote 不在冻结原文中逐字存在",quote:c});continue}let f=[...new Set((Array.isArray(a?.items)?a.items:[]).map(a=>String(a??"").trim()).filter(Boolean))],i=z(c,f);h+=Math.max(0,f.length-i.length),d.push({text:b,kind:a?.kind==="procedure"?"procedure":"content",quote:c,sourceFile:e.filePath,...a?.clause?.trim()?{clause:a.clause.trim()}:{},...e.page?{page:e.page}:{},...i.length?{items:i}:{},applicability:ax("content",{...a,quote:c,sourceFile:e.filePath})})}for(let a of i.outputObligations??[]){let b=String(a?.element??"").trim(),c=String(a?.quote??"").trim(),d=aa(String(a?.form??"").trim());if(!b||!c||!d)continue;let f=az(String(a?.sourceFile??""),c);if(!f){let a=aA(b);if(!a){g.push({kind:"output",text:b,reason:"quote 不在冻结原文中逐字存在,且原文未点名该输出",quote:c});continue}e.push({form:d,element:b,quote:a.quote,sourceFile:a.filePath,applicability:ax("output",{element:b,quote:a.quote,sourceFile:a.filePath})});continue}e.push({form:d,element:b,quote:c,sourceFile:f.filePath,applicability:ax("output",{...a,element:b,quote:c,sourceFile:f.filePath})})}for(let a of i.unresolved??[]){let b=String(a?.question??"").trim();b&&f.push({question:b,...a?.sourceFile?.trim()?{sourceFile:a.sourceFile.trim()}:{}})}return{content:d,outputs:e,questions:f,rejected:g,itemsRejected:h}},aK=Math.max(1,Math.floor(m.N6?.obligationBatches??2)),aL=await (0,q.W)(aF,aK,(a,b)=>aJ(b,a)),aM=0;for(let a of aL)aB.push(...a.content),aC.push(...a.outputs),aD.push(...a.questions),ay.push(...a.rejected),aM+=a.itemsRejected;let aN=(a,b)=>{let c=new Set;return a.filter(a=>{let d=b(a);return!c.has(d)&&(c.add(d),!0)})},aO=a=>`${a.sourceFile}|${a.applicability?.source.nodeId}|${a.form}|${a.element}|${ab(a.quote)}`,aP=aN(aB,a=>`${a.sourceFile}|${a.applicability?.source.nodeId}|${a.clause??""}|${a.text}|${ab(a.quote)}`),aQ=aN(aC,aO),aR=aN(aD,a=>a.question),aS=a=>{let b=new Set;for(let c of ad(k)){let{term:d,filePath:e,start:f,end:g,excerpt:h}=c;a.some(a=>a.sourceFile===e&&(a.element.includes(d)||d.includes(a.element))&&a.applicability&&a.applicability.source.start<=g&&a.applicability.source.end>=f)||b.add(JSON.stringify({term:d,filePath:e,start:f,excerpt:h}))}return b},aT=aS(aQ),aU=[],aV=[];if(aT.size){let b=[...aT].map(a=>{try{let b=JSON.parse(a),c=String(b.term??""),d=String(b.filePath??""),e=b.excerpt??"";return{term:c,filePath:d,excerpt:e,sourceContext:(0,j.rP)(y,d,e)}}catch{return{term:"",filePath:"",excerpt:""}}}).filter(a=>a.term&&a.excerpt),d=a=>({task:"补提取原文点名的图表输出,逐项完整返回当前schema中的applicability;分别解释技术内容、交付位置、阶段、强制程度与原格式,不按父域自动排除或升级",rules:["**quote 必须逐字等于输入 focus 中对应项的 excerpt**(照抄触发句,不含首尾空白),sourceFile 照抄该项的 filePath;不得改写、缩写或另选原文句子——引文逐字可核是这条义务成立的前提。"],focus:a}),e=[],f=[];for(let a of b){if(ak(X,d([a]),V)>c){aq("tender-output-recall",X,d([a]),V,"单个点名输出与完整来源上下文超过输入预算,保留原句与后续局部待核");continue}f.length&&ak(X,d([...f,a]),V)>c&&(e.push(f),f=[]),f.push(a)}for(let b of(f.length&&e.push(f),e))try{let a=(await au("tender-output-recall",X,d(b),V)??{}).outputObligations??[];for(let c of(aU.push({batchTerms:b.map(a=>a.term),returned:a.map(a=>({element:String(a.element??""),quote:String(a.quote??""),form:String(a.form??"")})),status:"completed"}),a)){let a=String(c.element??"").trim(),b=String(c.quote??"").trim(),d=aa(String(c.form??""));if(!a||!b||!d)continue;let e=az(String(c.sourceFile??""),b);e&&aC.push({form:d,element:a,quote:b,sourceFile:e.filePath,applicability:ax("output",{...c,element:a,quote:b,sourceFile:e.filePath})})}aQ=aN(aC,aO);let c=aS(aQ);for(let a of(aT.clear(),c))aT.add(a)}catch(c){aU.push({batchTerms:b.map(a=>a.term),status:"failed",error:c instanceof Error?c.message:String(c)}),a.signal?.throwIfAborted()}for(let a of[...aT])try{let b=JSON.parse(a),c=String(b.term??""),d=String(b.filePath??""),e=b.excerpt,f=/表/u.test(c)?"table":/图/u.test(c)?"figure":void 0;if(c&&e&&f){let a={form:f,element:c,quote:e,sourceFile:d,applicability:ax("output",{element:c,quote:e,sourceFile:d})};aC.push(a),aV.push({term:c,filePath:d,form:f,quoteChars:e.length,anchorReal:L(a.applicability.source),quoteOccurrences:B(d,e)})}else aV.push({term:c,filePath:d,form:f,skipped:!0})}catch(a){aV.push({status:"failed",error:a instanceof Error?a.message:String(a)})}let g=aS(aQ=aN(aC,aO));for(let a of(aT.clear(),g))aT.add(a)}let aW=function(a){let b=function(a){let b=[],c=[],d=0,e=new Set;for(let f of a)for(let a of function(a){let b=[...a.matchAll(u)];if(!b.length)return[{text:a}];let c=[],d=0;for(let[e,f]of b.entries()){let g=f.index??0;g>d&&c.push({text:a.slice(d,g)});let h=b[e+1]?.index??a.length;c.push({page:f[1],text:a.slice(g,h)}),d=h}return d<a.length&&c.push({text:a.slice(d)}),c}(f.text))for(let g of function(a,b=!1){let c=[],d,e=[],f=[],g=!1,h=/^\s*#{1,6}(?:\s|$)/u,i=/^\s*第[一二三四五六七八九十百零〇\d]+[章节条款]/u,j=a=>v.test(a)||/^\d+(?:[..]\d+)+(?=[^\d..])/u.test(a)||w.test(a)||h.test(a)||/PDF\s*第\s*\d+\s*页/u.test(a),k=()=>{let a=e.join("").trim();a&&c.push({...d?{heading:d}:{},text:a}),e=[],f=[],g=!1};for(let c of a.match(/[^\r\n]*(?:\r?\n|$)/gu)??[]){if(!c)continue;let a=c.trim();if(!a){f.push(c);continue}if(f.length){let c=e.at(-1)?.trim()??"";!b||g||!c||/[。!?!?;;::.][”’」』)》】〕))\]]*$/u.test(c)||w.test(c)||h.test(c)||i.test(c)||/PDF\s*第\s*\d+\s*页/u.test(c)||j(a)?k():e.push(...f),f=[]}v.test(a)&&a.length<=100&&!w.test(a)&&(k(),d=a),e.push(c),g||=w.test(a)}return k(),c}(a.text,void 0!==a.page)){if(g.text.length<8||g.heading===g.text&&g.text.length<36&&!/[::]/u.test(g.text)&&0===x(g.text).length)continue;let h=function(a){let b=s(a);return r.categories.filter(a=>a.terms.some(a=>b.includes(s(a)))).sort((a,b)=>b.priority-a.priority||a.id.localeCompare(b.id))}(g.text);if(!h.length){A(g.text,h)&&(d+=1,c.length<50&&c.push({filePath:f.filePath,...a.page?{page:a.page}:{},text:g.text.slice(0,500)}));continue}if(!A(g.text,h))continue;let i=`requirement-clause:${t(`${f.filePath}\u0000${a.page??""}\u0000${s(g.text)}`)}`;e.has(i)||(e.add(i),b.push({id:i,filePath:f.filePath,...a.page?{page:a.page}:{},...g.heading?{heading:g.heading}:{},text:g.text,categoryIds:h.map(a=>a.id),categoryLabels:h.map(a=>a.label),items:x(g.text),covered:!1}))}return{clauses:b,unclassified:c,unclassifiedCount:d}}(a.sourceFiles),c=a.extraction.contentObligations.map(({items:a,...b})=>({...b,...a?{items:[...a]}:{}})),d=0,e=0,f=0,g=[];for(let h of b.clauses){let b=s(h.text),i=a.applicabilityResolver?.({sourceFile:h.filePath,quote:h.text}),j=a=>{if(a.sourceFile!==h.filePath)return!1;if(!i)return!0;let b=a.applicability?.source,c=i.source;return b&&b.sourceFile===c.sourceFile&&b.start>=0&&c.start>=0&&b.start<=c.start&&b.end>=c.end},k=c.find(a=>{if(!j(a))return!1;let c=s(a.quote);return c.length>=8&&c.includes(b)});if(k){if(h.items.length&&!k.items?.length){let a=z(k.quote,h.items);a.length&&(k.items=a)}k.categories=[...new Set([...k.categories??[],...h.categoryIds])],k.origin=k.origin??"agent-extraction",h.covered=!0,h.coveredBy=k.text,e+=1;continue}if(!h.categoryIds.map(a=>r.categories.find(b=>b.id===a)).filter(a=>a.addAsContent).sort((a,b)=>b.priority-a.priority).length){h.covered=!1,f+=1,g.length<50&&g.push({filePath:h.filePath,...h.page?{page:h.page}:{},categories:[...h.categoryIds],text:h.text.slice(0,500)});continue}c.push({text:h.text,kind:"content",quote:h.text,sourceFile:h.filePath,...h.page?{page:h.page}:{},...h.heading?{clause:h.heading}:{},...h.items.length?{items:h.items}:{},origin:"requirement-clause",categories:[...h.categoryIds],...i?{applicability:i}:{}}),h.covered=!0,d+=1}return{extraction:{...a.extraction,contentObligations:c},coverage:{version:r.version,clauses:b.clauses.length,classified:b.clauses.length,covered:e,added:d,unclassified:b.unclassifiedCount,unclassifiedSamples:b.unclassified,deferred:f,deferredSamples:g,requirementClauses:b.clauses}}}({sourceFiles:a.sourceFiles,applicabilityResolver:a=>ax("content",a),extraction:{applicabilityVersion:j.q$,contentObligations:aP,outputObligations:aQ,unresolved:aR}}),aX=aW.extraction;for(let b of a.chapterPoints??[]){if(aX.contentObligations.some(a=>a.sourceFile===b.sourceFile&&ab(a.quote)===ab(b.quote)))continue;let a=ax("content",b);if(!L(a.source))throw Error(`TENDER_CHAPTER_POINT_SOURCE_INVALID:${b.text} 没有唯一的冻结原文依据(${b.sourceFile})`);aX.contentObligations.push({...b,kind:"content",applicability:a})}await a_(aX);let aY=af({sourceFiles:a.sourceFiles,outputs:aX.outputObligations});a.artifactDir&&a.runId&&(0,o.tv)(a.artifactDir,"tender-named-output-coverage.json",{version:"tender-named-output-coverage-v1",runId:a.runId,occurrences:aY.occurrences.map(a=>({term:a.term,filePath:a.filePath,context:a.context,start:a.start,witnesses:a.witnesses.map(a=>({type:a.type,candidateId:a.candidateId,accepted:a.accepted??null,review:a.review??null}))})),uncovered:aY.uncovered.map(a=>({term:a.term,filePath:a.filePath,context:a.context,start:a.start})),recallLog:aU,fallbackLog:aV},a.runId),await a$(aX),as();let aZ={version:K,applicabilityVersion:j.q$,extraction:aX,rejected:ay,counts:{content:aX.contentObligations.length,output:aQ.length,unresolved:aR.length,rejected:ay.length,uncovered:aY.uncovered.length,itemsRejected:aM},uncoveredOutputs:aY.uncovered.map(a=>`${a.term}(${a.filePath}@${a.start})`),namedOutputCoverage:aY,excerptChars:aH,promptVersion:`${K}-batched-v7-lossless-source-references`,inputLedgerArtifact:R,coverage:{windowsTotal:aG,windowsRead:aG,windowsUnread:0,batches:aF.length,charsTotal:aH,pages:aI},requirementCoverage:aW.coverage};if(a.artifactDir&&a.runId){let{inputLedgerArtifact:b,...c}=aZ;(0,o.tv)(a.artifactDir,"tender-obligation-extraction.json",c,a.runId)}return aZ;async function a$(b){for(let e of b.outputObligations){let b,f;if(!(0,j.oY)(e)||"required"!==e.applicability.delivery.originalForm)continue;let g=e.applicability,h=[g.source,...g.basisRefs],i=[],k=(a,b,c)=>{let d=y.files.find(b=>b.filePath===a),e=Math.max(0,b-1800),f=Math.min(d.text.length,c+3600);if(i.some(b=>b.sourceFile===a&&b.start<=e&&b.end>=f))return;for(let b=i.length-1;b>=0;b--){let c=i[b];c.sourceFile!==a||c.end<e||c.start>f||(e=Math.min(e,c.start),f=Math.max(f,c.end),i.splice(b,1))}let g=d.text.slice(e,f);i.push({sourceFile:a,sourceTextHash:d.sourceTextHash,start:e,end:f,text:g,parents:(0,j.rP)(y,a,g)})};for(let a of h)k(a.sourceFile,a.start,a.end);for(let a of y.files)for(let b of a.text.matchAll(RegExp(e.element.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu")))k(a.filePath,b.index,b.index+e.element.length);let l={...{version:"tender-original-form-proposal-v1",task:"从已核原格式必交义务的冻结母版提案字段、表头、分组、固定行、说明与格式规则;不自行审查",output:{form:e.form,element:e.element,applicability:g},sourceHash:y.sourceHash,sourceCatalog:y.files.map(a=>({sourceFile:a.filePath,sourceTextHash:a.sourceTextHash,chars:a.text.length})),rules:["只提取本输出对应母版,不能混入同页相邻表、同名另一来源或页码。sourceRefs与每项依据均逐字给sourceFile/quote,parentNodeId只作消歧。","fields保持实际字段标签、单位、分组表头headerPath及列序;包含原表序号列,不得去姓名/改名冒充原具名表。presence指原表字段是否必留,valueRequired须区分空白模板与实际交付必填,不能无依据禁止原表允许的空白。","conditional字段必须在condition逐项给出applies/not-applicable/unresolved、解释及冻结basisRefs;本项目条件已核成立或不成立才可作对应决定,不能默认永久未测,也不能无依据填not-applicable。固定原表保留表头但允许空值时用valueRequired=false,不能删列;仅原文明示条件不成立可不列的字段才用conditional/not-applicable。","rowGroups保持组名与组序;有明确岗位/固定行才列fixedRows并给labelFieldId及是否可重复,数组顺序即原行序。空白占位行数量不等于必须填同样数量资源。instructions逐字保留说明。","表头多层合并由headerPath表达。只有冻结原文明确支持的合并/固定布局才可主张;扁平OCR不足以判断视觉分组时给visual-layout未测约束,不能猜合并、尺寸、节点层级或声称像素一致。","图框/说明框只证明相应diagram-area/description-area区域;没有源要求不得编造组织层级或固定节点;必须精确布局且无法用常规图件表达的规则保留visual-layout。fixed-text规则的text必须是实际须保留的逐字文本,不能填规则解释。","上下文仅是所列窗口,sourceCatalog不表示全文已读;不自带review/verified,模板必须再由独立caller审查。"]},sourceWindows:i},m={sourceRefs:[],fields:[],rowGroups:[],instructions:[],formatRules:[]};if(ak($,l,S)>c)b=aq("tender-original-form-proposal",$,l,S,"原格式关联母版窗口与完整协议超过单次输入预算,未截断、未读取,保持本输出待核");else try{m=await au("tender-original-form-proposal",$,l,S)}catch(c){a.signal?.throwIfAborted(),b=`原格式提案未完成:${c instanceof Error?c.message:String(c)}`}let n=(0,J.Y8)({sourceFiles:a.sourceFiles,applicability:g,kind:"table"===e.form?"table":"figure",proposal:m}),o={version:"tender-original-form-review-v1",task:"独立复核原格式母版契约是否忠实完整,不核作者表格内容",sourceHash:y.sourceHash,candidateHash:(0,J.tL)(n),contract:n,sourceWindows:i,rules:["核当前已独审scope、母版身份、每字段/单位/必填条件/表头层级/列序/分组固定行顺序/说明及格式规则,禁止仅凭表名或quote存在认定语义完整。","不能把匿名技术资源响应认作具名原表完成,不能混入相邻表;空白行不是固定资源数量,未读或扁平OCR无法判断的视觉约束保持unmeasured,不能猜测。","accepted只接受当前candidateHash的模板契约;任何关键字段/说明/条件缺漏或误配disputed,依据/可读信息不足unmeasured。另有实际单元内容独审,不可由本模板结论提前认证实际数据。"]};if(!b&&ak(_,o,T)>c&&(b=aq("tender-original-form-review",_,o,T,"原格式独立审查、当前协议与完整母版窗口超过输入预算,保持本输出待核")),!b)try{f=await au("tender-original-form-review",_,o,T)}catch(c){a.signal?.throwIfAborted(),b=`原格式独立审查未完成:${c instanceof Error?c.message:String(c)}`}e.originalForm=n=(0,J.Q0)({contract:n,sourceFiles:a.sourceFiles,inputHash:(0,d.Fu)(o),result:f?.candidateHash===o.candidateHash&&"string"==typeof f.reason&&Array.isArray(f.evidence)&&["accepted","disputed","unmeasured"].includes(f.status)?f:{status:"unmeasured",reason:b??"原格式独立审查缺少唯一当前模板结论",evidence:[]}})}}async function a_(b){let e=[...b.contentObligations.map((a,b)=>({candidateId:`content-${b}`,kind:"content",item:a})),...b.outputObligations.map((a,b)=>({candidateId:`output-${b}`,kind:"output",item:a}))],f=a=>{let b=a.item.applicability??ax(a.kind,a.item);a.item.applicability=b;let c=aw.get(b);if(!c)throw Error("TENDER_APPLICABILITY_RAW_PROPOSAL_MISSING:本次候选原始引用记录缺失,不能从清洗后的scope重建");let d=(0,j.dY)({index:y,sourceFile:a.item.sourceFile,quote:a.item.quote,requested:c}),e=(0,j.r8)(y,a.item.sourceFile,a.item.quote),f=(c.basisRefs??[]).map((a,b)=>({index:b,refId:a.refId,relation:a.relation,linkedTo:a.linkedTo??[],contexts:(0,j.r8)(y,a.sourceFile,a.quote)})),g=ag(e),h=f.flatMap(a=>{let b=ag(a.contexts);return b?[{index:a.index,...b}]:[]});return{candidate:a,payload:{candidateId:a.candidateId,candidateHash:(0,j.DB)(b),kind:a.kind,text:"text"in a.item?a.item.text:a.item.element,scope:b,sourceContexts:e,basisContext:f,...g||h.length?{parentRoleEvidence:{...g?{source:g}:{},basisRefs:h}}:{},...d.length?{referenceIssues:d,requestedReferences:{source:{parentWasProvided:!!c.parentNodeId},basisRefs:(c.basisRefs??[]).map((a,b)=>{let{parentNodeId:c,...d}=a;return{index:b,...d,parentWasProvided:!!c}})}}:{}}}},g=a=>{let b=[],c=new Map,e=a=>a.map(a=>{let e=(0,d.Fu)(a),f=c.get(e);if(void 0!==f){if(JSON.stringify(b[f])!==JSON.stringify(a))throw Error("TENDER_SOURCE_CONTEXT_DIRECTORY_COLLISION");return f}let g=b.length;return c.set(e,g),b.push(a),g});return{sourceContextDirectory:b,candidates:a.map(a=>({...a,sourceContexts:e(a.sourceContexts),basisContext:a.basisContext.map(({contexts:a,...b})=>({...b,contextRefs:e(a)}))}))}},h=e.map(f).filter(a=>{let b=a.candidate.item.applicability;return b.issues.length>0||("content"===b.subject.kind?"unresolved"===b.technicalContent:Object.values(b.delivery).some(a=>"unresolved"===a)||"multiple"===b.delivery.stage&&!b.delivery.stages?.length)}),k={version:"tender-applicability-proposal-v1",task:"只补全当前候选缺失/未决的多维适用性提案,不改义务文本或原文、不自审",sourceHash:y.sourceHash,sourceCatalog:y.files.map(a=>({sourceFile:a.filePath,sourceTextHash:a.sourceTextHash,chars:a.text.length})),rules:["sourceDomain只作定位,合同/附录/商务内也可能含技术约束;保留最低配置、合同约定的施工组织内容、深化设计等正例。","报价、费用计取、支付台账与保险费用属于商务交付,不因被提作章节要点就变成技术义务;混合原句保留其中实际技术措施与约束,不能把费用管理一并纳入技术正文。","根据原句、上下文与跨引用分别判断technicalContent、delivery的requirement/location/originalForm/stage/conditions;建议不变必出,施工期成果不移到投标原表。","basisContext提供实际关联原句及父链;sourceCatalog只是全量引用目录,不等于已读全文。跨文件依据用basisRefs逐字引用并用linkedTo解释关联,没读到的关联依据仍填unresolved。","sourceContextDirectory按完整实际命中/邻文/父链身份去重原字;candidate.sourceContexts为其零基索引,basisContext每个原basis索引用contextRefs列全部实际位置,引用关系不合并。parentNodeId只能选对应目录项的parents,不能选scope.source或match原句节点冒充父角色;唯一原句省略,多处按实际父链消歧。","类别或候选主题只是召回标签,按完整quote独立判断,不能因主题与原句不符排除真实最低配置或其他要求,也不能无实际candidateId和已覆盖原句就声称别的候选承接。□/●等选项保持原意,未勾选的资格选项不得硬化。","同一原句可混合技术最低人数/资格与商务具名、证书、社保提交责任;技术资源约束与原表/证明材料交付须分维度解释,不把商务身份材料搬入匿名技术正文,也不因此排除技术配置要求。","保持candidateId/candidateHash,不得提供review/verified;本次只是提案,随后由另一次独立scope审查接受或质疑。"]},n=a=>({...k,...g(a.map(a=>a.payload))}),o=[],p=[];for(let a of h){if(ak(Y,n([a]),O)>c){aq("tender-applicability-proposal",Y,n([a]),O,"单个适用性候选及其完整依据超过输入预算,维持局部待核");continue}p.length&&ak(Y,n([...p,a]),O)>c&&(o.push(p),p=[]),p.push(a)}p.length&&o.push(p);let r=Math.max(1,Math.floor(Number(m.N6?.applicabilityBatches??3)));await (0,q.W)(o,r,async b=>{let c=n(b);try{let a=await au("tender-applicability-proposal",Y,c,O),d=a?.decisions??[];for(let a of b){let b=d.filter(b=>b.candidateId===a.payload.candidateId);1===b.length&&b[0].candidateHash===a.payload.candidateHash&&b[0].applicability&&(a.candidate.item.applicability=ax(a.candidate.kind,{...a.candidate.item,applicability:b[0].applicability}))}}catch{a.signal?.throwIfAborted()}}),await M();let s=e.map(f),t=l(y,s.map(a=>({candidateId:a.payload.candidateId,applicability:a.candidate.item.applicability}))),u={task:"独立复核每一项技术内容、交付文件、阶段与原表形式裁决;不是重新提取或自行补造义务",version:"tender-applicability-review-v3",sourceHash:y.sourceHash,...a.requireContentScope?{contentScopeVersion:"tender-content-scope-v1"}:{},rules:["sourceDomain与父链只说明来源位置,不决定适用性;合同、附录、商务载体内的技术责任与最低配置仍可约束本技术方案。","逐项区分technicalContent和delivery:人员/机械/工期等技术响应,不等于必须在本技术文件提交具名原表;建议不升强制;施工阶段方案不等于投标完整成果。","核原句、上下文、跨文件basisRefs/basisContext及linkedTo,保留限制条件和补疑覆盖;无需“施工组织设计”字眼才认可技术约束。关联原文未完整读取不能宣称语义已核。","sourceContextDirectory只对同一完整实际命中/邻文/父链去重;sourceContexts/contextRefs为其零基索引,全部位置及每原basis身份/关联均保留。不能把未定位源当文件开头;独审证据与范围只填目录from/through,程序按实际位置确定父链,不再提交parentNodeId。referenceIssues不能由独审修写或忽略,未解决只能unmeasured。","类别或候选主题只是召回标签,必须按完整quote逐项核验;不能因主题错配排除真实最低配置,也不能无具体candidateId和实际覆盖原句就臆称其他候选承接。□/●选项保持原意,不把未勾选的B证等资格选项硬化为项目要求。","原句混合技术最低配置/资格与商务具名、证书或社保提交时,逐维度区分技术资源响应和证明材料交付;完整quote不是全文逐字硬化入匿名正文的许可,也不能按商务材料归宿排除技术最低配置。","每项含排除决定都必须独立判断;accepted仅表示当前subject相关解释有原文支持,不能凭quote存在就接受语义。content审technicalContent,独立原表delivery未决不妨碍保留已核技术约束,不能因此伪填not-required;output另审交付强度/文件/原形式/阶段。当前subject所需维度错误或冲突disputed,依据不足或未决unmeasured。","按server给定target审查;回复身份和target由当前请求绑定,不需要抄写。technical-content只裁technicalContent、真实阶段/conditions和解释,不裁未提供的原表强度/位置/原格式;output-delivery只裁完整delivery,不因未提供的technicalContent改判。canonical完整值由server留存,current candidateHash绑定全体原值,本次接受不声称审过另一目标。","报价构成、费用计取范围、计取口径、调差边界、金额、费用保障、费用包含范围、费用综合考虑及费用台账/凭证管理属于商务或合同交付内容,不进入技术标正文:此类义务按technicalContent=not-applicable(content)或delivery.location=business-file(output)裁决。技术正文不得出现金额;费用类管理责任(台账/凭证)同样不在技术响应范围。","不得补填或改写候选维度,不得把disputed或unmeasured自行改成接受;以当前candidateId为decisions对象键,不在值中返回身份字段;evidence只从evidenceSelectionDirectory中选择,不得抄写或改写原文。","evidenceSelectionDirectory只列当前候选已绑定source/basis的冻结原字与可选ref;evidence/contentScope每项只填from(连续片段可加through,含末片段),只能同一候选同一组按顺序选择,整组ref只能单独选。程序按ref恢复原字与位置;不得抄写/改写quote、sourceFile、位置或parentNodeId。选择不等于批准。目录没有可选组时保持disputed/unmeasured,不得从邻文或全源补造。","**headingOnly(结构化标题声明,必须显式返回 true/false,不得省略)**:仅当原句本身只是章节标题/引导句、没有独立技术响应内容、具体技术约束在其后要点中时填 true;只要原句含对象、专业、措施、责任、验收或交付要求,即使以冒号结尾也必须显式填 false。它只供章要点投影识别非技术标题,不是批准,不能替代 disputed/unmeasured 判断。",...a.requireContentScope?["对每个accepted的technical-content结论返回contentScope。required-response/technical-constraint须在technical逐项列出本技术正文必须响应的全部技术要求,每项用from/through从该候选目录选择实际子句并给response;混合原文不得整段复制为技术响应。reference仅为可选参考:有可选技术响应时仍须按目录绑定;只有引导、索引等无独立响应内容时可technical为空,但excluded必须保留当前原句及不形成响应的理由,不能为通过校验编造强制技术要求。excluded逐项保存费用、报价、原表或其他文件责任的实际子句与理由。技术项与排除项不能引用重叠原句;不要删除同句里的施工措施、最低配置、工法或验收要求。not-applicable须technical为空且excluded有据;不能只在reason里写“费用不进入正文”却不给可执行范围。output-delivery不填contentScope。"]:[]]},v=a=>({...a.payload,target:(0,j.Vc)(a.candidate.item.applicability),scope:(0,j.Jw)(a.candidate.item.applicability)}),w=(a,b)=>({...u,...g(b.map(v)),evidenceSelectionDirectory:a.modelDirectory(b.map(a=>a.payload.candidateId))}),x=a=>w(t,a),z=a=>({kind:a.candidate.kind,sourceFile:a.candidate.item.sourceFile,quote:a.candidate.item.quote,..."element"in a.candidate.item?{element:a.candidate.item.element}:{}}),A=[],B=new Set,E=(a,b,c)=>{let d=`${a.candidate.candidateId}:${a.payload.candidateHash}`;b?.status!=="accepted"||b.candidateHash!==a.payload.candidateHash||b.target!==(0,j.Vc)(a.candidate.item.applicability)||c.valid||!c.issues.length||c.issues.some(a=>!a.correctable)||B.has(d)||(B.add(d),A.push({item:a,raw:b,issues:c.issues}))},G=(a,b)=>{let c=[...a.payload.sourceContexts,...a.payload.basisContext.flatMap(a=>a.contexts)],d=a=>{let{parentNodeId:b,...d}=a,e=b?c.flatMap(a=>[a.match,...a.parents]).find(a=>a.nodeId===b):void 0;return{...d,parentWasProvided:!!b,...e?{providedParent:e}:{},...b&&!e?{rejectedParent:"不在本候选实际相关命中/父链目录内,不能作为合法引用"}:{}}};return{...b,evidence:b.evidence.map(d),...b.contentScope?{contentScope:{technical:b.contentScope.technical.map(d),excluded:b.contentScope.excluded.map(d)}}:{}}},H=(b,c,d,e,f,g)=>{let h=b.candidate.item.applicability,i=(0,j.Vc)(h),k=c??{status:"unmeasured",target:i,candidateHash:(0,j.DB)(h),reason:f?`独立适用性审查未完成:${f}`:"独立适用性审查缺少唯一当前候选结论",evidence:[]},l=(0,j.RP)({applicability:h,sourceIndex:y,obligation:z(b),target:i,result:k,requireContentScope:a.requireContentScope}),m=(0,j.Oc)({applicability:h,sourceFiles:a.sourceFiles,sourceIndex:y,obligation:z(b),target:i,inputHash:d,result:k,requireContentScope:a.requireContentScope}),n=aw.get(h);return n&&aw.set(m,n),b.candidate.item.applicability=m,ao.push({candidateId:b.candidate.candidateId,candidateHash:(0,j.DB)(h),operation:e,inputHash:d,...c?{raw:structuredClone(c)}:{},...g?{selection:structuredClone(g)}:{},bindingIssues:l.issues,appliedStatus:m.review.status,...f?{error:f}:{}}),l},I=[],J=[];for(let a of s){let b=x([a]);if(ak(Z,b,N)>c){aq("tender-applicability-review",Z,b,N,"单个适用性候选及其完整依据超过审查输入预算,未派发"),H(a,void 0,(0,d.Fu)(b),u.version,"本候选与完整父链/关联原文超过单次审查输入预算,未截断、未读取,保持局部待核");continue}J.length&&ak(Z,x([...J,a]),N)>c&&(I.push(J),J=[]),J.push(a)}async function K(){let b=l(y,A.map(a=>({candidateId:a.item.payload.candidateId,applicability:a.item.candidate.item.applicability}))),e={...u,version:"tender-applicability-evidence-followup-v4",task:"仅对上次真实独审accepted但证据绑定未通过的当前子集重新独立审查;可自由接受、质疑或保持未测,不修改提案",rules:[...u.rules,"previousIndependentConclusion是原独审原始语义结论与引文,bindingFeedback是服务端确定的绑定失败;上次accepted不是应维持的答案。须重新核当前target并自由返回accepted/disputed/unmeasured,不能为通过程序而洗白解释或换用邻文。","原evidence及contentScope父引用以providedParent节点和parentWasProvided保留;该节点仅是原答复引用事实,并不获得合法父角色。应按当前锚域及实际parents选择证据,不能从providedParent推断其合法。只有本次一次补充审查,依据不足保持unmeasured。"]},h=a=>({...e,...g(a.map(a=>{let b=f(a.item.candidate);return{...v(b),previousIndependentConclusion:G(b,a.raw),bindingFeedback:a.issues}})),evidenceSelectionDirectory:b.modelDirectory(a.map(a=>a.item.payload.candidateId))}),j=[],k=[];for(let a of A.splice(0)){let b=h([a]);if(ak(Z,b,N)>c){let c=aq("tender-applicability-review",Z,b,N,"单个绑定失败候选与完整原结论/相关依据超过补充独审预算,不截断、不派发,保留未测");ao.push({candidateId:a.item.candidate.candidateId,candidateHash:a.item.payload.candidateHash,operation:e.version,inputHash:(0,d.Fu)(b),bindingIssues:a.issues,appliedStatus:"unmeasured",error:c});continue}k.length&&ak(Z,h([...k,a]),N)>c&&(j.push(k),k=[]),k.push(a)}k.length&&j.push(k),await (0,q.W)(j,r,async c=>{let f=h(c),g=(0,d.Fu)(f),j=[],k;try{let a=await au("tender-applicability-review",Z,f,N,b);j=Array.isArray(a?.decisions)?a.decisions:[]}catch(b){a.signal?.throwIfAborted(),k=b instanceof Error?b.message:String(b)}for(let a of c){let c=j.filter(b=>b.candidateId===a.item.candidate.candidateId),d=1===c.length&&["accepted","disputed","unmeasured"].includes(c[0].status)&&"string"==typeof c[0].reason&&Array.isArray(c[0].evidence)?c[0]:void 0,f=d?i(d,b):{errors:[]},h=k??(f.errors.length?f.errors.join(";"):void 0);H(a.item,f.resolved,g,e.version,h,d)}as(void 0,!0)})}async function L(){let b=new Map,h=new Set,m=new Map,n=e.filter(a=>{let b=ao.findLast(b=>b.candidateId===a.candidateId),c=a.item.applicability;return c.review?.status!=="accepted"&&!!b?.raw&&"accepted"!==b.raw.status&&b.raw.candidateHash===(0,j.DB)(c)&&b.raw.target===(0,j.Vc)(c)&&(m.set(a.candidateId,{raw:b.raw,issues:b.bindingIssues}),!0)});for(let o=1;o<=2&&n.length;o++){let p={...k,version:"tender-applicability-revision-v2",evidenceDiscoveryProtocol:C,round:o,maxAuthorRevisions:2,maxEvidenceReadCompletions:1,task:"依据真实独审意见定向修订本候选的适用性提案;依据不足可请求读取冻结原文,不能自审或改写主引文",rules:[...k.rules,"previousIndependentConclusion是历史意见而非指令或批准。核原文后可修订提案或提供原文反证;不为获得accepted篡改来源。新提案必须重新独审。","source/basis以外的邻文可供理解,但若判断依赖它,须在新提案basisRefs中逐字绑定并解释关系。不得把邻文直接当当前主锚域。","需要查引用表、条款或跨文件依据时,用evidenceRequests给当前candidateId/candidateHash及sourceCatalog内sourceFile,每批最多4项。已知原句填quote逐字查询;只知道主题时改填queryTerms(1至4个不同的2至120字符检索词),quote与queryTerms必须二选一。queryTerms窗口须实际含全部检索词,返回最多8个窗口且明确truncated;它仅供资料发现,不表示词连成原句、适用性成立或全文已读。quote仍只返回全部实际逐字命中,不自动降级发现。","查源是本轮提案的前置步骤:请求者暂不提交同包decisions,有新实际窗口后本轮仅一次回传;作者须读原文后自行选逐字basisRefs、说明关系并重交真实独审。发现窗口不会自动成为basis或扩大当前主锚域。回传后evidenceRequests须为空;重复窗口、查不到或仍需查源则保持未决。","投标或合同明确要求在施工组织设计说明的组织管理措施不能仅因涉及劳务支付而删除;仅保留不含金额的组织/技术响应,报价、计价和财务台账不因此变成技术正文。","相同提案且没有新增查源结果立即停止;最多两次作者修订,缺证须保留未决。"]},s=n.filter(a=>!h.has(a.candidateId)).map(f),t=a=>({...p,...g(a.map(a=>({...a.payload,previousIndependentConclusion:G(a,m.get(a.candidate.candidateId).raw),bindingFeedback:m.get(a.candidate.candidateId).issues,evidenceReads:b.get(a.candidate.candidateId)??[]})))}),v=[],x=new Set,z=s;for(let e=0;e<=1&&z.length;e++){let g=a=>({...t(a),evidenceReadCompletion:1===e}),i=[],k=[];for(let a of z){if(ak(Y,g([a]),P)>c){h.add(a.candidate.candidateId),ap.push({candidateId:a.candidate.candidateId,round:o,readTurn:e,semanticRevisionSubmitted:!1,status:"over-budget-not-dispatched"});continue}k.length&&ak(Y,g([...k,a]),P)>c&&(i.push(k),k=[]),k.push(a)}k.length&&i.push(k);let l=[];await (0,q.W)(i,r,async c=>{let i,k;try{i=await au("tender-applicability-proposal",Y,g(c),P)}catch(b){a.signal?.throwIfAborted(),k=b instanceof Error?b.message:String(b)}for(let a of c){let c=a.candidate.candidateId,g=a.payload.candidateHash;if(!i){h.add(c),ap.push({candidateId:c,round:o,readTurn:e,beforeHash:g,afterHash:g,semanticRevisionSubmitted:!1,status:k?"author-call-failed-stopped":"author-no-reply-stopped",...k?{error:k}:{},evidenceReads:structuredClone(b.get(c)??[])});continue}let m=(i?.evidenceRequests??[]).slice(0,4).filter(a=>a.candidateId===c&&a.candidateHash===g),n=(i?.decisions??[]).filter(a=>a.candidateId===c&&a.candidateHash===g),p=b.get(c)??[];if(m.length){let f=!1;if(0===e)for(let a of m){let b=(0,d.Fu)([y.sourceHash,a.sourceFile,a.queryTerms?["discovery",a.queryTerms.map(D).sort()]:["exact",a.quote]]);if(p.some(a=>a.requestKey===b))continue;let c=a.queryTerms?function(a,b,c){let d={version:C,sourceHash:a.sourceHash,queryTerms:[...c],status:"not-found",contexts:[],matchingWindows:0,truncated:!1,windowLimit:8,radius:1200,qualification:"discovery-only-not-bound-evidence"};if(!F(c)||!a.files.some(a=>a.filePath===b))return{...d,status:"invalid-request"};let e=c.map(c=>({term:c,contexts:(0,j.r8)(a,b,c,1200)}));if(e.some(a=>!a.contexts.length))return d;let f=[...e].sort((a,b)=>a.contexts.length-b.contexts.length||a.term.localeCompare(b.term))[0],g=new Set;for(let a of f.contexts){let c=e.map(b=>({term:b.term,context:b.contexts.find(b=>b.match.start>=a.start&&b.match.end<=a.end)}));if(c.some(a=>!a.context)||g.has(`${a.start}:${a.end}`)||(g.add(`${a.start}:${a.end}`),d.matchingWindows++,8===d.contexts.length))continue;let{start:f,end:h,quote:i,sourceTextHash:j}=a;d.contexts.push({sourceFile:b,sourceTextHash:j,start:f,end:h,quote:i,termMatches:c.map(a=>({term:a.term,match:a.context.match,parents:a.context.parents}))})}return d.truncated=d.matchingWindows>d.contexts.length,d.status=d.contexts.length?"discovery-windows-only":"not-found",d}(y,a.sourceFile,a.queryTerms):void 0,e=c?.contexts??(0,j.r8)(y,a.sourceFile,a.quote,1200),g=e.some(a=>!p.some(b=>b.contexts.some(b=>b.sourceFile===a.sourceFile&&b.sourceTextHash===a.sourceTextHash&&b.start===a.start&&b.end===a.end&&b.quote===a.quote)));p.push({...c??{query:a.quote,status:e.length?"matched-windows-only":"not-found",contexts:e},sourceFile:a.sourceFile,requestKey:b}),f||=g}b.set(c,p),f?l.push(a):h.add(c),ap.push({candidateId:c,round:o,readTurn:e,beforeHash:g,afterHash:g,semanticRevisionSubmitted:!1,status:f?"evidence-read-awaiting-author":1===e?"evidence-read-limit-stopped":"evidence-read-no-progress-stopped",evidenceRequests:m,deferredDecisions:n,evidenceReads:structuredClone(p)});continue}let q=1===n.length&&n[0].applicability?ax(a.candidate.kind,{...a.candidate.item,applicability:n[0].applicability}):void 0,r=q?(0,j.DB)(q):g;q&&r!==g&&(a.candidate.item.applicability=q,q.issues.length?x.add(c):v.push(f(a.candidate))),r===g&&h.add(c),ap.push({candidateId:c,round:o,readTurn:e,beforeHash:g,afterHash:r,semanticRevisionSubmitted:r!==g,status:r!==g?"revised-awaiting-independent-review":"no-progress-stopped",...q?.issues.length?{validationIssues:q.issues}:{},evidenceReads:structuredClone(p)})}}),as(void 0,!0),z=s.filter(a=>l.includes(a))}let A=[],B=[],I=l(y,v.map(a=>({candidateId:a.payload.candidateId,applicability:a.candidate.item.applicability}))),J=a=>({...w(I,a),version:"tender-applicability-revision-review-v2",rules:[...u.rules,"本轮是作者按历史反馈提交的新提案,只依据当前候选与实际原文独审,不沿用旧接受或质疑。明确要求施组说明的非金额组织管理措施须按原文判断,不按费用类标签整体删除。"]});for(let a of v){if(ak(Z,J([a]),N)>c){H(a,void 0,(0,d.Fu)(J([a])),"tender-applicability-revision-review-v2","完整修订依据超过审查预算,未派发"),h.add(a.candidate.candidateId);continue}B.length&&ak(Z,J([...B,a]),N)>c&&(A.push(B),B=[]),B.push(a)}for(let b of(B.length&&A.push(B),await (0,q.W)(A,r,async b=>{let c,e=J(b);try{c=await au("tender-applicability-review",Z,e,N,I)}catch{a.signal?.throwIfAborted()}for(let a of b){let b=(c?.decisions??[]).filter(b=>b.candidateId===a.candidate.candidateId),f=1===b.length&&["accepted","disputed","unmeasured"].includes(b[0].status)&&"string"==typeof b[0].reason&&Array.isArray(b[0].evidence)?b[0]:void 0,g=f?i(f,I):{errors:[]},h=H(a,g.resolved,(0,d.Fu)(e),"tender-applicability-revision-review-v2",g.errors.length?g.errors.join(";"):void 0,f);E(a,g.resolved,h)}}),as(void 0,!0),await K(),v)){let a=b.candidate.candidateId,c=b.candidate.item.applicability,d=ao.findLast(b=>b.candidateId===a);c.review?.status!=="accepted"&&d?.raw&&"accepted"!==d.raw.status&&d.raw.candidateHash===b.payload.candidateHash&&d.raw.target===(0,j.Vc)(c)?(m.set(a,{raw:d.raw,issues:d.bindingIssues}),x.add(a)):x.delete(a)}n=e.filter(a=>x.has(a.candidateId)&&!h.has(a.candidateId)&&a.item.applicability?.review?.status!=="accepted")}}async function M(){let b=e.map(f).filter(a=>a.payload.referenceIssues?.length),d={version:"tender-applicability-reference-repair-v1",sourceHash:y.sourceHash,task:"仅纠正当前候选确定的引用绑定错误,不重判适用性,不独审,不增删依据",rules:["仅返回给定candidateId/candidateHash的source父引用及按原index定位的basisRefs补丁;technicalContent/delivery/reason及basis的relation/explanation已冻结,不能修改。","source:{}表示省略父引用;唯一原句应省略。sourceContexts/contextRefs是sourceContextDirectory零基索引;目录只去重同一实际命中/邻文/父链,不合并basis身份或关联。多处原句仅按对应目录项parents消歧,match/原句节点不能冒充父角色。所有引用使用当前目录ref。","逐项按referenceIssues纠正非法parent、未定位引文、重复refId或悬空linkedTo。basisRefs索引来自实际原提案,不能增删或合并;未列出的索引保持原值。","引文只可保持原句或修到本次实际相关邻文内的逐字原句;不能凭目录补造未读新依据。linkedTo只能填source或本候选真实refId,不能填表名、主题或义务名。","sourceContexts和basisContext保留全部实际匹配位置,不按第一处猜测;仍无唯一依据时不要编造,服务端保留pending。每候选只有本次有界补丁,随后仍由独立审查判断业务解释。"]},h=a=>({...d,...g(a.map(a=>{let b=ag(a.payload.sourceContexts),c=a.payload.basisContext.flatMap(a=>{let b=ag(a.contexts);return b?[{index:a.index,...b}]:[]});return{candidateId:a.payload.candidateId,candidateHash:a.payload.candidateHash,source:{sourceFile:a.candidate.item.sourceFile,quote:a.candidate.item.quote},references:a.payload.requestedReferences,referenceIssues:a.payload.referenceIssues,sourceContexts:a.payload.sourceContexts,basisContext:a.payload.basisContext,...b||c.length?{parentRoleEvidence:{...b?{source:b}:{},basisRefs:c}}:{}}}))}),i=[],k=[],l=a=>({candidateId:a.payload.candidateId,beforeHash:a.payload.candidateHash,beforeRequested:structuredClone(aw.get(a.candidate.item.applicability)),issuesBefore:a.payload.referenceIssues.map(a=>a.message)});for(let a of b){if(ak(Y,h([a]),Q)>c){let b=aq("tender-applicability-proposal",Y,h([a]),Q,"单候选全部引用错误与实际邻文超过局部纠正预算,未截断/未派发,保留待核");an.push({...l(a),status:"over-budget",error:b});continue}k.length&&ak(Y,h([...k,a]),Q)>c&&(i.push(k),k=[]),k.push(a)}for(let b of(k.length&&i.push(k),i)){let c,d=[];try{let a=await au("tender-applicability-proposal",Y,h(b),Q);d=a?.repairs??[]}catch(b){a.signal?.throwIfAborted(),c=b instanceof Error?b.message:String(b)}for(let a of b){let b=l(a),e=d.filter(a=>a.candidateId===b.candidateId&&a.candidateHash===b.beforeHash);if(1!==e.length){an.push({...b,status:c?"failed":"not-returned",...c?{error:c}:{}});continue}try{let{source:c,basisRefs:d}=e[0],f=(0,j.D)({index:y,sourceFile:a.candidate.item.sourceFile,quote:a.candidate.item.quote,requested:b.beforeRequested,patch:{source:c,basisRefs:d}}),g=ax(a.candidate.kind,{...a.candidate.item,applicability:f});a.candidate.item.applicability=g;let h=(0,j.dY)({index:y,sourceFile:a.candidate.item.sourceFile,quote:a.candidate.item.quote,requested:f}).map(a=>a.message);an.push({...b,afterHash:(0,j.DB)(g),afterRequested:f,issuesAfter:h,status:h.length<b.issuesBefore.length?"repaired":"no-progress"})}catch(a){an.push({...b,status:"failed",error:a instanceof Error?a.message:String(a)})}}}}J.length&&I.push(J),await (0,q.W)(I,r,async b=>{let c=x(b),e=(0,d.Fu)(c),f=[],g,h=e;try{let a=await au("tender-applicability-review",Z,c,N,t);f=Array.isArray(a?.decisions)?a.decisions:[]}catch(b){if(a.signal?.throwIfAborted(),(g=b instanceof Error?b.message:String(b))&&/TENDER_REVIEW_WIRE_FOREIGN_REFERENCE|TENDER_EVIDENCE_SELECTION_/u.test(g)){let b=Array.isArray(c.rules)?c.rules:[],e={...c,rules:[...b,`上次回复因引用协议被拒收:${g}。只能使用当前候选 evidenceSelectionDirectory 中的合法短 ref 重出完整 decisions;不得复用其他候选的 ref,不得改写 quote/sourceFile/位置。`]};try{let a=await au("tender-applicability-review",Z,e,N,t),b=Array.isArray(a?.decisions)?a.decisions:[];b.length&&(f=b,g=void 0,h=(0,d.Fu)(e))}catch(b){a.signal?.throwIfAborted(),g=`${g};引用纠正重审仍失败:${b instanceof Error?b.message:String(b)}`}}}for(let a of b){let b=f.filter(b=>b.candidateId===a.payload.candidateId),c=1===b.length&&["accepted","disputed","unmeasured"].includes(b[0].status)&&"string"==typeof b[0].reason&&Array.isArray(b[0].evidence)?b[0]:void 0,d=c?i(c,t):{errors:[]},e=d.resolved,j=g??(d.errors.length?d.errors.join(";"):void 0),k=H(a,e,h,u.version,j,c);E(a,e,k)}}),as(void 0,!0),await K(),a.requireContentScope&&await L()}}},62369:(a,b,c)=>{c.d(b,{W:()=>d});async function d(a,b,c){let d;if(!Number.isSafeInteger(b)||b<1)throw Error("CONSTRUCTION_PARALLEL_LIMIT_INVALID");let e=Array(a.length),f=0,g=!1,h=Array.from({length:Math.min(b,a.length)},async()=>{for(;;){if(g)return;let b=f;if(f+=1,b>=a.length)return;try{e[b]=await c(a[b],b)}catch(a){g=!0,d=a;return}}});if(await Promise.all(h),g)throw d;return e}},68011:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(34933);let j=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function k(a,b,c,d){let f=(0,i.x)(b),k=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return j({version:c,inputKey:a,model:f})};return{load(b){let d=k(b),f=g().join(a,`${d}.json`);if(!e().existsSync(f))return;let h=JSON.parse(e().readFileSync(f,"utf8"));if(h.version!==c||h.cacheKey!==d||j(h.response)!==h.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:h.response,receipt:{cacheKey:d,responseSha256:h.responseSha256,...h.originRunId?{originRunId:h.originRunId}:{}}}},save(b,f){let i=k(b),l=g().join(a,`${i}.json`);e().mkdirSync(a,{recursive:!0});let m=`${l}.${process.pid}.${(0,h.randomUUID)()}.tmp`;try{e().writeFileSync(m,JSON.stringify({version:c,cacheKey:i,responseSha256:j(f),response:f,...d?{originRunId:d}:{}})),e().renameSync(m,l)}finally{e().rmSync(m,{force:!0})}}}}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6822,exports.ids=[6822],exports.modules={22488:(a,b,c)=>{c.d(b,{F:()=>f,Ie:()=>j,Oz:()=>h,RW:()=>m,SS:()=>e,eT:()=>d,m6:()=>i});let d={"Content-Type":"application/json"};async function e(a,b){try{let c,d=await fetch(a,b),e=await d.text();try{c=e?JSON.parse(e):void 0}catch{c=void 0}if(!d.ok){let a=c??{};return{ok:!1,status:d.status,message:a.error??`HTTP ${d.status}`,issues:Array.isArray(a.errors)?a.errors:[]}}return{ok:!0,data:c}}catch(a){return{ok:!1,status:0,message:a instanceof Error?a.message:"网络请求失败",issues:[]}}}let f="内置技能只读,随应用版本更新。可新建用户技能进行配置。";function g(a){return[...new Set((a??[]).map(a=>a.trim()).filter(a=>a.length>0))]}function h(a){return"string"==typeof a?a:a.phrase}function i(a){return{id:a.id,enabled:a.enabled,match:{chapterDomain:a.match.chapterDomain,projectTypes:[...a.match.projectTypes],sectionKeywords:[...a.match.sectionKeywords],...a.match.sectionRegex?{sectionRegex:a.match.sectionRegex}:{}},requires:a.requires.map(a=>({...a})),structure:a.structure.map(a=>({title:a.title,required:[...a.required??[]]})),forbidden:a.forbidden.map(h),knowledge:a.knowledge.map(a=>({kind:a.kind,...a.ids?{ids:[...a.ids]}:{},...a.note?{note:a.note}:{}})),acceptance:a.acceptance.map(a=>({kind:"llmChecklist",checklistItems:[...a.items]})),...void 0!==a.outputTitle?{outputTitle:a.outputTitle}:{},...a.chapterChecklist?{chapterChecklist:{...a.chapterChecklist,...a.chapterChecklist.sections?{sections:[...a.chapterChecklist.sections]}:{}}}:{}}}function j(){return{id:`skill-${Date.now()}`,enabled:!0,match:{projectTypes:[],sectionKeywords:[]},requires:[{source:"boq",required:!1}],structure:[{}],forbidden:[],knowledge:[],acceptance:[{kind:"llmChecklist",checklistItems:[]}]}}function k(a){return(a.ids??[]).length>0}function l(a){return(a.checklistItems??[]).length>0}function m(a,b,c){let d={chapterDomain:a.match?.chapterDomain,projectTypes:[...a.match?.projectTypes??[]],sectionKeywords:g(a.match?.sectionKeywords),...a.match?.sectionRegex?.trim()?{sectionRegex:a.match.sectionRegex.trim()}:{}},e=(a.requires??[]).filter(a=>(a.key??"").trim().length>0).map(a=>({key:(a.key??"").trim(),source:a.source,required:!0===a.required})),f=(a.structure??[]).filter(a=>(a.title??"").trim().length>0).map(a=>({title:(a.title??"").trim(),required:g(a.required)})),h=(a.knowledge??[]).filter(k).map(a=>({kind:"processCard",ids:g(a.ids),...a.note?.trim()?{note:a.note.trim()}:{}})),i=(a.acceptance??[]).filter(l).map(a=>({kind:"llmChecklist",items:g(a.checklistItems),nonDeterministic:!0}));return{id:a.id.trim(),version:b,source:"user",enabled:!1!==a.enabled,match:d,requires:e,structure:f,forbidden:g(a.forbidden),knowledge:h,acceptance:i,...function(a){let b=a.outputTitle?.trim()??"",c=a.chapterChecklist,d={sections:g(c?.sections),queries:g(c?.queries),requiredFacts:g(c?.requiredFacts),tableSections:g(c?.tableSections),tableRequirements:g(c?.tableRequirements),pinnedEvidenceFilePaths:g(c?.pinnedEvidenceFilePaths)},e=!!c?.purpose?.trim()||Object.values(d).some(a=>a.length>0);return{...b?{outputTitle:b}:{},...e?{chapterChecklist:{...c?.purpose?.trim()?{purpose:c.purpose.trim()}:{},...Object.fromEntries(Object.entries(d).filter(([,a])=>a.length>0))}}:{}}}(a),...c?{examples:c}:{}}}},35365:(a,b,c)=>{c.d(b,{PZ:()=>h,RU:()=>i,jT:()=>k,n$:()=>j});var d=c(8732),e=c(60056),f=c(79270);let{Text:g}=e.o5;function h({title:a,description:b,hint:c,className:f,children:g}){return(0,d.jsxs)(e.Zp,{className:`rounded-2xl border-[var(--borderColor)] ${f??""}`,title:(0,d.jsx)("span",{className:"font-semibold",children:a}),extra:c?(0,d.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:c}):null,children:[b&&(0,d.jsx)("p",{className:"text-xs text-[var(--colorTextSecondary)] mb-4 mt-0 leading-relaxed",children:b}),g]})}function i({label:a,children:b,empty:c}){let e=null==b||!1===b;return(0,d.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-[132px_minmax(0,1fr)] gap-x-4 gap-y-1 py-2 border-b border-[var(--colorBorderSecondary)] last:border-0",children:[(0,d.jsx)("div",{className:"text-xs text-[var(--colorTextTertiary)] sm:pt-1",children:a}),(0,d.jsx)("div",{className:"min-w-0 text-sm leading-6",children:e?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:c??"未声明"}):b})]})}function j({items:a,empty:b}){return 0===a.length?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:b??"未声明"}):(0,d.jsx)("div",{className:"tagWrap flex flex-wrap gap-1 min-w-0",children:a.map((a,b)=>(0,d.jsx)("span",{className:"min-w-0",children:a},b))})}function k({children:a,columns:b="md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]",onRemove:c,removeLabel:g="删除这一行"}){return(0,d.jsxs)("div",{className:"flex items-start gap-3 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3 transition-colors hover:bg-[var(--colorBgHover)]",children:[(0,d.jsx)("div",{className:`min-w-0 flex-1 grid grid-cols-1 ${b} gap-x-3 gap-y-1 items-start`,children:a}),(0,d.jsx)(e.$x,{size:0,className:"self-center",children:(0,d.jsx)(e.$n,{type:"text",danger:!0,size:"small",icon:(0,d.jsx)(f.DeleteOutlined,{}),"aria-label":g,title:g,onClick:c})})]})}},46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(54318),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>k});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=c(35365),j=a([h]);h=(j.then?(await j)():j)[0];let{Text:l}=f.o5;function k({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),j=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),k=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsxs)(f.lV,{form:a,layout:"vertical",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4 items-start",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)(i.PZ,{title:"基本信息",description:"技能的身份与启停;ID 是落盘文件名,新建后不再改。",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",extra:"停用后本条技能不参与本次生成的技能匹配。",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"启用",unCheckedChildren:"停用"})})]}),(0,e.jsxs)(i.PZ,{title:"匹配条件",description:"决定这条技能在什么章域、什么工程类型、什么样的章节标题下被选用。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"本章所属的专业内容范围。",children:(0,e.jsx)(f.l6,{options:j,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:k,placeholder:"全类型"})})]}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(i.PZ,{title:"禁写项",description:"这条技能明确要求避免的内容或表达;没有就留空。",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填错一条会挡住真实存在的内容,宁可留空。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(i.PZ,{title:"相关专业主题",description:"本条技能提供的专业内容主题;主题下的小标签写这一主题要覆盖的工序、条件、控制点或验收要求。",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"按实际对象选用",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"工序、适用条件、控制要点或验收要求"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})})]}),(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsx)(i.PZ,{title:"所需项目资料",description:"本条技能要求本次任务先查证的项目事实(事实键来自服务端闭集);标为必需而查不到时会被上游拦下。",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_auto]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsxs)(i.PZ,{title:"文档业务提示",description:"给本次规划的建议:文档名称、本章职责与资料检索提示。实际章节职责由本次规划确定,专业主题在上面的卡片里单独填写。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",label:"文档名称建议",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单"})})]}),(0,e.jsxs)("div",{className:"mt-1 mb-3 border-t border-[var(--colorBorderSecondary)] pt-3",children:[(0,e.jsx)(l,{strong:!0,className:"text-sm",children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"章级候选内容与资料检索提示;实际职责由本次规划确定。"})]}),(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3",children:[(0,e.jsx)("div",{className:"text-xs font-semibold mb-1",children:"不在这里配置的事项"}),(0,e.jsx)("div",{className:"text-xs text-[var(--colorTextSecondary)]",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})]})]}),(0,e.jsx)(i.PZ,{title:"可加载工艺知识",description:"选用后,这些工艺卡会作为专业参考进入本次写作;引用是否存在由保存前的校验核对。",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],className:"!mb-0 mt-2",children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选):什么情况下加载这些工艺卡"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsx)(i.PZ,{title:"专业写作核对提示",description:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。",children:(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsx)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"例如:保留实际检验对象、触发条件和转序要求"})})},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})})]})]}),(0,e.jsx)("div",{className:"mt-4",children:(0,e.jsx)(i.PZ,{title:"资料与采用边界",description:"以下边界由软件统一执行,技能不能扩大或豁免。",children:(0,e.jsx)("div",{className:"flex flex-col gap-2",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-baseline gap-1 sm:gap-2",children:[(0,e.jsx)(l,{className:"text-sm shrink-0",children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})})})]})}d()}catch(a){d(a)}})},54318:(a,b,c)=>{c.d(b,{k:()=>h});var d=c(8732),e=c(9328),f=c.n(e),g=c(68329);function h({backHref:a,backLabel:b,title:c,description:e,extra:h}){return(0,d.jsx)("div",{className:"mb-6 bg-[var(--colorBgContainer)] rounded-2xl overflow-hidden border border-[var(--borderColor)] p-6",children:(0,d.jsxs)("div",{className:"flex flex-col md:flex-row md:items-end justify-between gap-4 md:gap-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,d.jsxs)(f(),{href:a,prefetch:!1,className:"detailBack",children:[(0,d.jsx)(g.nkM,{size:16,strokeWidth:2,"aria-hidden":!0}),(0,d.jsx)("span",{children:b})]}),(0,d.jsxs)("div",{className:"min-w-0 space-y-1",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-[var(--colorText)] m-0 truncate",children:c}),e?(0,d.jsx)("p",{className:"text-sm text-[var(--colorTextSecondary)] m-0 break-all",children:e}):null]})]}),h?(0,d.jsx)("div",{className:"shrink-0 flex items-center gap-2",children:h}):null]})})}},60790:(a,b,c)=>{c.d(b,{G:()=>f});var d=c(82015),e=c(22488);function f(){let[a,b]=(0,d.useState)([]),[c,f]=(0,d.useState)(),[g,h]=(0,d.useState)([]),[i,j]=(0,d.useState)(!0),[k,l]=(0,d.useState)("");return{skills:a,options:c,invalid:g,loading:i,failed:k,reload:(0,d.useCallback)(async()=>{j(!0);let a=await (0,e.SS)("/api/skills");a.ok?(b(a.data.skills),f(a.data.options),h(a.data.invalid??[]),l("")):l(a.message),j(!1)},[]),applySkills:b}}}};
|
|
1
|
+
"use strict";exports.id=6822,exports.ids=[6822],exports.modules={22488:(a,b,c)=>{c.d(b,{F:()=>f,Ie:()=>j,Oz:()=>h,RW:()=>m,SS:()=>e,eT:()=>d,m6:()=>i});let d={"Content-Type":"application/json"};async function e(a,b){try{let c,d=await fetch(a,b),e=await d.text();try{c=e?JSON.parse(e):void 0}catch{c=void 0}if(!d.ok){let a=c??{};return{ok:!1,status:d.status,message:a.error??`HTTP ${d.status}`,issues:Array.isArray(a.errors)?a.errors:[]}}return{ok:!0,data:c}}catch(a){return{ok:!1,status:0,message:a instanceof Error?a.message:"网络请求失败",issues:[]}}}let f="内置技能只读,随应用版本更新。可新建用户技能进行配置。";function g(a){return[...new Set((a??[]).map(a=>a.trim()).filter(a=>a.length>0))]}function h(a){return"string"==typeof a?a:a.phrase}function i(a){return{id:a.id,enabled:a.enabled,match:{chapterDomain:a.match.chapterDomain,projectTypes:[...a.match.projectTypes],sectionKeywords:[...a.match.sectionKeywords],...a.match.sectionRegex?{sectionRegex:a.match.sectionRegex}:{}},requires:a.requires.map(a=>({...a})),structure:a.structure.map(a=>({title:a.title,required:[...a.required??[]]})),forbidden:a.forbidden.map(h),knowledge:a.knowledge.map(a=>({kind:a.kind,...a.ids?{ids:[...a.ids]}:{},...a.note?{note:a.note}:{}})),acceptance:a.acceptance.map(a=>({kind:"llmChecklist",checklistItems:[...a.items]})),...void 0!==a.outputTitle?{outputTitle:a.outputTitle}:{},...a.capability?{capability:structuredClone(a.capability)}:{},...a.chapterChecklist?{chapterChecklist:{...a.chapterChecklist,...a.chapterChecklist.sections?{sections:[...a.chapterChecklist.sections]}:{}}}:{}}}function j(){return{id:`skill-${Date.now()}`,enabled:!0,match:{projectTypes:[],sectionKeywords:[]},requires:[{source:"boq",required:!1}],structure:[{}],forbidden:[],knowledge:[],acceptance:[{kind:"llmChecklist",checklistItems:[]}]}}function k(a){return(a.ids??[]).length>0}function l(a){return(a.checklistItems??[]).length>0}function m(a,b,c){let d={chapterDomain:a.match?.chapterDomain,projectTypes:[...a.match?.projectTypes??[]],sectionKeywords:g(a.match?.sectionKeywords),...a.match?.sectionRegex?.trim()?{sectionRegex:a.match.sectionRegex.trim()}:{}},e=(a.requires??[]).filter(a=>(a.key??"").trim().length>0).map(a=>({key:(a.key??"").trim(),source:a.source,required:!0===a.required})),f=(a.structure??[]).filter(a=>(a.title??"").trim().length>0).map(a=>({title:(a.title??"").trim(),required:g(a.required)})),h=(a.knowledge??[]).filter(k).map(a=>({kind:"processCard",ids:g(a.ids),...a.note?.trim()?{note:a.note.trim()}:{}})),i=(a.acceptance??[]).filter(l).map(a=>({kind:"llmChecklist",items:g(a.checklistItems),nonDeterministic:!0}));return{id:a.id.trim(),version:b,source:"user",enabled:!1!==a.enabled,match:d,requires:e,structure:f,forbidden:g(a.forbidden),knowledge:h,acceptance:i,...function(a){let b=a.outputTitle?.trim()??"",c=a.chapterChecklist,d={sections:g(c?.sections),queries:g(c?.queries),requiredFacts:g(c?.requiredFacts),tableSections:g(c?.tableSections),tableRequirements:g(c?.tableRequirements),pinnedEvidenceFilePaths:g(c?.pinnedEvidenceFilePaths)},e=!!c?.purpose?.trim()||Object.values(d).some(a=>a.length>0);return{...b?{outputTitle:b}:{},...e?{chapterChecklist:{...c?.purpose?.trim()?{purpose:c.purpose.trim()}:{},...Object.fromEntries(Object.entries(d).filter(([,a])=>a.length>0))}}:{}}}(a),...c?{examples:c}:{},...a.capability?{capability:structuredClone(a.capability)}:{}}}},35365:(a,b,c)=>{c.d(b,{PZ:()=>h,RU:()=>i,jT:()=>k,n$:()=>j});var d=c(8732),e=c(60056),f=c(79270);let{Text:g}=e.o5;function h({title:a,description:b,hint:c,className:f,children:g}){return(0,d.jsxs)(e.Zp,{className:`rounded-2xl border-[var(--borderColor)] ${f??""}`,title:(0,d.jsx)("span",{className:"font-semibold",children:a}),extra:c?(0,d.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:c}):null,children:[b&&(0,d.jsx)("p",{className:"text-xs text-[var(--colorTextSecondary)] mb-4 mt-0 leading-relaxed",children:b}),g]})}function i({label:a,children:b,empty:c}){let e=null==b||!1===b;return(0,d.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-[132px_minmax(0,1fr)] gap-x-4 gap-y-1 py-2 border-b border-[var(--colorBorderSecondary)] last:border-0",children:[(0,d.jsx)("div",{className:"text-xs text-[var(--colorTextTertiary)] sm:pt-1",children:a}),(0,d.jsx)("div",{className:"min-w-0 text-sm leading-6",children:e?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:c??"未声明"}):b})]})}function j({items:a,empty:b}){return 0===a.length?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:b??"未声明"}):(0,d.jsx)("div",{className:"tagWrap flex flex-wrap gap-1 min-w-0",children:a.map((a,b)=>(0,d.jsx)("span",{className:"min-w-0",children:a},b))})}function k({children:a,columns:b="md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]",onRemove:c,removeLabel:g="删除这一行"}){return(0,d.jsxs)("div",{className:"flex items-start gap-3 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3 transition-colors hover:bg-[var(--colorBgHover)]",children:[(0,d.jsx)("div",{className:`min-w-0 flex-1 grid grid-cols-1 ${b} gap-x-3 gap-y-1 items-start`,children:a}),(0,d.jsx)(e.$x,{size:0,className:"self-center",children:(0,d.jsx)(e.$n,{type:"text",danger:!0,size:"small",icon:(0,d.jsx)(f.DeleteOutlined,{}),"aria-label":g,title:g,onClick:c})})]})}},46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(54318),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>k});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=c(35365),j=a([h]);h=(j.then?(await j)():j)[0];let{Text:l}=f.o5;function k({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),j=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),k=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsxs)(f.lV,{form:a,layout:"vertical",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4 items-start",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)(i.PZ,{title:"基本信息",description:"技能的身份与启停;ID 是落盘文件名,新建后不再改。",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",extra:"停用后本条技能不参与本次生成的技能匹配。",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"启用",unCheckedChildren:"停用"})})]}),(0,e.jsxs)(i.PZ,{title:"匹配条件",description:"决定这条技能在什么章域、什么工程类型、什么样的章节标题下被选用。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"本章所属的专业内容范围。",children:(0,e.jsx)(f.l6,{options:j,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:k,placeholder:"全类型"})})]}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(i.PZ,{title:"禁写项",description:"这条技能明确要求避免的内容或表达;没有就留空。",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填错一条会挡住真实存在的内容,宁可留空。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(i.PZ,{title:"相关专业主题",description:"本条技能提供的专业内容主题;主题下的小标签写这一主题要覆盖的工序、条件、控制点或验收要求。",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"按实际对象选用",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"工序、适用条件、控制要点或验收要求"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})})]}),(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsx)(i.PZ,{title:"所需项目资料",description:"本条技能要求本次任务先查证的项目事实(事实键来自服务端闭集);标为必需而查不到时会被上游拦下。",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_auto]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsxs)(i.PZ,{title:"文档业务提示",description:"给本次规划的建议:文档名称、本章职责与资料检索提示。实际章节职责由本次规划确定,专业主题在上面的卡片里单独填写。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",label:"文档名称建议",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单"})})]}),(0,e.jsxs)("div",{className:"mt-1 mb-3 border-t border-[var(--colorBorderSecondary)] pt-3",children:[(0,e.jsx)(l,{strong:!0,className:"text-sm",children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"章级候选内容与资料检索提示;实际职责由本次规划确定。"})]}),(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3",children:[(0,e.jsx)("div",{className:"text-xs font-semibold mb-1",children:"不在这里配置的事项"}),(0,e.jsx)("div",{className:"text-xs text-[var(--colorTextSecondary)]",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})]})]}),(0,e.jsx)(i.PZ,{title:"可加载工艺知识",description:"选用后,这些工艺卡会作为专业参考进入本次写作;引用是否存在由保存前的校验核对。",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],className:"!mb-0 mt-2",children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选):什么情况下加载这些工艺卡"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsx)(i.PZ,{title:"专业写作核对提示",description:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。",children:(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsx)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"例如:保留实际检验对象、触发条件和转序要求"})})},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})})]})]}),(0,e.jsx)("div",{className:"mt-4",children:(0,e.jsx)(i.PZ,{title:"资料与采用边界",description:"以下边界由软件统一执行,技能不能扩大或豁免。",children:(0,e.jsx)("div",{className:"flex flex-col gap-2",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-baseline gap-1 sm:gap-2",children:[(0,e.jsx)(l,{className:"text-sm shrink-0",children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})})})]})}d()}catch(a){d(a)}})},54318:(a,b,c)=>{c.d(b,{k:()=>h});var d=c(8732),e=c(9328),f=c.n(e),g=c(68329);function h({backHref:a,backLabel:b,title:c,description:e,extra:h}){return(0,d.jsx)("div",{className:"mb-6 bg-[var(--colorBgContainer)] rounded-2xl overflow-hidden border border-[var(--borderColor)] p-6",children:(0,d.jsxs)("div",{className:"flex flex-col md:flex-row md:items-end justify-between gap-4 md:gap-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,d.jsxs)(f(),{href:a,prefetch:!1,className:"detailBack",children:[(0,d.jsx)(g.nkM,{size:16,strokeWidth:2,"aria-hidden":!0}),(0,d.jsx)("span",{children:b})]}),(0,d.jsxs)("div",{className:"min-w-0 space-y-1",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-[var(--colorText)] m-0 truncate",children:c}),e?(0,d.jsx)("p",{className:"text-sm text-[var(--colorTextSecondary)] m-0 break-all",children:e}):null]})]}),h?(0,d.jsx)("div",{className:"shrink-0 flex items-center gap-2",children:h}):null]})})}},60790:(a,b,c)=>{c.d(b,{G:()=>f});var d=c(82015),e=c(22488);function f(){let[a,b]=(0,d.useState)([]),[c,f]=(0,d.useState)(),[g,h]=(0,d.useState)([]),[i,j]=(0,d.useState)(!0),[k,l]=(0,d.useState)("");return{skills:a,options:c,invalid:g,loading:i,failed:k,reload:(0,d.useCallback)(async()=>{j(!0);let a=await (0,e.SS)("/api/skills");a.ok?(b(a.data.skills),f(a.data.options),h(a.data.invalid??[]),l("")):l(a.message),j(!1)},[]),applySkills:b}}}};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";exports.id=702,exports.ids=[702],exports.modules={60702:(a,b,c)=>{c.r(b),c.d(b,{TENDER_RESPONSE_GLOBAL_RULES:()=>i,buildConstructionTenderResponsePlan:()=>l,compactTenderResponseProjection:()=>n,tenderResponseBinding:()=>p,tenderResponseForPrompt:()=>o,tenderResponseProjection:()=>m});var d=c(87419),e=c(36980),f=c(745),g=c(69977),h=c(33074);let i=["逐条回答招标要求;不得只复述招标原文,也不得用通用管理话代替具体响应。","不复述工程量清单全表;只引用驱动施工方法、资源、工期、质量安全的关键对象与量。","不单独编写「编制依据/编制说明/规范目录」;依据在正文首次引用处写明,同一规范只展开一次。","正文不出现系统内部词:工作包、职责身份、提交审查、审查请求、审查回执、审查缺陷、候选、求值、提案、证据编号、actorId、sectionId、contractId、writing-unit、review-finding 等。","不写通用公司介绍、管理体系套话、无对象/无控制值/无责任岗位的空话。","不跨节重复同一内容;同一规范、同一措施、同一表格不在多节重复展开。","主要施工方法与重点难点按项目对象、工程量、关键线路、风险、专业接口和招标明确要求选择;每个重点难点必须有对象/部位、约束或风险、不解决的后果、针对性措施、控制值、责任岗位与依据;常规措施(安全教育、材料检验、体系健全等)归入对应措施章节,不占重点难点。","数字、日期、规格、规范条款必须有来源或明确标注为拟定/待核;不得编造。","招标明确要求表格/图件的,必须产出实际内容;与匿名/禁图表规则冲突时如实登记冲突,不得静默省略。"],j=a=>{let b=new Set;return a.filter(a=>{if(!a.text.trim())return!1;let c=(0,f.Fu)(a);return!b.has(c)&&(b.add(c),!0)})};function k(a,b,c){let d=a.chapters[b];if(d)return a.sections.filter(a=>a.chapterId===d.id)[c]}function l(a){let b=[],c=a.planningContext?new Set((0,h.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}).filter(a=>"obligation"===a.kind).map(a=>a.id)):void 0,l=new Map(a.contract.chapters.map((a,b)=>[a.id,b])),m=new Map,n=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),o=(a,b,c)=>{let d=m.get(a)??[];if(d.some(a=>a.id===b.id))return;let e=c?.length&&b.items?.length?b.items.filter(a=>c.some(b=>{let c=n(b),d=n(a);return c.length>0&&(c.includes(d)||d.includes(c))})):b.items;d.push({...b,...e?.length?{items:[...e]}:{}}),m.set(a,d)};for(let[b,c]of(a.outline?.chapters??[]).entries())for(let[d,e]of c.sections.entries()){let c=k(a.contract,b,d)?.id;if(c)for(let b of e.obligationIds??[]){let d=a.planningContext?.contractObligations.find(a=>a.id===b);d&&(0,g.Ln)(d)&&o(c,d,e.obligationItems)}}for(let b of a.outline?.contentObligationCoverage??[]){if("not-applicable"===b.landing)continue;let c=a.planningContext?.contractObligations.find(a=>a.id===b.obligationId);if(c&&(0,g.Ln)(c))for(let d of b.sectionRefs??[]){let b=k(a.contract,d.chapterIndex,d.sectionIndex)?.id,e=a.outline?.chapters[d.chapterIndex]?.sections[d.sectionIndex]?.obligationItems;b&&o(b,c,e)}}let p=new Map;for(let b of a.outline?.factCoverage??[])if("section"===b.landing)for(let c of b.sectionRefs??[]){let d=k(a.contract,c.chapterIndex,c.sectionIndex)?.id;d&&p.set(d,[...new Set([...p.get(d)??[],b.key])])}for(let[b,c]of(a.outline?.chapters??[]).entries())for(let[d,e]of c.sections.entries()){let c=k(a.contract,b,d)?.id;if(!c)continue;let f=`${e.title}
|
|
2
|
+
${e.objectScope??""}
|
|
3
|
+
${e.rationale??""}`,g=(a.planningContext?.factsBaseline??[]).filter(a=>f.includes(a.key)||!!a.selected&&f.includes(a.selected.value)).map(a=>a.key);g.length&&p.set(c,[...new Set([...p.get(c)??[],...g])])}for(let e of a.contract.sections){let h=a.confirmed.chapters[l.get(e.chapterId)??-1],k=a.contract.chapters.find(a=>a.id===e.chapterId),n=a.contract.criteria.filter(a=>a.sectionId===e.id&&!1!==a.applicable).map(a=>a.id);if(!h){b.push({sectionId:e.id,title:e.title,chapterTitle:k?.title??e.title,criterionIds:n,requirements:[],requiredOutputs:[],mustNotInclude:[...i]});continue}let o=l.get(e.chapterId)??-1,q=a.outline?.chapters[o],r=Math.max(0,a.contract.sections.filter(a=>a.chapterId===e.chapterId).findIndex(a=>a.id===e.id)),s=q?.sections[r],t=s?s.pointIndexes:h.points.map((a,b)=>b),u=[],v=(a,b)=>{a?.trim()&&u.push({text:a.trim(),source:b})};for(let a of(0===r&&v(h.source.requirement,{filePath:h.source.filePath,...h.source.page?{page:h.source.page}:{},...h.source.clause?{clause:h.source.clause}:{},quote:h.source.quote}),t)){let b=h.points[a];if(!b)continue;let c=!b.sourceFile||b.sourceFile===h.source.filePath;v(b.requirement??b.title,{filePath:b.sourceFile??h.source.filePath,...c&&h.source.page?{page:h.source.page}:{},...c&&h.source.clause?{clause:h.source.clause}:{},quote:b.quote})}for(let a of m.get(e.id)??[])for(let b of a.items?.length?a.items:[a.text])u.push({text:b,obligationId:a.id,source:{filePath:a.sourceFile,quote:a.quote,...a.page?{page:a.page}:{},...a.clause?{clause:a.clause}:{}},...a.applicability?{applicability:a.applicability}:{}});let w=[...new Map((s?.requiredOutputs??[]).filter(b=>{if(!a.planningContext)return!0;if("agent-decision"===b.basis)return!b.obligationId&&!b.baselineId;if("domain-baseline"===b.basis)return!!(b.baselineId&&a.planningContext.baselineFigures.some(a=>a.id===b.baselineId));let c=a.planningContext.outputObligations.find(a=>a.id===b.obligationId);return!!(c&&(0,g.oY)(c))}).map(b=>{let c=a.planningContext?.outputObligations.find(a=>a.id===b.obligationId),g=c?.applicability;return{id:b.outputId??"output:"+(0,f.Fu)([e.id,b.form,b.element,b.basis??"tender"]).slice(0,24),...b.obligationId?{obligationId:b.obligationId}:{},...b.baselineId?{baselineId:b.baselineId}:{},...g?{applicability:g}:{},...c?.originalForm?{originalForm:c.originalForm}:{},...g?.delivery.location==="technical-appendix"?{deliveryPlacement:{requiredLocation:"technical-appendix",status:"planned",reason:"已核定技术附表位置;装配后按当前单元与全文范围回执核实际交付,规划不代表已履行"}}:{},...g?.delivery.originalForm==="required"?{originalFormVerification:{status:"pending-actual-verification",reason:"已核定须保留原表格式;实际字段、顺序、分组、说明和受控渲染须经当前独立审查及装配验证"}}:{},form:b.form,basis:b.element,source:function(a){let b=a.fileBinding;if(b&&(!a.quote||b.policy!==d.d4||b.filePath!==a.sourceFile||!/^[a-f0-9]{64}$/u.test(b.parsedSha256)||b.quoteHash!==(0,f.Fu)(a.quote)))throw Error("TENDER_OUTPUT_SOURCE_BINDING_INVALID");let c=a.basis??"tender";return{kind:"domain-baseline"===c?"domain-baseline":"agent-decision"===c?"agent-decision":"outline",quote:a.quote??a.reason??a.element,...void 0!==a.sourceFile?{filePath:a.sourceFile}:{},...b?{fileBinding:{...b}}:{}}}(b),...function(a,b,c){if(!b||c?.delivery.location==="technical-appendix"||"forbidden"!==("table"===a?b.bodyTablePolicy:"figure"===a?b.bodyFigurePolicy:b.bodyDiagramPolicy))return{allowed:!0};let d="table"===a?"正文表格":"figure"===a?"正文图片":"正文图件";return{allowed:!1,conflict:`招标要求产出${d},但本次编制规则禁止 ${d}(${a});须按招标口径处理该冲突,不得静默省略。`}}(b.form,a.bidComposition,g)}}).map(a=>[(0,f.Fu)(a),a])).values()],x=function(a){if(!a.planningContext)return;let b=a.planningContext.professionalCandidates.find(b=>b.chapterTitle===a.chapterTitle),c=[...new Set([...b?.sectionCandidates.flatMap(a=>a.required)??[],...b?.contentRequirements.flatMap(a=>a.required)??[]])],d=[...a.criterionIds.map(a=>({kind:"criterion",ref:a})),...[...new Map(a.requirements.map(a=>[a.source.filePath,a.source])).values()].map(a=>({kind:"source-file",ref:a.filePath,note:a.quote.slice(0,80)}))],e=a.outputs.map(a=>({form:a.form,element:a.basis,allowed:a.allowed})),g=(a.planningContext?.factsBaseline??[]).filter(a=>a.selected&&/(?:GB|GB\/T|JGJ|CJJ|DB\d|ISO)\s*\d|标准|规范/iu.test(`${a.fieldName??a.key} ${a.selected.value}`)).map(a=>({name:a.fieldName??a.key,...a.objectName?{scope:a.objectName}:{},verification:"unverified",sourceId:a.selected.sourceId,quote:a.selected.quote})),h=[],i=a.outlineSection?.coverageItems??[];if(i.length){let b=new Set;for(let c of i){if("obligation"===c.kind&&!a.allowedObligationCoverageIds?.has(c.id))continue;let d=c.text.trim();!c.id.trim()||!d||b.has(c.id)||(b.add(c.id),h.push({id:c.id,text:d,enumerated:c.enumerated,kind:c.kind,suggestedCarrier:c.enumerated?"table":"paragraph"}))}}else{let b=new Set,d=(c,d,e)=>{let g=d.trim();!g||b.has(g)||(b.add(g),h.push({id:"coverage:"+(0,f.Fu)(["coverage-v1",a.sectionId,c,g]).slice(0,24),text:g,enumerated:e,kind:c,suggestedCarrier:e?"table":"paragraph"}))};for(let b of a.requirements.filter(a=>!a.obligationId))d("requirement",b.text,!1);for(let b of a.obligationsOfSection)if(b.items?.length)for(let a of b.items)d("obligation",a,!0);else d("obligation",b.text,!1);for(let a of c)d("method",a,!1)}return{questions:[...new Set([...a.requirements.map(a=>a.text),...a.obligationsOfSection.flatMap(a=>a.items?.length?a.items:[a.text])])],...a.outlineSection?.objectScope?.trim()?{objectScope:a.outlineSection.objectScope.trim()}:{},...a.outlineSection?.rationale?.trim()?{rationale:a.outlineSection.rationale.trim()}:{},methodRequirements:c,methodPlan:{methods:[...c]},...g.length?{standardCitations:g}:{},responsibilityPositions:[...a.outlineSection?.responsibilityPositions??[]],evidenceSources:d,outputForms:e,obligationIds:a.obligationsOfSection.map(a=>a.id),obligationSources:a.obligationsOfSection.map(a=>({obligationId:a.id,source:{filePath:a.sourceFile,quote:a.quote,...a.page?{page:a.page}:{},...a.clause?{clause:a.clause}:{}},...a.applicability?{applicability:a.applicability}:{}})),...h.length?{coverageItems:h}:{},factKeys:[...new Set(a.factKeysOfSection)]}}({chapterTitle:k?.title??q?.title??e.title,sectionId:e.id,...s?{outlineSection:s}:{},requirements:j(u),outputs:w,criterionIds:n,...a.planningContext?{planningContext:a.planningContext}:{},obligationsOfSection:m.get(e.id)??[],factKeysOfSection:p.get(e.id)??[],...c?{allowedObligationCoverageIds:c}:{}});b.push({sectionId:e.id,title:e.title,chapterTitle:k?.title??q?.title??e.title,criterionIds:n,requirements:j(u),requiredOutputs:w,mustNotInclude:[...i],...x?{contentContract:x}:{}})}let q=a.planningContext?(0,e.planningApplicabilityGaps)(a.planningContext):[],r=(b,c)=>{if("required"===c)return!1;let d=a.outline?.outputPlan?.find(a=>a.obligationId===b);return d?.status==="not-applicable"&&!!d.reason?.trim()&&!!d.alternative?.trim()&&d.reviewAcceptance?.accepted===!0&&!!d.reviewAcceptance.reviewer?.trim()&&"author"!==d.reviewAcceptance.reviewer&&!!d.reviewAcceptance.basis?.trim()},s=[];for(let c of a.planningContext?.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,g.oY)(a))??[]){let a=c.applicability,d=b.some(a=>a.requiredOutputs.some(a=>"domain-baseline"===c.kind?a.baselineId===c.id:a.obligationId===c.id)),e=a=>s.push({obligationId:c.id,kind:"output",reason:a,sourceFile:c.sourceFile,quote:c.quote});d||r(c.id,a?.delivery.originalForm)||e("已核本技术标必交输出没有有效章节承接;漏路由或旧规划不适用说明不能免除原要求"),a?.delivery.originalForm!=="required"||c.originalForm||e("必交原格式尚缺与冻结来源及独立审查绑定的原表契约")}for(let a of b.flatMap(a=>a.requiredOutputs).filter(a=>!a.allowed&&a.source?.kind!=="agent-decision"))r(a.obligationId??a.baselineId??"",a.applicability?.delivery.originalForm)||s.push({obligationId:a.obligationId??a.baselineId??a.id,kind:"output",reason:`必交载体要求与当前规则的冲突尚未解决:${a.source?.quote??a.basis};${a.conflict??"载体形式不允许"};须取得真实有效的独立替代或重新核定scope`,...a.source?.filePath?{sourceFile:a.source.filePath}:{},...a.source?.quote?{quote:a.source.quote}:{}});let t=[...new Map([...q,...s].map(a=>[(0,f.Fu)(a),a])).values()];return{version:"construction-tender-response-plan-v1",runId:a.runId,generatedAt:a.generatedAt??new Date().toISOString(),sections:b,globalRules:[...i],applicabilityGaps:t,...a.planningContext?{planningContextHash:(0,f.Fu)(a.planningContext),outputPlan:[...a.planningContext.outputObligations,...(a.planningContext.obligationDispositions??[]).filter(a=>"output"===a.kind).map(a=>a.obligation)].map(b=>{var c,d;let e=a.planningContext.obligationDispositions?.find(a=>"output"===a.kind&&a.obligation.id===b.id),f=(0,g.DI)(b);if(!(!e&&("domain-baseline"===b.kind||(0,g.oY)(b))))return{obligationId:b.id,element:b.element,form:b.form,kind:b.kind,status:e?.disposition==="pending-applicability"||"pending-applicability"===f?"pending-applicability":"outside-current-document"===f||"optional-technical-response"===f?f:"pending-applicability",reason:e?.reason??b.applicability?.reason??"未核定适用本技术正文,保留母源与原义务待判",...b.applicability?{applicability:b.applicability}:{},source:{sourceFile:b.sourceFile,quote:b.quote}};let h=a.outline?.outputPlan?.find(a=>a.obligationId===b.id),i=(c=a.outline,d=(c,d)=>{let e=a.outline?.chapters[c]?.sections[d];return!!e?.requiredOutputs?.some(a=>"agent-decision"!==a.basis&&("domain-baseline"===b.kind?a.baselineId===b.id:a.obligationId===b.id))},(c?.chapters??[]).flatMap((a,b)=>a.sections.flatMap((a,c)=>d(b,c)?[{chapterIndex:b,sectionIndex:c}]:[])));return{obligationId:b.id,element:b.element,form:b.form,kind:b.kind,...b.applicability?{applicability:b.applicability}:{},source:{sourceFile:b.sourceFile,quote:b.quote},status:i.length?"planned":r(b.id,b.applicability?.delivery.originalForm)?"not-applicable":"unassigned",...i.length?{sectionRefs:i}:{},reason:i.length?"稳定义务身份已由本技术标安排到具体节(规划分配不代表实际交付)":r(b.id,b.applicability?.delivery.originalForm)?h.reason:"本技术标尚未安排该已核定必交输出;未路由不等于不适用,原格式必交须先重新核定scope才可豁免",...h?.alternative?{alternative:h.alternative}:{}}})}:{}}}function m(a,b){if(!a)return;let c=new Set(b),d=a.sections.filter(a=>c.has(a.sectionId)).map(a=>({sectionId:a.sectionId,title:a.title,chapterTitle:a.chapterTitle,criterionIds:a.criterionIds,requirements:a.requirements.map(a=>({text:a.text,...a.obligationId?{obligationId:a.obligationId}:{},...a.applicability?{applicability:a.applicability}:{},source:{filePath:a.source.filePath,page:a.source.page??null,clause:a.source.clause??null,quote:a.source.quote}})),requiredOutputs:a.requiredOutputs.map(a=>({...a.id?{id:a.id}:{},...a.originalForm?{originalForm:a.originalForm}:{},form:a.form,basis:a.basis,...a.obligationId?{obligationId:a.obligationId}:{},...a.baselineId?{baselineId:a.baselineId}:{},...a.applicability?{applicability:a.applicability}:{},...a.deliveryPlacement?{deliveryPlacement:a.deliveryPlacement}:{},...a.originalFormVerification?{originalFormVerification:a.originalFormVerification}:{},...a.source?{source:{kind:a.source.kind,quote:a.source.quote,...a.source.filePath?{filePath:a.source.filePath}:{},...a.source.page?{page:a.source.page}:{},...a.source.clause?{clause:a.source.clause}:{},...a.source.fileBinding?{fileBinding:{policy:a.source.fileBinding.policy,filePath:a.source.fileBinding.filePath,parsedSha256:a.source.fileBinding.parsedSha256,quoteHash:a.source.fileBinding.quoteHash}}:{}}}:{},allowed:a.allowed,...a.conflict?{conflict:a.conflict}:{}})),...a.contentContract?{contentContract:{questions:[...a.contentContract.questions],...a.contentContract.objectScope?{objectScope:a.contentContract.objectScope}:{},...a.contentContract.rationale?{rationale:a.contentContract.rationale}:{},methodRequirements:[...a.contentContract.methodRequirements],...a.contentContract.methodPlan?{methodPlan:a.contentContract.methodPlan}:{},...a.contentContract.standardCitations?.length?{standardCitations:a.contentContract.standardCitations}:{},responsibilityPositions:[...a.contentContract.responsibilityPositions],evidenceSources:a.contentContract.evidenceSources.map(a=>({kind:a.kind,ref:a.ref,...a.note?{note:a.note}:{}})),outputForms:a.contentContract.outputForms.map(a=>({form:a.form,element:a.element,allowed:a.allowed})),obligationIds:[...a.contentContract.obligationIds],...a.contentContract.obligationSources?.length?{obligationSources:a.contentContract.obligationSources}:{},...a.contentContract.coverageItems?.length?{coverageItems:a.contentContract.coverageItems.map(a=>({id:a.id,text:a.text,enumerated:a.enumerated,kind:a.kind,...a.suggestedCarrier?{suggestedCarrier:a.suggestedCarrier}:{}}))}:{},factKeys:[...a.contentContract.factKeys]}}:{},mustNotInclude:a.mustNotInclude}));if(d.length)return{version:a.version,sections:d,globalRules:a.globalRules,...a.outputPlan?.length?{outputPlan:a.outputPlan}:{},...a.applicabilityGaps?{applicabilityGaps:a.applicabilityGaps}:{}}}function n(a){if(!a||!Array.isArray(a.globalRules)||!Array.isArray(a.sections))return a;let b=new Set(a.globalRules.map(a=>String(a)));return{...a,sections:a.sections.map(a=>{if(!a||"object"!=typeof a||!Array.isArray(a.mustNotInclude))return a;let c=a.mustNotInclude.filter(a=>!b.has(String(a))),{mustNotInclude:d,...e}=a;return c.length?{...e,mustNotInclude:c}:e})}}function o(a){let b=n(a);if(!b||!Array.isArray(b.sections)||!Array.isArray(b.outputPlan))return b;let c=new Set;for(let a of b.sections){for(let b of a.requirements??[])b.obligationId&&c.add(String(b.obligationId));for(let b of a.requiredOutputs??[])for(let a of["id","obligationId","baselineId"])b[a]&&c.add(String(b[a]))}let d=b.outputPlan,e=d.filter(a=>!c.has(String(a.obligationId)));return{...b,outputPlan:d.filter(a=>c.has(String(a.obligationId))),...e.length?{deferredOutputPlan:{total:e.length,items:e.map(a=>{let{applicability:b,source:c,...d}=a;return{...d,...c?.sourceFile?{sourceFile:c.sourceFile}:{},...b?{scope:{status:b.status,technicalContent:b.technicalContent,delivery:b.delivery,reviewStatus:b.review?.status??"unmeasured",bindingHash:b.bindingHash}}:{}}}),reading:"这些输出未在当前送审/写作小节展开,身份、状态和交付条件保留;不是免交或已满足。本批不能凭目录审其原文或原表。作者需核其它项时按sourceFile用read_source读取当前冻结原文,再由其实际承接节/独立调用提供完整义务及原格式;不能按同名元素认领或改变未决状态。"}}:{}}}function p(a,b){return a?{sectionIds:[...new Set(b)].sort(),hash:(0,f.Fu)(JSON.parse(JSON.stringify(a)))}:void 0}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=7296,exports.ids=[7296],exports.modules={21456:(a,b,c)=>{c.d(b,{p:()=>f});var d=c(92736),e=c(14911);function f(a){let b=(0,e.nD)(a)?.key??a.fieldId??a.key,c=["excavation_depth","pit_bottom_elevation","ground_elevation","pile_length","pile_diameter","foundation_depth","foundation_elevation"].includes(b),f="excavation_layer_depth"===b,g=a.resolutionRef?.winnerSourceRef?.sourceSpan??a.sourceRef?.sourceSpan??a.value,h=/[+-]?\d+(?:\.\d+)?\s*(?:mm|毫米|cm|厘米|m|米)?\s*(?:~|~|–|—|至|到|-)\s*[+-]?\d/u.test(a.value),i=/(?:约|大约|左右|大致|估计)\s*[+-]?\d|\d\s*(?:米|m)?\s*左右/u.test(a.value)||c&&["约","大约","大致"].some(b=>(0,d.K3)(g).includes(b+(0,d.K3)(a.value))),j=c&&!(/[+-]?\d+(?:\.\d+)?\s*(?:mm|毫米|cm|厘米|m|米)(?![a-z²2])/iu.test(a.value)||/^[+-]?\d+(?:\.\d+)?$/u.test(a.value.trim())&&/^(?:mm|毫米|cm|厘米|m|米)$/iu.test(a.unit??"")),k=a.objectName?.trim(),l=c&&(!k||/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)(?:[((][^))]*[))])?$/u.test(k));return{role:c?"design-geometry":f?"construction-control":"other",precision:j?"unresolved":h?"range":i?"approximate":"exact",objectBinding:c?l?"unbound":"bound":"not-required",requiresTechnicalDecision:c&&(h||i||j||l),...c&&(h||i||j||l)?{reason:j?"该属性尚未提供具有明确单位的几何控制值,资料指向语和高程基准名称不能冒充坑底标高或深度;须主控核定对象、工况与控制值":l?"数值精确不代表施工对象已确定;须核定实际区段或构件,不能把未绑定属性或来源剖面编号推广为全工程控制值":"这是工程概述范围或约数;须核定具体部位、工况及同一基准的控制值,不能取端点或平均值冒充施工值"}:{}}}},34933:(a,b,c)=>{c.d(b,{x:()=>f});var d=c(77598),e=c(49584);function f(a){let b=(0,e.modelConfigurationForRun)(a),c=b.models.active,f=c&&b.models.list.find(a=>a.name===c.name&&a.provider===c.provider),g=f?b.providers[f.provider]:void 0;return(0,d.createHash)("sha256").update(JSON.stringify({version:"single-selected-model-v1",active:c,selected:f?{name:f.name,provider:f.provider,thinking:f.thinking??"follow-task"}:null,endpointHash:g?(0,d.createHash)("sha256").update(JSON.stringify([g.baseUrl,g.protocol,g.directEndpoint])).digest("hex"):null})).digest("hex")}},42170:(a,b,c)=>{c.d(b,{Q:()=>d});function d(a,b){return{originatingRoleId:a||"unknown",...b?{originatingProcessingType:b}:{},nature:"unmeasured",applicability:"unmeasured",evidenceScope:"provided-source-record"}}},68011:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(34933);let j=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function k(a,b,c,d){let f=(0,i.x)(b),k=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return j({version:c,inputKey:a,model:f})};return{load(b){let d=k(b),f=g().join(a,`${d}.json`);if(!e().existsSync(f))return;let h=JSON.parse(e().readFileSync(f,"utf8"));if(h.version!==c||h.cacheKey!==d||j(h.response)!==h.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:h.response,receipt:{cacheKey:d,responseSha256:h.responseSha256,...h.originRunId?{originRunId:h.originRunId}:{}}}},save(b,f){let i=k(b),l=g().join(a,`${i}.json`);e().mkdirSync(a,{recursive:!0});let m=`${l}.${process.pid}.${(0,h.randomUUID)()}.tmp`;try{e().writeFileSync(m,JSON.stringify({version:c,cacheKey:i,responseSha256:j(f),response:f,...d?{originRunId:d}:{}})),e().renameSync(m,l)}finally{e().rmSync(m,{force:!0})}}}}},78936:(a,b,c)=>{c.d(b,{P:()=>h,y:()=>i});var d=c(77598),e=c(21957),f=c(92736),g=c(42170);function h(a,b){let c=b.resolutionRef?.winnerSourceFile??b.sourceFile,d=b.resolutionRef?.winnerSourceRef??b.sourceRef;if(!Object.hasOwn(a.sources,c)||d?.chunkIndex===void 0)return;let g=a.sourceControls?.find(a=>"verified-source-excerpt"===a.roleId&&a.sourceFile===c&&a.sourceRef?.chunkIndex===d.chunkIndex);return g&&(!d.sourceSpan||(0,f.dP)((0,e.wj)(g.value),(0,e.wj)(d.sourceSpan)))?g.factId:void 0}function i(a){return a.filter(a=>a.content.trim()).map(a=>{let b=`source-excerpt:${(0,d.createHash)("sha256").update(JSON.stringify([a.filePath,a.chunkIndex,a.content])).digest("hex").slice(0,24)}`;return{factId:b,fieldId:b,key:"冻结原文片段",fieldName:"冻结原文片段",value:a.content,sourceFile:a.filePath,roleId:"verified-source-excerpt",processingType:a.processingType,confidence:.9,sourceSemantics:(0,g.Q)(a.roleId,a.processingType),sourceRef:{filePath:a.filePath,roleId:"verified-source-excerpt",sectionTitle:a.sectionTitle,chunkIndex:a.chunkIndex}}})}},87296:(a,b,c)=>{c.d(b,{prepareProjectFromMaterialGroup:()=>I});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(19898),j=c(51342),k=c(12152),l=c(47353),m=c(81891),n=c(82211),o=c(44533),p=c(25693),q=c(95424),r=c(21957),s=c(78936),t=c(44967);c(34933),c(85738),c(55723),c(68011),c(48479),c(13380);var u=c(25821);c(92736);var v=c(14911);c(21456),c(98943);var w=c(96738);let x=a=>Array.isArray(a)?a.map(x):(a=>!!a&&"object"==typeof a&&!Array.isArray(a))(a)?Object.fromEntries(Object.keys(a).sort().filter(b=>void 0!==a[b]).map(b=>[b,x(a[b])])):a;function y(a){let b=(0,v.nD)(a)?.key,c=a.value;if("schedule_requirement"===b){let a=[...c.matchAll(/\d+(?:\.\d+)?\s*(?:日历天|工作日|天|个月|月)/gu)];1===a.length&&(c=a[0][0].replace(/\s+/gu,""))}return"owner"===b&&(c=c.split(/(?:办公|联系)?地址\s*[::]/u)[0].replace(/[((]\s*$/u,"").trim()),c===a.value?a:{...a,value:c,sourceRef:a.sourceRef?{...a.sourceRef,sourceSpan:a.sourceRef.sourceSpan??a.value}:void 0}}let z="project-model-v11-shared-attributes-2026-10-13";var A=c(38627),B=c(33319),C=c(75909),D=c(17175),E=c(35553),F=c(745);let G="project-preparation-v1";function H(a,b){let c=g().join((0,j.J0)(),"projects",(0,i.computeProjectId)(g().resolve(a)),"generatedDocuments");return g().join(c,"project-preparations",`${b.generationProjectId.replace(/[^a-zA-Z0-9_-]/gu,"_")}.json`)}async function I(a){var b;let c,d;a.signal?.throwIfAborted();let f=(0,E.GV)(a.workspaceRoot,a.materialRoot),i=a.template??(0,D.T)(a.spec),j={...(b=a.workspaceRoot,{resolveScope:p.resolveAgentMaterialScope,materialProfile:A.W9,fingerprints:o.E8,sourceStates:(a,b)=>(0,o.VD)(a,a=>a.listIndexSourceStates(b).map(a=>({relativePath:a.relativePath,contentHash:a.contentHash}))),warm:async()=>{d=await (0,o.getMultiProjectManager)().getProject(b)},evidenceChunks:(a,b)=>{if(!d)throw Error("PROJECT_BOOTSTRAP_IO_NOT_READY:知识库句柄尚未初始化");return d.listEvidenceChunks({relativePath:b}).map(a=>({content:a.content,chunkIndex:a.chunkIndex,sectionTitle:a.sectionTitle}))},resolveBoq:(a,b)=>(0,B.wY)({projectRoot:a,boundFilePaths:[...b]}),admission:q.$}),...a.io};a.io?.evidenceChunks||await j.warm?.();let x=j.resolveScope(a.workspaceRoot,i,a.projectName??"",{materialRoot:a.materialRoot});if(!x.locked||!x.selectedFiles.length)throw Error(`PROJECT_BOOTSTRAP_SCOPE_INVALID:${x.reason}`);let I=[...x.selectedFiles].sort(),J=j.materialProfile(a.workspaceRoot,{selectedFiles:I,selectedRoots:[a.materialRoot]}),{kindByPath:K,processingByPath:L}=(0,A.Hz)(J),M=j.admission(a.workspaceRoot,I);if(M.length)throw Error(`PROJECT_BOOTSTRAP_INDEX_INCOMPLETE:${M.map(a=>a.message).join(";")}`);let N=await j.fingerprints(a.workspaceRoot,I,a.signal),O=I.filter(a=>!N[a]);if(O.length)throw Error(`PROJECT_BOOTSTRAP_SOURCE_UNINDEXED:${O.slice(0,8).join("、")} 没有解析指纹;请先完成索引`);let P=(0,F.Fu)(I.map(a=>[a,N[a].sha256])),Q=function(a,b,c){let d=H(a,b);if(e().existsSync(d))try{let a=JSON.parse(e().readFileSync(d,"utf8"));if(a.version!==G||a.identity.generationProjectId!==b.generationProjectId||a.identity.materialRoot!==b.materialRoot||a.specId!==c||a.project?.version!==z)return;return a}catch{return}}(a.workspaceRoot,f,a.spec.id),R=!1;if(Q&&Q.sourceHashes===P)c=Q.project,R=!0;else{let b=I.flatMap(b=>(function(a,b,c){let d=c.get(a);return b.filter(a=>a.content.trim()).map(b=>({chapterId:"project-model",filePath:a,content:b.content,sectionTitle:b.sectionTitle,chunkIndex:b.chunkIndex,score:1,roleId:(0,A._W)(d),processingType:(0,A.Br)(d),source:"parsed-project-model"}))})(b,j.evidenceChunks(a.workspaceRoot,b),K)),d=new Map(j.sourceStates(a.workspaceRoot,I).map(a=>[a.relativePath,a])),k=I.filter(a=>!d.get(a));if(k.length)throw Error(`PROJECT_BOOTSTRAP_SOURCE_STATE_MISSING:${k.slice(0,8).join("、")} 没有索引状态;请先完成索引`);let l=(0,t.mb)(I.map(a=>({sourceFile:a,parsedSha256:N[a].sha256,sourceSha256:d.get(a).contentHash,sourceKind:K.get(a),processingType:L.get(a),chunks:b.filter(b=>b.filePath===a).map(a=>({chunkIndex:a.chunkIndex??0,content:a.content}))}))),m=function(a){let b=v.nC.filter(a=>"project-fact"===a.contentKind).map(a=>a.key);return{id:`bootstrap-facts:${a.id}`,name:"项目事实抽取",description:"项目级事实字段目录(由基础字段表派生)",factFields:v.nC.map(a=>({id:a.key,name:a.label,type:"auto",required:"project-fact"===a.contentKind,extractionHint:a.aliases.join("、")})),chapterMode:"dynamic",chapterRules:[],dynamicChapterRule:{source:"fact_group",requiredFactIds:b},gateRules:[]}}(a.spec),n=(0,r.d6)({evidence:b,template:i,spec:m,parsedOnly:!0}),o=(0,u.lX)([...n.localFacts,...n.projectBasicFacts,...(0,v.UT)(b),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," "),d=/R(\d+)C(\d+)\s+(?:材料\/设备名称|材料名称|设备名称)\s*[::]\s*(.+?)\s+R\1C(\d+)\s+推荐品牌\s*[::]\s*(.+?)(?=\s+R\d+C\d+\b|$)/giu;for(let e of a.matchAll(d)){let a=e[3].trim(),d=e[5].trim();if(!a||!d||/^(?:无|暂无|未指定|见.*)$/u.test(d))continue;let f=`source-brand:${(0,h.createHash)("sha256").update(JSON.stringify([c.filePath,e[1],e[4],a,d])).digest("hex").slice(0,24)}`;b.set(f,{factId:f,fieldId:"recommended_brand",fieldName:"推荐品牌",key:"推荐品牌",objectName:a,value:d,sourceFile:c.filePath,roleId:c.roleId||"parsed-table",processingType:c.processingType||"table",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-table",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,cellRange:`R${e[1]}C${e[4]}`,sourceSpan:e[0]}})}}return[...b.values()]}(b),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," ");for(let d of a.matchAll(/(?:新建|建设|建造)\s*(\d+)\s*栋\s*(\d+)\s*层(?:的)?\s*([\u4e00-\u9fff]{0,18}?(?:用房|厂房|住宅楼|教学楼|宿舍楼|办公楼|大厦))/gu)){if(/远期|设想|建议|目标/u.test(a.slice(Math.max(0,d.index-12),d.index)))continue;let e=d[3];for(let[a,f,g]of[["building_count","建设栋数",`${d[1]}栋`],["building_floors","建筑层数",`${d[2]}层`]]){let i=`source-scale:${(0,h.createHash)("sha256").update(JSON.stringify([c.filePath,e,a,g])).digest("hex").slice(0,24)}`;b.set(i,{factId:i,fieldId:a,fieldName:f,key:f,objectName:e,value:g,sourceFile:c.filePath,roleId:c.roleId||"parsed-project-scope",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-project-scope",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,sourceSpan:d[0]}})}}}return[...b.values()]}(b)]).map(y).filter(a=>!["project_name","project_scope","project_code","owner","project_location","foundation_support_form"].includes(a.fieldId??a.key)||!!a.value.trim());if(o.push(...(0,w.Yn)(b,l)),!o.length)throw Error("PROJECT_BOOTSTRAP_FACTS_EMPTY:从本次资料组没有提取到项目事实;请补充招标/图纸/清单的解析内容后再生成");let p=j.resolveBoq(a.workspaceRoot,I);if(!p.boq)throw Error(`PROJECT_BOOTSTRAP_BOQ_MISSING:${p.warning??"本次资料组没有可解析的工程量清单"}`);let q=(0,C.Yn)({chapterTitles:a.spec.chapters.map(a=>a.title),boq:p.boq,docType:a.spec.documentType}).projectWorkPackages??[];if(!q.length)throw Error("PROJECT_BOOTSTRAP_WORK_PACKAGES_EMPTY:清单没有形成工作包/成员;不能进入基准与写作");let x=await (0,r.d7)(o,n.structuredTables,[],m),B=(0,h.createHash)("sha256").update(JSON.stringify({version:z,sources:N,sourceVersionPolicyId:l.policyId,specId:a.spec.id})).digest("hex"),D={version:z,inputHash:B,sources:N,facts:o,factsModel:x,unresolvedFields:[],sourceControls:(0,s.y)(b),workPackages:q,sourceVersionPolicy:l};c={...D,snapshotId:(0,h.createHash)("sha256").update(JSON.stringify(D)).digest("hex")};let E=H(a.workspaceRoot,f);e().mkdirSync(g().dirname(E),{recursive:!0});let F={version:G,identity:f,specId:a.spec.id,sourceHashes:P,project:c,createdAt:Date.now()};e().writeFileSync(E,JSON.stringify(F))}let S=(0,l.vB)({projectSnapshotId:c.snapshotId,inputSnapshotHash:c.inputHash,chapters:a.spec.chapters.map(a=>({...a,purpose:a.purpose??"",queries:a.queries??[],requiredFacts:a.requiredFacts??[]})),facts:c.facts,requirements:[],assignments:[],deliveryPolicy:m.yD,writingProjectType:a.spec.documentType||"general"});(0,l.oH)(S);let T={identity:(0,n.T)(S,c),revision:0,versions:{},phases:[],activities:[],bindings:[],constraintAdoptions:[],readMembers:[],readConstraints:[],notes:"新项目准备:项目模型来自选中的资料组;运行内将重新确认招标章并编译正式合同",operations:{}},U=(0,k.S)()?.sourceFingerprint??(0,h.createHash)("sha256").update(JSON.stringify(["project-preparation-v1",process.pid,Date.now()])).digest("hex");return{identity:f,project:c,seedContract:S,workspace:T,evidence:[{assetId:`project-preparation:${f.generationProjectId}`,sha256:U}],sourceRunId:`project-preparation:${f.generationProjectId}`,sourceBuildId:U,cacheHit:R}}}};
|