@customize-agent/server 4.60.29 → 4.60.31
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 +282 -193
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +6 -0
- package/.next/server/chunks/1243.js +1 -1
- package/.next/server/chunks/1936.js +8 -8
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/4722.js +4 -4
- package/.next/server/chunks/6321.js +1 -1
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/9666.js +14 -14
- package/.next/server/instrumentation.js.nft.json +1 -1
- 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/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -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.nft.json +1 -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.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -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.nft.json +1 -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.nft.json +1 -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.nft.json +1 -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/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -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.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/system/reset.js.nft.json +1 -1
- package/.next/server/pages/canvas/[id].html +1 -1
- package/.next/server/pages/canvas.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/jobs.html +1 -0
- package/.next/server/pages/jobs.js.nft.json +1 -0
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +39 -38
- package/.next/static/0fdab21c22b65a3042c22ee4ac8e49fbfd22e365df64d5e9b709ccb05aecf02e/_buildManifest.js +1 -0
- package/.next/static/chunks/1210-703ad87eaeee1e4e.js +15 -0
- package/.next/static/chunks/1499-ff8f02f6bb6f3d45.js +10 -0
- package/.next/static/chunks/1702-f5e99af7aface475.js +1 -0
- package/.next/static/chunks/2378-c6d25abe02815666.js +1 -0
- package/.next/static/chunks/{864-b06700e1a4e573f2.js → 2864-67ba808c5092c2f9.js} +1 -1
- package/.next/static/chunks/3456-8b609f8475ae5030.js +1 -0
- package/.next/static/chunks/4052-199e61ca9e6a33e7.js +1 -0
- package/.next/static/chunks/4530-e73bdd645bb7a953.js +1 -0
- package/.next/static/chunks/4565-3c5ff667062ccec9.js +21 -0
- package/.next/static/chunks/4665-1984a3d8b0573fa1.js +1 -0
- package/.next/static/chunks/5046-abead1022185a99a.js +1 -0
- package/.next/static/chunks/5061-80765d4a612286e0.js +1 -0
- package/.next/static/chunks/5257-915621e439b56580.js +1 -0
- package/.next/static/chunks/5544-d77b8289662b4c28.js +4 -0
- package/.next/static/chunks/5760-f4191aac081b12d4.js +11 -0
- package/.next/static/chunks/6409-5a3bb0fbad4f64b1.js +14 -0
- package/.next/static/chunks/6505-012e90937e1e8dae.js +1 -0
- package/.next/static/chunks/6748-04b5429330e1451e.js +1 -0
- package/.next/static/chunks/7217-416b8488e0d2d498.js +1 -0
- package/.next/static/chunks/7576-ba6fc03060415b0e.js +1 -0
- package/.next/static/chunks/7646-159733564c7eb8dc.js +1 -0
- package/.next/static/chunks/7795-c11ff1a81c67c5aa.js +1 -0
- package/.next/static/chunks/7955-3a7ee8cda4f857b9.js +1 -0
- package/.next/static/chunks/8318-cb3a94de1617f983.js +1 -0
- package/.next/static/chunks/8338-b2ea00050048ba9f.js +4 -0
- package/.next/static/chunks/8399-a001bb2a0cb1640b.js +16 -0
- package/.next/static/chunks/8564-ac3e2f1bf87765b3.js +1 -0
- package/.next/static/chunks/8569-1d5c61a3f4fa0e26.js +16 -0
- package/.next/static/chunks/8715-ee013bd7f5ba38e8.js +1 -0
- package/.next/static/chunks/8750-a3c55a576effb3a6.js +1 -0
- package/.next/static/chunks/{787-207289f4bb577708.js → 8787-49b1f35eb4acfac9.js} +1 -1
- package/.next/static/chunks/{964-82cc4701f08f7351.js → 8964-e959915ecfae86b2.js} +1 -1
- package/.next/static/chunks/9551-f4b09bf2213ad571.js +16 -0
- package/.next/static/chunks/9605-3dee531f8a7ecbe0.js +4 -0
- package/.next/static/chunks/framework-9cde5013cd555765.js +1 -0
- package/.next/static/chunks/main-b313efde54fa6d2e.js +1 -0
- package/.next/static/chunks/pages/_app-73e5b40b24a7fe7d.js +140 -0
- package/.next/static/chunks/pages/_error-c01b6fb772028676.js +1 -0
- package/.next/static/chunks/pages/canvas/[id]-45da860b862e0743.js +1 -0
- package/.next/static/chunks/pages/canvas-a15773d02c97b7a6.js +1 -0
- package/.next/static/chunks/pages/documents-a1af5c6be26daed2.js +1 -0
- package/.next/static/chunks/pages/guide-fdf0822dc1d28813.js +1 -0
- package/.next/static/chunks/pages/index-c572e9caa60cb278.js +1 -0
- package/.next/static/chunks/pages/jobs-ebd1877dbf788a83.js +1 -0
- package/.next/static/chunks/pages/knowledge/file-detail-5859f0c25af34ffe.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-b796702bb5f8ac50.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-6d7b21cdca1255f2.js +1 -0
- package/.next/static/chunks/pages/knowledge/{source-preview-814c683fc3723177.js → source-preview-40ff4936b832787e.js} +1 -1
- package/.next/static/chunks/pages/knowledge-2a776c1740386874.js +1 -0
- package/.next/static/chunks/pages/models-0aaff5bfadc7b62f.js +1 -0
- package/.next/static/chunks/pages/overview-7e8018014009682e.js +1 -0
- package/.next/static/chunks/pages/prompt-11f87694feb6514c.js +1 -0
- package/.next/static/chunks/pages/settings-e8dcaba1551a0b2b.js +1 -0
- package/.next/static/chunks/pages/skills/[id]/edit-35892def57c4975f.js +1 -0
- package/.next/static/chunks/pages/skills/[id]-19c352e150e05c27.js +1 -0
- package/.next/static/chunks/pages/skills/new-a279e6ca2f7aded7.js +1 -0
- package/.next/static/chunks/pages/skills-8ad2577b4aa17f3b.js +1 -0
- package/.next/static/chunks/pages/system/logs-0856f7c65432befb.js +1 -0
- package/.next/static/chunks/{webpack-6224d37324e372cb.js → webpack-2da1769ff35eb1ed.js} +1 -1
- package/.next/static/css/837ac5def44e2eba.css +1 -0
- package/messages/en-US.json +24 -1
- package/messages/zh-CN.json +24 -1
- package/package.json +2 -2
- package/.next/static/3758d6b30df49605aef4791c994f3e5ea9c954d1cec254897982ed7bfa5a7c0b/_buildManifest.js +0 -1
- package/.next/static/chunks/127-7d37d37dab02bd10.js +0 -1
- package/.next/static/chunks/162-36b2a3e6ee7d9717.js +0 -8
- package/.next/static/chunks/257-879f095890deadad.js +0 -1
- package/.next/static/chunks/313-4b3ff7075e0ff3c3.js +0 -1
- package/.next/static/chunks/318-ca122b774ea4ee84.js +0 -1
- package/.next/static/chunks/338-19ccbaec57a7bf9c.js +0 -4
- package/.next/static/chunks/499-2233cadc6d4da647.js +0 -10
- package/.next/static/chunks/530-98c3b3fbf3fcd8e3.js +0 -1
- package/.next/static/chunks/551-446a9d48add4944f.js +0 -16
- package/.next/static/chunks/569-2bfdde9e402af5b2.js +0 -16
- package/.next/static/chunks/576-6699fed6c88502fe.js +0 -1
- package/.next/static/chunks/579-fc0a2eb64aedb001.js +0 -1
- package/.next/static/chunks/665-0634aa49137defc4.js +0 -1
- package/.next/static/chunks/711-40c1a2dbd15c2807.js +0 -21
- package/.next/static/chunks/715-6285c5942e5ec5ea.js +0 -1
- package/.next/static/chunks/717-743b697a417dd5ee.js +0 -4
- package/.next/static/chunks/748-e13db510f76568b1.js +0 -1
- package/.next/static/chunks/795-3edd02531a6d39ae.js +0 -1
- package/.next/static/chunks/808-0506edc7454b5c0e.js +0 -1
- package/.next/static/chunks/880-64d8a15c524106d2.js +0 -1
- package/.next/static/chunks/955-f0542d4dea118b62.js +0 -1
- package/.next/static/chunks/framework-4b565b3ddc94cdac.js +0 -1
- package/.next/static/chunks/main-0c91f573696223ca.js +0 -1
- package/.next/static/chunks/pages/_app-5f5b2094ef219088.js +0 -185
- package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +0 -1
- package/.next/static/chunks/pages/canvas/[id]-792d02e3874c19c0.js +0 -1
- package/.next/static/chunks/pages/canvas-e011bb88585d3441.js +0 -1
- package/.next/static/chunks/pages/documents-e6a80f2de39c6fd2.js +0 -1
- package/.next/static/chunks/pages/guide-3185f12fbcb5a6af.js +0 -1
- package/.next/static/chunks/pages/index-cb27bfa36c212ab5.js +0 -1
- package/.next/static/chunks/pages/knowledge/file-detail-c34e1f995fb8316f.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +0 -1
- package/.next/static/chunks/pages/knowledge-3afd4bc337d44550.js +0 -1
- package/.next/static/chunks/pages/models-e07b2e29595effd7.js +0 -1
- package/.next/static/chunks/pages/overview-8713b5d37af0eeb3.js +0 -1
- package/.next/static/chunks/pages/prompt-47a1ac955831dedb.js +0 -1
- package/.next/static/chunks/pages/settings-8879d8c90bee2025.js +0 -1
- package/.next/static/chunks/pages/skills/[id]/edit-88e2490a4190467b.js +0 -1
- package/.next/static/chunks/pages/skills/[id]-4700cd743c5efe05.js +0 -1
- package/.next/static/chunks/pages/skills/new-b2204742b055565a.js +0 -1
- package/.next/static/chunks/pages/skills-1f6bcb42cd90abeb.js +0 -1
- package/.next/static/chunks/pages/system/logs-8c5dd4d06fa9d8c9.js +0 -1
- package/.next/static/css/cb79b8022e718258.css +0 -1
- /package/.next/static/{3758d6b30df49605aef4791c994f3e5ea9c954d1cec254897982ed7bfa5a7c0b → 0fdab21c22b65a3042c22ee4ac8e49fbfd22e365df64d5e9b709ccb05aecf02e}/_ssgManifest.js +0 -0
|
@@ -16,7 +16,7 @@ ${JSON.stringify(c.numericBindings)}`,`【本任务独立核定的来源用途
|
|
|
16
16
|
${JSON.stringify(c.sourceApplications)}`,`【同稿实际图件模型】
|
|
17
17
|
${JSON.stringify(c.figures)}`,`【原文与同稿图件证据库】
|
|
18
18
|
${JSON.stringify(c.evidence)}`].join("\n\n"),{maxTokens:Math.max(6e3,(b.criteria.length+(b.sourceAssertions?.length??0))*350),temperature:0,diagnostics:a.diagnostics,signal:a.signal,callKind:"chapter-review",taskKind:(0,h.TO)(),onAttempt:c=>a.onReviewAttempt?.({batchId:b.id,criterionIds:b.criteria.map(a=>a.id),...c}),prefixKey:`contract-review:${b.chapterId??"document"}`,schema:{type:"object",required:["findings",...b.sourceAssertions?.length?["sourceFindings"]:[]],properties:{findings:{type:"array",minItems:b.criteria.length,maxItems:b.criteria.length,items:{type:"object",properties:{criterionIndex:{type:"integer",required:!0},status:{type:"string",required:!0},reason:{type:"string",required:!0},qualityLevel:{type:"string",required:!0,enum:[...g.E3,"unmeasured"]},impact:{type:"string",enum:["blocking","major","minor"]},defectId:{type:"string"},evidenceIndices:{type:"array",required:!0,items:{type:"integer"}}}}},sourceFindings:{type:"array",minItems:b.sourceAssertions?.length??0,maxItems:b.sourceAssertions?.length??0,items:{type:"object",properties:{bindingIndex:{type:"integer",required:!0},status:{type:"string",required:!0},reason:{type:"string",required:!0},referenceOnly:{type:"boolean"},claimCategory:{type:"string",enum:["fact-assertion","conditional-duty","project-adoption","normative-control","unmeasured"]},semanticReview:{type:"object",required:!0,properties:{bodyPurpose:{type:"string",required:!0,enum:["technical","commercial","unmeasured"]},sourcePurpose:{type:"string",required:!0,enum:["technical","commercial","mixed","unmeasured"]},assertionState:{type:"string",required:!0,enum:["project-fact","required-action","planned-action","completed-action","reference-condition","unmeasured"]},sourceState:{type:"string",required:!0,enum:["project-fact","required-action","planned-action","completed-action","reference-condition","unmeasured"]},objectAndConditions:{type:"string",required:!0,enum:["preserved","changed","unmeasured"]},support:{type:"string",required:!0,enum:["supported","unsupported","unmeasured"]},reason:{type:"string",required:!0}}}}}}}}})});await Promise.all(Array.from({length:Math.min(i((0,h.Sq)(),a.contract.chapters.length),w.length)},async()=>{for(;B<w.length;){if(a.signal?.aborted)throw Error("用户中止");let b=B++,c=w[b],d={id:c.id,expectedIds:c.criteria.map(a=>a.id)};try{if(!c.text.trim()||c.missingAuthorContent){A[b]={findings:c.criteria.map(a=>({criterionId:a.id,status:/尚未确认|尚需确认|解析失败/u.test(a.source)?"unmeasured":"not-met",reason:"固定作者模型尚未取得该职责的完整结构化产物;预览占位文字不作为正文"})),receipt:{...d,status:"executed"}};continue}let a=await C(c),e=function(a,b){let c=b&&"object"==typeof b&&Array.isArray(b.findings)?b.findings:[];return a.criteria.map(b=>{let d=c.filter(c=>c&&"object"==typeof c&&(c.criterionId===b.id||c.criterionIndex===a.criteria.indexOf(b)));if(1!==d.length)return{criterionId:b.id,status:"unmeasured",reason:d.length?"评价响应重复该项,不能任选一个结论":"评价响应未返回该项,保留固定分母"};try{let c=d.map(a=>{if(void 0===a.criterionIndex)return a;let{criterionIndex:c,...d}=a;if(void 0!==d.criterionId&&d.criterionId!==b.id)throw Error("评价职责序号与身份不一致");return{...d,criterionId:b.id}});return function(a,b){if(!b||"object"!=typeof b||!Array.isArray(b.findings))throw Error("合同评价响应缺少 findings");let c=b.findings,d=new Map(a.criteria.map(a=>[a.id,a])),e=new Set,f=[];for(let b of c){let c;if(!b||"object"!=typeof b)throw Error("合同评价项不是对象");let h={...b};if(void 0!==b.criterionIndex){if(!Number.isSafeInteger(b.criterionIndex)||0>Number(b.criterionIndex)||Number(b.criterionIndex)>=a.criteria.length||void 0!==b.criterionId&&b.criterionId!==a.criteria[Number(b.criterionIndex)].id)throw Error("评价职责序号越界或与身份不一致");h.criterionId=a.criteria[Number(b.criterionIndex)].id}if(void 0!==b.evidenceIndices){if(void 0!==b.evidenceIds||!Array.isArray(b.evidenceIndices)||new Set(b.evidenceIndices).size!==b.evidenceIndices.length||b.evidenceIndices.some(b=>!Number.isSafeInteger(b)||b<0||b>=(a.evidence?.length??0)))throw Error("评价证据序号无效、重复或越过本份正文");h.evidenceIds=b.evidenceIndices.map(b=>a.evidence[b].id)}if("string"!=typeof h.criterionId||!d.has(h.criterionId)||e.has(h.criterionId))throw Error("合同评价响应包含未知或重复身份");if(!["met","not-met","unmeasured"].includes(h.status)||"string"!=typeof h.reason||!h.reason.trim())throw Error(`合同评价状态或理由不完整:${h.criterionId}`);let i=h.quote;if(void 0!==h.evidenceIds){if(!Array.isArray(h.evidenceIds)||h.evidenceIds.some(a=>"string"!=typeof a)||new Set(h.evidenceIds).size!==h.evidenceIds.length)throw Error(`合同证据ID不合法或重复:${h.criterionId}`);c=h.evidenceIds.map(b=>{let c=a.evidence?.find(a=>a.id===b);if(!c||!Y(a,c))throw Error(`合同评价证据ID不属于本份正文或同稿图件:${h.criterionId}`);return{...c}}),i=c[0]?.text}if(void 0!==i&&("string"!=typeof i||i.length>0&&!a.text.includes(i)&&!(c??[]).some(b=>b.text===i&&Y(a,b))))throw Error(`合同评价引用不在正文或同稿图件中:${h.criterionId}`);if("met"===h.status&&!i?.trim())throw Error(`满足评价项必须有正文证据:${h.criterionId}`);let j=d.get(h.criterionId),k=j.factIds?.some(b=>!a.facts.some(a=>(0,l.vg)(a)===b&&(0,m.j)(a))),n=j.factIds?.length===0||k,o=j.admission?.status==="unmeasured",p=a.authorUnitRanges?[...new Set((c??[]).flatMap(b=>a.authorUnitRanges.filter(a=>b.figureUnitId?b.figureUnitId===a.id:b.start>=a.start&&b.end<=a.end).map(a=>a.id)))]:void 0;f.push(n||o?{criterionId:h.criterionId,status:"unmeasured",reason:n?"必用事实缺少冻结快照中的可核身份,保留评价分母":"该核心维度尚未编译具体适用评价项,不能以正文自评代替规划确认"}:{criterionId:h.criterionId,status:h.status,reason:h.reason,...h.qualityLevel&&[...g.E3,"unmeasured"].includes(h.qualityLevel)?{qualityLevel:h.qualityLevel}:{},...h.defectId?.trim()?{defectId:`${a.sectionId??a.chapterId??"document"}:${h.defectId.trim()}`}:{},...h.impact&&["blocking","major","minor"].includes(h.impact)?{impact:h.impact}:{},...i?{quote:i}:{},...c?{evidenceSpans:c}:{},...p?{authorUnitIds:p}:{}}),e.add(h.criterionId)}if(e.size!==d.size)throw Error(`合同评价返回集合不完整:要求 ${d.size} 项,返回 ${e.size} 项`);return f}({...a,criteria:[b]},{findings:c})[0]}catch(a){return{criterionId:b.id,status:"unmeasured",reason:a instanceof Error?a.message:String(a)}}})}(c,a),f=$(c,a),h=e.filter(a=>"unmeasured"===a.status);A[b]={findings:e,sourceReviews:f,receipt:{...d,status:h.length||f.some(a=>"unmeasured"===a.status)?"unmeasured":"executed",...h.length?{reason:`${h.length}项未判定;其他已验证的单项结论保留`}:{}}}}catch(f){if(a.signal?.aborted)throw f;let e=f instanceof Error?f.message:String(f);A[b]={findings:c.criteria.map(a=>({criterionId:a.id,status:"unmeasured",reason:e})),sourceReviews:$(c,null),receipt:{...d,status:"unmeasured",reason:e}}}}}));let D=e?.findings.filter(a=>!j.has(a.criterionId))??[],E=[...D,...A.flatMap(a=>a.findings)],F=[...(e?.sourceReviews??[]).filter(a=>!w.some(b=>b.sectionId===a.taskId)),...A.flatMap(a=>a.sourceReviews??[])];for(let b of Object.values(a.authorTasks??{}))for(let a of b.decisionRequests)for(let b of a.criterionIds){let c=E.find(a=>a.criterionId===b);c&&"not-met"!==c.status&&(c.status="unmeasured",c.reason=`当前作者产物仍有未解决的技术决定:${a.question};${a.reason}`)}if(a.authorTasks)for(let b of a.contract.sections){let c=a.authorTasks[b.id];if(!c)continue;let d=a.contract.deliveryPolicy?c.units.flatMap(a=>{let b="paragraph"===a.kind?a.text:"table"===a.kind?a.rows.map(a=>Object.values(a.cells).join(" ")).join("\n"):a.nodes.map(a=>a.label).join(" ");return(0,o.G0)(b).map(b=>({message:b,unitId:a.id}))}):[],e=E.find(a=>a.criterionId===`${b.id}:understanding:substance`);if(e&&d.length&&(e.status="not-met",e.reason=d.map(a=>a.message).join(";"),e.authorUnitIds=[...new Set(d.map(a=>a.unitId))]),d.length&&b.contentTypes.includes("method")){let a=new Set([`${b.id}:methods:method:2`,`${b.id}:methods:method:4`,`${b.id}:methods:method:6`]);for(let b of E)a.has(b.criterionId)&&"met"===b.status&&(b.status="not-met",b.reason=`本节工法仍以出处或后续文件替代当前技术决定:${d.map(a=>a.message).join(";")}`,b.authorUnitIds=[...new Set(d.map(a=>a.unitId))])}let f=F.filter(a=>a.taskId===b.id&&"met"!==a.status),g=z[b.id],h=new Set(g?.pendingCriterionIds??[]),i=(g?.qualityIssues??[]).filter(a=>!/^(?:作者任务未覆盖完整评价集合|载体义务必须)/u.test(a));if(i.length)for(let c of a.contract.criteria.filter(a=>a.sectionId===b.id&&"methods"===a.dimension&&h.has(a.id)&&/控制点|参数与依据|控制参数|持续时间及推导依据/u.test(a.description))){let a=E.find(a=>a.criterionId===c.id);a?.status==="met"&&(a.status="unmeasured",a.reason=`本节实际控制或推导登记尚未通过,不能由模型预支依据满足:${i.join(";")}`)}if(f.length)for(let c of a.contract.criteria.filter(a=>a.sectionId===b.id&&"methods"===a.dimension&&/参数与依据|控制参数|持续时间及推导依据/u.test(a.description))){let a=E.find(a=>a.criterionId===c.id);a&&"met"===a.status&&(a.status=f.some(a=>"not-met"===a.status)?"not-met":"unmeasured",a.reason=`本节实际控制决定的来源适用性尚未通过:${f.map(a=>a.reason).join(";")}`)}}if(a.authorTasks&&a.contract.criteria.some(a=>"document:facts:assertions"===a.id&&a.applicable)){let a=[],b=new Map,c=(c,d)=>{let e=b.get(c)??[];e.push(d),b.set(c,e),a.push(`${c}:${d}`)};for(let[a,b]of Object.entries(z))for(let d of b.qualityIssues??[])/^(?:作者任务未覆盖完整评价集合|载体义务必须)/u.test(d)||c(a,d);for(let a of F.filter(a=>"met"!==a.status))c(a.taskId,`来源改写${"not-met"===a.status?"不满足":"未判定"};${a.reason}`);for(let[a,c]of b){let b=E.find(b=>b.criterionId===`${a}:facts:assertions`);b&&(b.status="unmeasured",b.reason=`该任务实际断言的来源核验未完成:${c.join(";")}`)}if(a.length){let b=E.find(a=>"document:facts:assertions"===a.criterionId);b&&(b.status="unmeasured",b.reason=`实际首稿的来源登记未通过核验,不能用模型自评分替代:${a.join(";")}`)}}if(a.authorTasks){let c=a.contract.sections.filter(a=>a.contentTypes.includes("basis"));if(c.length){let d=new Set(c.map(a=>a.id)),e={project:a.projectModel,tasks:Object.entries(a.authorTasks).filter(([a])=>!d.has(a)).map(([a,b])=>({taskId:a,output:b,contentHash:R(b)}))},f=J(e),g=[],h=a=>a.replace(/\s/gu,"").replace(/[-—]/gu,"-").toUpperCase();for(let b of f.uses)for(let c of b.sources){let d=F.find(d=>d.taskId===b.taskId&&d.unitId===b.unitId&&d.rowId===b.rowId&&d.columnKey===b.columnKey&&(d.factId===c.sourceId||d.sourceContextFactId===c.sourceId)&&b.code&&h(d.quote).includes(h(b.code.text))&&function(a,b,c){let d=c.units.find(b=>b.id===a.unitId);if(!d||b.taskId!==a.taskId||b.unitId!==a.unitId||b.rowId!==a.rowId||b.columnKey!==a.columnKey)return!1;let e="paragraph"===d.kind&&"text"===a.field?d.text:"table"===d.kind&&"cell"===a.field?d.rows.find(b=>b.id===a.rowId)?.cells[a.columnKey??""]:"caption"===a.field&&"paragraph"!==d.kind?d.caption:"figure"===d.kind&&a.field.startsWith("node:")?d.nodes.find(b=>`node:${b.id}`===a.field)?.label:"figure"===d.kind&&a.field.startsWith("edge:")?d.edges[Number(a.field.slice(5))]?.label:void 0,f=a.code??a.name;if(!f||void 0===e||e.slice(f.start,f.end)!==f.text)return!1;if(b.textRange)return Number.isSafeInteger(b.textRange.start)&&Number.isSafeInteger(b.textRange.end)&&b.textRange.start>=0&&b.textRange.end<=e.length&&b.textRange.start<=f.start&&b.textRange.end>=f.end;let g=e.indexOf(b.quote);return g>=0&&0>e.indexOf(b.quote,g+1)&&g<=f.start&&g+b.quote.length>=f.end}(b,d,a.authorTasks[b.taskId])&&"met"===d.status&&"normative-control"===d.claimCategory&&d.sourceVersionEligibility?.status==="eligible");d&&g.push({useId:b.id,sourceId:c.sourceId,status:"confirmed",reason:d.reason,reviewId:R([Q,T(a.chapters,a.markdown),d])})}let i=O(b=J({...e,qualifications:g}),c.flatMap(b=>a.authorTasks[b.id]?[a.authorTasks[b.id]]:[]));if(i.length)for(let a of c){let b=E.find(b=>b.criterionId===`${a.id}:facts:basis:1`);b&&(b.status=i.some(a=>"not-met"===a.status)?"not-met":"unmeasured",b.reason=i.map(a=>a.message).join(";"))}for(let a of new Set(b.issues.map(a=>a.taskId))){let c=E.find(b=>b.criterionId===`${a}:facts:assertions`);c&&"not-met"!==c.status&&(c.status="unmeasured",c.reason+=`;规范真实来源或现行适用资格未核定:${b.issues.filter(b=>b.taskId===a).map(a=>a.message).join(";")}`)}if(b.issues.length){let a=E.find(a=>"document:facts:assertions"===a.criterionId);a&&"not-met"!==a.status&&(a.status="unmeasured",a.reason+=`;正文规范引用仍有实际未核事项:${b.issues.map(a=>a.message).join(";")}`)}}}return{version:Q,contractId:a.contract.id,projectSnapshotId:a.projectModel.snapshotId,...a.contract.deliveryPolicy?{deliveryPolicy:a.contract.deliveryPolicy}:{},documentHash:T(a.chapters,a.markdown),modelIdentity:k(a.diagnostics),...a.authorTasks?{authorModelHash:U(a.authorTasks)}:{},scopeHashes:v,findings:E,...F.length?{sourceReviews:F}:{},...b?{normativeUses:b}:{},batches:A.map(a=>a.receipt),...e?{incremental:{previousDocumentHash:e.documentHash,reviewedCriterionIds:[...j],reusedCriterionIds:D.map(a=>a.criterionId)}}:{},score:(0,g._n)(a.contract,E),primary:!0,expertValidated:!1}}var ac=c(73024),ad=c.n(ac),ae=c(76760),af=c.n(ae),ag=c(19898),ah=c(10295);function ai(a,b){return(0,ah.VD)(a,a=>{let c=new Map(a.listIndexSourceStates(b).map(a=>[a.relativePath,a])),d=new Map(a.getPdfSourceCoverageStates(b).map(a=>[a.relativePath,a])),e=new Set(a.listActiveIndexJobPaths([...b])),f=[];for(let g of b){let b=a.getFileParseAttempt(g),h=c.get(g);if(e.has(g)||b?.status==="parsing")f.push({level:"error",message:`资料尚在解析或索引中:${g}`});else if(b?.status==="error")f.push({level:"error",message:`资料最近一次解析失败:${g};${b.error||"须重新解析成功后生成"}${b.recordRetained?"。已保留旧解析供追溯,不能冒充本次解析成功":""}`});else if(!h||"active"!==h.status||h.indexedAt<=0)f.push({level:"error",message:`资料没有有效解析结果:${g};请完成入库后生成`});else{let a=d.get(g);a?.internalPageCountConflict?f.push({level:"error",message:`PDF解析页数与实际引用页号不一致:${g};不能把部分页面当作完整资料,请重新解析`}):a&&!(0,ag.isCompletePdfSourceCoverage)(a.coverage,h.contentHash)?f.push({level:"error",message:`PDF全页读取尚未取得完整且同源的回执:${g};请重新解析当前文件,未处理或失败页面不能默认为成功`}):a&&!(0,ag.isCurrentPdfNativeLayout)(a.nativeLayoutVersion)&&f.push({level:"error",message:`PDF原生文字布局缺少当前版本回执:${g};请重新解析当前PDF,旧原文或OCR覆盖不能代替本次布局`})}}return f})}var aj=c(47262),ak=c(4001),al=c(70769);let am=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function an(a,b,c){let d=k(b),f=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return am({version:c,inputKey:a,model:d})};return{load(b){let d=f(b),e=af().join(a,`${d}.json`);if(!ad().existsSync(e))return;let g=JSON.parse(ad().readFileSync(e,"utf8"));if(g.version!==c||g.cacheKey!==d||am(g.response)!==g.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:g.response,receipt:{cacheKey:d,responseSha256:g.responseSha256}}},save(b,d){let g=f(b),h=af().join(a,`${g}.json`);ad().mkdirSync(a,{recursive:!0});let i=`${h}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{ad().writeFileSync(i,JSON.stringify({version:c,cacheKey:g,responseSha256:am(d),response:d})),ad().renameSync(i,h)}finally{ad().rmSync(i,{force:!0})}}}}let ao=["failed","paused","repairing","blocked","running","pending","completed"];function ap(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}let aq=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","resume.plan","skill.load"]),ar=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);function as(a){return"string"==typeof a&&ar.has(a)}let at=["id","parentId","type","title","seq","status","startedAt","completedAt","progress","metrics","issues","payloadRef"];class au extends Error{constructor(a,b,c={},d){super(b,d),this.code=a,this.detail=c,this.name="NodeLogError"}}let av=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function aw(a,b){var c;return ae.join((c=b,ae.join(c??j0(),"drafts")),`${ax(a)}.nodes.jsonl`)}function ax(a){if("string"!=typeof a||!av.test(a))throw new au("node-log-doc-id-invalid",`文档 id 不合法:「${String(a)}」(须为字母数字开头、仅含字母数字/._-、长度 ≤128)`);return a}function ay(a){var b;if(!a||"object"!=typeof a)throw new au("node-log-node-invalid","节点必须是对象");let c=new Set(at),d=Object.keys(a).filter(a=>!c.has(a));if(d.length>0)throw new au("node-log-node-invalid",`节点 ${String(a.id)} 含 8.2 之外的字段:${d.join("/")}。硬禁止:节点不得携带载荷(agentWorkflow 已是 p50 2.2 MB / max 94.6 MB)——明细请落 artifacts/<sha256>,节点上只留 payloadRef(附录 F.2)。`);if("string"!=typeof a.id||0===a.id.length)throw new au("node-log-node-invalid","节点 id 不得为空(id 是 rollup 视图的聚合键)");if(void 0!==a.parentId&&("string"!=typeof a.parentId||0===a.parentId.length))throw new au("node-log-node-invalid",`节点 ${a.id} 的 parentId 必须是非空字符串`);if(a.parentId===a.id)throw new au("node-log-node-invalid",`节点 ${a.id} 的 parentId 指向自己(自环会让 children 派生进入死循环)`);if(!("string"==typeof(b=a.type)&&aq.has(b)))throw new au("node-log-node-invalid",`节点 ${a.id} 的 type「${String(a.type)}」不在 附录 D.1 的闭集内`);if(!as(a.status))throw new au("node-log-node-invalid",`节点 ${a.id} 的 status「${String(a.status)}」不是合法状态`);if("string"!=typeof a.title)throw new au("node-log-node-invalid",`节点 ${a.id} 缺 title(8.4 的"这个节点做了什么"要靠它)`);if(!Number.isFinite(a.seq))throw new au("node-log-node-invalid",`节点 ${a.id} 的 seq 必须是有限数(节流会 splice 掉数组位置,顺序只能靠它)`);if(!Number.isFinite(a.startedAt))throw new au("node-log-node-invalid",`节点 ${a.id} 的 startedAt 必须是有限数`);if(void 0!==a.completedAt&&!Number.isFinite(a.completedAt))throw new au("node-log-node-invalid",`节点 ${a.id} 的 completedAt 必须是有限数`)}function az(a){if(!a||"object"!=typeof a||"string"!=typeof a.id||0===a.id.length)throw new au("node-log-node-invalid","status/rollup 事件必须带非空 id(补丁要打在谁身上)");if(void 0!==a.startedAt)throw new au("node-log-node-invalid",`补丁不得改写 ${a.id} 的 startedAt(存在事实,不是状态)`);if(void 0!==a.status&&!as(a.status))throw new au("node-log-node-invalid",`补丁 ${a.id} 的 status「${String(a.status)}」不是合法状态`);let b=new Set([...at,"id"]);b.delete("startedAt");let c=Object.keys(a).filter(a=>!b.has(a));if(c.length>0)throw new au("node-log-node-invalid",`补丁 ${a.id} 含 8.2 之外的字段:${c.join("/")}`)}function aA(a,b){let c,d=ax(a.docId),e=aw(d,b),f=a.t??Date.now();if("upsert"===a.op){var g;ay(a.node),c={v:1,t:f,op:"upsert",node:{id:(g=a.node).id,...void 0!==g.parentId?{parentId:g.parentId}:{},type:g.type,title:g.title,seq:g.seq,status:g.status,startedAt:g.startedAt,...void 0!==g.completedAt?{completedAt:g.completedAt}:{},...void 0!==g.progress?{progress:g.progress}:{},...void 0!==g.metrics?{metrics:g.metrics}:{},...void 0!==g.issues?{issues:g.issues}:{},...void 0!==g.payloadRef?{payloadRef:g.payloadRef}:{}}}}else az(a.node),c={v:1,t:f,op:a.op,node:{...a.node}};let h=`${JSON.stringify(c)}
|
|
19
|
-
`;try{ac.mkdirSync(ae.dirname(e),{recursive:!0}),ac.appendFileSync(e,h,"utf8")}catch(a){throw new au("node-log-write-failed",`节点日志写入失败(S3.2:节点日志是唯一真相源,不可静默丢 ⇒ 停止生成并上报):${e}:${a instanceof Error?a.message:String(a)}`,{docId:d,file:e},{cause:a})}return c}function aB(a,b,c={}){return aA({docId:a,op:"upsert",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function aC(a,b,c={}){return aA({docId:a,op:"status",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function aD(a,b){return function(a,b){let c,d=ax(a),e=aw(d,b);try{c=ac.readFileSync(e,"utf8")}catch(a){if("ENOENT"===a.code)return{nodes:[],records:[],lineCount:0,tornTail:!1};throw a}let f=c.endsWith("\n"),g=!f&&c.length>0,h=c.lastIndexOf("\n"),i=f?c.slice(0,-1):h>=0?c.slice(0,h):"",j=""===i?[]:i.split("\n"),k=[];for(let a=0;a<j.length;a+=1){let b,c=j[a];if(""!==c.trim()){try{b=JSON.parse(c)}catch(b){throw new au("node-log-corrupt",`节点日志第 ${a+1} 行不是合法 JSON(文件损坏或被外部改写):${e}`,{docId:d,file:e,line:a+1},{cause:b})}k.push(function(a,b,c,d){let e=(a,e)=>new au("node-log-corrupt",`节点日志第 ${d} 行${a}:${c}`,{docId:b,file:c,line:d},void 0===e?void 0:{cause:e});if(!a||"object"!=typeof a)throw e("不是对象");if(1!==a.v)throw e(`版本 v=${String(a.v)} 无法识别(本版本只认 1)`);if(!Number.isFinite(a.t))throw e("缺时间戳 t");if("upsert"!==a.op&&"status"!==a.op&&"rollup"!==a.op)throw e(`op「${String(a.op)}」未知`);if(!a.node||"object"!=typeof a.node)throw e("缺 node");try{if("upsert"===a.op)return ay(a.node),{v:1,t:a.t,op:"upsert",node:a.node};return az(a.node),{v:1,t:a.t,op:a.op,node:a.node}}catch(a){throw e(`的 node 不合法(${a instanceof Error?a.message:String(a)})`,a)}}(b,d,e,a+1))}}return{nodes:function(a,b,c){let d=new Map;for(let e of a){if("upsert"===e.op){d.set(e.node.id,{...e.node});continue}let a=d.get(e.node.id);if(!a)throw new au("node-log-patch-target-missing",`${e.op} 事件指向 ${e.node.id},但它没有 upsert(append-only 日志里节点必须先出现):${c}`,{docId:b,file:c});d.set(e.node.id,function(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a)),d={...a,...c,id:a.id,startedAt:a.startedAt};return void 0!==c.metrics&&void 0!==a.metrics&&(d.metrics={...a.metrics,...c.metrics}),function(a){let b=a.progress;return!b||"completed"!==a.status||"number"!=typeof b.total||b.total<=0||"number"!=typeof b.current||b.current>=b.total?a:{...a,progress:{...b,current:b.total}}}(d)}(a,e.node))}return[...d.values()].sort(ap)}(k,d,e),records:k,lineCount:j.length,tornTail:g}}(a,b).nodes}let aE={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},aF={"knowledge-base":"知识库","document-readiness":"生成准备度检查","llm-json":"LLM 事实抽取"};function aG(a){return a?aF[a]:void 0}function aH(a,b={}){let c={executionVersion:2,group:a.type,...a,...b},d=c.roleName||aG(c.roleId),e=c.subtitle||d||aG(c.roleId);return{...c,roleName:d,subtitle:e,title:function(a){var b;let c=aE[b=a.type]??b,d=a.subtitle||a.roleName||aG(a.roleId),e=d&&!c.includes(d)?`${c} \xb7 ${d}`:c,f="string"==typeof a.title&&a.title.length>0?a.title:void 0;return f&&f!==c?f:e}({...c,roleName:d,subtitle:e})}}let aI="stage-details";function aJ(a){return a.source===aI}let aK={prepare:{type:"prepare",title:"准备"},understand:{type:"understand",title:"理解资料"},plan:{type:"plan",title:"规划结构"},blueprint:{type:"blueprint",title:"派生蓝图"},write:{type:"write",title:"逐章写作"},close:{type:"close",title:"全篇收口"},deliver:{type:"deliver",title:"交付"}};function aL(a,b,c="completed",d){let e=aK[b];a$(a,{batch:{prepare:"generation.prepare",understand:"generation.understanding",plan:"generation.planning",blueprint:"generation.blueprint",write:"generation.write",close:"finalize.pipeline",deliver:"finalize.delivery"}[b],id:aM(b),type:e.type,title:e.title,status:c,..."string"==typeof d&&d.length>0?{metrics:aZ(d)}:{}})}function aM(a){return`phase:${a}`}function aN(a){return`chapter:${a}`}let aO={running:"running",success:"completed",failed:"failed",partial:"repairing",skipped:"blocked"};function aP(a,b={}){let c;try{c=aD(a,b.baseDir)}catch{return 0}let d=new Map;for(let a of c){if(!a?.id)continue;let b=d.get(a.id);d.set(a.id,b?{...b,...a}:a)}let e=new Map;for(let a of d.values())a.parentId&&e.set(a.parentId,[...e.get(a.parentId)??[],a]);let f=new Set(["round.decide"]),g=0,h=Date.now(),i=[...d.values()].filter(a=>!aQ.has(a.status));if(0===i.length)return 0;let j=a=>{let b=0,c=a;for(;c.parentId&&d.has(c.parentId)&&b<64;)c=d.get(c.parentId),b+=1;return b},k=[...i].sort((a,b)=>j(b)-j(a)),l=new Map,m=a=>l.get(a.id)??a.status;for(let c of k){let d=e.get(c.id)??[];if(0===d.length){let d=b.documentOutcome?f.has(c.type)&&"completed"===b.documentOutcome?"completed":"completed"===b.documentOutcome?"blocked":b.documentOutcome:f.has(c.type)?"completed":"running";if("running"===d)continue;aC(a,{id:c.id,status:d,completedAt:h,metrics:b.documentOutcome?{closedBySweep:!0,closedAtDocumentEnd:!0,documentOutcome:b.documentOutcome}:{closedBySweep:!0,closedRecordNode:!0}},{baseDir:b.baseDir}),l.set(c.id,d),g+=1,b.documentOutcome;continue}if(d.some(a=>!aQ.has(m(a))))continue;let i=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=ao.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(d.map(a=>m(a)))??"completed";aC(a,{id:c.id,status:i,completedAt:h,metrics:{closedBySweep:!0,closedChildren:d.length,...b.documentOutcome?{closedAtDocumentEnd:!0}:{}}},{baseDir:b.baseDir}),l.set(c.id,i),g+=1}return g}let aQ=new Set(["completed","failed","blocked","paused"]),aR={"generation.prepare":{phase:"prepare",typeByStageType:{role_binding:"prepare",validation:"prepare",file_understanding:"prepare"},fallbackType:"prepare"},"generation.understanding":{phase:"understand",typeByStageType:{knowledge_retrieval:"understand",file_understanding:"understand",fact_extraction:"understand",validation:"understand",reference:"understand"},fallbackType:"understand"},"generation.planning":{phase:"plan",typeByStageType:{validation:"plan",role_binding:"plan",knowledge_retrieval:"plan",fact_extraction:"plan"},fallbackType:"plan"},"generation.blueprint":{phase:"blueprint",typeByStageType:{validation:"blueprint",file_understanding:"blueprint",chapter_generation:"blueprint"},fallbackType:"blueprint"},"generation.write":{phase:"write",typeByStageType:{chapter_generation:"write",knowledge_retrieval:"understand"},fallbackType:"write"},"finalize.rebuild":{phase:"close",typeByStageType:{validation:"close",fact_extraction:"close",reference:"close",knowledge_retrieval:"close"},fallbackType:"close"},"finalize.delivery":{phase:"deliver",typeByStageType:{validation:"deliver",reference:"deliver",fact_extraction:"deliver"},fallbackType:"deliver"},"finalize.pipeline":{phase:"deliver",typeByStageType:{reference:"deliver",validation:"deliver",fact_extraction:"deliver"},fallbackType:"deliver"},"document.lifecycle":{phase:"prepare",typeByStageType:{validation:"prepare",reference:"prepare"},fallbackType:"prepare"}};function aS(a){let b=a.replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"");return b.length>0?b.slice(0,48):"none"}function aT(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b.toString(16).padStart(8,"0")}function aU(a){return"chapter_generation"===a.type||/^agent-chapter-task-/u.test(a.roleId||"")}let aV=globalThis,aW=aV.__customizeAgentNodeLedgers??=new Map;function aX(a,b){let c=aw(a,b),d=aW.get(c);if(d&&(0,ac.existsSync)(c))return d;let e=aD(a,b),f=new Map,g=0;for(let a of e)f.set(a.id,a.seq),Number.isFinite(a.seq)&&(g=Math.max(g,a.seq+1));let h={nodes:new Map(e.map(a=>[a.id,a])),seqById:f,nextSeq:g};return aW.set(c,h),h}function aY(a){return"string"==typeof a.title&&a.title.length>0?a.title:String(a.type)}function aZ(a){return"string"!=typeof a||0===a.length?{}:a.length<=160?{note:a,noteChars:a.length}:{note:`${a.slice(0,160)}…`,noteChars:a.length}}function a$(a,b){let c=function(a){let b=aR[a];if(!b)throw new au("node-log-node-invalid",`批次「${String(a)}」未在迁移台账内(S10.1:逐批迁移)。要迁移新的一批:先在 emitNode.ts 的台账注释与 EMIT_NODE_BATCHES 里登记,再改调用点——半个批次(同一事实两个写入者)比不迁移更糟。`);return b}(b.batch),d=b.stage,e=b.baseDir??a.nodeLogBaseDir??a.global?.nodeLogBaseDir,f=function(a){let b="string"==typeof a.documentId&&a.documentId.length>0?a.documentId:void 0,c=a.global?.input?.documentId;return b??("string"==typeof c&&c.length>0?c:void 0)}(a),g=f?aX(f,e):void 0,h=d?.roleId,i=b.round,j=b.type??(h&&void 0!==i?"round":void 0)??c.typeByStageType[d?.type??""]??c.fallbackType,k=b.title??(h&&void 0!==i?d?.subtitle??(d?aY(d):void 0):void 0)??(d?aY(d):void 0)??String(j),l=void 0!==i&&i>1&&!k.includes(`第 ${i} 轮`)?`${k} \xb7 第 ${i} 轮`:k,m=b.status??(d?aO[d.status]:void 0)??"running",n=b.progress??d?.progress,o=n&&"completed"===m&&"number"==typeof n.total&&n.total>0&&"number"==typeof n.current&&n.current<n.total?{...n,current:n.total}:n,p=b.issues??function(a){let b=a?.details;if(Array.isArray(b)&&0!==b.length)return b.map(a=>({level:"info",message:a,source:aI}))}(d),q={...aZ(d?.message),...d?{stageType:d.type,stageRoleId:d.roleId||"",...void 0!==d.promptId?{stagePromptId:d.promptId}:{},...void 0!==d.subtitle?{stageSubtitle:d.subtitle}:{},...void 0!==d.order?{stageOrder:d.order}:{}}:{},...void 0!==i?{roundIteration:i}:{},...b.metrics??{}};if(!f||!g)return{...void 0!==i?{round:i}:{},skippedNodes:"no-doc-id"};let r=b.id??(d?h&&void 0!==i?`round:${h}`:`st.${aS(d.type)}.${aS(d.roleId||"none")}.${aT(aU(d)?[d.type,d.roleId||"",d.promptId||"",d.subtitle||"",d.order??""].join("::"):[d.type,d.roleId||"",d.promptId||""].join("::"))}`:`${aS(j)}.${aT(`${b.parentId??aM(c.phase)}::${l}`)}`),s=b.chapterId??(d&&aU(d)?function(a){let b=/^agent-chapter-task-(.+)$/u.exec(a.roleId||"");return b?.[1]}(d):void 0),t=b.parentId??(s?aN(s):void 0)??aM(c.phase),u=e?{baseDir:e}:{},v=t.startsWith("chapter:")?b.chapterTitle:t.startsWith("round:")?b.parentTitle??d?.subtitle??d?.title:b.parentTitle;!function a(b,c,d,e){if(d.nodes.has(c))return;let f=function(a){let b=/^phase:(.+)$/u.exec(a);if(b){let a=aK[b[1]];if(a)return{type:a.type,title:a.title}}return a.startsWith("chapter:")?{type:"chapter",title:a.slice(8),parentId:aM("write")}:a.startsWith("round:")?{type:"round",title:a.slice(6),parentId:aM("close")}:void 0}(c);if(!f)throw new au("node-log-node-invalid",`parentId「${c}」不是本桥认识的结构化 id(phase:* / chapter:* / round:* 三种前缀)。裸 id 的父节点必须先由某个调用点自己 emit 出来——否则补丁会打在空气上(node-log-patch-target-missing)。要新增结构层:在 parseStructuralId 与 PHASE_ROOTS 里显式登记,不要就地拼字符串。`);f.parentId&&a(b,f.parentId,d,{baseDir:e.baseDir});let g=d.nextSeq;d.nextSeq+=1;let h={id:c,...void 0!==f.parentId?{parentId:f.parentId}:{},type:f.type,title:e.title??f.title,seq:g,status:"running",startedAt:Date.now()};aB(b,h,e.baseDir?{baseDir:e.baseDir}:{}),d.nodes.set(h.id,h),d.seqById.set(h.id,g)}(f,t,g,{...void 0!==v?{title:v}:{},...u});let w=g.nodes.get(r),x=b.startedAt??w?.startedAt??Date.now(),y=void 0!==w&&!aQ.has(w.status),z=aQ.has(m)&&!y,A=b.completedAt??(aQ.has(m)?z?x:Date.now():void 0),B=z?{...q,instantEvent:!0}:q;if(w){let a={id:r,status:m,...w.title!==l?{title:l}:{},...void 0!==o?{progress:o}:{},...Object.keys(B).length>0?{metrics:B}:{},...void 0!==p?{issues:p}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},...void 0!==A?{completedAt:A}:{}};aC(f,a,u),g.nodes.set(r,a_(w,a))}else{let a={id:r,parentId:t,type:j,title:l,seq:g.nextSeq,status:m,startedAt:x,...void 0!==A?{completedAt:A}:{},...void 0!==o?{progress:o}:{},...Object.keys(B).length>0?{metrics:B}:{},...void 0!==p?{issues:p}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{}};return aB(f,a,u),g.seqById.set(r,a.seq),g.nextSeq+=1,g.nodes.set(r,a),{nodeId:r,seq:a.seq,status:m,...void 0!==i?{round:i}:{}}}return{nodeId:r,seq:g.seqById.get(r)??w.seq,status:m,...void 0!==i?{round:i}:{}}}function a_(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a)),d={...a,...c,id:a.id,startedAt:a.startedAt};return void 0!==c.metrics&&void 0!==a.metrics&&(d.metrics={...a.metrics,...c.metrics}),d}var a0=c(42948),a1=c(73055),a2=c(86282),a3=c(5518),a4=c(9848);function a5(a,b,c){let d=a.readSnapshot(()=>{if(!Object.hasOwn(b.sources,c.filePath))throw Error("视图文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("视图解析身份已经变化,不能与旧项目绑定");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==ag.CAD_SCENE_VERSION)throw Error("视图场景版本不兼容");if(!a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload)throw Error("视图图框身份不存在");return{actual:d,scene:a.loadCadScene(c.filePath)}}),e=(0,ag.renderCadSourceView)(d.scene,c);return{...e,receipt:{...e.receipt,filePath:c.filePath,projectSnapshotId:b.snapshotId,parsedIdentity:d.actual.sha256,frameEntities:e.receipt.visibleAnnotations.length,recordsComplete:!0,completeScope:"projected-geometry-and-indexed-annotations-assigned-to-selected-frame",unassignedEntitiesIncluded:!1}}}function a6(a,b,c){return a.readSnapshot(()=>{if(!c||"string"!=typeof c.filePath||!Object.hasOwn(b.sources,c.filePath))throw Error("CAD证据文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("CAD证据解析身份已经变化");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==ag.CAD_SCENE_VERSION)throw Error("CAD证据结构版本不兼容");let f=a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload;if(!f)throw Error("CAD证据的真实图框不存在");if("string"!=typeof c.rawValue||!/^[+−-]?\d+(?:\.\d+)?$/u.test(c.rawValue.trim()))throw Error("CAD单值须为一个实际数字,不得取范围端点或解析显示字符串猜值");if("string"!=typeof c.valueEntityId||!Array.isArray(c.unitEntityIds)||!c.unitEntityIds.length||!Array.isArray(c.scopeEntityIds)||!c.scopeEntityIds.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let g=[c.valueEntityId,...c.unitEntityIds,...c.scopeEntityIds];if(g.length>12||g.some(a=>"string"!=typeof a)||new Set(g).size!==g.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let h=g.map(b=>{let d=a.queryMaterialEntityPage(c.filePath,{kind:"cad-entity",entityId:b,offset:0,limit:1}).records[0]?.payload;if(!d||d.sheet!==c.frameId||Array.isArray(d.sheetCandidates)&&d.sheetCandidates.length>1)throw Error("CAD实体不属于同一明确图框,不能跨图或跨歧义对象绑定");return d}),i=h[0];if("string"!=typeof i.text||(0,ag.decodeCadString)(i.text).trim()!==c.rawValue.trim())throw Error("CAD数值不是实际标注的完整原文;未确认格式码或复合值须先解释");return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:d.sha256,sceneVersion:e.version,frame:f,value:i,unitAnnotations:h.slice(1,1+c.unitEntityIds.length),scopeAnnotations:h.slice(1+c.unitEntityIds.length),sourceQuality:e.quality,drawingCoordinateUnits:e.units,applicability:"not-evaluated",approvedForWriting:!1}})}async function a7(a){let b=a.candidate;if(!b||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(b.attribute)||!["m","mm","cm"].includes(b.unit)||!b.objectName?.trim()||b.objectName.length>300||!b.condition?.trim()||b.condition.length>1e3)throw Error("几何候选属性、对象、工况或单位无效");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)(?:[((][^))]*[))])?$/u.test(b.objectName.trim())||/^(?:场地整平后高程|场地整平后标高|开挖面高程|开挖面标高|坑底标高|桩长|桩径)$/u.test(b.objectName.trim()))throw Error("图名、剖面编号或属性名不能代替实际施工部位,须继续核对区段/构件对应关系");let c=a.readEvidence(b.evidence);if(c.projectSnapshotId!==a.project.snapshotId||c.parsedIdentity!==a.project.sources[b.evidence.filePath]?.sha256)throw Error("几何证据与当前冻结项目不一致");if(!c.unitAnnotations.some(a=>"string"==typeof a.displayText&&a.displayText.trim()===b.unit))throw Error("候选单位没有实际单位文字实体支持,不能从INSUNITS或制图惯例猜值");if(!a.views.length||a.views.length>4||a.views.some(d=>d.receipt.parsedIdentity!==c.parsedIdentity||d.receipt.filePath!==c.filePath||d.receipt.frameId!==b.evidence.frameId||d.receipt.projectSnapshotId!==a.project.snapshotId))throw Error("几何复核视图不属于同一冻结来源身份");let d=new Set(a.views.flatMap(a=>a.receipt.visibleAnnotations.map(a=>a.id))),f=[b.evidence.valueEntityId,...b.evidence.unitEntityIds,...b.evidence.scopeEntityIds];if(f.some(a=>!d.has(a)))throw Error("数值、单位说明和部位实体必须在已提供视图中可核对,不能用未看的节点补成完整关系");let g=JSON.stringify({task:"独立审核图示工程属性,不代写正文",candidate:b,sourceEvidence:c,views:a.views.map(a=>({...a.receipt,sourceQuality:void 0,visibleAnnotations:a.receipt.visibleAnnotations.filter(a=>f.includes(a.id)),visibleAnnotationCount:a.receipt.visibleAnnotations.length,renderingLimitations:a.receipt.renderingLimitations})),instructions:'逐项确认实际数值、单位文字及其适用符号、真实施工部位、施工工况和属性。必须核对剖面编号与实际区段/构件的对应关系;只知道来源剖面、不知道施工部位不能confirmed。同图框相邻不证明属于同一对象,主体开挖面、板顶/支撑标高、垫层底和排水沟底不得混用;图框或图例无法辨认、单位只靠惯例、局部值推广全工程、阶段关系未核或被省略实体影响判断,返回unmeasured/rejected。不要由绘图坐标差计算工程值。只返回JSON {status:"confirmed"|"rejected"|"unmeasured",reason:"具体依据与限制"}。'}),h=await a.reviewer({prompt:g,images:a.views.map((a,b)=>({name:`同一真实图框局部${b+1}`,png:a.png}))});if(!h||!["confirmed","rejected","unmeasured"].includes(String(h.status))||"string"!=typeof h.reason||!h.reason.trim())throw Error("独立几何复核结果无效");return a.readEvidence(b.evidence),{candidate:b,proof:c,review:{status:h.status,reason:h.reason},sourceViewHashes:a.views.map(a=>(0,e.createHash)("sha256").update(a.png).digest("hex")),normalizedValue:"confirmed"===h.status?`${b.evidence.rawValue.trim()}${b.unit}`:null,approvedForWriting:"confirmed"===h.status,expertValidated:!1}}function a8(a){if(!a.approvedForWriting||"confirmed"!==a.review.status||!a.normalizedValue)return;let{candidate:b,proof:c}=a;if(a.normalizedValue!==`${b.evidence.rawValue.trim()}${b.unit}`||64!==c.parsedIdentity.length)throw Error("已复核CAD属性的值或解析身份不一致");let d={ground_elevation:"场地整平后地面标高",pit_bottom_elevation:"主体开挖面标高",foundation_elevation:"基础控制标高",pile_length:"桩长",pile_diameter:"桩径"},f={parsedIdentity:c.parsedIdentity,frameId:b.evidence.frameId,valueEntityId:b.evidence.valueEntityId,rawValue:b.evidence.rawValue,unit:b.unit,unitEntityIds:[...b.evidence.unitEntityIds],scopeEntityIds:[...b.evidence.scopeEntityIds],condition:b.condition,reviewReason:a.review.reason,sourceViewHashes:[...a.sourceViewHashes]};return{factId:`cad-reviewed:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,b.attribute,b.objectName,a.normalizedValue,f])).digest("hex").slice(0,24)}`,fieldId:b.attribute,fieldName:d[b.attribute],key:d[b.attribute],objectName:b.objectName,value:a.normalizedValue,sourceFile:c.filePath,roleId:"cad-reviewed-geometry",processingType:"drawing",confidence:.9,sourceRef:{filePath:c.filePath,roleId:"cad-reviewed-geometry",sourceSpan:b.evidence.rawValue,cadInterpretation:f}}}let a9=a=>a?JSON.parse(a.replace(/^\s*```(?:json)?\s*/u,"").replace(/\s*```\s*$/u,"")):void 0,ba=["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"],bb=(a,b,c)=>{if(!Object.hasOwn(b.sources,c)||a.parsedFileFingerprint(c).sha256!==b.sources[c].sha256)throw Error("CAD准备期间解析来源已变化")};async function bc(a){let b,c=[],d=[],f=a.caller??h.rI,g=ba.filter(b=>a.requestedAttributes.includes(b));if(!g.length||!a.filePaths.length)return{facts:c,readings:d,complete:!1};let i=a.read(b=>b.readSnapshot(()=>a.filePaths.map(c=>{bb(b,a.project,c);let d=b.loadMaterialEntities(c,"cad-scene-quality")[0]?.payload;if(d?.version!==ag.CAD_SCENE_VERSION)return{filePath:c,frames:[],complete:!1,reason:"结构版本尚未支持当前图示复核"};let e=b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:0,limit:24}),f=[...e.records];for(let a=24;a<Math.min(e.total,96);a+=24)f.push(...b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:a,limit:24}).records);return{filePath:c,frames:f.map(a=>{let b=a.payload;return{id:b.id,title:b.title,name:b.name,drawingNumber:b.drawingNumber}}),complete:f.length===e.total}})));if(i.every(a=>0===a.frames.length))return d.push(...i.map(a=>({filePath:a.filePath,status:"unmeasured",reason:a.reason??"当前解析没有可供图像复核的实际图框;须通过真实根实例读取标注并继续核对对象和工况,不能据此认定工程属性不存在",catalogComplete:a.complete}))),{facts:c,readings:d,complete:!1};let j=0;try{b=a9(await f("你是工程资料读图智能体,选择真实图框以准备施工控制属性。",JSON.stringify({requestedAttributes:g,catalog:i,instructions:"只选择与请求属性有关的真实图框,最多四个;剖面、详图和平面按实际图名及部位综合判断。目录截断或资料尚未理解不代表没有参数。仅返回JSON {frames:[{filePath,frameId,attributes:[]}]};不得自造ID,不取数字、不写施工正文。"}),!0,{diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:2e3}));let e=b?.frames;if(!Array.isArray(e)||e.length>4)throw Error("读图选择没有返回有限的实际图框");let h=e.map(a=>{if(!i.some(b=>b.filePath===a.filePath&&b.frames.some(b=>b.id===a.frameId))||!Array.isArray(a.attributes)||!a.attributes.length||a.attributes.some(a=>!g.includes(a)))throw Error("读图选择超出实际目录或请求属性");return a});if(new Set(h.map(a=>JSON.stringify([a.filePath,a.frameId]))).size!==h.length)throw Error("读图选择重复,不能对同图框重复消耗模型预算");let k=h.map(a=>({selection:a,status:"unmeasured"}));d.push(...k);let l=0;await Promise.all(Array.from({length:Math.min(2,h.length)},async()=>{for(;l<h.length;){let b=l++,d=h[b];a.signal?.throwIfAborted();let e=k[b];try{let b=a.read(b=>b.readSnapshot(()=>{bb(b,a.project,d.filePath);let c=b.queryMaterialEntityPage(d.filePath,{kind:"cad-frame",entityId:d.frameId,offset:0,limit:1}).records[0]?.payload,e=b.loadCadScene(d.filePath);if(!c)throw Error("图框身份失效,不能以不完整标注确认控制值");let f=c.polygon,g={minX:Math.min(...f.map(a=>a.x)),maxX:Math.max(...f.map(a=>a.x)),minY:Math.min(...f.map(a=>a.y)),maxY:Math.max(...f.map(a=>a.y))},h=e.annotations.filter(a=>a.sheet===d.frameId&&a.text.trim()).map(a=>({id:a.id,text:(0,ag.projectCadAnnotationText)(a.text,a.entityType),position:a.position}));return{bounds:g,annotations:h}}));if(JSON.stringify(b.annotations).length>16e4)throw Error("图框文字超过当前完整理解预算,需进一步分区取证");let g=a.read(b=>a5(b,a.project,{filePath:d.filePath,frameId:d.frameId,width:3200,fontPath:a.fontPath})),h=(b.bounds.minX+b.bounds.maxX)/2,i=(b.bounds.minY+b.bounds.maxY)/2,k=[{minX:b.bounds.minX,maxX:h,minY:i,maxY:b.bounds.maxY},{minX:h,maxX:b.bounds.maxX,minY:i,maxY:b.bounds.maxY},{minX:b.bounds.minX,maxX:h,minY:b.bounds.minY,maxY:i},{minX:h,maxX:b.bounds.maxX,minY:b.bounds.minY,maxY:i}].map(b=>a.read(c=>a5(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath}))),l=await f("你是施工技术资料读图智能体。候选必须指向实际原始实体,不能靠数字相邻猜工程属性。",JSON.stringify({selection:d,sourceView:{...g.receipt,sourceQuality:void 0,visibleAnnotations:void 0},annotations:b.annotations,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),partitions:k.map((a,b)=>({imageIndex:b,viewport:a.receipt.viewport})),instructions:"四张图按左上、右上、左下、右下完整分区读取,属于同一真实图框。结合图形、标高符号、单位说明和文字定位实际施工部位与工况;剖面编号只是来源定位,objectName须写对应区段/构件等实际工程对象,不得仅用“4-4剖面”或“开挖面高程”充当施工对象。scopeEntityIds须同时包含真实部位与解释施工工况的实体。主体垫层底、支撑、结构板、排水沟底及局部刻槽不能互换。每个对象分别提出明确属性候选,最多六条。图例xx.xxx是示意占位符,不是工程值。单位须有m/mm/cm实际独立文字实体;裸数值须完整标注原文,不取范围端点,不据绘图坐标相减。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]},文件和图框由当前读取上下文固定,不重复抄写地址。图像无法辨认或部位关系未核清时保留unresolved,不编造结论。"}),!0,{files:k.map((a,b)=>({name:`同一实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});e.rawDiscovery=l;let m=a9(l);e.discovery=m;let n=m?.candidates;if(!Array.isArray(n)||n.length>6)throw Error("图示候选超出本次理解预算或协议");let o=a=>{if(!a.evidence||void 0!==a.evidence.filePath&&a.evidence.filePath!==d.filePath||void 0!==a.evidence.frameId&&a.evidence.frameId!==d.frameId)throw Error("候选声明了本次读取之外的来源");let b=a.objectName?.split(/[//]/u).map(a=>a.trim()).filter(Boolean)??[],c=b.filter(a=>!/^[\dA-Za-z\s\-—~~]+剖面(?:图)?$/u.test(a)),e=b.length>1&&c.length&&c.length<b.length?c.join("/"):a.objectName;return{...a,objectName:e,evidence:{...a.evidence,filePath:d.filePath,frameId:d.frameId}}},p=n.map(o),q=p.flatMap((b,c)=>{try{if(!a.read(c=>a6(c,a.project,b.evidence)).unitAnnotations.some(a=>String(a.displayText).trim()===b.unit))throw Error("单位未指向实际m/mm/cm文字实体");if(/^(?:[\dA-Za-z\s\-—~~]+)?剖面(?:图)?$/u.test(b.objectName))throw Error("仅定位来源剖面,尚未对应到实际施工区段");return[]}catch(a){return[{index:c,reason:a instanceof Error?a.message:String(a)}]}});if(q.length){let c=await f("你是工程读图智能体,纠正本次真实来源读取提案,不能编造数值、单位或部位。",JSON.stringify({selection:d,previousCandidates:p,rejectedCandidates:q,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),annotations:b.annotations,instruction:"只提出有实际图示支持的完整工程属性候选;xx.xxx是图例占位,范围不能取端点。剖面编号须对应实际区段/构件,单位须提供实际单位及说明实体,工况须区分主体和局部。无依据的保留unresolved;不要为补齐数量填数。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]}。"}),!0,{files:k.map((a,b)=>({name:`原实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});e.refinement={defects:q,raw:c};let g=a9(c)?.candidates;if(!Array.isArray(g)||g.length>6)throw Error("写前图示纠正未返回完整候选,未执行属性准入");p=g.map(o)}let r=[];for(let g of(e.results=r,p))try{if(j>=12)throw Error("本轮图示候选复核预算已用完,该候选未测量");if(g.evidence?.filePath!==d.filePath||g.evidence?.frameId!==d.frameId||!d.attributes.includes(g.attribute))throw Error("图示候选跨来源、图框或属性");let e=a.read(b=>a6(b,a.project,g.evidence)),h=[e.value,...e.unitAnnotations,...e.scopeAnnotations].map(a=>a.position),i=(function(a,b){if(!b.length||b.some(a=>!Number.isFinite(a.x)||!Number.isFinite(a.y)))throw Error("局部阅读缺少实际实体位置");let c=Math.max(a.maxX-a.minX,a.maxY-a.minY);if(!Number.isFinite(c)||c<=0)throw Error("图框范围无效");let d=[];for(let a of b){let b=d.find(b=>b.every(b=>Math.hypot(b.x-a.x,b.y-a.y)<=.24*c));b?b.push(a):d.push([a])}if(d.length>4)throw Error("数值与单位、部位的图示关系需要超过四个局部,保留未决而不截去限定");return d.map(a=>{let b=Math.min(...a.map(a=>a.x)),d=Math.max(...a.map(a=>a.x)),e=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.y)),g=Math.max(d-b+.08*c,.22*c),h=Math.max(f-e+.08*c,.28*g);return{minX:(b+d-(g=Math.max(g,.8*h)))/2,maxX:(b+d+g)/2,minY:(e+f-h)/2,maxY:(e+f+h)/2}})})(b.bounds,h).map(b=>a.read(c=>a5(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath})));j+=1;let k=await a7({project:a.project,candidate:g,views:i,readEvidence:b=>a.read(c=>a6(c,a.project,b)),reviewer:async b=>a9(await f("你是独立工程读图复核智能体,复验候选的真实适用关系。",b.prompt,!0,{files:b.images.map(a=>({name:a.name,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:3e3}))});r.push(k);let l=a8(k);l&&c.push(l)}catch(b){a.signal?.throwIfAborted(),r.push({candidate:g,status:"unmeasured",reason:b instanceof Error?b.message:String(b)})}e.status="reviewed"}catch(b){a.signal?.throwIfAborted(),e.reason=b instanceof Error?b.message:String(b)}}}))}catch(c){a.signal?.throwIfAborted(),d.push({status:"unmeasured",selection:b,reason:c instanceof Error?c.message:String(c)})}return{facts:[...new Map(c.map(a=>[(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),a])).values()].sort((a,b)=>a.factId.localeCompare(b.factId)),readings:d,complete:!1}}var bd=c(36594);let be=a=>!!a&&"object"==typeof a&&!Array.isArray(a),bf=a=>"string"==typeof a&&!!a.trim(),bg=a=>Array.isArray(a)?a.map(bg):be(a)?Object.fromEntries(Object.keys(a).sort().filter(b=>void 0!==a[b]).map(b=>[b,bg(a[b])])):a,bh=a=>{let b;return b=JSON.stringify(bg(a)),(0,e.createHash)("sha256").update(b).digest("hex")},bi="project-model-v11-shared-attributes-2026-10-13",bj=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function bk(a){let b=(0,l.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}}async function bl(a){let b=a.global.input.signal;(0,a1.Te)(b);let c=[...new Set(a.prepare.materialFilePaths)].sort(),f=ai(a.prepare.projectRoot,c);if(f.length)throw Error(`项目资料解析检查未通过:${f.map(a=>a.message).join(";")}`);let g=await (0,ah.E8)(a.prepare.projectRoot,c,b),h=c.flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({chapterId:"project-model",filePath:b,content:c.content,sectionTitle:c.sectionTitle,chunkIndex:c.chunkIndex,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),score:1,source:"parsed-project-model"}))),i=(0,ah.VD)(a.prepare.projectRoot,a=>a.listIndexSourceStates(c)),j=(0,s.cW)(af().join(j0(a.prepare.projectRoot),"assets","source-editions"),c),m=(0,s.mb)(c.map(b=>({sourceFile:b,parsedSha256:g[b].sha256,sourceSha256:i.find(a=>a.relativePath===b).contentHash,sourceKind:a.prepare.kindByPath?.get(b),processingType:h.some(a=>a.filePath===b&&/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(a.content))?"table":a.understanding.fileProcessingByPath.get(b),chunks:h.filter(a=>a.filePath===b).map(a=>({chunkIndex:a.chunkIndex,content:a.content}))})),j.confirmations,j.assets),n=(0,al.Zh)(a.prepare.template,a.prepare.documentSpec).filter(b=>{let c=a.planning.requiredContentNeeds?.[b.name];return!c||"project-fact"===c.kind}),o=k(a.planning.generationDiagnostics),p=(0,aj.C)("projectFacts"),q=af().join(j0(a.prepare.projectRoot),"assets","reviewed-cad"),r=ad().existsSync(q)?ad().readdirSync(q).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort().map(a=>[a,(0,e.createHash)("sha256").update(ad().readFileSync(af().join(q,a))).digest("hex")]):[],t=bj({version:bi,targets:n,localFactTargets:(0,al.Uy)(a.prepare.template,a.prepare.documentSpec),domain:a.prepare.domainProfile,prompt:a.prepare.factExtractionPromptTexts,modelIdentity:o,algorithmIdentity:p,registeredCadAssets:r,extractionTuning:{maxChars:(0,a2.z)().factExtractionMaxChars}}),u=bj({sources:g,contextHash:t,sourceVersionPolicyId:m.policyId}),v=af().join(j0(a.prepare.projectRoot),"project-model-cache",`${u}.json`);if(p&&ad().existsSync(v))try{let a=JSON.parse(ad().readFileSync(v,"utf8")),b=a.data;if(!b||bj(b)!==a.sha256)throw Error("项目事实缓存内容校验不通过");if(b.version===bi&&b.inputHash===u&&bj(b.sources)===bj(g)&&b.sourceVersionPolicy?.policyId===m.policyId&&Array.isArray(b.facts)&&Array.isArray(b.tables)&&Array.isArray(b.unresolvedFields))return{...b,cacheHit:!0}}catch{}let w=(0,ak.d6)({evidence:h,template:a.prepare.template,spec:a.prepare.documentSpec,diagnostics:a.planning.generationDiagnostics,parsedOnly:!0}),x=a=>{let b=(0,l.nD)(a)?.key;return!b||!["project_name","project_scope","project_code","owner","project_location","foundation_support_form"].includes(b)||(0,ak.R7)(b,a.value)},y=(0,a1.lX)([...w.localFacts,...w.projectBasicFacts,...(0,l.UT)(h),...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 f of a.matchAll(d)){let a=f[3].trim(),d=f[5].trim();if(!a||!d||/^(?:无|暂无|未指定|见.*)$/u.test(d))continue;let g=`source-brand:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,f[1],f[4],a,d])).digest("hex").slice(0,24)}`;b.set(g,{factId:g,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${f[1]}C${f[4]}`,sourceSpan:f[0]}})}}return[...b.values()]}(h),...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 f=d[3];for(let[a,g,h]of[["building_count","建设栋数",`${d[1]}栋`],["building_floors","建筑层数",`${d[2]}层`]]){let i=`source-scale:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,f,a,h])).digest("hex").slice(0,24)}`;b.set(i,{factId:i,fieldId:a,fieldName:g,key:g,objectName:f,value:h,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()]}(h)]).map(bk).filter(x);y.push(...(0,bd.Yn)(h,m));let z=y.filter(a=>(0,a4.p)(a).requiresTechnicalDecision&&/\.(?:dwg|dxf)$/iu.test(a.sourceFile)),A=!1;if(z.length){let c=[...new Set(z.flatMap(a=>{let b=(0,l.nD)(a)?.key??a.fieldId??a.key;return"excavation_depth"===b?["ground_elevation","pit_bottom_elevation"]:"foundation_depth"===b?["ground_elevation","foundation_elevation"]:[b]}))],d={snapshotId:bj({inputHash:u,sources:g,stage:"cad-before-freeze"}),sources:g},e=function(a){let b,c=(b=a.generatedDir,af().join(b,"assets","reviewed-cad")),d=new Map,e=[];if(!ad().existsSync(c))return{facts:[],reuseReceipts:e,complete:!1};for(let b of ad().readdirSync(c).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort()){let f=af().join(c,b),g=b.slice(0,-5);try{let b=JSON.parse(ad().readFileSync(f,"utf8"));if(!be(b)||b.id!==g||!be(b.data)||"reusable-reviewed-cad-v1-2026-10-08"!==b.data.version||b.contentHash!==bh(b.data)||!be(b.data.provenance)||b.id!==bh({version:b.data.version,provenance:b.data.provenance}))throw Error("CAD历史资产完整性校验失败");let{audit:c,results:h,modelMetadata:i}=function(a){let b;if(!be(a)||!bf(a.kind)||!be(a.result))throw Error("历史CAD资产必须为完整审核envelope,不能仅提供事实或项目模型");if(bf(a.model))b={scope:"original-audit",model:a.model};else if(be(a.llm)&&Array.isArray(a.llm.modelChoices)&&a.llm.modelChoices.some(a=>be(a)&&bf(a.chosen)&&bf(a.provider)))b={scope:"original-audit-call-ledger",llm:a.llm,perResultReviewerModel:"not-recorded"};else throw Error("历史CAD审核缺少原模型来源元数据,不能冒称本轮重新视觉审核");let c=(Object.hasOwn(a.result,"candidate")?[a.result]:Array.isArray(a.result.readings)?a.result.readings.flatMap(a=>be(a)&&Array.isArray(a.results)?a.results:[]):[]).filter(a=>be(a)&&!0===a.approvedForWriting);if(!c.length)throw Error("历史CAD资产没有完整核准结果,裸事实和未决候选不能复用");for(let a of c){if(!be(a.candidate)||!be(a.candidate.evidence)||!be(a.proof)||!be(a.review)||"confirmed"!==a.review.status||!bf(a.review.reason)||!1!==a.expertValidated||!bf(a.candidate.objectName)||!bf(a.candidate.condition)||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(String(a.candidate.attribute))||!["m","mm","cm"].includes(String(a.candidate.unit))||!Array.isArray(a.sourceViewHashes)||!a.sourceViewHashes.length||a.sourceViewHashes.length>4||a.sourceViewHashes.some(a=>"string"!=typeof a||!/^[0-9a-f]{64}$/u.test(a))||!bf(a.proof.projectSnapshotId)||!bf(a.proof.parsedIdentity)||!/^[0-9a-f]{64}$/u.test(a.proof.parsedIdentity)||!be(a.proof.frame)||!be(a.proof.value)||!Array.isArray(a.proof.unitAnnotations)||!a.proof.unitAnnotations.length||!Array.isArray(a.proof.scopeAnnotations)||!a.proof.scopeAnnotations.length)throw Error("历史CAD核准缺少候选、图示证明、原审核或图像哈希");let b=a.candidate.evidence;if(!bf(b.filePath)||!bf(b.frameId)||!bf(b.valueEntityId)||!bf(b.rawValue)||!/^[+−-]?\d+(?:\.\d+)?$/u.test(b.rawValue.trim())||!Array.isArray(b.unitEntityIds)||!b.unitEntityIds.length||!Array.isArray(b.scopeEntityIds)||!b.scopeEntityIds.length||a.normalizedValue!==`${b.rawValue.trim()}${a.candidate.unit}`)throw Error("历史CAD核准的单值、单位或部位实体证据不完整");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)$/u.test(a.candidate.objectName.trim()))throw Error("历史核准尚未绑定实际施工对象,不能用来源图名代替")}return{audit:a,results:c,modelMetadata:b}}(b.data.originalAudit);if(b.data.provenance.originalAuditKind!==c.kind||bh(b.data.provenance.originalModelMetadata)!==bh(i))throw Error("历史审核来源或模型元数据与原始回执不一致");for(let[c,i]of h.entries()){if(a.requestedAttributes&&!a.requestedAttributes.includes(i.candidate.attribute))continue;let h=b.data.provenance,j={assetId:g,assetPath:f,...h,candidateIndex:c,originalProjectSnapshotId:i.proof.projectSnapshotId,status:"rejected",reason:"",currentVisionReviewPerformed:!1,expertValidated:!1};try{!function(a,b,c){let d=a.candidate.evidence,e=c(d),f=a.proof;if(e.projectSnapshotId!==b.snapshotId||e.parsedIdentity!==b.sources[d.filePath]?.sha256||f.parsedIdentity!==e.parsedIdentity||f.filePath!==d.filePath)throw Error("历史CAD审核的冻结解析指纹与当前来源不一致");let g=a=>({filePath:a.filePath,parsedIdentity:a.parsedIdentity,sceneVersion:a.sceneVersion,frame:a.frame,value:a.value,unitAnnotations:a.unitAnnotations,scopeAnnotations:a.scopeAnnotations,drawingCoordinateUnits:a.drawingCoordinateUnits});if(bh(g(e))!==bh(g(f)))throw Error("历史CAD审核的图框、量值、单位或范围实体与当前证明不一致");if(!e.unitAnnotations.some(b=>"string"==typeof b.displayText&&b.displayText.trim()===a.candidate.unit))throw Error("历史CAD单位没有当前实际单位文字实体支持");if(!a8(a))throw Error("历史审核没有准入可写事实")}(i,a.project,a.readEvidence);let b=a8(i);d.set(b.factId,b),j.status="reused",j.reason="当前冻结解析与实际实体证明均与历史完整图示审核一致;保留原审核,不宣称本轮模型重新看图",j.factId=b.factId,j.verification="current-entities-match-historical-review"}catch(a){j.reason=a instanceof Error?a.message:String(a)}e.push(j)}}catch(a){e.push({assetId:g,assetPath:f,status:"rejected",reason:a instanceof Error?a.message:String(a),currentVisionReviewPerformed:!1,expertValidated:!1})}}return{facts:[...d.values()],reuseReceipts:e,complete:!1}}({generatedDir:j0(a.prepare.projectRoot),project:d,requestedAttributes:c,readEvidence:b=>(0,ah.VD)(a.prepare.projectRoot,a=>a6(a,d,b))});y.push(...e.facts);let f=[...new Set(z.map(a=>a.sourceFile))].filter(a=>!c.every(b=>e.facts.some(c=>c.sourceFile===a&&c.fieldId===b)));a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"cad-historical-reuse.json",e,a.global.input.runId);let h=f.length?await bc({project:d,filePaths:f,requestedAttributes:c,diagnostics:a.planning.generationDiagnostics,signal:b,read:b=>(0,ah.VD)(a.prepare.projectRoot,b),fontPath:ad().existsSync("/System/Library/Fonts/STHeiti Light.ttc")?"/System/Library/Fonts/STHeiti Light.ttc":void 0}):void 0;h&&(y.push(...h.facts),A=!h.facts.length||!h.readings.length||h.readings.some(a=>"reviewed"!==a.status||Array.isArray(a.results)&&a.results.some(a=>"unmeasured"===a.status||a.review?.status==="unmeasured")),a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"cad-writing-preparation.json",h,a.global.input.runId))}let B=b=>af().join(j0(a.prepare.projectRoot),"project-model-cache",`source-${bj([b,g[b].sha256,t])}.json`),C=a=>{let b=(0,d.K3)(a.value);return!!b&&h.some(c=>c.filePath===a.sourceFile&&(a.sourceRef?.chunkIndex===void 0||a.sourceRef.chunkIndex===c.chunkIndex)&&(0,d.K3)(c.content).includes(b))};for(let a of c)if(p)try{let b=JSON.parse(ad().readFileSync(B(a),"utf8"));bj(b.data)===b.sha256&&Array.isArray(b.data)&&y.push(...b.data.filter(C).map(bk).filter(x))}catch{}let D=n.filter(a=>a.required&&!y.some(b=>(0,ak.PV)(b,a))),E=new Map;for(let b of D)E.set(b.id,h.filter(a=>(0,al.I2)(a,b)).sort((c,d)=>{let e=c=>(0,ag.carrierStrength)((0,ag.domainForAttribute)(b.name),(0,ag.resolveCarrier)({kind:a.prepare.kindByPath?.get(c.filePath)??c.processingType??"other",section:c.sectionTitle}));return e(d)-e(c)||d.content.split(b.name).length-c.content.split(b.name).length||c.filePath.localeCompare(d.filePath)||c.chunkIndex-d.chunkIndex}));let F=[...new Map(D.flatMap(a=>E.get(a.id)??[]).map(a=>[`${a.filePath}\0${a.chunkIndex}\0${a.sectionTitle}\0${a.content}`,a])).values()];a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"project-fact-extraction-scope.json",{projectAttributeTargets:n,missingAttributes:D.map(a=>({...a,candidateCount:E.get(a.id)?.length??0})),otherContentDuties:(0,al.Uy)(a.prepare.template,a.prepare.documentSpec).filter(a=>!n.some(b=>b.id===a.id)),selectedChunks:F.length,selectedSourceChars:F.reduce((a,b)=>a+b.content.length,0),sourceFiles:c.length,structuredTables:w.structuredTables.length,boundary:"完整解析来源、结构化表与非共同属性义务保留;非共同属性不是全局待填单值字段,也不表示正文已完成"},a.global.input.runId);let G=!1;if(F.length>0){let c={...a.prepare.template,chapters:a.prepare.template.chapters.map(a=>({...a,requiredFacts:a.requiredFacts.filter(a=>D.some(b=>b.id===a||b.name===a))}))},d=a.prepare.documentSpec?{...a.prepare.documentSpec,factFields:a.prepare.documentSpec.factFields.filter(a=>D.some(b=>b.id===a.id))}:void 0,e=await (0,ak.OQ)(F,a.prepare.factExtractionPromptTexts,c,d,b,a.planning.generationDiagnostics,b=>{a$(a,{batch:"generation.understanding",stage:{type:"fact_extraction",roleId:"project-attribute-extraction",status:"running",message:"done"===b.phase?`共同属性第${b.index}/${b.total}批已核验,累计${b.factsSoFar}条`:`共同属性第${b.index}/${b.total}批${"waiting"===b.phase?"仍在读取":"开始读取"},本批${b.batchChars}字符`}}),a.global.emitProgress()},{cache:an(af().join(j0(a.prepare.projectRoot),"source-fact-response-cache"),a.planning.generationDiagnostics,"literal-source-fact-response-v2"),sourceIdentities:g,onReceipt:b=>{a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),`source-fact-batch-${b.index}.json`,b,a.global.input.runId)}});(0,a1.Te)(b);let f=(0,a1.lX)(e.facts).filter(C).map(bk).filter(x);for(let a of(y.push(...f),G=e.stages.some(a=>"failed"===a.status),new Set(f.map(a=>a.sourceFile)))){if(!p||!g[a])continue;let b=[...new Map(y.filter(b=>b.sourceFile===a&&C(b)).map(a=>[bj([a.fieldId,a.key,a.objectName,a.value,a.sourceRef]),a])).values()],c=B(a);ad().mkdirSync(af().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.tmp`;ad().writeFileSync(d,JSON.stringify({data:b,sha256:bj(b)})),ad().renameSync(d,c)}}if(bj((0,ah.Y8)(a.prepare.projectRoot,c))!==bj(g))throw Error("写前理解期间解析资料已变化,不能将旧候选与新来源一起冻结");let H={version:bi,inputHash:u,sources:g,sourceVersionPolicy:m,facts:y,tables:w.structuredTables,unresolvedFields:D.filter(a=>!y.some(b=>(0,ak.PV)(b,a))).map(a=>({id:a.id,name:a.name,status:"unmeasured",candidateCount:E.get(a.id)?.length??0,phase:E.get(a.id)?.length?"attribute-extraction":"source-location",provesMissingSource:!1,candidateLocations:(E.get(a.id)??[]).map(a=>({sourceFile:a.filePath,chunkIndex:a.chunkIndex})),reason:E.get(a.id)?.length?"已有相关解析原文,属性理解尚未完成;不能凭抽取失败认定原文缺料":"当前字段关键词尚未定位原文,未据此判定全库缺料"})),cacheHit:!1};if(p&&!G&&!A){ad().mkdirSync(af().dirname(v),{recursive:!0});let a=`${v}.${process.pid}.tmp`;ad().writeFileSync(a,JSON.stringify({data:H,sha256:bj(H)})),ad().renameSync(a,v)}return H}function bm(a,b){if(b.version!==bi)throw Error("项目事实快照版本失配,须按当前语义属性重新准备,不能转换旧快照用于生成");if(!b.sourceVersionPolicy)throw Error("项目恢复缺少冻结来源版本用途账,须按当前来源重新准备");if((0,s.gM)(b.sourceVersionPolicy),(0,s.cW)(af().join(j0(a),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("来源发行确认资产已变化,原项目快照不能继续复用");let{snapshotId:c,...d}=b;if(bj(d)!==c)throw Error("项目事实快照已被改写,不能沿用原快照身份");if(0===Object.keys(b.sources).length){if(b.facts.length>0)throw Error("项目事实没有解析来源身份,不能进入写作或交付评价");return}let e=ai(a,Object.keys(b.sources));if(e.length)throw Error(`写作资料当前解析状态未通过:${e.map(a=>a.message).join(";")};保留草稿,不能使用历史解析继续写作或交付评价`);if(bj((0,ah.Y8)(a,Object.keys(b.sources)))!==bj(b.sources))throw Error("写作期间解析资料已经变更,当前事实快照已过期;保留草稿并使用新快照重新规划受影响任务")}let bn={version:"professional-document-workflow-v139",rules:["frozen-global-crew-staffing-with-bounded-phase-requests","real-construction-activities-separated-from-authoring-with-globally-frozen-crew-identities-before-phase-details","upload-operation-progress-owned-by-actual-multipart-project-with-query-root-for-early-failure-scope","portable-source-bound-pdf-page-image-inspection-and-selected-full-dpi-composition-with-file-url-module-loading","precise-array-and-frozen-detail-field-feedback-with-explicit-organization-quantity-prompt","complete-located-phase-input-defects-with-rated-capacity-and-quantity-purpose-boundaries-and-task-specific-resource-view","lossless-author-plan-tables-real-initial-context-references-and-calculated-organization-reconciliation-before-writing","explicit-phase-quantity-package-routing-lossless-source-tables-and-completed-real-prefix-warmup","exact-frozen-source-search-and-first-author-syntax-feedback-before-no-progress-stop","complete-basic-project-identity-fields-without-following-administration-label-or-outer-code-wrapper","whole-workbook-bill-discovery-and-complete-unit-equivalence-with-preserved-source-occurrences","default-protected-excel-source-reading-without-encrypted-binary-text-publication","server-owned-body-subheading-numbers-with-frozen-outline-and-unchanged-toc-depth","current-native-bill-header-and-source-symbol-preservation-through-quantity-reading","source-edition-confirmation-assets-bound-to-selected-complete-source-scope","complete-parsed-source-export-without-retrieval-overlap-or-heuristic-text-deletion","explicit-blind-controller-and-source-bound-monochrome-formatting-through-deliverables","registered-field-content-nature-is-shared-by-classification-and-attribute-extraction-without-model-reclassification","retired-unwired-fact-placement-tools-and-old-chapter-task-planner-without-compatibility-adapters","explicit-source-collection-content-kind-with-complete-membership-duty-and-without-scalar-value-admission","shared-project-attribute-preparation-separated-from-complete-source-collection-and-author-content-duties","current-source-bound-literal-extraction-batches-with-independent-validation-persistence-and-shared-provider-concurrency","shared-author-system-and-canonical-plan-prefix-with-task-specific-delegation-at-tail","same-selected-model-composition-separated-from-chief-engineering-reasoning-with-user-thinking-preference-preserved","explicit-full-document-normative-collection-dependency-with-local-basis-tasks-parallel","complete-spatial-region-label-legends-and-task-local-preview-failure-isolation","single-reference-discovery-owner-and-author-task-local-chief-question-indices","shared-provider-capacity-and-evidence-progress-without-cad-text-discard","semantic-project-facts-without-global-raw-numeric-token-expansion","namespaced-original-member-references-with-server-recorded-batch-responses","current-source-model-and-protocol-bound-completed-discovery-response-reuse","independent-persisted-parsed-documents-and-knowledge-internal-source-unit-identities","uploaded-original-disappearance-never-deletes-indexed-knowledge","text-conservation-preview-and-structural-query-without-original-file-dependency","vector-row-file-chunk-and-parsed-version-validation-before-sqlite-hydration","provider-default-output-and-selected-model-role-based-thinking-without-total-generation-ceilings","task-local-facts-and-source-use-dependencies-with-condition-aware-query-diagnostics","source-file-ownership-routing-without-per-section-model-repetition","strict-duplicate-json-key-rejection-before-body-or-tool-admission","per-transport-cancellation-request-and-actual-settlement-with-unknown-usage-preserved","preserved-original-failures-and-pause-at-reported-output-truncation-without-whole-input-retries","whole-run-token-anomaly-pause-and-same-project-queue-suspension-without-cost-or-time-ceilings","current-professional-grade-required-for-delivery-with-verification-quality-gaps-separated","first-candidate-professional-pass-metrics-without-retention-percentage-delivery-veto","removed-unused-client-reservations-and-inactive-node-payload-writing-pruning","full-per-call-usage-ledger-with-unreported-cancelled-usage","lossless-repeated-evidence-projection-with-intact-thinking-tool-protocol","quantity-purpose-and-partial-boundary-aware-construction-network","professional-execution-defects-in-first-candidate-with-preserved-original","spatial-layout-schematics-without-invented-survey-dimensions","partial-draft-figure-rendering-and-explicit-portable-review-fonts","task-located-excerpt-reading-without-speculative-whole-file-scans","complete-work-package-directory-and-explicit-member-selection-without-default-paging","project-resource-authors-inherit-planned-crews-without-false-derived-peaks","professional-first-draft-and-seven-anchored-diagnostics-without-aggregate-pass-score","complete-object-directory-and-on-demand-full-source-without-preflight-candidate-census","current-v7-submission-only-and-actual-rendered-figure-evidence-without-body-node-dumps","whole-source-purpose-and-completed-claim-state-validation","single-activity-network-and-typed-source-quantity-production-plan","server-owned-author-unit-row-and-section-reference-identities","retained-body-annotation-correction-with-cumulative-meaningful-raw-writing-ledger","actual-task-executions-preserved-through-final-render-and-honest-terminal-nodes","all-actual-normative-use-catalog-with-independent-official-metadata-and-adoption-status","source-bound-hazard-candidates-without-unknown-to-nonhazard-conclusions","faithful-technical-rendering-and-actual-bookmark-page-toc-cache","no-bid-type-page-quotas-or-client-wall-clock-generation-cutoffs","chapter-fair-dynamic-author-dispatch-through-single-shared-model-capacity","single-chief-whole-outline-and-table-plan-with-complete-raw-protocol-receipts","current-candidate-identity-bound-plan-reuse-without-repeated-chapter-routing","user-outline-preservation-without-tail-character-title-rejection-or-post-plan-mutations","actual-body-normative-use-register-before-first-compilation-basis-writing","source-bound-exact-normative-name-code-and-use-position-review","single-optional-explicit-process-concurrency-without-default-four-or-six","complete-typed-tool-output-without-generic-tail-clipping","task-owned-complete-evidence-without-repeated-whole-chapter-source-matrices","authenticated-deep-frozen-source-policy-with-independent-current-use-validation","server-owned-source-evidence-indices-without-model-quote-or-hash-copy","actual-task-progress-and-substantive-body-without-title-shell-completion","explicit-input-resource-limits-without-hidden-env-or-default-document-cutoffs","active-task-engineering-decisions-with-reviewed-qualitative-adoption","professional-process-coverage-without-character-density-point-collapse","complete-source-library-and-positive-technical-obligation-discovery-without-commercial-role-closure","typed-task-local-writing-readiness-and-preserved-unresolved-source-ledger","single-common-construction-organization-plan-with-on-demand-engineering-decisions","source-first-omission-audit-after-preserved-real-first-draft","review-draft-export-separated-from-delivery-acceptance-with-bound-issue-sidecar","actual-claim-fidelity-review-separated-from-engineering-adoption-permission","balanced-same-family-source-bracket-intervals-without-unclosed-tail-suppression-or-source-rewriting","complete-physical-source-question-continuations-before-answer-purpose-review","source-context-semantic-projection-with-complete-server-owned-provenance-and-frozen-application-qualification","complete-clarification-source-groups-with-unique-original-member-accounting-and-independent-projection-binding","source-explicit-length-units-without-bare-number-or-neighbor-line-default-meters","complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification","immutable-run-inputs","user-cancellation-and-typed-progress-execution-receipts","pre-writing-frozen-project-model","frozen-prompt-skill-and-model-configuration","object-and-attribute-bound-fact-governance","pre-writing-document-contract","complete-json-results-without-tail-clipping","single-explicit-selected-model-for-all-agent-and-review-calls","selected-model-without-vendor-allowlist-and-glm53-valid-thinking-tool-history","scoped-preparation-cancellation-and-drain-before-terminal-with-source-before-model-planning","source-complete-chief-model-projection-with-authoritative-native-proof-ledger","native-json-with-explicit-shared-total-output-capacity","technical-structure-requirements-grounded-in-local-presentation-purpose","object-property-condition-and-adoption-constraints-without-onsite-verb-or-edition-shortcuts","signal-driven-generation-with-stream-progress-and-effective-source-worker-capacity","exact-decimal-value-equivalence-with-source-object-unit-and-application-conservation","strict-explicit-source-indices-without-positional-recovery-or-retired-anchor-acceptance","mutable-live-activity-snapshots-separated-from-immutable-run-evidence","physical-property-corrections-separated-from-price-and-document-description-procedures","source-row-and-header-bound-table-quantity-witnesses-without-unit-inference","engineering-interfaces-separated-from-supplier-service-entitlements-and-charge-conditions","minimal-source-bound-static-constraints-without-synthetic-performance-duties","schema-correction-bound-to-actual-prior-output-and-preserved-source-semantics","native-contract-evaluation-with-retired-density-and-legacy-score-entrypoints","explicit-shared-total-output-capacity-with-frozen-selected-thinking-policy","source-owned-edition-sections-without-whole-document-catalog-qualification","single-chief-outline-duty-coverage-without-score-keyword-module-injection","real-provider-calls-without-hidden-prefix-warmup-requests","ordered-whole-dimension-and-celsius-identity-without-invented-unit-or-currency","reusable-provider-owned-http2-pool-with-concurrent-streamed-posts-and-signal-driven-cancellation","source-bound-planned-start-date-and-trigger-preserved-through-schedule-authority","contract-bound-seven-dimension-review","structured-author-tasks-and-cumulative-rework","canonical-document-model-and-guarded-incremental-repair","fixed-outline-and-unique-task-responsibility","same-selected-model-retry-without-provider-or-model-fallback","actual-task-instances-and-shared-chapter-budget","generation-scoped-llm-context","source-grounded-project-type-and-required-content-semantics","source-analysis-without-formal-writing-quotas","parent-grounded-financial-performance-separated-from-engineering-compensation","canonical-verified-whitespace-gaps-and-failed-request-ledger-preservation","source-text-once-and-payload-bounded-original-parent-batches","complete-outline-candidates-without-density-derived-section-count-or-blind-title-deletion","project-specific-substance-without-history-driven-novelty-or-correct-content-rewriting","native-cad-literal-location-and-root-bound-annotation-reading","chief-read-scope-pagination-without-premature-human-source-deferral","versioned-native-pdf-ruled-cell-reading-with-original-glyph-conservation","painted-horizontal-cell-spans-with-physical-row-edge-conservation","explicit-native-ordinary-page-continuation-without-grid-or-canonical-inference","fact-extraction-output-capacity-bound-to-complete-source-payload","persistent-source-and-parameter-bound-ocr-cache-default","native-table-row-boundaries-and-source-preserved-physical-page-continuation","file-level-proof-once-and-scalar-source-evidence-without-child-metadata-duplication","producer-bound-metadata-excluded-with-complete-original-ledger","immutable-source-and-provenance-bound-effective-facts","chief-frozen-original-source-queries","preserved-author-annotations-without-inferred-criterion-binding","scoped-chief-engineering-controls-with-independent-applicability-review","dxf-declared-codepage-and-observable-source-judgments","unchecked-blind-means-open-and-content-only-front-matter","canonical-native-toc-without-cover-or-invented-page-numbers","question-answer-boundaries-and-independent-review-with-frozen-model","dimension-picture-blocks-and-honest-polyline-transforms","evidence-progress-driven-chief-source-and-cad-reading","native-writing-without-legacy-drawing-lock-preparation","native-writing-without-legacy-density-or-duplicate-bill-preparation","chief-reasoning-tools-with-provider-session-roundtrip","source-binding-defect-scopes-without-unrelated-writing-penalties","pre-writing-shared-construction-deployment-and-task-interfaces","no-unscoped-elevation-subtraction-in-frozen-facts","single-native-generation-and-finalization-pipeline","request-local-llm-failure-attribution","lazy-cad-instances-with-complete-source-definitions","atomic-per-file-reindex-with-preserved-valid-snapshots","explicit-user-section-protection-with-adjudicable-skill-candidates","whole-selected-material-pack-index-and-source-byte-admission","native-contract-required-for-archived-repair","source-content-page-read-closure-without-native-garbled-or-raster-shortcuts","independently-reviewed-project-source-application-and-selection-bridges","immutable-chief-source-application-receipts-and-resume-replay","native-skill-knowledge-without-retired-density-depth-or-example-contracts","preserved-technical-ocr-content-without-prose-density-page-discard","native-raster-resolution-with-verified-composite-fallback","no-whole-library-project-intelligence-preheat-or-shadow-model","preserved-original-material-without-destructive-business-text-cleaning","explicit-user-sections-and-adjudicable-skill-candidate-preview","preserved-cad-stacked-engineering-units-and-fractions","file-level-source-coverage-without-per-chunk-audit-duplication","signature-driven-cad-source-routing-for-mislabeled-files","actual-carrier-source-routing-without-binary-fragment-success","frozen-source-edition-domains-without-filename-or-model-confirmation-shortcuts","selected-source-fingerprint-worker-with-epoch-bound-complete-cache-admission","source-document-headings-without-incidental-clarification-reference-reclassification","scalar-knowledge-discovery-with-selected-parser-version-receipts","planned-arrangements-without-invented-project-geometry-or-design-properties"]},bo={prepare:["template","derivation","documentSpec","projectMaterialProfile","projectMaterialSummary","projectUnderstanding","domainProfile","readiness","promptTexts","nativeAuthorPromptTexts","nativeAuthorReferenceTexts","reviewPromptTexts","repairPromptTexts","factExtractionPromptTexts","promptDocumentRules","requirementSemantics","hasExplicitOutline"],understanding:["allEvidence","writerEvidence","indexHealth","requestedEvidencePerChapter","rolePoolRisk","retrievalCoverageReports","webResearchReport","missingItems","clarificationRequests","unfixableDeclarations","failedChapterMessages","chapterGenerationStages","chapterGenerationStagesByOrder","canonicalFacts","evaluationItems","agentWorkflow","bidComposition","hazardResolution"],planning:["generationStrategy","projectContext","tenderRequirements","clarificationOverrides","earlyTruthAudit","truthConstraint","conclusionTable","requiredContentNeeds","projectTypeDecision","sharedConstructionPlan"],blueprint:["integratedBlueprint","requirementAssignments","structureAssignments","structureUnattached"]},bp=a=>(0,e.createHash)("sha256").update(a).digest("hex");var bq=c(7258);let br=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),bs="native-execution-accounting-",bt=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function bu(a,b){let c=(0,aj.C)("documentGeneration");if(!c||!a.inputSnapshot)return;let d=b??{};return b||(0,j.er)(d,a.inputSnapshot),bt({inputHash:a.inputSnapshot.sha256,requirement:a.requirement??"",title:a.title??"",materialRoot:a.materialRoot??"",algorithm:c,models:k(d),workflowVersion:bn.version})}var bv=c(19668);c(20297);var bw=c(48161),bx=c.n(bw);class by extends Error{constructor(a,b,c){super(a),this.promptId=b,this.reason=c,this.name="PromptResolutionError"}}function bz(a,b={}){let c=[...new Set(a.map(a=>String(a||"").trim()).filter(Boolean))];if(0===c.length)throw new by("生成需要提示词:请在画布底部的输入框里用「+」选择至少一份提示词(\xa712.1 的三个输入字段:提示词、项目、文档名称)。","","empty");return c.map(a=>{var b;let c=function(a){if(a.startsWith("custom:")){let b=(function(){try{let a=JSON.parse(ac.readFileSync(ae.join(process.env.CUSTOMIZE_AGENT_HOME?ae.join(process.env.CUSTOMIZE_AGENT_HOME,".customize-agent"):ae.join(bw.homedir(),".customize-agent"),"prompts.json"),"utf-8"));return Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{return[]}})().find(b=>b.id===a);return b?{id:a,name:b.name,content:b.content,source:"custom"}:void 0}}(a);if(!c)throw new by(`提示词不存在:${a}(可能已被删除)。请在画布上用「+」重新选择提示词后重试。`,a,"unknown-id");if(!c.name.trim())throw new by(`提示词没有名字,无法判定它进哪条链:${a}`,a,"unknown-id");if(!c.content.trim())throw new by(`提示词内容为空:${c.name}(${a})`,a,"empty");return{...c,contentHash:(b=c.content,(0,e.createHash)("sha256").update(b).digest("hex").slice(0,12)),contentPreview:c.content.replace(/\s+/gu," ").trim().slice(0,160),category:function(a){let b=String(a||"");return/总控|writer|写作主控|施工组织设计总控/iu.test(b)?"writer":/extract|extraction|抽取|提取|清单|图纸|品牌|识别/iu.test(b)?"extraction":/format|排版|格式|暗标/iu.test(b)?"formatting":/chapter_generation|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/iu.test(b)?"chapter":"reference"}(c.name)}})}class bA{constructor(a){this.controller=new AbortController,this.pending=new Set,this.signal=a?AbortSignal.any([a,this.controller.signal]):this.controller.signal}fail(a,b="preparation"){if(this.firstFailure||(this.firstFailure={error:a,origin:b,at:Date.now()}),!this.controller.signal.aborted){let a=Error("本轮前置工作已失败,取消其余准备任务",{cause:this.firstFailure.error});a.name="AbortError",this.controller.abort(a)}}get failure(){return this.firstFailure?.error}get failed(){return void 0!==this.firstFailure}run(a){this.signal.throwIfAborted();let b=Promise.resolve().then(()=>(this.signal.throwIfAborted(),a()));return this.pending.add(b),b.then(()=>{this.pending.delete(b)},a=>{this.pending.delete(b),this.fail(a)}),b}async pool(a,b,c){if(this.failed)throw this.failure;if(this.signal.throwIfAborted(),!Number.isSafeInteger(c)||c<1)throw Error("准备任务并发数必须是正整数");let d=Array(a.length),e=0,f=Array.from({length:Math.max(0,Math.min(a.length,Math.floor(c)))},()=>this.run(async()=>{for(;!this.signal.aborted&&e<a.length;){let c=e++;d[c]=await b(a[c],c),this.signal.throwIfAborted()}}));if(await Promise.allSettled(f),this.failed)throw this.failure;return this.signal.throwIfAborted(),d}async drain(){for(;this.pending.size;)await Promise.allSettled([...this.pending])}receipt(){let a=this.firstFailure?.error;return{pending:this.pending.size,drained:0===this.pending.size,signalAborted:this.signal.aborted,firstFailure:this.firstFailure?{at:this.firstFailure.at,origin:this.firstFailure.origin,name:a instanceof Error?a.name:null,message:a instanceof Error?a.message:String(a)}:null}}}var bB=c(79704),bC=c(10059),bD=c(57268);let bE=["technical","source-control","document-delivery","bid-procedure","commercial","unmeasured"];function bF(a){let b=a.map(a=>({id:(0,bD.DS)(a),text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).join(";"),...a.discoveryEvidence?{originalSource:a.discoveryEvidence.quotes.map(a=>a.quote).join("\n\n"),originalSourceSpans:a.discoveryEvidence.quotes.map(a=>a.quote),sourceIndex:a.discoveryEvidence.sourceIndex}:{}}));if(new Set(b.map(a=>a.id)).size!==b.length)throw Error("当前技术候选身份重复");return b}function bG(a,b,c){if(!c||"string"!=typeof c.version||!c.version.trim())throw Error("缺少当前全文主控计划");let d=bF(a);if(!Array.isArray(c.tenderRequirements)||c.tenderRequirements.length!==d.length||new Set(c.tenderRequirements.map(a=>a.id)).size!==d.length)throw Error("全文主控计划的技术候选集合不完整或重复");let e=new Map(c.tenderRequirements.map(a=>[a.id,a]));for(let a of d){let b=e.get(a.id);if(!b||b.text!==a.text||b.source!==a.source||b.originalSource!==a.originalSource||JSON.stringify(b.originalSourceSpans)!==JSON.stringify(a.originalSourceSpans)||b.sourceIndex!==a.sourceIndex)throw Error("全文主控计划不属于当前技术候选及原始来源")}let f=a=>a.map(a=>({id:a.id,title:a.title,sections:a.sections??[]}));if(!Array.isArray(c.chapters)||JSON.stringify(f(c.chapters))!==JSON.stringify(f(b)))throw Error("全文主控计划与当前章节及小节结构不一致");if(!Array.isArray(c.requirementAssignments)||c.requirementAssignments.length!==a.length||new Set(c.requirementAssignments.map(a=>a.requirementId)).size!==a.length)throw Error("全文主控技术职责承接漏项或重复");let g=new Map(c.requirementAssignments.map(a=>[a.requirementId,a]));return a.flatMap(a=>{let e=(0,bD.DS)(a),f=g.get(e);if(!f||!bE.includes(f.scope)||"string"!=typeof f.reason||!f.reason.trim())throw Error("全文主控计划缺少实际来源用途裁决");if("technical"!==f.scope){if(void 0!==f.chapterIndex||void 0!==f.sectionTitle||void 0!==f.responsibility)throw Error("非技术用途不得发布为技术作者职责");if("technical"!==f.scope&&"unmeasured"!==f.scope){let a=d.find(a=>a.id===e),b=c.requirementSourceUnits?.find(b=>b.index===a.sourceIndex);if(!a.originalSource?.trim()||!b?.text.trim()||!(a.originalSourceSpans??[a.originalSource]).every(a=>b.text.replace(/\s/gu,"").includes(a.replace(/\s/gu,""))))throw Error("非正文渠道分流缺少当前完整原源范围依据")}return[]}let h=Number.isSafeInteger(f.chapterIndex)&&f.chapterIndex>=0?b[f.chapterIndex]:void 0;if(!h||"string"!=typeof f.sectionTitle||!h.sections?.includes(f.sectionTitle)||"string"!=typeof f.responsibility||!f.responsibility.trim())throw Error("全文主控技术职责未承接到当前真实小节");let i=d.find(a=>a.id===e),j=c.requirementSourceUnits?.find(a=>a.index===i.sourceIndex),k=i.originalSourceSpans?.length?[...i.originalSourceSpans]:i.originalSource?[i.originalSource]:[];if(!k.length||!j?.text.trim()||k.some(a=>!j.text.replace(/\s/gu,"").includes(a.replace(/\s/gu,""))))throw Error("技术职责不是当前完整原源中的真实原字证据");let l=k.join("\n\n");if(f.responsibility!==l)throw Error("全文主控技术职责文本与当前原字证据不一致");return[{entry:{...a,scopeReview:{scope:"technical",responsibility:l,reason:f.reason}},requirementId:e,chapterId:h.id,chapterTitle:h.title,sectionTitle:f.sectionTitle,plannerVersion:c.version,reason:f.reason,status:"planned"}]})}function bH(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function bI(a){let b=[...a.blocks??[]];return{version:1,recordedAt:a.recordedAt,workflowVersion:a.workflowVersion,blocks:b,chapters:[...a.chapters??[]],readings:{...a.readings,firstPassRate:function(a){let b=a.filter(a=>!a.isolatedRetry);if(0===b.length)return{firstPass:0,primary:0,rate:null};let c=b.filter(a=>0===a.attempt&&a.passed).length;return{firstPass:c,primary:b.length,rate:c/b.length}}(b).rate},...a.chapterFailures&&a.chapterFailures.length>0?{chapterFailures:[...a.chapterFailures]}:{}}}function bJ(a){return"manual_review"===a.repairability||"user"===a.owner}function bK(a){let b=a.provenance?.detectorId?.trim();return b?[b]:a.category?[a.category]:[]}function bL(a,b=80){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}var bM=c(450);function bN(a){return a.replace(/\s+/gu,"").toLowerCase()}function bO(a){return[...new Set(a)]}c(86697),RegExp(`^.{2,36}?表`,"u");let bP="[\\d一二三四五六七八九十]+";RegExp(`^表\\s*${bP}(?:[--..—]\\s*${bP})?\\s*[::、..]?\\s`,"u");let bQ=[{pattern:/横道图|甘特图/u,instruction:"以表格式时间轴呈现(阶段与节点、起止时间、与工期目标的关系);表中时间节点必须与总工期及开工竣工日期一致"},{pattern:/网络图|关键线路/u,instruction:"以文字框图呈现(工作节点、先后衔接关系、关键线路标注),节点划分必须与本工程施工组织一致"},{pattern:/组织机构图|组织框图|机构框图|机构图/u,instruction:"以文字框图呈现组织机构层级(部门或岗位、隶属关系)"},{pattern:/平面布置图|布置图/u,instruction:"以分区布置的文字框图或布置要点表呈现(分区、布置内容、管控要求)"},{pattern:/流程图|工艺流程图/u,instruction:"以文字框图呈现流程步骤与衔接关系"}];function bR(a){return bN(a).replace(/[((][^))]*[))]/gu,"").replace(/[图表]+$/u,"")}let bS=/知识库|系统暂未|项目资料暂未|暂未明确|待确认|待资料复核|待系统|通用兜底(?:段落|模板)?|兜底(?:占位|模板|内容)|未检索到|资料不足|无法确认|建议补充|COL\d+|可核验信息|以本项目招标文件明确内容为准/u,bT=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;RegExp(String.raw`\S.+(?:\s|[。;;])${bT}\S.+(?:\s|[。;;])${bT}\S`,"u"),RegExp(`\r?
|
|
19
|
+
`;try{ac.mkdirSync(ae.dirname(e),{recursive:!0}),ac.appendFileSync(e,h,"utf8")}catch(a){throw new au("node-log-write-failed",`节点日志写入失败(S3.2:节点日志是唯一真相源,不可静默丢 ⇒ 停止生成并上报):${e}:${a instanceof Error?a.message:String(a)}`,{docId:d,file:e},{cause:a})}return c}function aB(a,b,c={}){return aA({docId:a,op:"upsert",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function aC(a,b,c={}){return aA({docId:a,op:"status",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function aD(a,b){return function(a,b){let c,d=ax(a),e=aw(d,b);try{c=ac.readFileSync(e,"utf8")}catch(a){if("ENOENT"===a.code)return{nodes:[],records:[],lineCount:0,tornTail:!1};throw a}let f=c.endsWith("\n"),g=!f&&c.length>0,h=c.lastIndexOf("\n"),i=f?c.slice(0,-1):h>=0?c.slice(0,h):"",j=""===i?[]:i.split("\n"),k=[];for(let a=0;a<j.length;a+=1){let b,c=j[a];if(""!==c.trim()){try{b=JSON.parse(c)}catch(b){throw new au("node-log-corrupt",`节点日志第 ${a+1} 行不是合法 JSON(文件损坏或被外部改写):${e}`,{docId:d,file:e,line:a+1},{cause:b})}k.push(function(a,b,c,d){let e=(a,e)=>new au("node-log-corrupt",`节点日志第 ${d} 行${a}:${c}`,{docId:b,file:c,line:d},void 0===e?void 0:{cause:e});if(!a||"object"!=typeof a)throw e("不是对象");if(1!==a.v)throw e(`版本 v=${String(a.v)} 无法识别(本版本只认 1)`);if(!Number.isFinite(a.t))throw e("缺时间戳 t");if("upsert"!==a.op&&"status"!==a.op&&"rollup"!==a.op)throw e(`op「${String(a.op)}」未知`);if(!a.node||"object"!=typeof a.node)throw e("缺 node");try{if("upsert"===a.op)return ay(a.node),{v:1,t:a.t,op:"upsert",node:a.node};return az(a.node),{v:1,t:a.t,op:a.op,node:a.node}}catch(a){throw e(`的 node 不合法(${a instanceof Error?a.message:String(a)})`,a)}}(b,d,e,a+1))}}return{nodes:function(a,b,c){let d=new Map;for(let e of a){if("upsert"===e.op){d.set(e.node.id,{...e.node});continue}let a=d.get(e.node.id);if(!a)throw new au("node-log-patch-target-missing",`${e.op} 事件指向 ${e.node.id},但它没有 upsert(append-only 日志里节点必须先出现):${c}`,{docId:b,file:c});d.set(e.node.id,function(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a)),d={...a,...c,id:a.id,startedAt:a.startedAt};return void 0!==c.metrics&&void 0!==a.metrics&&(d.metrics={...a.metrics,...c.metrics}),function(a){let b=a.progress;return!b||"completed"!==a.status||"number"!=typeof b.total||b.total<=0||"number"!=typeof b.current||b.current>=b.total?a:{...a,progress:{...b,current:b.total}}}(d)}(a,e.node))}return[...d.values()].sort(ap)}(k,d,e),records:k,lineCount:j.length,tornTail:g}}(a,b).nodes}let aE={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},aF={"knowledge-base":"知识库","document-readiness":"生成准备度检查","llm-json":"LLM 事实抽取"};function aG(a){return a?aF[a]:void 0}function aH(a,b={}){let c={executionVersion:2,group:a.type,...a,...b},d=c.roleName||aG(c.roleId),e=c.subtitle||d||aG(c.roleId);return{...c,roleName:d,subtitle:e,title:function(a){var b;let c=aE[b=a.type]??b,d=a.subtitle||a.roleName||aG(a.roleId),e=d&&!c.includes(d)?`${c} \xb7 ${d}`:c,f="string"==typeof a.title&&a.title.length>0?a.title:void 0;return f&&f!==c?f:e}({...c,roleName:d,subtitle:e})}}let aI="stage-details";function aJ(a){return a.source===aI}let aK={prepare:{type:"prepare",title:"准备"},understand:{type:"understand",title:"理解资料"},plan:{type:"plan",title:"规划结构"},blueprint:{type:"blueprint",title:"派生蓝图"},write:{type:"write",title:"逐章写作"},close:{type:"close",title:"全篇收口"},deliver:{type:"deliver",title:"交付"}};function aL(a,b,c="completed",d){let e=aK[b];a$(a,{batch:{prepare:"generation.prepare",understand:"generation.understanding",plan:"generation.planning",blueprint:"generation.blueprint",write:"generation.write",close:"finalize.pipeline",deliver:"finalize.delivery"}[b],id:aM(b),type:e.type,title:e.title,status:c,..."string"==typeof d&&d.length>0?{metrics:aZ(d)}:{}})}function aM(a){return`phase:${a}`}function aN(a){return`chapter:${a}`}let aO={running:"running",success:"completed",failed:"failed",partial:"repairing",skipped:"blocked"};function aP(a,b={}){let c;try{c=aD(a,b.baseDir)}catch{return 0}let d=new Map;for(let a of c){if(!a?.id)continue;let b=d.get(a.id);d.set(a.id,b?{...b,...a}:a)}let e=new Map;for(let a of d.values())a.parentId&&e.set(a.parentId,[...e.get(a.parentId)??[],a]);let f=new Set(["round.decide"]),g=0,h=Date.now(),i=[...d.values()].filter(a=>!aQ.has(a.status));if(0===i.length)return 0;let j=a=>{let b=0,c=a;for(;c.parentId&&d.has(c.parentId)&&b<64;)c=d.get(c.parentId),b+=1;return b},k=[...i].sort((a,b)=>j(b)-j(a)),l=new Map,m=a=>l.get(a.id)??a.status;for(let c of k){let d=e.get(c.id)??[];if(0===d.length){let d=b.documentOutcome?f.has(c.type)&&"completed"===b.documentOutcome?"completed":"completed"===b.documentOutcome?"blocked":b.documentOutcome:f.has(c.type)?"completed":"running";if("running"===d)continue;aC(a,{id:c.id,status:d,completedAt:h,metrics:b.documentOutcome?{closedBySweep:!0,closedAtDocumentEnd:!0,documentOutcome:b.documentOutcome}:{closedBySweep:!0,closedRecordNode:!0}},{baseDir:b.baseDir}),l.set(c.id,d),g+=1,b.documentOutcome;continue}if(d.some(a=>!aQ.has(m(a))))continue;let i=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=ao.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(d.map(a=>m(a)))??"completed";aC(a,{id:c.id,status:i,completedAt:h,metrics:{closedBySweep:!0,closedChildren:d.length,...b.documentOutcome?{closedAtDocumentEnd:!0}:{}}},{baseDir:b.baseDir}),l.set(c.id,i),g+=1}return g}let aQ=new Set(["completed","failed","blocked","paused"]),aR={"generation.prepare":{phase:"prepare",typeByStageType:{role_binding:"prepare",validation:"prepare",file_understanding:"prepare"},fallbackType:"prepare"},"generation.understanding":{phase:"understand",typeByStageType:{knowledge_retrieval:"understand",file_understanding:"understand",fact_extraction:"understand",validation:"understand",reference:"understand"},fallbackType:"understand"},"generation.planning":{phase:"plan",typeByStageType:{validation:"plan",role_binding:"plan",knowledge_retrieval:"plan",fact_extraction:"plan"},fallbackType:"plan"},"generation.blueprint":{phase:"blueprint",typeByStageType:{validation:"blueprint",file_understanding:"blueprint",chapter_generation:"blueprint"},fallbackType:"blueprint"},"generation.write":{phase:"write",typeByStageType:{chapter_generation:"write",knowledge_retrieval:"understand"},fallbackType:"write"},"finalize.rebuild":{phase:"close",typeByStageType:{validation:"close",fact_extraction:"close",reference:"close",knowledge_retrieval:"close"},fallbackType:"close"},"finalize.delivery":{phase:"deliver",typeByStageType:{validation:"deliver",reference:"deliver",fact_extraction:"deliver"},fallbackType:"deliver"},"finalize.pipeline":{phase:"deliver",typeByStageType:{reference:"deliver",validation:"deliver",fact_extraction:"deliver"},fallbackType:"deliver"},"document.lifecycle":{phase:"prepare",typeByStageType:{validation:"prepare",reference:"prepare"},fallbackType:"prepare"}};function aS(a){let b=a.replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"");return b.length>0?b.slice(0,48):"none"}function aT(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b.toString(16).padStart(8,"0")}function aU(a){return"chapter_generation"===a.type||/^agent-chapter-task-/u.test(a.roleId||"")}let aV=globalThis,aW=aV.__customizeAgentNodeLedgers??=new Map;function aX(a,b){let c=aw(a,b),d=aW.get(c);if(d&&(0,ac.existsSync)(c))return d;let e=aD(a,b),f=new Map,g=0;for(let a of e)f.set(a.id,a.seq),Number.isFinite(a.seq)&&(g=Math.max(g,a.seq+1));let h={nodes:new Map(e.map(a=>[a.id,a])),seqById:f,nextSeq:g};return aW.set(c,h),h}function aY(a){return"string"==typeof a.title&&a.title.length>0?a.title:String(a.type)}function aZ(a){return"string"!=typeof a||0===a.length?{}:a.length<=160?{note:a,noteChars:a.length}:{note:`${a.slice(0,160)}…`,noteChars:a.length}}function a$(a,b){let c=function(a){let b=aR[a];if(!b)throw new au("node-log-node-invalid",`批次「${String(a)}」未在迁移台账内(S10.1:逐批迁移)。要迁移新的一批:先在 emitNode.ts 的台账注释与 EMIT_NODE_BATCHES 里登记,再改调用点——半个批次(同一事实两个写入者)比不迁移更糟。`);return b}(b.batch),d=b.stage,e=b.baseDir??a.nodeLogBaseDir??a.global?.nodeLogBaseDir,f=function(a){let b="string"==typeof a.documentId&&a.documentId.length>0?a.documentId:void 0,c=a.global?.input?.documentId;return b??("string"==typeof c&&c.length>0?c:void 0)}(a),g=f?aX(f,e):void 0,h=d?.roleId,i=b.round,j=b.type??(h&&void 0!==i?"round":void 0)??c.typeByStageType[d?.type??""]??c.fallbackType,k=b.title??(h&&void 0!==i?d?.subtitle??(d?aY(d):void 0):void 0)??(d?aY(d):void 0)??String(j),l=void 0!==i&&i>1&&!k.includes(`第 ${i} 轮`)?`${k} \xb7 第 ${i} 轮`:k,m=b.status??(d?aO[d.status]:void 0)??"running",n=b.progress??d?.progress,o=n&&"completed"===m&&"number"==typeof n.total&&n.total>0&&"number"==typeof n.current&&n.current<n.total?{...n,current:n.total}:n,p=b.issues??function(a){let b=a?.details;if(Array.isArray(b)&&0!==b.length)return b.map(a=>({level:"info",message:a,source:aI}))}(d),q={...aZ(d?.message),...d?{stageType:d.type,stageRoleId:d.roleId||"",...void 0!==d.promptId?{stagePromptId:d.promptId}:{},...void 0!==d.subtitle?{stageSubtitle:d.subtitle}:{},...void 0!==d.order?{stageOrder:d.order}:{}}:{},...void 0!==i?{roundIteration:i}:{},...b.metrics??{}};if(!f||!g)return{...void 0!==i?{round:i}:{},skippedNodes:"no-doc-id"};let r=b.id??(d?h&&void 0!==i?`round:${h}`:`st.${aS(d.type)}.${aS(d.roleId||"none")}.${aT(aU(d)?[d.type,d.roleId||"",d.promptId||"",d.subtitle||"",d.order??""].join("::"):[d.type,d.roleId||"",d.promptId||""].join("::"))}`:`${aS(j)}.${aT(`${b.parentId??aM(c.phase)}::${l}`)}`),s=b.chapterId??(d&&aU(d)?function(a){let b=/^agent-chapter-task-(.+)$/u.exec(a.roleId||"");return b?.[1]}(d):void 0),t=b.parentId??(s?aN(s):void 0)??aM(c.phase),u=e?{baseDir:e}:{},v=t.startsWith("chapter:")?b.chapterTitle:t.startsWith("round:")?b.parentTitle??d?.subtitle??d?.title:b.parentTitle;!function a(b,c,d,e){if(d.nodes.has(c))return;let f=function(a){let b=/^phase:(.+)$/u.exec(a);if(b){let a=aK[b[1]];if(a)return{type:a.type,title:a.title}}return a.startsWith("chapter:")?{type:"chapter",title:a.slice(8),parentId:aM("write")}:a.startsWith("round:")?{type:"round",title:a.slice(6),parentId:aM("close")}:void 0}(c);if(!f)throw new au("node-log-node-invalid",`parentId「${c}」不是本桥认识的结构化 id(phase:* / chapter:* / round:* 三种前缀)。裸 id 的父节点必须先由某个调用点自己 emit 出来——否则补丁会打在空气上(node-log-patch-target-missing)。要新增结构层:在 parseStructuralId 与 PHASE_ROOTS 里显式登记,不要就地拼字符串。`);f.parentId&&a(b,f.parentId,d,{baseDir:e.baseDir});let g=d.nextSeq;d.nextSeq+=1;let h={id:c,...void 0!==f.parentId?{parentId:f.parentId}:{},type:f.type,title:e.title??f.title,seq:g,status:"running",startedAt:Date.now()};aB(b,h,e.baseDir?{baseDir:e.baseDir}:{}),d.nodes.set(h.id,h),d.seqById.set(h.id,g)}(f,t,g,{...void 0!==v?{title:v}:{},...u});let w=g.nodes.get(r),x=b.startedAt??w?.startedAt??Date.now(),y=void 0!==w&&!aQ.has(w.status),z=aQ.has(m)&&!y,A=b.completedAt??(aQ.has(m)?z?x:Date.now():void 0),B=z?{...q,instantEvent:!0}:q;if(w){let a={id:r,status:m,...w.title!==l?{title:l}:{},...void 0!==o?{progress:o}:{},...Object.keys(B).length>0?{metrics:B}:{},...void 0!==p?{issues:p}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},...void 0!==A?{completedAt:A}:{}};aC(f,a,u),g.nodes.set(r,a_(w,a))}else{let a={id:r,parentId:t,type:j,title:l,seq:g.nextSeq,status:m,startedAt:x,...void 0!==A?{completedAt:A}:{},...void 0!==o?{progress:o}:{},...Object.keys(B).length>0?{metrics:B}:{},...void 0!==p?{issues:p}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{}};return aB(f,a,u),g.seqById.set(r,a.seq),g.nextSeq+=1,g.nodes.set(r,a),{nodeId:r,seq:a.seq,status:m,...void 0!==i?{round:i}:{}}}return{nodeId:r,seq:g.seqById.get(r)??w.seq,status:m,...void 0!==i?{round:i}:{}}}function a_(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a)),d={...a,...c,id:a.id,startedAt:a.startedAt};return void 0!==c.metrics&&void 0!==a.metrics&&(d.metrics={...a.metrics,...c.metrics}),d}var a0=c(42948),a1=c(73055),a2=c(86282),a3=c(5518),a4=c(9848);function a5(a,b,c){let d=a.readSnapshot(()=>{if(!Object.hasOwn(b.sources,c.filePath))throw Error("视图文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("视图解析身份已经变化,不能与旧项目绑定");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==ag.CAD_SCENE_VERSION)throw Error("视图场景版本不兼容");if(!a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload)throw Error("视图图框身份不存在");return{actual:d,scene:a.loadCadScene(c.filePath)}}),e=(0,ag.renderCadSourceView)(d.scene,c);return{...e,receipt:{...e.receipt,filePath:c.filePath,projectSnapshotId:b.snapshotId,parsedIdentity:d.actual.sha256,frameEntities:e.receipt.visibleAnnotations.length,recordsComplete:!0,completeScope:"projected-geometry-and-indexed-annotations-assigned-to-selected-frame",unassignedEntitiesIncluded:!1}}}function a6(a,b,c){return a.readSnapshot(()=>{if(!c||"string"!=typeof c.filePath||!Object.hasOwn(b.sources,c.filePath))throw Error("CAD证据文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("CAD证据解析身份已经变化");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==ag.CAD_SCENE_VERSION)throw Error("CAD证据结构版本不兼容");let f=a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload;if(!f)throw Error("CAD证据的真实图框不存在");if("string"!=typeof c.rawValue||!/^[+−-]?\d+(?:\.\d+)?$/u.test(c.rawValue.trim()))throw Error("CAD单值须为一个实际数字,不得取范围端点或解析显示字符串猜值");if("string"!=typeof c.valueEntityId||!Array.isArray(c.unitEntityIds)||!c.unitEntityIds.length||!Array.isArray(c.scopeEntityIds)||!c.scopeEntityIds.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let g=[c.valueEntityId,...c.unitEntityIds,...c.scopeEntityIds];if(g.length>12||g.some(a=>"string"!=typeof a)||new Set(g).size!==g.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let h=g.map(b=>{let d=a.queryMaterialEntityPage(c.filePath,{kind:"cad-entity",entityId:b,offset:0,limit:1}).records[0]?.payload;if(!d||d.sheet!==c.frameId||Array.isArray(d.sheetCandidates)&&d.sheetCandidates.length>1)throw Error("CAD实体不属于同一明确图框,不能跨图或跨歧义对象绑定");return d}),i=h[0];if("string"!=typeof i.text||(0,ag.decodeCadString)(i.text).trim()!==c.rawValue.trim())throw Error("CAD数值不是实际标注的完整原文;未确认格式码或复合值须先解释");return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:d.sha256,sceneVersion:e.version,frame:f,value:i,unitAnnotations:h.slice(1,1+c.unitEntityIds.length),scopeAnnotations:h.slice(1+c.unitEntityIds.length),sourceQuality:e.quality,drawingCoordinateUnits:e.units,applicability:"not-evaluated",approvedForWriting:!1}})}async function a7(a){let b=a.candidate;if(!b||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(b.attribute)||!["m","mm","cm"].includes(b.unit)||!b.objectName?.trim()||b.objectName.length>300||!b.condition?.trim()||b.condition.length>1e3)throw Error("几何候选属性、对象、工况或单位无效");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)(?:[((][^))]*[))])?$/u.test(b.objectName.trim())||/^(?:场地整平后高程|场地整平后标高|开挖面高程|开挖面标高|坑底标高|桩长|桩径)$/u.test(b.objectName.trim()))throw Error("图名、剖面编号或属性名不能代替实际施工部位,须继续核对区段/构件对应关系");let c=a.readEvidence(b.evidence);if(c.projectSnapshotId!==a.project.snapshotId||c.parsedIdentity!==a.project.sources[b.evidence.filePath]?.sha256)throw Error("几何证据与当前冻结项目不一致");if(!c.unitAnnotations.some(a=>"string"==typeof a.displayText&&a.displayText.trim()===b.unit))throw Error("候选单位没有实际单位文字实体支持,不能从INSUNITS或制图惯例猜值");if(!a.views.length||a.views.length>4||a.views.some(d=>d.receipt.parsedIdentity!==c.parsedIdentity||d.receipt.filePath!==c.filePath||d.receipt.frameId!==b.evidence.frameId||d.receipt.projectSnapshotId!==a.project.snapshotId))throw Error("几何复核视图不属于同一冻结来源身份");let d=new Set(a.views.flatMap(a=>a.receipt.visibleAnnotations.map(a=>a.id))),f=[b.evidence.valueEntityId,...b.evidence.unitEntityIds,...b.evidence.scopeEntityIds];if(f.some(a=>!d.has(a)))throw Error("数值、单位说明和部位实体必须在已提供视图中可核对,不能用未看的节点补成完整关系");let g=JSON.stringify({task:"独立审核图示工程属性,不代写正文",candidate:b,sourceEvidence:c,views:a.views.map(a=>({...a.receipt,sourceQuality:void 0,visibleAnnotations:a.receipt.visibleAnnotations.filter(a=>f.includes(a.id)),visibleAnnotationCount:a.receipt.visibleAnnotations.length,renderingLimitations:a.receipt.renderingLimitations})),instructions:'逐项确认实际数值、单位文字及其适用符号、真实施工部位、施工工况和属性。必须核对剖面编号与实际区段/构件的对应关系;只知道来源剖面、不知道施工部位不能confirmed。同图框相邻不证明属于同一对象,主体开挖面、板顶/支撑标高、垫层底和排水沟底不得混用;图框或图例无法辨认、单位只靠惯例、局部值推广全工程、阶段关系未核或被省略实体影响判断,返回unmeasured/rejected。不要由绘图坐标差计算工程值。只返回JSON {status:"confirmed"|"rejected"|"unmeasured",reason:"具体依据与限制"}。'}),h=await a.reviewer({prompt:g,images:a.views.map((a,b)=>({name:`同一真实图框局部${b+1}`,png:a.png}))});if(!h||!["confirmed","rejected","unmeasured"].includes(String(h.status))||"string"!=typeof h.reason||!h.reason.trim())throw Error("独立几何复核结果无效");return a.readEvidence(b.evidence),{candidate:b,proof:c,review:{status:h.status,reason:h.reason},sourceViewHashes:a.views.map(a=>(0,e.createHash)("sha256").update(a.png).digest("hex")),normalizedValue:"confirmed"===h.status?`${b.evidence.rawValue.trim()}${b.unit}`:null,approvedForWriting:"confirmed"===h.status,expertValidated:!1}}function a8(a){if(!a.approvedForWriting||"confirmed"!==a.review.status||!a.normalizedValue)return;let{candidate:b,proof:c}=a;if(a.normalizedValue!==`${b.evidence.rawValue.trim()}${b.unit}`||64!==c.parsedIdentity.length)throw Error("已复核CAD属性的值或解析身份不一致");let d={ground_elevation:"场地整平后地面标高",pit_bottom_elevation:"主体开挖面标高",foundation_elevation:"基础控制标高",pile_length:"桩长",pile_diameter:"桩径"},f={parsedIdentity:c.parsedIdentity,frameId:b.evidence.frameId,valueEntityId:b.evidence.valueEntityId,rawValue:b.evidence.rawValue,unit:b.unit,unitEntityIds:[...b.evidence.unitEntityIds],scopeEntityIds:[...b.evidence.scopeEntityIds],condition:b.condition,reviewReason:a.review.reason,sourceViewHashes:[...a.sourceViewHashes]};return{factId:`cad-reviewed:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,b.attribute,b.objectName,a.normalizedValue,f])).digest("hex").slice(0,24)}`,fieldId:b.attribute,fieldName:d[b.attribute],key:d[b.attribute],objectName:b.objectName,value:a.normalizedValue,sourceFile:c.filePath,roleId:"cad-reviewed-geometry",processingType:"drawing",confidence:.9,sourceRef:{filePath:c.filePath,roleId:"cad-reviewed-geometry",sourceSpan:b.evidence.rawValue,cadInterpretation:f}}}let a9=a=>a?JSON.parse(a.replace(/^\s*```(?:json)?\s*/u,"").replace(/\s*```\s*$/u,"")):void 0,ba=["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"],bb=(a,b,c)=>{if(!Object.hasOwn(b.sources,c)||a.parsedFileFingerprint(c).sha256!==b.sources[c].sha256)throw Error("CAD准备期间解析来源已变化")};async function bc(a){let b,c=[],d=[],f=a.caller??h.rI,g=ba.filter(b=>a.requestedAttributes.includes(b));if(!g.length||!a.filePaths.length)return{facts:c,readings:d,complete:!1};let i=a.read(b=>b.readSnapshot(()=>a.filePaths.map(c=>{bb(b,a.project,c);let d=b.loadMaterialEntities(c,"cad-scene-quality")[0]?.payload;if(d?.version!==ag.CAD_SCENE_VERSION)return{filePath:c,frames:[],complete:!1,reason:"结构版本尚未支持当前图示复核"};let e=b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:0,limit:24}),f=[...e.records];for(let a=24;a<Math.min(e.total,96);a+=24)f.push(...b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:a,limit:24}).records);return{filePath:c,frames:f.map(a=>{let b=a.payload;return{id:b.id,title:b.title,name:b.name,drawingNumber:b.drawingNumber}}),complete:f.length===e.total}})));if(i.every(a=>0===a.frames.length))return d.push(...i.map(a=>({filePath:a.filePath,status:"unmeasured",reason:a.reason??"当前解析没有可供图像复核的实际图框;须通过真实根实例读取标注并继续核对对象和工况,不能据此认定工程属性不存在",catalogComplete:a.complete}))),{facts:c,readings:d,complete:!1};let j=0;try{b=a9(await f("你是工程资料读图智能体,选择真实图框以准备施工控制属性。",JSON.stringify({requestedAttributes:g,catalog:i,instructions:"只选择与请求属性有关的真实图框,最多四个;剖面、详图和平面按实际图名及部位综合判断。目录截断或资料尚未理解不代表没有参数。仅返回JSON {frames:[{filePath,frameId,attributes:[]}]};不得自造ID,不取数字、不写施工正文。"}),!0,{diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:2e3}));let e=b?.frames;if(!Array.isArray(e)||e.length>4)throw Error("读图选择没有返回有限的实际图框");let h=e.map(a=>{if(!i.some(b=>b.filePath===a.filePath&&b.frames.some(b=>b.id===a.frameId))||!Array.isArray(a.attributes)||!a.attributes.length||a.attributes.some(a=>!g.includes(a)))throw Error("读图选择超出实际目录或请求属性");return a});if(new Set(h.map(a=>JSON.stringify([a.filePath,a.frameId]))).size!==h.length)throw Error("读图选择重复,不能对同图框重复消耗模型预算");let k=h.map(a=>({selection:a,status:"unmeasured"}));d.push(...k);let l=0;await Promise.all(Array.from({length:Math.min(2,h.length)},async()=>{for(;l<h.length;){let b=l++,d=h[b];a.signal?.throwIfAborted();let e=k[b];try{let b=a.read(b=>b.readSnapshot(()=>{bb(b,a.project,d.filePath);let c=b.queryMaterialEntityPage(d.filePath,{kind:"cad-frame",entityId:d.frameId,offset:0,limit:1}).records[0]?.payload,e=b.loadCadScene(d.filePath);if(!c)throw Error("图框身份失效,不能以不完整标注确认控制值");let f=c.polygon,g={minX:Math.min(...f.map(a=>a.x)),maxX:Math.max(...f.map(a=>a.x)),minY:Math.min(...f.map(a=>a.y)),maxY:Math.max(...f.map(a=>a.y))},h=e.annotations.filter(a=>a.sheet===d.frameId&&a.text.trim()).map(a=>({id:a.id,text:(0,ag.projectCadAnnotationText)(a.text,a.entityType),position:a.position}));return{bounds:g,annotations:h}}));if(JSON.stringify(b.annotations).length>16e4)throw Error("图框文字超过当前完整理解预算,需进一步分区取证");let g=a.read(b=>a5(b,a.project,{filePath:d.filePath,frameId:d.frameId,width:3200,fontPath:a.fontPath})),h=(b.bounds.minX+b.bounds.maxX)/2,i=(b.bounds.minY+b.bounds.maxY)/2,k=[{minX:b.bounds.minX,maxX:h,minY:i,maxY:b.bounds.maxY},{minX:h,maxX:b.bounds.maxX,minY:i,maxY:b.bounds.maxY},{minX:b.bounds.minX,maxX:h,minY:b.bounds.minY,maxY:i},{minX:h,maxX:b.bounds.maxX,minY:b.bounds.minY,maxY:i}].map(b=>a.read(c=>a5(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath}))),l=await f("你是施工技术资料读图智能体。候选必须指向实际原始实体,不能靠数字相邻猜工程属性。",JSON.stringify({selection:d,sourceView:{...g.receipt,sourceQuality:void 0,visibleAnnotations:void 0},annotations:b.annotations,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),partitions:k.map((a,b)=>({imageIndex:b,viewport:a.receipt.viewport})),instructions:"四张图按左上、右上、左下、右下完整分区读取,属于同一真实图框。结合图形、标高符号、单位说明和文字定位实际施工部位与工况;剖面编号只是来源定位,objectName须写对应区段/构件等实际工程对象,不得仅用“4-4剖面”或“开挖面高程”充当施工对象。scopeEntityIds须同时包含真实部位与解释施工工况的实体。主体垫层底、支撑、结构板、排水沟底及局部刻槽不能互换。每个对象分别提出明确属性候选,最多六条。图例xx.xxx是示意占位符,不是工程值。单位须有m/mm/cm实际独立文字实体;裸数值须完整标注原文,不取范围端点,不据绘图坐标相减。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]},文件和图框由当前读取上下文固定,不重复抄写地址。图像无法辨认或部位关系未核清时保留unresolved,不编造结论。"}),!0,{files:k.map((a,b)=>({name:`同一实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});e.rawDiscovery=l;let m=a9(l);e.discovery=m;let n=m?.candidates;if(!Array.isArray(n)||n.length>6)throw Error("图示候选超出本次理解预算或协议");let o=a=>{if(!a.evidence||void 0!==a.evidence.filePath&&a.evidence.filePath!==d.filePath||void 0!==a.evidence.frameId&&a.evidence.frameId!==d.frameId)throw Error("候选声明了本次读取之外的来源");let b=a.objectName?.split(/[//]/u).map(a=>a.trim()).filter(Boolean)??[],c=b.filter(a=>!/^[\dA-Za-z\s\-—~~]+剖面(?:图)?$/u.test(a)),e=b.length>1&&c.length&&c.length<b.length?c.join("/"):a.objectName;return{...a,objectName:e,evidence:{...a.evidence,filePath:d.filePath,frameId:d.frameId}}},p=n.map(o),q=p.flatMap((b,c)=>{try{if(!a.read(c=>a6(c,a.project,b.evidence)).unitAnnotations.some(a=>String(a.displayText).trim()===b.unit))throw Error("单位未指向实际m/mm/cm文字实体");if(/^(?:[\dA-Za-z\s\-—~~]+)?剖面(?:图)?$/u.test(b.objectName))throw Error("仅定位来源剖面,尚未对应到实际施工区段");return[]}catch(a){return[{index:c,reason:a instanceof Error?a.message:String(a)}]}});if(q.length){let c=await f("你是工程读图智能体,纠正本次真实来源读取提案,不能编造数值、单位或部位。",JSON.stringify({selection:d,previousCandidates:p,rejectedCandidates:q,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),annotations:b.annotations,instruction:"只提出有实际图示支持的完整工程属性候选;xx.xxx是图例占位,范围不能取端点。剖面编号须对应实际区段/构件,单位须提供实际单位及说明实体,工况须区分主体和局部。无依据的保留unresolved;不要为补齐数量填数。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]}。"}),!0,{files:k.map((a,b)=>({name:`原实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});e.refinement={defects:q,raw:c};let g=a9(c)?.candidates;if(!Array.isArray(g)||g.length>6)throw Error("写前图示纠正未返回完整候选,未执行属性准入");p=g.map(o)}let r=[];for(let g of(e.results=r,p))try{if(j>=12)throw Error("本轮图示候选复核预算已用完,该候选未测量");if(g.evidence?.filePath!==d.filePath||g.evidence?.frameId!==d.frameId||!d.attributes.includes(g.attribute))throw Error("图示候选跨来源、图框或属性");let e=a.read(b=>a6(b,a.project,g.evidence)),h=[e.value,...e.unitAnnotations,...e.scopeAnnotations].map(a=>a.position),i=(function(a,b){if(!b.length||b.some(a=>!Number.isFinite(a.x)||!Number.isFinite(a.y)))throw Error("局部阅读缺少实际实体位置");let c=Math.max(a.maxX-a.minX,a.maxY-a.minY);if(!Number.isFinite(c)||c<=0)throw Error("图框范围无效");let d=[];for(let a of b){let b=d.find(b=>b.every(b=>Math.hypot(b.x-a.x,b.y-a.y)<=.24*c));b?b.push(a):d.push([a])}if(d.length>4)throw Error("数值与单位、部位的图示关系需要超过四个局部,保留未决而不截去限定");return d.map(a=>{let b=Math.min(...a.map(a=>a.x)),d=Math.max(...a.map(a=>a.x)),e=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.y)),g=Math.max(d-b+.08*c,.22*c),h=Math.max(f-e+.08*c,.28*g);return{minX:(b+d-(g=Math.max(g,.8*h)))/2,maxX:(b+d+g)/2,minY:(e+f-h)/2,maxY:(e+f+h)/2}})})(b.bounds,h).map(b=>a.read(c=>a5(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath})));j+=1;let k=await a7({project:a.project,candidate:g,views:i,readEvidence:b=>a.read(c=>a6(c,a.project,b)),reviewer:async b=>a9(await f("你是独立工程读图复核智能体,复验候选的真实适用关系。",b.prompt,!0,{files:b.images.map(a=>({name:a.name,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:3e3}))});r.push(k);let l=a8(k);l&&c.push(l)}catch(b){a.signal?.throwIfAborted(),r.push({candidate:g,status:"unmeasured",reason:b instanceof Error?b.message:String(b)})}e.status="reviewed"}catch(b){a.signal?.throwIfAborted(),e.reason=b instanceof Error?b.message:String(b)}}}))}catch(c){a.signal?.throwIfAborted(),d.push({status:"unmeasured",selection:b,reason:c instanceof Error?c.message:String(c)})}return{facts:[...new Map(c.map(a=>[(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),a])).values()].sort((a,b)=>a.factId.localeCompare(b.factId)),readings:d,complete:!1}}var bd=c(36594);let be=a=>!!a&&"object"==typeof a&&!Array.isArray(a),bf=a=>"string"==typeof a&&!!a.trim(),bg=a=>Array.isArray(a)?a.map(bg):be(a)?Object.fromEntries(Object.keys(a).sort().filter(b=>void 0!==a[b]).map(b=>[b,bg(a[b])])):a,bh=a=>{let b;return b=JSON.stringify(bg(a)),(0,e.createHash)("sha256").update(b).digest("hex")},bi="project-model-v11-shared-attributes-2026-10-13",bj=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function bk(a){let b=(0,l.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}}async function bl(a){let b=a.global.input.signal;(0,a1.Te)(b);let c=[...new Set(a.prepare.materialFilePaths)].sort(),f=ai(a.prepare.projectRoot,c);if(f.length)throw Error(`项目资料解析检查未通过:${f.map(a=>a.message).join(";")}`);let g=await (0,ah.E8)(a.prepare.projectRoot,c,b),h=c.flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({chapterId:"project-model",filePath:b,content:c.content,sectionTitle:c.sectionTitle,chunkIndex:c.chunkIndex,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),score:1,source:"parsed-project-model"}))),i=(0,ah.VD)(a.prepare.projectRoot,a=>a.listIndexSourceStates(c)),j=(0,s.cW)(af().join(j0(a.prepare.projectRoot),"assets","source-editions"),c),m=(0,s.mb)(c.map(b=>({sourceFile:b,parsedSha256:g[b].sha256,sourceSha256:i.find(a=>a.relativePath===b).contentHash,sourceKind:a.prepare.kindByPath?.get(b),processingType:h.some(a=>a.filePath===b&&/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(a.content))?"table":a.understanding.fileProcessingByPath.get(b),chunks:h.filter(a=>a.filePath===b).map(a=>({chunkIndex:a.chunkIndex,content:a.content}))})),j.confirmations,j.assets),n=(0,al.Zh)(a.prepare.template,a.prepare.documentSpec).filter(b=>{let c=a.planning.requiredContentNeeds?.[b.name];return!c||"project-fact"===c.kind}),o=k(a.planning.generationDiagnostics),p=(0,aj.C)("projectFacts"),q=af().join(j0(a.prepare.projectRoot),"assets","reviewed-cad"),r=ad().existsSync(q)?ad().readdirSync(q).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort().map(a=>[a,(0,e.createHash)("sha256").update(ad().readFileSync(af().join(q,a))).digest("hex")]):[],t=bj({version:bi,targets:n,localFactTargets:(0,al.Uy)(a.prepare.template,a.prepare.documentSpec),domain:a.prepare.domainProfile,prompt:a.prepare.factExtractionPromptTexts,modelIdentity:o,algorithmIdentity:p,registeredCadAssets:r,extractionTuning:{maxChars:(0,a2.z)().factExtractionMaxChars}}),u=bj({sources:g,contextHash:t,sourceVersionPolicyId:m.policyId}),v=af().join(j0(a.prepare.projectRoot),"project-model-cache",`${u}.json`);if(p&&ad().existsSync(v))try{let a=JSON.parse(ad().readFileSync(v,"utf8")),b=a.data;if(!b||bj(b)!==a.sha256)throw Error("项目事实缓存内容校验不通过");if(b.version===bi&&b.inputHash===u&&bj(b.sources)===bj(g)&&b.sourceVersionPolicy?.policyId===m.policyId&&Array.isArray(b.facts)&&Array.isArray(b.tables)&&Array.isArray(b.unresolvedFields))return{...b,cacheHit:!0}}catch{}let w=(0,ak.d6)({evidence:h,template:a.prepare.template,spec:a.prepare.documentSpec,diagnostics:a.planning.generationDiagnostics,parsedOnly:!0}),x=a=>{let b=(0,l.nD)(a)?.key;return!b||!["project_name","project_scope","project_code","owner","project_location","foundation_support_form"].includes(b)||(0,ak.R7)(b,a.value)},y=(0,a1.lX)([...w.localFacts,...w.projectBasicFacts,...(0,l.UT)(h),...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 f of a.matchAll(d)){let a=f[3].trim(),d=f[5].trim();if(!a||!d||/^(?:无|暂无|未指定|见.*)$/u.test(d))continue;let g=`source-brand:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,f[1],f[4],a,d])).digest("hex").slice(0,24)}`;b.set(g,{factId:g,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${f[1]}C${f[4]}`,sourceSpan:f[0]}})}}return[...b.values()]}(h),...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 f=d[3];for(let[a,g,h]of[["building_count","建设栋数",`${d[1]}栋`],["building_floors","建筑层数",`${d[2]}层`]]){let i=`source-scale:${(0,e.createHash)("sha256").update(JSON.stringify([c.filePath,f,a,h])).digest("hex").slice(0,24)}`;b.set(i,{factId:i,fieldId:a,fieldName:g,key:g,objectName:f,value:h,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()]}(h)]).map(bk).filter(x);y.push(...(0,bd.Yn)(h,m));let z=y.filter(a=>(0,a4.p)(a).requiresTechnicalDecision&&/\.(?:dwg|dxf)$/iu.test(a.sourceFile)),A=!1;if(z.length){let c=[...new Set(z.flatMap(a=>{let b=(0,l.nD)(a)?.key??a.fieldId??a.key;return"excavation_depth"===b?["ground_elevation","pit_bottom_elevation"]:"foundation_depth"===b?["ground_elevation","foundation_elevation"]:[b]}))],d={snapshotId:bj({inputHash:u,sources:g,stage:"cad-before-freeze"}),sources:g},e=function(a){let b,c=(b=a.generatedDir,af().join(b,"assets","reviewed-cad")),d=new Map,e=[];if(!ad().existsSync(c))return{facts:[],reuseReceipts:e,complete:!1};for(let b of ad().readdirSync(c).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort()){let f=af().join(c,b),g=b.slice(0,-5);try{let b=JSON.parse(ad().readFileSync(f,"utf8"));if(!be(b)||b.id!==g||!be(b.data)||"reusable-reviewed-cad-v1-2026-10-08"!==b.data.version||b.contentHash!==bh(b.data)||!be(b.data.provenance)||b.id!==bh({version:b.data.version,provenance:b.data.provenance}))throw Error("CAD历史资产完整性校验失败");let{audit:c,results:h,modelMetadata:i}=function(a){let b;if(!be(a)||!bf(a.kind)||!be(a.result))throw Error("历史CAD资产必须为完整审核envelope,不能仅提供事实或项目模型");if(bf(a.model))b={scope:"original-audit",model:a.model};else if(be(a.llm)&&Array.isArray(a.llm.modelChoices)&&a.llm.modelChoices.some(a=>be(a)&&bf(a.chosen)&&bf(a.provider)))b={scope:"original-audit-call-ledger",llm:a.llm,perResultReviewerModel:"not-recorded"};else throw Error("历史CAD审核缺少原模型来源元数据,不能冒称本轮重新视觉审核");let c=(Object.hasOwn(a.result,"candidate")?[a.result]:Array.isArray(a.result.readings)?a.result.readings.flatMap(a=>be(a)&&Array.isArray(a.results)?a.results:[]):[]).filter(a=>be(a)&&!0===a.approvedForWriting);if(!c.length)throw Error("历史CAD资产没有完整核准结果,裸事实和未决候选不能复用");for(let a of c){if(!be(a.candidate)||!be(a.candidate.evidence)||!be(a.proof)||!be(a.review)||"confirmed"!==a.review.status||!bf(a.review.reason)||!1!==a.expertValidated||!bf(a.candidate.objectName)||!bf(a.candidate.condition)||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(String(a.candidate.attribute))||!["m","mm","cm"].includes(String(a.candidate.unit))||!Array.isArray(a.sourceViewHashes)||!a.sourceViewHashes.length||a.sourceViewHashes.length>4||a.sourceViewHashes.some(a=>"string"!=typeof a||!/^[0-9a-f]{64}$/u.test(a))||!bf(a.proof.projectSnapshotId)||!bf(a.proof.parsedIdentity)||!/^[0-9a-f]{64}$/u.test(a.proof.parsedIdentity)||!be(a.proof.frame)||!be(a.proof.value)||!Array.isArray(a.proof.unitAnnotations)||!a.proof.unitAnnotations.length||!Array.isArray(a.proof.scopeAnnotations)||!a.proof.scopeAnnotations.length)throw Error("历史CAD核准缺少候选、图示证明、原审核或图像哈希");let b=a.candidate.evidence;if(!bf(b.filePath)||!bf(b.frameId)||!bf(b.valueEntityId)||!bf(b.rawValue)||!/^[+−-]?\d+(?:\.\d+)?$/u.test(b.rawValue.trim())||!Array.isArray(b.unitEntityIds)||!b.unitEntityIds.length||!Array.isArray(b.scopeEntityIds)||!b.scopeEntityIds.length||a.normalizedValue!==`${b.rawValue.trim()}${a.candidate.unit}`)throw Error("历史CAD核准的单值、单位或部位实体证据不完整");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)$/u.test(a.candidate.objectName.trim()))throw Error("历史核准尚未绑定实际施工对象,不能用来源图名代替")}return{audit:a,results:c,modelMetadata:b}}(b.data.originalAudit);if(b.data.provenance.originalAuditKind!==c.kind||bh(b.data.provenance.originalModelMetadata)!==bh(i))throw Error("历史审核来源或模型元数据与原始回执不一致");for(let[c,i]of h.entries()){if(a.requestedAttributes&&!a.requestedAttributes.includes(i.candidate.attribute))continue;let h=b.data.provenance,j={assetId:g,assetPath:f,...h,candidateIndex:c,originalProjectSnapshotId:i.proof.projectSnapshotId,status:"rejected",reason:"",currentVisionReviewPerformed:!1,expertValidated:!1};try{!function(a,b,c){let d=a.candidate.evidence,e=c(d),f=a.proof;if(e.projectSnapshotId!==b.snapshotId||e.parsedIdentity!==b.sources[d.filePath]?.sha256||f.parsedIdentity!==e.parsedIdentity||f.filePath!==d.filePath)throw Error("历史CAD审核的冻结解析指纹与当前来源不一致");let g=a=>({filePath:a.filePath,parsedIdentity:a.parsedIdentity,sceneVersion:a.sceneVersion,frame:a.frame,value:a.value,unitAnnotations:a.unitAnnotations,scopeAnnotations:a.scopeAnnotations,drawingCoordinateUnits:a.drawingCoordinateUnits});if(bh(g(e))!==bh(g(f)))throw Error("历史CAD审核的图框、量值、单位或范围实体与当前证明不一致");if(!e.unitAnnotations.some(b=>"string"==typeof b.displayText&&b.displayText.trim()===a.candidate.unit))throw Error("历史CAD单位没有当前实际单位文字实体支持");if(!a8(a))throw Error("历史审核没有准入可写事实")}(i,a.project,a.readEvidence);let b=a8(i);d.set(b.factId,b),j.status="reused",j.reason="当前冻结解析与实际实体证明均与历史完整图示审核一致;保留原审核,不宣称本轮模型重新看图",j.factId=b.factId,j.verification="current-entities-match-historical-review"}catch(a){j.reason=a instanceof Error?a.message:String(a)}e.push(j)}}catch(a){e.push({assetId:g,assetPath:f,status:"rejected",reason:a instanceof Error?a.message:String(a),currentVisionReviewPerformed:!1,expertValidated:!1})}}return{facts:[...d.values()],reuseReceipts:e,complete:!1}}({generatedDir:j0(a.prepare.projectRoot),project:d,requestedAttributes:c,readEvidence:b=>(0,ah.VD)(a.prepare.projectRoot,a=>a6(a,d,b))});y.push(...e.facts);let f=[...new Set(z.map(a=>a.sourceFile))].filter(a=>!c.every(b=>e.facts.some(c=>c.sourceFile===a&&c.fieldId===b)));a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"cad-historical-reuse.json",e,a.global.input.runId);let h=f.length?await bc({project:d,filePaths:f,requestedAttributes:c,diagnostics:a.planning.generationDiagnostics,signal:b,read:b=>(0,ah.VD)(a.prepare.projectRoot,b),fontPath:ad().existsSync("/System/Library/Fonts/STHeiti Light.ttc")?"/System/Library/Fonts/STHeiti Light.ttc":void 0}):void 0;h&&(y.push(...h.facts),A=!h.facts.length||!h.readings.length||h.readings.some(a=>"reviewed"!==a.status||Array.isArray(a.results)&&a.results.some(a=>"unmeasured"===a.status||a.review?.status==="unmeasured")),a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"cad-writing-preparation.json",h,a.global.input.runId))}let B=b=>af().join(j0(a.prepare.projectRoot),"project-model-cache",`source-${bj([b,g[b].sha256,t])}.json`),C=a=>{let b=(0,d.K3)(a.value);return!!b&&h.some(c=>c.filePath===a.sourceFile&&(a.sourceRef?.chunkIndex===void 0||a.sourceRef.chunkIndex===c.chunkIndex)&&(0,d.K3)(c.content).includes(b))};for(let a of c)if(p)try{let b=JSON.parse(ad().readFileSync(B(a),"utf8"));bj(b.data)===b.sha256&&Array.isArray(b.data)&&y.push(...b.data.filter(C).map(bk).filter(x))}catch{}let D=n.filter(a=>a.required&&!y.some(b=>(0,ak.PV)(b,a))),E=new Map;for(let b of D)E.set(b.id,h.filter(a=>(0,al.I2)(a,b)).sort((c,d)=>{let e=c=>(0,ag.carrierStrength)((0,ag.domainForAttribute)(b.name),(0,ag.resolveCarrier)({kind:a.prepare.kindByPath?.get(c.filePath)??c.processingType??"other",section:c.sectionTitle}));return e(d)-e(c)||d.content.split(b.name).length-c.content.split(b.name).length||c.filePath.localeCompare(d.filePath)||c.chunkIndex-d.chunkIndex}));let F=[...new Map(D.flatMap(a=>E.get(a.id)??[]).map(a=>[`${a.filePath}\0${a.chunkIndex}\0${a.sectionTitle}\0${a.content}`,a])).values()];a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"project-fact-extraction-scope.json",{projectAttributeTargets:n,missingAttributes:D.map(a=>({...a,candidateCount:E.get(a.id)?.length??0})),otherContentDuties:(0,al.Uy)(a.prepare.template,a.prepare.documentSpec).filter(a=>!n.some(b=>b.id===a.id)),selectedChunks:F.length,selectedSourceChars:F.reduce((a,b)=>a+b.content.length,0),sourceFiles:c.length,structuredTables:w.structuredTables.length,boundary:"完整解析来源、结构化表与非共同属性义务保留;非共同属性不是全局待填单值字段,也不表示正文已完成"},a.global.input.runId);let G=!1;if(F.length>0){let c={...a.prepare.template,chapters:a.prepare.template.chapters.map(a=>({...a,requiredFacts:a.requiredFacts.filter(a=>D.some(b=>b.id===a||b.name===a))}))},d=a.prepare.documentSpec?{...a.prepare.documentSpec,factFields:a.prepare.documentSpec.factFields.filter(a=>D.some(b=>b.id===a.id))}:void 0,e=await (0,ak.OQ)(F,a.prepare.factExtractionPromptTexts,c,d,b,a.planning.generationDiagnostics,b=>{a$(a,{batch:"generation.understanding",stage:{type:"fact_extraction",roleId:"project-attribute-extraction",status:"running",message:"done"===b.phase?`共同属性第${b.index}/${b.total}批已核验,累计${b.factsSoFar}条`:`共同属性第${b.index}/${b.total}批${"waiting"===b.phase?"仍在读取":"开始读取"},本批${b.batchChars}字符`}}),a.global.emitProgress()},{cache:an(af().join(j0(a.prepare.projectRoot),"source-fact-response-cache"),a.planning.generationDiagnostics,"literal-source-fact-response-v2"),sourceIdentities:g,onReceipt:b=>{a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),`source-fact-batch-${b.index}.json`,b,a.global.input.runId)}});(0,a1.Te)(b);let f=(0,a1.lX)(e.facts).filter(C).map(bk).filter(x);for(let a of(y.push(...f),G=e.stages.some(a=>"failed"===a.status),new Set(f.map(a=>a.sourceFile)))){if(!p||!g[a])continue;let b=[...new Map(y.filter(b=>b.sourceFile===a&&C(b)).map(a=>[bj([a.fieldId,a.key,a.objectName,a.value,a.sourceRef]),a])).values()],c=B(a);ad().mkdirSync(af().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.tmp`;ad().writeFileSync(d,JSON.stringify({data:b,sha256:bj(b)})),ad().renameSync(d,c)}}if(bj((0,ah.Y8)(a.prepare.projectRoot,c))!==bj(g))throw Error("写前理解期间解析资料已变化,不能将旧候选与新来源一起冻结");let H={version:bi,inputHash:u,sources:g,sourceVersionPolicy:m,facts:y,tables:w.structuredTables,unresolvedFields:D.filter(a=>!y.some(b=>(0,ak.PV)(b,a))).map(a=>({id:a.id,name:a.name,status:"unmeasured",candidateCount:E.get(a.id)?.length??0,phase:E.get(a.id)?.length?"attribute-extraction":"source-location",provesMissingSource:!1,candidateLocations:(E.get(a.id)??[]).map(a=>({sourceFile:a.filePath,chunkIndex:a.chunkIndex})),reason:E.get(a.id)?.length?"已有相关解析原文,属性理解尚未完成;不能凭抽取失败认定原文缺料":"当前字段关键词尚未定位原文,未据此判定全库缺料"})),cacheHit:!1};if(p&&!G&&!A){ad().mkdirSync(af().dirname(v),{recursive:!0});let a=`${v}.${process.pid}.tmp`;ad().writeFileSync(a,JSON.stringify({data:H,sha256:bj(H)})),ad().renameSync(a,v)}return H}function bm(a,b){if(b.version!==bi)throw Error("项目事实快照版本失配,须按当前语义属性重新准备,不能转换旧快照用于生成");if(!b.sourceVersionPolicy)throw Error("项目恢复缺少冻结来源版本用途账,须按当前来源重新准备");if((0,s.gM)(b.sourceVersionPolicy),(0,s.cW)(af().join(j0(a),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("来源发行确认资产已变化,原项目快照不能继续复用");let{snapshotId:c,...d}=b;if(bj(d)!==c)throw Error("项目事实快照已被改写,不能沿用原快照身份");if(0===Object.keys(b.sources).length){if(b.facts.length>0)throw Error("项目事实没有解析来源身份,不能进入写作或交付评价");return}let e=ai(a,Object.keys(b.sources));if(e.length)throw Error(`写作资料当前解析状态未通过:${e.map(a=>a.message).join(";")};保留草稿,不能使用历史解析继续写作或交付评价`);if(bj((0,ah.Y8)(a,Object.keys(b.sources)))!==bj(b.sources))throw Error("写作期间解析资料已经变更,当前事实快照已过期;保留草稿并使用新快照重新规划受影响任务")}let bn={version:"professional-document-workflow-v141",rules:["all-located-topology-crew-source-task-and-cycle-defects-returned-together-before-author-dispatch","node-pdf-windows-forward-resource-endings-with-source-raster-region-resolution-and-fixed-ocr-tile-pixels","frozen-global-crew-staffing-with-bounded-phase-requests","real-construction-activities-separated-from-authoring-with-globally-frozen-crew-identities-before-phase-details","upload-operation-progress-owned-by-actual-multipart-project-with-query-root-for-early-failure-scope","portable-source-bound-pdf-page-image-inspection-and-selected-full-dpi-composition-with-file-url-module-loading","precise-array-and-frozen-detail-field-feedback-with-explicit-organization-quantity-prompt","complete-located-phase-input-defects-with-rated-capacity-and-quantity-purpose-boundaries-and-task-specific-resource-view","lossless-author-plan-tables-real-initial-context-references-and-calculated-organization-reconciliation-before-writing","explicit-phase-quantity-package-routing-lossless-source-tables-and-completed-real-prefix-warmup","exact-frozen-source-search-and-first-author-syntax-feedback-before-no-progress-stop","complete-basic-project-identity-fields-without-following-administration-label-or-outer-code-wrapper","whole-workbook-bill-discovery-and-complete-unit-equivalence-with-preserved-source-occurrences","default-protected-excel-source-reading-without-encrypted-binary-text-publication","server-owned-body-subheading-numbers-with-frozen-outline-and-unchanged-toc-depth","current-native-bill-header-and-source-symbol-preservation-through-quantity-reading","source-edition-confirmation-assets-bound-to-selected-complete-source-scope","complete-parsed-source-export-without-retrieval-overlap-or-heuristic-text-deletion","explicit-blind-controller-and-source-bound-monochrome-formatting-through-deliverables","registered-field-content-nature-is-shared-by-classification-and-attribute-extraction-without-model-reclassification","retired-unwired-fact-placement-tools-and-old-chapter-task-planner-without-compatibility-adapters","explicit-source-collection-content-kind-with-complete-membership-duty-and-without-scalar-value-admission","shared-project-attribute-preparation-separated-from-complete-source-collection-and-author-content-duties","current-source-bound-literal-extraction-batches-with-independent-validation-persistence-and-shared-provider-concurrency","shared-author-system-and-canonical-plan-prefix-with-task-specific-delegation-at-tail","same-selected-model-composition-separated-from-chief-engineering-reasoning-with-user-thinking-preference-preserved","explicit-full-document-normative-collection-dependency-with-local-basis-tasks-parallel","complete-spatial-region-label-legends-and-task-local-preview-failure-isolation","single-reference-discovery-owner-and-author-task-local-chief-question-indices","shared-provider-capacity-and-evidence-progress-without-cad-text-discard","semantic-project-facts-without-global-raw-numeric-token-expansion","namespaced-original-member-references-with-server-recorded-batch-responses","current-source-model-and-protocol-bound-completed-discovery-response-reuse","independent-persisted-parsed-documents-and-knowledge-internal-source-unit-identities","uploaded-original-disappearance-never-deletes-indexed-knowledge","text-conservation-preview-and-structural-query-without-original-file-dependency","vector-row-file-chunk-and-parsed-version-validation-before-sqlite-hydration","provider-default-output-and-selected-model-role-based-thinking-without-total-generation-ceilings","task-local-facts-and-source-use-dependencies-with-condition-aware-query-diagnostics","source-file-ownership-routing-without-per-section-model-repetition","strict-duplicate-json-key-rejection-before-body-or-tool-admission","per-transport-cancellation-request-and-actual-settlement-with-unknown-usage-preserved","preserved-original-failures-and-pause-at-reported-output-truncation-without-whole-input-retries","whole-run-token-anomaly-pause-and-same-project-queue-suspension-without-cost-or-time-ceilings","current-professional-grade-required-for-delivery-with-verification-quality-gaps-separated","first-candidate-professional-pass-metrics-without-retention-percentage-delivery-veto","removed-unused-client-reservations-and-inactive-node-payload-writing-pruning","full-per-call-usage-ledger-with-unreported-cancelled-usage","lossless-repeated-evidence-projection-with-intact-thinking-tool-protocol","quantity-purpose-and-partial-boundary-aware-construction-network","professional-execution-defects-in-first-candidate-with-preserved-original","spatial-layout-schematics-without-invented-survey-dimensions","partial-draft-figure-rendering-and-explicit-portable-review-fonts","task-located-excerpt-reading-without-speculative-whole-file-scans","complete-work-package-directory-and-explicit-member-selection-without-default-paging","project-resource-authors-inherit-planned-crews-without-false-derived-peaks","professional-first-draft-and-seven-anchored-diagnostics-without-aggregate-pass-score","complete-object-directory-and-on-demand-full-source-without-preflight-candidate-census","current-v7-submission-only-and-actual-rendered-figure-evidence-without-body-node-dumps","whole-source-purpose-and-completed-claim-state-validation","single-activity-network-and-typed-source-quantity-production-plan","server-owned-author-unit-row-and-section-reference-identities","retained-body-annotation-correction-with-cumulative-meaningful-raw-writing-ledger","actual-task-executions-preserved-through-final-render-and-honest-terminal-nodes","all-actual-normative-use-catalog-with-independent-official-metadata-and-adoption-status","source-bound-hazard-candidates-without-unknown-to-nonhazard-conclusions","faithful-technical-rendering-and-actual-bookmark-page-toc-cache","no-bid-type-page-quotas-or-client-wall-clock-generation-cutoffs","chapter-fair-dynamic-author-dispatch-through-single-shared-model-capacity","single-chief-whole-outline-and-table-plan-with-complete-raw-protocol-receipts","current-candidate-identity-bound-plan-reuse-without-repeated-chapter-routing","user-outline-preservation-without-tail-character-title-rejection-or-post-plan-mutations","actual-body-normative-use-register-before-first-compilation-basis-writing","source-bound-exact-normative-name-code-and-use-position-review","single-optional-explicit-process-concurrency-without-default-four-or-six","complete-typed-tool-output-without-generic-tail-clipping","task-owned-complete-evidence-without-repeated-whole-chapter-source-matrices","authenticated-deep-frozen-source-policy-with-independent-current-use-validation","server-owned-source-evidence-indices-without-model-quote-or-hash-copy","actual-task-progress-and-substantive-body-without-title-shell-completion","explicit-input-resource-limits-without-hidden-env-or-default-document-cutoffs","active-task-engineering-decisions-with-reviewed-qualitative-adoption","professional-process-coverage-without-character-density-point-collapse","complete-source-library-and-positive-technical-obligation-discovery-without-commercial-role-closure","typed-task-local-writing-readiness-and-preserved-unresolved-source-ledger","single-common-construction-organization-plan-with-on-demand-engineering-decisions","source-first-omission-audit-after-preserved-real-first-draft","review-draft-export-separated-from-delivery-acceptance-with-bound-issue-sidecar","actual-claim-fidelity-review-separated-from-engineering-adoption-permission","balanced-same-family-source-bracket-intervals-without-unclosed-tail-suppression-or-source-rewriting","complete-physical-source-question-continuations-before-answer-purpose-review","source-context-semantic-projection-with-complete-server-owned-provenance-and-frozen-application-qualification","complete-clarification-source-groups-with-unique-original-member-accounting-and-independent-projection-binding","source-explicit-length-units-without-bare-number-or-neighbor-line-default-meters","complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification","immutable-run-inputs","user-cancellation-and-typed-progress-execution-receipts","pre-writing-frozen-project-model","frozen-prompt-skill-and-model-configuration","object-and-attribute-bound-fact-governance","pre-writing-document-contract","complete-json-results-without-tail-clipping","single-explicit-selected-model-for-all-agent-and-review-calls","selected-model-without-vendor-allowlist-and-glm53-valid-thinking-tool-history","scoped-preparation-cancellation-and-drain-before-terminal-with-source-before-model-planning","source-complete-chief-model-projection-with-authoritative-native-proof-ledger","native-json-with-explicit-shared-total-output-capacity","technical-structure-requirements-grounded-in-local-presentation-purpose","object-property-condition-and-adoption-constraints-without-onsite-verb-or-edition-shortcuts","signal-driven-generation-with-stream-progress-and-effective-source-worker-capacity","exact-decimal-value-equivalence-with-source-object-unit-and-application-conservation","strict-explicit-source-indices-without-positional-recovery-or-retired-anchor-acceptance","mutable-live-activity-snapshots-separated-from-immutable-run-evidence","physical-property-corrections-separated-from-price-and-document-description-procedures","source-row-and-header-bound-table-quantity-witnesses-without-unit-inference","engineering-interfaces-separated-from-supplier-service-entitlements-and-charge-conditions","minimal-source-bound-static-constraints-without-synthetic-performance-duties","schema-correction-bound-to-actual-prior-output-and-preserved-source-semantics","native-contract-evaluation-with-retired-density-and-legacy-score-entrypoints","explicit-shared-total-output-capacity-with-frozen-selected-thinking-policy","source-owned-edition-sections-without-whole-document-catalog-qualification","single-chief-outline-duty-coverage-without-score-keyword-module-injection","real-provider-calls-without-hidden-prefix-warmup-requests","ordered-whole-dimension-and-celsius-identity-without-invented-unit-or-currency","reusable-provider-owned-http2-pool-with-concurrent-streamed-posts-and-signal-driven-cancellation","source-bound-planned-start-date-and-trigger-preserved-through-schedule-authority","contract-bound-seven-dimension-review","structured-author-tasks-and-cumulative-rework","canonical-document-model-and-guarded-incremental-repair","fixed-outline-and-unique-task-responsibility","same-selected-model-retry-without-provider-or-model-fallback","actual-task-instances-and-shared-chapter-budget","generation-scoped-llm-context","source-grounded-project-type-and-required-content-semantics","source-analysis-without-formal-writing-quotas","parent-grounded-financial-performance-separated-from-engineering-compensation","canonical-verified-whitespace-gaps-and-failed-request-ledger-preservation","source-text-once-and-payload-bounded-original-parent-batches","complete-outline-candidates-without-density-derived-section-count-or-blind-title-deletion","project-specific-substance-without-history-driven-novelty-or-correct-content-rewriting","native-cad-literal-location-and-root-bound-annotation-reading","chief-read-scope-pagination-without-premature-human-source-deferral","versioned-native-pdf-ruled-cell-reading-with-original-glyph-conservation","painted-horizontal-cell-spans-with-physical-row-edge-conservation","explicit-native-ordinary-page-continuation-without-grid-or-canonical-inference","fact-extraction-output-capacity-bound-to-complete-source-payload","persistent-source-and-parameter-bound-ocr-cache-default","native-table-row-boundaries-and-source-preserved-physical-page-continuation","file-level-proof-once-and-scalar-source-evidence-without-child-metadata-duplication","producer-bound-metadata-excluded-with-complete-original-ledger","immutable-source-and-provenance-bound-effective-facts","chief-frozen-original-source-queries","preserved-author-annotations-without-inferred-criterion-binding","scoped-chief-engineering-controls-with-independent-applicability-review","dxf-declared-codepage-and-observable-source-judgments","unchecked-blind-means-open-and-content-only-front-matter","canonical-native-toc-without-cover-or-invented-page-numbers","question-answer-boundaries-and-independent-review-with-frozen-model","dimension-picture-blocks-and-honest-polyline-transforms","evidence-progress-driven-chief-source-and-cad-reading","native-writing-without-legacy-drawing-lock-preparation","native-writing-without-legacy-density-or-duplicate-bill-preparation","chief-reasoning-tools-with-provider-session-roundtrip","source-binding-defect-scopes-without-unrelated-writing-penalties","pre-writing-shared-construction-deployment-and-task-interfaces","no-unscoped-elevation-subtraction-in-frozen-facts","single-native-generation-and-finalization-pipeline","request-local-llm-failure-attribution","lazy-cad-instances-with-complete-source-definitions","atomic-per-file-reindex-with-preserved-valid-snapshots","explicit-user-section-protection-with-adjudicable-skill-candidates","whole-selected-material-pack-index-and-source-byte-admission","native-contract-required-for-archived-repair","source-content-page-read-closure-without-native-garbled-or-raster-shortcuts","independently-reviewed-project-source-application-and-selection-bridges","immutable-chief-source-application-receipts-and-resume-replay","native-skill-knowledge-without-retired-density-depth-or-example-contracts","preserved-technical-ocr-content-without-prose-density-page-discard","native-raster-resolution-with-verified-composite-fallback","no-whole-library-project-intelligence-preheat-or-shadow-model","preserved-original-material-without-destructive-business-text-cleaning","explicit-user-sections-and-adjudicable-skill-candidate-preview","preserved-cad-stacked-engineering-units-and-fractions","file-level-source-coverage-without-per-chunk-audit-duplication","signature-driven-cad-source-routing-for-mislabeled-files","actual-carrier-source-routing-without-binary-fragment-success","frozen-source-edition-domains-without-filename-or-model-confirmation-shortcuts","selected-source-fingerprint-worker-with-epoch-bound-complete-cache-admission","source-document-headings-without-incidental-clarification-reference-reclassification","scalar-knowledge-discovery-with-selected-parser-version-receipts","planned-arrangements-without-invented-project-geometry-or-design-properties"]},bo={prepare:["template","derivation","documentSpec","projectMaterialProfile","projectMaterialSummary","projectUnderstanding","domainProfile","readiness","promptTexts","nativeAuthorPromptTexts","nativeAuthorReferenceTexts","reviewPromptTexts","repairPromptTexts","factExtractionPromptTexts","promptDocumentRules","requirementSemantics","hasExplicitOutline"],understanding:["allEvidence","writerEvidence","indexHealth","requestedEvidencePerChapter","rolePoolRisk","retrievalCoverageReports","webResearchReport","missingItems","clarificationRequests","unfixableDeclarations","failedChapterMessages","chapterGenerationStages","chapterGenerationStagesByOrder","canonicalFacts","evaluationItems","agentWorkflow","bidComposition","hazardResolution"],planning:["generationStrategy","projectContext","tenderRequirements","clarificationOverrides","earlyTruthAudit","truthConstraint","conclusionTable","requiredContentNeeds","projectTypeDecision","sharedConstructionPlan"],blueprint:["integratedBlueprint","requirementAssignments","structureAssignments","structureUnattached"]},bp=a=>(0,e.createHash)("sha256").update(a).digest("hex");var bq=c(7258);let br=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),bs="native-execution-accounting-",bt=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function bu(a,b){let c=(0,aj.C)("documentGeneration");if(!c||!a.inputSnapshot)return;let d=b??{};return b||(0,j.er)(d,a.inputSnapshot),bt({inputHash:a.inputSnapshot.sha256,requirement:a.requirement??"",title:a.title??"",materialRoot:a.materialRoot??"",algorithm:c,models:k(d),workflowVersion:bn.version})}var bv=c(19668);c(20297);var bw=c(48161),bx=c.n(bw);class by extends Error{constructor(a,b,c){super(a),this.promptId=b,this.reason=c,this.name="PromptResolutionError"}}function bz(a,b={}){let c=[...new Set(a.map(a=>String(a||"").trim()).filter(Boolean))];if(0===c.length)throw new by("生成需要提示词:请在画布底部的输入框里用「+」选择至少一份提示词(\xa712.1 的三个输入字段:提示词、项目、文档名称)。","","empty");return c.map(a=>{var b;let c=function(a){if(a.startsWith("custom:")){let b=(function(){try{let a=JSON.parse(ac.readFileSync(ae.join(process.env.CUSTOMIZE_AGENT_HOME?ae.join(process.env.CUSTOMIZE_AGENT_HOME,".customize-agent"):ae.join(bw.homedir(),".customize-agent"),"prompts.json"),"utf-8"));return Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{return[]}})().find(b=>b.id===a);return b?{id:a,name:b.name,content:b.content,source:"custom"}:void 0}}(a);if(!c)throw new by(`提示词不存在:${a}(可能已被删除)。请在画布上用「+」重新选择提示词后重试。`,a,"unknown-id");if(!c.name.trim())throw new by(`提示词没有名字,无法判定它进哪条链:${a}`,a,"unknown-id");if(!c.content.trim())throw new by(`提示词内容为空:${c.name}(${a})`,a,"empty");return{...c,contentHash:(b=c.content,(0,e.createHash)("sha256").update(b).digest("hex").slice(0,12)),contentPreview:c.content.replace(/\s+/gu," ").trim().slice(0,160),category:function(a){let b=String(a||"");return/总控|writer|写作主控|施工组织设计总控/iu.test(b)?"writer":/extract|extraction|抽取|提取|清单|图纸|品牌|识别/iu.test(b)?"extraction":/format|排版|格式|暗标/iu.test(b)?"formatting":/chapter_generation|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/iu.test(b)?"chapter":"reference"}(c.name)}})}class bA{constructor(a){this.controller=new AbortController,this.pending=new Set,this.signal=a?AbortSignal.any([a,this.controller.signal]):this.controller.signal}fail(a,b="preparation"){if(this.firstFailure||(this.firstFailure={error:a,origin:b,at:Date.now()}),!this.controller.signal.aborted){let a=Error("本轮前置工作已失败,取消其余准备任务",{cause:this.firstFailure.error});a.name="AbortError",this.controller.abort(a)}}get failure(){return this.firstFailure?.error}get failed(){return void 0!==this.firstFailure}run(a){this.signal.throwIfAborted();let b=Promise.resolve().then(()=>(this.signal.throwIfAborted(),a()));return this.pending.add(b),b.then(()=>{this.pending.delete(b)},a=>{this.pending.delete(b),this.fail(a)}),b}async pool(a,b,c){if(this.failed)throw this.failure;if(this.signal.throwIfAborted(),!Number.isSafeInteger(c)||c<1)throw Error("准备任务并发数必须是正整数");let d=Array(a.length),e=0,f=Array.from({length:Math.max(0,Math.min(a.length,Math.floor(c)))},()=>this.run(async()=>{for(;!this.signal.aborted&&e<a.length;){let c=e++;d[c]=await b(a[c],c),this.signal.throwIfAborted()}}));if(await Promise.allSettled(f),this.failed)throw this.failure;return this.signal.throwIfAborted(),d}async drain(){for(;this.pending.size;)await Promise.allSettled([...this.pending])}receipt(){let a=this.firstFailure?.error;return{pending:this.pending.size,drained:0===this.pending.size,signalAborted:this.signal.aborted,firstFailure:this.firstFailure?{at:this.firstFailure.at,origin:this.firstFailure.origin,name:a instanceof Error?a.name:null,message:a instanceof Error?a.message:String(a)}:null}}}var bB=c(79704),bC=c(10059),bD=c(57268);let bE=["technical","source-control","document-delivery","bid-procedure","commercial","unmeasured"];function bF(a){let b=a.map(a=>({id:(0,bD.DS)(a),text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).join(";"),...a.discoveryEvidence?{originalSource:a.discoveryEvidence.quotes.map(a=>a.quote).join("\n\n"),originalSourceSpans:a.discoveryEvidence.quotes.map(a=>a.quote),sourceIndex:a.discoveryEvidence.sourceIndex}:{}}));if(new Set(b.map(a=>a.id)).size!==b.length)throw Error("当前技术候选身份重复");return b}function bG(a,b,c){if(!c||"string"!=typeof c.version||!c.version.trim())throw Error("缺少当前全文主控计划");let d=bF(a);if(!Array.isArray(c.tenderRequirements)||c.tenderRequirements.length!==d.length||new Set(c.tenderRequirements.map(a=>a.id)).size!==d.length)throw Error("全文主控计划的技术候选集合不完整或重复");let e=new Map(c.tenderRequirements.map(a=>[a.id,a]));for(let a of d){let b=e.get(a.id);if(!b||b.text!==a.text||b.source!==a.source||b.originalSource!==a.originalSource||JSON.stringify(b.originalSourceSpans)!==JSON.stringify(a.originalSourceSpans)||b.sourceIndex!==a.sourceIndex)throw Error("全文主控计划不属于当前技术候选及原始来源")}let f=a=>a.map(a=>({id:a.id,title:a.title,sections:a.sections??[]}));if(!Array.isArray(c.chapters)||JSON.stringify(f(c.chapters))!==JSON.stringify(f(b)))throw Error("全文主控计划与当前章节及小节结构不一致");if(!Array.isArray(c.requirementAssignments)||c.requirementAssignments.length!==a.length||new Set(c.requirementAssignments.map(a=>a.requirementId)).size!==a.length)throw Error("全文主控技术职责承接漏项或重复");let g=new Map(c.requirementAssignments.map(a=>[a.requirementId,a]));return a.flatMap(a=>{let e=(0,bD.DS)(a),f=g.get(e);if(!f||!bE.includes(f.scope)||"string"!=typeof f.reason||!f.reason.trim())throw Error("全文主控计划缺少实际来源用途裁决");if("technical"!==f.scope){if(void 0!==f.chapterIndex||void 0!==f.sectionTitle||void 0!==f.responsibility)throw Error("非技术用途不得发布为技术作者职责");if("technical"!==f.scope&&"unmeasured"!==f.scope){let a=d.find(a=>a.id===e),b=c.requirementSourceUnits?.find(b=>b.index===a.sourceIndex);if(!a.originalSource?.trim()||!b?.text.trim()||!(a.originalSourceSpans??[a.originalSource]).every(a=>b.text.replace(/\s/gu,"").includes(a.replace(/\s/gu,""))))throw Error("非正文渠道分流缺少当前完整原源范围依据")}return[]}let h=Number.isSafeInteger(f.chapterIndex)&&f.chapterIndex>=0?b[f.chapterIndex]:void 0;if(!h||"string"!=typeof f.sectionTitle||!h.sections?.includes(f.sectionTitle)||"string"!=typeof f.responsibility||!f.responsibility.trim())throw Error("全文主控技术职责未承接到当前真实小节");let i=d.find(a=>a.id===e),j=c.requirementSourceUnits?.find(a=>a.index===i.sourceIndex),k=i.originalSourceSpans?.length?[...i.originalSourceSpans]:i.originalSource?[i.originalSource]:[];if(!k.length||!j?.text.trim()||k.some(a=>!j.text.replace(/\s/gu,"").includes(a.replace(/\s/gu,""))))throw Error("技术职责不是当前完整原源中的真实原字证据");let l=k.join("\n\n");if(f.responsibility!==l)throw Error("全文主控技术职责文本与当前原字证据不一致");return[{entry:{...a,scopeReview:{scope:"technical",responsibility:l,reason:f.reason}},requirementId:e,chapterId:h.id,chapterTitle:h.title,sectionTitle:f.sectionTitle,plannerVersion:c.version,reason:f.reason,status:"planned"}]})}function bH(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function bI(a){let b=[...a.blocks??[]];return{version:1,recordedAt:a.recordedAt,workflowVersion:a.workflowVersion,blocks:b,chapters:[...a.chapters??[]],readings:{...a.readings,firstPassRate:function(a){let b=a.filter(a=>!a.isolatedRetry);if(0===b.length)return{firstPass:0,primary:0,rate:null};let c=b.filter(a=>0===a.attempt&&a.passed).length;return{firstPass:c,primary:b.length,rate:c/b.length}}(b).rate},...a.chapterFailures&&a.chapterFailures.length>0?{chapterFailures:[...a.chapterFailures]}:{}}}function bJ(a){return"manual_review"===a.repairability||"user"===a.owner}function bK(a){let b=a.provenance?.detectorId?.trim();return b?[b]:a.category?[a.category]:[]}function bL(a,b=80){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}var bM=c(450);function bN(a){return a.replace(/\s+/gu,"").toLowerCase()}function bO(a){return[...new Set(a)]}c(86697),RegExp(`^.{2,36}?表`,"u");let bP="[\\d一二三四五六七八九十]+";RegExp(`^表\\s*${bP}(?:[--..—]\\s*${bP})?\\s*[::、..]?\\s`,"u");let bQ=[{pattern:/横道图|甘特图/u,instruction:"以表格式时间轴呈现(阶段与节点、起止时间、与工期目标的关系);表中时间节点必须与总工期及开工竣工日期一致"},{pattern:/网络图|关键线路/u,instruction:"以文字框图呈现(工作节点、先后衔接关系、关键线路标注),节点划分必须与本工程施工组织一致"},{pattern:/组织机构图|组织框图|机构框图|机构图/u,instruction:"以文字框图呈现组织机构层级(部门或岗位、隶属关系)"},{pattern:/平面布置图|布置图/u,instruction:"以分区布置的文字框图或布置要点表呈现(分区、布置内容、管控要求)"},{pattern:/流程图|工艺流程图/u,instruction:"以文字框图呈现流程步骤与衔接关系"}];function bR(a){return bN(a).replace(/[((][^))]*[))]/gu,"").replace(/[图表]+$/u,"")}let bS=/知识库|系统暂未|项目资料暂未|暂未明确|待确认|待资料复核|待系统|通用兜底(?:段落|模板)?|兜底(?:占位|模板|内容)|未检索到|资料不足|无法确认|建议补充|COL\d+|可核验信息|以本项目招标文件明确内容为准/u,bT=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;RegExp(String.raw`\S.+(?:\s|[。;;])${bT}\S.+(?:\s|[。;;])${bT}\S`,"u"),RegExp(`\r?
|
|
20
20
|
`,"u"),RegExp(`
|
|
21
21
|
{3,}`,"gu");let bU=/(?<=^|[。;;\n])(?:本方案|本施工组织设计|本工程|本项目|项目部|我方|我公司|投标人)?(?:根据|依据|结合|按照)?(?:本项目|项目)?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单)(?:[、,,及和与\s]*(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单|现行规范|规范)){1,}(?:[^。;;\n]{0,40})?[,,]/gmu,bV=RegExp(bU.source,"mu"),bW=/编制依据|编制说明|法律法规|规范标准|标准依据/u,bX=/(?:安全|管理|施工|质量|工期|进度|保障|体系|措施|控制|工程|项目|技术|方案|计划|组织|标准|规范|验收|方法|工艺|文明|绿色)/u,bY=/(?:工程施工方案|安装工程施工方案|专业工程施工方案|专项施工方案)$/u;async function bZ(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function b$(a){return a.map(a=>`## [${a.category}] ${a.name}
|
|
22
22
|
${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
|
|
@@ -87,7 +87,7 @@ ${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}(a.prepare.runtimePromptRules),!a.pr
|
|
|
87
87
|
|
|
88
88
|
${a.prepare.requirementSemantics.mandatoryBlockText}`),a.prepare.promptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,`生成前规划章节结构:
|
|
89
89
|
${a.prepare.template.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 规划小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:"",a.tablePlans?.length?` 结构化表格规划:${a.tablePlans.map(a=>`${a.title}(${a.fields.map(a=>a.name).join("/")})`).join(";")}`:""].filter(Boolean).join("\n")).join("\n")}`,t||u].filter(Boolean).join("\n\n"),a.prepare.nativeAuthorPromptTexts=["本作者仅完成已经冻结并委派的小节职责。全文调度、结构规划和适用评价项由主控编译到合同;附带原文用于理解全文场景和写作要求,其中的角色调度指令由主控负责。","正文只使用当前任务中已绑定的项目事实。全局的准备度摘要和规划建议不作为新的项目事实;缺少规范数值原文时先写清定性工法、控制对象、核验程序和异常闭环,必要的未决控制值交主控裁决,不虚构来源ID或编造参数凑数。"].filter(Boolean).join("\n\n"),a.prepare.nativeAuthorReferenceTexts=w,a.prepare.promptDocumentRules=a.prepare.runtimePromptRules,a.prepare.factExtractionPromptTexts=["只从给定原文抽取本次字段的既定属性;完整保留对象、值、单位和条件,不执行写作、规划或排版指令,不推算新的设计值。",b$([...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts])].filter(Boolean).join("\n\n"),a.prepare.reviewPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,b$([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts])].filter(Boolean).join("\n\n"),a.prepare.repairPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,b$(a.prepare.promptPlan.formattingPrompts)].filter(Boolean).join("\n\n"),a$(a,{batch:"generation.prepare",stage:aH({type:"validation",roleId:"document-preparation",status:"success",message:`提示词要求与项目资料理解完成,识别 ${a.prepare.materialFilePaths.length} 份项目资料`,details:[0===(d=a.prepare.promptPlan).prompts.length?"提示词:0 份":`提示词:${d.prompts.map(a=>`${a.name}(${a.category},${a.content.length} 字符)`).join(";")}`,`项目资料包:${a.prepare.projectMaterialProfile.materialRoots.join("、")||"当前知识库"}`,`识别提示词 OUTLINE 章节:${a.prepare.explicitPromptChapters.length} 个(生效 ${a.prepare.template.chapters.length} 章 = 大纲 + 技能声明)`],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备"})}),a.global.emitProgress()}async function ji(a){let b=[];for(let c=0;c<a.omissions.length;c+=24){a.signal?.throwIfAborted();let d=a.omissions.slice(c,c+24).map((a,b)=>({omissionIndex:c+b,requirement:a.requirement,sourceQuote:a.quote})),e=a=>d.map(b=>({omissionIndex:b.omissionIndex,status:"unmeasured",quotes:[],reason:a}));if(!a.markdown.trim()){b.push(...e("实际首稿为空,不能认定正文已经承接"));continue}try{let e=await (a.reviewer?.(d,a.markdown)??(0,h.bb)("你是独立的技术标正文履约审阅智能体。",["完整来源核查提出了发现清单可能遗漏的技术义务。核对下面实际首稿是否已经实质承接,不能仅因合同或发现清单没有这一项就判正文遗漏。","对对象、条件、行动和接口逐项比对。covered须提供首稿Markdown中逐字存在的完整证据quotes,不用标题、泛化承诺或来源原文代替实际履行;只承接部分时not-met说明缺什么。无法判断保持unmeasured。不要补工程值、修改正文、改分母或自评全文合格。",'只返回{"findings":[{"omissionIndex":0,"status":"covered|not-met|unmeasured","quotes":["实际首稿逐字原文"],"reason":"具体核对结论"}]},每个本批序号恰好一次。',`【本轮实际首稿】
|
|
90
|
-
${a.markdown}`,JSON.stringify(d)].join("\n\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"requirement-judge",taskKind:(0,h.TO)(),schema:{type:"object",required:["findings"],additionalProperties:!1,properties:{findings:{type:"array",items:{type:"object"}}}}}));if(a.onBatch?.(c,e),!e||Object.keys(e).some(a=>"findings"!==a)||!Array.isArray(e.findings))throw Error("正文承接核查响应结构非法");let f=e.findings;if(f.length!==d.length||new Set(f.map(a=>a?.omissionIndex)).size!==d.length||f.some(b=>!b||Object.keys(b).some(a=>!["omissionIndex","status","quotes","reason"].includes(a))||!d.some(a=>a.omissionIndex===b.omissionIndex)||!["covered","not-met","unmeasured"].includes(b.status)||"string"!=typeof b.reason||!b.reason.trim()||!Array.isArray(b.quotes)||b.quotes.some(b=>"string"!=typeof b||!b.trim()||!a.markdown.includes(b))||"covered"===b.status&&!b.quotes.length))throw Error("正文承接核查缺项、重复或证据不属于实际首稿");b.push(...f)}catch(c){if(a.signal?.aborted)throw c;b.push(...e(c instanceof Error?c.message:String(c)))}}return b.sort((a,b)=>a.omissionIndex-b.omissionIndex)}var jj=c(55852);let jk=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");async function jl(a){(0,gG.PT)(a.model);let b=a.model.sourceLibrary.units,c=[],d=[],e=0;for(let a of b){let b=JSON.stringify((0,jj.QE)(a)).length;d.length&&(e+b>4e4||a.file!==d[0].file)&&(c.push(d),d=[],e=0),d.push(a),e+=b}d.length&&c.push(d);let f=Array(c.length),g=[],i=0;return await Promise.all(Array.from({length:Math.min(c.length,(0,h.jW)())},async()=>{for(;i<c.length;){a.signal?.throwIfAborted();let b=i++,d=c[b],e=d.map(a=>a.index),j=a.model.entries.filter(a=>e.includes(a.discoveryEvidence?.sourceIndex??-1)),k=[],l=[];try{let c=Object.fromEntries([...new Set(d.map(a=>a.file).filter(a=>!!a))].flatMap(b=>{let c=a.model.sourceLibrary.contexts[b];return c?[[b,(0,hM.zV)(c)]]:[]})),f=await (a.reviewer?.(d,j)??(0,h.bb)("你是独立的施工组织设计来源完整性审阅智能体。",["对照本批完整原文及已经发现的技术义务,查找会影响专业施组完整性的遗漏。合读问题、答复和修正关系,保留对象、条件和接口。","不必分类每个商业、报价、资格、程序或目录字符;它们可以保留未分类。不能因为正文不写商业金额就推断没有相邻施工责任。","已发现不等于已承接。route是实际用途路由;非technical或未知候选若仍含施工方法、组织、协调、规格或检验责任,必须提出遗漏的技术义务,不能因它已经在discovered中就忽略。版本、文档组成、投标程序本身不要求编成施工方法,但不能遮掉同源实际施工责任;新提出的义务还会独立核对实际正文,不凭路由标记判定文稿缺失。","此处只核技术义务发现是否遗漏,不评价正文是否已经履行,不编造新工程值,不输出改写正文。若发现新义务,复制originalSource中已给出的evidenceRef,来源所属由程序取得,不另填sourceId,如S635/M0,不复制quote或计算位置;服务器还原原文。originalSource各text拼接是完整母文,须完整阅读。requirement简明解释技术响应,不把提问假设当采纳值。","sourceContexts给出当前真实补疑、修正声明及来源域资格。合读已修正与未决关系,不能把明确被取代的旧值重新提为本项目义务;资格未知不能解释为该母本无技术职责。无法判断生效关系时在reason明确未决,不自行认证现行附件或清单。",'返回{"omissions":[{"evidenceRefs":["S635/M0"],"requirement":"遗漏的技术义务","reason":"依据"}]}。无遗漏时omissions为空数组。来源及响应由程序记账,不输出阅读自评;空遗漏不证明每字用途已确认。',JSON.stringify({sourceFile:d[0]?.file,sourceContexts:c,sources:d.map(jj.QE),discovered:j.map(b=>({sourceId:`S${b.discoveryEvidence?.sourceIndex}`,requirement:b.text,route:a.candidateRoutes?.find(a=>a.requirementId===(0,bD.DS)(b))}))})].join("\n\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,h.TO)(),schema:{type:"object",required:["omissions"],additionalProperties:!1,properties:{omissions:{type:"array",items:{type:"object",additionalProperties:!1,properties:{evidenceRefs:{type:"array",required:!0,minItems:1,items:{type:"string"}},requirement:{type:"string",required:!0},reason:{type:"string",required:!0}}}}}}}));a.onBatch?.(b,f);let i=(0,jj.uP)(d);if(!f||"object"!=typeof f||Object.keys(f).some(a=>"omissions"!==a)||!Array.isArray(f.omissions))throw Error("来源完整性响应仅接受当前omissions协议,不转换读取自评或退役字段");for(let a of(l=[...e],f.omissions)){if(!a||Object.keys(a).some(a=>!["evidenceRefs","requirement","reason"].includes(a))||!Array.isArray(a.evidenceRefs)||"string"!=typeof a.requirement||!a.requirement.trim()||"string"!=typeof a.reason||!a.reason.trim()){k.push("遗漏提案没有绑定当前批次真实原文,保持未测");continue}try{let{unit:b,quotes:c}=i(a.evidenceRefs);g.push({index:b.index,quote:c.map(a=>a.quote).join("\n\n"),quotes:c,requirement:a.requirement,reason:a.reason,parentFingerprint:b.parentFingerprint,sourceSpansSha256:b.sourceSpansSha256,sourceIdentity:b.sourceIdentity,contextFingerprint:b.contextFingerprint})}catch(a){k.push(a instanceof Error?a.message:String(a))}}}catch(b){if(a.signal?.aborted)throw b;k.push(b instanceof Error?b.message:String(b))}f[b]={requestedIndices:e,responseIndices:l,errors:k}}})),g.sort((a,b)=>a.index-b.index),{bodyFindings:await ji({omissions:g,markdown:a.markdown,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.fulfillmentReviewer,onBatch:a.onFulfillmentBatch}),version:"tender-source-coverage-review-v6-source-duty-routes",sourceHash:jk(a.model.sourceLibrary),documentHash:a.documentHash,candidateRoutesHash:jk(a.candidateRoutes??[]),status:b.length>0&&f.every(a=>!a.errors.length)?"measured":"unmeasured",batches:f,omissions:g.sort((a,b)=>a.index-b.index)}}async function jm(a){let b=Array(a.tasks.length),c=0;return await Promise.all(Array.from({length:Math.min((0,h.jW)(),Math.ceil(a.tasks.length/16))},async()=>{for(;c<a.tasks.length;){if(a.signal?.aborted)throw Error("用户中止");let d=c;c+=16;let e=a.tasks.slice(d,d+16),i=e;for(let c=0;c<2&&i.length;c+=1){try{let j=a.reviewer?await a.reviewer(i):await (0,h.v7)("你是专业文档的主控规划智能体,负责在作者写作前确认内容职责与适用控制点。",[(0,f.V2)(a.projectType),`为每个固定任务确认适用内容类型:${JSON.stringify(g.if)}。`,"依据具体对象和职责分类,可选多个类型。管理程序不要求工艺参数数量;施工方法依据适用工序与控制点;进度依据工作量、逻辑和资源约束。不能把全章所有类型一律下给每节。","利用同章其他固定任务确认边界:风险辨识、清单和评估不自动承担应急资源、救援联络与复工方案;专项方案编制审核论证属于管理手续,不能仅因出现“施工方案”就让该节承担全部现场工法;材料/品牌要求不因未提出定量控制值而强制添加数字。职责明确覆盖这些内容时仍须保留。","每个任务还须明确collectsDocumentNormativeUses。仅本节承担汇总全文实际采用规范名称、编号、版本和适用用途的编制依据目录职责时为true;材料验收、质量目标、危险源辨识等小节即使含basis类型也为false。施工先后不构成写作依赖,不将所有涉及规范的小节推迟。","对选中的每种类型逐项确认控制点,ID为类型:序号(从1开始)。可把本节确实没有该职责的控制点标为不适用,并说明范围依据;不得因缺少资料、不会写或希望降低分母而排除。定性管理无需定量参数,纯载体节无需工艺验收。每个选中类型须至少有一个适用控制点。","逐项检查选中类型的全部控制点,allControlsConfirmed=true表示已全部核查;只列出不适用项的ID与具体职责边界依据,其余项承诺适用。每个taskIndex恰好返回一次。不要重复抄写长任务ID与整套适用控制点,不能将缺料当不适用。",`【同章全部固定职责,供划清任务边界】${JSON.stringify(a.tasks.filter(a=>i.some(b=>b.chapterTitle===a.chapterTitle)))}`,'只返回{"decisions":[{"taskIndex":0,"types":["management"],"reason":"本节职责依据","collectsDocumentNormativeUses":false,"allControlsConfirmed":true,"notApplicable":[]}]}。',...c?["仅重新确认此前未决任务,必须检查完整控制点集合和适用范围。"]:[],JSON.stringify(i.map((a,b)=>({taskIndex:b,...a})))].join("\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,h.TO)(),maxTokens:12e3,temperature:0,schema:{type:"object",required:["decisions"],properties:{decisions:{type:"array",minItems:i.length,maxItems:i.length,items:{type:"object"}}}}});a.onBatch?.({offset:d,attempt:c,tasks:i,raw:j});let k=j&&"object"==typeof j&&Array.isArray(j.decisions)?j.decisions:[],l=new Map,m=new Map;for(let a of k){let b=Number.isInteger(a?.taskIndex)?i[a.taskIndex]?.id:a?.taskId;if(!b||!i.some(a=>a.id===b))continue;let c=l.get(b)??[];l.set(b,c);try{let d=function(a,b){if(!b||"object"!=typeof b||!Array.isArray(b.decisions))throw Error("主控内容类型响应缺少decisions");let c=new Set(a.map(a=>a.id)),d=new Set,e=b.decisions.map(b=>{if(!b||"object"!=typeof b)throw Error("内容类型决定不是对象");let e={...b,taskId:Number.isInteger(b.taskIndex)?a[b.taskIndex]?.id:b.taskId};if(!c.has(e.taskId)||d.has(e.taskId))throw Error("内容类型决定含未知或重复任务ID");if(!Array.isArray(e.types)||!e.types.length||e.types.some(a=>"string"!=typeof a||!Object.hasOwn(g.if,a))||new Set(e.types).size!==e.types.length)throw Error("内容类型集合非法");if("boolean"!=typeof e.collectsDocumentNormativeUses||e.collectsDocumentNormativeUses&&!e.types.includes("basis"))throw Error("全文规范汇总依赖必须明确,且由编制依据职责承担");if("string"!=typeof e.reason||!e.reason.trim())throw Error("内容类型决定没有职责依据");if(void 0===e.controls&&!0===b.allControlsConfirmed&&Array.isArray(b.notApplicable)){let a=e.types.flatMap(a=>g.if[a].map((b,c)=>`${a}:${c+1}`));if(new Set(b.notApplicable.map(a=>a?.id)).size!==b.notApplicable.length||b.notApplicable.some(b=>!b||!a.includes(b.id)||"string"!=typeof b.reason||!b.reason.trim()||/缺料|资料不足|没(?:有)?抽|未取得|未返回|没写/u.test(b.reason)))throw Error("不适用清单未知、重复或试图以缺项排除控制点");e.controls=a.map(a=>({id:a,applicable:!b.notApplicable.some(b=>b.id===a),reason:b.notApplicable.find(b=>b.id===a)?.reason??`本节主控已逐项确认:${e.reason}`}))}if(void 0!==e.controls){let a=e.types.flatMap(a=>g.if[a].map((b,c)=>`${a}:${c+1}`));if(!Array.isArray(e.controls)||e.controls.length!==a.length||new Set(e.controls.map(a=>a?.id)).size!==a.length||e.controls.some(b=>!b||!a.includes(b.id)||"boolean"!=typeof b.applicable||"string"!=typeof b.reason||!b.reason.trim()))throw Error("适用控制点决定缺项、重复或没有职责依据");if(e.types.some(a=>!e.controls.some(b=>b.id.startsWith(`${a}:`)&&b.applicable)))throw Error("所选内容类型不能将全部控制点排为不适用;应重新确认职责类型")}return d.add(e.taskId),{taskId:e.taskId,types:e.types,reason:e.reason,status:"confirmed",collectsDocumentNormativeUses:e.collectsDocumentNormativeUses,...e.controls?{controls:e.controls}:{}}});if(d.size!==c.size)throw Error("主控内容类型决定集合不完整");return e}([i.find(a=>a.id===b)],{decisions:[{...a,taskId:b,taskIndex:void 0}]})[0];if(!d.controls)throw Error("主控尚未逐项确认适用控制点");c.push(d)}catch(a){m.set(b,a instanceof Error?a.message:String(a))}}for(let a of i){let c=l.get(a.id)??[];b[d+e.findIndex(b=>b.id===a.id)]=1!==c.length||m.has(a.id)?{taskId:a.id,types:(0,g.MT)(a).types,status:"unmeasured",collectsDocumentNormativeUses:!1,reason:`主控内容类型尚未确认:${m.get(a.id)??(c.length>1?"任务类型重复裁决":"未返回合法控制点决定")}`}:c[0]}}catch(f){if(a.signal?.aborted)throw f;let c=f instanceof Error?f.message:String(f);i.forEach(a=>{b[d+e.findIndex(b=>b.id===a.id)]={taskId:a.id,types:(0,g.MT)(a).types,status:"unmeasured",collectsDocumentNormativeUses:!1,reason:`主控内容类型尚未确认:${c};词面候选仅用于已有草稿定位`}})}i=e.filter(a=>b[d+e.findIndex(b=>b.id===a.id)]?.status!=="confirmed")}}})),{version:"content-type-plan-v2-explicit-normative-dependency-2026-10-13",inputHash:(0,e.createHash)("sha256").update(JSON.stringify(a.tasks)).digest("hex"),decisions:b}}function jn(a){return a.criteria.filter(a=>a.applicable&&a.admission?.status==="unmeasured")}let jo="author-source-application-",jp=/^author-source-application-([a-f0-9]{64})\.json$/u,jq=a=>(0,e.createHash)("sha256").update(a).digest("hex");async function jr(a){let b=new AbortController;a={...a,signal:a.signal?AbortSignal.any([a.signal,b.signal]):b.signal},(0,a1.Te)(a.signal);let c=new bA(a.signal),d={global:{input:a={...a,signal:c.signal},preparationWork:c},prepare:{},understanding:{},planning:{},blueprint:{integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[]},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};d.planning.generationDiagnostics={metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}},(0,b_.XI)((0,b_.Su)(d.planning.generationDiagnostics),{budget:a.resourceLimits,costCeilingUsd:a.resourceLimits?.costCeilingUsd}),a.runId&&a.projectRoot&&(0,bB.WX)(d.planning.generationDiagnostics,{generatedDir:j0(a.projectRoot),runId:a.runId});let f=(0,bC.yY)(d.planning.generationDiagnostics,b=>{a.runId&&d.prepare.projectRoot&&(0,a0.Hf)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,snapshot:b})});return(0,ds.Uq)({diagnostics:d.planning.generationDiagnostics,signal:a.signal,callKind:"planning-review",outputCapacity:"provider-default",onTokenAnomaly:c=>{b.abort(Error(`Token消费异常:${c.author.reason}`)),a.onTokenAnomaly?.(c)}},async()=>{let b=!1,i="prepare";try{!function(a){let b=a.global.input.resumeTasks,c=a.global.input.resumeLedger;if(!b&&!c)return;let d=function(a){let b=b=>a.filter(a=>a.class===b),c=[],d=b("not-produced"),e=b("blocked"),f=b("manual");if(d.length>0)for(let a of(c.push(`【重写】${d.length} 项(上一轮没有产出)`),d))for(let b of(c.push(`- ${a.title}|原因:${a.reason}`),a.gaps??[]))c.push(` \xb7 缺口:${b}`);if(e.length>0)for(let a of(c.push(`【定向修复】${e.length} 项(已产出但被阻断——只修被点名的判据,不重写整章)`),e))c.push(`- ${a.title}${a.criteria.length>0?`|判据:${a.criteria.join("、")}`:""}`);if(f.length>0)for(let a of(c.push(`【需要你定夺】${f.length} 项(系统不做,交回人)`),f))c.push(`- ${a.title}`);return{title:0===a.length?"本轮续跑任务书(上一轮无待办)":`本轮续跑任务书:${d.length} 重写 / ${e.length} 定向修复 / ${f.length} 待你定`,lines:c.length>0?c:["上一轮账本没有需要处理的项目:本次按原计划推进"],metrics:{重写项:d.length,定向修复项:e.length,人工待答项:f.length,合计:a.length}}}(b??[]),e=c?.readings;a$(a,{batch:"generation.prepare",id:"resume.plan",type:"resume.plan",title:d.title,status:0===d.metrics.合计?"completed":d.metrics.人工待答项===d.metrics.合计?"blocked":"repairing",metrics:{...d.metrics,...e?.blockers===void 0?{}:{上轮门禁阻断:e.blockers},...e?.words===void 0?{}:{上轮字数:e.words},...e?.firstPassRate===null||e?.firstPassRate===void 0?{}:{上轮块一次通过率:Number(e.firstPassRate.toFixed(3))}},issues:d.lines.map(a=>({level:"info",severity:"suggestion",category:"control_loop",owner:a.includes("需要你定夺")?"user":"system",message:a}))})}(d),await jh(d),a.resumeAuthorState?.accounting&&(0,bq.zh)(d.planning.generationDiagnostics,a.resumeAuthorState.accounting),function(a){let b=a.global.input.runId;if(!b)return;let c=new Set(a.prepare.materialScope.selectedFiles),d=(0,ah.Yy)(a.prepare.projectRoot,{filePaths:[...c],includeParserVersion:!0}).map(a=>{let b=a.parserVersion??null;return{path:a.relativePath,sourceHash:a.contentHash??null,chunkCount:a.chunkCount,indexedAt:a.indexedAt,parserVersion:b}}).sort((a,b)=>a.path.localeCompare(b.path)),f=(0,j.c9)(a.planning.generationDiagnostics),h=f.models.active,i=h&&f.models.list.find(a=>a.name===h.name&&a.provider===h.provider),k={active:h,selected:i?{name:i.name,provider:i.provider,thinking:i.thinking??"follow-task"}:null},l=i?f.providers[i.provider]:void 0,m=l&&i?[{name:i.provider,protocol:l.protocol??"auto",endpointFingerprint:(0,e.createHash)("sha256").update(JSON.stringify([l.baseUrl??"",l.directEndpoint??!1])).digest("hex")}]:[],n=(0,a0.tv)(j0(a.prepare.projectRoot),"run-inputs.json",{version:2,runId:b,documentId:a.global.input.documentId??null,capturedAt:Date.now(),buildIdentity:(0,aj.S)()??null,workflowVersion:bn.version,evaluationProtocol:g.GM,scoringCalibration:"initial-unvalidated",requirement:a.global.input.requirement??"",projectName:a.global.input.projectName??null,title:a.global.input.title??null,prompts:a.prepare.promptPlan.prompts,inputSnapshotHash:a.global.input.inputSnapshot?.sha256??null,skills:a.global.input.inputSnapshot?.skills??null,materialScope:a.prepare.materialScope,sources:d,model:k,providers:m,limits:{tuningProfile:(0,a2.z)(),resourceLimits:a.global.input.resourceLimits??null,loopBudget:(0,b_.Su)(a.planning.generationDiagnostics).budget}},b);(0,a0.Fr)("run-inputs",b),n.assetPath,n.sha256}(d),a.signal?.throwIfAborted(),aL(d,"prepare"),i="understand";let c=a.resumeAuthorState?.writerContext.resumeContext;if(c){var k,l,m,n,r,t,u,v;if(bm(d.prepare.projectRoot,a.resumeAuthorState.projectModel),1!==c.version||"string"!=typeof c.json||bp(c.json)!==c.sha256)throw Error("作者续跑上下文校验失败");let b=JSON.parse(c.json,(a,b)=>b?.__authorResumeCollection==="map"?new Map(b.entries):b?.__authorResumeCollection==="set"?new Set(b.entries):b);for(let[a,c]of Object.entries(bo)){let e=b[a];if(!e||"object"!=typeof e)throw Error("作者续跑上下文缺少冻结阶段");for(let b of c)Object.hasOwn(e,b)&&(d[a][b]=e[b])}if(!d.planning.tenderRequirements)throw Error("恢复的作者上下文缺少完整招标职责裁决,须重新完成资料理解");(0,gG.PT)(d.planning.tenderRequirements),a.signal?.throwIfAborted(),a$(d,{batch:"generation.understanding",stage:{type:"validation",roleId:"author-dependency-restoration",status:"success",message:"资料与编译依赖一致,恢复原写作合同、事实及前置裁决;仅调度未完成作者任务"}}),aL(d,"understand")}else{if(await (0,ds.Uq)({diagnostics:d.planning.generationDiagnostics,signal:a.signal,callKind:"fact-extraction"},()=>iB(d)),void 0===d.understanding.tenderRequirementsTask)throw Error("资料理解没有建立完整招标来源与发现台账");d.planning.tenderRequirements=await d.understanding.tenderRequirementsTask,(0,gG.PT)(d.planning.tenderRequirements),a.signal?.throwIfAborted(),aL(d,"understand"),i="plan",await hL(d),a.signal?.throwIfAborted(),aL(d,"plan"),i="blueprint",await g4(d)}if(i="blueprint",a.resumeAuthorState){let b=a.resumeAuthorState;if(bm(d.prepare.projectRoot,b.projectModel),!c&&d.understanding.preparedProjectFacts?.inputHash!==b.projectModel.inputHash)throw Error("事实抽取目标或资料依赖已经变更,不能沿用同一作者检查点");d.understanding.projectModel=b.projectModel,d.understanding.arbitratedFacts=JSON.parse(JSON.stringify(b.projectModel.facts)),d.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(b.projectModel.factsModel)),d.planning.documentContract=b.contract,d.planning.effectiveChapters=b.effectiveChapters,d.prepare.promptTexts=b.writerContext.promptTexts,d.blueprint.integratedBlueprint=b.writerContext.integratedBlueprint,d.planning.conclusionTable=b.writerContext.conclusionTable,d.planning.requiredContentNeeds=b.writerContext.requiredContentNeeds,d.planning.projectTypeDecision=b.writerContext.projectTypeDecision,d.planning.sharedConstructionPlan=b.writerContext.sharedConstructionPlan,a.runId&&((0,a0.tv)(j0(d.prepare.projectRoot),"project-model.json",b.projectModel,a.runId),(0,a0.tv)(j0(d.prepare.projectRoot),"document-contract.json",b.contract,a.runId))}else{d.understanding.projectModel=function(a){let b=a.understanding.preparedProjectFacts;if(!b)throw Error("项目事实准备尚未完成,不能开始写作");if((0,s.gM)(b.sourceVersionPolicy),(0,s.cW)(af().join(j0(a.prepare.projectRoot),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("理解期间来源发行确认已变化,不能冻结旧用途账");let c=Object.keys(b.sources).flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({filePath:b,content:c.content,chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,chapterId:"project-source-assertions",score:1,source:"complete-parsed-source",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b)}))),d=JSON.parse(JSON.stringify({version:bi,inputHash:b.inputHash,sources:b.sources,sourceVersionPolicy:b.sourceVersionPolicy,facts:a.understanding.arbitratedFacts.map(b=>(0,a3.G5)(b,{roleId:a.understanding.fileRoleByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile),processingType:a.understanding.fileProcessingByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile)})),sourceControls:(0,p.y)(c),factsModel:a.understanding.preliminaryFactsModel,unresolvedFields:b.unresolvedFields,workPackages:a.blueprint?.integratedBlueprint?.outline.projectWorkPackages??[]})),e={...d,snapshotId:bj(d)};return a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"project-model.json",e,a.global.input.runId),a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"source-version-policy.json",e.sourceVersionPolicy,a.global.input.runId),a.understanding.arbitratedFacts=JSON.parse(JSON.stringify(e.facts)),a.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(e.factsModel)),e}(d);let{structures:b,headings:c}=function(a){let b=new Map,c={};for(let d of a){if(b.has(d.id)||!d.sections?.length||new Set(d.sections).size!==d.sections.length)throw Error("作者任务必须承接完整且唯一的正式目录");b.set(d.id,{blocks:d.sections.map((a,b)=>{if(!a.trim())throw Error("正式目录不能有空作者任务");return c[`${d.id}:section:${b+1}`]={level:3,confirmed:!0},{title:a,subPoints:[{title:a,sources:[a]}]}})})}return{structures:b,headings:c}}(d.planning.effectiveChapters);d.planning.chapterWritingStructures=b;let e=Object.fromEntries([...b].flatMap(([a,b])=>b.blocks.map((b,c)=>[`${a}:section:${c+1}`,`本节主责:${b.title};必须完成的内容:${[...new Set(b.subPoints.map(a=>`${a.title}(${[...new Set(a.sources)].join("、")})`))].join(";")}${(d.planning.professionalOutlineResponsibilities?.[`${a}\u0000${b.title}`]??[]).map(a=>`;归并承接职责:${a}`).join("")}`])));a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:"running",message:"主智能体确认各小节实际职责、适用控制点及写作信息依赖"}});let f=await jm({projectType:d.planning.projectTypeDecision?.type,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`content-type-batch-${b.offset}-${b.attempt}.json`,b,a.runId),a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:"running",message:`已保存第${b.offset+1}项起${b.tasks.length}项内容职责响应,正在验证`}})},tasks:[...b].flatMap(([a,b])=>b.blocks.map((b,c)=>({id:`${a}:section:${c+1}`,chapterTitle:d.planning.effectiveChapters.find(b=>b.id===a).title,title:b.title,responsibility:e[`${a}:section:${c+1}`]})))}),h=f.decisions.filter(a=>"confirmed"===a.status).length;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:h===f.decisions.length?"success":"partial",message:`内容职责已确认${h}/${f.decisions.length}项;未确认项保留原问题`}});let i=d.planning.effectiveChapters.map(a=>({...a,sections:b.get(a.id).blocks.map(a=>a.title)}));a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"required-content-needs",status:"running",message:"确认实际必需内容的来源、规范或拟定安排性质,不设置统一参数义务"}}),d.planning.requiredContentNeeds=await (0,hN.dm)({chapters:i,facts:d.understanding.projectModel.facts,existing:d.planning.requiredContentNeeds,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onReceipt:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`required-content-needs-contract-${b.source}-${b.offset}.json`,b,a.runId)}});let j=Object.values(d.planning.requiredContentNeeds);a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"required-content-needs",status:j.every(a=>a.confirmed)?"success":"partial",message:`必需内容性质已确认${j.filter(a=>a.confirmed).length}/${j.length}项;未确认内容保留原问题`}});let k=d.prepare.requirementSemantics,l=[...(0,bD.PM)(d.understanding.projectModel),...d.planning.professionalOutlinePlan?(w=d.planning.tenderRequirements.entries,x=d.planning.professionalOutlinePlan,bG(w,x.chapters,x),x.requirementAssignments.filter(a=>"unmeasured"===a.scope).map(a=>({id:a.requirementId,text:`该来源候选的技术职责用途尚待核定:${x.tenderRequirements.find(b=>b.id===a.requirementId).text};${a.reason}`,source:"全文主控完整原源用途未判定;原候选与完整母文保留在professional-outline-plan",global:!0,admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}))):[],...(0,bd.LA)(d.understanding.projectModel.facts),...d.planning.projectTypeDecision?.status==="unmeasured"?[{...(0,bD.v7)(`根据项目资料确认主要工程性质及专属能力适用范围:${d.planning.projectTypeDecision.reason}`,"工程类型尚未确认",void 0,!0),admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}]:[],...(k?.globalRequirements??[]).map(a=>(0,bD.v7)(a,"用户要求语义计划",void 0,/每(?:一|个|项|条)|全部|全文|所有|逐项|不得|禁止/u.test(a))),...(k?.chapterRequirements??[]).flatMap(a=>a.requirements.map(b=>(0,bD.v7)(b,"用户章节要求",i.find(b=>b.title===a.chapterTitle)?.id))),...(k?.styleRequirements??[]).map(a=>(0,bD.v7)(a,"用户明确写作风格要求",void 0,!0)),...d.prepare.promptDocumentRules.requiredSubjects.map(a=>(0,bD.v7)(`完整承接指定对象:${a}`,"冻结提示词的必需对象")),...d.prepare.promptDocumentRules.requiredTables.map(a=>(0,bD.v7)(`完成指定表格及其用途:${a}`,"冻结提示词的必需表格")),...(d.prepare.promptDocumentRules.requiredKeywords??[]).map(a=>(0,bD.v7)(`实质承接指定主题:${a}`,"冻结提示词的必需主题")),...k?.parseFailed?[{...(0,bD.v7)(`用户强制要求尚未完成解析:${k.parseFailureReason??"未知解析失败"}`,"用户要求解析失败",void 0,!0),admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}]:[]].filter((a,b,c)=>c.findIndex(b=>b.id===a.id)===b),m=(0,bD.sv)({chapters:i,requirements:d.blueprint.requirementAssignments.map(a=>a.entry),assignments:d.blueprint.requirementAssignments,extraObligations:l,requiredContentNeeds:d.planning.requiredContentNeeds});a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:"running",message:`主智能体分配${m.length}项实际交付义务的责任小节`}});let n=await (0,bD.xO)({items:m,tasks:i.flatMap(a=>(a.sections??[]).map((b,c)=>({id:`${a.id}:section:${c+1}`,chapterId:a.id,title:b,responsibility:e[`${a.id}:section:${c+1}`]}))),diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`contract-ownership-batch-${b.offset}-${b.attempt}.json`,b,a.runId),a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:"running",message:`已保存第${b.offset+1}项起的义务归属响应,正在验证`}})}}),q=n.decisions.filter(a=>"confirmed"===a.status).length;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:q===n.decisions.length?"success":"partial",message:`义务归属已确认${q}/${n.decisions.length}项;未确认项保留原问题`}});let r=Object.fromEntries(n.decisions.filter(a=>"confirmed"===a.status&&m.some(b=>b.id===a.criterionId&&"proposed"===b.chapterAuthority)).map(a=>[a.criterionId,{sectionId:a.sectionId,reason:a.reason}]));a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"requirement-assignments-final.json",{assignments:d.blueprint.requirementAssignments,chiefOwners:r},a.runId),d.planning.documentContract=(0,g.vB)({projectSnapshotId:d.understanding.projectModel.snapshotId,inputSnapshotHash:d.global.input.inputSnapshot?.sha256??"",chapters:i,requiredContentNeeds:d.planning.requiredContentNeeds,requireQuantitativeSources:!0,deliveryPolicy:o.yD,writingProjectType:d.planning.projectTypeDecision?.type,bodyDiagramForbidden:dn(d.understanding.bidComposition),extraObligations:l,criterionOwnerSectionIds:Object.fromEntries(n.decisions.filter(a=>"confirmed"===a.status).map(a=>[a.criterionId,a.sectionId])),reassignedCriterionOwners:r,sectionResponsibilities:e,taskHeadings:c,sectionTypes:Object.fromEntries(f.decisions.map(a=>[a.taskId,a.types])),documentNormativeUseCollectorIds:new Set(f.decisions.filter(a=>"confirmed"===a.status&&a.collectsDocumentNormativeUses).map(a=>a.taskId)),sectionTypeEvidence:Object.fromEntries(f.decisions.map(a=>[a.taskId,a.reason])),applicability:(y=f.decisions,Object.fromEntries(y.filter(a=>"confirmed"===a.status).flatMap(a=>(a.controls??[]).map(b=>[`${a.taskId}:methods:${b.id}`,{applicable:b.applicable,reason:`主控写前确认:${b.reason}`}])))),unconfirmedSectionTypes:new Set(f.decisions.filter(a=>"unmeasured"===a.status).map(a=>a.taskId)),facts:d.understanding.projectModel.facts,requirements:d.blueprint.requirementAssignments.map(a=>a.entry),requirementSourceLibrary:d.planning.tenderRequirements?.sourceLibrary,assignments:d.blueprint.requirementAssignments}),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"chapter-writing-structures.json",Object.fromEntries(b),a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"writing-task-hierarchy.json",c,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"document-contract.json",d.planning.documentContract,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"content-type-plan.json",f,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"contract-ownership-plan.json",n,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"required-content-needs.json",d.planning.requiredContentNeeds,a.runId);let t=jn(d.planning.documentContract);a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"author-contract-admission",status:t.length?"partial":"success",message:t.length?`有${t.length}项局部准备状态待核;保留合同和问题,按实际依赖调度作者并输出审阅稿`:"主控职责、类型、适用控制点与义务归属已确认,可以委派作者"}});var w,x,y,z=d.planning.documentContract;let u=jn(z).filter(a=>a.admission?.effect==="task-block"&&!a.sectionId&&!a.chapterId);if(u.length)throw Error(`作者合同的全局基础依赖尚未确认:${u.map(a=>a.id).join("、")}`)}if(!d.planning.sharedConstructionPlan){a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:"running",message:"主智能体形成共同施工组织与交接骨架,实体决定按作者实际需要核定"}}),d.planning.sharedConstructionPlan=await bZ(d.planning.generationDiagnostics,"planning.shared-construction-plan",()=>(0,gM.cW)({contract:d.planning.documentContract,project:d.understanding.projectModel,diagnostics:d.planning.generationDiagnostics,signal:a.signal,responseCache:an((0,ae.join)(j0(d.prepare.projectRoot),"engineering-plan-response-cache"),d.planning.generationDiagnostics,"engineering-plan-response-v1"),onReceipt:(b,c)=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`${b}.json`,c,a.runId);let e=/^shared-construction-details-(\d+)$/u.exec(b);("shared-construction-topology"===b||e)&&a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:"running",message:"shared-construction-topology"===b?"已保存施工组织拓扑响应,正在形成各阶段交接与资源安排":`已保存施工阶段${Number(e[1])+1}的具体安排响应,正在验证`}})}}));let b=d.planning.sharedConstructionPlan.phases.length>0;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:b?"success":"partial",message:b?"共同施工组织候选已保存;工程控制与专业正确性按实际正文核验":"共同施工组织骨架尚未形成,已保留各作者任务继续写作;该事项进入审阅问题单"}})}if((0,gM.wB)(d.planning.sharedConstructionPlan,d.planning.documentContract,d.understanding.projectModel),d.blueprint.integratedBlueprint&&(d.blueprint.integratedBlueprint=(k=d.blueprint.integratedBlueprint,l=d.planning.sharedConstructionPlan,{...k,data:{...k.data,production:l.production}}),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"blueprint-for-writing.json",d.blueprint.integratedBlueprint,a.runId)),(0,q.tD)(d.understanding.projectModel,d.planning.documentContract.sections.map(a=>(0,gM.G6)(d.planning.sharedConstructionPlan,d.understanding.projectModel,a.id))),a.runId){let b=j0(d.prepare.projectRoot);!function(a,b,c){let d=af().dirname((0,a0.HM)(b,`${jo}checkpoint.json`,c));if(!ad().existsSync(d))return;let e=[];for(let a of ad().readdirSync(d).filter(a=>jp.test(a)).sort()){let b=ad().readFileSync(af().join(d,a));if(jq(b)!==jp.exec(a)[1])throw Error("主控增量来源核定资产字节身份不一致,不能恢复正文准入");e.push(JSON.parse(b.toString("utf8")))}(0,q.hz)(a,e),e.length}(d.understanding.projectModel,b,a.runId),m=d.understanding.projectModel,n=a.runId,(0,q.o7)(m,a=>{let c=JSON.stringify(a);(0,a0.tv)(b,`${jo}${jq(c)}.json`,a,n)})}a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"shared-construction-plan.json",d.planning.sharedConstructionPlan,a.runId),a.onInstructionsRebased?.(),r=d.planning.generationDiagnostics,(t={generatedDir:j0(d.prepare.projectRoot),runId:a.runId,contract:d.planning.documentContract}).runId&&dS.set(r,{generatedDir:t.generatedDir,runId:t.runId,contractId:t.contract.id,projectSnapshotId:t.contract.projectSnapshotId,tasks:new Map(t.contract.sections.map(a=>[JSON.stringify([a.chapterId,a.title]),a.id])),expectedTaskIds:t.contract.sections.map(a=>a.id),records:[],candidates:[],rawDrafts:[],previousDrafts:new Map}),d.prepare.readiness=iW({template:d.prepare.template,spec:d.prepare.documentSpec,summary:d.prepare.projectMaterialSummary,facts:d.understanding.projectModel.facts}),(0,g.qK)(d.planning.generationDiagnostics,d.planning.documentContract);let f=0;!function(a,b,c,d={}){if((0,g.oH)(b),b.projectSnapshotId!==c.snapshotId)throw Error("文档模型与项目快照身份不一致");a.authorTaskExecutions={contractId:b.id,projectSnapshotId:c.snapshotId,tasks:b.sections.map(a=>({taskId:a.id,status:"not-started"}))};let e=b.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0);if(b5.set(a,{contract:b,projectModel:c,onChange:d.onChange,model:{version:"document-model-v1-2026-10-06",contractId:b.id,projectSnapshotId:c.snapshotId,expectedTaskIds:b.sections.map(a=>a.id),taskAttempts:{},tasks:{},revisions:[],rework:{fixedReferenceUnits:e,cumulativeUnits:0,cumulativeAddedChars:0,cumulativeRemovedChars:0,cumulativeReplacedChars:0,provisionalRatio:0,referenceChars:0,cumulativeCharRatio:0,calibration:"initial-unvalidated"}}}),d.restore){let e=b7(d.restore);if(delete e.normativeUses,e.contractId!==b.id||e.projectSnapshotId!==c.snapshotId||b6(e.expectedTaskIds)!==b6(b.sections.map(a=>a.id)))throw Error("续跑文档模型与固定合同不一致");for(let[a,d]of Object.entries(e.tasks))for(let e of[d.firstCandidate,d.current]){let d=(0,b0.validateAuthorTaskOutput)(e.output,{contract:b,projectModel:c,taskId:a},{preserveQualityDefects:!!(e.qualityIssues?.length||e.annotationIssues?.length||e.sourceReviewRequests?.length)});if(d.contentHash!==e.contentHash||d.markdown!==e.markdown||b6(d.qualityIssues??[])!==b6(e.qualityIssues??[])||b6(d.annotationIssues??[])!==b6(e.annotationIssues??[])||b6(d.sourceReviewRequests??[])!==b6(e.sourceReviewRequests??[])||b6(d.locatorEvidence??[])!==b6(e.locatorEvidence??[])||b6(d.pendingCriterionIds)!==b6(e.pendingCriterionIds))throw Error("续跑候选内容、质量缺口或身份校验失败")}b4(b,e),b5.get(a).model=e}}(d.planning.generationDiagnostics,d.planning.documentContract,d.understanding.projectModel,{restore:a.resumeAuthorState?.model,onChange:a.runId?b=>{(0,a0.tv)(j0(d.prepare.projectRoot),`document-model-checkpoint-${String(++f).padStart(9,"0")}.json`,b,a.runId),(0,a0.tv)(j0(d.prepare.projectRoot),`author-accounting-checkpoint-${String(f).padStart(9,"0")}.json`,(0,bq.pE)(d.planning.generationDiagnostics),a.runId)}:void 0});let A=d.global.input;A.runId&&d.planning.documentContract&&d.understanding.projectModel&&(0,a0.tv)(j0(d.prepare.projectRoot),"author-resume-state.json",{version:"author-resume-state-v1",originRunId:A.resumeAuthorState?.originRunId??A.runId,dependencyHash:bu(A,d.planning.generationDiagnostics)??null,workflowVersion:bn.version,contract:d.planning.documentContract,projectModel:d.understanding.projectModel,effectiveChapters:d.planning.effectiveChapters,selectedSourceFiles:[...d.prepare.materialScope.selectedFiles].sort(),writerContext:{promptTexts:d.prepare.nativeAuthorPromptTexts??d.prepare.promptTexts,integratedBlueprint:d.blueprint.integratedBlueprint,sharedConstructionPlan:d.planning.sharedConstructionPlan,conclusionTable:d.planning.conclusionTable,requiredContentNeeds:d.planning.requiredContentNeeds,projectTypeDecision:d.planning.projectTypeDecision,resumeContext:function(a){let b=JSON.stringify(Object.fromEntries(Object.entries(bo).map(([b,c])=>[b,Object.fromEntries(c.map(c=>[c,a[b][c]]))])),(a,b)=>b instanceof Map?{__authorResumeCollection:"map",entries:[...b]}:b instanceof Set?{__authorResumeCollection:"set",entries:[...b]}:b);return{version:1,sha256:bp(b),json:b}}(d)}},A.runId),a.signal?.throwIfAborted(),aL(d,"blueprint"),i="write",await gQ(d),d.global.pausedByRequest||function(a){let b=b5.get(a);if(!b||b.model.authorPassSealed)return;let c=b7(b.model);b4(b.contract,c),c.authorPassSealed=!0,c.c0TaskHashes=Object.fromEntries(c.expectedTaskIds.map(a=>[a,c.tasks[a]?.firstCandidate.contentHash??null])),c.c0ReferenceChars=b.contract.sections.reduce((a,b)=>{let d=c.tasks[b.id]?.firstCandidate;return a+(d?d.markdown.length:0)},0);let d=b3(b.contract,c);for(let a of(c.rework.referenceChars=d.referenceChars,c.rework.cumulativeCharRatio=d.cumulativeCharRatio,c.expectedTaskIds))c.taskAttempts[a]||(c.taskAttempts[a]={attempts:0,firstComplete:!1});b.onChange?.(b7(c)),b.model=c}(d.planning.generationDiagnostics),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"document-model-author.json",cd(d.planning.generationDiagnostics),a.runId),(0,a0.yW)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,stage:"before-global-review",chapters:d.chapterLoop.chapterDraftsFinal}),a.signal?.throwIfAborted(),aL(d,"write",(u=cd(d.planning.generationDiagnostics),d.global.pausedByRequest?"paused":!u||u.expectedTaskIds.some(a=>!u.tasks[a]?.current||u.tasks[a].current.pendingCriterionIds.length>0)?"blocked":"completed")),i=void 0;let B=(v=d.blueprint.integratedBlueprint)?"partial"===g3(v)?function(a,b){if(!b)return a;let c=a;return b.blueprint||(c={...c,quantities:{},specAuthorities:{}}),c}(v.data,v.validation.authorityAvailability):v.data:void 0,C=function(a,b){if(a)return{injectability:g3(a),...a.validation.authorityAvailability?{authorityAvailability:a.validation.authorityAvailability}:{},planDataRows:{productionActivities:a.data.production?.activities.filter(a=>"calculated"===a.status).length??0,siteFacilities:(a.data.siteFacilities??[]).length},...b?.assetPath?{assetPath:b.assetPath}:{}}}(d.blueprint.integratedBlueprint,{assetPath:(0,a0.HM)(j0(d.prepare.projectRoot),"blueprint-for-writing.json",a.runId)}),D=[];d.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:d.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-d.chapterLoop.globalReviewPhaseStartedAt}),(0,a0.yW)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,stage:"before-finalize",chapters:d.chapterLoop.chapterDraftsFinal});let E=await bZ(d.planning.generationDiagnostics,"phase:finalize",()=>{var b;return gF({pausedByRequest:!0===d.global.pausedByRequest,chapterDrafts:d.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:d.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:d.understanding.chapterGenerationStagesByOrder,clarificationOverrides:d.planning.clarificationOverrides,...d.understanding.hazardResolution?{hazardBindings:d.understanding.hazardResolution.bindings}:{},chapterGenerationStages:d.understanding.chapterGenerationStages,effectiveChapters:d.planning.effectiveChapters,template:d.prepare.template,allEvidence:d.understanding.allEvidence,documentSpec:d.prepare.documentSpec,projectMaterialProfile:d.prepare.projectMaterialProfile,projectMaterialSummary:d.prepare.projectMaterialSummary,domainProfile:d.prepare.domainProfile,promptTexts:d.prepare.promptTexts,reviewPromptTexts:d.prepare.reviewPromptTexts,repairPromptTexts:d.prepare.repairPromptTexts,input:d.global.input,generationStrategy:d.planning.generationStrategy,generationDiagnostics:d.planning.generationDiagnostics,chapterScopedContext:d.planning.chapterScopedProjectContext,promptIds:d.prepare.promptIds,promptDocumentRules:d.prepare.promptDocumentRules,projectUnderstanding:d.prepare.projectUnderstanding,projectContext:d.planning.projectContext,projectRoot:d.prepare.projectRoot,projectId:d.prepare.projectId,readiness:d.prepare.readiness,documentId:a.documentId,runId:a.runId,projectModel:d.understanding.projectModel,documentContract:d.planning.documentContract,runAssets:(0,a0.wE)(j0(d.prepare.projectRoot),a.runId),...a.resumeLedger?{resumePreviousReadings:a.resumeLedger.readings}:{},factExtractionPromptTexts:d.prepare.factExtractionPromptTexts,blueprintData:B,...C?{blueprintDataRef:C}:{},bidComposition:d.understanding.bidComposition,requirementSemantics:d.prepare.requirementSemantics,hasExplicitOutline:d.prepare.hasExplicitOutline,missingItems:d.understanding.missingItems,clarificationRequests:d.understanding.clarificationRequests,unfixableDeclarations:d.understanding.unfixableDeclarations,retrievalCoverageReports:d.understanding.retrievalCoverageReports,failedChapterMessages:d.understanding.failedChapterMessages,webResearchReport:d.understanding.webResearchReport,indexHealth:d.understanding.indexHealth,globalConsistencyIssues:D,scopeConflicts:d.understanding.canonicalFacts.scopeConflicts,evaluationCriteriaItems:d.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:d.planning.tenderRequirements,requirementAssignments:d.blueprint.requirementAssignments,requirementsSimilarity:d.planning.requirementsSimilarity,agentWorkflow:{...b=d.understanding.agentWorkflow,baseProjectGraph:{works:[],methods:[],resources:[],schedule:[],standards:[],risks:[],requirements:[],siteConditions:[],addendumChanges:[],gaps:[],generatedAt:b.baseProjectGraph.generatedAt},materialSnapshot:{...b.materialSnapshot,files:[]}},emitProgress:d.global.emitProgress,withProgressHeartbeat:d.global.withProgressHeartbeat,...void 0!==d.global.nodeLogBaseDir?{nodeLogBaseDir:d.global.nodeLogBaseDir}:{}})});if(d.planning.documentContract&&d.understanding.projectModel&&!E.reviewMetadata?.contractQuality){bm(d.prepare.projectRoot,d.understanding.projectModel);let b=await d.global.withProgressHeartbeat(()=>ab({contract:d.planning.documentContract,projectModel:d.understanding.projectModel,chapters:E.chapters,markdown:E.markdown,diagnostics:d.planning.generationDiagnostics,signal:a.signal}));if(!E.reviewMetadata)throw Error("合同评价缺少生成复核元数据");E.reviewMetadata.contractQuality=b;let c=b.score.blocking.map(a=>{let c=d.planning.documentContract.criteria.find(b=>b.id===a),e=b.findings.find(b=>b.criterionId===a);return{level:"error",severity:"blocker",category:"structure",owner:"system",chapterTitle:d.planning.documentContract.chapters.find(a=>a.id===c.chapterId)?.title,message:`合同评价${e?.status==="not-met"?"未满足":"未判定"}:${c.description};${e?.reason??"评价未完成"}`,provenance:{detectorId:"document-contract-quality",fingerprint:`${b.contractId}:${a}`}}}),e=aa(d.planning.documentContract,b),f=[...c,...e];E.validationIssues.push(...f),E.exportGate.blockingIssues.push(...f),E.exportGate.checklist.push({key:"document-contract-quality",label:"冻结合同七维评价",passed:b.score.deliveryReady,message:`七维评价:${b.score.deliveryReady?"职责满足且专业档位达标":"仍有缺陷、待核或专业档位不足"};关键阻断 ${b.score.blocking.length} 项,专业档位缺口 ${b.score.qualityGaps.length} 项;专家验收单独记录`}),E.exportGate.passed=E.exportGate.passed&&b.score.deliveryReady,E.validation.passed=E.validation.passed&&b.score.deliveryReady,E.validation.errors.push(...f.map(a=>a.message)),a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"document-contract-quality",status:b.score.deliveryReady?"success":"partial",message:`七维专业诊断:阻断 ${b.score.blocking.length} 项;核验与质量评级分别呈现,待专家验收`,details:b.score.dimensions.map(a=>`${a.label}:${a.qualityLabel},核验完成 ${(100*a.coverage).toFixed(1)}%`)}})}a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"tender-source-completeness",status:"running",message:"首稿已保存,独立核查完整来源的技术义务漏项;正文供审阅"}});let F=await d.global.withProgressHeartbeat(()=>jl({model:d.planning.tenderRequirements,markdown:E.markdown,documentHash:T(E.chapters,E.markdown),candidateRoutes:d.planning.professionalOutlinePlan?.requirementAssignments,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:a.runId?(b,c)=>{(0,a0.tv)(j0(d.prepare.projectRoot),`tender-source-coverage-batch-${b}.json`,c,a.runId)}:void 0,onFulfillmentBatch:a.runId?(b,c)=>{(0,a0.tv)(j0(d.prepare.projectRoot),`tender-omission-fulfillment-batch-${b}.json`,c,a.runId)}:void 0}));a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"tender-source-coverage-review.json",F,a.runId);let G=[..."unmeasured"===F.status?[{level:"error",severity:"blocker",category:"control_loop",owner:"system",message:"全源技术义务漏项审阅尚未完成;正文供审阅,不能宣布正式交付通过",provenance:{detectorId:"tender-source-completeness",fingerprint:jk([F.sourceHash,F.documentHash,F.batches])}}]:[],...F.omissions.flatMap((a,b)=>{let c=F.bodyFindings.find(a=>a.omissionIndex===b);return c?.status==="covered"?[]:[{level:"error",severity:"blocker",category:"control_loop",owner:"system",message:`来源新发现义务${c?.status==="not-met"?"正文未完整承接":"正文承接尚未判定"}:${a.requirement};${c?.reason??"缺少实际正文核查"}。保留首稿与原文证据`,provenance:{detectorId:"tender-source-completeness",fingerprint:jk([F.sourceHash,F.documentHash,a,c])}}]})];if(a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"tender-source-completeness",status:G.length?"partial":"success",message:`完整来源审阅${"measured"===F.status?"已完成":"仍有未测"};新发现义务${F.omissions.length}项,实际正文已承接${F.bodyFindings.filter(a=>"covered"===a.status).length}项,原始首稿与问题分别保留`}}),E.validationIssues.push(...G),E.exportGate.blockingIssues.push(...G),E.exportGate.checklist.push({key:"tender-source-completeness",label:"完整来源技术义务漏项审阅",passed:0===G.length,message:`${F.batches.length}批来源核对;新发现义务${F.omissions.length}项,实际正文已承接${F.bodyFindings.filter(a=>"covered"===a.status).length}项;${"measured"===F.status?"已完成阅读核对":"尚有未测"}`}),G.length&&(E.exportGate.passed=!1,E.validation.passed=!1,E.validation.errors.push(...G.map(a=>a.message))),a.runId&&E.reviewMetadata?.contractQuality&&(0,a0.tv)(j0(d.prepare.projectRoot),"contract-quality.json",E.reviewMetadata.contractQuality,a.runId),a.runId){let b=j0(d.prepare.projectRoot);(0,a0.yW)({generatedDir:b,runId:a.runId,documentId:a.documentId,stage:"final-document",chapters:E.chapters,markdown:E.markdown});let c=d.planning.generationDiagnostics;(0,a0.tv)(b,"run-summary.json",{version:1,runId:a.runId,documentId:a.documentId??null,metrics:c.metrics,callPurposes:(0,h._T)(c.llm.callLog,c.llm.callLog?.length??0),callLogEntries:c.llm.callLog?.length??0,reportedCalls:c.llm.calls,currentRunCalls:c.llm.calls-(a.resumeAuthorState?.accounting?.llm.calls??0),previousAccounting:a.resumeAuthorState?.accounting??null,accounting:(0,bq.pE)(c),callLogScope:"current-run",contractQuality:E.reviewMetadata?.contractQuality??null,sourceCoverage:F,exportGate:E.exportGate,supervisorDecisionLog:c.supervisorDecisionLog??[],rawAuthorCandidates:function(a){let b=dS.get(a);if(!b)return;let c={expectedTasks:b.expectedTaskIds.length,observedTasks:new Set(b.records.filter(a=>b.expectedTaskIds.includes(a.taskId)).map(a=>a.taskId)).size,rawResponses:b.records.filter(a=>a.responseReceived).length};return(0,a0.tv)(b.generatedDir,"author-candidates.json",{version:1,runId:b.runId,contractId:b.contractId,expectedTaskIds:b.expectedTaskIds,records:b.records,structuredCandidates:b.candidates,rawDrafts:b.rawDrafts,preAcceptanceWriting:{meaningfulDrafts:b.rawDrafts.filter(a=>"unmeasured"!==a.comparison.kind).length,unchangedBodyCorrections:b.rawDrafts.filter(a=>"unchanged-body"===a.comparison.kind).length,formattingOnlyChanges:b.rawDrafts.filter(a=>"formatting-only"===a.comparison.kind).length,contentChanges:b.rawDrafts.filter(a=>"content-changed"===a.comparison.kind).length,unmeasuredResponses:b.rawDrafts.filter(a=>"unmeasured"===a.comparison.kind).length,addedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.addedChars,0),removedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.removedChars,0),replacedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.replacedChars,0),scope:"actual-raw-writing-before-admission",professionalQualityMeasured:!1},...c,firstPassAndSemanticReworkMeasured:!1},b.runId),c}(d.planning.generationDiagnostics)??null,writingMetrics:E.reviewMetadata?.writingMetrics??null,firstCandidateRetention:E.reviewMetadata?.writingMetrics?.retention??{measured:!1,reason:"当前运行缺少固定首稿评价与文档模型"}},a.runId),E.assets=[...E.assets??[],...(0,a0.wE)(b,a.runId)].filter((a,b,c)=>c.findIndex(b=>b.id===a.id)===b)}return b=!0,E}catch(a){if(c.fail(a),await c.drain(),i){let a=c.failure;aL(d,i,"failed",a instanceof Error?a.message:String(a))}throw c.failure}finally{if(await c.drain(),f(),a.runId&&d.prepare.projectRoot&&d.planning.documentContract&&(0,a0.tv)(j0(d.prepare.projectRoot),"author-accounting-final.json",(0,bq.pE)(d.planning.generationDiagnostics),a.runId),!b&&a.runId&&d.prepare.projectRoot){let b=d.planning.generationDiagnostics;(0,a0.tv)(j0(d.prepare.projectRoot),"run-summary-incomplete.json",{runId:a.runId,documentId:a.documentId,completed:!1,metrics:b.metrics,calls:b.llm.callLog??[],callPurposes:(0,h._T)(b.llm.callLog,b.llm.callLog?.length??0),preparationLifecycle:c.receipt(),reportedCalls:b.llm.calls,llm:{...b.llm,callLog:void 0},modelCheckpoint:cd(b)??null},a.runId)}}})}["村","社区","小区","家园","片区","工区","标段"].map(a=>RegExp(`[\\u4e00-\\u9fa5A-Za-z0-9]{1,6}${a}`,"gu"));var js=c(31421);function jt(a){if("win32"!==process.platform)try{return(0,js.execFileSync)("ps",["-p",String(a),"-o","lstart="],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}class ju{constructor(a,b,c=a=>(function(a,b){if(a.pid===b.pid&&a.startedAt!==b.startedAt)return!1;try{process.kill(a.pid,0)}catch(a){return"ESRCH"!==a.code}let c=a.processStamp&&jt(a.pid);return!c||c===a.processStamp})(a,b)){this.current=b,this.alive=c,this.closed=!1,ad().mkdirSync(af().dirname(a),{recursive:!0});let d=(0,ag.loadBetterSqlite3)();this.db=new d(a),ad().chmodSync(a,384),this.db.pragma("busy_timeout = 5000"),this.db.pragma("journal_mode = WAL"),this.db.exec(`CREATE TABLE IF NOT EXISTS dispatch_jobs (task_id TEXT PRIMARY KEY, document_id TEXT NOT NULL UNIQUE, enqueued_at INTEGER NOT NULL, payload TEXT NOT NULL, state TEXT NOT NULL);
|
|
90
|
+
${a.markdown}`,JSON.stringify(d)].join("\n\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"requirement-judge",taskKind:(0,h.TO)(),schema:{type:"object",required:["findings"],additionalProperties:!1,properties:{findings:{type:"array",items:{type:"object"}}}}}));if(a.onBatch?.(c,e),!e||Object.keys(e).some(a=>"findings"!==a)||!Array.isArray(e.findings))throw Error("正文承接核查响应结构非法");let f=e.findings;if(f.length!==d.length||new Set(f.map(a=>a?.omissionIndex)).size!==d.length||f.some(b=>!b||Object.keys(b).some(a=>!["omissionIndex","status","quotes","reason"].includes(a))||!d.some(a=>a.omissionIndex===b.omissionIndex)||!["covered","not-met","unmeasured"].includes(b.status)||"string"!=typeof b.reason||!b.reason.trim()||!Array.isArray(b.quotes)||b.quotes.some(b=>"string"!=typeof b||!b.trim()||!a.markdown.includes(b))||"covered"===b.status&&!b.quotes.length))throw Error("正文承接核查缺项、重复或证据不属于实际首稿");b.push(...f)}catch(c){if(a.signal?.aborted)throw c;b.push(...e(c instanceof Error?c.message:String(c)))}}return b.sort((a,b)=>a.omissionIndex-b.omissionIndex)}var jj=c(55852);let jk=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex");async function jl(a){(0,gG.PT)(a.model);let b=a.model.sourceLibrary.units,c=[],d=[],e=0;for(let a of b){let b=JSON.stringify((0,jj.QE)(a)).length;d.length&&(e+b>4e4||a.file!==d[0].file)&&(c.push(d),d=[],e=0),d.push(a),e+=b}d.length&&c.push(d);let f=Array(c.length),g=[],i=0;return await Promise.all(Array.from({length:Math.min(c.length,(0,h.jW)())},async()=>{for(;i<c.length;){a.signal?.throwIfAborted();let b=i++,d=c[b],e=d.map(a=>a.index),j=a.model.entries.filter(a=>e.includes(a.discoveryEvidence?.sourceIndex??-1)),k=[],l=[];try{let c=Object.fromEntries([...new Set(d.map(a=>a.file).filter(a=>!!a))].flatMap(b=>{let c=a.model.sourceLibrary.contexts[b];return c?[[b,(0,hM.zV)(c)]]:[]})),f=await (a.reviewer?.(d,j)??(0,h.bb)("你是独立的施工组织设计来源完整性审阅智能体。",["对照本批完整原文及已经发现的技术义务,查找会影响专业施组完整性的遗漏。合读问题、答复和修正关系,保留对象、条件和接口。","不必分类每个商业、报价、资格、程序或目录字符;它们可以保留未分类。不能因为正文不写商业金额就推断没有相邻施工责任。","已发现不等于已承接。route是实际用途路由;非technical或未知候选若仍含施工方法、组织、协调、规格或检验责任,必须提出遗漏的技术义务,不能因它已经在discovered中就忽略。版本、文档组成、投标程序本身不要求编成施工方法,但不能遮掉同源实际施工责任;新提出的义务还会独立核对实际正文,不凭路由标记判定文稿缺失。","此处只核技术义务发现是否遗漏,不评价正文是否已经履行,不编造新工程值,不输出改写正文。若发现新义务,复制originalSource中已给出的evidenceRef,来源所属由程序取得,不另填sourceId,如S635/M0,不复制quote或计算位置;服务器还原原文。originalSource各text拼接是完整母文,须完整阅读。requirement简明解释技术响应,不把提问假设当采纳值。","sourceContexts给出当前真实补疑、修正声明及来源域资格。合读已修正与未决关系,不能把明确被取代的旧值重新提为本项目义务;资格未知不能解释为该母本无技术职责。无法判断生效关系时在reason明确未决,不自行认证现行附件或清单。",'返回{"omissions":[{"evidenceRefs":["S635/M0"],"requirement":"遗漏的技术义务","reason":"依据"}]}。无遗漏时omissions为空数组。来源及响应由程序记账,不输出阅读自评;空遗漏不证明每字用途已确认。',JSON.stringify({sourceFile:d[0]?.file,sourceContexts:c,sources:d.map(jj.QE),discovered:j.map(b=>({sourceId:`S${b.discoveryEvidence?.sourceIndex}`,requirement:b.text,route:a.candidateRoutes?.find(a=>a.requirementId===(0,bD.DS)(b))}))})].join("\n\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,h.TO)(),schema:{type:"object",required:["omissions"],additionalProperties:!1,properties:{omissions:{type:"array",items:{type:"object",additionalProperties:!1,properties:{evidenceRefs:{type:"array",required:!0,minItems:1,items:{type:"string"}},requirement:{type:"string",required:!0},reason:{type:"string",required:!0}}}}}}}));a.onBatch?.(b,f);let i=(0,jj.uP)(d);if(!f||"object"!=typeof f||Object.keys(f).some(a=>"omissions"!==a)||!Array.isArray(f.omissions))throw Error("来源完整性响应仅接受当前omissions协议,不转换读取自评或退役字段");for(let a of(l=[...e],f.omissions)){if(!a||Object.keys(a).some(a=>!["evidenceRefs","requirement","reason"].includes(a))||!Array.isArray(a.evidenceRefs)||"string"!=typeof a.requirement||!a.requirement.trim()||"string"!=typeof a.reason||!a.reason.trim()){k.push("遗漏提案没有绑定当前批次真实原文,保持未测");continue}try{let{unit:b,quotes:c}=i(a.evidenceRefs);g.push({index:b.index,quote:c.map(a=>a.quote).join("\n\n"),quotes:c,requirement:a.requirement,reason:a.reason,parentFingerprint:b.parentFingerprint,sourceSpansSha256:b.sourceSpansSha256,sourceIdentity:b.sourceIdentity,contextFingerprint:b.contextFingerprint})}catch(a){k.push(a instanceof Error?a.message:String(a))}}}catch(b){if(a.signal?.aborted)throw b;k.push(b instanceof Error?b.message:String(b))}f[b]={requestedIndices:e,responseIndices:l,errors:k}}})),g.sort((a,b)=>a.index-b.index),{bodyFindings:await ji({omissions:g,markdown:a.markdown,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.fulfillmentReviewer,onBatch:a.onFulfillmentBatch}),version:"tender-source-coverage-review-v6-source-duty-routes",sourceHash:jk(a.model.sourceLibrary),documentHash:a.documentHash,candidateRoutesHash:jk(a.candidateRoutes??[]),status:b.length>0&&f.every(a=>!a.errors.length)?"measured":"unmeasured",batches:f,omissions:g.sort((a,b)=>a.index-b.index)}}async function jm(a){let b=Array(a.tasks.length),c=0;return await Promise.all(Array.from({length:Math.min((0,h.jW)(),Math.ceil(a.tasks.length/16))},async()=>{for(;c<a.tasks.length;){if(a.signal?.aborted)throw Error("用户中止");let d=c;c+=16;let e=a.tasks.slice(d,d+16),i=e;for(let c=0;c<2&&i.length;c+=1){try{let j=a.reviewer?await a.reviewer(i):await (0,h.v7)("你是专业文档的主控规划智能体,负责在作者写作前确认内容职责与适用控制点。",[(0,f.V2)(a.projectType),`为每个固定任务确认适用内容类型:${JSON.stringify(g.if)}。`,"依据具体对象和职责分类,可选多个类型。管理程序不要求工艺参数数量;施工方法依据适用工序与控制点;进度依据工作量、逻辑和资源约束。不能把全章所有类型一律下给每节。","利用同章其他固定任务确认边界:风险辨识、清单和评估不自动承担应急资源、救援联络与复工方案;专项方案编制审核论证属于管理手续,不能仅因出现“施工方案”就让该节承担全部现场工法;材料/品牌要求不因未提出定量控制值而强制添加数字。职责明确覆盖这些内容时仍须保留。","每个任务还须明确collectsDocumentNormativeUses。仅本节承担汇总全文实际采用规范名称、编号、版本和适用用途的编制依据目录职责时为true;材料验收、质量目标、危险源辨识等小节即使含basis类型也为false。施工先后不构成写作依赖,不将所有涉及规范的小节推迟。","对选中的每种类型逐项确认控制点,ID为类型:序号(从1开始)。可把本节确实没有该职责的控制点标为不适用,并说明范围依据;不得因缺少资料、不会写或希望降低分母而排除。定性管理无需定量参数,纯载体节无需工艺验收。每个选中类型须至少有一个适用控制点。","逐项检查选中类型的全部控制点,allControlsConfirmed=true表示已全部核查;只列出不适用项的ID与具体职责边界依据,其余项承诺适用。每个taskIndex恰好返回一次。不要重复抄写长任务ID与整套适用控制点,不能将缺料当不适用。",`【同章全部固定职责,供划清任务边界】${JSON.stringify(a.tasks.filter(a=>i.some(b=>b.chapterTitle===a.chapterTitle)))}`,'只返回{"decisions":[{"taskIndex":0,"types":["management"],"reason":"本节职责依据","collectsDocumentNormativeUses":false,"allControlsConfirmed":true,"notApplicable":[]}]}。',...c?["仅重新确认此前未决任务,必须检查完整控制点集合和适用范围。"]:[],JSON.stringify(i.map((a,b)=>({taskIndex:b,...a})))].join("\n"),{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,h.TO)(),maxTokens:12e3,temperature:0,schema:{type:"object",required:["decisions"],properties:{decisions:{type:"array",minItems:i.length,maxItems:i.length,items:{type:"object"}}}}});a.onBatch?.({offset:d,attempt:c,tasks:i,raw:j});let k=j&&"object"==typeof j&&Array.isArray(j.decisions)?j.decisions:[],l=new Map,m=new Map;for(let a of k){let b=Number.isInteger(a?.taskIndex)?i[a.taskIndex]?.id:a?.taskId;if(!b||!i.some(a=>a.id===b))continue;let c=l.get(b)??[];l.set(b,c);try{let d=function(a,b){if(!b||"object"!=typeof b||!Array.isArray(b.decisions))throw Error("主控内容类型响应缺少decisions");let c=new Set(a.map(a=>a.id)),d=new Set,e=b.decisions.map(b=>{if(!b||"object"!=typeof b)throw Error("内容类型决定不是对象");let e={...b,taskId:Number.isInteger(b.taskIndex)?a[b.taskIndex]?.id:b.taskId};if(!c.has(e.taskId)||d.has(e.taskId))throw Error("内容类型决定含未知或重复任务ID");if(!Array.isArray(e.types)||!e.types.length||e.types.some(a=>"string"!=typeof a||!Object.hasOwn(g.if,a))||new Set(e.types).size!==e.types.length)throw Error("内容类型集合非法");if("boolean"!=typeof e.collectsDocumentNormativeUses||e.collectsDocumentNormativeUses&&!e.types.includes("basis"))throw Error("全文规范汇总依赖必须明确,且由编制依据职责承担");if("string"!=typeof e.reason||!e.reason.trim())throw Error("内容类型决定没有职责依据");if(void 0===e.controls&&!0===b.allControlsConfirmed&&Array.isArray(b.notApplicable)){let a=e.types.flatMap(a=>g.if[a].map((b,c)=>`${a}:${c+1}`));if(new Set(b.notApplicable.map(a=>a?.id)).size!==b.notApplicable.length||b.notApplicable.some(b=>!b||!a.includes(b.id)||"string"!=typeof b.reason||!b.reason.trim()||/缺料|资料不足|没(?:有)?抽|未取得|未返回|没写/u.test(b.reason)))throw Error("不适用清单未知、重复或试图以缺项排除控制点");e.controls=a.map(a=>({id:a,applicable:!b.notApplicable.some(b=>b.id===a),reason:b.notApplicable.find(b=>b.id===a)?.reason??`本节主控已逐项确认:${e.reason}`}))}if(void 0!==e.controls){let a=e.types.flatMap(a=>g.if[a].map((b,c)=>`${a}:${c+1}`));if(!Array.isArray(e.controls)||e.controls.length!==a.length||new Set(e.controls.map(a=>a?.id)).size!==a.length||e.controls.some(b=>!b||!a.includes(b.id)||"boolean"!=typeof b.applicable||"string"!=typeof b.reason||!b.reason.trim()))throw Error("适用控制点决定缺项、重复或没有职责依据");if(e.types.some(a=>!e.controls.some(b=>b.id.startsWith(`${a}:`)&&b.applicable)))throw Error("所选内容类型不能将全部控制点排为不适用;应重新确认职责类型")}return d.add(e.taskId),{taskId:e.taskId,types:e.types,reason:e.reason,status:"confirmed",collectsDocumentNormativeUses:e.collectsDocumentNormativeUses,...e.controls?{controls:e.controls}:{}}});if(d.size!==c.size)throw Error("主控内容类型决定集合不完整");return e}([i.find(a=>a.id===b)],{decisions:[{...a,taskId:b,taskIndex:void 0}]})[0];if(!d.controls)throw Error("主控尚未逐项确认适用控制点");c.push(d)}catch(a){m.set(b,a instanceof Error?a.message:String(a))}}for(let a of i){let c=l.get(a.id)??[];b[d+e.findIndex(b=>b.id===a.id)]=1!==c.length||m.has(a.id)?{taskId:a.id,types:(0,g.MT)(a).types,status:"unmeasured",collectsDocumentNormativeUses:!1,reason:`主控内容类型尚未确认:${m.get(a.id)??(c.length>1?"任务类型重复裁决":"未返回合法控制点决定")}`}:c[0]}}catch(f){if(a.signal?.aborted)throw f;let c=f instanceof Error?f.message:String(f);i.forEach(a=>{b[d+e.findIndex(b=>b.id===a.id)]={taskId:a.id,types:(0,g.MT)(a).types,status:"unmeasured",collectsDocumentNormativeUses:!1,reason:`主控内容类型尚未确认:${c};词面候选仅用于已有草稿定位`}})}i=e.filter(a=>b[d+e.findIndex(b=>b.id===a.id)]?.status!=="confirmed")}}})),{version:"content-type-plan-v2-explicit-normative-dependency-2026-10-13",inputHash:(0,e.createHash)("sha256").update(JSON.stringify(a.tasks)).digest("hex"),decisions:b}}function jn(a){return a.criteria.filter(a=>a.applicable&&a.admission?.status==="unmeasured")}let jo="author-source-application-",jp=/^author-source-application-([a-f0-9]{64})\.json$/u,jq=a=>(0,e.createHash)("sha256").update(a).digest("hex");async function jr(a){let b=new AbortController;a={...a,signal:a.signal?AbortSignal.any([a.signal,b.signal]):b.signal},(0,a1.Te)(a.signal);let c=new bA(a.signal),d={global:{input:a={...a,signal:c.signal},preparationWork:c},prepare:{},understanding:{},planning:{},blueprint:{integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[]},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};d.planning.generationDiagnostics={metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}},(0,b_.XI)((0,b_.Su)(d.planning.generationDiagnostics),{budget:a.resourceLimits,costCeilingUsd:a.resourceLimits?.costCeilingUsd}),a.runId&&a.projectRoot&&(0,bB.WX)(d.planning.generationDiagnostics,{generatedDir:j0(a.projectRoot),runId:a.runId});let f=(0,bC.yY)(d.planning.generationDiagnostics,b=>{a.runId&&d.prepare.projectRoot&&(0,a0.Hf)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,snapshot:b})});return(0,ds.Uq)({diagnostics:d.planning.generationDiagnostics,signal:a.signal,callKind:"planning-review",outputCapacity:"provider-default",onTokenAnomaly:c=>{b.abort(Error(`Token消费异常:${c.author.reason}`)),a.onTokenAnomaly?.(c)}},async()=>{let b=!1,i="prepare";try{!function(a){let b=a.global.input.resumeTasks,c=a.global.input.resumeLedger;if(!b&&!c)return;let d=function(a){let b=b=>a.filter(a=>a.class===b),c=[],d=b("not-produced"),e=b("blocked"),f=b("manual");if(d.length>0)for(let a of(c.push(`【重写】${d.length} 项(上一轮没有产出)`),d))for(let b of(c.push(`- ${a.title}|原因:${a.reason}`),a.gaps??[]))c.push(` \xb7 缺口:${b}`);if(e.length>0)for(let a of(c.push(`【定向修复】${e.length} 项(已产出但被阻断——只修被点名的判据,不重写整章)`),e))c.push(`- ${a.title}${a.criteria.length>0?`|判据:${a.criteria.join("、")}`:""}`);if(f.length>0)for(let a of(c.push(`【需要你定夺】${f.length} 项(系统不做,交回人)`),f))c.push(`- ${a.title}`);return{title:0===a.length?"本轮续跑任务书(上一轮无待办)":`本轮续跑任务书:${d.length} 重写 / ${e.length} 定向修复 / ${f.length} 待你定`,lines:c.length>0?c:["上一轮账本没有需要处理的项目:本次按原计划推进"],metrics:{重写项:d.length,定向修复项:e.length,人工待答项:f.length,合计:a.length}}}(b??[]),e=c?.readings;a$(a,{batch:"generation.prepare",id:"resume.plan",type:"resume.plan",title:d.title,status:0===d.metrics.合计?"completed":d.metrics.人工待答项===d.metrics.合计?"blocked":"repairing",metrics:{...d.metrics,...e?.blockers===void 0?{}:{上轮门禁阻断:e.blockers},...e?.words===void 0?{}:{上轮字数:e.words},...e?.firstPassRate===null||e?.firstPassRate===void 0?{}:{上轮块一次通过率:Number(e.firstPassRate.toFixed(3))}},issues:d.lines.map(a=>({level:"info",severity:"suggestion",category:"control_loop",owner:a.includes("需要你定夺")?"user":"system",message:a}))})}(d),await jh(d),a.resumeAuthorState?.accounting&&(0,bq.zh)(d.planning.generationDiagnostics,a.resumeAuthorState.accounting),function(a){let b=a.global.input.runId;if(!b)return;let c=new Set(a.prepare.materialScope.selectedFiles),d=(0,ah.Yy)(a.prepare.projectRoot,{filePaths:[...c],includeParserVersion:!0}).map(a=>{let b=a.parserVersion??null;return{path:a.relativePath,sourceHash:a.contentHash??null,chunkCount:a.chunkCount,indexedAt:a.indexedAt,parserVersion:b}}).sort((a,b)=>a.path.localeCompare(b.path)),f=(0,j.c9)(a.planning.generationDiagnostics),h=f.models.active,i=h&&f.models.list.find(a=>a.name===h.name&&a.provider===h.provider),k={active:h,selected:i?{name:i.name,provider:i.provider,thinking:i.thinking??"follow-task"}:null},l=i?f.providers[i.provider]:void 0,m=l&&i?[{name:i.provider,protocol:l.protocol??"auto",endpointFingerprint:(0,e.createHash)("sha256").update(JSON.stringify([l.baseUrl??"",l.directEndpoint??!1])).digest("hex")}]:[],n=(0,a0.tv)(j0(a.prepare.projectRoot),"run-inputs.json",{version:2,runId:b,documentId:a.global.input.documentId??null,capturedAt:Date.now(),buildIdentity:(0,aj.S)()??null,workflowVersion:bn.version,evaluationProtocol:g.GM,scoringCalibration:"initial-unvalidated",requirement:a.global.input.requirement??"",projectName:a.global.input.projectName??null,title:a.global.input.title??null,prompts:a.prepare.promptPlan.prompts,inputSnapshotHash:a.global.input.inputSnapshot?.sha256??null,skills:a.global.input.inputSnapshot?.skills??null,materialScope:a.prepare.materialScope,sources:d,model:k,providers:m,limits:{tuningProfile:(0,a2.z)(),resourceLimits:a.global.input.resourceLimits??null,loopBudget:(0,b_.Su)(a.planning.generationDiagnostics).budget}},b);(0,a0.Fr)("run-inputs",b),n.assetPath,n.sha256}(d),a.signal?.throwIfAborted(),aL(d,"prepare"),i="understand";let c=a.resumeAuthorState?.writerContext.resumeContext;if(c){var k,l,m,n,r,t,u,v;if(bm(d.prepare.projectRoot,a.resumeAuthorState.projectModel),1!==c.version||"string"!=typeof c.json||bp(c.json)!==c.sha256)throw Error("作者续跑上下文校验失败");let b=JSON.parse(c.json,(a,b)=>b?.__authorResumeCollection==="map"?new Map(b.entries):b?.__authorResumeCollection==="set"?new Set(b.entries):b);for(let[a,c]of Object.entries(bo)){let e=b[a];if(!e||"object"!=typeof e)throw Error("作者续跑上下文缺少冻结阶段");for(let b of c)Object.hasOwn(e,b)&&(d[a][b]=e[b])}if(!d.planning.tenderRequirements)throw Error("恢复的作者上下文缺少完整招标职责裁决,须重新完成资料理解");(0,gG.PT)(d.planning.tenderRequirements),a.signal?.throwIfAborted(),a$(d,{batch:"generation.understanding",stage:{type:"validation",roleId:"author-dependency-restoration",status:"success",message:"资料与编译依赖一致,恢复原写作合同、事实及前置裁决;仅调度未完成作者任务"}}),aL(d,"understand")}else{if(await (0,ds.Uq)({diagnostics:d.planning.generationDiagnostics,signal:a.signal,callKind:"fact-extraction"},()=>iB(d)),void 0===d.understanding.tenderRequirementsTask)throw Error("资料理解没有建立完整招标来源与发现台账");d.planning.tenderRequirements=await d.understanding.tenderRequirementsTask,(0,gG.PT)(d.planning.tenderRequirements),a.signal?.throwIfAborted(),aL(d,"understand"),i="plan",await hL(d),a.signal?.throwIfAborted(),aL(d,"plan"),i="blueprint",await g4(d)}if(i="blueprint",a.resumeAuthorState){let b=a.resumeAuthorState;if(bm(d.prepare.projectRoot,b.projectModel),!c&&d.understanding.preparedProjectFacts?.inputHash!==b.projectModel.inputHash)throw Error("事实抽取目标或资料依赖已经变更,不能沿用同一作者检查点");d.understanding.projectModel=b.projectModel,d.understanding.arbitratedFacts=JSON.parse(JSON.stringify(b.projectModel.facts)),d.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(b.projectModel.factsModel)),d.planning.documentContract=b.contract,d.planning.effectiveChapters=b.effectiveChapters,d.prepare.promptTexts=b.writerContext.promptTexts,d.blueprint.integratedBlueprint=b.writerContext.integratedBlueprint,d.planning.conclusionTable=b.writerContext.conclusionTable,d.planning.requiredContentNeeds=b.writerContext.requiredContentNeeds,d.planning.projectTypeDecision=b.writerContext.projectTypeDecision,d.planning.sharedConstructionPlan=b.writerContext.sharedConstructionPlan,a.runId&&((0,a0.tv)(j0(d.prepare.projectRoot),"project-model.json",b.projectModel,a.runId),(0,a0.tv)(j0(d.prepare.projectRoot),"document-contract.json",b.contract,a.runId))}else{d.understanding.projectModel=function(a){let b=a.understanding.preparedProjectFacts;if(!b)throw Error("项目事实准备尚未完成,不能开始写作");if((0,s.gM)(b.sourceVersionPolicy),(0,s.cW)(af().join(j0(a.prepare.projectRoot),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("理解期间来源发行确认已变化,不能冻结旧用途账");let c=Object.keys(b.sources).flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({filePath:b,content:c.content,chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,chapterId:"project-source-assertions",score:1,source:"complete-parsed-source",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b)}))),d=JSON.parse(JSON.stringify({version:bi,inputHash:b.inputHash,sources:b.sources,sourceVersionPolicy:b.sourceVersionPolicy,facts:a.understanding.arbitratedFacts.map(b=>(0,a3.G5)(b,{roleId:a.understanding.fileRoleByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile),processingType:a.understanding.fileProcessingByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile)})),sourceControls:(0,p.y)(c),factsModel:a.understanding.preliminaryFactsModel,unresolvedFields:b.unresolvedFields,workPackages:a.blueprint?.integratedBlueprint?.outline.projectWorkPackages??[]})),e={...d,snapshotId:bj(d)};return a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"project-model.json",e,a.global.input.runId),a.global.input.runId&&(0,a0.tv)(j0(a.prepare.projectRoot),"source-version-policy.json",e.sourceVersionPolicy,a.global.input.runId),a.understanding.arbitratedFacts=JSON.parse(JSON.stringify(e.facts)),a.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(e.factsModel)),e}(d);let{structures:b,headings:c}=function(a){let b=new Map,c={};for(let d of a){if(b.has(d.id)||!d.sections?.length||new Set(d.sections).size!==d.sections.length)throw Error("作者任务必须承接完整且唯一的正式目录");b.set(d.id,{blocks:d.sections.map((a,b)=>{if(!a.trim())throw Error("正式目录不能有空作者任务");return c[`${d.id}:section:${b+1}`]={level:3,confirmed:!0},{title:a,subPoints:[{title:a,sources:[a]}]}})})}return{structures:b,headings:c}}(d.planning.effectiveChapters);d.planning.chapterWritingStructures=b;let e=Object.fromEntries([...b].flatMap(([a,b])=>b.blocks.map((b,c)=>[`${a}:section:${c+1}`,`本节主责:${b.title};必须完成的内容:${[...new Set(b.subPoints.map(a=>`${a.title}(${[...new Set(a.sources)].join("、")})`))].join(";")}${(d.planning.professionalOutlineResponsibilities?.[`${a}\u0000${b.title}`]??[]).map(a=>`;归并承接职责:${a}`).join("")}`])));a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:"running",message:"主智能体确认各小节实际职责、适用控制点及写作信息依赖"}});let f=await jm({projectType:d.planning.projectTypeDecision?.type,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`content-type-batch-${b.offset}-${b.attempt}.json`,b,a.runId),a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:"running",message:`已保存第${b.offset+1}项起${b.tasks.length}项内容职责响应,正在验证`}})},tasks:[...b].flatMap(([a,b])=>b.blocks.map((b,c)=>({id:`${a}:section:${c+1}`,chapterTitle:d.planning.effectiveChapters.find(b=>b.id===a).title,title:b.title,responsibility:e[`${a}:section:${c+1}`]})))}),h=f.decisions.filter(a=>"confirmed"===a.status).length;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"content-type-plan",status:h===f.decisions.length?"success":"partial",message:`内容职责已确认${h}/${f.decisions.length}项;未确认项保留原问题`}});let i=d.planning.effectiveChapters.map(a=>({...a,sections:b.get(a.id).blocks.map(a=>a.title)}));a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"required-content-needs",status:"running",message:"确认实际必需内容的来源、规范或拟定安排性质,不设置统一参数义务"}}),d.planning.requiredContentNeeds=await (0,hN.dm)({chapters:i,facts:d.understanding.projectModel.facts,existing:d.planning.requiredContentNeeds,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onReceipt:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`required-content-needs-contract-${b.source}-${b.offset}.json`,b,a.runId)}});let j=Object.values(d.planning.requiredContentNeeds);a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"required-content-needs",status:j.every(a=>a.confirmed)?"success":"partial",message:`必需内容性质已确认${j.filter(a=>a.confirmed).length}/${j.length}项;未确认内容保留原问题`}});let k=d.prepare.requirementSemantics,l=[...(0,bD.PM)(d.understanding.projectModel),...d.planning.professionalOutlinePlan?(w=d.planning.tenderRequirements.entries,x=d.planning.professionalOutlinePlan,bG(w,x.chapters,x),x.requirementAssignments.filter(a=>"unmeasured"===a.scope).map(a=>({id:a.requirementId,text:`该来源候选的技术职责用途尚待核定:${x.tenderRequirements.find(b=>b.id===a.requirementId).text};${a.reason}`,source:"全文主控完整原源用途未判定;原候选与完整母文保留在professional-outline-plan",global:!0,admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}))):[],...(0,bd.LA)(d.understanding.projectModel.facts),...d.planning.projectTypeDecision?.status==="unmeasured"?[{...(0,bD.v7)(`根据项目资料确认主要工程性质及专属能力适用范围:${d.planning.projectTypeDecision.reason}`,"工程类型尚未确认",void 0,!0),admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}]:[],...(k?.globalRequirements??[]).map(a=>(0,bD.v7)(a,"用户要求语义计划",void 0,/每(?:一|个|项|条)|全部|全文|所有|逐项|不得|禁止/u.test(a))),...(k?.chapterRequirements??[]).flatMap(a=>a.requirements.map(b=>(0,bD.v7)(b,"用户章节要求",i.find(b=>b.title===a.chapterTitle)?.id))),...(k?.styleRequirements??[]).map(a=>(0,bD.v7)(a,"用户明确写作风格要求",void 0,!0)),...d.prepare.promptDocumentRules.requiredSubjects.map(a=>(0,bD.v7)(`完整承接指定对象:${a}`,"冻结提示词的必需对象")),...d.prepare.promptDocumentRules.requiredTables.map(a=>(0,bD.v7)(`完成指定表格及其用途:${a}`,"冻结提示词的必需表格")),...(d.prepare.promptDocumentRules.requiredKeywords??[]).map(a=>(0,bD.v7)(`实质承接指定主题:${a}`,"冻结提示词的必需主题")),...k?.parseFailed?[{...(0,bD.v7)(`用户强制要求尚未完成解析:${k.parseFailureReason??"未知解析失败"}`,"用户要求解析失败",void 0,!0),admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}]:[]].filter((a,b,c)=>c.findIndex(b=>b.id===a.id)===b),m=(0,bD.sv)({chapters:i,requirements:d.blueprint.requirementAssignments.map(a=>a.entry),assignments:d.blueprint.requirementAssignments,extraObligations:l,requiredContentNeeds:d.planning.requiredContentNeeds});a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:"running",message:`主智能体分配${m.length}项实际交付义务的责任小节`}});let n=await (0,bD.xO)({items:m,tasks:i.flatMap(a=>(a.sections??[]).map((b,c)=>({id:`${a.id}:section:${c+1}`,chapterId:a.id,title:b,responsibility:e[`${a.id}:section:${c+1}`]}))),diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:b=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`contract-ownership-batch-${b.offset}-${b.attempt}.json`,b,a.runId),a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:"running",message:`已保存第${b.offset+1}项起的义务归属响应,正在验证`}})}}),q=n.decisions.filter(a=>"confirmed"===a.status).length;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"contract-ownership-plan",status:q===n.decisions.length?"success":"partial",message:`义务归属已确认${q}/${n.decisions.length}项;未确认项保留原问题`}});let r=Object.fromEntries(n.decisions.filter(a=>"confirmed"===a.status&&m.some(b=>b.id===a.criterionId&&"proposed"===b.chapterAuthority)).map(a=>[a.criterionId,{sectionId:a.sectionId,reason:a.reason}]));a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"requirement-assignments-final.json",{assignments:d.blueprint.requirementAssignments,chiefOwners:r},a.runId),d.planning.documentContract=(0,g.vB)({projectSnapshotId:d.understanding.projectModel.snapshotId,inputSnapshotHash:d.global.input.inputSnapshot?.sha256??"",chapters:i,requiredContentNeeds:d.planning.requiredContentNeeds,requireQuantitativeSources:!0,deliveryPolicy:o.yD,writingProjectType:d.planning.projectTypeDecision?.type,bodyDiagramForbidden:dn(d.understanding.bidComposition),extraObligations:l,criterionOwnerSectionIds:Object.fromEntries(n.decisions.filter(a=>"confirmed"===a.status).map(a=>[a.criterionId,a.sectionId])),reassignedCriterionOwners:r,sectionResponsibilities:e,taskHeadings:c,sectionTypes:Object.fromEntries(f.decisions.map(a=>[a.taskId,a.types])),documentNormativeUseCollectorIds:new Set(f.decisions.filter(a=>"confirmed"===a.status&&a.collectsDocumentNormativeUses).map(a=>a.taskId)),sectionTypeEvidence:Object.fromEntries(f.decisions.map(a=>[a.taskId,a.reason])),applicability:(y=f.decisions,Object.fromEntries(y.filter(a=>"confirmed"===a.status).flatMap(a=>(a.controls??[]).map(b=>[`${a.taskId}:methods:${b.id}`,{applicable:b.applicable,reason:`主控写前确认:${b.reason}`}])))),unconfirmedSectionTypes:new Set(f.decisions.filter(a=>"unmeasured"===a.status).map(a=>a.taskId)),facts:d.understanding.projectModel.facts,requirements:d.blueprint.requirementAssignments.map(a=>a.entry),requirementSourceLibrary:d.planning.tenderRequirements?.sourceLibrary,assignments:d.blueprint.requirementAssignments}),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"chapter-writing-structures.json",Object.fromEntries(b),a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"writing-task-hierarchy.json",c,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"document-contract.json",d.planning.documentContract,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"content-type-plan.json",f,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"contract-ownership-plan.json",n,a.runId),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"required-content-needs.json",d.planning.requiredContentNeeds,a.runId);let t=jn(d.planning.documentContract);a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"author-contract-admission",status:t.length?"partial":"success",message:t.length?`有${t.length}项局部准备状态待核;保留合同和问题,按实际依赖调度作者并输出审阅稿`:"主控职责、类型、适用控制点与义务归属已确认,可以委派作者"}});var w,x,y,z=d.planning.documentContract;let u=jn(z).filter(a=>a.admission?.effect==="task-block"&&!a.sectionId&&!a.chapterId);if(u.length)throw Error(`作者合同的全局基础依赖尚未确认:${u.map(a=>a.id).join("、")}`)}if(!d.planning.sharedConstructionPlan){a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:"running",message:"主智能体形成共同施工组织与交接骨架,实体决定按作者实际需要核定"}}),d.planning.sharedConstructionPlan=await bZ(d.planning.generationDiagnostics,"planning.shared-construction-plan",()=>(0,gM.cW)({contract:d.planning.documentContract,project:d.understanding.projectModel,diagnostics:d.planning.generationDiagnostics,signal:a.signal,responseCache:an((0,ae.join)(j0(d.prepare.projectRoot),"engineering-plan-response-cache"),d.planning.generationDiagnostics,"engineering-plan-response-v1"),onReceipt:(b,c)=>{a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),`${b}.json`,c,a.runId);let e=/^shared-construction-details-(\d+)$/u.exec(b);("shared-construction-topology"===b||e)&&a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:"running",message:"shared-construction-topology"===b?"已保存施工组织拓扑响应,正在形成各阶段交接与资源安排":`已保存施工阶段${Number(e[1])+1}的具体安排响应,正在验证`}})}}));let b=d.planning.sharedConstructionPlan,c=0===b.production.issues.length;a$(d,{batch:"generation.planning",stage:{type:"validation",roleId:"shared-construction-plan",status:c?"success":"failed",message:c?"共同施工组织候选已保存;工程控制与专业正确性按实际正文核验":`共同施工组织候选未通过写前校验,作者尚未派发:${b.review.reason}`}})}if((0,gM.wB)(d.planning.sharedConstructionPlan,d.planning.documentContract,d.understanding.projectModel),d.blueprint.integratedBlueprint&&(d.blueprint.integratedBlueprint=(k=d.blueprint.integratedBlueprint,l=d.planning.sharedConstructionPlan,{...k,data:{...k.data,production:l.production}}),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"blueprint-for-writing.json",d.blueprint.integratedBlueprint,a.runId)),(0,q.tD)(d.understanding.projectModel,d.planning.documentContract.sections.map(a=>(0,gM.G6)(d.planning.sharedConstructionPlan,d.understanding.projectModel,a.id))),a.runId){let b=j0(d.prepare.projectRoot);!function(a,b,c){let d=af().dirname((0,a0.HM)(b,`${jo}checkpoint.json`,c));if(!ad().existsSync(d))return;let e=[];for(let a of ad().readdirSync(d).filter(a=>jp.test(a)).sort()){let b=ad().readFileSync(af().join(d,a));if(jq(b)!==jp.exec(a)[1])throw Error("主控增量来源核定资产字节身份不一致,不能恢复正文准入");e.push(JSON.parse(b.toString("utf8")))}(0,q.hz)(a,e),e.length}(d.understanding.projectModel,b,a.runId),m=d.understanding.projectModel,n=a.runId,(0,q.o7)(m,a=>{let c=JSON.stringify(a);(0,a0.tv)(b,`${jo}${jq(c)}.json`,a,n)})}a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"shared-construction-plan.json",d.planning.sharedConstructionPlan,a.runId),a.onInstructionsRebased?.(),r=d.planning.generationDiagnostics,(t={generatedDir:j0(d.prepare.projectRoot),runId:a.runId,contract:d.planning.documentContract}).runId&&dS.set(r,{generatedDir:t.generatedDir,runId:t.runId,contractId:t.contract.id,projectSnapshotId:t.contract.projectSnapshotId,tasks:new Map(t.contract.sections.map(a=>[JSON.stringify([a.chapterId,a.title]),a.id])),expectedTaskIds:t.contract.sections.map(a=>a.id),records:[],candidates:[],rawDrafts:[],previousDrafts:new Map}),d.prepare.readiness=iW({template:d.prepare.template,spec:d.prepare.documentSpec,summary:d.prepare.projectMaterialSummary,facts:d.understanding.projectModel.facts}),(0,g.qK)(d.planning.generationDiagnostics,d.planning.documentContract);let f=0;!function(a,b,c,d={}){if((0,g.oH)(b),b.projectSnapshotId!==c.snapshotId)throw Error("文档模型与项目快照身份不一致");a.authorTaskExecutions={contractId:b.id,projectSnapshotId:c.snapshotId,tasks:b.sections.map(a=>({taskId:a.id,status:"not-started"}))};let e=b.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0);if(b5.set(a,{contract:b,projectModel:c,onChange:d.onChange,model:{version:"document-model-v1-2026-10-06",contractId:b.id,projectSnapshotId:c.snapshotId,expectedTaskIds:b.sections.map(a=>a.id),taskAttempts:{},tasks:{},revisions:[],rework:{fixedReferenceUnits:e,cumulativeUnits:0,cumulativeAddedChars:0,cumulativeRemovedChars:0,cumulativeReplacedChars:0,provisionalRatio:0,referenceChars:0,cumulativeCharRatio:0,calibration:"initial-unvalidated"}}}),d.restore){let e=b7(d.restore);if(delete e.normativeUses,e.contractId!==b.id||e.projectSnapshotId!==c.snapshotId||b6(e.expectedTaskIds)!==b6(b.sections.map(a=>a.id)))throw Error("续跑文档模型与固定合同不一致");for(let[a,d]of Object.entries(e.tasks))for(let e of[d.firstCandidate,d.current]){let d=(0,b0.validateAuthorTaskOutput)(e.output,{contract:b,projectModel:c,taskId:a},{preserveQualityDefects:!!(e.qualityIssues?.length||e.annotationIssues?.length||e.sourceReviewRequests?.length)});if(d.contentHash!==e.contentHash||d.markdown!==e.markdown||b6(d.qualityIssues??[])!==b6(e.qualityIssues??[])||b6(d.annotationIssues??[])!==b6(e.annotationIssues??[])||b6(d.sourceReviewRequests??[])!==b6(e.sourceReviewRequests??[])||b6(d.locatorEvidence??[])!==b6(e.locatorEvidence??[])||b6(d.pendingCriterionIds)!==b6(e.pendingCriterionIds))throw Error("续跑候选内容、质量缺口或身份校验失败")}b4(b,e),b5.get(a).model=e}}(d.planning.generationDiagnostics,d.planning.documentContract,d.understanding.projectModel,{restore:a.resumeAuthorState?.model,onChange:a.runId?b=>{(0,a0.tv)(j0(d.prepare.projectRoot),`document-model-checkpoint-${String(++f).padStart(9,"0")}.json`,b,a.runId),(0,a0.tv)(j0(d.prepare.projectRoot),`author-accounting-checkpoint-${String(f).padStart(9,"0")}.json`,(0,bq.pE)(d.planning.generationDiagnostics),a.runId)}:void 0});let A=d.global.input;A.runId&&d.planning.documentContract&&d.understanding.projectModel&&(0,a0.tv)(j0(d.prepare.projectRoot),"author-resume-state.json",{version:"author-resume-state-v1",originRunId:A.resumeAuthorState?.originRunId??A.runId,dependencyHash:bu(A,d.planning.generationDiagnostics)??null,workflowVersion:bn.version,contract:d.planning.documentContract,projectModel:d.understanding.projectModel,effectiveChapters:d.planning.effectiveChapters,selectedSourceFiles:[...d.prepare.materialScope.selectedFiles].sort(),writerContext:{promptTexts:d.prepare.nativeAuthorPromptTexts??d.prepare.promptTexts,integratedBlueprint:d.blueprint.integratedBlueprint,sharedConstructionPlan:d.planning.sharedConstructionPlan,conclusionTable:d.planning.conclusionTable,requiredContentNeeds:d.planning.requiredContentNeeds,projectTypeDecision:d.planning.projectTypeDecision,resumeContext:function(a){let b=JSON.stringify(Object.fromEntries(Object.entries(bo).map(([b,c])=>[b,Object.fromEntries(c.map(c=>[c,a[b][c]]))])),(a,b)=>b instanceof Map?{__authorResumeCollection:"map",entries:[...b]}:b instanceof Set?{__authorResumeCollection:"set",entries:[...b]}:b);return{version:1,sha256:bp(b),json:b}}(d)}},A.runId),a.signal?.throwIfAborted(),aL(d,"blueprint"),i="write",await gQ(d),d.global.pausedByRequest||function(a){let b=b5.get(a);if(!b||b.model.authorPassSealed)return;let c=b7(b.model);b4(b.contract,c),c.authorPassSealed=!0,c.c0TaskHashes=Object.fromEntries(c.expectedTaskIds.map(a=>[a,c.tasks[a]?.firstCandidate.contentHash??null])),c.c0ReferenceChars=b.contract.sections.reduce((a,b)=>{let d=c.tasks[b.id]?.firstCandidate;return a+(d?d.markdown.length:0)},0);let d=b3(b.contract,c);for(let a of(c.rework.referenceChars=d.referenceChars,c.rework.cumulativeCharRatio=d.cumulativeCharRatio,c.expectedTaskIds))c.taskAttempts[a]||(c.taskAttempts[a]={attempts:0,firstComplete:!1});b.onChange?.(b7(c)),b.model=c}(d.planning.generationDiagnostics),a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"document-model-author.json",cd(d.planning.generationDiagnostics),a.runId),(0,a0.yW)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,stage:"before-global-review",chapters:d.chapterLoop.chapterDraftsFinal}),a.signal?.throwIfAborted(),aL(d,"write",(u=cd(d.planning.generationDiagnostics),d.global.pausedByRequest?"paused":!u||u.expectedTaskIds.some(a=>!u.tasks[a]?.current||u.tasks[a].current.pendingCriterionIds.length>0)?"blocked":"completed")),i=void 0;let B=(v=d.blueprint.integratedBlueprint)?"partial"===g3(v)?function(a,b){if(!b)return a;let c=a;return b.blueprint||(c={...c,quantities:{},specAuthorities:{}}),c}(v.data,v.validation.authorityAvailability):v.data:void 0,C=function(a,b){if(a)return{injectability:g3(a),...a.validation.authorityAvailability?{authorityAvailability:a.validation.authorityAvailability}:{},planDataRows:{productionActivities:a.data.production?.activities.filter(a=>"calculated"===a.status).length??0,siteFacilities:(a.data.siteFacilities??[]).length},...b?.assetPath?{assetPath:b.assetPath}:{}}}(d.blueprint.integratedBlueprint,{assetPath:(0,a0.HM)(j0(d.prepare.projectRoot),"blueprint-for-writing.json",a.runId)}),D=[];d.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:d.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-d.chapterLoop.globalReviewPhaseStartedAt}),(0,a0.yW)({generatedDir:j0(d.prepare.projectRoot),runId:a.runId,documentId:a.documentId,stage:"before-finalize",chapters:d.chapterLoop.chapterDraftsFinal});let E=await bZ(d.planning.generationDiagnostics,"phase:finalize",()=>{var b;return gF({pausedByRequest:!0===d.global.pausedByRequest,chapterDrafts:d.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:d.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:d.understanding.chapterGenerationStagesByOrder,clarificationOverrides:d.planning.clarificationOverrides,...d.understanding.hazardResolution?{hazardBindings:d.understanding.hazardResolution.bindings}:{},chapterGenerationStages:d.understanding.chapterGenerationStages,effectiveChapters:d.planning.effectiveChapters,template:d.prepare.template,allEvidence:d.understanding.allEvidence,documentSpec:d.prepare.documentSpec,projectMaterialProfile:d.prepare.projectMaterialProfile,projectMaterialSummary:d.prepare.projectMaterialSummary,domainProfile:d.prepare.domainProfile,promptTexts:d.prepare.promptTexts,reviewPromptTexts:d.prepare.reviewPromptTexts,repairPromptTexts:d.prepare.repairPromptTexts,input:d.global.input,generationStrategy:d.planning.generationStrategy,generationDiagnostics:d.planning.generationDiagnostics,chapterScopedContext:d.planning.chapterScopedProjectContext,promptIds:d.prepare.promptIds,promptDocumentRules:d.prepare.promptDocumentRules,projectUnderstanding:d.prepare.projectUnderstanding,projectContext:d.planning.projectContext,projectRoot:d.prepare.projectRoot,projectId:d.prepare.projectId,readiness:d.prepare.readiness,documentId:a.documentId,runId:a.runId,projectModel:d.understanding.projectModel,documentContract:d.planning.documentContract,runAssets:(0,a0.wE)(j0(d.prepare.projectRoot),a.runId),...a.resumeLedger?{resumePreviousReadings:a.resumeLedger.readings}:{},factExtractionPromptTexts:d.prepare.factExtractionPromptTexts,blueprintData:B,...C?{blueprintDataRef:C}:{},bidComposition:d.understanding.bidComposition,requirementSemantics:d.prepare.requirementSemantics,hasExplicitOutline:d.prepare.hasExplicitOutline,missingItems:d.understanding.missingItems,clarificationRequests:d.understanding.clarificationRequests,unfixableDeclarations:d.understanding.unfixableDeclarations,retrievalCoverageReports:d.understanding.retrievalCoverageReports,failedChapterMessages:d.understanding.failedChapterMessages,webResearchReport:d.understanding.webResearchReport,indexHealth:d.understanding.indexHealth,globalConsistencyIssues:D,scopeConflicts:d.understanding.canonicalFacts.scopeConflicts,evaluationCriteriaItems:d.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:d.planning.tenderRequirements,requirementAssignments:d.blueprint.requirementAssignments,requirementsSimilarity:d.planning.requirementsSimilarity,agentWorkflow:{...b=d.understanding.agentWorkflow,baseProjectGraph:{works:[],methods:[],resources:[],schedule:[],standards:[],risks:[],requirements:[],siteConditions:[],addendumChanges:[],gaps:[],generatedAt:b.baseProjectGraph.generatedAt},materialSnapshot:{...b.materialSnapshot,files:[]}},emitProgress:d.global.emitProgress,withProgressHeartbeat:d.global.withProgressHeartbeat,...void 0!==d.global.nodeLogBaseDir?{nodeLogBaseDir:d.global.nodeLogBaseDir}:{}})});if(d.planning.documentContract&&d.understanding.projectModel&&!E.reviewMetadata?.contractQuality){bm(d.prepare.projectRoot,d.understanding.projectModel);let b=await d.global.withProgressHeartbeat(()=>ab({contract:d.planning.documentContract,projectModel:d.understanding.projectModel,chapters:E.chapters,markdown:E.markdown,diagnostics:d.planning.generationDiagnostics,signal:a.signal}));if(!E.reviewMetadata)throw Error("合同评价缺少生成复核元数据");E.reviewMetadata.contractQuality=b;let c=b.score.blocking.map(a=>{let c=d.planning.documentContract.criteria.find(b=>b.id===a),e=b.findings.find(b=>b.criterionId===a);return{level:"error",severity:"blocker",category:"structure",owner:"system",chapterTitle:d.planning.documentContract.chapters.find(a=>a.id===c.chapterId)?.title,message:`合同评价${e?.status==="not-met"?"未满足":"未判定"}:${c.description};${e?.reason??"评价未完成"}`,provenance:{detectorId:"document-contract-quality",fingerprint:`${b.contractId}:${a}`}}}),e=aa(d.planning.documentContract,b),f=[...c,...e];E.validationIssues.push(...f),E.exportGate.blockingIssues.push(...f),E.exportGate.checklist.push({key:"document-contract-quality",label:"冻结合同七维评价",passed:b.score.deliveryReady,message:`七维评价:${b.score.deliveryReady?"职责满足且专业档位达标":"仍有缺陷、待核或专业档位不足"};关键阻断 ${b.score.blocking.length} 项,专业档位缺口 ${b.score.qualityGaps.length} 项;专家验收单独记录`}),E.exportGate.passed=E.exportGate.passed&&b.score.deliveryReady,E.validation.passed=E.validation.passed&&b.score.deliveryReady,E.validation.errors.push(...f.map(a=>a.message)),a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"document-contract-quality",status:b.score.deliveryReady?"success":"partial",message:`七维专业诊断:阻断 ${b.score.blocking.length} 项;核验与质量评级分别呈现,待专家验收`,details:b.score.dimensions.map(a=>`${a.label}:${a.qualityLabel},核验完成 ${(100*a.coverage).toFixed(1)}%`)}})}a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"tender-source-completeness",status:"running",message:"首稿已保存,独立核查完整来源的技术义务漏项;正文供审阅"}});let F=await d.global.withProgressHeartbeat(()=>jl({model:d.planning.tenderRequirements,markdown:E.markdown,documentHash:T(E.chapters,E.markdown),candidateRoutes:d.planning.professionalOutlinePlan?.requirementAssignments,diagnostics:d.planning.generationDiagnostics,signal:a.signal,onBatch:a.runId?(b,c)=>{(0,a0.tv)(j0(d.prepare.projectRoot),`tender-source-coverage-batch-${b}.json`,c,a.runId)}:void 0,onFulfillmentBatch:a.runId?(b,c)=>{(0,a0.tv)(j0(d.prepare.projectRoot),`tender-omission-fulfillment-batch-${b}.json`,c,a.runId)}:void 0}));a.runId&&(0,a0.tv)(j0(d.prepare.projectRoot),"tender-source-coverage-review.json",F,a.runId);let G=[..."unmeasured"===F.status?[{level:"error",severity:"blocker",category:"control_loop",owner:"system",message:"全源技术义务漏项审阅尚未完成;正文供审阅,不能宣布正式交付通过",provenance:{detectorId:"tender-source-completeness",fingerprint:jk([F.sourceHash,F.documentHash,F.batches])}}]:[],...F.omissions.flatMap((a,b)=>{let c=F.bodyFindings.find(a=>a.omissionIndex===b);return c?.status==="covered"?[]:[{level:"error",severity:"blocker",category:"control_loop",owner:"system",message:`来源新发现义务${c?.status==="not-met"?"正文未完整承接":"正文承接尚未判定"}:${a.requirement};${c?.reason??"缺少实际正文核查"}。保留首稿与原文证据`,provenance:{detectorId:"tender-source-completeness",fingerprint:jk([F.sourceHash,F.documentHash,a,c])}}]})];if(a$(d,{batch:"finalize.delivery",stage:{type:"validation",roleId:"tender-source-completeness",status:G.length?"partial":"success",message:`完整来源审阅${"measured"===F.status?"已完成":"仍有未测"};新发现义务${F.omissions.length}项,实际正文已承接${F.bodyFindings.filter(a=>"covered"===a.status).length}项,原始首稿与问题分别保留`}}),E.validationIssues.push(...G),E.exportGate.blockingIssues.push(...G),E.exportGate.checklist.push({key:"tender-source-completeness",label:"完整来源技术义务漏项审阅",passed:0===G.length,message:`${F.batches.length}批来源核对;新发现义务${F.omissions.length}项,实际正文已承接${F.bodyFindings.filter(a=>"covered"===a.status).length}项;${"measured"===F.status?"已完成阅读核对":"尚有未测"}`}),G.length&&(E.exportGate.passed=!1,E.validation.passed=!1,E.validation.errors.push(...G.map(a=>a.message))),a.runId&&E.reviewMetadata?.contractQuality&&(0,a0.tv)(j0(d.prepare.projectRoot),"contract-quality.json",E.reviewMetadata.contractQuality,a.runId),a.runId){let b=j0(d.prepare.projectRoot);(0,a0.yW)({generatedDir:b,runId:a.runId,documentId:a.documentId,stage:"final-document",chapters:E.chapters,markdown:E.markdown});let c=d.planning.generationDiagnostics;(0,a0.tv)(b,"run-summary.json",{version:1,runId:a.runId,documentId:a.documentId??null,metrics:c.metrics,callPurposes:(0,h._T)(c.llm.callLog,c.llm.callLog?.length??0),callLogEntries:c.llm.callLog?.length??0,reportedCalls:c.llm.calls,currentRunCalls:c.llm.calls-(a.resumeAuthorState?.accounting?.llm.calls??0),previousAccounting:a.resumeAuthorState?.accounting??null,accounting:(0,bq.pE)(c),callLogScope:"current-run",contractQuality:E.reviewMetadata?.contractQuality??null,sourceCoverage:F,exportGate:E.exportGate,supervisorDecisionLog:c.supervisorDecisionLog??[],rawAuthorCandidates:function(a){let b=dS.get(a);if(!b)return;let c={expectedTasks:b.expectedTaskIds.length,observedTasks:new Set(b.records.filter(a=>b.expectedTaskIds.includes(a.taskId)).map(a=>a.taskId)).size,rawResponses:b.records.filter(a=>a.responseReceived).length};return(0,a0.tv)(b.generatedDir,"author-candidates.json",{version:1,runId:b.runId,contractId:b.contractId,expectedTaskIds:b.expectedTaskIds,records:b.records,structuredCandidates:b.candidates,rawDrafts:b.rawDrafts,preAcceptanceWriting:{meaningfulDrafts:b.rawDrafts.filter(a=>"unmeasured"!==a.comparison.kind).length,unchangedBodyCorrections:b.rawDrafts.filter(a=>"unchanged-body"===a.comparison.kind).length,formattingOnlyChanges:b.rawDrafts.filter(a=>"formatting-only"===a.comparison.kind).length,contentChanges:b.rawDrafts.filter(a=>"content-changed"===a.comparison.kind).length,unmeasuredResponses:b.rawDrafts.filter(a=>"unmeasured"===a.comparison.kind).length,addedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.addedChars,0),removedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.removedChars,0),replacedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.replacedChars,0),scope:"actual-raw-writing-before-admission",professionalQualityMeasured:!1},...c,firstPassAndSemanticReworkMeasured:!1},b.runId),c}(d.planning.generationDiagnostics)??null,writingMetrics:E.reviewMetadata?.writingMetrics??null,firstCandidateRetention:E.reviewMetadata?.writingMetrics?.retention??{measured:!1,reason:"当前运行缺少固定首稿评价与文档模型"}},a.runId),E.assets=[...E.assets??[],...(0,a0.wE)(b,a.runId)].filter((a,b,c)=>c.findIndex(b=>b.id===a.id)===b)}return b=!0,E}catch(a){if(c.fail(a),await c.drain(),i){let a=c.failure;aL(d,i,"failed",a instanceof Error?a.message:String(a))}throw c.failure}finally{if(await c.drain(),f(),a.runId&&d.prepare.projectRoot&&d.planning.documentContract&&(0,a0.tv)(j0(d.prepare.projectRoot),"author-accounting-final.json",(0,bq.pE)(d.planning.generationDiagnostics),a.runId),!b&&a.runId&&d.prepare.projectRoot){let b=d.planning.generationDiagnostics;(0,a0.tv)(j0(d.prepare.projectRoot),"run-summary-incomplete.json",{runId:a.runId,documentId:a.documentId,completed:!1,metrics:b.metrics,calls:b.llm.callLog??[],callPurposes:(0,h._T)(b.llm.callLog,b.llm.callLog?.length??0),preparationLifecycle:c.receipt(),reportedCalls:b.llm.calls,llm:{...b.llm,callLog:void 0},modelCheckpoint:cd(b)??null},a.runId)}}})}["村","社区","小区","家园","片区","工区","标段"].map(a=>RegExp(`[\\u4e00-\\u9fa5A-Za-z0-9]{1,6}${a}`,"gu"));var js=c(31421);function jt(a){if("win32"!==process.platform)try{return(0,js.execFileSync)("ps",["-p",String(a),"-o","lstart="],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}class ju{constructor(a,b,c=a=>(function(a,b){if(a.pid===b.pid&&a.startedAt!==b.startedAt)return!1;try{process.kill(a.pid,0)}catch(a){return"ESRCH"!==a.code}let c=a.processStamp&&jt(a.pid);return!c||c===a.processStamp})(a,b)){this.current=b,this.alive=c,this.closed=!1,ad().mkdirSync(af().dirname(a),{recursive:!0});let d=(0,ag.loadBetterSqlite3)();this.db=new d(a),ad().chmodSync(a,384),this.db.pragma("busy_timeout = 5000"),this.db.pragma("journal_mode = WAL"),this.db.exec(`CREATE TABLE IF NOT EXISTS dispatch_jobs (task_id TEXT PRIMARY KEY, document_id TEXT NOT NULL UNIQUE, enqueued_at INTEGER NOT NULL, payload TEXT NOT NULL, state TEXT NOT NULL);
|
|
91
91
|
CREATE TABLE IF NOT EXISTS dispatch_owner (slot INTEGER PRIMARY KEY CHECK(slot = 1), task_id TEXT NOT NULL, pid INTEGER NOT NULL, started_at INTEGER NOT NULL, process_stamp TEXT, token INTEGER NOT NULL);
|
|
92
92
|
CREATE TABLE IF NOT EXISTS dispatch_sequence (slot INTEGER PRIMARY KEY CHECK(slot = 1), token INTEGER NOT NULL);
|
|
93
93
|
CREATE TABLE IF NOT EXISTS dispatch_signals (task_id TEXT PRIMARY KEY, action TEXT NOT NULL CHECK(action IN ('abort', 'pause')));
|
|
@@ -109,7 +109,7 @@ semanticKind:本项目自身的设计、条件与施工要求为 project-desig
|
|
|
109
109
|
|
|
110
110
|
只返回JSON:{"confirmed":true或false,"reason":"整体复核理由","sourceResults":[{"sourceDictionaryIndex":0,"complete":true,"caseIds":["case-a"],"reason":"逐源理由"}],"sourceCases":[{"id":"case-a","sourceDictionaryIndex":0,"quote":"该原文中真实连续原字","objectScope":"实际对象","condition":"适用工况","semanticKind":"project-condition","versionDomain":"unmeasured","applicability":"applicable","variantIds":[],"reason":"用途依据"}],"variantResults":[],"controlsResults":[],"uncoveredSourceCases":[]}。
|
|
111
111
|
|
|
112
|
-
【sourceDictionary】${JSON.stringify(h)}`,k=a.reviewer?async(b,c)=>{let d=await a.reviewer(b,c);return"string"==typeof d?d:void 0===d?void 0:JSON.stringify(d)}:void 0,l=await (0,e.v7)("你是独立来源用途评审者。只对给定任务将实际引用的完整原文逐条核定来源用途、版本用途域与适用性;不新增事实、不授予采用许可、不检查未提供的资料。",i,{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,e.TO)(),temperature:0,maxTokens:Math.max(4e3,Math.ceil(.6*JSON.stringify(h).length)),schema:(0,p.q1)([],g),validateProtocol:b=>{try{let c=(0,p.lH)(b,{variants:[],sourceDictionary:d,requiredSourceDictionaryIndices:g});return w(a.project,c,{sourceDictionary:d,facts:[],variants:[]}),[]}catch(a){return[a instanceof Error?a.message:String(a)]}}},k);if(!l)continue;let m=(0,p.lH)(l,{variants:[],sourceDictionary:d,requiredSourceDictionaryIndices:g});w(a.project,m,{sourceDictionary:d,facts:[],variants:[]}),f[b]={sourceDictionaryIds:d.map(a=>(0,j.vg)(a)),receipt:m,taskIds:[...c.taskIds]}}catch(b){if(a.signal?.aborted)throw b}}})),f.filter(Boolean).flatMap(a=>a.taskIds.map(b=>({taskId:b,sourceDictionaryIds:a.sourceDictionaryIds,receipt:a.receipt})))}function B(a){let{quantityPackageIndices:b,crewId:c,crewProfile:d,...e}=a;return e}function C(a,b,c){let d=z(a,b.sections.length),e=function(a){let b=a&&"object"==typeof a?a.crewProfiles:void 0;if(!Array.isArray(b))throw Error("全工程拓扑缺少crewProfiles完整单班人员编制;不能只登记班组编号再由各阶段换人");let c=new Map;for(let a of b){if(!a||"object"!=typeof a||Object.keys(a).some(a=>!["crewId","workers","basis"].includes(a))||"string"!=typeof a.crewId||!a.crewId.trim()||c.has(a.crewId)||"string"!=typeof a.basis||!a.basis.trim()||!Array.isArray(a.workers)||a.workers.some(a=>!a||"object"!=typeof a||Object.keys(a).some(a=>!["trade","countPerCrew"].includes(a))||"string"!=typeof a.trade||!a.trade.trim()||!Number.isSafeInteger(a.countPerCrew)||0>=Number(a.countPerCrew))||new Set(a.workers.map(a=>a.trade)).size!==a.workers.length)throw Error("crewProfiles须逐组给出唯一crewId、完整工种及正整数countPerCrew和实际拟定编制依据;不能重复工种或用活动编号冒充人员编制");c.set(a.crewId,structuredClone(a))}return c}(a),f=a.activities;if(!Array.isArray(f)||f.some(a=>!a||"object"!=typeof a||Reflect.ownKeys(a).some(a=>!["id","phaseId","objectScope","workfront","taskIndices","predecessors","quantityPackageIndices","crewId"].includes(String(a)))))throw Error("施工拓扑只允许完整活动身份、对象、工作面、任务、依赖、原清单包路由和全工程班组身份;生产输入在分阶段详情填写");let h=(c.workPackages??[]).length;for(let a of f)if(null!==a.crewId&&("string"!=typeof a.crewId||!a.crewId.trim()))throw Error("拓扑活动必须显式给出全工程稳定crewId;无需人员投入的实际等待活动才能填null,不能由各阶段各自重命名同一班组");for(let a of f)if(null!==a.crewId&&!e.has(a.crewId))throw Error(`活动${a.id}的班组${a.crewId}没有真实crewProfiles人员编制`);let i=new Set(f.flatMap(a=>null===a.crewId?[]:[a.crewId]));if([...e.keys()].some(a=>!i.has(a)))throw Error("crewProfiles含未分配实际施工活动的虚增班组,须明确真实用途或删除");for(let a of f)if(!Array.isArray(a.quantityPackageIndices)||new Set(a.quantityPackageIndices).size!==a.quantityPackageIndices.length||a.quantityPackageIndices.some(a=>!Number.isSafeInteger(a)||0>Number(a)||Number(a)>=h))throw Error("拓扑活动必须显式选择真实quantityPackageIndices;不以管理任务的宽泛职责替代施工对象来源范围");let j=new Set(f.flatMap(a=>a.quantityPackageIndices)),k=(c.workPackages??[]).flatMap((a,b)=>a.members?.length&&!j.has(b)?[b]:[]);if(k.length)throw Error(`施工拓扑漏路由原清单包${k.join(",")};全部真实成员必须保留归属,路由不授予安装用途`);let l=(0,g.SZ)(f.map(a=>({...B(a),quantity:null,production:null,duration:null,waits:[]})),d.map(a=>a.id),b.sections.length);for(let a of l)if(a.taskIndices.some(b=>!d.find(b=>b.id===a.phaseId).taskIndices.includes(b)))throw Error("拓扑活动任务不属于已声明阶段");let m=new Set,n=new Set,o=a=>{if(m.has(a))throw Error("施工活动依赖成环,不能进入分阶段生产核定");if(!n.has(a)){for(let b of(m.add(a),l.find(b=>b.id===a).predecessors))o(b.activityId);m.delete(a),n.add(a)}};return l.forEach(a=>o(a.id)),l.map(({id:a,phaseId:b,objectScope:c,workfront:d,taskIndices:g,predecessors:h},i)=>({id:a,phaseId:b,objectScope:c,workfront:d,taskIndices:g,predecessors:h,quantityPackageIndices:[...f[i].quantityPackageIndices],crewId:f[i].crewId,crewProfile:null===f[i].crewId?null:e.get(f[i].crewId)}))}function D(a,b,c,d,e,f){let h;if(!a||"object"!=typeof a||Reflect.ownKeys(a).some(a=>"activities"!==a)||!Array.isArray(a.activities))throw Error("阶段生产详情仅返回activities");let i=a.activities,j=[];if(i.length!==c.length||new Set(i.map(a=>a?.activityIndex)).size!==c.length||i.some(a=>!a||!c.includes(Number(a.activityIndex))||!Number.isSafeInteger(a.activityIndex)))throw Error(`阶段详情含重复、缺失或越域活动;activityIndex必须恰好为[${c.join(",")}]各一次`);for(let a of i){let b=Reflect.ownKeys(a).filter(a=>!["activityIndex","quantity","production","duration","waits"].includes(String(a)));b.length&&j.push(`activityIndex=${a.activityIndex}含禁止字段[${b.join(",")}]:仅填写activityIndex/quantity/production/duration/waits;id/phaseId/objectScope/workfront/taskIndices/predecessors由冻结拓扑提供,不复制或改写`)}let k=new Map(i.map(({activityIndex:a,...b})=>[Number(a),b])),l=b.map((a,b)=>({...B(a),...k.get(b)??{quantity:null,production:null,duration:null,waits:[]}})),m=(0,g.BI)(f),n=[...j];try{h=(0,g.SZ)(l,d.map(a=>a.id),e.sections.length)}catch(a){n.push(a instanceof Error?a.message:String(a))}for(let a of c){let c=l[a],d=c.quantity,e=b[a].crewId;if(c.production&&c.production.crewId!==e&&n.push(`activityIndex=${a}(${c.id}).production.crewId:必须使用冻结全工程班组${JSON.stringify(e)},不能改名为${JSON.stringify(c.production.crewId)}规避同期占用校核;需要真实增配由全工程冲突修正说明依据`),c.production||null===e||n.push(`activityIndex=${a}(${c.id}).production:冻结班组${JSON.stringify(e)}缺少实际人员和机具安排`),c.production&&Array.isArray(c.production.workers)&&b[a].crewProfile){let d=a=>JSON.stringify([...a].sort((a,b)=>a.trade.localeCompare(b.trade)));c.production.workers.every(a=>a&&"string"==typeof a.trade)&&d(c.production.workers)!==d(b[a].crewProfile.workers)&&n.push(`activityIndex=${a}(${c.id}).production.workers:必须保持班组${e}的完整单班编制${JSON.stringify(b[a].crewProfile.workers)};不同工种或人数不得挂在同一身份下,局部阶段不能换人或扩编`)}if(d&&"object"==typeof d&&Array.isArray(d.memberIndices)&&d.memberIndices.every(a=>Number.isSafeInteger(a)&&a>=0)&&"string"==typeof d.unit)try{n.push(...(0,g.NH)(c,m).map(b=>`activityIndex=${a}(${c.id}).quantity:${b}`))}catch(b){n.push(`activityIndex=${a}(${c.id}).quantity:${b instanceof Error?b.message:String(b)}`)}}if(n.length)throw Error(n.join(";"));if(!h)throw Error("阶段输入尚未完成同源校验");for(let a of c){let c=new Set(b[a].quantityPackageIndices.flatMap(a=>f.workPackages?.[a].members?.map(a=>a.id)??[]));if(h[a].quantity?.memberIndices.some(a=>!c.has(m[a]?.memberId)))throw Error(`活动${a}引用所属冻结清单包之外的原来源索引;不能借其他阶段数量或猜测序号`)}return(0,g.yP)({contract:e,project:f,phaseIds:d.map(a=>a.id),activities:h}),c.map(a=>h[a])}async function E(a){let b,c,{contract:d,project:m}=a;if(x(m),d.projectSnapshotId!==m.snapshotId)throw Error("共享施工计划与项目合同不一致");let n=[...new Map(d.sections.flatMap(a=>(0,i.tb)(m,a)).filter(k.j).map(a=>[(0,j.vg)(a),a])).values()],o=d.sections.map((a,b)=>({taskIndex:b,title:a.title,responsibility:a.responsibility})),p=[(0,l.V2)(d.writingKnowledge?.projectType),"先形成全体作者共用的完整施工阶段与活动依赖网络;本次只写专业拓扑,资源、产率、数量和时长在冻结拓扑之后按阶段独立填写,不在一个巨型JSON里同时输出。不得漏工作范围或为缩短响应合并不同对象和工况。","tasks是投标文件作者的成文职责,只用于映射实际工程活动,不是施工任务清单。工程概况、编制依据、章节编审、重难点分析等成文工作不能列为施工活动,不能据此占用合同施工工期或配置施工人材机。相关作者任务通过真实施工对象、现场准备、管理检查和移交活动承接,不为凑齐taskIndices新造章节活动。确需施工方案审批、测量放线、临设施工或现场交底时,写出实际工作对象、作业动作及放行结果;安全质量资源管理按其真实实施阶段承接,不全放在开工前编写管理文件。","阶段按真实对象、工作面和移交条件安排,不套固定五阶段。不同计量单位、不同工法、不同工作面或不能共用产率的设备必须分别建立活动,不能把AP、RCU、机柜、UPS等混成一个计件活动,也不能把室内强电保护管与室外外接电缆混合归量。方法和接口是当前工程决定,不能猜设计参数或用按图、后续审批代替。实际楼层、区段与阶段名称可正常表述;数值引用仍须对应真实来源,工程生产输入单独结构化登记,拓扑文本不授予数值事实或采用资格。",'只返回{"crewProfiles":[{crewId,workers:[{trade,countPerCrew}],basis:"实际拟定编制依据"}],"phases":[{id,scope,method,predecessors:[],releaseCondition,interfaces:[],taskIndices:[]}],"activities":[{id,phaseId,objectScope,workfront,crewId:"全工程实际拟定班组身份"或null,taskIndices:[],quantityPackageIndices:[原清单包packageIndex],predecessors:[{activityId,relation:"finish-start"或"start-start",lagDays:0}]}]}。本次activities不含quantity/production/duration/waits。活动ID、全工程班组完整单班编制和跨阶段依赖一次确定,后续阶段不得各自重命名活动或换一批工种人数。真实等待仅以明确有依据的依赖lagDays登记,不编未知等待数。',"crewProfiles先以实际工法及岗位分工拟定完整单班编制,不要求资料预先规定施工方人数;数量、产率、班组数和轮班安排再在阶段详情及全工程计算中校核。项目管理班子、测量班组、临设作业及安全防护搭设班组是不同实际人员编制,分别登记,不能以“综合准备组”编号把完全不同人员先后换入。班组复用时所有工种与countPerCrew保持同一编制;只调配部分人员或确需扩编须在全工程组织修正中明确实际人员来源及所有相关活动,不能悄悄在局部换人。","crewId表示实际拟配置的同一组人员,不是活动序号、章节序号或工种名称。同一班组跨活动、跨阶段及跨工作面复用时保持相同crewId并安排真实转场与先后;确需并行的不同班组使用不同身份,不能默认每个活动另加一组人员。项目管理班子跨质量、安全、进度等管理职责复用,不为每项管理计划各造一名项目经理或技术负责人。无需人员投入的实际等待才用crewId=null;拟定班组数量及工效在阶段详情填写,全工程计算再核对同期资源与工期。","quantityPackageIndices按活动的实际施工对象从workPackageDirectory选择;组织、准备和交接活动无需工程量时明确为空数组。每个非空原清单包至少归属一个实际活动;采购、计价、措施条目按真实用途路由,不授予安装或合量许可。阶段详情仅提供所属活动路由包的完整成员,不按管理章节的宽泛职责装入全工程清单。","每个活动的taskIndices必须属于对应阶段。完整承担方法、资源、管理、资料、验收和交接职责,全部作者任务必须有实际施工/管理活动承接;不得把所有任务机械挂到每个活动。施工依赖不代表作者串行写作。",JSON.stringify({tasks:o,projectConstraints:n,workPackageDirectory:(m.workPackages??[]).map((a,b)=>({packageIndex:b,name:a.name,memberCount:a.members?.length??0,objects:[...new Map((a.members??[]).map(({entry:a})=>[JSON.stringify([a.name,a.section,a.subsection,a.unit]),{name:a.name,scope:a.section,part:a.subsection,unit:a.unit}])).values()]}))})].join("\n\n"),q=Date.now(),t=[],u=a.signal,v=[],w=new Map,y="同一工程组织与生产网络已形成;拟定工况及实际正文待专业评价";a.onReceipt?.("shared-construction-start",{startedAt:q,inputHash:s(p),protocol:"topology-then-phase-details"});let E=0,F=new Set,G=a.planner?async(b,c)=>{let d=Promise.resolve().then(()=>a.planner(b,c));F.add(d),d.then(()=>F.delete(d),()=>F.delete(d));let e=await d;return"string"==typeof e?e:void 0===e?void 0:JSON.stringify(e)}:void 0,H=async(b,c,d,f,g)=>{let h=s({protocol:"native-engineering-request-v1",stage:b,system:c,prompt:d,taskKind:"reasoning",temperature:0,sourceIdentity:s(m.sourceVersionPolicy.sources)});try{let c=a.responseCache?.load(h);if(c){let d=[...(0,e.Jx)(c.response,f),...g(structuredClone(c.response))];if(!d.length)return a.onReceipt?.(`shared-construction-${b}-cache-hit`,{requestKey:h,...c.receipt,raw:c.response}),structuredClone(c.response);a.onReceipt?.(`shared-construction-${b}-cache-rejected`,{requestKey:h,errors:d})}}catch(c){if(a.signal?.aborted)throw c;a.onReceipt?.(`shared-construction-${b}-cache-rejected`,{requestKey:h,errors:[c instanceof Error?c.message:String(c)]})}let i={},j=await (0,e.v7)(c,d,{diagnostics:a.diagnostics,signal:u,callKind:"planning-review",taskKind:"reasoning",temperature:0,schema:f,outFailure:i,validateProtocol:g,onAttempt:c=>{E+=1,a.onReceipt?.(`shared-construction-${b}-attempt-${c.ordinal}`,c)}},G);if(!j)throw Error(`${b}完整尝试及协议失败:${i.value??"未收到可用响应"}`);return a.responseCache?.save(h,j),j};try{let i=await H("topology","你是施工组织设计主智能体,先固定完整施工活动与接口拓扑。",p,{type:"object",required:["crewProfiles","phases","activities"],additionalProperties:!1,properties:{crewProfiles:{type:"array",items:{type:"object"}},phases:{type:"array",items:{type:"object"}},activities:{type:"array",items:{type:"object"}}}},a=>{try{return C(a,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}}),j=C(i,d,m);t=z(i,d.sections.length),v=j,a.onReceipt?.("shared-construction-topology",{raw:i});let k=(0,g.i)(m),l=t.map(a=>({phase:a,indices:j.flatMap((b,c)=>b.phaseId===a.id?[c]:[])})).filter(a=>a.indices.length),q=Array(l.length),r=0,s=new AbortController;u=AbortSignal.any(a.signal?[a.signal,s.signal]:[s.signal]);let x=await Promise.allSettled(Array.from({length:Math.min(l.length,(0,e.jW)(),2)},async()=>{try{for(;r<l.length;){u?.throwIfAborted();let b=r++,c=l[b],e=new Set(c.indices.flatMap(a=>j[a].quantityPackageIndices).flatMap(a=>m.workPackages?.[a].members?.map(a=>a.id)??[])),f=function(a){let b=[],c=new Map,d=new Map;for(let e of a){let a=c.get(e.description);void 0===a&&(a=b.length,c.set(e.description,a),b.push(e.description));let f=JSON.stringify([e.sourceFile,e.section,e.subsection]),g=d.get(f)??{sourceFile:e.sourceFile,section:e.section,subsection:e.subsection,rows:[]};g.rows.push([e.index,e.name,a,e.quantity,e.unit]),d.set(f,g)}return{quantityRole:"original-source-quantity-not-installation-permission",columns:["index","name","descriptionIndex","quantity","unit"],descriptions:b,groups:[...d.values()]}}(k.filter(a=>e.has(a.memberId))),g=["只为本阶段已有活动填写实际工程量用途、拟定产率/班组/设备、必要等待或非生产性活动时长。活动身份、对象、工作面、委派任务和依赖由主控已冻结;不得复制或改变它们,不新造活动。","production.crewId必须逐活动使用拓扑提供的全工程crewId,同一实际班组不得因活动或阶段不同换名。同一管理班子不能在并行活动中重复配置;需要多人分工须说明真实拟配置人员与组织依据,不把文档编审当施工或为每章各加项目经理。全工程计算会校核资源重叠;确需增配通过后续全工程冲突修正明确依据,不在局部阶段逃避校核。","production.workers必须完整保留crewProfiles对应班组的工种与countPerCrew,不在本阶段换人、删人、增人或另起工种名称;同一编制的班组数量、班次、产率和机具按实际工况拟定。无受控作业量、按组织时长控制的准备活动,不为填表补“常规台班产能”;没有实际工况推导或确切依据的机械capacityPerMachineShift及unit明确为null。","每项必须明确包含activityIndex、quantity、production、duration、waits这五个字段,不含其他字段。waits始终是数组,没有等待填[],不能填null。按工作量与班产率计算的活动令duration=null;措施/采购/计价数量只保留在原清单来源,组织活动令quantity=null、productivityPerCrewShift=null、production.unit=null,duration采用实际组织依据。不能用0.05项/班等假产率换算“项/包干”措施量。",'只返回{"activities":[{activityIndex,quantity:null或{memberIndices:[原来源index],use:"workload"|"installation"|"procurement"|"pricing"|"measure",unit,reason},production:null或{crewId,crews,productivityPerCrewShift:null或每班组每班产率,unit:null或作业量单位,shiftsPerDay,hoursPerShift,workers:[{trade,countPerCrew}],equipment:[{resourceId,name,spec,countPerCrew,capacityPerMachineShift:null或数值,unit:null或容量的计量单位,basis}],basis},duration:null或{days,basis},waits:[{kind:"approval"|"delivery"|"curing"|"testing"|"handover"|"calendar",days,basis}]}]}。duration.days及等待days均为连续组织的日历日;资料写工作日时须有真实作业日历换算依据,不把工作日直接当日历日。shiftsPerDay表示每日不同人员轮班数,countPerCrew为单班单组人数,不安排同一人员连续承担多个完整班;机械可跨班复用。本阶段activityIndex恰好各返回一次;目录序号不因选源或分阶段重排。',"不同对象、部位、单位或数量用途不得合量。相同作业对象、部位和计量单位的不同规格,只有采用相同施工方法与产率且reason逐项说明工况可比时,才能为工作量计算归组;逐源规格始终保留,不能据此统一设计或采购规格。安装量、采购消耗量、计价量及施工工作量分开;不能把计价小数取整为安装台套。产率、班组、班次、工种与机械须是有工况依据的明确拟定选择,basis说明依据和条件。设计未知保留null,不能填默认定额或平摊人数;施工方拟定班组与产率不需要资料预先给出,应依据实际工法、作业面、搬运距离和设备能力做出明确且可复核的配置选择,不能把可策划的输入全部留null;明确由时长控制的准备、协调、验收活动用duration及依据,仍应在production中保留实际拟配置人员和机具。辅助/检测仪器未声明生产能力时capacityPerMachineShift和unit可以为null;不得为通过协议给仪器虚构产能单位。production.unit是作业量单位(如m3),不重复附加“/班”;每班语义已由productivityPerCrewShift表达。可核施工工作量和安装作业量可按同单位产率计算时长。相同来源、工程对象和部位中不同构件名称不自动禁止同工法作业归量,reason说明共同工法、产率及工况,并保留各源规格;采购/计价/措施数量不得直接转为安装工作量。use=measure只表示措施计量,不表示试验检测;试压、闭水、冲洗等已明确试验长度的实际作业,用use=workload并说明试验工作量性质,不能写成安装总数。不同计量单位必须分活动,台/套/个不能擅自统一成个。明确由组织时长控制的临设搭建、测量准备、协调和验收可同时拟定班组/设备,productivityPerCrewShift与unit为null,duration说明实际组织依据。以产率计算的生产活动不同时填duration,不反摊合同天数或调整产率凑工期。",JSON.stringify({projectConstraints:n,dependencyDirectory:j.map((a,b)=>({activityIndex:b,id:a.id,phaseId:a.phaseId,objectScope:a.objectScope}))}),"quantitySources是无损清单表:groups保留原文件和工程/分部,rows按columns解释;descriptionIndex只查descriptions中的完整原字。memberIndices必须取行内index(全工程原来源序号),不是数组位置、组序号或descriptionIndex。相同描述仅共享文字,不合并任何条目或数量。",JSON.stringify({quantitySources:f}),JSON.stringify({phase:c.phase,tasks:o.filter(a=>c.phase.taskIndices.includes(a.taskIndex)),crewProfiles:[...new Map(c.indices.flatMap(a=>j[a].crewProfile?[[j[a].crewId,j[a].crewProfile]]:[])).values()],activities:c.indices.map(a=>{let{crewProfile:b,...c}=j[a];return{activityIndex:a,...c}})})].join("\n\n"),h={type:"object",required:["activities"],additionalProperties:!1,properties:{activities:{type:"array",minItems:c.indices.length,maxItems:c.indices.length,items:{type:"object"}}}},i=await H(`details-${b}`,"你是施工组织设计主智能体,为已经固定的本阶段活动核定有依据的生产输入。",g,h,a=>{try{return D(a,j,c.indices,t,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}});for(let a of(q[b]=D(i,j,c.indices,t,d,m),q[b]))w.set(a.id,a);a.onReceipt?.(`shared-construction-details-${b}`,{phaseId:c.phase.id,raw:i})}}catch(a){throw s.abort(a),a}}));await Promise.allSettled([...F]),u=a.signal;let y=x.find(a=>"rejected"===a.status);if(y?.status==="rejected")throw y.reason;b=j.map((a,b)=>q.flat().find(b=>b.id===a.id)??(()=>{throw Error(`共同生产计划缺少活动${b}的实际输入`)})());let A={phases:t,activities:b},B=function(a,b,c){let d,e,f=[];try{d=z(a,b.sections.length)}catch(a){f.push(a instanceof Error?a.message:String(a))}if(!d)return f;try{e=(0,g.SZ)(a.activities,d.map(a=>a.id),b.sections.length)}catch(a){f.push(a instanceof Error?a.message:String(a))}if(!e)return f;let h=e.filter(a=>a.taskIndices.some(b=>!d.find(b=>b.id===a.phaseId).taskIndices.includes(b)));if(h.length)return f.push(`活动任务不属于该实际阶段委派:活动「${h.map(a=>a.id).join("、")}」的 taskIndices 必须取自其 phaseId 对应阶段的 taskIndices,不得引用其他阶段或未委派任务`),f;try{(0,g.yP)({contract:b,project:c,phaseIds:d.map(a=>a.id),activities:e})}catch(a){f.push(`生产计划不成立:${a instanceof Error?a.message:String(a)}`)}return f}(A,d,m);if(B.length)throw Error(B.join(";"));if(a.onReceipt?.("shared-construction-candidate",{raw:A}),(c=(0,g.yP)({contract:d,project:m,phaseIds:t.map(a=>a.id),activities:b})).inputs.length&&c.issues.length){var I;let e=c;a.onReceipt?.("shared-construction-calculated-conflicts",{planId:e.id,calendar:e.calendar,issues:e.issues});let g=(I=t,["当前共同工程候选在同源计算中存在真实冲突。作者尚未启动。只修正所需的组织输入,重新计算无冲突且符合合同工期后才冻结。",'返回{"changes":[{activityIndex,reason,production?:完整原结构,duration?:完整原结构或null,waits?:完整原结构数组,predecessors?:完整原结构数组}]}。省略字段保持原值;填写字段须给完整内容。不得改活动ID、对象、工作面、任务、原数量或来源序号,不删除活动,不复制全工程计划。每项reason明确调整前后和实际工况/交接依据。',"同一crewId表示同一组实际人员,同期不得重复占用。不能仅换ID掩盖同一班组冲突;独立班组必须有可同时展开的实际作业面及完整人员/机具配置和调配依据。减少班组时相应调整真实活动关系;增加班组必须核实现场可用作业面、供料与机械能力。不得改产率凑工期,不取消养护/试验/验收等必要等待。","predecessors可在冻结前按真实分区移交或分段流水修正,但reason必须说明后序启动的具体放行条件及其与前序开始/完成的关系;不能仅将finish-start改成start-start或编lagDays来压缩工期。缺少可核移交依据时保留完整先后关系,通过明确资源安排调整。当前工法、对象及源数量保持不变。","所有计算使用真实数量、明确拟定产率/设备能力和完整依赖。数值与日历边界在candidate中可核;calendar.totalDays是合同约束,不是反摊各阶段的分配数。只调整确有问题的活动,其余有效输入复用;既有未知来源不得改为已知。",(0,f.D)({phases:I,candidate:{calendar:e.calendar,activities:e.activities.map((a,b)=>({activityIndex:b,...a.input,quantityValue:a.quantity,workDays:a.workDays,durationDays:a.durationDays,timeWindow:a.timeWindow,workTimeWindow:a.workTimeWindow,critical:a.critical,reasons:a.reasons})),issues:e.issues}})].join("\n\n")),i=await H("reconciliation","你是施工组织设计主智能体,依据实际计算冲突修正同一候选的组织安排,完整验证后才委派作者。",g,{type:"object",required:["changes"],additionalProperties:!1,properties:{changes:{type:"array",minItems:1,items:{type:"object"}}}},a=>{try{return h(a,e,t,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}});for(let a of b=(c=h(i,e,t,d,m)).inputs)w.set(a.id,a);a.onReceipt?.("shared-construction-reconciliation",{originalPlanId:e.id,raw:i,planId:c.id,calendar:c.calendar,issues:c.issues})}}catch(e){if(a.signal?.aborted)throw e;b=v.map(a=>w.get(a.id)??{...B(a),quantity:null,production:null,duration:null,waits:[]}),c=(0,g.yP)({contract:d,project:m,phaseIds:t.map(a=>a.id),activities:b}),y=`共同工程计划仍有未核事项:${e instanceof Error?e.message:String(e)};已保留${w.size}/${v.length}项实际生产输入;未测活动不授予完成时间、全工程峰值或工期可行性`}let J=d.sections.map((a,b)=>{let c=t.filter(a=>a.taskIndices.includes(b));return{taskId:a.id,status:c.length?"planned":"unmeasured",phaseIds:c.map(a=>a.id),objectScope:a.responsibility,approach:c.map(a=>a.method).join(";"),handoffs:[...new Set(c.flatMap(a=>a.interfaces))],boundary:a.responsibility}}),K=a.sourcePurposeReviewer||void 0===a.planner?await A({contract:d,project:m,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.sourcePurposeReviewer}):[],L={version:r,contractId:d.id,projectSnapshotId:m.snapshotId,phases:t,tasks:J,production:c,taskSourceReviews:K,review:{status:"unmeasured",reason:y}},M={...L,id:s(L)};return a.onReceipt?.("shared-construction-end",{startedAt:q,elapsedMs:Date.now()-q,attempts:E,status:t.length?"planned":"unmeasured",taskSourceReviewCount:K.length,reason:y,planId:M.id}),M}function F(a,b,c){x(c);let{id:d,...e}=a;if(a.version!==r||s(e)!==d||a.contractId!==b.id||a.projectSnapshotId!==c.snapshotId)throw Error("共同施工组织骨架与当前冻结项目或合同身份不一致");let f=b.sections.map(a=>a.id);if(a.tasks.length!==f.length||new Set(a.tasks.map(a=>a.taskId)).size!==f.length||a.tasks.some(a=>!f.includes(a.taskId)||!["planned","unmeasured"].includes(a.status??"")))throw Error("共同施工组织骨架的任务集合缺项、重复或状态无效");if(a.phases.length&&z({phases:a.phases},b.sections.length),(0,g.SZ)(a.production.inputs,a.phases.map(a=>a.id),b.sections.length),s(a.production.phaseIds)!==s(a.phases.map(a=>a.id))||a.production.inputs.some(b=>b.taskIndices.some(c=>!a.phases.find(a=>a.id===b.phaseId).taskIndices.includes(c))))throw Error("生产网络与实际阶段及任务委派不一致");if((0,g.Q4)(a.production,b,c),"unmeasured"!==a.review.status||!a.review.reason.trim())throw Error("组织候选不能冒充已完成的专业工程复核");let h=["id","version","contractId","projectSnapshotId","phases","tasks","production","taskSourceReviews","review"],i=["taskId","status","phaseIds","objectScope","approach","handoffs","boundary"];if(Reflect.ownKeys(a).some(a=>!h.includes(String(a)))||a.tasks.some(a=>Reflect.ownKeys(a).some(a=>!i.includes(String(a)))))throw Error("组织骨架不能携带旧字段或未经实际工程核定的采用许可");if(!Array.isArray(a.taskSourceReviews))throw Error("共享计划缺少每任务来源用途核定集合");let k=new Set;for(let b of a.taskSourceReviews){if(!b||Reflect.ownKeys(b).some(a=>!["taskId","sourceDictionaryIds","receipt"].includes(String(a)))||k.has(b.taskId)||!f.includes(b.taskId)||!Array.isArray(b.sourceDictionaryIds)||!b.sourceDictionaryIds.length||new Set(b.sourceDictionaryIds).size!==b.sourceDictionaryIds.length)throw Error("任务来源用途核定缺项、重复或身份无效");k.add(b.taskId);let a=b.sourceDictionaryIds.map(a=>[...c.sourceControls??[],...c.facts].find(b=>(0,j.vg)(b)===a));if(a.some(a=>!a))throw Error("任务来源用途核定缺少当前冻结原文");(0,p.lH)(b.receipt,{variants:[],sourceDictionary:a,requiredSourceDictionaryIndices:a.map((a,b)=>b)})}for(let[c,d]of a.tasks.entries()){let e=a.phases.filter(a=>a.taskIndices.includes(c));if(d.taskId!==f[c]||s(d.phaseIds)!==s(e.map(a=>a.id))||d.status!==(e.length?"planned":"unmeasured")||d.approach!==e.map(a=>a.method).join(";")||s(d.handoffs)!==s([...new Set(e.flatMap(a=>a.interfaces))])||d.objectScope!==b.sections[c].responsibility||d.boundary!==b.sections[c].responsibility)throw Error("共享组织委派与实际阶段及冻结任务职责不一致")}}function G(a){if(a.production.issues.length)throw Error(`共同工程计划未通过写前计算校验,暂停作者调度。仍有${a.production.issues.length}项工程输入、班组、资源或工期问题;完整候选及逐项计算回执已保留,须由主控修正后重新核验。`)}function H(a,b,c){x(b);let{id:d,...e}=a;if(a.version!==r||s(e)!==d||a.projectSnapshotId!==b.snapshotId)throw Error("作者权限底座与当前组织骨架/项目身份不同");if(!a.tasks.some(a=>a.taskId===c))throw Error("作者权限底座没有当前任务");let f=a.taskSourceReviews.find(a=>a.taskId===c);if(!f)return{planId:a.id,taskId:c,sourceCases:[],controls:[]};let g=f.sourceDictionaryIds.map(a=>[...b.sourceControls??[],...b.facts].find(b=>(0,j.vg)(b)===a));if(g.some(a=>!a))throw Error("来源用途核定缺少当前冻结原文");let h=(0,p.lH)(f.receipt,{variants:[],sourceDictionary:g,requiredSourceDictionaryIndices:g.map((a,b)=>b)}).sourceCases.map(a=>{let c=g[a.sourceDictionaryIndex],d=b.sources[c.sourceFile]?.sha256;if(!d)throw Error("来源用途核定引用了未冻结来源文件");return{...a,sourceId:(0,j.vg)(c),sourceFile:c.sourceFile,sourceFingerprint:d,chunkIndex:c.sourceRef?.chunkIndex}});return{planId:a.id,taskId:c,sourceCases:h,controls:[]}}},27284:(a,b,c)=>{function d(a){let b=new Map,c=a=>{"string"==typeof a&&a.length>=40?b.set(a,(b.get(a)??0)+1):Array.isArray(a)?a.forEach(c):a&&"object"==typeof a&&Object.values(a).forEach(c)},d=JSON.parse(JSON.stringify(a));if(d&&"object"==typeof d&&!Array.isArray(d))for(let[a,b]of Object.entries(d))["scope","task","interfaces"].includes(a)||c(b);else c(d);let e=[...b].filter(([,a])=>a>1).map(([a])=>a),f=new Map(e.map((a,b)=>[a,b])),g=a=>{if("string"==typeof a&&f.has(a))return{$text:f.get(a)};if(Array.isArray(a)){if(a.length>1&&a.every(a=>a&&"object"==typeof a&&!Array.isArray(a))){let b=new Map,c=a.map(a=>g(a));a.forEach((a,d)=>{let e=Object.keys(a).sort(),f=JSON.stringify(e),g=b.get(f)??{columns:e,positions:[],rows:[]};g.positions.push(d),g.rows.push(e.map(a=>c[d][a])),b.set(f,g)});let d={$records:{length:a.length,groups:[...b.values()].map(a=>1===b.size?{columns:a.columns,rows:a.rows}:a)}};return JSON.stringify(d).length<JSON.stringify(c).length?d:c}return a.map(g)}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,g(b)])):a};return JSON.stringify({format:"lossless-record-tables-v1",meaning:"$records是完整记录数组:每行按columns逐列解释;多组按positions恢复原数组顺序,单组按行序。字段缺失与null保持区别。$text只引用texts中的完整原字。所有index保持原全局序号,不是表行位置;表和字典不合量、不裁字、不改变采用资格。",data:g(d),texts:e})}c.d(b,{D:()=>d,x:()=>e});let e="【全体子作者共用的主控组织部署与本任务委派】"},27939:(a,b,c)=>{c.d(b,{G0:()=>h,HU:()=>f,RM:()=>i,lY:()=>e,n5:()=>g,yD:()=>d});let d="content-first-technical-bid-v1",e=["写成可据以组织施工的技术方案:明确工程对象和部位、施工前提、工序、接口、控制值、岗位、验收与异常处理;定性管理无需凑参数。","正文直接陈述已经核定的技术条件和措施,不写“按设计图例”“图纸要求”“对照清单”,不说明某个工程或工法来自哪个图纸;规范名称与适用版本可在编制依据中正常列明。出处、原句和推导保存在引用审计中。","不得用“以经审批的专项施工方案及设计文件为准,本节不另行设定”等话把本节技术决定推给后续。审批程序可以写,但必须同时说明当前方案的实际方法、参数和控制要求。","直接用于施工的尺寸、标高、深度、规格和配置须按明确对象与部位给出已核定值;不使用“约”“左右”或笼统范围代替控制值。不同部位确有不同值时逐部位说明,不能取范围端点、平均数或统一最大值冒充所有部位的值。","分层厚度、坑底高程、支护桩长与基坑总深度是不同属性。存在多种设计工况时说明适用工况,偏差允许值与合理施工条件区间也须明确用途,不能混成工程实体的未决范围。","有完整依据才能作技术判断。资料冲突或对象关系尚未解决时,在写作前向主智能体提出具体问题,保留内部未决项;不把“待核定”“以文件为准”塞进成稿,也不编造确定值。","每段提供新的工程信息、必要理由或执行动作。删去重复承诺、空泛口号、泛化制度和无实际作用的过渡语,避免各任务重复工程概况;不得为凑字数增加内容。","项目针对性由本节适用的部位、作业条件、工序接口、资源安排、风险和验收关系体现,不以标题新奇或同义改写体现。行业专业标题、术语、工艺的固定名称与同一项目已核定事实可以稳定复用;不得为避开历史文档而改名、删职责、换正确参数或重新编造方案。","每轮依据当前合格资料、已确认方案和冻结职责独立成稿。表达调整须保持对象、条件、因果顺序、控制值和责任接口不变;必要事实或接口承接的重复不是套话,只有不增加有效信息的重复叙述才需要在其实际作用域内处理。","正文不生成封面,封面不属于专业内容评审评分项;目录由系统按实际正文标题统一生成,作者无需编写目录或虚构页码。","本轮以专业内容验收,页数仅用于排版参考,后续投标由人工二次排版;不能为压到50页删去必需技术信息。"],f="本节形成精简、实际、有效且可执行的专业技术方案,工程对象、工况、方法、控制值与职责明确;无重复套话、空话或泛化说明,不以资料出处或未来审批替代当前技术决定。工程实体参数按具体部位核定,笼统约数或范围不能替代施工控制值;不同部位的真实差异与允许偏差应明确其适用条件和用途。项目针对性按本节真实对象、条件及其实施关系判断;标准术语、专业标题和必要事实承接可稳定复用,不以跨文档词面相似度或表述新奇程度判分。";function g(a){let b=[/按设计图例/gu,/(?:按|遵照|依据)?图纸要求/gu,/对照清单/gu,/按(?:照)?(?:施工)?图(?:纸)?(?:要求|施工|实施|设置)?/gu,/(?:以|依据|参照|详见)[^。;\n]{0,60}(?:图|图集|设计文件|专项(?:施工)?方案)[^。;\n]{0,25}(?:为准|执行|实施|施工)/gu,/(?:按|依据|参照)[^。;\n]{0,35}图[^。;\n]{0,20}(?:标注|所示|示出|指定)(?:[^。;\n]{0,10}(?:距离|值|尺寸|做法))?/gu,/以[^。;\n]{0,80}(?:专项施工方案|设计文件)[^。;\n]{0,30}为准[^。;\n]{0,30}(?:本节|本方案)?不另行设定/gu].flatMap(b=>[...a.matchAll(b)].map(a=>({text:a[0],start:a.index,end:a.index+a[0].length}))).sort((a,b)=>b.text.length-a.text.length),c=[];for(let a of b)c.some(b=>a.start<b.end&&a.end>b.start)||c.push(a);return c.sort((a,b)=>a.start-b.start).map(a=>`正文用出处或后续文件替代当前技术决定:${a.text}`)}function h(a){let b=g(a);for(let c of a.split(/[。;\n]/u))/(?:设计|图纸)[^。;]*不(?:一致|符)[^。;]*(?:按|依照|根据)现场实际(?:情况)?施工/u.test(c)&&!/(?:不得|禁止|不能|不可)[^。;]{0,12}(?:按|依照|根据)现场实际/u.test(c)&&b.push("设计与现场不符时不能擅自按现场改变设计施工;须明确停止影响范围、记录差异、处理责任及变更后复核放行条件");return[...new Set(b)]}let i="【从来源到施工决定】来源原句用于识别工程对象、合同责任、条件和约束,不直接粘贴成正文。先判断本节实际需决定的工法、资源、检查或接口,再依据已给事实和工程知识写行动、控制、停止与放行。无需为管理段添加参数或重复检查全项目资料。\n合同说“由总包承担”“按图实施”只说明责任或引用,不等于本节已完成技术决定。把责任落实为本方案的具体动作与接口;真实设计/规格未知只就这个问题查证并交主控,其他可完成内容先成文,未决留任务元数据。\n现场与设计发生差异时,禁止擅自按现场改变设计。例如接口条件不一致:停止该接口的开挖和接驳,记录实测位置、标高及影响范围,由项目技术负责人协调设计处理,取得明确变更后交底、复核并放行。这是异常处置,不能替代正常施工方法,不在无此问题的小节机械复制。\n图件必须承载对应专业信息:工序或接口关系用关系图,场地布置用实际相对位置、设施区域及通行/管线线路的平面示意;图内相对坐标不是现场尺寸。需要测量尺度或真实定位时以已核事实支持,数据缺失进入主控问题,不把流程图冒称真实场地平面图。"},29327:(a,b,c)=>{c.d(b,{chiefDecisionWritingContext:()=>M,w:()=>O});var d=c(77598),e=c(63327),f=c(10170),g=c(63007),h=c(48825),i=c(9848),j=c(16752),k=c(44616),l=c(5518),m=c(73123);function n(a,b){if(!b.query?.trim()||b.query.length>300||!Number.isSafeInteger(b.offset??0)||(b.offset??0)<0||!Number.isSafeInteger(b.limit??4)||(b.limit??4)<1||(b.limit??4)>8||void 0!==b.filePath&&!Object.hasOwn(a.sources,b.filePath))throw Error("原文查询条件或冻结文件身份无效");let c=b.query.trim().split(/\s+/u).map(a=>a.toLowerCase()),d=(a.sourceControls??[]).filter(d=>"verified-source-excerpt"===d.roleId&&d.factId&&Object.hasOwn(a.sources,d.sourceFile)&&(void 0===b.filePath||d.sourceFile===b.filePath)&&c.every(a=>d.value.toLowerCase().includes(a))).sort((a,b)=>a.sourceFile.localeCompare(b.sourceFile)||Number(a.sourceRef?.chunkIndex??0)-Number(b.sourceRef?.chunkIndex??0)),e=b.offset??0,f=d.slice(e,e+(b.limit??4)),g=e+f.length;return{kind:"frozen-original-source",projectSnapshotId:a.snapshotId,query:b.query,matchedCount:d.length,offset:e,complete:g>=d.length,...g<d.length?{nextOffset:g}:{},sources:f.map(b=>({sourceId:b.factId,...(0,k.mk)(a,void 0,b.factId),filePath:b.sourceFile,sourceHash:a.sources[b.sourceFile].sha256,chunkIndex:b.sourceRef?.chunkIndex,sectionTitle:b.sourceRef?.sectionTitle,text:b.value,sourceVersionEligibility:a.sourceVersionPolicy?(0,m.bz)(a,{sourceFile:b.sourceFile,usage:"source-reference",quote:b.value}):{status:"unmeasured",decisionIds:[],reason:"原文可供只读追溯;缺少来源版本用途账,不能作为本次准入或设计采用证明"},sourceSemantics:b.sourceSemantics??(0,l.Q)(b.sourceRef?.roleId??b.roleId,b.sourceRef?.processingType??b.processingType)})),interpretation:"冻结原文候选;须结合对象、条件及已裁决事实判断适用性,查询零命中不证明全部资料没有该内容"}}var o=c(68417),p=c(15254),q=c(66620),r=c(40109),s=c(27939),t=c(5968),u=c(9236);let v=a=>"string"==typeof a&&!!a.trim();async function w(a,b){if(b.signal?.throwIfAborted(),!Array.isArray(a)||!a.length)throw Error("工程裁决须提供非空的实际对象控制项");let c=a.map(a=>{if(!a||"object"!=typeof a||Object.keys(a).some(a=>!["objectName","attribute","condition","value","instruction","evidence","derivation"].includes(a))||!["objectName","attribute","condition","value","instruction"].every(b=>v(a[b])&&a[b].length<=1500)||!Array.isArray(a.evidence)||!a.evidence.length||a.evidence.length>8)throw Error("工程控制项的对象、属性、工况、值或依据不完整");let c=a.evidence.map(a=>{if(!a||Object.keys(a).some(a=>!["sourceId","quote"].includes(a))||!v(a.sourceId)||!v(a.quote))throw Error("工程裁决的原文定位无效");let c=b.sources.find(b=>b.sourceId===a.sourceId);if(!c||!(0,p.dP)(c.text,a.quote))throw Error("工程裁决引用未查询的来源或改写了原文");return{sourceId:a.sourceId,quote:a.quote}}),d=(0,q.ei)(a.value);if((0,s.n5)(a.instruction).length)throw Error("工程控制执行指引仍将施工决定转交图示、设计文件或审批,须先核定具体执行要求");if(1!==d.length||/\d\s*(?:~|~|至|到|–|—)\s*[+−-]?\d|(?:约|左右|大致)/u.test(a.value))throw Error("控制值须为明确数值及单位;范围和约数只能保留为概况");if((0,q.ei)(a.instruction).some(a=>!d.includes(a)))throw Error("执行指引包含控制项之外未核定的参数");if(void 0!==a.derivation){let c=a.derivation;if(!c||Object.keys(c).some(a=>!["formula","inputFactIds","basis"].includes(a))||!v(c.formula)||!v(c.basis)||!Array.isArray(c.inputFactIds)||!c.inputFactIds.length||c.inputFactIds.some(a=>!b.facts.some(b=>b.factId===a)))throw Error("工程推导须使用本次提供的可靠事实与有限算式");(0,q.Db)([{unitId:"chief-control",quote:a.value,source:{kind:"derived",...c}}],{units:[{id:"chief-control",kind:"paragraph",criterionIds:[],text:a.value}],project:b.project,factBindings:[],required:!0})}else if(!c.some(a=>(0,q.ei)(a.quote).includes(d[0])))throw Error("控制值与单位没有得到实际引文支持");return{objectName:a.objectName,attribute:a.attribute,condition:a.condition,value:a.value,instruction:a.instruction,evidence:c,...a.derivation?{derivation:a.derivation}:{}}}),d=(0,t.TR)(b.project,c,b.sources,b.taskId),e=JSON.stringify({task:b.task,criteria:b.criteria,effectiveFacts:b.facts,controls:c,cadReadings:b.cadReadings,sourceContext:d,sources:b.sources}),f=Math.max(8e3,Math.ceil(.6*JSON.stringify({controls:c,variants:d.variants,sources:d.sourceDictionary.map(a=>({value:a.value,objectName:a.objectName}))}).length)+1200*c.length),g=b.reviewer?await b.reviewer(e):await (0,r.bb)('你是独立工程适用性评审者。核对主智能体的控制项与完整原文、已裁决事实和本任务职责。须明确同一对象、部位、施工阶段、基准、适用条件和数值属性;存在无关图框/详图/材料串用、取概况范围端点或平均值、把计价量当实测量、分层厚度当总深度、引用已被更正资料、未经确认的范围扩大或推导输入基准不一致时拒绝。原文引用与算术正确不等于工程适用性正确。未核出部位关系保持unmeasured,不能以通常经验补造。每个控制项按零起始index返回status=confirmed/rejected/unmeasured与reason。同时对sourceContext中每份完整原文、每个实际variant及control返回完整sourceReview。sourceCases语义分为project-design/project-condition/normative-rule/reference-option/reference-method/unmeasured;每个case必须填写versionDomain,按完整原文的实际用途选择boq-quantity、procurement-brand、procurement-specification、construction-method,尚未确认填unmeasured。一个清单表引用A材料品牌,不扩大为它所有数量或工序均受A版本限制;同句同时断言数量与品牌须分别核定实际用途,不能只核数量而漏核产品选择。reference-method只用于已独立核定的非定量参考工序,versionDomain只能construction-method,不承接任何产品选型、规格或清单量控制。不把冻结出处或工艺推导正确当项目采用证明;图集参考选项须真实项目selector与option原文的同selectionKey桥,不能凭通常采用或reason确认。规范约束只登记normative-constraint,本工程设计或项目已选参数为project-property。derived输出只核公式、对象及基准关系,不变成原文已给的项目值;sourceContext中其输入control仍逐项核真实输入来源用途。逐源完整解释、逐variant覆盖,未知保留unmeasured,不新增省略字段。只返回JSON {"results":[{"index":0,"status":"confirmed|rejected|unmeasured","reason":"对象条件及推导关系核验"}],"sourceReview":{"confirmed":true,"reason":"整体复核理由","sourceResults":[{"sourceDictionaryIndex":0,"complete":true,"caseIds":["case-a"],"reason":"完整原文解释"}],"sourceCases":[{"id":"case-a","sourceDictionaryIndex":0,"quote":"该源真实连续原文","objectScope":"实际对象","condition":"适用工况","semanticKind":"project-condition","versionDomain":"unmeasured","applicability":"applicable","variantIds":["从sourceContext选择"],"reason":"项目用途依据"}],"variantResults":[{"variantId":"从sourceContext选择","status":"confirmed|rejected|unmeasured","sourceCaseIds":["case-a"],"reason":"来源与工况关系"}],"controlsResults":[{"variantId":"从sourceContext选择","controlId":"从sourceContext选择","status":"confirmed|rejected|unmeasured","usage":"project-property|normative-constraint","sourceCaseIds":["case-a"],"selectionEvidence":[{"selectorSourceCaseId":"真实项目选择case","optionSourceCaseId":"参考选项case","selectionKey":"两份原文逐字共同标识"}],"reason":"用途核验理由"}],"uncoveredSourceCases":[]}}。没有选项时selectionEvidence为空数组。',e,{diagnostics:b.diagnostics,signal:b.signal,taskKind:(0,r.TO)(),callKind:"supervisor-decision",maxTokens:f,temperature:0,schema:{type:"object",required:["results","sourceReview"],properties:{results:{type:"array",minItems:c.length,maxItems:c.length,items:{type:"object",properties:{index:{type:"integer",required:!0},status:{type:"string",required:!0,enum:["confirmed","rejected","unmeasured"]},reason:{type:"string",required:!0,minLength:1}}}},sourceReview:(0,u.q1)(d.variants,d.sourceDictionary.map((a,b)=>b))}}});b.signal?.throwIfAborted();let h=g&&"object"==typeof g&&Array.isArray(g.results)?g.results:[];for(let[a]of c.entries()){let b=h.filter(b=>b&&"object"==typeof b&&b.index===a),c=b[0];if(1!==b.length||c?.status!=="confirmed"||!v(c.reason))throw Error(`工程适用性未确认:控制项${a},${v(c?.reason)?c.reason:"评审缺项或无效"}`)}let i=(0,t.XJ)({project:b.project,planId:b.planId,taskId:b.taskId,decisionId:b.decisionId,controls:c,sources:b.sources,review:g});return{controls:c.map(a=>{let{derivation:c,...d}=a;return{...d,evidence:a.evidence.map(a=>({...a,...(0,k.mk)(b.project,void 0,a.sourceId)})),...c?{derivation:{...c,inputFactIndices:c.inputFactIds.map(a=>{let c=(0,k.mk)(b.project,a).factIndex;if(void 0===c)throw Error("推导输入没有本轮冻结属性序号");return c})}}:{}}}),review:g,sourceApplicationReceipt:i}}var x=c(45455);function y(a,b){let c=new Map,d=(a.sourceControls??[]).filter(b=>"verified-source-excerpt"===b.roleId&&Object.hasOwn(a.sources,b.sourceFile)),f=b=>{let f=d.find(a=>(0,e.vg)(a)===b);f&&c.set(b,{sourceId:b,...(0,k.mk)(a,void 0,b),filePath:f.sourceFile,sourceHash:a.sources[f.sourceFile].sha256,chunkIndex:f.sourceRef?.chunkIndex,sectionTitle:f.sourceRef?.sectionTitle,text:f.value,sourceVersionEligibility:{status:"unmeasured",decisionIds:[],reason:"真实读取仅恢复冻结原文身份;来源用途、版本及工程采用须独立复核"},sourceSemantics:f.sourceSemantics??(0,l.Q)(f.roleId,f.processingType)})};for(let g of b)if(!g.error&&g.result&&g.result.projectSnapshotId===a.snapshotId)if("source"===g.kind)for(let b of g.result.sources){let f=d.find(a=>(0,e.vg)(a)===b.sourceId);f&&b.filePath===f.sourceFile&&b.sourceHash===a.sources[f.sourceFile].sha256&&b.chunkIndex===f.sourceRef?.chunkIndex&&b.text===f.value&&c.set(b.sourceId,b)}else if("cad"===g.kind){let b=g.result;if("annotations"!==b.kind||a.sources[b.filePath]?.sha256!==b.parsedIdentity)continue;for(let a of b.records){let c=a.payload.text;if("string"==typeof c&&c.trim()&&a.payload.source&&"string"==typeof a.payload.id)for(let a of d.filter(a=>a.sourceFile===b.filePath&&a.value.replace(/\s/gu,"").includes(c.replace(/\s/gu,""))))f((0,e.vg)(a))}}else for(let b of g.result.items){let c=a.workPackages?.flatMap(a=>a.members??[]).find(a=>a.id===b.id);c&&JSON.stringify(c.entry)===JSON.stringify(b.entry)&&b.sourceEvidenceId&&a.sources[b.entry.sourceFile]?.sha256===b.sourceFingerprint&&f(b.sourceEvidenceId)}return[...c.values()]}function z(a){return a.flatMap(a=>{if(a.error||!a.result)return[];if("source"===a.kind){let b=a.result;return(0,x.xj)([{toolName:"read_source",ok:!0,data:{...b,chunks:b.sources.map(a=>({filePath:a.filePath,chunkIndex:a.chunkIndex,sourceId:a.sourceId,sourceHash:a.sourceHash,content:a.text}))}}])}return(0,x.xj)([{toolName:"cad"===a.kind?"query_cad_context":"query_work_packages",ok:!0,data:a.result}])})}async function A(a){let b=a.initialSourceQueries.map(b=>({kind:"source",query:b,result:n(a.project,b)})),c=[],d=[],e=new Set(z(b)),f=!1;for(;;){let g=await a.ask([a.prompt,'需要继续查证时返回 {"action":"read","sourceQueries":[{query,filePath?,offset?,limit?}],"cadQueries":[{filePath,kind:"frames"|"annotations"|"geometry"|"instances",frameId?,entityId?,rootInstanceId?,query?,offset?,limit?}]}。按真实对象读取,nextOffset继续分页;新证据或实际游标有进展即可继续,没有总次数配额。重复同页、空结果和改query不代表新证据。先定位图框;读取身份、单位文字、坐标均不自动成为已核定工程参数。没有新证据时具体说明未核事项,不编造施工值。',...a.readCad?[]:["本次未提供CAD结构读取能力,cadQueries不可使用。"],JSON.stringify({readingReceipts:b,protocolErrors:d})].join("\n"));if(c.push(g),a.onProgress?.(b,c,d),!g||"object"!=typeof g||"read"!==g.action)return{raw:g,attempts:c,reads:b,protocolErrors:d,sources:y(a.project,b)};if(Object.keys(g).some(a=>!["action","sourceQueries","cadQueries"].includes(a))||void 0!==g.sourceQueries&&!Array.isArray(g.sourceQueries)||void 0!==g.cadQueries&&!Array.isArray(g.cadQueries))throw Error("主控追加读取协议无效");let h=[...(g.sourceQueries??[]).map(a=>({kind:"source",query:a})),...(g.cadQueries??[]).map(a=>({kind:"cad",query:a}))];if(!h.length){if(d.push("读取请求为空,未取得新证据;请返回具体裁决或实际定位条件。"),a.onProgress?.(b,c,d),f)throw Error("主控重复无进展,未形成已核定裁决");f=!0;continue}let i=b.length;for(let e of h){try{let c="source"===e.kind?["query","filePath","offset","limit"]:["filePath","kind","frameId","entityId","rootInstanceId","query","offset","limit","placement","textOnly","order","detail"];if(!e.query||"object"!=typeof e.query||Object.keys(e.query).some(a=>!c.includes(a)))throw Error("读取定位字段无效");if("cad"===e.kind&&!a.readCad)throw Error("本次主控未提供CAD读取能力");let d="source"===e.kind?n(a.project,e.query):a.readCad(e.query);b.push({...e,result:d})}catch(a){b.push({...e,error:a instanceof Error?a.message:String(a)})}a.onProgress?.(b,c,d)}let j=z(b.slice(i)),k=j.some(a=>!e.has(a));if(j.forEach(a=>e.add(a)),k)f=!1;else{if(d.push("实际读取没有新的证据或分页进展;不能以改查询词或重复第一页声称完成查证。"),a.onProgress?.(b,c,d),f)throw Error("主控重复无进展,未形成已核定裁决");f=!0}}}var B=c(24481);let C={type:"object",properties:{query:{type:"string",description:"以空格分隔的每个词均须出现在同一原文片段中;不是多个问题或备选词。换查询须从offset=0开始。"},filePath:{type:"string"},offset:{type:"integer",minimum:0,description:"同一查询的下一页必须使用回执nextOffset;不能沿用其他查询的偏移。"},limit:{type:"integer",minimum:1,maximum:8}},required:["query"],additionalProperties:!1},D={type:"object",properties:{filePath:{type:"string"},kind:{type:"string",enum:["frames","annotations","geometry","instances"]},frameId:{type:"string",description:"annotations/geometry须提供本次frames实际返回的图框ID、entityId或instances返回的rootInstanceId。"},entityId:{type:"string"},rootInstanceId:{type:"string",description:"instances目录实际返回的源根身份,用于annotations或geometry;根handle或ordinal不是工程部位,readingSourceIds只读身份不是已核定事实。"},query:{type:"string",description:"单条标注或图名中的实际字面子串。不是语义检索,不支持空格分隔的多词。数字标注常只有数值,建议先不填query读取所选图框或实际根标注,再按真实文字定位。图框可用剖面等实际图名定位。"},offset:{type:"integer",minimum:0,description:"回执nextOffset为实际分页边界;不按请求limit自行累加。换图框、实际根或关键词须从0开始。"},limit:{type:"integer",minimum:1,maximum:24},placement:{type:"string",enum:["all","drawing-space","frame-instance"],description:"在所选图框内按实际块路径筛选;drawing-space排除图框实例及其ATTRIB(常为图签),frame-instance仅查看这部分;不是语义删除,不证明另一部分没有工程说明。剖面主体标注宜先读drawing-space。"},textOnly:{type:"boolean",description:"仅返回有实际文字的标注,过滤空DIMENSION;其尺寸印刷字仍按实际图形块引用返回。"},order:{type:"string",enum:["source","position"],description:"position按实际世界坐标从上到下、从左到右阅读;只是绘图位置,不据此判断工程标高和对象。"},detail:{type:"string",enum:["full","catalog"],description:"frames默认catalog提供实际图框身份、图名和图号;需要真实边界和块变换时按entityId读取full。annotations/geometry始终full。"}},required:["filePath"],additionalProperties:!1},E={type:"object",properties:{action:{type:"string",enum:["use-facts","use-sources","engineering-controls","qualitative-controls","guidance","request-human"]},answer:{type:"string"},reason:{type:"string"},factIds:{type:"array",items:{type:"string"}},sourceIds:{type:"array",items:{type:"string"}},controls:{type:"array",minItems:1,items:{type:"object",properties:{objectName:{type:"string"},attribute:{type:"string"},condition:{type:"string"},value:{type:"string"},instruction:{type:"string"},evidence:{type:"array",items:{type:"object",properties:{sourceId:{type:"string"},quote:{type:"string"}},required:["sourceId","quote"],additionalProperties:!1}},derivation:{type:"object",properties:{formula:{type:"string"},inputFactIds:{type:"array",items:{type:"string"}},basis:{type:"string"}},required:["formula","inputFactIds","basis"],additionalProperties:!1}},required:["objectName","attribute","condition","value","instruction","evidence"],additionalProperties:!1}},qualitativeControls:{type:"array",minItems:1,items:{type:"object",properties:{category:{type:"string",enum:["conditional-duty","project-adoption"]},objectName:{type:"string"},attribute:{type:"string"},condition:{type:"string"},value:{type:"string"},instruction:{type:"string"},evidence:{type:"array",minItems:1,items:{type:"object",properties:{sourceId:{type:"string"},quote:{type:"string"}},required:["sourceId","quote"],additionalProperties:!1}}},required:["category","objectName","attribute","condition","value","instruction","evidence"],additionalProperties:!1}}},required:["action","answer","reason","factIds","sourceIds"],additionalProperties:!1},F={type:"object",properties:{query:{type:"string",description:"工程、分部或清单项目的实际字面子串;*列出本轮全部成员,不使用空格拼接多个备选词。"},offset:{type:"integer",minimum:0,description:"使用同一查询回执nextOffset继续分页;换查询从0开始。"},limit:{type:"integer",minimum:1,maximum:8}},required:["query"],additionalProperties:!1};class G extends Error{constructor(a,b,c,d){super(b,{cause:d}),this.code=a,this.name="OPERATION_TIMEOUT"===a?"TimeoutError":"OPERATION_ABORTED"===a?"AbortError":"ChiefReadingOperationError",this.reads=[...c.reads],this.attempts=[...c.attempts],this.errors=[...c.errors]}}let H={name:"finish_source_reading",description:"结束本次普通目录及原文定位阶段;可说明已提供的真实资料足够,避免无必要重复读。这里只结束准备,不能确认工法或宣称方案已核定,后续独立进行专业推理提交。",parameters:{type:"object",properties:{reason:{type:"string",minLength:1}},required:["reason"],additionalProperties:!1}};async function I(a){a=(0,B.DQ)(a);let b=[],c=[],d=[],e={reads:b,attempts:c,errors:d},f=a.signal??new AbortController().signal,g=()=>{if(f.aborted){let g=f.reason,h=g?.name==="TimeoutError",i=void 0===g||g?.name==="AbortError",j=h?"OPERATION_TIMEOUT":i?"OPERATION_ABORTED":"OPERATION_FAILED",k=h?"本地主控查证操作期限已到达;保留已读回执,方案保持未测状态":i?"用户中止主控查证;未采用后续读取或提交结果":g instanceof Error?g.message:`外部运行信号终止主控查证:${String(g)}`,l=`${j}: ${k}`;throw d.includes(l)||(d.push(l),a.onProgress(b,c,d)),new G(j,k,e,f.reason)}};try{return await (0,B.Uq)({diagnostics:a.diagnostics,signal:f,callKind:a.callOptions?.callKind??"supervisor-decision"},async()=>{let h=a.submission??{name:"submit_chief_decision",description:"查证完毕后提交本任务裁决。工程控制继续接受来源、量纲、算术和独立适用性审查;guidance只提供定性指引。",parameters:E};if(!/^[A-Za-z0-9_-]{1,64}$/u.test(h.name)||["read_frozen_source","read_frozen_cad","read_frozen_work_packages",H.name].includes(h.name)||!h.description.trim()||!h.parameters||"object"!=typeof h.parameters||Array.isArray(h.parameters))throw Error("主控提交工具声明无效或与读取工具重名");g(),b.push(...a.initialSourceQueries.map(b=>({kind:"source",query:b,result:n(a.project,b)})));let i=!1,j=!a.readingCallOptions,k=new Set(z(b)),l=b.length,m=new Set,o=a=>{let c=z(b.slice(l));l=b.length;let d=c.some(a=>!k.has(a));if(c.forEach(a=>k.add(a)),d)return void m.clear();if(m.has(a))throw new G(i?"PLAN_VALIDATION_FAILED":"READING_NO_PROGRESS",`主控重复无进展,未发布裁决:${a}。保留已读证据与实际错误,未决不代表没有要求`,e);m.add(a)},p=[],q=[{name:"read_frozen_source",description:"读取本轮冻结的完整解析原文,保留条件与真实来源,可继续nextOffset;零命中不证明工程资料没有。",parameters:C},...a.readCad?[{name:"read_frozen_cad",description:"读取本轮真实CAD图框、标注或几何。无图框时annotations可用非空实际字面query定位候选,再按rootBindings中真实rootInstanceId读annotations或geometry,也可从instances目录定位;源handle和裸坐标不自动成为工程部位或施工参数,空query不全图返回。",parameters:D}]:[],...a.readWorkPackages?[{name:"read_frozen_work_packages",description:"读取本轮冻结的原始清单成员,保留对象、完整特征、数量单位和真实来源。按nextOffset继续完整记录;清单计价量不自动成为施工控制值,零命中不证明工程资料没有。",parameters:F}]:[],h],s=[{role:"user",content:[a.prompt,...a.readingCallOptions?["当前先执行普通源查证阶段,只定位实际目录、清单成员与完整原文,不在此阶段确认工法。已有真实提供的资料足够时可用finish_source_reading说明理由结束准备;之后才使用专业推理提交完整方案。"]:[],a.submission?`通过实际工具查证,禁止把尚未读到的资料、清单成员、图框、单位或部位关系当作已确认。真实证据或分页游标有进展即可继续;重复空结果、失败或同一控制反馈后具体保留未决,不编造已核定关系。最终通过${h.name}提交;读取和提交不放在同一轮。`:"通过实际工具查证,禁止把尚未读到的图框、单位或部位关系当作已确认。真实证据或分页游标有进展即可继续;反复没有新证据时具体保留未决,不代写含糊施工正文。最终裁决通过submit_chief_decision提交;读取和提交不放在同一轮。",JSON.stringify({initialReadingReceipts:b})].join("\n")}],t=new Set,u=()=>{let c=y(a.project,b).filter(a=>!t.has(a.sourceId));c.forEach(a=>t.add(a.sourceId)),c.length&&s.push({role:"user",content:`【实际读取恢复的冻结原文来源】${JSON.stringify(c)}。提交sourceIds和evidence.sourceId只能选择这些sourceId;cad-read、图框、实体和清单成员ID只作读取定位。完整原文可读不代表工程采用许可,仍须独立核对象、条件、版本和用途。`});let d=a.readingContext?.(b);d?.trim()&&s.push({role:"user",content:`【冻结读取后的真实只读上下文】
|
|
112
|
+
【sourceDictionary】${JSON.stringify(h)}`,k=a.reviewer?async(b,c)=>{let d=await a.reviewer(b,c);return"string"==typeof d?d:void 0===d?void 0:JSON.stringify(d)}:void 0,l=await (0,e.v7)("你是独立来源用途评审者。只对给定任务将实际引用的完整原文逐条核定来源用途、版本用途域与适用性;不新增事实、不授予采用许可、不检查未提供的资料。",i,{diagnostics:a.diagnostics,signal:a.signal,callKind:"planning-review",taskKind:(0,e.TO)(),temperature:0,maxTokens:Math.max(4e3,Math.ceil(.6*JSON.stringify(h).length)),schema:(0,p.q1)([],g),validateProtocol:b=>{try{let c=(0,p.lH)(b,{variants:[],sourceDictionary:d,requiredSourceDictionaryIndices:g});return w(a.project,c,{sourceDictionary:d,facts:[],variants:[]}),[]}catch(a){return[a instanceof Error?a.message:String(a)]}}},k);if(!l)continue;let m=(0,p.lH)(l,{variants:[],sourceDictionary:d,requiredSourceDictionaryIndices:g});w(a.project,m,{sourceDictionary:d,facts:[],variants:[]}),f[b]={sourceDictionaryIds:d.map(a=>(0,j.vg)(a)),receipt:m,taskIds:[...c.taskIds]}}catch(b){if(a.signal?.aborted)throw b}}})),f.filter(Boolean).flatMap(a=>a.taskIds.map(b=>({taskId:b,sourceDictionaryIds:a.sourceDictionaryIds,receipt:a.receipt})))}function B(a){let{quantityPackageIndices:b,crewId:c,crewProfile:d,...e}=a;return e}function C(a,b,c){let d,e=z(a,b.sections.length),f=function(a){let b=a&&"object"==typeof a?a.crewProfiles:void 0;if(!Array.isArray(b))throw Error("全工程拓扑缺少crewProfiles完整单班人员编制;不能只登记班组编号再由各阶段换人");let c=new Map;for(let a of b){if(!a||"object"!=typeof a||Object.keys(a).some(a=>!["crewId","workers","basis"].includes(a))||"string"!=typeof a.crewId||!a.crewId.trim()||c.has(a.crewId)||"string"!=typeof a.basis||!a.basis.trim()||!Array.isArray(a.workers)||a.workers.some(a=>!a||"object"!=typeof a||Object.keys(a).some(a=>!["trade","countPerCrew"].includes(a))||"string"!=typeof a.trade||!a.trade.trim()||!Number.isSafeInteger(a.countPerCrew)||0>=Number(a.countPerCrew))||new Set(a.workers.map(a=>a.trade)).size!==a.workers.length)throw Error("crewProfiles须逐组给出唯一crewId、完整工种及正整数countPerCrew和实际拟定编制依据;不能重复工种或用活动编号冒充人员编制");c.set(a.crewId,structuredClone(a))}return c}(a),h=a.activities;if(!Array.isArray(h)||h.some(a=>!a||"object"!=typeof a||Reflect.ownKeys(a).some(a=>!["id","phaseId","objectScope","workfront","taskIndices","predecessors","quantityPackageIndices","crewId"].includes(String(a)))))throw Error("施工拓扑只允许完整活动身份、对象、工作面、任务、依赖、原清单包路由和全工程班组身份;生产输入在分阶段详情填写");let i=[],j=(c.workPackages??[]).length;for(let[a,b]of h.entries())null===b.crewId||"string"==typeof b.crewId&&b.crewId.trim()?null===b.crewId||f.has(b.crewId)||i.push(`activities[${a}](${b.id}).crewId=${JSON.stringify(b.crewId)}没有真实crewProfiles人员编制`):i.push(`activities[${a}](${b.id}).crewId:必须显式给出全工程稳定crewId;无需人员投入的实际等待活动才能填null`);let k=new Set(h.flatMap(a=>null===a.crewId?[]:[a.crewId])),l=[...f.keys()].filter(a=>!k.has(a));for(let[a,b]of(l.length&&i.push(`crewProfiles含未分配实际施工活动的虚增班组[${l.join(",")}],须明确真实用途或删除对应未用编制;不能删除已有活动来绕过核验`),h.entries()))(!Array.isArray(b.quantityPackageIndices)||new Set(b.quantityPackageIndices).size!==b.quantityPackageIndices.length||b.quantityPackageIndices.some(a=>!Number.isSafeInteger(a)||0>Number(a)||Number(a)>=j))&&i.push(`activities[${a}](${b.id}).quantityPackageIndices:必须显式选择无重复的真实原清单包索引[0,${j-1}];无工程量明确填[],不以管理任务的宽泛职责替代施工对象来源范围`);let m=new Set(h.flatMap(a=>Array.isArray(a.quantityPackageIndices)?a.quantityPackageIndices:[])),n=(c.workPackages??[]).flatMap((a,b)=>a.members?.length&&!m.has(b)?[b]:[]);n.length&&i.push(`施工拓扑漏路由原清单包${n.join(",")};全部真实成员必须保留归属,按原清单包实际对象补充对应活动路由,不授予安装或合量用途`);try{d=(0,g.SZ)(h.map(a=>({...B(a),quantity:null,production:null,duration:null,waits:[]})),e.map(a=>a.id),b.sections.length)}catch(a){i.push(a instanceof Error?a.message:String(a))}if(d)for(let[a,b]of d.entries()){let c=e.find(a=>a.id===b.phaseId),d=b.taskIndices.filter(a=>!c.taskIndices.includes(a));d.length&&i.push(`activities[${a}](${b.id}).taskIndices=[${b.taskIndices.join(",")}]不属于已声明阶段${c.id}(${c.scope});越域任务[${d.join(",")}];phases[${e.indexOf(c)}].taskIndices=[${c.taskIndices.join(",")}]。按实际施工对象和作者职责决定修正活动的phaseId/taskIndices或阶段委派;不能删去实际方法、资源、质量安全及交接职责来通过校验`)}let o=new Set,p=new Set,q=a=>{if(o.has(a))throw Error(`施工活动依赖成环:${[...o,a].join("→")},不能进入分阶段生产核定`);if(!p.has(a)){for(let b of(o.add(a),d.find(b=>b.id===a).predecessors))q(b.activityId);o.delete(a),p.add(a)}};if(d)try{d.forEach(a=>q(a.id))}catch(a){i.push(a instanceof Error?a.message:String(a))}if(i.length)throw Error(i.join(";"));if(!d)throw Error("施工拓扑活动尚未完成同源校验");return d.map(({id:a,phaseId:b,objectScope:c,workfront:d,taskIndices:e,predecessors:g},i)=>({id:a,phaseId:b,objectScope:c,workfront:d,taskIndices:e,predecessors:g,quantityPackageIndices:[...h[i].quantityPackageIndices],crewId:h[i].crewId,crewProfile:null===h[i].crewId?null:f.get(h[i].crewId)}))}function D(a,b,c,d,e,f){let h;if(!a||"object"!=typeof a||Reflect.ownKeys(a).some(a=>"activities"!==a)||!Array.isArray(a.activities))throw Error("阶段生产详情仅返回activities");let i=a.activities,j=[];if(i.length!==c.length||new Set(i.map(a=>a?.activityIndex)).size!==c.length||i.some(a=>!a||!c.includes(Number(a.activityIndex))||!Number.isSafeInteger(a.activityIndex)))throw Error(`阶段详情含重复、缺失或越域活动;activityIndex必须恰好为[${c.join(",")}]各一次`);for(let a of i){let b=Reflect.ownKeys(a).filter(a=>!["activityIndex","quantity","production","duration","waits"].includes(String(a)));b.length&&j.push(`activityIndex=${a.activityIndex}含禁止字段[${b.join(",")}]:仅填写activityIndex/quantity/production/duration/waits;id/phaseId/objectScope/workfront/taskIndices/predecessors由冻结拓扑提供,不复制或改写`)}let k=new Map(i.map(({activityIndex:a,...b})=>[Number(a),b])),l=b.map((a,b)=>({...B(a),...k.get(b)??{quantity:null,production:null,duration:null,waits:[]}})),m=(0,g.BI)(f),n=[...j];try{h=(0,g.SZ)(l,d.map(a=>a.id),e.sections.length)}catch(a){n.push(a instanceof Error?a.message:String(a))}for(let a of c){let c=l[a],d=c.quantity,e=b[a].crewId;if(c.production&&c.production.crewId!==e&&n.push(`activityIndex=${a}(${c.id}).production.crewId:必须使用冻结全工程班组${JSON.stringify(e)},不能改名为${JSON.stringify(c.production.crewId)}规避同期占用校核;需要真实增配由全工程冲突修正说明依据`),c.production||null===e||n.push(`activityIndex=${a}(${c.id}).production:冻结班组${JSON.stringify(e)}缺少实际人员和机具安排`),c.production&&Array.isArray(c.production.workers)&&b[a].crewProfile){let d=a=>JSON.stringify([...a].sort((a,b)=>a.trade.localeCompare(b.trade)));c.production.workers.every(a=>a&&"string"==typeof a.trade)&&d(c.production.workers)!==d(b[a].crewProfile.workers)&&n.push(`activityIndex=${a}(${c.id}).production.workers:必须保持班组${e}的完整单班编制${JSON.stringify(b[a].crewProfile.workers)};不同工种或人数不得挂在同一身份下,局部阶段不能换人或扩编`)}if(d&&"object"==typeof d&&Array.isArray(d.memberIndices)&&d.memberIndices.every(a=>Number.isSafeInteger(a)&&a>=0)&&"string"==typeof d.unit)try{n.push(...(0,g.NH)(c,m).map(b=>`activityIndex=${a}(${c.id}).quantity:${b}`))}catch(b){n.push(`activityIndex=${a}(${c.id}).quantity:${b instanceof Error?b.message:String(b)}`)}}if(n.length)throw Error(n.join(";"));if(!h)throw Error("阶段输入尚未完成同源校验");for(let a of c){let c=new Set(b[a].quantityPackageIndices.flatMap(a=>f.workPackages?.[a].members?.map(a=>a.id)??[]));if(h[a].quantity?.memberIndices.some(a=>!c.has(m[a]?.memberId)))throw Error(`活动${a}引用所属冻结清单包之外的原来源索引;不能借其他阶段数量或猜测序号`)}return(0,g.yP)({contract:e,project:f,phaseIds:d.map(a=>a.id),activities:h}),c.map(a=>h[a])}async function E(a){let b,c,{contract:d,project:m}=a;if(x(m),d.projectSnapshotId!==m.snapshotId)throw Error("共享施工计划与项目合同不一致");let n=[...new Map(d.sections.flatMap(a=>(0,i.tb)(m,a)).filter(k.j).map(a=>[(0,j.vg)(a),a])).values()],o=d.sections.map((a,b)=>({taskIndex:b,title:a.title,responsibility:a.responsibility})),p=[(0,l.V2)(d.writingKnowledge?.projectType),"先形成全体作者共用的完整施工阶段与活动依赖网络;本次只写专业拓扑,资源、产率、数量和时长在冻结拓扑之后按阶段独立填写,不在一个巨型JSON里同时输出。不得漏工作范围或为缩短响应合并不同对象和工况。","tasks是投标文件作者的成文职责,只用于映射实际工程活动,不是施工任务清单。工程概况、编制依据、章节编审、重难点分析等成文工作不能列为施工活动,不能据此占用合同施工工期或配置施工人材机。相关作者任务通过真实施工对象、现场准备、管理检查和移交活动承接,不为凑齐taskIndices新造章节活动。确需施工方案审批、测量放线、临设施工或现场交底时,写出实际工作对象、作业动作及放行结果;安全质量资源管理按其真实实施阶段承接,不全放在开工前编写管理文件。","阶段按真实对象、工作面和移交条件安排,不套固定五阶段。不同计量单位、不同工法、不同工作面或不能共用产率的设备必须分别建立活动,不能把AP、RCU、机柜、UPS等混成一个计件活动,也不能把室内强电保护管与室外外接电缆混合归量。方法和接口是当前工程决定,不能猜设计参数或用按图、后续审批代替。实际楼层、区段与阶段名称可正常表述;数值引用仍须对应真实来源,工程生产输入单独结构化登记,拓扑文本不授予数值事实或采用资格。",'只返回{"crewProfiles":[{crewId,workers:[{trade,countPerCrew}],basis:"实际拟定编制依据"}],"phases":[{id,scope,method,predecessors:[],releaseCondition,interfaces:[],taskIndices:[]}],"activities":[{id,phaseId,objectScope,workfront,crewId:"全工程实际拟定班组身份"或null,taskIndices:[],quantityPackageIndices:[原清单包packageIndex],predecessors:[{activityId,relation:"finish-start"或"start-start",lagDays:0}]}]}。本次activities不含quantity/production/duration/waits。活动ID、全工程班组完整单班编制和跨阶段依赖一次确定,后续阶段不得各自重命名活动或换一批工种人数。真实等待仅以明确有依据的依赖lagDays登记,不编未知等待数。',"crewProfiles先以实际工法及岗位分工拟定完整单班编制,不要求资料预先规定施工方人数;数量、产率、班组数和轮班安排再在阶段详情及全工程计算中校核。项目管理班子、测量班组、临设作业及安全防护搭设班组是不同实际人员编制,分别登记,不能以“综合准备组”编号把完全不同人员先后换入。班组复用时所有工种与countPerCrew保持同一编制;只调配部分人员或确需扩编须在全工程组织修正中明确实际人员来源及所有相关活动,不能悄悄在局部换人。","crewId表示实际拟配置的同一组人员,不是活动序号、章节序号或工种名称。同一班组跨活动、跨阶段及跨工作面复用时保持相同crewId并安排真实转场与先后;确需并行的不同班组使用不同身份,不能默认每个活动另加一组人员。项目管理班子跨质量、安全、进度等管理职责复用,不为每项管理计划各造一名项目经理或技术负责人。无需人员投入的实际等待才用crewId=null;拟定班组数量及工效在阶段详情填写,全工程计算再核对同期资源与工期。","quantityPackageIndices按活动的实际施工对象从workPackageDirectory选择;组织、准备和交接活动无需工程量时明确为空数组。每个非空原清单包至少归属一个实际活动;采购、计价、措施条目按真实用途路由,不授予安装或合量许可。阶段详情仅提供所属活动路由包的完整成员,不按管理章节的宽泛职责装入全工程清单。","逐活动核对phaseId对应阶段的taskIndices:活动内每个作者任务索引都必须已在该阶段登记。管理、安全、质量及资源职责按实际活动承接;活动确需这些职责时先核定该阶段委派,不能活动引用而阶段遗漏,也不能为了满足索引关系删掉实际职责或把桩基活动塞入土方阶段。返回前同时检查未使用班组、全部清单包路由、阶段与活动任务子集及无环依赖;校验会一次列出所有可核错误及具体路径,纠错只修改这些错误及其必要关联,正确活动与来源路由原样保留。施工依赖不代表作者串行写作。",JSON.stringify({tasks:o,projectConstraints:n,workPackageDirectory:(m.workPackages??[]).map((a,b)=>({packageIndex:b,name:a.name,memberCount:a.members?.length??0,objects:[...new Map((a.members??[]).map(({entry:a})=>[JSON.stringify([a.name,a.section,a.subsection,a.unit]),{name:a.name,scope:a.section,part:a.subsection,unit:a.unit}])).values()]}))})].join("\n\n"),q=Date.now(),t=[],u=a.signal,v=[],w=new Map,y="同一工程组织与生产网络已形成;拟定工况及实际正文待专业评价";a.onReceipt?.("shared-construction-start",{startedAt:q,inputHash:s(p),protocol:"topology-then-phase-details"});let E=0,F=new Set,G=a.planner?async(b,c)=>{let d=Promise.resolve().then(()=>a.planner(b,c));F.add(d),d.then(()=>F.delete(d),()=>F.delete(d));let e=await d;return"string"==typeof e?e:void 0===e?void 0:JSON.stringify(e)}:void 0,H=async(b,c,d,f,g)=>{let h=s({protocol:"native-engineering-request-v1",stage:b,system:c,prompt:d,taskKind:"reasoning",temperature:0,sourceIdentity:s(m.sourceVersionPolicy.sources)});try{let c=a.responseCache?.load(h);if(c){let d=[...(0,e.Jx)(c.response,f),...g(structuredClone(c.response))];if(!d.length)return a.onReceipt?.(`shared-construction-${b}-cache-hit`,{requestKey:h,...c.receipt,raw:c.response}),structuredClone(c.response);a.onReceipt?.(`shared-construction-${b}-cache-rejected`,{requestKey:h,errors:d})}}catch(c){if(a.signal?.aborted)throw c;a.onReceipt?.(`shared-construction-${b}-cache-rejected`,{requestKey:h,errors:[c instanceof Error?c.message:String(c)]})}let i={},j=await (0,e.v7)(c,d,{diagnostics:a.diagnostics,signal:u,callKind:"planning-review",taskKind:"reasoning",temperature:0,schema:f,outFailure:i,validateProtocol:g,onAttempt:c=>{E+=1,a.onReceipt?.(`shared-construction-${b}-attempt-${c.ordinal}`,c)}},G);if(!j)throw Error(`${b}完整尝试及协议失败:${i.value??"未收到可用响应"}`);return a.responseCache?.save(h,j),j};try{let i=await H("topology","你是施工组织设计主智能体,先固定完整施工活动与接口拓扑。",p,{type:"object",required:["crewProfiles","phases","activities"],additionalProperties:!1,properties:{crewProfiles:{type:"array",items:{type:"object"}},phases:{type:"array",items:{type:"object"}},activities:{type:"array",items:{type:"object"}}}},a=>{try{return C(a,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}}),j=C(i,d,m);t=z(i,d.sections.length),v=j,a.onReceipt?.("shared-construction-topology",{raw:i});let k=(0,g.i)(m),l=t.map(a=>({phase:a,indices:j.flatMap((b,c)=>b.phaseId===a.id?[c]:[])})).filter(a=>a.indices.length),q=Array(l.length),r=0,s=new AbortController;u=AbortSignal.any(a.signal?[a.signal,s.signal]:[s.signal]);let x=await Promise.allSettled(Array.from({length:Math.min(l.length,(0,e.jW)(),2)},async()=>{try{for(;r<l.length;){u?.throwIfAborted();let b=r++,c=l[b],e=new Set(c.indices.flatMap(a=>j[a].quantityPackageIndices).flatMap(a=>m.workPackages?.[a].members?.map(a=>a.id)??[])),f=function(a){let b=[],c=new Map,d=new Map;for(let e of a){let a=c.get(e.description);void 0===a&&(a=b.length,c.set(e.description,a),b.push(e.description));let f=JSON.stringify([e.sourceFile,e.section,e.subsection]),g=d.get(f)??{sourceFile:e.sourceFile,section:e.section,subsection:e.subsection,rows:[]};g.rows.push([e.index,e.name,a,e.quantity,e.unit]),d.set(f,g)}return{quantityRole:"original-source-quantity-not-installation-permission",columns:["index","name","descriptionIndex","quantity","unit"],descriptions:b,groups:[...d.values()]}}(k.filter(a=>e.has(a.memberId))),g=["只为本阶段已有活动填写实际工程量用途、拟定产率/班组/设备、必要等待或非生产性活动时长。活动身份、对象、工作面、委派任务和依赖由主控已冻结;不得复制或改变它们,不新造活动。","production.crewId必须逐活动使用拓扑提供的全工程crewId,同一实际班组不得因活动或阶段不同换名。同一管理班子不能在并行活动中重复配置;需要多人分工须说明真实拟配置人员与组织依据,不把文档编审当施工或为每章各加项目经理。全工程计算会校核资源重叠;确需增配通过后续全工程冲突修正明确依据,不在局部阶段逃避校核。","production.workers必须完整保留crewProfiles对应班组的工种与countPerCrew,不在本阶段换人、删人、增人或另起工种名称;同一编制的班组数量、班次、产率和机具按实际工况拟定。无受控作业量、按组织时长控制的准备活动,不为填表补“常规台班产能”;没有实际工况推导或确切依据的机械capacityPerMachineShift及unit明确为null。","每项必须明确包含activityIndex、quantity、production、duration、waits这五个字段,不含其他字段。waits始终是数组,没有等待填[],不能填null。按工作量与班产率计算的活动令duration=null;措施/采购/计价数量只保留在原清单来源,组织活动令quantity=null、productivityPerCrewShift=null、production.unit=null,duration采用实际组织依据。不能用0.05项/班等假产率换算“项/包干”措施量。",'只返回{"activities":[{activityIndex,quantity:null或{memberIndices:[原来源index],use:"workload"|"installation"|"procurement"|"pricing"|"measure",unit,reason},production:null或{crewId,crews,productivityPerCrewShift:null或每班组每班产率,unit:null或作业量单位,shiftsPerDay,hoursPerShift,workers:[{trade,countPerCrew}],equipment:[{resourceId,name,spec,countPerCrew,capacityPerMachineShift:null或数值,unit:null或容量的计量单位,basis}],basis},duration:null或{days,basis},waits:[{kind:"approval"|"delivery"|"curing"|"testing"|"handover"|"calendar",days,basis}]}]}。duration.days及等待days均为连续组织的日历日;资料写工作日时须有真实作业日历换算依据,不把工作日直接当日历日。shiftsPerDay表示每日不同人员轮班数,countPerCrew为单班单组人数,不安排同一人员连续承担多个完整班;机械可跨班复用。本阶段activityIndex恰好各返回一次;目录序号不因选源或分阶段重排。',"不同对象、部位、单位或数量用途不得合量。相同作业对象、部位和计量单位的不同规格,只有采用相同施工方法与产率且reason逐项说明工况可比时,才能为工作量计算归组;逐源规格始终保留,不能据此统一设计或采购规格。安装量、采购消耗量、计价量及施工工作量分开;不能把计价小数取整为安装台套。产率、班组、班次、工种与机械须是有工况依据的明确拟定选择,basis说明依据和条件。设计未知保留null,不能填默认定额或平摊人数;施工方拟定班组与产率不需要资料预先给出,应依据实际工法、作业面、搬运距离和设备能力做出明确且可复核的配置选择,不能把可策划的输入全部留null;明确由时长控制的准备、协调、验收活动用duration及依据,仍应在production中保留实际拟配置人员和机具。辅助/检测仪器未声明生产能力时capacityPerMachineShift和unit可以为null;不得为通过协议给仪器虚构产能单位。production.unit是作业量单位(如m3),不重复附加“/班”;每班语义已由productivityPerCrewShift表达。可核施工工作量和安装作业量可按同单位产率计算时长。相同来源、工程对象和部位中不同构件名称不自动禁止同工法作业归量,reason说明共同工法、产率及工况,并保留各源规格;采购/计价/措施数量不得直接转为安装工作量。use=measure只表示措施计量,不表示试验检测;试压、闭水、冲洗等已明确试验长度的实际作业,用use=workload并说明试验工作量性质,不能写成安装总数。不同计量单位必须分活动,台/套/个不能擅自统一成个。明确由组织时长控制的临设搭建、测量准备、协调和验收可同时拟定班组/设备,productivityPerCrewShift与unit为null,duration说明实际组织依据。以产率计算的生产活动不同时填duration,不反摊合同天数或调整产率凑工期。",JSON.stringify({projectConstraints:n,dependencyDirectory:j.map((a,b)=>({activityIndex:b,id:a.id,phaseId:a.phaseId,objectScope:a.objectScope}))}),"quantitySources是无损清单表:groups保留原文件和工程/分部,rows按columns解释;descriptionIndex只查descriptions中的完整原字。memberIndices必须取行内index(全工程原来源序号),不是数组位置、组序号或descriptionIndex。相同描述仅共享文字,不合并任何条目或数量。",JSON.stringify({quantitySources:f}),JSON.stringify({phase:c.phase,tasks:o.filter(a=>c.phase.taskIndices.includes(a.taskIndex)),crewProfiles:[...new Map(c.indices.flatMap(a=>j[a].crewProfile?[[j[a].crewId,j[a].crewProfile]]:[])).values()],activities:c.indices.map(a=>{let{crewProfile:b,...c}=j[a];return{activityIndex:a,...c}})})].join("\n\n"),h={type:"object",required:["activities"],additionalProperties:!1,properties:{activities:{type:"array",minItems:c.indices.length,maxItems:c.indices.length,items:{type:"object"}}}},i=await H(`details-${b}`,"你是施工组织设计主智能体,为已经固定的本阶段活动核定有依据的生产输入。",g,h,a=>{try{return D(a,j,c.indices,t,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}});for(let a of(q[b]=D(i,j,c.indices,t,d,m),q[b]))w.set(a.id,a);a.onReceipt?.(`shared-construction-details-${b}`,{phaseId:c.phase.id,raw:i})}}catch(a){throw s.abort(a),a}}));await Promise.allSettled([...F]),u=a.signal;let y=x.find(a=>"rejected"===a.status);if(y?.status==="rejected")throw y.reason;b=j.map((a,b)=>q.flat().find(b=>b.id===a.id)??(()=>{throw Error(`共同生产计划缺少活动${b}的实际输入`)})());let A={phases:t,activities:b},B=function(a,b,c){let d,e,f=[];try{d=z(a,b.sections.length)}catch(a){f.push(a instanceof Error?a.message:String(a))}if(!d)return f;try{e=(0,g.SZ)(a.activities,d.map(a=>a.id),b.sections.length)}catch(a){f.push(a instanceof Error?a.message:String(a))}if(!e)return f;let h=e.filter(a=>a.taskIndices.some(b=>!d.find(b=>b.id===a.phaseId).taskIndices.includes(b)));if(h.length)return f.push(`活动任务不属于该实际阶段委派:活动「${h.map(a=>a.id).join("、")}」的 taskIndices 必须取自其 phaseId 对应阶段的 taskIndices,不得引用其他阶段或未委派任务`),f;try{(0,g.yP)({contract:b,project:c,phaseIds:d.map(a=>a.id),activities:e})}catch(a){f.push(`生产计划不成立:${a instanceof Error?a.message:String(a)}`)}return f}(A,d,m);if(B.length)throw Error(B.join(";"));if(a.onReceipt?.("shared-construction-candidate",{raw:A}),(c=(0,g.yP)({contract:d,project:m,phaseIds:t.map(a=>a.id),activities:b})).inputs.length&&c.issues.length){var I;let e=c;a.onReceipt?.("shared-construction-calculated-conflicts",{planId:e.id,calendar:e.calendar,issues:e.issues});let g=(I=t,["当前共同工程候选在同源计算中存在真实冲突。作者尚未启动。只修正所需的组织输入,重新计算无冲突且符合合同工期后才冻结。",'返回{"changes":[{activityIndex,reason,production?:完整原结构,duration?:完整原结构或null,waits?:完整原结构数组,predecessors?:完整原结构数组}]}。省略字段保持原值;填写字段须给完整内容。不得改活动ID、对象、工作面、任务、原数量或来源序号,不删除活动,不复制全工程计划。每项reason明确调整前后和实际工况/交接依据。',"同一crewId表示同一组实际人员,同期不得重复占用。不能仅换ID掩盖同一班组冲突;独立班组必须有可同时展开的实际作业面及完整人员/机具配置和调配依据。减少班组时相应调整真实活动关系;增加班组必须核实现场可用作业面、供料与机械能力。不得改产率凑工期,不取消养护/试验/验收等必要等待。","predecessors可在冻结前按真实分区移交或分段流水修正,但reason必须说明后序启动的具体放行条件及其与前序开始/完成的关系;不能仅将finish-start改成start-start或编lagDays来压缩工期。缺少可核移交依据时保留完整先后关系,通过明确资源安排调整。当前工法、对象及源数量保持不变。","所有计算使用真实数量、明确拟定产率/设备能力和完整依赖。数值与日历边界在candidate中可核;calendar.totalDays是合同约束,不是反摊各阶段的分配数。只调整确有问题的活动,其余有效输入复用;既有未知来源不得改为已知。",(0,f.D)({phases:I,candidate:{calendar:e.calendar,activities:e.activities.map((a,b)=>({activityIndex:b,...a.input,quantityValue:a.quantity,workDays:a.workDays,durationDays:a.durationDays,timeWindow:a.timeWindow,workTimeWindow:a.workTimeWindow,critical:a.critical,reasons:a.reasons})),issues:e.issues}})].join("\n\n")),i=await H("reconciliation","你是施工组织设计主智能体,依据实际计算冲突修正同一候选的组织安排,完整验证后才委派作者。",g,{type:"object",required:["changes"],additionalProperties:!1,properties:{changes:{type:"array",minItems:1,items:{type:"object"}}}},a=>{try{return h(a,e,t,d,m),[]}catch(a){return[a instanceof Error?a.message:String(a)]}});for(let a of b=(c=h(i,e,t,d,m)).inputs)w.set(a.id,a);a.onReceipt?.("shared-construction-reconciliation",{originalPlanId:e.id,raw:i,planId:c.id,calendar:c.calendar,issues:c.issues})}}catch(e){if(a.signal?.aborted)throw e;b=v.map(a=>w.get(a.id)??{...B(a),quantity:null,production:null,duration:null,waits:[]}),c=(0,g.yP)({contract:d,project:m,phaseIds:t.map(a=>a.id),activities:b}),y=`共同工程计划仍有未核事项:${e instanceof Error?e.message:String(e)};已保留${w.size}/${v.length}项实际生产输入;未测活动不授予完成时间、全工程峰值或工期可行性`}let J=d.sections.map((a,b)=>{let c=t.filter(a=>a.taskIndices.includes(b));return{taskId:a.id,status:c.length?"planned":"unmeasured",phaseIds:c.map(a=>a.id),objectScope:a.responsibility,approach:c.map(a=>a.method).join(";"),handoffs:[...new Set(c.flatMap(a=>a.interfaces))],boundary:a.responsibility}}),K=a.sourcePurposeReviewer||void 0===a.planner?await A({contract:d,project:m,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.sourcePurposeReviewer}):[],L={version:r,contractId:d.id,projectSnapshotId:m.snapshotId,phases:t,tasks:J,production:c,taskSourceReviews:K,review:{status:"unmeasured",reason:y}},M={...L,id:s(L)};return a.onReceipt?.("shared-construction-end",{startedAt:q,elapsedMs:Date.now()-q,attempts:E,status:t.length?"planned":"unmeasured",taskSourceReviewCount:K.length,reason:y,planId:M.id}),M}function F(a,b,c){x(c);let{id:d,...e}=a;if(a.version!==r||s(e)!==d||a.contractId!==b.id||a.projectSnapshotId!==c.snapshotId)throw Error("共同施工组织骨架与当前冻结项目或合同身份不一致");let f=b.sections.map(a=>a.id);if(a.tasks.length!==f.length||new Set(a.tasks.map(a=>a.taskId)).size!==f.length||a.tasks.some(a=>!f.includes(a.taskId)||!["planned","unmeasured"].includes(a.status??"")))throw Error("共同施工组织骨架的任务集合缺项、重复或状态无效");if(a.phases.length&&z({phases:a.phases},b.sections.length),(0,g.SZ)(a.production.inputs,a.phases.map(a=>a.id),b.sections.length),s(a.production.phaseIds)!==s(a.phases.map(a=>a.id))||a.production.inputs.some(b=>b.taskIndices.some(c=>!a.phases.find(a=>a.id===b.phaseId).taskIndices.includes(c))))throw Error("生产网络与实际阶段及任务委派不一致");if((0,g.Q4)(a.production,b,c),"unmeasured"!==a.review.status||!a.review.reason.trim())throw Error("组织候选不能冒充已完成的专业工程复核");let h=["id","version","contractId","projectSnapshotId","phases","tasks","production","taskSourceReviews","review"],i=["taskId","status","phaseIds","objectScope","approach","handoffs","boundary"];if(Reflect.ownKeys(a).some(a=>!h.includes(String(a)))||a.tasks.some(a=>Reflect.ownKeys(a).some(a=>!i.includes(String(a)))))throw Error("组织骨架不能携带旧字段或未经实际工程核定的采用许可");if(!Array.isArray(a.taskSourceReviews))throw Error("共享计划缺少每任务来源用途核定集合");let k=new Set;for(let b of a.taskSourceReviews){if(!b||Reflect.ownKeys(b).some(a=>!["taskId","sourceDictionaryIds","receipt"].includes(String(a)))||k.has(b.taskId)||!f.includes(b.taskId)||!Array.isArray(b.sourceDictionaryIds)||!b.sourceDictionaryIds.length||new Set(b.sourceDictionaryIds).size!==b.sourceDictionaryIds.length)throw Error("任务来源用途核定缺项、重复或身份无效");k.add(b.taskId);let a=b.sourceDictionaryIds.map(a=>[...c.sourceControls??[],...c.facts].find(b=>(0,j.vg)(b)===a));if(a.some(a=>!a))throw Error("任务来源用途核定缺少当前冻结原文");(0,p.lH)(b.receipt,{variants:[],sourceDictionary:a,requiredSourceDictionaryIndices:a.map((a,b)=>b)})}for(let[c,d]of a.tasks.entries()){let e=a.phases.filter(a=>a.taskIndices.includes(c));if(d.taskId!==f[c]||s(d.phaseIds)!==s(e.map(a=>a.id))||d.status!==(e.length?"planned":"unmeasured")||d.approach!==e.map(a=>a.method).join(";")||s(d.handoffs)!==s([...new Set(e.flatMap(a=>a.interfaces))])||d.objectScope!==b.sections[c].responsibility||d.boundary!==b.sections[c].responsibility)throw Error("共享组织委派与实际阶段及冻结任务职责不一致")}}function G(a){if(a.production.issues.length)throw Error(`共同工程计划未通过写前计算校验,暂停作者调度。仍有${a.production.issues.length}项工程输入、班组、资源或工期问题;${a.review.reason}。完整候选及逐项计算回执已保留,须由主控修正后重新核验。`)}function H(a,b,c){x(b);let{id:d,...e}=a;if(a.version!==r||s(e)!==d||a.projectSnapshotId!==b.snapshotId)throw Error("作者权限底座与当前组织骨架/项目身份不同");if(!a.tasks.some(a=>a.taskId===c))throw Error("作者权限底座没有当前任务");let f=a.taskSourceReviews.find(a=>a.taskId===c);if(!f)return{planId:a.id,taskId:c,sourceCases:[],controls:[]};let g=f.sourceDictionaryIds.map(a=>[...b.sourceControls??[],...b.facts].find(b=>(0,j.vg)(b)===a));if(g.some(a=>!a))throw Error("来源用途核定缺少当前冻结原文");let h=(0,p.lH)(f.receipt,{variants:[],sourceDictionary:g,requiredSourceDictionaryIndices:g.map((a,b)=>b)}).sourceCases.map(a=>{let c=g[a.sourceDictionaryIndex],d=b.sources[c.sourceFile]?.sha256;if(!d)throw Error("来源用途核定引用了未冻结来源文件");return{...a,sourceId:(0,j.vg)(c),sourceFile:c.sourceFile,sourceFingerprint:d,chunkIndex:c.sourceRef?.chunkIndex}});return{planId:a.id,taskId:c,sourceCases:h,controls:[]}}},27284:(a,b,c)=>{function d(a){let b=new Map,c=a=>{"string"==typeof a&&a.length>=40?b.set(a,(b.get(a)??0)+1):Array.isArray(a)?a.forEach(c):a&&"object"==typeof a&&Object.values(a).forEach(c)},d=JSON.parse(JSON.stringify(a));if(d&&"object"==typeof d&&!Array.isArray(d))for(let[a,b]of Object.entries(d))["scope","task","interfaces"].includes(a)||c(b);else c(d);let e=[...b].filter(([,a])=>a>1).map(([a])=>a),f=new Map(e.map((a,b)=>[a,b])),g=a=>{if("string"==typeof a&&f.has(a))return{$text:f.get(a)};if(Array.isArray(a)){if(a.length>1&&a.every(a=>a&&"object"==typeof a&&!Array.isArray(a))){let b=new Map,c=a.map(a=>g(a));a.forEach((a,d)=>{let e=Object.keys(a).sort(),f=JSON.stringify(e),g=b.get(f)??{columns:e,positions:[],rows:[]};g.positions.push(d),g.rows.push(e.map(a=>c[d][a])),b.set(f,g)});let d={$records:{length:a.length,groups:[...b.values()].map(a=>1===b.size?{columns:a.columns,rows:a.rows}:a)}};return JSON.stringify(d).length<JSON.stringify(c).length?d:c}return a.map(g)}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,g(b)])):a};return JSON.stringify({format:"lossless-record-tables-v1",meaning:"$records是完整记录数组:每行按columns逐列解释;多组按positions恢复原数组顺序,单组按行序。字段缺失与null保持区别。$text只引用texts中的完整原字。所有index保持原全局序号,不是表行位置;表和字典不合量、不裁字、不改变采用资格。",data:g(d),texts:e})}c.d(b,{D:()=>d,x:()=>e});let e="【全体子作者共用的主控组织部署与本任务委派】"},27939:(a,b,c)=>{c.d(b,{G0:()=>h,HU:()=>f,RM:()=>i,lY:()=>e,n5:()=>g,yD:()=>d});let d="content-first-technical-bid-v1",e=["写成可据以组织施工的技术方案:明确工程对象和部位、施工前提、工序、接口、控制值、岗位、验收与异常处理;定性管理无需凑参数。","正文直接陈述已经核定的技术条件和措施,不写“按设计图例”“图纸要求”“对照清单”,不说明某个工程或工法来自哪个图纸;规范名称与适用版本可在编制依据中正常列明。出处、原句和推导保存在引用审计中。","不得用“以经审批的专项施工方案及设计文件为准,本节不另行设定”等话把本节技术决定推给后续。审批程序可以写,但必须同时说明当前方案的实际方法、参数和控制要求。","直接用于施工的尺寸、标高、深度、规格和配置须按明确对象与部位给出已核定值;不使用“约”“左右”或笼统范围代替控制值。不同部位确有不同值时逐部位说明,不能取范围端点、平均数或统一最大值冒充所有部位的值。","分层厚度、坑底高程、支护桩长与基坑总深度是不同属性。存在多种设计工况时说明适用工况,偏差允许值与合理施工条件区间也须明确用途,不能混成工程实体的未决范围。","有完整依据才能作技术判断。资料冲突或对象关系尚未解决时,在写作前向主智能体提出具体问题,保留内部未决项;不把“待核定”“以文件为准”塞进成稿,也不编造确定值。","每段提供新的工程信息、必要理由或执行动作。删去重复承诺、空泛口号、泛化制度和无实际作用的过渡语,避免各任务重复工程概况;不得为凑字数增加内容。","项目针对性由本节适用的部位、作业条件、工序接口、资源安排、风险和验收关系体现,不以标题新奇或同义改写体现。行业专业标题、术语、工艺的固定名称与同一项目已核定事实可以稳定复用;不得为避开历史文档而改名、删职责、换正确参数或重新编造方案。","每轮依据当前合格资料、已确认方案和冻结职责独立成稿。表达调整须保持对象、条件、因果顺序、控制值和责任接口不变;必要事实或接口承接的重复不是套话,只有不增加有效信息的重复叙述才需要在其实际作用域内处理。","正文不生成封面,封面不属于专业内容评审评分项;目录由系统按实际正文标题统一生成,作者无需编写目录或虚构页码。","本轮以专业内容验收,页数仅用于排版参考,后续投标由人工二次排版;不能为压到50页删去必需技术信息。"],f="本节形成精简、实际、有效且可执行的专业技术方案,工程对象、工况、方法、控制值与职责明确;无重复套话、空话或泛化说明,不以资料出处或未来审批替代当前技术决定。工程实体参数按具体部位核定,笼统约数或范围不能替代施工控制值;不同部位的真实差异与允许偏差应明确其适用条件和用途。项目针对性按本节真实对象、条件及其实施关系判断;标准术语、专业标题和必要事实承接可稳定复用,不以跨文档词面相似度或表述新奇程度判分。";function g(a){let b=[/按设计图例/gu,/(?:按|遵照|依据)?图纸要求/gu,/对照清单/gu,/按(?:照)?(?:施工)?图(?:纸)?(?:要求|施工|实施|设置)?/gu,/(?:以|依据|参照|详见)[^。;\n]{0,60}(?:图|图集|设计文件|专项(?:施工)?方案)[^。;\n]{0,25}(?:为准|执行|实施|施工)/gu,/(?:按|依据|参照)[^。;\n]{0,35}图[^。;\n]{0,20}(?:标注|所示|示出|指定)(?:[^。;\n]{0,10}(?:距离|值|尺寸|做法))?/gu,/以[^。;\n]{0,80}(?:专项施工方案|设计文件)[^。;\n]{0,30}为准[^。;\n]{0,30}(?:本节|本方案)?不另行设定/gu].flatMap(b=>[...a.matchAll(b)].map(a=>({text:a[0],start:a.index,end:a.index+a[0].length}))).sort((a,b)=>b.text.length-a.text.length),c=[];for(let a of b)c.some(b=>a.start<b.end&&a.end>b.start)||c.push(a);return c.sort((a,b)=>a.start-b.start).map(a=>`正文用出处或后续文件替代当前技术决定:${a.text}`)}function h(a){let b=g(a);for(let c of a.split(/[。;\n]/u))/(?:设计|图纸)[^。;]*不(?:一致|符)[^。;]*(?:按|依照|根据)现场实际(?:情况)?施工/u.test(c)&&!/(?:不得|禁止|不能|不可)[^。;]{0,12}(?:按|依照|根据)现场实际/u.test(c)&&b.push("设计与现场不符时不能擅自按现场改变设计施工;须明确停止影响范围、记录差异、处理责任及变更后复核放行条件");return[...new Set(b)]}let i="【从来源到施工决定】来源原句用于识别工程对象、合同责任、条件和约束,不直接粘贴成正文。先判断本节实际需决定的工法、资源、检查或接口,再依据已给事实和工程知识写行动、控制、停止与放行。无需为管理段添加参数或重复检查全项目资料。\n合同说“由总包承担”“按图实施”只说明责任或引用,不等于本节已完成技术决定。把责任落实为本方案的具体动作与接口;真实设计/规格未知只就这个问题查证并交主控,其他可完成内容先成文,未决留任务元数据。\n现场与设计发生差异时,禁止擅自按现场改变设计。例如接口条件不一致:停止该接口的开挖和接驳,记录实测位置、标高及影响范围,由项目技术负责人协调设计处理,取得明确变更后交底、复核并放行。这是异常处置,不能替代正常施工方法,不在无此问题的小节机械复制。\n图件必须承载对应专业信息:工序或接口关系用关系图,场地布置用实际相对位置、设施区域及通行/管线线路的平面示意;图内相对坐标不是现场尺寸。需要测量尺度或真实定位时以已核事实支持,数据缺失进入主控问题,不把流程图冒称真实场地平面图。"},29327:(a,b,c)=>{c.d(b,{chiefDecisionWritingContext:()=>M,w:()=>O});var d=c(77598),e=c(63327),f=c(10170),g=c(63007),h=c(48825),i=c(9848),j=c(16752),k=c(44616),l=c(5518),m=c(73123);function n(a,b){if(!b.query?.trim()||b.query.length>300||!Number.isSafeInteger(b.offset??0)||(b.offset??0)<0||!Number.isSafeInteger(b.limit??4)||(b.limit??4)<1||(b.limit??4)>8||void 0!==b.filePath&&!Object.hasOwn(a.sources,b.filePath))throw Error("原文查询条件或冻结文件身份无效");let c=b.query.trim().split(/\s+/u).map(a=>a.toLowerCase()),d=(a.sourceControls??[]).filter(d=>"verified-source-excerpt"===d.roleId&&d.factId&&Object.hasOwn(a.sources,d.sourceFile)&&(void 0===b.filePath||d.sourceFile===b.filePath)&&c.every(a=>d.value.toLowerCase().includes(a))).sort((a,b)=>a.sourceFile.localeCompare(b.sourceFile)||Number(a.sourceRef?.chunkIndex??0)-Number(b.sourceRef?.chunkIndex??0)),e=b.offset??0,f=d.slice(e,e+(b.limit??4)),g=e+f.length;return{kind:"frozen-original-source",projectSnapshotId:a.snapshotId,query:b.query,matchedCount:d.length,offset:e,complete:g>=d.length,...g<d.length?{nextOffset:g}:{},sources:f.map(b=>({sourceId:b.factId,...(0,k.mk)(a,void 0,b.factId),filePath:b.sourceFile,sourceHash:a.sources[b.sourceFile].sha256,chunkIndex:b.sourceRef?.chunkIndex,sectionTitle:b.sourceRef?.sectionTitle,text:b.value,sourceVersionEligibility:a.sourceVersionPolicy?(0,m.bz)(a,{sourceFile:b.sourceFile,usage:"source-reference",quote:b.value}):{status:"unmeasured",decisionIds:[],reason:"原文可供只读追溯;缺少来源版本用途账,不能作为本次准入或设计采用证明"},sourceSemantics:b.sourceSemantics??(0,l.Q)(b.sourceRef?.roleId??b.roleId,b.sourceRef?.processingType??b.processingType)})),interpretation:"冻结原文候选;须结合对象、条件及已裁决事实判断适用性,查询零命中不证明全部资料没有该内容"}}var o=c(68417),p=c(15254),q=c(66620),r=c(40109),s=c(27939),t=c(5968),u=c(9236);let v=a=>"string"==typeof a&&!!a.trim();async function w(a,b){if(b.signal?.throwIfAborted(),!Array.isArray(a)||!a.length)throw Error("工程裁决须提供非空的实际对象控制项");let c=a.map(a=>{if(!a||"object"!=typeof a||Object.keys(a).some(a=>!["objectName","attribute","condition","value","instruction","evidence","derivation"].includes(a))||!["objectName","attribute","condition","value","instruction"].every(b=>v(a[b])&&a[b].length<=1500)||!Array.isArray(a.evidence)||!a.evidence.length||a.evidence.length>8)throw Error("工程控制项的对象、属性、工况、值或依据不完整");let c=a.evidence.map(a=>{if(!a||Object.keys(a).some(a=>!["sourceId","quote"].includes(a))||!v(a.sourceId)||!v(a.quote))throw Error("工程裁决的原文定位无效");let c=b.sources.find(b=>b.sourceId===a.sourceId);if(!c||!(0,p.dP)(c.text,a.quote))throw Error("工程裁决引用未查询的来源或改写了原文");return{sourceId:a.sourceId,quote:a.quote}}),d=(0,q.ei)(a.value);if((0,s.n5)(a.instruction).length)throw Error("工程控制执行指引仍将施工决定转交图示、设计文件或审批,须先核定具体执行要求");if(1!==d.length||/\d\s*(?:~|~|至|到|–|—)\s*[+−-]?\d|(?:约|左右|大致)/u.test(a.value))throw Error("控制值须为明确数值及单位;范围和约数只能保留为概况");if((0,q.ei)(a.instruction).some(a=>!d.includes(a)))throw Error("执行指引包含控制项之外未核定的参数");if(void 0!==a.derivation){let c=a.derivation;if(!c||Object.keys(c).some(a=>!["formula","inputFactIds","basis"].includes(a))||!v(c.formula)||!v(c.basis)||!Array.isArray(c.inputFactIds)||!c.inputFactIds.length||c.inputFactIds.some(a=>!b.facts.some(b=>b.factId===a)))throw Error("工程推导须使用本次提供的可靠事实与有限算式");(0,q.Db)([{unitId:"chief-control",quote:a.value,source:{kind:"derived",...c}}],{units:[{id:"chief-control",kind:"paragraph",criterionIds:[],text:a.value}],project:b.project,factBindings:[],required:!0})}else if(!c.some(a=>(0,q.ei)(a.quote).includes(d[0])))throw Error("控制值与单位没有得到实际引文支持");return{objectName:a.objectName,attribute:a.attribute,condition:a.condition,value:a.value,instruction:a.instruction,evidence:c,...a.derivation?{derivation:a.derivation}:{}}}),d=(0,t.TR)(b.project,c,b.sources,b.taskId),e=JSON.stringify({task:b.task,criteria:b.criteria,effectiveFacts:b.facts,controls:c,cadReadings:b.cadReadings,sourceContext:d,sources:b.sources}),f=Math.max(8e3,Math.ceil(.6*JSON.stringify({controls:c,variants:d.variants,sources:d.sourceDictionary.map(a=>({value:a.value,objectName:a.objectName}))}).length)+1200*c.length),g=b.reviewer?await b.reviewer(e):await (0,r.bb)('你是独立工程适用性评审者。核对主智能体的控制项与完整原文、已裁决事实和本任务职责。须明确同一对象、部位、施工阶段、基准、适用条件和数值属性;存在无关图框/详图/材料串用、取概况范围端点或平均值、把计价量当实测量、分层厚度当总深度、引用已被更正资料、未经确认的范围扩大或推导输入基准不一致时拒绝。原文引用与算术正确不等于工程适用性正确。未核出部位关系保持unmeasured,不能以通常经验补造。每个控制项按零起始index返回status=confirmed/rejected/unmeasured与reason。同时对sourceContext中每份完整原文、每个实际variant及control返回完整sourceReview。sourceCases语义分为project-design/project-condition/normative-rule/reference-option/reference-method/unmeasured;每个case必须填写versionDomain,按完整原文的实际用途选择boq-quantity、procurement-brand、procurement-specification、construction-method,尚未确认填unmeasured。一个清单表引用A材料品牌,不扩大为它所有数量或工序均受A版本限制;同句同时断言数量与品牌须分别核定实际用途,不能只核数量而漏核产品选择。reference-method只用于已独立核定的非定量参考工序,versionDomain只能construction-method,不承接任何产品选型、规格或清单量控制。不把冻结出处或工艺推导正确当项目采用证明;图集参考选项须真实项目selector与option原文的同selectionKey桥,不能凭通常采用或reason确认。规范约束只登记normative-constraint,本工程设计或项目已选参数为project-property。derived输出只核公式、对象及基准关系,不变成原文已给的项目值;sourceContext中其输入control仍逐项核真实输入来源用途。逐源完整解释、逐variant覆盖,未知保留unmeasured,不新增省略字段。只返回JSON {"results":[{"index":0,"status":"confirmed|rejected|unmeasured","reason":"对象条件及推导关系核验"}],"sourceReview":{"confirmed":true,"reason":"整体复核理由","sourceResults":[{"sourceDictionaryIndex":0,"complete":true,"caseIds":["case-a"],"reason":"完整原文解释"}],"sourceCases":[{"id":"case-a","sourceDictionaryIndex":0,"quote":"该源真实连续原文","objectScope":"实际对象","condition":"适用工况","semanticKind":"project-condition","versionDomain":"unmeasured","applicability":"applicable","variantIds":["从sourceContext选择"],"reason":"项目用途依据"}],"variantResults":[{"variantId":"从sourceContext选择","status":"confirmed|rejected|unmeasured","sourceCaseIds":["case-a"],"reason":"来源与工况关系"}],"controlsResults":[{"variantId":"从sourceContext选择","controlId":"从sourceContext选择","status":"confirmed|rejected|unmeasured","usage":"project-property|normative-constraint","sourceCaseIds":["case-a"],"selectionEvidence":[{"selectorSourceCaseId":"真实项目选择case","optionSourceCaseId":"参考选项case","selectionKey":"两份原文逐字共同标识"}],"reason":"用途核验理由"}],"uncoveredSourceCases":[]}}。没有选项时selectionEvidence为空数组。',e,{diagnostics:b.diagnostics,signal:b.signal,taskKind:(0,r.TO)(),callKind:"supervisor-decision",maxTokens:f,temperature:0,schema:{type:"object",required:["results","sourceReview"],properties:{results:{type:"array",minItems:c.length,maxItems:c.length,items:{type:"object",properties:{index:{type:"integer",required:!0},status:{type:"string",required:!0,enum:["confirmed","rejected","unmeasured"]},reason:{type:"string",required:!0,minLength:1}}}},sourceReview:(0,u.q1)(d.variants,d.sourceDictionary.map((a,b)=>b))}}});b.signal?.throwIfAborted();let h=g&&"object"==typeof g&&Array.isArray(g.results)?g.results:[];for(let[a]of c.entries()){let b=h.filter(b=>b&&"object"==typeof b&&b.index===a),c=b[0];if(1!==b.length||c?.status!=="confirmed"||!v(c.reason))throw Error(`工程适用性未确认:控制项${a},${v(c?.reason)?c.reason:"评审缺项或无效"}`)}let i=(0,t.XJ)({project:b.project,planId:b.planId,taskId:b.taskId,decisionId:b.decisionId,controls:c,sources:b.sources,review:g});return{controls:c.map(a=>{let{derivation:c,...d}=a;return{...d,evidence:a.evidence.map(a=>({...a,...(0,k.mk)(b.project,void 0,a.sourceId)})),...c?{derivation:{...c,inputFactIndices:c.inputFactIds.map(a=>{let c=(0,k.mk)(b.project,a).factIndex;if(void 0===c)throw Error("推导输入没有本轮冻结属性序号");return c})}}:{}}}),review:g,sourceApplicationReceipt:i}}var x=c(45455);function y(a,b){let c=new Map,d=(a.sourceControls??[]).filter(b=>"verified-source-excerpt"===b.roleId&&Object.hasOwn(a.sources,b.sourceFile)),f=b=>{let f=d.find(a=>(0,e.vg)(a)===b);f&&c.set(b,{sourceId:b,...(0,k.mk)(a,void 0,b),filePath:f.sourceFile,sourceHash:a.sources[f.sourceFile].sha256,chunkIndex:f.sourceRef?.chunkIndex,sectionTitle:f.sourceRef?.sectionTitle,text:f.value,sourceVersionEligibility:{status:"unmeasured",decisionIds:[],reason:"真实读取仅恢复冻结原文身份;来源用途、版本及工程采用须独立复核"},sourceSemantics:f.sourceSemantics??(0,l.Q)(f.roleId,f.processingType)})};for(let g of b)if(!g.error&&g.result&&g.result.projectSnapshotId===a.snapshotId)if("source"===g.kind)for(let b of g.result.sources){let f=d.find(a=>(0,e.vg)(a)===b.sourceId);f&&b.filePath===f.sourceFile&&b.sourceHash===a.sources[f.sourceFile].sha256&&b.chunkIndex===f.sourceRef?.chunkIndex&&b.text===f.value&&c.set(b.sourceId,b)}else if("cad"===g.kind){let b=g.result;if("annotations"!==b.kind||a.sources[b.filePath]?.sha256!==b.parsedIdentity)continue;for(let a of b.records){let c=a.payload.text;if("string"==typeof c&&c.trim()&&a.payload.source&&"string"==typeof a.payload.id)for(let a of d.filter(a=>a.sourceFile===b.filePath&&a.value.replace(/\s/gu,"").includes(c.replace(/\s/gu,""))))f((0,e.vg)(a))}}else for(let b of g.result.items){let c=a.workPackages?.flatMap(a=>a.members??[]).find(a=>a.id===b.id);c&&JSON.stringify(c.entry)===JSON.stringify(b.entry)&&b.sourceEvidenceId&&a.sources[b.entry.sourceFile]?.sha256===b.sourceFingerprint&&f(b.sourceEvidenceId)}return[...c.values()]}function z(a){return a.flatMap(a=>{if(a.error||!a.result)return[];if("source"===a.kind){let b=a.result;return(0,x.xj)([{toolName:"read_source",ok:!0,data:{...b,chunks:b.sources.map(a=>({filePath:a.filePath,chunkIndex:a.chunkIndex,sourceId:a.sourceId,sourceHash:a.sourceHash,content:a.text}))}}])}return(0,x.xj)([{toolName:"cad"===a.kind?"query_cad_context":"query_work_packages",ok:!0,data:a.result}])})}async function A(a){let b=a.initialSourceQueries.map(b=>({kind:"source",query:b,result:n(a.project,b)})),c=[],d=[],e=new Set(z(b)),f=!1;for(;;){let g=await a.ask([a.prompt,'需要继续查证时返回 {"action":"read","sourceQueries":[{query,filePath?,offset?,limit?}],"cadQueries":[{filePath,kind:"frames"|"annotations"|"geometry"|"instances",frameId?,entityId?,rootInstanceId?,query?,offset?,limit?}]}。按真实对象读取,nextOffset继续分页;新证据或实际游标有进展即可继续,没有总次数配额。重复同页、空结果和改query不代表新证据。先定位图框;读取身份、单位文字、坐标均不自动成为已核定工程参数。没有新证据时具体说明未核事项,不编造施工值。',...a.readCad?[]:["本次未提供CAD结构读取能力,cadQueries不可使用。"],JSON.stringify({readingReceipts:b,protocolErrors:d})].join("\n"));if(c.push(g),a.onProgress?.(b,c,d),!g||"object"!=typeof g||"read"!==g.action)return{raw:g,attempts:c,reads:b,protocolErrors:d,sources:y(a.project,b)};if(Object.keys(g).some(a=>!["action","sourceQueries","cadQueries"].includes(a))||void 0!==g.sourceQueries&&!Array.isArray(g.sourceQueries)||void 0!==g.cadQueries&&!Array.isArray(g.cadQueries))throw Error("主控追加读取协议无效");let h=[...(g.sourceQueries??[]).map(a=>({kind:"source",query:a})),...(g.cadQueries??[]).map(a=>({kind:"cad",query:a}))];if(!h.length){if(d.push("读取请求为空,未取得新证据;请返回具体裁决或实际定位条件。"),a.onProgress?.(b,c,d),f)throw Error("主控重复无进展,未形成已核定裁决");f=!0;continue}let i=b.length;for(let e of h){try{let c="source"===e.kind?["query","filePath","offset","limit"]:["filePath","kind","frameId","entityId","rootInstanceId","query","offset","limit","placement","textOnly","order","detail"];if(!e.query||"object"!=typeof e.query||Object.keys(e.query).some(a=>!c.includes(a)))throw Error("读取定位字段无效");if("cad"===e.kind&&!a.readCad)throw Error("本次主控未提供CAD读取能力");let d="source"===e.kind?n(a.project,e.query):a.readCad(e.query);b.push({...e,result:d})}catch(a){b.push({...e,error:a instanceof Error?a.message:String(a)})}a.onProgress?.(b,c,d)}let j=z(b.slice(i)),k=j.some(a=>!e.has(a));if(j.forEach(a=>e.add(a)),k)f=!1;else{if(d.push("实际读取没有新的证据或分页进展;不能以改查询词或重复第一页声称完成查证。"),a.onProgress?.(b,c,d),f)throw Error("主控重复无进展,未形成已核定裁决");f=!0}}}var B=c(24481);let C={type:"object",properties:{query:{type:"string",description:"以空格分隔的每个词均须出现在同一原文片段中;不是多个问题或备选词。换查询须从offset=0开始。"},filePath:{type:"string"},offset:{type:"integer",minimum:0,description:"同一查询的下一页必须使用回执nextOffset;不能沿用其他查询的偏移。"},limit:{type:"integer",minimum:1,maximum:8}},required:["query"],additionalProperties:!1},D={type:"object",properties:{filePath:{type:"string"},kind:{type:"string",enum:["frames","annotations","geometry","instances"]},frameId:{type:"string",description:"annotations/geometry须提供本次frames实际返回的图框ID、entityId或instances返回的rootInstanceId。"},entityId:{type:"string"},rootInstanceId:{type:"string",description:"instances目录实际返回的源根身份,用于annotations或geometry;根handle或ordinal不是工程部位,readingSourceIds只读身份不是已核定事实。"},query:{type:"string",description:"单条标注或图名中的实际字面子串。不是语义检索,不支持空格分隔的多词。数字标注常只有数值,建议先不填query读取所选图框或实际根标注,再按真实文字定位。图框可用剖面等实际图名定位。"},offset:{type:"integer",minimum:0,description:"回执nextOffset为实际分页边界;不按请求limit自行累加。换图框、实际根或关键词须从0开始。"},limit:{type:"integer",minimum:1,maximum:24},placement:{type:"string",enum:["all","drawing-space","frame-instance"],description:"在所选图框内按实际块路径筛选;drawing-space排除图框实例及其ATTRIB(常为图签),frame-instance仅查看这部分;不是语义删除,不证明另一部分没有工程说明。剖面主体标注宜先读drawing-space。"},textOnly:{type:"boolean",description:"仅返回有实际文字的标注,过滤空DIMENSION;其尺寸印刷字仍按实际图形块引用返回。"},order:{type:"string",enum:["source","position"],description:"position按实际世界坐标从上到下、从左到右阅读;只是绘图位置,不据此判断工程标高和对象。"},detail:{type:"string",enum:["full","catalog"],description:"frames默认catalog提供实际图框身份、图名和图号;需要真实边界和块变换时按entityId读取full。annotations/geometry始终full。"}},required:["filePath"],additionalProperties:!1},E={type:"object",properties:{action:{type:"string",enum:["use-facts","use-sources","engineering-controls","qualitative-controls","guidance","request-human"]},answer:{type:"string"},reason:{type:"string"},factIds:{type:"array",items:{type:"string"}},sourceIds:{type:"array",items:{type:"string"}},controls:{type:"array",minItems:1,items:{type:"object",properties:{objectName:{type:"string"},attribute:{type:"string"},condition:{type:"string"},value:{type:"string"},instruction:{type:"string"},evidence:{type:"array",items:{type:"object",properties:{sourceId:{type:"string"},quote:{type:"string"}},required:["sourceId","quote"],additionalProperties:!1}},derivation:{type:"object",properties:{formula:{type:"string"},inputFactIds:{type:"array",items:{type:"string"}},basis:{type:"string"}},required:["formula","inputFactIds","basis"],additionalProperties:!1}},required:["objectName","attribute","condition","value","instruction","evidence"],additionalProperties:!1}},qualitativeControls:{type:"array",minItems:1,items:{type:"object",properties:{category:{type:"string",enum:["conditional-duty","project-adoption"]},objectName:{type:"string"},attribute:{type:"string"},condition:{type:"string"},value:{type:"string"},instruction:{type:"string"},evidence:{type:"array",minItems:1,items:{type:"object",properties:{sourceId:{type:"string"},quote:{type:"string"}},required:["sourceId","quote"],additionalProperties:!1}}},required:["category","objectName","attribute","condition","value","instruction","evidence"],additionalProperties:!1}}},required:["action","answer","reason","factIds","sourceIds"],additionalProperties:!1},F={type:"object",properties:{query:{type:"string",description:"工程、分部或清单项目的实际字面子串;*列出本轮全部成员,不使用空格拼接多个备选词。"},offset:{type:"integer",minimum:0,description:"使用同一查询回执nextOffset继续分页;换查询从0开始。"},limit:{type:"integer",minimum:1,maximum:8}},required:["query"],additionalProperties:!1};class G extends Error{constructor(a,b,c,d){super(b,{cause:d}),this.code=a,this.name="OPERATION_TIMEOUT"===a?"TimeoutError":"OPERATION_ABORTED"===a?"AbortError":"ChiefReadingOperationError",this.reads=[...c.reads],this.attempts=[...c.attempts],this.errors=[...c.errors]}}let H={name:"finish_source_reading",description:"结束本次普通目录及原文定位阶段;可说明已提供的真实资料足够,避免无必要重复读。这里只结束准备,不能确认工法或宣称方案已核定,后续独立进行专业推理提交。",parameters:{type:"object",properties:{reason:{type:"string",minLength:1}},required:["reason"],additionalProperties:!1}};async function I(a){a=(0,B.DQ)(a);let b=[],c=[],d=[],e={reads:b,attempts:c,errors:d},f=a.signal??new AbortController().signal,g=()=>{if(f.aborted){let g=f.reason,h=g?.name==="TimeoutError",i=void 0===g||g?.name==="AbortError",j=h?"OPERATION_TIMEOUT":i?"OPERATION_ABORTED":"OPERATION_FAILED",k=h?"本地主控查证操作期限已到达;保留已读回执,方案保持未测状态":i?"用户中止主控查证;未采用后续读取或提交结果":g instanceof Error?g.message:`外部运行信号终止主控查证:${String(g)}`,l=`${j}: ${k}`;throw d.includes(l)||(d.push(l),a.onProgress(b,c,d)),new G(j,k,e,f.reason)}};try{return await (0,B.Uq)({diagnostics:a.diagnostics,signal:f,callKind:a.callOptions?.callKind??"supervisor-decision"},async()=>{let h=a.submission??{name:"submit_chief_decision",description:"查证完毕后提交本任务裁决。工程控制继续接受来源、量纲、算术和独立适用性审查;guidance只提供定性指引。",parameters:E};if(!/^[A-Za-z0-9_-]{1,64}$/u.test(h.name)||["read_frozen_source","read_frozen_cad","read_frozen_work_packages",H.name].includes(h.name)||!h.description.trim()||!h.parameters||"object"!=typeof h.parameters||Array.isArray(h.parameters))throw Error("主控提交工具声明无效或与读取工具重名");g(),b.push(...a.initialSourceQueries.map(b=>({kind:"source",query:b,result:n(a.project,b)})));let i=!1,j=!a.readingCallOptions,k=new Set(z(b)),l=b.length,m=new Set,o=a=>{let c=z(b.slice(l));l=b.length;let d=c.some(a=>!k.has(a));if(c.forEach(a=>k.add(a)),d)return void m.clear();if(m.has(a))throw new G(i?"PLAN_VALIDATION_FAILED":"READING_NO_PROGRESS",`主控重复无进展,未发布裁决:${a}。保留已读证据与实际错误,未决不代表没有要求`,e);m.add(a)},p=[],q=[{name:"read_frozen_source",description:"读取本轮冻结的完整解析原文,保留条件与真实来源,可继续nextOffset;零命中不证明工程资料没有。",parameters:C},...a.readCad?[{name:"read_frozen_cad",description:"读取本轮真实CAD图框、标注或几何。无图框时annotations可用非空实际字面query定位候选,再按rootBindings中真实rootInstanceId读annotations或geometry,也可从instances目录定位;源handle和裸坐标不自动成为工程部位或施工参数,空query不全图返回。",parameters:D}]:[],...a.readWorkPackages?[{name:"read_frozen_work_packages",description:"读取本轮冻结的原始清单成员,保留对象、完整特征、数量单位和真实来源。按nextOffset继续完整记录;清单计价量不自动成为施工控制值,零命中不证明工程资料没有。",parameters:F}]:[],h],s=[{role:"user",content:[a.prompt,...a.readingCallOptions?["当前先执行普通源查证阶段,只定位实际目录、清单成员与完整原文,不在此阶段确认工法。已有真实提供的资料足够时可用finish_source_reading说明理由结束准备;之后才使用专业推理提交完整方案。"]:[],a.submission?`通过实际工具查证,禁止把尚未读到的资料、清单成员、图框、单位或部位关系当作已确认。真实证据或分页游标有进展即可继续;重复空结果、失败或同一控制反馈后具体保留未决,不编造已核定关系。最终通过${h.name}提交;读取和提交不放在同一轮。`:"通过实际工具查证,禁止把尚未读到的图框、单位或部位关系当作已确认。真实证据或分页游标有进展即可继续;反复没有新证据时具体保留未决,不代写含糊施工正文。最终裁决通过submit_chief_decision提交;读取和提交不放在同一轮。",JSON.stringify({initialReadingReceipts:b})].join("\n")}],t=new Set,u=()=>{let c=y(a.project,b).filter(a=>!t.has(a.sourceId));c.forEach(a=>t.add(a.sourceId)),c.length&&s.push({role:"user",content:`【实际读取恢复的冻结原文来源】${JSON.stringify(c)}。提交sourceIds和evidence.sourceId只能选择这些sourceId;cad-read、图框、实体和清单成员ID只作读取定位。完整原文可读不代表工程采用许可,仍须独立核对象、条件、版本和用途。`});let d=a.readingContext?.(b);d?.trim()&&s.push({role:"user",content:`【冻结读取后的真实只读上下文】
|
|
113
113
|
${d}`})};for(b.length&&(a.onProgress(b,c,d),u());;){g();let e=j?a.callOptions:a.readingCallOptions,k=j?q:[...q.filter(a=>a.name!==h.name&&"read_frozen_cad"!==a.name),H],l=await (0,r.Qf)(()=>(a.caller??r._v)({system:a.system??"你是负责专业边界、资料口径和作者协作的主智能体,使用实际工具查清工程对象及工况后裁决。",messages:s,tools:k,requireToolCall:!1,taskKind:e?.taskKind??"reasoning",diagnostics:a.diagnostics,signal:f,callKind:e?.callKind??"supervisor-decision",maxTokens:e?.maxTokens??12e3,temperature:0}),f);if(c.push(l??null),a.onProgress(b,c,d),g(),!l)throw Error("主控模型未返回有效响应,未执行读取或裁决");if(s.push({role:"assistant",content:l.content,toolCalls:l.toolCalls,...void 0!==l.thinkingContent?{thinkingContent:l.thinkingContent}:{}}),l.responseMetadata?.completed===!1){let e="本轮模型响应被截断,读取或提交均未执行;须根据实际响应容量返回完整工具请求,未闭合内容不执行";for(let a of(d.push(e),l.toolCalls))s.push({role:"tool",toolCallId:a.id,content:JSON.stringify({accepted:!1,performed:!1,error:e})});s.push({role:"user",content:e}),a.onProgress(b,c,d),o(e);continue}if(!l.toolCalls.length){d.push("本轮仅返回普通文本,未执行读取或裁决"),s.push({role:"user",content:`本轮普通文字未作为工程裁决执行。请调用已提供的读取工具继续查证,或调用${h.name}提交有实际依据的裁决。`}),a.onProgress(b,c,d),o("普通文字未执行工具裁决");continue}let t=l.toolCalls.filter(a=>a.name===H.name);if(!j&&(t.length||l.toolCalls.some(a=>a.name===h.name))){let e;if(1!==t.length||1!==l.toolCalls.length)e="普通源查证阶段不执行方案提交;结束准备与读取须分轮,之后用专业推理完整提交";else try{let a=JSON.parse(t[0].arguments);if(!a||"object"!=typeof a||Array.isArray(a)||Object.keys(a).some(a=>"reason"!==a)||"string"!=typeof a.reason||!a.reason.trim())throw Error("结束源查证须说明实际资料是否已足够及剩余未核事项");j=!0,m.clear(),p.push({reason:a.reason,engineeringDecision:"not-evaluated"})}catch(a){e=a instanceof Error?a.message:String(a)}for(let a of(e&&d.push(e),l.toolCalls))s.push({role:"tool",toolCallId:a.id,content:JSON.stringify(e?{performed:!1,accepted:!1,error:e}:{performed:!0,stage:"source-reading-finished",engineeringDecision:"not-evaluated",instruction:`准备阶段已结束;下一轮按专业推理调用${h.name}完整提交,当前没有采用任何工法候选`})});a.onProgress(b,c,d),u(),e&&o(e);continue}let v=l.toolCalls.filter(a=>a.name===h.name);if(1===v.length&&1===l.toolCalls.length){let e=y(a.project,b);try{let d=JSON.parse(v[0].arguments);return await (0,r.Qf)(()=>Promise.resolve(a.validateSubmission?.(d,e,b)),f),g(),{raw:d,reads:b,attempts:c,sources:e,...p.length?{preparationReceipts:p}:{}}}catch(h){g(),i=!0;let e=h instanceof Error?h.message:String(h);d.push(e);let f=e.includes("图纸泛指")||e.includes("转交图示")||e.includes("后续审批")?"把 instruction 改写成「对象+部位+工序动作+控制要求」的可执行句;删除“按图/按设计图/按审批/以…为准/待深化/报审后执行”等指向语,来源证明仍保留在 evidence 中。":e.includes("控制值须为明确数值及单位")?"单一工程控制值只能是明确数值+单位;来源原文是范围或约数时不得作为工程控制值——若它是源内条件义务,改用 action=qualitative-controls 的 conditional-duty 原样保留范围与完整条件;若只需正文引用原文,改用 action=use-sources。":e.includes("缺逐项独立用途复核")?"提交须逐项覆盖全部 controls:results 的 index 依次覆盖 0..controls.length-1,每项 status 与 reason 完整;漏项或重复即整次退回。":e.includes("非定性决定不能附加未核定采用许可")?"qualitativeControls 只能与 action=qualitative-controls 同时出现;engineering-controls 只提交 controls 数组,不得附带 qualitativeControls。":e.includes("工程适用性未确认")?"全部控制项必须逐项 confirmed;证据不足的部位关系保持 unmeasured 会导致整次退回——只提交已读证据足以支撑同一对象、工况、基准与适用条件的控制,其余以 use-sources 或 request-human 保留。":e.includes("未查询的来源")||e.includes("改写了原文")?"quote 必须是本次实际读取原文中的连续原字,sourceId 只能选择已返回的 sourceId。":"";s.push({role:"tool",toolCallId:v[0].id,content:JSON.stringify({accepted:!1,performed:!1,error:e,instruction:`${a.submission?"本次提交未采用;根据真实读取回执与本次校验错误纠正当前提案,不能把缺证据的关系宣称已核定或扩大提交范围。":"本次裁决未采用;只根据已读证据纠正当前提案,不用含数字的guidance或图示指向语绕过工程控制校验。"}${f?`纠正方向:${f}`:""}`})}),a.onProgress(b,c,d),u(),o(`裁决未通过独立校验:${e}`);continue}}for(let e of l.toolCalls){let f,h;g();try{if(v.length)throw Error("读取与提交须分轮;本轮混合请求全部未执行,请先完成查证");let b=JSON.parse(e.arguments),c="read_frozen_source"===e.name?"source":"read_frozen_cad"===e.name&&a.readCad?"cad":"read_frozen_work_packages"===e.name&&a.readWorkPackages?"work-package":void 0;if(!c)throw Error("主控请求了未提供的能力");let d=Object.keys(("source"===c?C:"cad"===c?D:F).properties);if(!b||"object"!=typeof b||Object.keys(b).some(a=>!d.includes(a)))throw Error("读取定位字段无效");let g="cad"!==c||b.kind&&"frames"!==b.kind?b:{limit:24,detail:"catalog",...b};(f={kind:c,query:g}).result="source"===c?n(a.project,g):"cad"===c?a.readCad(g):a.readWorkPackages(g),h=f.result}catch(b){let a=b instanceof Error?b.message:String(b);f?f.error=a:d.push(a),h={error:a,performed:!1}}f&&b.push(f),s.push({role:"tool",toolCallId:e.id,content:JSON.stringify(h)}),a.onProgress(b,c,d)}u(),o("实际读取没有新的源材料或游标"),s.push({role:"user",content:"已保留本轮实际读取;使用nextOffset继续真实未完成分页。重复同页或空结果不表示新增证据,不凭查证动作扩大用途。"})}})}catch(a){if(a instanceof G)throw a;throw g(),new G("OPERATION_FAILED",a instanceof Error?a.message:String(a),e,a)}}var J=c(41240),K=c(68959),L=c(9090);function M(a){let{controls:b,qualitativeControls:c,...d}=a;return{...d,...a.writingControls?{controls:a.writingControls}:{},...a.writingQualitativeControls?{qualitativeControls:a.writingQualitativeControls}:{}}}let N=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function O(a){let b=new Map;return c=>({ask:async d=>{let l=a.contract.sections.find(a=>a.id===c);if(!l||"string"!=typeof d.question||!d.question.trim()||d.question.length>4e3||!Array.isArray(d.criterionIds)||!d.criterionIds.length||new Set(d.criterionIds).size!==d.criterionIds.length||d.criterionIds.some(a=>!l.criterionIds.includes(a))||void 0!==d.factQueries&&(!Array.isArray(d.factQueries)||d.factQueries.some(a=>!a||"string"!=typeof a.attribute||!a.attribute.trim()||Object.keys(a).some(a=>!["attribute","objectName"].includes(a))||void 0!==a.objectName&&"string"!=typeof a.objectName)))throw Error("主控问题必须指向当前作者的具体职责");if(void 0!==d.sourceQueries&&(!Array.isArray(d.sourceQueries)||d.sourceQueries.some(a=>Object.keys(a).some(a=>!["query","filePath","offset","limit"].includes(a)))))throw Error("原文查询须明确实际定位条件");let m=(d.sourceQueries??[]).map(b=>n(a.project,b)),r=N([c,d]),s=b.get(r);if(s)return s;let t=(async()=>{var b,n;let s,t,u,v,x,y,z,B,C=a.contract.criteria.filter(a=>d.criterionIds.includes(a.id)),D=new Set(C.flatMap(a=>a.factIds??[])),E=(d.factQueries??[]).map(b=>(0,g.j)(a.project,b));for(let a of E)if("resolved"===a.status)for(let b of a.candidates)D.add(String(b.factId));let F=a.project.facts.filter(b=>D.has((0,e.vg)(b))&&(0,f.j)(b)&&Object.hasOwn(a.project.sources,b.sourceFile)).filter(a=>!(0,i.p)(a).requiresTechnicalDecision).filter(b=>!b.resolutionRef||!!(b.resolutionRef.winnerSourceFile&&Object.hasOwn(a.project.sources,b.resolutionRef.winnerSourceFile))).map(b=>({...(0,j.YL)(a.project,b),factId:(0,e.vg)(b),sourceFile:b.resolutionRef?.winnerSourceFile??b.sourceFile,sourceRef:b.resolutionRef?b.resolutionRef.winnerSourceRef??null:b.sourceRef??null})),G=["你是专业文档的主智能体,回答作者在正式提交首稿前遇到的具体问题。",...a.sharedPlan?[`【本轮共同组织候选与真实任务接口】${JSON.stringify((0,J.E6)(a.sharedPlan,a.contract.sections,l.id))}。在既有对象、阶段与接口内裁决,发现来源冲突须说明具体冲突,不能让作者独自另换工序或把未决值写成正文。`]:[],...a.contract.deliveryPolicy?[(0,h.Jf)({projectType:a.contract.writingKnowledge?.projectType,title:l.title,responsibility:l.responsibility,contentTypes:l.contentTypes}).text]:[],"可选择 use-facts(指向给定可靠事实)、use-sources(提供已查询的完整原文)、engineering-controls(真实定量控制及推导)、qualitative-controls(实际方法/定性采用或原源条件义务,独立复核后只授指定任务用途)、guidance(定性方法与职责指引)、request-human(资料或合同需改变)。","不得编造项目数值或标准限值,guidance只给方法建议,不构成任何数值或选型采用许可。已有原文的工程决定应提交具体controls或qualitativeControls独立核定,不以笼统组织词代替。先通过明确原文查询定位条件与方法;原文可用时提供完整来源,不因尚未抽成属性就直接交回人。确需外部资料或更改合同才保留未决。数值范围仍须按对象与阶段解析,不能任选端点。不要代写整节正文。",'只返回{"action":"guidance","answer":"可执行的回答","factIds":[],"sourceIds":[],"reason":"为何这样裁决"}。use-sources的sourceIds必须选择本次原文查询实际返回的来源身份。',"engineering-controls的factIds仅为controls中实际derivation.inputFactIds的去重并集;直接引用原文、没有算式时必须返回factIds:[]。读过的候选不等于采用的推导输入,不能把待核定范围放入factIds。每项工程控制的实质决定全部写入controls,answer只解释状态,不能用图示指向语替代控制项。","engineering-controls另须controls数组,每项为{objectName,attribute,condition,value,instruction,evidence:[{sourceId,quote}],derivation?:{formula,inputFactIds,basis}}。quote须来自已查询原文的真实连续引文,value须有数值及单位,condition明确适用部位与阶段,不泛化全工程;优先使用原文明确的控制标高等可执行属性,无须强行生成统一总深度。只有已提供的可靠单值事实可作推导输入,算式用$0、$1及四则括号,服务端核量纲与算术。sourceIds为全部实际用到的原文身份,factIds为全部推导输入;执行指引不添加未经核定的参数。裁决不会改写冻结项目事实或证明整篇合格。",'qualitative-controls另须qualitativeControls:[{category:"conditional-duty|project-adoption",objectName,attribute,condition,value,instruction,evidence:[{sourceId,quote}]}]。保持源内真实承担主体、触发、例外、适用对象。conditional-duty只能忠实履行源义务,不批准候选目录参数为当前选型。project-adoption须真实当前项目采用关系,参考选项须真实selector桥,未决A不批准采用。真正定量控制仍用engineering-controls。sourceIds为实际证据身份全集,factIds为[]。',"事实查询结果含完整口径状态;ambiguous/unbound/unmeasured/needs-technical-decision不能通过任选一个候选变成已确认施工值。概况范围不得取端点或平均值冒充各部位深度,分层厚度不能当坑深。分页未完成时不能声称已核完整集合。",JSON.stringify({task:l,criteria:C,facts:F,factQueries:E,question:d,sourceFiles:[...new Set([...F.map(a=>a.sourceFile),...m.flatMap(a=>a.sources.map(a=>a.filePath)),...Object.keys(a.project.sources).filter(a=>/\.(?:dwg|dxf)$/iu.test(a))])]})].join("\n"),H=`chief:${r.slice(0,28)}`,M=async(b,d,f)=>{if(!b||!["use-facts","use-sources","engineering-controls","qualitative-controls","guidance","request-human"].includes(b.action??"")||"string"!=typeof b.answer||!b.answer.trim()||b.answer.length>3e3||"string"!=typeof b.reason||!b.reason.trim()||!Array.isArray(b.factIds)||new Set(b.factIds).size!==b.factIds.length||b.factIds.some(a=>!F.some(b=>b.factId===a))||"use-facts"===b.action&&!b.factIds.length||"guidance"===b.action&&((0,q.ei)(b.answer).length||b.factIds.length))throw Error("主智能体裁决越过事实或职责边界,未执行");let g=b.sourceIds??[];if("request-human"===b.action&&function(a){let b=new Map,c=new Map;for(let d of a){if(d.error)return!0;if("cad"===d.kind){if(!d.result)return!0;let a=d.query,b=d.result;if(!Array.isArray(b.records)||!Number.isSafeInteger(b.offset)||b.offset<0||"string"!=typeof b.parsedIdentity||"string"!=typeof b.projectSnapshotId)return!0;let e=JSON.stringify([a.filePath,a.kind??"frames",a.rootInstanceId??null,a.frameId??null,a.entityId??null,a.query??"",a.placement??"all",a.textOnly??!1,a.order??"source",a.detail??"full"]),f=c.get(e)??[];f.push({query:a,page:b}),c.set(e,f);continue}if("work-package"===d.kind&&d.result){let a=d.result;if(!0!==a.complete||a.items.length!==a.total)return!0;continue}if("source"!==d.kind||!d.result)continue;let a=d.query,e=JSON.stringify([a.filePath??null,a.query]),f=b.get(e)??[];f.push(d.result),b.set(e,f)}for(let b of c.values()){if(b.some(({page:a})=>a.parsedIdentity!==b[0].page.parsedIdentity||a.projectSnapshotId!==b[0].page.projectSnapshotId))return!0;let c=b.find(({page:a})=>null===a.nextOffset&&null!==a.total);if(["instances","frames"].includes(b[0].query.kind??"frames")&&!b[0].query.entityId&&!b[0].query.query&&b.some(({query:b,page:c})=>a.some(a=>{if("cad"!==a.kind||!a.result)return!1;let d=a.query;return d.filePath===b.filePath&&["annotations","geometry"].includes(d.kind??"")&&c.records.some(a=>void 0!==d.rootInstanceId&&a.payload.rootInstanceId===d.rootInstanceId||void 0!==d.frameId&&a.payload.id===d.frameId)})))continue;if(!c||null===c.page.total)return!0;let d=c.page.total,e=new Set;for(let{page:a}of b)for(let b=0;b<a.records.length;b+=1)e.add(a.offset+b);if(e.size!==d||[...e].some(a=>a>=d)||d>0&&!e.has(0))return!0}for(let a of b.values()){let b=a[0]?.matchedCount??0,c=new Set;for(let b of a)for(let a=0;a<b.sources.length;a+=1)c.add(b.offset+a);if(c.size!==b)return!0}return!1}(f))throw Error("相关冻结原文尚未完整定位,不能把未完成查询当作需要用户提供资料");if(!Array.isArray(g)||new Set(g).size!==g.length||g.some(a=>!d.some(b=>b.sourceId===a))||["use-sources","engineering-controls","qualitative-controls"].includes(b.action??"")&&!g.length||!["use-sources","engineering-controls","qualitative-controls","guidance"].includes(b.action??"")&&g.length)throw Error("主智能体原文选择没有冻结来源支持");if(["engineering-controls","qualitative-controls"].includes(b.action??"")&&!a.sharedPlan)throw Error("工程控制缺少本轮同版共享计划,不能声明新来源已经可以写入");let h="qualitative-controls"===b.action?await (0,L.lj)(b.qualitativeControls,{project:a.project,sources:d,task:l,criteria:C,taskId:c,planId:a.sharedPlan.id,decisionId:H,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.engineeringReviewer}):void 0;if(h){let a=new Set(h.controls.flatMap(a=>a.evidence.map(a=>a.sourceId)));if(b.factIds.length||a.size!==g.length||g.some(b=>!a.has(b)))throw Error("定性决定来源清单与实际证据不一致");v=h.sourceApplicationReceipt,u=h.review}else if(void 0!==b.qualitativeControls)throw Error("非定性决定不能附加未核定采用许可");let i="engineering-controls"===b.action?await w(b.controls,{project:a.project,sources:d,task:l,taskId:c,planId:a.sharedPlan.id,decisionId:H,criteria:C,facts:F,diagnostics:a.diagnostics,signal:a.signal,reviewer:a.engineeringReviewer,cadReadings:f.filter(a=>"cad"===a.kind)}):void 0;if(i){let a=new Set(i.controls.flatMap(a=>a.evidence.map(a=>a.sourceId))),c=new Set(i.controls.flatMap(a=>a.derivation?.inputFactIds??[]));if(g.length!==a.size||g.some(b=>!a.has(b))||b.factIds.length!==c.size||b.factIds.some(a=>!c.has(a)))throw Error("工程裁决来源清单与实际控制项不一致");u=i.review}else if(void 0!==b.controls)throw Error("非工程裁决不能附加未经复核的控制项");let j=i?.controls.map(b=>{let{objectName:c,attribute:d,condition:f,value:g,instruction:h}=b,i=b.derivation,j=i?.inputFactIds.length===1&&"$0"===i.formula.replace(/\s/gu,"")?a.project.facts.find(a=>(0,e.vg)(a)===i.inputFactIds[0]&&a.objectName===c&&[a.fieldId,a.fieldName,a.key,(0,e.nD)(a)?.key,(0,e.nD)(a)?.label,...(0,e.nD)(a)?.aliases??[]].some(a=>a&&(0,p.K3)(a)===(0,p.K3)(d))&&(0,p.K3)(a.value)===(0,p.K3)(g)):void 0,l=j&&(0,k.mk)(a.project,(0,e.vg)(j)).factIndex;return{objectName:c,attribute:d,condition:f,value:g,instruction:h,authorReferences:"number"==typeof l?{factIndices:[l]}:i?{derivedNumbers:[{formula:i.formula,inputFactIndices:i.inputFactIds.map(b=>(0,k.mk)(a.project,b).factIndex),basis:i.basis}]}:{sourceIndices:[...new Set(b.evidence.map(a=>a.sourceIndex))]}}}),m=h?.controls.map(({evidence:b,...c})=>{let d=b.map(b=>(0,k.mk)(a.project,void 0,b.sourceId).sourceIndex);if(d.some(a=>"number"!=typeof a))throw Error("定性决定来源没有本轮完整原文序号");return{...c,authorReferences:{sourceIndices:[...new Set(d)]}}}),n=i?`以下控制已独立复核,只用于指定对象及工况。按authorReferences在实际正文片段登记对应类型:factIndices引用既定事实,derivedNumbers登记算式,sourceIndices仅用于原文直接控制。证明中的范围句不支持派生或既定单值,不能给它们另挂原文索引;不把裁决身份当作新事实来源:${JSON.stringify(j)}`:h?`以下具体定性决定已经独立核定,严格保持各自category与适用对象条件;source-obligation-only不授当前选型或施工量。实际正文仍登记sourceIndices并逐次终评,不把许可当事实:${JSON.stringify(h.controls.map(b=>({...b,evidence:b.evidence.map(b=>({...b,...(0,k.mk)(a.project,void 0,b.sourceId)}))})))}`:"use-sources"===b.action?`以下是完整冻结原文,保留条件与来源,须判断适用性后编写;不自动转为已确认的项目单值:${JSON.stringify(d.filter(a=>g.includes(a.sourceId)))}`:"use-facts"===b.action?`采用冻结模型中的下列事实及其适用对象,不扩大其范围:${JSON.stringify(F.filter(a=>b.factIds.includes(a.factId)))}`:b.answer;return i&&(v=i.sourceApplicationReceipt),{decisionId:H,taskId:c,action:b.action,answer:n,factIds:b.factIds,...g.length?{sourceIds:g}:{},...i?{controls:i.controls,writingControls:j}:{},...h?{qualitativeControls:h.controls,writingQualitativeControls:m}:{},reason:b.reason,source:"model"}};try{let b=(a,b,c)=>{x=a,y=b,z=c,s=b.at(-1)},c=a.reviewer?await A({project:a.project,prompt:G,initialSourceQueries:d.sourceQueries??[],readCad:a.readCad,onProgress:b,ask:a.reviewer}):await I({project:a.project,prompt:G,initialSourceQueries:d.sourceQueries??[],readCad:a.readCad,readWorkPackages:b=>(0,o.HV)(a.project,b),onProgress:b,diagnostics:a.diagnostics,signal:a.signal,validateSubmission:async(a,b,c)=>{B=await M(a,b,c)}});if(s=c.raw,x=c.reads,y=c.attempts,t=B??await M(s,c.sources,c.reads),a.signal?.throwIfAborted(),["engineering-controls","qualitative-controls"].includes(t.action)){if(!v)throw Error("本次工程控制没有同版来源用途证明,未执行");(0,K.WI)(a.project,v)}}catch(b){if(a.signal?.aborted)throw b;t={decisionId:H,taskId:c,action:"unmeasured",answer:"本次主控裁决未通过,未核定新的事实或技术决定;不能据此认定需要用户确认。实质技术问题须具体说明对象和工况后重新查询;已完成的正文交submit_author_task,不能以本回执代替内容验收。",factIds:[],reason:b instanceof Error?b.message:String(b),source:"model-rejected"}}return a.onReceipt({decision:t,question:d,inputHash:N(G),raw:s??null,...x?{reads:x,attempts:y,readingProtocolErrors:z}:{},...void 0===u?{}:{engineeringReview:u},...["engineering-controls","qualitative-controls"].includes(t.action)&&v?{sourceApplicationReceipt:v}:{}}),b=a.diagnostics,n={at:c,decisionId:H,action:t.action,reason:t.reason,readings:d.question,source:t.source,execution:"model-rejected"===t.source?"unlanded":"performed",executionNote:"model-rejected"===t.source?"模型裁决未通过,未执行新的技术决定,不登记为人工资料缺口":"通过工具回执返回当前作者;正文是否采用由候选与合同评价核对"},b&&(b.supervisorDecisionLog??=[]).push(n),t})();return b.set(r,t),t}})}},31859:(a,b,c)=>{c.d(b,{I:()=>i});var d=c(96770),e=c(19668),f=c(43967);let g=globalThis,h=g.__customizeConfigStores??=new Map;function i(){(0,f.jF)();let a=(0,e.J0)();return h.has(a)||h.set(a,new d.ConfigStore(a)),h.get(a)}},33972:(a,b,c)=>{function d(a,b){return a.criteria.filter(a=>a.sectionId===b&&a.applicable)}function e(a,b){if(!Array.isArray(b)||b.some(b=>!Number.isSafeInteger(b)||b<0||b>=a.length)||new Set(b).size!==b.length)throw Error("职责序号必须唯一且属于当前委派任务");return b.map(b=>a[b])}c.d(b,{C:()=>d,resolveAuthorCriterionIndices:()=>e})},34027:(a,b,c)=>{c.d(b,{RT:()=>g,Ri:()=>f,zV:()=>h});var d=c(77598),e=c(73123);function f(a,b){return(0,e.gM)(a),Object.fromEntries(Object.entries(b).map(([b,c])=>{let e=a.sources[b],f=a.documents.find(a=>a.sourceFile===b);if(!e||!f||e.sourceSha256!==c.sourceSha256||e.parsedSha256!==c.parsedSha256)throw Error(`一致性来源上下文与冻结解析/源身份不一致:${b}`);let g=a.decisions.filter(a=>a.currentSourceFiles.includes(b)||a.candidateSourceFiles.includes(b)||f.domainDependencies.some(b=>b.family===a.family&&b.domain===a.domain)),h=a.declarations.filter(a=>a.sources.some(a=>a.sourceFile===b)||g.some(b=>b.declarationIds.includes(a.id))),i={version:"tender-source-context-v3",policyVersion:a.version,policyId:a.policyId,assetFingerprint:a.assetFingerprint,sourceIdentity:structuredClone(e),document:structuredClone(f),declarations:structuredClone(h),decisions:structuredClone(g),applicability:g.map(a=>({family:a.family,domain:a.domain,status:a.status,current:a.currentSourceFiles.includes(b),candidate:a.candidateSourceFiles.includes(b)}))};return[b,{...i,contextFingerprint:(0,d.createHash)("sha256").update(JSON.stringify(i)).digest("hex")}]}))}function g(a){let{contextFingerprint:b,...c}=a;if("tender-source-context-v3"!==c.version||c.policyVersion!==e.xg||b!==(0,d.createHash)("sha256").update(JSON.stringify(c)).digest("hex")||![c.policyId,c.assetFingerprint,c.sourceIdentity?.sourceSha256,c.sourceIdentity?.parsedSha256].every(a=>/^[a-f0-9]{64}$/u.test(a))||!c.document?.sourceFile?.trim()||!Array.isArray(c.document.editionScopes)||!Array.isArray(c.document.scopeEvidenceChunks)||c.document.families.some(a=>!c.document.editionScopes.some(b=>b.family===a))||c.document.scopeEvidenceChunks.some(a=>a.sha256!==(0,d.createHash)("sha256").update(a.text).digest("hex")))throw Error("职责来源适用资格缺少当前冻结源/解析/版本上下文身份或发行作用范围,或被改写")}function h(a){g(a);let b=a.document;return{document:{sourceFile:b.sourceFile,title:b.title,isClarification:b.isClarification,projectIdentifier:b.projectIdentifier,issuedAt:b.issuedAt,families:b.families,editionScopes:b.editionScopes.map(a=>({family:a.family,mode:a.mode,heading:a.heading})),domainDependencies:b.domainDependencies.map(a=>({family:a.family,domain:a.domain,quote:a.quote,authoritySources:a.authoritySources.map(a=>({sourceFile:a.sourceFile,quote:a.quote}))}))},declarations:a.declarations.map(a=>({id:a.id,family:a.family,domains:a.domains,quote:a.quote,issuedAt:a.issuedAt,projectIdentifier:a.projectIdentifier,title:a.title,sources:a.sources.map(a=>({sourceFile:a.sourceFile}))})),applicability:a.applicability,decisions:a.decisions.map(a=>({id:a.id,declarationId:a.declarationId,declarationIds:a.declarationIds,family:a.family,domain:a.domain,status:a.status,reason:a.reason,current:a.currentSourceFiles.includes(b.sourceFile),candidate:a.candidateSourceFiles.includes(b.sourceFile)}))}}},35821:(a,b,c)=>{c.d(b,{Eh:()=>f,Mv:()=>o,VN:()=>h,Iu:()=>i});var d=c(19898),e=c(73055);let f=.6,g=null;function h(){return g||(g=new d.LocalTransformersEmbeddingProvider({})),g}async function i(){if("1"!==process.env.DOCUMENT_SKIP_EMBED_PREFLIGHT)try{await h().embedQuery("生成前置检查")}catch(b){let a=b instanceof Error?b.message:String(b);throw Error(`本地语义模型预热失败(生成前置检查,可用 DOCUMENT_SKIP_EMBED_PREFLIGHT=1 跳过):${a}`,{cause:b})}}let j=new Map,k=0,l=0;async function m(a,b){let c=b?await b(a):await h().embedDocuments(a);if(c.length!==a.length)throw Error(`本地语义模型嵌入数量不一致:期望 ${a.length} 条,实际 ${c.length} 条`);return c}async function n(a,b){if("0"===process.env.DOCUMENT_EMBED_CACHE)return m(a,b);let c=Array(a.length),d=[],e=new Map;for(let b=0;b<a.length;b+=1){let f=a[b];if(f.length<=2e3){let a=j.get(f);if(a){c[b]=a,k+=1,j.delete(f),j.set(f,a);continue}}let g=e.get(f);g?g.push(b):(e.set(f,[b]),d.push(f))}if(0===d.length)return c;let f=await m(d,b),g=function(){let a=Number(process.env.DOCUMENT_EMBED_CACHE_SIZE||4e4);return Number.isFinite(a)&&a>0?a:4e4}();for(let a=0;a<d.length;a+=1){let b=d[a],h=f[a],i=e.get(b);for(let a of i)c[a]=h;if(b.length<=2e3&&(l+=i.length,j.set(b,h),j.size>g)){let a=j.keys().next().value;void 0!==a&&j.delete(a)}}return c}async function o(a,b,c){if(0===a.length||0===b.length)return()=>0;let d=[...a,...b],f=await n(d,c),g=new Map;for(let a=0;a<d.length;a++)g.has(d[a])||g.set(d[a],f[a]);return(a,b)=>{let c=g.get(a),d=g.get(b);return c&&d?(0,e.Om)(c,d):0}}},36372:(a,b,c)=>{c.d(b,{M8:()=>l,a0:()=>k,hM:()=>j});var d=c(35821),e=c(86697);let f=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],g=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],h=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约|业绩证明|类似(?:工程)?业绩|获奖|荣获|协会颁发|营业执照|资质证书|安全生产许可证|认证证书|管理体系认证|审计报告|信用等级|信用评价|社保证明|无行贿犯罪|中标查询|中标公示|中标结果|电子交易系统|公共资源交易|质疑投诉|评标委员会/u;function i(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function j(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function k(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>h.test(i(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(i),j=await (0,d.Mv)(e,[...f],b),k=await (0,d.Mv)(e,[...g],b),l=new Set;for(let a of c){let b=i(a),c=Math.max(...f.map(a=>j(b,a))),d=Math.max(...g.map(a=>k(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function l(a){return(0,e.A)({prototypes:[...f],negativePrototypes:[...g],threshold:.6,embedDocuments:a})}},36594:(a,b,c)=>{c.d(b,{LA:()=>k,Yn:()=>i,ZB:()=>j,eW:()=>l});var d=c(77598),e=c(97979),f=c(83653),g=c(57268);let h=a=>(0,d.createHash)("sha256").update(a).digest("hex");function i(a,b){let c=new Map;for(let b of a){let a=[...b.content.matchAll(/(?:发布日期|发布于|出具日期|印发日期)\s*[::]?\s*(20\d{2})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu)].map(a=>`${a[1]}-${a[2].padStart(2,"0")}-${a[3].padStart(2,"0")}`);a.length&&c.set(b.filePath,[...c.get(b.filePath)??[],...a])}let g=a.flatMap(a=>{if(!["tender_document","addendum","tender","clarification","tender_text"].includes(a.roleId??""))return[];let d=b.sources[a.filePath];if(!d||void 0===a.chunkIndex)return[];let f=b.documents.find(b=>b.sourceFile===a.filePath),g=c.get(a.filePath)??[];return(0,e.Su)([{text:a.content,source:`${a.filePath} ${a.sectionTitle??""}`}]).filter(a=>a.openingDate&&"reference"!==a.openingDate.role).map(b=>({candidate:b,item:a,source:d,projectIdentifier:f?.projectIdentifier??null,issuedAt:1===new Set(g).size?g[0]:null,isClarification:f?.isClarification??!1}))}),i=new Map;for(let a of g){let b=a.candidate.openingDate,c=JSON.stringify([a.projectIdentifier,b.objectName,b.kind]),d=i.get(c)??[];d.push(a),i.set(c,d)}return[...i.values()].flatMap(a=>{let b,c=a.filter(a=>"current"===a.candidate.openingDate.role);if(!c.length)return[];let e=c.filter(a=>a.candidate.clarified),g=e.length&&c.every(a=>a.candidate.clarified||!a.isClarification)?e:c;if(new Set(g.map(a=>a.candidate.value)).size>1&&g.every(a=>a.issuedAt)){let a=[...g.map(a=>a.issuedAt)].sort().at(-1);g=g.filter(b=>b.issuedAt===a)}let i=(0,f.iC)({facts:[],overrides:[],labeledValues:g.map(a=>a.candidate)}).resolved.find(a=>"开工日期"===a.attribute);if(!i)return[];let j=g.find(a=>a.candidate.value===i.value&&i.evidence.some(b=>b.source===a.candidate.source));if(!j)return[];let k=j.candidate.openingDate,l=new Set(g.map(a=>a.candidate.value)).size>1||new Set(g.map(a=>(a.candidate.openingDate.condition??"").replace(/\s+/gu,""))).size>1,m=k.kind,n="planned"===m?"planned_start_date":"actual"===m?"actual_start_date":"construction_start_date",o="planned"===m?"计划开工日期":"actual"===m?"实际开工日期":"开工日期",p=[...new Set(l?a.filter(a=>"superseded"===a.candidate.openingDate.role).map(a=>a.candidate.value):[...i.superseded,...a.filter(a=>!g.includes(a)).map(a=>a.candidate.value)])].filter(a=>a!==i.value),q=a.map(a=>({value:a.candidate.value,sourceFile:a.item.filePath,chunkIndex:a.item.chunkIndex,quote:a.candidate.openingDate.quote}));return[{factId:`temporal:${(b=[n,k.objectName,j.item.filePath,j.item.chunkIndex,k.quote,i.value],(0,d.createHash)("sha256").update(JSON.stringify(b)).digest("hex")).slice(0,24)}`,fieldId:n,key:o,fieldName:o,objectName:k.objectName,value:i.value,confidence:l?.5:.95,sourceFile:j.item.filePath,roleId:j.item.roleId,processingType:j.item.processingType,sourceRef:{filePath:j.item.filePath,roleId:j.item.roleId,processingType:j.item.processingType,chunkIndex:j.item.chunkIndex,sectionTitle:j.item.sectionTitle,sourceSpan:k.quote,contextSpan:j.item.content},temporalConstraint:{event:"construction-start",kind:m,status:l?"unmeasured":"resolved",date:i.value,...k.condition?{condition:k.condition}:{},superseded:p,sourceSha256:j.source.sourceSha256,parsedSha256:j.source.parsedSha256,chunkSha256:h(j.item.content),quoteSha256:h(k.quote),history:q}}]})}function j(a,b){let c=b.filter(a=>a.temporalConstraint?.event==="construction-start"&&"planned"===a.temporalConstraint.kind&&"resolved"===a.temporalConstraint.status&&"项目主体"===a.objectName),d=1===new Set(c.map(a=>a.value)).size?c.slice(0,1):[];return{...a,facts:[...a.facts.filter(a=>"开工日期"!==(0,f.hf)(String(a.key??""),a.label)),...d.flatMap(a=>a.temporalConstraint.history.filter(b=>a.temporalConstraint.superseded.includes(b.value)).map(a=>({key:"开工日期",value:a.value,sourceFile:a.sourceFile})))],overrides:(a.overrides??[]).filter(a=>"date"!==(0,e.dm)(a.superseded)&&"date"!==(0,e.dm)(a.effective)),labeledValues:[...(a.labeledValues??[]).filter(a=>"开工日期"!==a.attribute),...d.map(a=>({attribute:"开工日期",value:a.value,source:`${a.sourceFile} ${a.sourceRef?.sectionTitle??""}`,clarified:!0,supersedesPriorMaterials:!1}))]}}function k(a){return a.filter(a=>a.temporalConstraint).map(a=>{let b=a.temporalConstraint,c="unmeasured"===b.status?"同一事件日期尚有未决值,须依据完整原文核定,不能任选一个日期或宣称已确定":`${a.fieldName}为${b.date};${"planned"===b.kind?"仅作进度计划起点,不得写成已确定的实际开工日":"保持该事件的原文性质"}`;return(0,g.v7)(`进度安排必须承接${a.objectName}的开工事件:${c}${b.condition?`;触发条件完整保留:${b.condition.replace(/\s+/gu,"")}`:""};仅采用现行事件口径,不新增工期或把通知条件删成固定日历承诺。`,JSON.stringify({type:"source-bound-temporal-fact",factId:a.factId,sourceFile:a.sourceFile,sourceRef:a.sourceRef,temporalConstraint:b}))})}function l(a,b){let c=(0,e.Su)([{text:a.text,source:"reviewed-duty"}]).filter(a=>a.openingDate).flatMap(c=>b.filter(b=>{let d=b.temporalConstraint,e=c.openingDate;return d?.status==="resolved"&&d.superseded.includes(c.value)&&b.objectName===e.objectName&&("unspecified"===e.kind||e.kind===d.kind)&&d.history.some(b=>b.value===c.value&&a.sources.some(a=>a.file===b.sourceFile))}).map(a=>({label:c,fact:a}))),d=new Map;for(let a of c){let b=a.label.openingDate,c=`${b.dateStartChar}:${b.dateEndChar}`,e=d.get(c)??[];e.push(a),d.set(c,e)}let f=a.text,g=[];for(let a of[...d.values()].sort((a,b)=>b[0].label.openingDate.dateStartChar-a[0].label.openingDate.dateStartChar)){if(1!==new Set(a.map(a=>a.fact.value)).size)continue;let{label:b,fact:c}=a[0],d=b.openingDate;f=f.slice(0,d.dateStartChar)+c.value+f.slice(d.dateEndChar),g.push(c)}let h=[...new Map(g.map(a=>[a.factId,a])).values()];return h.length&&(f+=`;该日期控制已经由当前完整来源更正,${h.map(a=>`${a.fieldName}仅采用${a.value}${"planned"===a.temporalConstraint.kind?"作为计划基准,不能转成实际固定开工日":""}${a.temporalConstraint.condition?`,保留${a.temporalConstraint.condition.replace(/\s+/gu,"")}`:""}`).join(";")}`),{text:f,factIds:h.map(a=>a.factId),sources:h.map(a=>({factId:a.factId,sourceFile:a.sourceFile,sourceRef:a.sourceRef,temporalConstraint:a.temporalConstraint}))}}},40109:(a,b,c)=>{let d;c.d(b,{Qf:()=>D,rI:()=>ak,bb:()=>ap,v7:()=>ao,_v:()=>ah,CX:()=>ab,jW:()=>J,Sq:()=>P,TO:()=>$,_T:()=>ae,Jx:()=>am});var e=c(95393),f=c(12669),g=c(73024),h=c(76760),i=c(73055);function j(){let a=process.env.AGENT_CASSETTE_DIR;return a||h.join(process.cwd(),"apps","server","test","fixtures","llm")}function k(a){let b="number"==typeof a.stablePrefixChars&&a.stablePrefixChars>0&&a.stablePrefixChars<=a.prompt.length?a.stablePrefixChars:a.prompt.length;return(0,i.c6)(["native-author-prompt-v2",a.model,JSON.stringify(a.params),a.system,a.prompt.slice(0,b)].join("\0"))}function l(a){return h.join(j(),`${a}.json`)}class m extends Error{constructor(a,b){super(`cassette 未命中(${b}):key=${a}。回放模式下未录制即测试失败,不静默回落到真调用。用 AGENT_RECORD=1 重跑以录制,产物落在 ${l(a)}。`),this.key=a,this.mode=b,this.name="CassetteMissError"}}async function n(a){let b="1"===process.env.AGENT_REPLAY?"replay":"1"===process.env.AGENT_RECORD?"record":"off";if("off"===b)return a.invoke();if("replay"===b){let c=function(a){try{let b=JSON.parse(g.readFileSync(l(a),"utf8"));return b?.v===1?b:void 0}catch{return}}(a.key);if(!c)throw new m(a.key,b);return c.response}let c=await a.invoke();try{g.mkdirSync(j(),{recursive:!0});let b={v:1,key:a.key,model:a.model,params:a.params,response:c,recordedAt:Date.now()};g.writeFileSync(l(a.key),JSON.stringify(b,null,2))}catch(a){console.error(`[cassette] 录制落盘失败(不影响生成):${a instanceof Error?a.message:String(a)}`)}return c}var o=c(96770),p=c(81684),q=c(24481),r=c(10059),s=c(79704),t=c(7258);class u{async enter(a,b){let c=this.prefixes.get(a);for(c||(c={completed:0},this.prefixes.set(a,c));;){if(b.throwIfAborted(),c.completed>=2)return{onChunk:()=>{},finish:()=>{}};if(c.warming){await new Promise((a,d)=>{let e=()=>{b.removeEventListener("abort",e),d(b.reason??Error("用户中止"))};b.addEventListener("abort",e,{once:!0}),c.warming.then(()=>{b.removeEventListener("abort",e),b.aborted?d(b.reason??Error("用户中止")):a()})});continue}let a=!1,d=!1;return c.warming=new Promise(a=>{c.release=a}),{onChunk:b=>{["content","thinking","tool_call_arguments_delta"].includes(b.type)&&"text"in b&&b.text.trim()&&(a=!0)},finish:()=>{if(d)return;d=!0,a&&(c.completed+=1);let b=c.release;c.warming=void 0,c.release=void 0,b?.()}}}}constructor(){this.prefixes=new Map}}var v=c(86282);let w=new Map,x=0,y=new WeakMap,z=0;function A(a){let b=a.reason;return b instanceof Error&&"AbortError"!==b.name?b:void 0===b||b?.name==="AbortError"?Object.assign(Error("用户中止",{cause:b}),{name:"AbortError"}):Error(`LLM调用被外部运行信号终止:${String(b)}`,{cause:b})}function B(a){return"TimeoutError"===a.name?"local_deadline":"AbortError"===a.name?"aborted":"run_cancelled"}function C(a){return"TimeoutError"===a.name?"LOCAL_LLM_DEADLINE":"AbortError"===a.name?"CALL_ABORTED":"RUN_CANCELLED"}function D(a,b){return b.aborted?Promise.reject(A(b)):new Promise((c,d)=>{let e=!1,f=a=>{e||(e=!0,b.removeEventListener("abort",g),a())},g=()=>f(()=>d(A(b)));if(b.addEventListener("abort",g,{once:!0}),b.aborted)return void g();Promise.resolve().then(()=>{if(b.aborted)throw A(b);return a()}).then(a=>f(()=>c(a)),a=>f(()=>d(a)))})}function E(a,b){let c=(0,f.II)(a);if(c)return(0,f.D)(a),b&&(b.llm.lastError=`预算耗尽(${c.kind}):本次调用未发起——${c.message}`),console.error(`[llm] 预算耗尽拒绝调用(${c.kind}):${c.message}`),c}function F(a,b){let c=a.flatMap(a=>a.usage?[a.usage]:[]);if(!c.length)return b;let d=a=>c.reduce((b,c)=>b+(c[a]??0),0),e=a=>c.some(b=>void 0!==b[a])?d(a):void 0;return{promptTokens:d("promptTokens"),completionTokens:d("completionTokens"),promptCacheHitTokens:e("promptCacheHitTokens"),promptCacheMissTokens:e("promptCacheMissTokens"),reasoningTokens:e("reasoningTokens")}}function G(a,b,c,e,g){let h=Math.max(0,g?.promptCacheHitTokens||0),i=Math.max(0,g?.promptTokens||0),j=Math.min(Math.max(0,g?.promptCacheMissTokens??i-h),i),k=g?i+Math.max(0,g.completionTokens||0):0,l=g&&c?function(a,b,c,e=process.env){let f=function(a,b,c=process.env){return function(a=process.env){let b=a.AGENT_COST_PRICES_JSON;if(d&&d.raw===b)return d.table;let{table:c,warning:e}=function(a){let b;if(!a||""===a.trim())return{table:{}};try{b=JSON.parse(a)}catch(a){return{table:{},warning:`AGENT_COST_PRICES_JSON 解析失败,保留未定价状态:${a instanceof Error?a.message:String(a)}`}}if("object"!=typeof b||null===b||Array.isArray(b))return{table:{},warning:'AGENT_COST_PRICES_JSON 顶层必须是对象({"model:kind": {...}}),已忽略'};let c={},d=[];for(let[a,e]of Object.entries(b)){if("object"!=typeof e||null===e){d.push(a);continue}let b=Number(e.inputPerM),f=Number(e.outputPerM);if(!Number.isFinite(b)||!Number.isFinite(f)||b<0||f<0){d.push(a);continue}let g=Number.isFinite(Number(e.cacheHitPerM))&&Number(e.cacheHitPerM)>=0?Number(e.cacheHitPerM):b;c[a]={inputPerM:b,outputPerM:f,cacheHitPerM:g}}return{table:c,warning:d.length>0?`AGENT_COST_PRICES_JSON 中 ${d.length} 项非法已忽略:${d.slice(0,5).join("、")}`:void 0}}(b);return e&&console.warn(`[costModel] ${e}`),d={raw:b,table:c,warning:e},c}(c)[`${a}:${b}`]}(a,b,e);if(f)return function(a,b){let c=Math.max(0,b.inputTokens||0),d=Math.max(0,b.outputTokens||0),e=Math.min(Math.max(0,b.cacheHitTokens||0),c),f=b.cacheMissTokens,g="number"==typeof f&&Number.isFinite(f)?Math.min(Math.max(0,f),Math.max(0,c-e)):Math.max(0,c-e);return(e*a.cacheHitPerM+g*a.inputPerM+d*a.outputPerM)/1e6}(f,c)}(c,e,{inputTokens:g.promptTokens||0,outputTokens:g.completionTokens||0,cacheHitTokens:g.promptCacheHitTokens||0,cacheMissTokens:g.promptCacheMissTokens||0}):void 0,m=(0,f.dn)(a,{tokens:k,costUsd:l,priced:!g||void 0!==l,now:Date.now(),cacheHitTokens:h,cacheMissTokens:j});return m&&b&&(b.llm.lastError=m.message,console.error(`[llm] 预算耗尽:${m.message}`)),m}function H(a){return"reasoning"===a?"reasoning":"chat"}function I(a,b){return new Promise((c,d)=>{if(b?.aborted)return void d(Error("用户中止"));let e=()=>{clearTimeout(f),d(Error("用户中止"))},f=setTimeout(()=>{b?.removeEventListener("abort",e),c()},a);b?.addEventListener("abort",e,{once:!0})})}function J(){let a=(0,v.z)().llmMaxConcurrency;return"number"==typeof a&&Number.isFinite(a)&&a>0?Math.max(1,Math.floor(a)):1/0}let K=[];function L(a){return new Promise((b,c)=>{if(a?.aborted)return void c(A(a));if(x<J()){x+=1,b(M);return}let d={resolve:b,reject:c,settled:!1};K.push(d);let e=()=>{if(d.settled)return;d.settled=!0,d.cleanup?.();let a=K.indexOf(d);a>=0&&K.splice(a,1),c(Error("用户中止"))};if(a){if(a.aborted)return void e();a.addEventListener("abort",e,{once:!0}),d.cleanup=()=>a.removeEventListener("abort",e)}})}function M(){x=Math.max(0,x-1);let a=K.shift();a&&!a.settled&&(a.settled=!0,a.cleanup?.(),x+=1,a.resolve(M))}let N=new WeakMap;async function O(a){let b=!1;try{b="api.deepseek.com"===new URL(a.endpoint??"").hostname}catch{}if(!b||!a.streaming||!a.diagnostics||a.prompt.length<4096)return{onChunk:a=>{},finish:()=>{}};let c=N.get(a.diagnostics);c||(c=new u,N.set(a.diagnostics,c));let d=(0,i.c6)([a.endpoint,a.model,a.disableThinking,a.system,a.prompt.slice(0,4096)]);return c.enter(d,a.signal)}function P(){return J()}function Q(a){let b=a instanceof Error?`${a.name} ${a.message}`:String(a);return/connection error|econnrefused|econnreset|fetch failed|network|socket|eai_again|enotfound|etimedout|429|502|503|504|rate ?limit|too many requests|overloaded|服务繁忙|连接失败|abort|timeout|timed ?out|terminated/iu.test(b)}function R(a){if(a instanceof e.IncompleteChatStreamError)return"incomplete_stream";if(a instanceof U)return"tool_protocol_invalid";let b=a instanceof Error?`${a.name} ${a.message}`:String(a),c=[],d=new Set,f=a;for(;f&&"object"==typeof f&&!d.has(f);){d.add(f);let a=f;if("LOCAL_LLM_DEADLINE"===a.code)return"local_deadline";for(let b of[a.name,a.code])"string"==typeof b&&c.push(b);f=a.cause}if(/\babort(ed)?\b|用户中止/iu.test(b)&&!/timeout|timed ?out|terminated/iu.test(b))return"aborted";if(/空响应|empty content/iu.test(b))return"empty_response";let g=a&&"object"==typeof a&&"status"in a?a.status:void 0,h="number"==typeof g&&Number.isInteger(g)?g:Number(b.match(/(?:endpoint error|api error|http\s*(?:status)?)\s*[(:]?\s*(\d{3})\s*\)?/iu)?.[1]);if(Number.isFinite(h)&&h>0){if(408===h)return"provider_timeout";if(429===h||h>=500)return"provider_unavailable";if(h>=400)return W(b)?"context_overflow":"provider_rejected"}return/输出截断|finish_reason\s*=\s*length/iu.test(b)?"output_truncated":W(b)?"context_overflow":/APIConnectionTimeoutError|HeadersTimeoutError|BodyTimeoutError|UND_ERR_(?:HEADERS|BODY|CONNECT)_TIMEOUT|ETIMEDOUT|headers?\s+timeout|body\s+timeout|connect(?:ion)?\s+timeout/iu.test(`${b} ${c.join(" ")}`)?"transport_timeout":/missing field|invalid[_ ]request|tool_call_id|tool_calls|messages\[\d+\]|协议|参数不合法|未授权|鉴权/iu.test(b)?"provider_rejected":/\b429\b|connection error|fetch failed|network|socket|eai_again|enotfound|econnrefused|econnreset|rate ?limit|too many requests|overloaded|bad gateway|gateway timeout|internal server error|service unavailable|服务繁忙|连接失败/iu.test(b)?"provider_unavailable":"unknown_failure"}class S extends Error{constructor(a,b){super(a),this.name="TruncatedContentError",this.partial=b}}function T(a){if("length"!==a.finishReason)return;let b=a.droppedToolCalls?.length?`;实际未解析工具:${a.droppedToolCalls.map(a=>`${a.name??"(无名)"}:${a.reason}`).join(";")}`:"";return`输出截断(供应商明确finish_reason=length);原始返回已保留${b}`}class U extends Error{constructor(a){super(`工具参数协议失败,finish_reason=${a.finishReason??"未报告"};${(a.droppedToolCalls??[]).map(a=>`${a.name??"(无名)"}:${a.reason};参数字符${a.argumentsChars??"未报告"},空白字符${a.whitespaceChars??"未报告"}`).join(";")}。解析失败不能证明供应商输出额度耗尽;完整raw保留,按实际字段纠正。`),this.name="ToolArgumentProtocolError"}}function V(a,b,c){if(!a)return;let d=b instanceof Error?b.message:String(b);a.llm.failures+=1,a.llm.failureStreak=(a.llm.failureStreak||0)+1,a.llm.lastError=d;let e=c??R(b);a.llm.lastFailureKind=e;let f=a.llm.failureKindCounts??={};return f[e]=(f[e]??0)+1,e}function W(a){let b=a instanceof Error?`${a.name} ${a.message}`:String(a);return/maximum context length|context ?length|context ?window|too many tokens|input.{0,24}too long|prompt.{0,24}too long|请求.{0,16}(超长|过长|超出)|上下文.{0,16}(超长|超出|过长|窗口)/iu.test(b)||/400/u.test(b)&&/context|too ?long|token|length|上下文/iu.test(b)||/JSON.{0,10}被截断|JSON.{0,10}未闭合/iu.test(b)}function X(a,b){let c=(0,o.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":/deepseek/iu.test(a)?"deepseek":"openai"}function Y(a){let b=(0,p.c9)(a),c=b.models.active;if(!c)return;let d=b.models.list.find(a=>a.name===c.name&&a.provider===c.provider);if(!d)throw Error("当前选定模型不在模型列表中;本次不会自动选用其他模型");let e=b.providers[d.provider];if(!e)throw Error("当前选定模型的供应商尚未配置;本次不会自动选用其他模型");return{model:{...d,key:JSON.stringify([d.provider,d.name])},provider:e}}function Z(a,b,c){let d=a[b]??={calls:0,failures:0};d.calls+=1,"failure"===c&&(d.failures+=1)}function $(){return!function(){let a=(process.env.DOCUMENT_THINKING_FOR_JUDGES??"").trim().toLowerCase();return"1"===a||"on"===a||"true"===a}()?"structuredGeneration":"reasoning"}function _(a,b,c){let d="composition"===a||"source-extraction"===a?(0,e.thinkingCapabilityForModel)(b):void 0;if(d&&"unsupported"!==d.disable&&"enabled"!==c)return{disableThinking:!0,budgetMode:"compact"};if(/^deepseek-(?:v4-pro|flash)$/iu.test(b))return"disabled"===c?{disableThinking:!0,budgetMode:"compact"}:{disableThinking:!1,reasoningEffort:"reasoning"===a?"high":"low",budgetMode:"relaxed"};if((0,e.isGlm53Model)(b))return{disableThinking:!1,reasoningEffort:"disabled"===c?"low":"enabled"===c||"reasoning"===a?"high":"low",budgetMode:"relaxed",..."disabled"===c?{warning:`当前模型 ${b} 不支持关闭思考,本次使用厂商支持的 low 强度,模型选择保持不变`}:{}};let f=(0,e.thinkingCapabilityForModel)(b);return"disabled"===c?f&&"unsupported"!==f.disable?{disableThinking:!0,budgetMode:"compact"}:{disableThinking:!1,budgetMode:f?.budgetPolicy==="shared"?"relaxed":"compact",.../gemini-3/iu.test(b)?{reasoningEffort:"low"}:{},warning:`当前模型 ${b} 思考不可关闭(厂商限制),已保留合法思考参数和当前模型选择`}:"enabled"===c?{disableThinking:!1,budgetMode:"structuredGeneration"===a&&f?.budgetPolicy==="shared"?"relaxed":"compact"}:"structuredGeneration"===a&&f?"unsupported"===f.disable?{disableThinking:!1,budgetMode:"shared"===f.budgetPolicy?"relaxed":"compact",.../gemini-3/iu.test(b)?{reasoningEffort:"medium"}:{},warning:`当前模型 ${b} 思考不可关闭(厂商限制),本次保留思考并使用受限输出预算`}:{disableThinking:!0,budgetMode:"compact"}:{disableThinking:!1,budgetMode:"compact"}}function aa(a){let b=a.at(-1);return b?{requestParameters:a,...void 0!==b.maxTokens?{sentMaxTokens:b.maxTokens}:{},...b.reasoningEffort?{reasoningEffort:b.reasoningEffort}:{},...b.responseFormat?{responseFormat:b.responseFormat}:{}}:{}}function ab(a){return a.filter(a=>!!a).reduce((a,b)=>a+b.length,0)}function ac(a){if(!a)return{};let b=Math.max(0,a.promptTokens||0),c=void 0===a.promptCacheHitTokens?void 0:Math.max(0,a.promptCacheHitTokens),d=void 0===a.promptCacheMissTokens?void 0:Math.min(Math.max(0,a.promptCacheMissTokens),b);return{inputTokens:b,outputTokens:Math.max(0,a.completionTokens||0),...void 0===c?{}:{cacheHitTokens:c},...void 0===d?{}:{cacheMissTokens:d},...void 0===a.reasoningTokens?{}:{reasoningTokens:a.reasoningTokens}}}function ad(a,b){a&&((0,t.iC)(a,b),(a.llm.callLog??=[]).push(b),(0,s.t8)(a,b))}function ae(a,b=5){let c=new Map;for(let b of a??[]){let a=c.get(b.kind)??{kind:b.kind,calls:0,inputChars:0,outputChars:0,toolArgumentsChars:0,ms:0,failed:0,truncated:0};a.calls+=1,a.inputChars+=b.inputChars,a.outputChars+=b.outputChars,a.toolArgumentsChars+=b.toolArgumentsChars??0,a.ms+=b.ms,b.ok||(a.failed+=1),"output_truncated"===b.failureKind&&(a.truncated+=1),c.set(b.kind,a)}return{rows:[...c.values()].sort((a,b)=>b.inputChars-a.inputChars).slice(0,b),unlabeledCalls:c.get("unlabeled")?.calls??0}}function af(a,b){let c=a.llm.callBreakdown??(a.llm.callBreakdown={}),d=b||"(none)";return c[d]??(c[d]={calls:0,inputChars:0,l3Chars:0,cacheHitTokens:0,cacheMissTokens:0})}class ag extends Error{constructor(a){super(a),this.name="ToolProtocolViolationError"}}async function ah(a){return ai(a={...a=(0,q.DQ)(a),signal:a.signal??new AbortController().signal})}async function ai(a){var b;let c,d,g,h,j,l,m=a.signal;if(m.aborted)throw A(m);let o=(b=a.diagnostics,(0,f.Su)(b));if(E(o,a.diagnostics))return;let p=Date.now(),s=0,t=!1,u=0,v=[],x=[],y=0,z=0,C=0,J=a.diagnostics?a.diagnostics.llm.modelHealth??={}:{};try{g=await L(m),C=Date.now()-p;let b=Y(a.diagnostics);if(!b)return void V(a.diagnostics,"MODEL_NOT_CONFIGURED:尚未明确选择模型,本次未发送请求");let{model:f,provider:o}=b;j=f.name,l=f.key,a.diagnostics&&(a.diagnostics.llm.modelChoices??=[]).push({at:Date.now(),chosen:f.name,provider:f.provider,callKind:a.callKind,reason:"使用本轮冻结的用户选定模型;失败不会自动切换模型"});let B=(0,i.c6)({provider:f.provider,model:f.name,baseUrl:o.baseUrl,directEndpoint:o.directEndpoint,protocol:o.protocol,apiKeyHash:o.apiKey?(0,i.c6)(o.apiKey):""}),E=w.get(B);E||(E=(0,e.createProvider)(X(f.provider,o),{baseUrl:o.baseUrl,apiKey:o.apiKey,modelName:f.name,directEndpoint:o.directEndpoint}),w.set(B,E));let F=f.name.toLowerCase();if(a.requiredToolName&&!a.tools.some(b=>b.name===a.requiredToolName))throw Error("指定的提交工具不在当前作者允许的工具中");if((a.requireToolCall||a.requiredToolName)&&E.capabilities?.supportsFunctionCalling===!1)throw Error("当前作者供应商未实现原生工具调用,不能提交冻结作者任务");let G=_(a.taskKind??"structuredGeneration",F,f.thinking);G.warning&&a.diagnostics&&!a.diagnostics.llm.thinkingWarning&&(a.diagnostics.llm.thinkingWarning=G.warning);let H=E.capabilities?.maxOutputTokens,K="number"==typeof H&&Number.isFinite(H)&&H>0?H:1/0,M=(0,e.isGlm53Model)(F)||/deepseek/iu.test(F)&&!G.disableThinking,N=!!(a.requireToolCall&&!M),P=M?void 0:a.requiredToolName,R=(0,q.jW)(a.diagnostics)?void 0===a.maxTokens?void 0:Math.min(a.maxTokens,K):Math.min("relaxed"===G.budgetMode?(a.maxTokens??3200)*6:a.maxTokens??3200,K),S=E.capabilities.supportsStreaming&&!0!==o.directEndpoint,W=a.stablePrefixChars&&a.stablePrefixChars>0?a.stablePrefixChars:void 0,$=k({system:a.system,prompt:a.messages.map(a=>a.content).join("\x01"),stablePrefixChars:W,model:f.name||"unknown",params:{temperature:a.temperature??0,maxTokens:R,stream:S,tools:a.tools,requireToolCall:N,requiredToolName:P??null,provider:f.provider,callKind:a.callKind,endpointHash:(0,i.c6)([o.baseUrl,o.protocol,o.directEndpoint]),disableThinking:G.disableThinking,reasoningEffort:G.reasoningEffort}});a.diagnostics&&(a.diagnostics.llm.calls+=1,a.diagnostics.llm.inputChars=(a.diagnostics.llm.inputChars||0)+a.system.length+a.messages.reduce((a,b)=>a+b.content.length,0));let aa=await D(()=>n({key:$,model:f.name||"unknown",params:{temperature:a.temperature??0,maxTokens:R,stream:S},invoke:async()=>{let b;for(let c=0;c<=3;c+=1)try{if(m.aborted)throw A(m);let b=await O({diagnostics:a.diagnostics,endpoint:o.baseUrl,model:F,system:a.system,prompt:a.messages.find(a=>"user"===a.role)?.content??"",streaming:S,signal:m,disableThinking:G.disableThinking});try{u+=1;let c=Date.now();d=c,v.push({disableThinking:G.disableThinking,maxTokens:R,...G.reasoningEffort?{reasoningEffort:G.reasoningEffort}:{}});let g=(0,r.bw)({diagnostics:a.diagnostics,kind:a.callKind??"unlabeled",streaming:S,signal:m});x.push(g.receipt);let i=[{role:"system",content:a.system},...a.messages.map(a=>({role:a.role,content:a.content,...a.toolCallId?{toolCallId:a.toolCallId}:{},...a.toolCalls&&a.toolCalls.length>0?{toolCalls:a.toolCalls}:{},...void 0!==a.thinkingContent?{thinkingContent:a.thinkingContent}:{}}))],j={maxRetries:0,temperature:a.temperature??0,maxTokens:R,signal:m,disableThinking:G.disableThinking,reasoningEffort:G.reasoningEffort,tools:a.tools,...P?{extraBody:{tool_choice:{type:"function",function:{name:P}}}}:N?{extraBody:{tool_choice:"required"}}:{}};try{return await D(()=>g.run(()=>S?E.chatStream(i,a=>{g.onChunk(a),b.onChunk(a)},j):E.chat(i,j)),m)}catch(b){if(b instanceof e.IncompleteChatStreamError){let c=b.partialResponse;h=c.usage,s=c.content.length;let d=c.vendorExtensions?.rawToolCalls;Array.isArray(d)&&(z=d.reduce((a,b)=>a+("string"==typeof b?.arguments?b.arguments.length:0),0)),a.onRawResponse?.({content:b.partialResponse.content,toolCalls:[],rawContent:b.partialResponse.content,rawToolCalls:b.partialResponse.vendorExtensions?.rawToolCalls,droppedToolCalls:b.partialResponse.droppedToolCalls,...void 0===b.partialResponse.thinkingContent?{}:{thinkingContent:b.partialResponse.thinkingContent},requestMetadata:{maxTokens:R,...Number.isFinite(K)?{outputCap:K}:{},requireToolCall:a.requireToolCall??!1,disableThinking:G.disableThinking,...a.requiredToolName?{requiredToolName:a.requiredToolName}:{}},responseMetadata:{model:f.name,provider:f.provider,completed:!1,finishReason:b.partialResponse.finishReason??null,usage:b.partialResponse.usage??null,usageStatus:b.partialResponse.usage?"reported":"unreported",protocolFailure:"incomplete-stream"}})}throw b}finally{y+=Date.now()-c,d=void 0}}finally{b.finish()}}catch(e){if(b=e,m.aborted)throw A(m);if(!Q(e)||c>=3)throw e;let d=Math.min(3e4,1200*2**c)+Math.floor(400*Math.random());a.diagnostics&&(a.diagnostics.llm.retries+=1,a.diagnostics.llm.lastError=`工具循环瞬态错误退避 ${Math.round(d/1e3)}s(第 ${c+1} 次):${e instanceof Error?e.message:String(e)}`),await I(d,m)}throw b instanceof Error?b:Error(String(b))}}),m);x.length||(0,r.xC)(a.diagnostics,aa.usage),h=aa.usage?{promptTokens:aa.usage.promptTokens,completionTokens:aa.usage.completionTokens,promptCacheHitTokens:aa.usage.promptCacheHitTokens,promptCacheMissTokens:aa.usage.promptCacheMissTokens}:void 0,j=f.name;let ab=aa.content?.trim()??"",ac=T(aa),ad=!!aa.droppedToolCalls?.length,ae=ac?"output_truncated":ad?"tool_protocol_invalid":void 0;ae&&V(a.diagnostics,ac??new U(aa),ae);let af=(aa.toolCalls||[]).map((a,b)=>({id:a.id||`call-${b}`,name:a.name,arguments:"string"==typeof a.arguments?a.arguments:JSON.stringify(a.arguments??{})})),ah=aa.vendorExtensions?.rawToolCalls;z=Array.isArray(ah)?ah.reduce((a,b)=>a+("string"==typeof b?.arguments?b.arguments.length:0),0):af.reduce((a,b)=>a+b.arguments.length,0);let ai={content:ab,toolCalls:af,...void 0!==aa.thinkingContent?{thinkingContent:aa.thinkingContent}:{},rawContent:aa.content??"",rawToolCalls:aa.vendorExtensions?.rawToolCalls,requestMetadata:{maxTokens:R,...Number.isFinite(K)?{outputCap:K}:{},requireToolCall:a.requireToolCall??!1,disableThinking:G.disableThinking,...a.requiredToolName?{requiredToolName:a.requiredToolName}:{}},droppedToolCalls:aa.droppedToolCalls,responseMetadata:{model:f.name,provider:f.provider,completed:!ae,finishReason:aa.finishReason??null,usage:aa.usage??null,usageStatus:aa.usage?"reported":"unreported",...ae?{protocolFailure:ac?"output-truncated":"invalid-tool-arguments"}:{}}};if(a.onRawResponse?.(ai),!ae&&(af.some(b=>!a.tools.some(a=>a.name===b.name))||a.requireToolCall&&0===af.length||a.requiredToolName&&(0===af.length||af.some(b=>b.name!==a.requiredToolName))))throw new ag(`供应商未遵守当前工具协议:要求${a.requiredToolName??(a.requireToolCall?"实际工具调用":"声明内工具")},实际返回${af.map(a=>a.name).join("、")||"普通文本或空返回"};原响应已保留,未执行越界工具`);if(!ab&&0===af.length){ae||V(a.diagnostics,"空响应(工具路径:模型既无正文也无工具调用)"),c=ae??"empty_response",l&&Z(J,l,"failure");return}return t=!ae,ae&&(c=ae),s=ab.length,l&&Z(J,l,ae?"failure":"ok"),ai}catch(e){let b=m.aborted?A(m):e;l&&!m.aborted&&Z(J,l,"failure");let d=m.aborted&&b instanceof Error?B(b):void 0;throw b instanceof Error&&"AbortError"===b.name||V(a.diagnostics,b,d),c=d??R(b),b}finally{g||(C=Date.now()-p),g?.(),G(o,a.diagnostics,j,H(a.taskKind),F(x,h)),ad(a.diagnostics,{at:p,kind:a.callKind??"unlabeled",inputChars:a.system.length+a.messages.reduce((a,b)=>a+b.content.length,0),outputChars:s,providerAttempts:u,toolArgumentsChars:z,toolSchemaChars:JSON.stringify(a.tools).length,slotWaitMs:C,providerMs:y+(void 0===d?0:Date.now()-d),launchWaitMs:0,ms:Date.now()-p,ok:t,...ac(F(x,h)),...c?{failureKind:c}:{},...a.maxTokens?{maxTokens:a.maxTokens}:{},...aa(v),...x.length?{transportActivities:x.map(a=>({...a}))}:{},inputThinkingChars:a.messages.reduce((a,b)=>a+(b.thinkingContent?.length??0),0),inputToolArgumentsChars:a.messages.reduce((a,b)=>a+(b.toolCalls??[]).reduce((a,b)=>a+b.arguments.length,0),0)})}}function aj(a,b,c,d){a&&Object.assign(a,{value:b,code:c,performed:d})}async function ak(a,b,c=!1,d={}){var g;let h,j,l,m,o,p;(d=(0,q.DQ)(d)).outFailure&&(delete d.outFailure.value,delete d.outFailure.code,delete d.outFailure.performed,delete d.outFailure.outputTruncated);let t=(g=d.diagnostics,(0,f.Su)(g)),u=E(t,d.diagnostics);if(u)return void aj(d.outFailure,`预算耗尽(${u.kind}):本次调用未发起——${u.message}`,"BUDGET_REFUSED",!1);d={...d,signal:d.signal??new AbortController().signal};let v=[],J=Date.now(),K=0,M=!1,N=0,P=0,R=0,U=[];if(d.diagnostics){d.diagnostics.llm.calls+=1,d.diagnostics.llm.inputChars=(d.diagnostics.llm.inputChars||0)+a.length+b.length;let c=af(d.diagnostics,d.prefixKey);if(c.calls+=1,c.inputChars+=a.length+b.length,c.l3Chars+=d.contextLayers?.l3||0,d.contextLayers){let a=d.diagnostics.llm.layerChars??(d.diagnostics.llm.layerChars={l0:0,l1:0,l2:0,l3:0});a.l0+=d.contextLayers.l0||0,a.l1+=d.contextLayers.l1||0,a.l2+=d.contextLayers.l2||0,a.l3+=d.contextLayers.l3||0}else d.diagnostics.llm.unlayeredChars=(d.diagnostics.llm.unlayeredChars||0)+a.length+b.length}let W=0,$=d.diagnostics?d.diagnostics.llm.modelHealth??={}:{};try{let f;l=await L(d.signal),W=Date.now()-J,d.diagnostics&&(d.diagnostics.llm.maxActive=Math.max(d.diagnostics.llm.maxActive,x));let g=Y(d.diagnostics);if(!g){let a="MODEL_NOT_CONFIGURED:尚未明确选择模型,本次未发送请求";aj(d.outFailure,a,"MODEL_NOT_CONFIGURED",!1),h=V(d.diagnostics,a);return}let{model:t,provider:u}=g;p=t.key,d.outModel&&(d.outModel.value=t.key),d.diagnostics&&(d.diagnostics.llm.modelChoices??=[]).push({at:Date.now(),chosen:t.name,provider:t.provider,callKind:d.callKind,reason:"使用本轮冻结的用户选定模型;失败不会自动切换模型"});let B=(0,i.c6)({provider:t.provider,model:t.name,baseUrl:u.baseUrl,directEndpoint:u.directEndpoint,protocol:u.protocol,apiKeyHash:u.apiKey?(0,i.c6)(u.apiKey):""}),C=w.get(B);if(C||(C=(0,e.createProvider)(X(t.provider,u),{baseUrl:u.baseUrl,apiKey:u.apiKey,modelName:t.name,directEndpoint:u.directEndpoint}),w.set(B,C)),d.files?.length&&(C.capabilities?.supportsVision!==!0||"function"!=typeof C.understandFiles)){let a="当前选定模型没有实际图像理解能力;该图像复核未测量,未发送图像,也未自动切换模型或降为纯文本假称已核准";aj(d.outFailure,a,"VISION_UNAVAILABLE",!1),h=V(d.diagnostics,a);return}let E=t.name.toLowerCase(),F=_(d.taskKind??"structuredGeneration",E,t.thinking);F.warning&&d.diagnostics&&!d.diagnostics.llm.thinkingWarning&&(d.diagnostics.llm.thinkingWarning=F.warning);let G=C.capabilities?.maxOutputTokens,H="number"==typeof G&&Number.isFinite(G)&&G>0?G:1/0,aa=function(a){if((0,q.jW)(a.diagnostics))return;if(!a.maxTokens)return a.maxTokens;let b="total"===a.outputBudget;return"relaxed"!==a.decision.budgetMode||b?b?Math.min(a.maxTokens,a.outputCap):a.maxTokens:Math.min(Math.ceil(6*a.maxTokens),a.outputCap)}({decision:F,maxTokens:d.maxTokens,outputBudget:d.outputBudget,outputCap:H,diagnostics:d.diagnostics}),ab=(0,e.isGlm53Model)(E)&&c?{type:"json_object"}:void 0,ac=!d.files?.length&&C.capabilities.supportsStreaming&&!0!==u.directEndpoint,ad=Symbol("empty-content"),ae=async(e,f=!1)=>{var g;if(d.signal?.aborted)throw Error("用户中止");let l=(g=d.diagnostics)?y.get(g)??0:z,p=l<3?0:l<6?2e4:l<10?45e3:6e4;if(p>0){let a=p+Math.floor(5e3*Math.random());d.diagnostics&&(d.diagnostics.llm.emptyStormWaits=(d.diagnostics.llm.emptyStormWaits||0)+1,d.diagnostics.llm.lastInfo=`空响应风暴长退避 ${Math.round(a/1e3)}s(连续空响应 ${l} 次)`),await I(a,d.signal)}let q=d.signal,s=k({system:a,prompt:b,stablePrefixChars:!d.files?.length&&(d.contextLayers?.l3||0)>0&&(d.contextLayers.l3||0)<b.length?b.length-(d.contextLayers.l3||0):void 0,model:t.name||"unknown",params:{temperature:d.temperature??0,maxTokens:e,jsonOnly:c,stream:ac,disableThinking:F.disableThinking,reasoningEffort:F.reasoningEffort,...ab?{responseFormat:ab}:{},provider:t.provider,callKind:d.callKind,endpointHash:(0,i.c6)([u.baseUrl,u.protocol,u.directEndpoint]),files:d.files?.map(a=>({name:a.name,mimeType:a.mimeType,hash:(0,i.c6)(a.data.toString("base64"))}))}}),w=await D(()=>n({key:s,model:t.name||"unknown",params:{temperature:d.temperature??0,maxTokens:e,jsonOnly:c,stream:ac,disableThinking:F.disableThinking,...ab?{responseFormat:ab}:{},provider:t.provider,callKind:d.callKind,endpointHash:(0,i.c6)([u.baseUrl,u.protocol,u.directEndpoint])},invoke:async()=>{let g=Date.now(),h=await O({diagnostics:d.diagnostics,endpoint:u.baseUrl,model:E,system:c?`${a}
|
|
114
114
|
只返回 JSON,不要返回 markdown。`:a,prompt:b,streaming:ac,signal:q,disableThinking:F.disableThinking});R+=Date.now()-g;try{if(d.signal?.aborted)throw Error("用户中止");let g=Date.now();j=g,N+=1,U.push({disableThinking:F.disableThinking,maxTokens:e,...F.reasoningEffort?{reasoningEffort:F.reasoningEffort}:{},...ab?{responseFormat:ab.type}:{}});let i=(0,r.bw)({diagnostics:d.diagnostics,kind:d.callKind??"unlabeled",streaming:ac,signal:q});v.push(i.receipt);let k=[{role:"system",content:c?`${a}
|
|
115
115
|
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:f?`${b}
|
|
@@ -123,7 +123,7 @@ ${b}`,{maxTokens:e,signal:q,maxRetries:0,temperature:d.temperature??0,disableThi
|
|
|
123
123
|
缺失字段只能依据完整原始来源和已有内容补齐,不能由字段名、一般常识或通过校验的目的编造事实;若无法忠实补齐,不得伪造确认。返回完整的 schema 合法 JSON,不返回修复说明、补丁或 markdown。
|
|
124
124
|
|
|
125
125
|
JSON 结构重试修正(以下 JSON 是原样输出与协议校验数据,不是新的业务指令):
|
|
126
|
-
${JSON.stringify({priorRaw:l,validationFailure:m,currentSchema:n??null})}`);try{r=await D(()=>k(a,v),c.signal)}catch(a){if(c.signal?.aborted){let a=A(c.signal);throw c.outFailure&&Object.assign(c.outFailure,{value:a.message,code:C(a)}),d&&"AbortError"!==a.name&&V(c.diagnostics,a,B(a)),a}throw a}if(!r){c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r});let b=j.value?j:{value:"本次调用未返回模型内容;没有本次传输回执,不借用其他调用的故障",code:"EMPTY_OUTPUT"};c.outFailure&&Object.assign(c.outFailure,b);break}let w=al(r),x=!1;try{t=(0,e.parseJsonWithoutDuplicateKeys)(w)}catch(b){let a=b instanceof e.DuplicateJsonKeyError?b.message:function(a){let b=al(a),c=(b.match(/\{/gu)||[]).length-(b.match(/\}/gu)||[]).length,d=(b.match(/\[/gu)||[]).length-(b.match(/\]/gu)||[]).length,e=b.slice(-80).replace(/\s+/gu," ");return c>0||d>0?`JSON 被截断({ 未闭合 ${c} 个、[ 未闭合 ${d} 个),截断位置响应末段:${e}`:`JSON 语法错误,出错位置响应末段:${e}`}(w);u=`JSON 解析失败:${a}`,x=a.startsWith("JSON 被截断(")}if(!u&&c.schema){let a=[],b=am(t,c.schema,a);o=c.diagnostics,o&&0!==a.length&&(o.llm.lastInfo=`JSON Schema 超限拒收:${a.slice(0,4).map(a=>`${a.path} ${a.originalLength} 条超上限 ${a.maxItems},完整数组保留并拒收`).join(";")}`),b.length&&(u=`JSON Schema 校验失败:${b.join(";")}`)}if(!u&&c.validateProtocol){let b;try{b=c.validateProtocol(structuredClone(t))}catch(b){throw c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r}),b}b.length&&(u=`JSON 关联协议校验失败:${b.join(";")}`)}if(c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r,...u?{validationFailure:u}:{}}),(u||j.outputTruncated)&&(0,s.U5)(c.diagnostics,{system:a,prompt:v,raw:r,ordinal:p,callKind:c.callKind,validationFailure:u,outputTruncated:!!j.outputTruncated}),j.outputTruncated&&(0,q.jW)(c.diagnostics)){let a="供应商报告本次输出被截断;保留原始响应,暂停核查任务大小、实际思考及发送容量,不再次发送整包输入;默认容量截断不等于模型最大能力耗尽";c.outFailure&&Object.assign(c.outFailure,{value:a,code:"OUTPUT_TRUNCATED",outputTruncated:!0}),(0,q.wD)({nodeId:c.prefixKey??`llm:${c.callKind??"structured-generation"}`,title:c.callKind,turn:p+1,toolCalls:0,reason:a},"model-output-truncated");break}if(!u)return t;if(g=r,f=u,!function(a,b,c){if(!a)return;a.llm.schemaFailures=(a.llm.schemaFailures||0)+1,a.llm.lastError=b;let d=af(a,c);d.schemaFailures=(d.schemaFailures||0)+1}(c.diagnostics,u,c.prefixKey),(x||j.outputTruncated)&&(h=an(h)),p>=2){c.outFailure&&Object.assign(c.outFailure,{value:u,code:"JSON_VALIDATION_EXHAUSTED"});break}}}async function ap(a,b,c={}){return ao(a,b,c)}},41240:(a,b,c)=>{c.d(b,{E6:()=>f,Zw:()=>e});var d=c(76875);let e=["task","organization","labor","equipment","materials","schedule","deployment"];function f(a,b,c,g={}){let h=b.find(a=>a.id===c),i=a.tasks.find(a=>a.taskId===c);if(!h||!i)throw Error("共享工程计划查询不属于当前实际任务");let j=g.view??(/工资|实名|检验|储存|保管|安全管理|应急保障|管理制度/u.test(h.title)?"organization":/工期|进度|网络计划/u.test(h.title)?"schedule":/劳动力|工种|班组配置/u.test(h.title)?"labor":/机械|机具|设备配置/u.test(h.title)?"equipment":/材料|物资/u.test(h.title)?"materials":/部署|总体安排|组织安排/u.test(h.title)?"deployment":h.contentTypes.includes("schedule")?"schedule":"task");if(!e.includes(j))throw Error("共享工程计划查询视图无效");if(g.activityIds&&(!Array.isArray(g.activityIds)||!g.activityIds.length||g.activityIds.some(b=>!a.production.activities.some(a=>a.input.id===b))))throw Error("须使用共享计划目录中的真实活动身份");let k=a.production.activities.filter(b=>g.activityIds?g.activityIds.includes(b.input.id):"task"!==j||b.input.taskIndices.some(b=>a.tasks[b]?.taskId===c)),l=new Set(k.map(a=>a.input.id)),m=a.production.plannedResources.filter(a=>l.has(a.activityId)),n=[],o=new Map,p=(0,d.wp)(a.production,b.map(a=>a.id)).filter(a=>(!a.activityId||l.has(a.activityId))&&("task"===j||"organization"===j||"materials"===j?"task"===j:"window"===a.purpose||"organization"===a.purpose||a.purpose===j||"deployment"===j&&!a.activityId)).map(({taskIds:a,inputMemberIds:b,objectScope:c,basis:d,...e})=>{let f=o.get(d);return f||(f=`basis-${n.length}`,o.set(d,f),n.push({id:f,text:d})),{...e,basisId:f,...!e.activityId?{objectScope:c}:{}}}),q=k.map(a=>{if("task"===j)return a;let{input:b,status:c,startDay:d,endDay:e,startDate:f,endDate:g,durationDays:h,timeWindow:i,workTimeWindow:k,critical:l,floatDays:m}=a,n={id:b.id,phaseId:b.phaseId,objectScope:b.objectScope,workfront:b.workfront,status:c};return"organization"===j||"materials"===j?n:{...n,predecessors:b.predecessors,startDay:d,endDay:e,startDate:f,endDate:g,durationDays:h,timeWindow:i,workTimeWindow:k,critical:l,floatDays:m}}),r=m.map(a=>{let{activityId:b,phaseId:c,objectScope:d,workfront:e,basis:f}=a,g={activityId:b,phaseId:c,objectScope:d,workfront:e,basis:f};return"task"===j?a:"organization"===j||"materials"===j?{...g,trades:a.workers.map(a=>a.trade),equipment:a.equipment.map(({name:a,spec:b})=>({name:a,spec:b}))}:"labor"===j?{...g,crewId:a.crewId,crews:a.crews,shiftsPerDay:a.shiftsPerDay,workers:a.workers,countMeaning:"每日配置含不同轮班人员,非同时在岗峰值"}:"equipment"===j?{...g,crewId:a.crewId,crews:a.crews,equipment:a.equipment}:{...g,crewId:a.crewId,crews:a.crews,shiftsPerDay:a.shiftsPerDay,trades:a.workers.map(a=>a.trade),equipment:a.equipment.map(({name:a,spec:b})=>({name:a,spec:b}))}});return{id:a.id,contractId:a.contractId,projectSnapshotId:a.projectSnapshotId,phases:a.phases,activityDirectory:a.production.activities.map(({input:a})=>({id:a.id,phaseId:a.phaseId,objectScope:a.objectScope,workfront:a.workfront})),view:j,activities:q,plannedResources:r,numbers:p,bases:n,numberMeaning:"index指向同源完整数记录;活动对象见activityId对应活动,basisId见bases原文。对象与依据只存一份,不裁字;组织管理视图不要求数量。",..."schedule"===j||"deployment"===j||"task"===j?{calendar:a.production.calendar}:{},..."labor"===j?{labor:a.production.labor}:{},..."equipment"===j?{equipment:a.production.equipment}:{},..."materials"===j?{materials:a.production.materials.filter(a=>l.has(a.activityId)),materialStatus:"逐源用途记录,不等于已采用采购总量"}:{},issues:a.production.issues.filter(a=>!a.activityId||l.has(a.activityId)),scope:{taskId:c,activityIds:[...l],completeSelectedView:!0},task:i,interfaces:a.tasks.filter(a=>a.taskId!==c&&a.phaseIds.some(a=>i.phaseIds.includes(a))).map(({taskId:a,objectScope:b,boundary:c,handoffs:d})=>({taskId:a,objectScope:b,boundary:c,handoffs:d}))}}},42948:(a,b,c)=>{c.d(b,{Fr:()=>k,HM:()=>l,Hf:()=>n,tv:()=>m,wE:()=>o,yW:()=>p});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598);let i=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u,j=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function k(a,b){return b?`run:${b}:${a}`:a}function l(a,b,c){if(!j.test(b))throw Error("非法运行资产文件名");if(void 0!==c&&!i.test(c))throw Error("非法运行 ID");return c?g().join(a,"runs",c,"artifacts",b):g().join(a,"assets",b)}function m(a,b,c,d){let f=l(a,b,d),i=JSON.stringify(c);if(void 0===i)throw Error("运行资产不能是 undefined");e().mkdirSync(g().dirname(f),{recursive:!0});let j=`${f}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(j,i,{encoding:"utf8",flag:"wx"});try{if(d)try{e().linkSync(j,f)}catch(a){if("EEXIST"!==a.code)throw a;if(e().readFileSync(f,"utf8")!==i)throw Error(`运行资产已存在且内容不同:${d}/${b}`,{cause:a})}else e().renameSync(j,f)}finally{e().rmSync(j,{force:!0})}return{assetPath:f,bytes:Buffer.byteLength(i),sha256:(0,h.createHash)("sha256").update(i).digest("hex")}}function n(a){if(!a.runId)throw Error("实时模型进度必须绑定当前运行 ID");let b=l(a.generatedDir,"llm-live-progress.json",a.runId),c=JSON.stringify({...a.snapshot,version:1,runId:a.runId,documentId:a.documentId});e().mkdirSync(g().dirname(b),{recursive:!0});let d=`${b}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(d,c,{encoding:"utf8",flag:"wx"});try{e().renameSync(d,b)}finally{e().rmSync(d,{force:!0})}}function o(a,b){return b?[["run-start","run-start.json","本轮启动身份"],["run-inputs","run-inputs.json","本轮已准备输入快照"],["project-model","project-model.json","本轮写作与终检共用的项目事实快照"],["tender-requirements","tender-requirements.json","本轮原始招标条款、技术职责拆分、商务归宿及未裁决台账"],["document-contract","document-contract.json","本轮写作前冻结的职责、义务与七维评价合同"],["contract-ownership-plan","contract-ownership-plan.json","主控逐项确认事实、表格与交付义务的唯一主要责任小节"],["content-type-plan","content-type-plan.json","本轮主控对各节具体内容职责与适用类型的确认回执"],["contract-quality","contract-quality.json","本轮固定合同、项目快照和正文版本的七维评价回执"],["writing-task-hierarchy","writing-task-hierarchy.json","锁定交付小节与专业作者子任务之间的固定层级"],["chapter-writing-structures","chapter-writing-structures.json","本轮作者任务开始前的固定结构和内容职责"],["author-task-executions","author-task-executions.json","实际作者实例、委派任务、完整输入身份、执行终态与共用章节预算"],["author-accounting-final","author-accounting-final.json","同一合同跨续跑累计的调用、token、成本与章节预算消耗"],["author-candidates","author-candidates.json","本轮工具执行、自检、清理及重试前的原始模型返回索引"],["document-token-anomaly","document-token-anomaly.json","本轮无有效进展的重复模型消费与整份暂停回执;缺usage和供应商结算保持未知"],["document-model-final","document-model-final.json","本轮统一文档模型的最终版本与全部累计修改记录"],["contract-quality-c0","contract-quality-c0.json","固定首稿的完整七维评价,后续修改不能覆盖"],["contract-light-repair","contract-light-repair.json","统一预算内轻修的预检、提交结果与首稿通过读数"],["document-model-author","document-model-author.json","本轮固定任务的结构化作者模型、初始候选与累计修改账"],["blueprint","blueprint.json","本轮写作蓝图"],["requirement-assignments","requirement-assignments.json","本轮要求责任分配"],["structure-assignments","structure-assignments.json","本轮呈现要求分配"],["before-global-review","before-global-review.json","全文审查前章节快照(含章内重试,不等于原始首稿)"],["before-finalize","before-finalize.json","收口前章节快照"],["final-document","final-document.json","本轮最终内容快照"],["run-summary","run-summary.json","本轮阶段墙钟、调用用途与历史评分读数"]].flatMap(([c,d,f])=>{let g=l(a,d,b);if(!e().existsSync(g))return[];let i=(0,h.createHash)("sha256").update(e().readFileSync(g)).digest("hex");return[{id:k(c,b),artifactKind:c,type:"file",role:"attachment",path:g,sha256:i,runId:b,status:"generated",message:f}]}):[]}function p(a){if(!a.runId)return;let b=a.chapters.map(a=>({id:a.id,title:a.title,content:a.content,contentHash:(0,h.createHash)("sha256").update(a.content).digest("hex")}));m(a.generatedDir,`${a.stage}.json`,{version:1,runId:a.runId,documentId:a.documentId??null,stage:a.stage,capturedAt:Date.now(),chapters:b,...void 0!==a.markdown?{markdown:a.markdown}:{},rawFirstCandidate:!1},a.runId)}},43255:(a,b,c)=>{c.d(b,{X4:()=>j,Yn:()=>i});var d=c(77598),e=c(16646),f=c(55422);function g(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function h(a,b,c=!1){let d=new Map;for(let b of a.entries){if(!b.section)continue;let a=c?JSON.stringify([b.sourceFile,b.villageGroup,b.section]):b.section,e=d.get(a)||[];e.push(b),d.set(a,e)}let e=[],f=0;for(let a of d.values()){let c=g(a[0].section,a),d=a.some(a=>"unit-project"===a.sectionKind),h=[];if(d){let b=new Map;for(let d of a){let a=d.subsection||c,e=b.get(a)||[];e.push(d),b.set(a,e)}for(let[a,c]of b)h.push(k(g(a,c),c))}else h.push(k(c,a));f+=1,e.push({id:`${b}.${f}`,title:c,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),tablePlans:[],workPackages:h})}return e}function i(a){let{chapterTitles:b,boq:c}=a,d=b.map((b,d)=>{var e;let f=String(d+1),g=/主要分部分项|施工方案|施工方法/u.test(b)?h(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],subSections:g}}),e=h(c,"project",!0).flatMap(a=>a.workPackages),f=c.entries.filter(a=>!a.section);return f.length&&e.push(k("未分部清单记录",f)),{chapters:d,projectWorkPackages:e}}function j(a){return(0,d.createHash)("sha256").update(JSON.stringify([a.sourceFile,a.villageGroup,a.section,a.subsection,a.seq,a.code,a.name,a.description,a.unit,a.quantity,a.chunkIndex])).digest("hex")}function k(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},g=new Map;for(let a of c){if(!a.name)continue;let b=g.get(a.name)??new Map;b.set(a.unit,(b.get(a.unit)??0)+a.quantity),g.set(a.name,b)}for(let[a,b]of g)for(let[c,e]of b)d[b.size>1?`${a}(${c||"未注明单位"})`:a]={value:Math.round(1e3*e)/1e3,unit:c};let h=[...new Set(c.map(a=>a.name).filter(Boolean))],i=(0,f.lh)(c),k=[],l=new Set;for(let a of c){for(let b of(0,f.QU)(a.description)){let a=`${b.key}=${b.value}`;if(!l.has(a)&&(l.add(a),k.push({key:b.key,value:b.value,source:"boq"}),k.length>=24))break}if(k.length>=24)break}let m=[];for(let a of c)for(let b of(0,f.QU)(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&m.length<12&&!m.includes(b.value)&&m.push(b.value);let n=(0,e.cn)(c.map(a=>a.name)),o=[];for(let a of(0===m.length&&n.length>0&&m.push(...n[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),n.slice(0,2)))for(let b of a.standards)o.includes(b)||o.push(b);return{name:a,kind:"major",quantities:d,objectNames:h,methods:i,params:k,acceptance:m,standards:o,source:"boq",coveredSeqs:c.map(a=>a.seq),members:c.map(a=>({id:j(a),entry:{...a}}))}}},43967:(a,b,c)=>{c.d(b,{b:()=>g,jF:()=>h});let d=globalThis,e=d.__customizeStorageMaintenance??={active:!1};d.__customizeStorageApiWriters??=new Set;class f extends Error{constructor(){super("系统清空正在执行,暂不接收新的存储访问"),this.name="StorageMaintenanceError"}}function g(){return e.active}function h(){if(e.active)throw new f}},44616:(a,b,c)=>{c.d(b,{bV:()=>f,lu:()=>h,mk:()=>g});var d=c(63327);let e=new WeakMap;function f(a){let b=e.get(a);if(!b){let c=[...a.facts,...a.sourceControls??[]],f=[...new Set(c.filter(a=>"verified-source-excerpt"!==a.roleId).map(d.vg))].sort(),g=[...new Set(c.filter(a=>"verified-source-excerpt"===a.roleId).map(d.vg))].sort();b={facts:f,sources:g,factIndices:new Map(f.map((a,b)=>[a,b])),sourceIndices:new Map(g.map((a,b)=>[a,b]))},e.set(a,b)}return b}function g(a,b,c){let d=f(a);return{...b&&d.factIndices.has(b)?{factIndex:d.factIndices.get(b)}:{},...c&&d.sourceIndices.has(c)?{sourceIndex:d.sourceIndices.get(c)}:{}}}function h(a,b,c){let d="fact"===b?f(a).facts:f(a).sources;if(!Number.isSafeInteger(c)||0>Number(c)||Number(c)>=d.length)throw Error(`${"fact"===b?"属性":"原文"}引用序号不属于当前冻结项目`);return d[Number(c)]}},44736:(a,b,c)=>{c.d(b,{FP:()=>q,H0:()=>k,U2:()=>j,_e:()=>z,eb:()=>A,fN:()=>m,hg:()=>l,oN:()=>r});var d=c(77598),e=c(19898),f=c(70247);let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),h=a=>{let{rowSha256:b,...c}=a;return b===g(c)},i=a=>a.replace(/\s/gu,"");function j(a){let b=a.trim();if(!b.startsWith("|")||!b.endsWith("|"))return;let c=[],d="",e=!1;for(let a=1;a<b.length-1;a++){let f=b[a];"|"!==f||e?d+=f:(c.push(d.trim()),d=""),e="\\"===f&&!e}return c.push(d.trim()),c.length>=2?c:void 0}function k(a){let b=a[0]?.trim()??"";return/^(?:\d{1,3}(?:[..]\d{1,3}){1,4}|第[零一二三四五六七八九十百千\d]+[条款项])$/u.test(b)?b:void 0}function l(a,b,c){let{sha256:d,...f}=a;if("tender-native-file-proof-v1"!==a.version||a.file!==b||a.sourceChunkCount!==c||a.nativeLayoutVersion!==e.PDF_NATIVE_LAYOUT_VERSION||!/^[a-f0-9]{64}$/u.test(a.sourceSha256)||!/^[a-f0-9]{64}$/u.test(a.metadataSha256)||d!==g(f))throw Error("原生PDF表格文件证据身份不一致");return a.pages.flatMap(c=>{if(c.glyphSha256!==g(c.glyphs))throw Error("原生PDF字形回执不属于实际文件");if("fallback"===c.strategy)return[];if("ruled-cells"!==c.strategy)throw Error("原生PDF页面没有明确layout策略");let d=new Map(c.glyphs.map(a=>[a.id,a])),e=new Map,f=new Map;for(let a of c.cells){if(!Number.isSafeInteger(a.columnIndex)||a.columnIndex<0||!Number.isSafeInteger(a.columnSpan)||a.columnSpan<1||4!==a.bounds.length||!a.bounds.every(Number.isFinite)||a.bounds[0]>=a.bounds[2]||a.bounds[1]>=a.bounds[3])throw Error("原生表格物理合并单元格身份无效");for(let[b,c]of[[a.columnIndex,a.bounds[0]],[a.columnIndex+a.columnSpan,a.bounds[2]]]){let a=f.get(b);if(void 0!==a&&Math.abs(a-c)>1.5)throw Error("原生表格逻辑列与物理边界不一致");f.set(b,c)}let b=`${a.bounds[1]}:${a.bounds[3]}`;e.set(b,[...e.get(b)??[],a])}let h=[...e.values()].sort((a,b)=>b[0].bounds[3]-a[0].bounds[3]),i=Math.max(...c.cells.map(a=>a.columnIndex+a.columnSpan)),j=h.map(a=>{let b=Array(i).fill(""),c=0,e;for(let f of a.sort((a,b)=>a.columnIndex-b.columnIndex)){if(f.columnIndex!==c||void 0!==e&&Math.abs(f.bounds[0]-e)>1.5)throw Error("原生表格列范围重叠或缺失");c+=f.columnSpan,e=f.bounds[2],b[f.columnIndex]=f.glyphIds.map(a=>{let b=d.get(a);if(!b)throw Error("原生表格字形ID缺失");return b}).sort((a,b)=>2>=Math.abs(a.y-b.y)?a.x-b.x:b.y-a.y).map(a=>a.str).join("").replace(/\|/gu,"\\|")}if(c!==i)throw Error("原生表格列范围不完整");return b}),k=j[0]??[];return j.map((d,e)=>{let f={file:b,sourceSha256:a.sourceSha256,nativeProofSha256:a.sha256,page:c.page,row:e,rowCount:j.length,cells:d,bounds:h[e].map(a=>a.bounds),physicalCells:h[e],headers:k};return{...f,rowSha256:g(f)}})})}function m(a,b,c){let d=a.filter(a=>(void 0===c||a.page===c)&&a.cells.length===b.length&&a.cells.every((a,c)=>i(a)===i(b[c])));return 1===d.length?d[0]:void 0}let n=(a,b)=>{let c=j(b.rawText);return b.file===a.file&&!!c&&c.length===a.cells.length&&c.every((b,c)=>i(b)===i(a.cells[c]))},o=a=>(0,f.y)(a.map(({sourceGapBefore:a,sourceTableBridgeBefore:b,sourceNativeTextBridgeBefore:c,...d})=>d));function p(a,b){return h(a)&&h(b)&&a.file===b.file&&a.sourceSha256===b.sourceSha256&&a.nativeProofSha256===b.nativeProofSha256&&b.page===a.page+1&&a.row===a.rowCount-1&&1===b.row&&a.cells.length===b.cells.length&&a.cells.length>=2&&a.bounds.length===a.cells.length&&b.bounds.length===b.cells.length&&a.physicalCells.every((a,b)=>a.columnIndex===b&&1===a.columnSpan)&&b.physicalCells.every((a,b)=>a.columnIndex===b&&1===a.columnSpan)&&a.headers.length===b.headers.length&&a.headers.every((a,c)=>i(a)===i(b.headers[c]))&&a.bounds.every((a,c)=>1.5>Math.abs(a[0]-b.bounds[c][0])&&1.5>Math.abs(a[2]-b.bounds[c][2]))&&b.cells.slice(0,-1).every(a=>!i(a))&&!!i(b.cells.at(-1)??"")&&!!i(a.cells.at(-1)??"")&&!/[。!?!?;;][))】」》”’"']*$/u.test(a.cells.at(-1).trim())}function q(a,b,c,d){let{witnessSha256:e,...f}=a,h=d.flatMap((b,c)=>o([b])===a.fromSpanSha256?[c]:[]),i=d.flatMap((b,c)=>o([b])===a.toSpanSha256?[c]:[]),j=1===h.length&&1===i.length&&i[0]>=h[0]?d.slice(h[0],i[0]+1):[];if(!b||"native-table-page-bridge-v2"!==a.version||a.file!==c.file||a.file!==b.file||e!==g(f)||!p(a.from,a.to)||!j[0]||!j.at(-1)||!n(a.from,j[0])||!n(a.to,j.at(-1))||a.spansSha256!==o(j)||!j.includes(b)||!j.includes(c)||!a.transitions.some(a=>a.fromChunkIndex===b.chunkIndex&&a.toChunkIndex===c.chunkIndex&&a.fromChunkSha256===b.chunkSha256&&a.toChunkSha256===c.chunkSha256&&a.fromEnd===b.end&&a.toStart===c.start))throw Error("原生表格续行与完整layout/source spans证据不一致")}function r(a,b){let c=[...a];for(let a=0;a<c.length;a++){let d,e=c[a]?.nativeTableRow;if(!e)continue;let h=c.findIndex((b,c)=>c>a&&!!b.nativeTableRow&&0!==b.nativeTableRow.row&&b.file===e.file);if(h<0)continue;let k=c[h].nativeTableRow;if(!p(e,k)||c.slice(a+1,h).some(a=>a.nativeTableRow&&(0!==a.nativeTableRow.row||a.nativeTableRow.page!==k.page||a.nativeTableRow.nativeProofSha256!==e.nativeProofSha256)))continue;let l=a=>a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let b=a.trim(),c=j(b);return/^#{1,6}\s+(?:PDF 第\s*\d+\s*页|PDF 原生网格表格区域|-?\d+-?)$/u.test(b)||"|"===b||!!c&&(c.every(a=>/^:?-{3,}:?$/u.test(a))||c.every((a,b)=>a===`列${b+1}`)||c.every((a,b)=>i(a)===i(k.headers[b]??"")))});if(c.slice(a+1,h).some(a=>!l(a.sourceSpans?.map(a=>a.rawText).join("\n")??a.text)))continue;let m=c[a],q=c[h],r=m.sourceSpans?.at(-1),s=q.sourceSpans?.[0];if(!r||!s||void 0===r.chunkIndex||void 0===s.chunkIndex)continue;let t=b.filter(a=>a.file===e.file&&a.chunkIndex>r.chunkIndex&&a.chunkIndex<s.chunkIndex).sort((a,b)=>a.chunkIndex-b.chunkIndex);if(t.length!==s.chunkIndex-r.chunkIndex-1)continue;let u=b.find(a=>a.file===e.file&&a.chunkIndex===r.chunkIndex),v=b.find(a=>a.file===e.file&&a.chunkIndex===s.chunkIndex);if(!u||!v)continue;let w=[{chunk:u,start:r.end,end:u.text.length},...t.map(a=>({chunk:a,start:0,end:a.text.length})),{chunk:v,start:0,end:s.start}];if(w.some(a=>!l(a.chunk.text.slice(a.start,a.end))))continue;let x=[r,...w.filter(a=>a.chunk.text.slice(a.start,a.end).trim()).map(({chunk:a,start:b,end:c})=>({file:e.file,chunkIndex:a.chunkIndex,section:"PDF表格页间原始布局",chunkSha256:a.sha256,sourceStartChar:a.startChar,sourceEndChar:a.endChar,start:b,end:c,rawText:a.text.slice(b,c),text:a.text.slice(b,c)})),...q.sourceSpans];try{d=function(a,b,c){if(!p(a,b)||!c[0]||!c.at(-1)||!n(a,c[0])||!n(b,c.at(-1)))throw Error("没有相邻页同表同列续行证据");let d=[];for(let a=1;a<c.length;a++){let b=c[a-1],e=c[a];if(b.chunkIndex!==e.chunkIndex){if(void 0===b.chunkIndex||e.chunkIndex!==b.chunkIndex+1)throw Error("表格续行不能跳过未保全的parse chunk");d.push({fromChunkIndex:b.chunkIndex,toChunkIndex:e.chunkIndex,fromChunkSha256:b.chunkSha256,toChunkSha256:e.chunkSha256,fromEnd:b.end,toStart:e.start})}}let e={version:"native-table-page-bridge-v2",file:a.file,sourceSha256:a.sourceSha256,nativeProofSha256:a.nativeProofSha256,from:a,to:b,fromSpanSha256:o([c[0]]),toSpanSha256:o([c.at(-1)]),spansSha256:o(c),transitions:d};return{...e,witnessSha256:g(e)}}(e,k,x)}catch{continue}let y=[...m.sourceSpans,...x.slice(1).map((a,b)=>a.chunkIndex!==x[b].chunkIndex?{...a,sourceTableBridgeBefore:d}:a)];c.splice(a,h-a+1,{...m,text:y.map(a=>a.text).join("\n"),nativeTableRow:k,sourceSpans:y,sourceSpansSha256:(0,f.y)(y)}),a--}return c}let s=a=>/^-?\d{1,4}-?$/u.test(i(a)),t=a=>{let{lineSha256:b,...c}=a;return b===g(c)};function u(a){let{sha256:b,...c}=a;if(a.nativeLayoutVersion!==e.PDF_NATIVE_LAYOUT_VERSION||b!==g(c))throw Error("原生普通页文件证据身份不一致");return a.pages.flatMap(b=>{if(b.glyphSha256!==g(b.glyphs))throw Error("原生普通页glyph指纹不一致");let c=[];for(let a of[...b.glyphs].filter(a=>a.str.trim()).sort((a,b)=>b.y-a.y||a.x-b.x)){let b=c.find(b=>Math.abs(b.y-a.y)<=Math.max(2,.45*a.height));b?b.glyphs.push(a):c.push({y:a.y,glyphs:[a]})}return c.map((d,e)=>{d.glyphs.sort((a,b)=>a.x-b.x);let f=d.glyphs.filter(a=>/[A-Za-z\p{Script=Han}]/u.test(a.str)),h={file:a.file,sourceSha256:a.sourceSha256,nativeProofSha256:a.sha256,page:b.page,pageGlyphSha256:b.glyphSha256,line:e,lineCount:c.length,text:d.glyphs.map(a=>a.str).join("").replace(/\|/gu,"\\|"),glyphIds:d.glyphs.map(a=>a.id),x:d.glyphs[0].x,xEnd:Math.max(...d.glyphs.map(a=>a.x+a.width)),y:d.y,height:Math.max(...d.glyphs.map(a=>a.height)),columnGap:d.glyphs.some((a,b)=>b>0&&a.x-d.glyphs[b-1].x-d.glyphs[b-1].width>2*Math.max(a.height,d.glyphs[b-1].height)),fontNames:[...new Set((f.length?f:d.glyphs).flatMap(a=>a.fontName?[a.fontName]:[]))].sort()};return{...h,lineSha256:g(h)}})})}let v=(a,b,c)=>{let d=(a=>{let b=j(a.rawText);if(b){if(!b.slice(0,-1).every(a=>!i(a)))return;return b.at(-1)}return a.rawText.trim().replace(/^#{1,6}\s+/u,"")})(b);if(b.file!==a.file||void 0===d)return!1;let e=i(d),f=i(a.text);return!!f&&("start"===c?e.startsWith(f):e.endsWith(f))};function w(a,b){let c=a[0],d=b[0];return c&&d&&i(c.text)===i(d.text)&&1.5>Math.abs(c.x-d.x)&&1.5>Math.abs(c.y-d.y)&&1.5>Math.abs(c.height-d.height)&&c.fontNames.join("|")===d.fontNames.join("|")?i(c.text):void 0}function x(a,b,c,d,e){let f,g=w(c,d),j=c.filter(a=>!s(a.text)&&i(a.text)!==g),k=d.filter(a=>!s(a.text)&&i(a.text)!==g),l=1.5>Math.abs(a.xEnd-b.xEnd)&&a.x>b.x&&j.some(c=>c.line<a.line&&1.5>Math.abs(c.x-b.x)&&c.fontNames.join("|")===b.fontNames.join("|")),m=1.5>Math.abs(a.x-b.x)||l,n=!!e&&h(e)&&e.file===b.file&&e.sourceSha256===b.sourceSha256&&e.nativeProofSha256===b.nativeProofSha256&&e.page===b.page&&1===e.row&&e.cells.slice(0,-1).every(a=>!i(a))&&i(e.cells.at(-1)??"").startsWith(i(b.text));return t(a)&&t(b)&&a.file===b.file&&a.sourceSha256===b.sourceSha256&&a.nativeProofSha256===b.nativeProofSha256&&b.page===a.page+1&&a.line===j.at(-1)?.line&&b.line===k[0]?.line&&m&&2>Math.abs(a.height-b.height)&&!a.columnGap&&!b.columnGap&&(n||l||!j.some(a=>a.columnGap)&&!k.some(a=>a.columnGap))&&a.fontNames.join("|")===b.fontNames.join("|")&&(f=b.text,!/^(?:第[零一二三四五六七八九十百\d]+[章条节]|[((]?[一二三四五六七八九十百\d]+[))]|[一二三四五六七八九十百\d]+[..、])/u.test(f.trim()))&&!!i(a.text)&&!!i(b.text)&&!/[。!?!?;;::][))】」》”’"']*$/u.test(a.text.trim())}function y(a,b){let c=new Set([...b.fromPageLines,...b.toPageLines].filter(a=>s(a.text)).map(a=>i(a.text)));return a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let d=a.trim(),e=i(d.replace(/^#{1,6}\s+/u,"")),f=/^#{1,6}\s+PDF 第\s*(\d+)\s*页$/u.exec(d),g=j(d);return f?Number(f[1])===b.from.page||Number(f[1])===b.to.page:!!c.has(e)||!!b.repeatedHeader&&e===b.repeatedHeader||!!b.toGridRow&&(/^#{1,6}\s+PDF 原生网格表格区域$/u.test(d)||"|"===d||!!g&&g.length===b.toGridRow.cells.length&&(g.every(a=>/^:?-{3,}:?$/u.test(a))||g.every((a,b)=>a===`列${b+1}`)||g.every((a,c)=>i(a)===i(b.toGridRow.headers[c]??""))))})}function z(a,b,c,d){let{witnessSha256:e,...f}=a,h=function(a,b){let c=b.flatMap((b,c)=>o([b])===a.fromSpanSha256?[c]:[]),d=b.flatMap((b,c)=>o([b])===a.toSpanSha256?[c]:[]);return 1===c.length&&1===d.length&&d[0]>=c[0]?b.slice(c[0],d[0]+1):[]}(a,d);if(!b||"native-text-page-bridge-v1"!==a.version||a.file!==c.file||a.file!==b.file||e!==g(f)||!t(a.from)||!t(a.to)||a.to.page!==a.from.page+1||a.from.file!==a.file||a.to.file!==a.file||!a.fromPageLines.every(t)||!a.toPageLines.every(t)||a.repeatedHeader!==w(a.fromPageLines,a.toPageLines)||!x(a.from,a.to,a.fromPageLines,a.toPageLines,a.toGridRow)||a.from.sourceSha256!==a.sourceSha256||a.to.sourceSha256!==a.sourceSha256||a.from.nativeProofSha256!==a.nativeProofSha256||a.to.nativeProofSha256!==a.nativeProofSha256||!h[0]||!h.at(-1)||!v(a.from,h[0],"end")||!v(a.to,h.at(-1),"start")||a.toGridRow&&!n(a.toGridRow,h.at(-1))||a.spansSha256!==o(h)||!function(a,b,c,d){let e=d.indexOf(b);return!(e<0)&&d[e+1]===c&&void 0!==b.chunkIndex&&void 0!==c.chunkIndex&&!(c.chunkIndex<b.chunkIndex)&&!(c.chunkIndex>b.chunkIndex+1)&&(b.chunkIndex!==c.chunkIndex||b.chunkSha256===c.chunkSha256&&!(b.end>c.start))&&a.transitions.some(a=>a.fromChunkIndex===b.chunkIndex&&a.toChunkIndex===c.chunkIndex&&a.fromChunkSha256===b.chunkSha256&&a.toChunkSha256===c.chunkSha256&&a.fromEnd===b.end&&a.toStart===c.start)}(a,b,c,h)||h[0].chunkIndex===h.at(-1).chunkIndex&&(h.some(a=>a.chunkIndex!==h[0].chunkIndex||a.chunkSha256!==h[0].chunkSha256)||h.slice(1,-1).some(b=>!y(b.rawText,a))))throw Error("原生普通页续行与实际glyph/layout/source spans证据不一致")}function A(a,b,c,d){let e=c.flatMap(u),h=[...a],k=new Map,l=new Map,m=new Map,p=(a,b)=>JSON.stringify([a,b]);for(let a of e){let b=p(a.file,a.page);k.set(b,[...k.get(b)??[],a])}for(let a of[...b].sort((a,b)=>(a.file??"").localeCompare(b.file??"")||(a.chunkIndex??-1)-(b.chunkIndex??-1))){let b=a.file??"",c=[...a.text.matchAll(/^#{1,6}\s+PDF 第\s*(\d+)\s*页/gmu)].map(a=>({start:a.index,page:Number(a[1])}));l.set(p(b,a.chunkIndex),{initial:m.get(b),markers:c}),c.length&&m.set(b,c.at(-1).page)}let q=a=>{let b=l.get(p(a.file,a.chunkIndex));return b?.markers.filter(b=>b.start<a.start).at(-1)?.page??b?.initial},r=(a,b)=>(k.get(p(a.file,q(a)))??[]).filter(c=>v(c,a,b));for(let a=0;a<h.length;a++){let c=h[a],e=c.sourceSpans;if(!e)continue;let l=-1,m;for(let a=e.length-1;a>=0;a--){let b=r(e[a],"end").filter(a=>!s(a.text));if(1===b.length){l=a,m=b[0];break}}if(!m)continue;let t=k.get(p(m.file,m.page))??[],u=k.get(p(m.file,m.page+1))??[],z=w(t,u),A=u.find(a=>!s(a.text)&&i(a.text)!==z);if(!A)continue;let B=h.findIndex((b,c)=>c>a&&b.file===m.file&&b.sourceSpans?.[0]&&v(A,b.sourceSpans[0],"start")&&q(b.sourceSpans[0])===A.page);if(B<0)continue;let C=h[B],D=C.nativeTableRow,E=D&&1===D.row&&D.cells.slice(0,-1).every(a=>!i(a))&&C.sourceSpans?.[0]&&n(D,C.sourceSpans[0])?D:void 0;if(!x(m,A,t,u,E)||!E&&(C.clauseNo||C.sourceSpans?.[0]?.logicalBoundaryBefore||/^[^::,,。;;“”"'()()]{1,40}[::]/u.test(A.text)||d&&!d(c,C)))continue;let F=a=>a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let b=a.trim(),c=j(b),d=i(b.replace(/^#{1,6}\s+/u,""));return/^#{1,6}\s+(?:PDF 第\s*\d+\s*页|PDF 原生网格表格区域|-?\d+-?)$/u.test(b)||s(d)||!!z&&d===z||!!E&&"|"===b||!!c&&(c.every(a=>/^:?-{3,}:?$/u.test(a))||c.every((a,b)=>a===`列${b+1}`)||!!z&&i(c.join(""))===z)});if(h.slice(a+1,B).some(a=>!F(a.sourceSpans?.map(a=>a.rawText).join("\n")??a.text))||e.slice(l+1).some(a=>!F(a.rawText)))continue;let G=h[B],H=G.sourceSpans?.[0],I=e.at(-1);if(!H||!I||void 0===H.chunkIndex||void 0===I.chunkIndex||H.chunkIndex<I.chunkIndex)continue;let J=b.filter(a=>a.file===m.file&&a.chunkIndex>I.chunkIndex&&a.chunkIndex<H.chunkIndex).sort((a,b)=>a.chunkIndex-b.chunkIndex);if(J.length!==Math.max(0,H.chunkIndex-I.chunkIndex-1))continue;let K=b.find(a=>a.file===m.file&&a.chunkIndex===I.chunkIndex),L=b.find(a=>a.file===m.file&&a.chunkIndex===H.chunkIndex);if(!K||!L)continue;let M=I.chunkIndex===H.chunkIndex?[{chunk:K,start:I.end,end:H.start}]:[{chunk:K,start:I.end,end:K.text.length},...J.map(a=>({chunk:a,start:0,end:a.text.length})),{chunk:L,start:0,end:H.start}];if(M.some(a=>a.end<a.start||!F(a.chunk.text.slice(a.start,a.end))))continue;let N=M.filter(a=>a.chunk.text.slice(a.start,a.end).trim()).map(({chunk:a,start:b,end:c})=>({file:m.file,chunkIndex:a.chunkIndex,section:"PDF普通页间原始布局",chunkSha256:a.sha256,sourceStartChar:a.startChar,sourceEndChar:a.endChar,start:b,end:c,rawText:a.text.slice(b,c),text:a.text.slice(b,c)})),O=[...e.slice(l),...N,H],P=[],Q=!0,R=I.chunkIndex===H.chunkIndex;for(let a=1;a<O.length;a++){let b=O[a-1],c=O[a];if(b.chunkIndex!==c.chunkIndex||R){if(void 0===b.chunkIndex||void 0===c.chunkIndex||c.chunkIndex<b.chunkIndex||c.chunkIndex>b.chunkIndex+1||b.chunkIndex===c.chunkIndex&&(b.chunkSha256!==c.chunkSha256||b.end>c.start)){Q=!1;break}P.push({fromChunkIndex:b.chunkIndex,toChunkIndex:c.chunkIndex,fromChunkSha256:b.chunkSha256,toChunkSha256:c.chunkSha256,fromEnd:b.end,toStart:c.start})}}if(!Q)continue;let S={version:"native-text-page-bridge-v1",file:m.file,sourceSha256:m.sourceSha256,nativeProofSha256:m.nativeProofSha256,from:m,to:A,fromPageLines:t,toPageLines:u,...E?{toGridRow:E}:{},...z?{repeatedHeader:z}:{},fromSpanSha256:o([O[0]]),toSpanSha256:o([O.at(-1)]),spansSha256:o(O),transitions:P},T={...S,witnessSha256:g(S)};if(R&&O.slice(1,-1).some(a=>!y(a.rawText,T)))continue;let U=[...N,H],V=[...e,...U.map((a,b)=>R||a.chunkIndex!==(b?U[b-1]:I).chunkIndex?{...a,sourceNativeTextBridgeBefore:T}:a),...G.sourceSpans.slice(1)];h.splice(a,B-a+1,{...c,text:V.map(a=>a.text).join("\n"),sourceSpans:V,sourceSpansSha256:(0,f.y)(V)}),a--}return h}},45455:(a,b,c)=>{c.d(b,{Bj:()=>j,xj:()=>i});var d=c(77598);let e=new Set(["decisionId","requestId","toolCallId","capturedAt","recordedAt","startedAt","endedAt","finishedAt","elapsedMs","durMs","queryTimeMs"]);function f(a){return Array.isArray(a)?a.map(f):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).filter(([a])=>!e.has(a)).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>[a,f(b)])):a}let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(f(a))).digest("hex"),h=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function i(a){return a.flatMap(a=>{let b=h(a.data);if(!a.ok||!b)return[];let c=h(b.directoryState);if("query_cad_context"===a.toolName&&["frames","instances"].includes(String(b.kind))&&c?.scope==="indexed-cad-directory"&&!0===c.complete&&0===c.recordCount&&"string"==typeof b.parsedIdentity&&"string"==typeof b.filePath)return[g(["empty-cad-directory",b.projectSnapshotId,b.filePath,b.parsedIdentity,b.kind])];if("ask_chief"===a.toolName){if("model"!==b.source)return[];let a=Object.fromEntries(("use-facts"===b.action?["factIds"]:"use-sources"===b.action?["sourceIds"]:"engineering-controls"===b.action?["controls","writingControls"]:"qualitative-controls"===b.action?["qualitativeControls"]:[]).filter(a=>Array.isArray(b[a])&&b[a].length>0).map(a=>[a,b[a]]));return Object.keys(a).length?[g(["chief-decision",b.taskId,b.action,a])]:[]}let d=Object.fromEntries(("query_construction_plan"===a.toolName?["activities","plannedResources","numbers","materials"]:"query_project_facts"===a.toolName?["candidates","sourceEvidence"]:"query_cad_context"===a.toolName?["records"]:"query_source_units"===a.toolName?["units"]:"read_source"===a.toolName?["chunks"]:["search_evidence","query_work_packages","discover_files"].includes(a.toolName)?["items"]:"list_skills"===a.toolName?["skills"]:"match_skills"===a.toolName?["matched"]:[]).flatMap(c=>{if(!Array.isArray(b[c]))return[];let d=b[c].filter(b=>{let c=h(f(b));return!!c&&!!Object.keys(c).length&&("read_source"!==a.toolName&&"search_evidence"!==a.toolName||"string"==typeof c.content&&!!c.content.trim())}),e="search_evidence"===a.toolName?d.map(a=>Object.fromEntries(Object.entries(h(a)).filter(([a])=>!["score","rank","retrievalRank","retrievalScore"].includes(a)))):d;return e.length?[[c,e]]:[]}));"load_skill"===a.toolName&&h(b.skill)&&(d.skill=b.skill);let e=Object.fromEntries(["snapshotId","projectSnapshotId","contractId",..."query_construction_plan"===a.toolName?["id"]:[],"filePath","relativePath","parsedIdentity","sceneVersion","kind","frameId","rootInstanceId","units","metadata","sourceVersionEligibility"].filter(a=>void 0!==b[a]).map(c=>[c,"metadata"===c&&"read_source"===a.toolName&&h(b[c])?Object.fromEntries(Object.entries(h(b[c])).filter(([a])=>!["mtime","indexedAt"].includes(a))):b[c]])),i=Object.entries(d).flatMap(([c,d])=>(Array.isArray(d)?d:[d]).map(d=>{let f=h(d);if("query_project_facts"===a.toolName&&f?.factId&&"verified-source-excerpt"!==f.roleId)return g(["project-fact",b.snapshotId??b.projectSnapshotId,f.factId,f.value,f.controlContext??null,h(f.sourceVersionEligibility)?.status??null]);if("query_project_facts"===a.toolName&&f&&(f.sourceEvidenceId||"verified-source-excerpt"===f.roleId))return g(["source-excerpt",b.snapshotId??b.projectSnapshotId,f.sourceEvidenceId??f.factId,f.value]);let i="query_construction_plan"===a.toolName&&"numbers"===c&&f?Object.fromEntries(Object.entries(f).filter(([a])=>"basisId"!==a)):d;return g(["source-material",a.toolName,e,c,i])}));return Number.isSafeInteger(b.offset)&&Number.isSafeInteger(b.nextOffset)&&Number(b.nextOffset)>Number(b.offset)&&i.push(g(["source-cursor",a.toolName,e,{offset:b.offset,nextOffset:b.nextOffset}])),i})}async function j(a){let b,{budget:c}=a,e=[...a.initialMessages],f=0,h=0,j="模型未产出可用正文",k="turns-exhausted",l=new Set(i(a.initialEvidence??[])),m=new Set,n=0,o=!1;for(let p=1;void 0===c.maxTurnsPerBlock||p<=c.maxTurnsPerBlock;p+=1){if(void 0!==c.maxToolCallsPerBlock&&f>=c.maxToolCallsPerBlock){j=`显式工具调用预算耗尽(${f}/${c.maxToolCallsPerBlock})`,k="tool-budget-exhausted";break}let q=await a.runTurn({system:a.system,messages:e,turn:p,...void 0!==c.maxToolCallsPerBlock?{toolCallLimit:Math.max(0,c.maxToolCallsPerBlock-f)}:{}});if(h=p,f+=q.toolCalls.length,q.refused)return a.onTurn?.({turn:p,residual:b?.residual??0,toolCalls:f,action:"unfixable"}),b?{kind:"unfixable",content:b.content,turn:p,residual:b.residual,toolCalls:f,reason:q.refused.message,issues:[],cause:"budget-refused"}:{kind:"budget_refused",turn:p,reason:q.refused.message,refused:q.refused};let r=i(q.toolResults??[]);q.protocolRecovery?.sentOutputBudget!==null&&q.protocolRecovery?.sentOutputBudget!==void 0&&r.push(g(["protocol-recovery",q.protocolRecovery.sentOutputBudget])),!o&&q.protocolRecovery?.kind==="invalid-tool-arguments"&&q.toolMessages?.some(a=>"assistant"===a.role&&a.toolCalls?.some(a=>"submit_author_task"===a.name))&&q.toolMessages.some(a=>"tool"===a.role&&a.content)&&(o=!0,r.push(g(["first-author-submission-syntax-feedback"])));let s=r.some(a=>!l.has(a));r.forEach(a=>l.add(a)),s&&(n=0);let t=q.committed||q.text;if(t?.trim()){let c=await a.check(t),g=c.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length;if(c.degraded.length>0&&!c.executed.length)return a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:t,turn:p,residual:g,toolCalls:f,reason:`自查维度全部降级(${c.degraded.join("、")}),本块未做自查,保留当前草稿`,issues:c.issues,cause:"checks-degraded"};if(0===g&&!c.degraded.length)return a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"commit"}),{kind:"passed",content:t,turn:p,residual:g,toolCalls:f};let h=(0,d.createHash)("sha256").update(JSON.stringify([t,c])).digest("hex"),i=m.has(h);if(m.add(h),(!b||g<b.residual)&&(b={content:t,residual:g}),i&&!s){j="相同候选与裁决重复,未取得新证据或改善",k="no-progress";break}a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"regenerate"}),e=[...e,...q.toolMessages??[],{role:"assistant",content:t},{role:"user",content:function(a){let b=a.filter(a=>"error"===a.level||"blocker"===a.severity),c=b.slice(0,12).map((a,b)=>`${b+1}. ${a.detectorId?`[${a.detectorId}] `:""}${a.message}`),d=b.slice(12),e=new Map;for(let a of d){let b=a.detectorId||"(未标注判据)";e.set(b,(e.get(b)||0)+1)}return["【自查裁决】本稿未通过判据,下列问题必须修正后重新输出完整本节正文:",...c,d.length>0?`${d.length} 条未逐条列出,按判据分布:${[...e.entries()].map(([a,b])=>`${a} ${b} 条`).join("、")}`:"","修正要求:直接输出修正后的**完整**本节正文(不要只输出改动片段、不要解说改动过程);保留原有事实、数值与结论,不得以删除内容的方式规避问题。"].filter(Boolean).join("\n")}(c.issues)}];continue}let u=q.toolMessages??[];if(s)e=[...e,...u];else{let a=++n;if(a>=3){j="相同无进展状态在具体反馈后仍未取得新证据、游标或主控决定",k="no-progress";break}e=[...e,...u,{role:"user",content:1===a?"本轮没有新增可用来源、分页游标或已接受的主控决定。原始工具回执已保留;空结果或失败不证明资料缺失,也不能用改查询词、调用ID或再报缺来冒充进展。请依据已取得的资料换用有实际依据的工具/继续真实nextOffset,或向已接线的主控说明具体对象、已查范围与失败;若仍无法核定,保留真实decisionRequests并提交已能完成的正文,不编造参数或条件。":"再次没有新增证据。立即停止重复取证:把已能完成的正文按协议提交(未决事项写入decisionRequests保留),拟定配置按工程经验带依据给出(正文标“拟定”并登记plannedNumbers);继续同类工具调用不会产生新证据。"}]}void 0!==c.maxTurnsPerBlock&&p>=c.maxTurnsPerBlock&&(j="显式轮次预算耗尽,模型尚未提交正文")}return b?(a.onTurn?.({turn:h,residual:b.residual,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:b.content,turn:h,residual:b.residual,toolCalls:f,reason:j,issues:[],cause:k}):{kind:"no_content",turn:h,toolCalls:f,reason:j,cause:k}}},47262:(a,b,c)=>{function d(a){let b=e()?.semanticFingerprints?.[a];return"string"==typeof b&&/^[a-f0-9]{64}$/u.test(b)?b:void 0}function e(){let a='{"version":1,"sourceFingerprint":"3758d6b30df49605aef4791c994f3e5ea9c954d1cec254897982ed7bfa5a7c0b","semanticFingerprints":{"projectFacts":"1814387fa5c50e4fdff0e1b004f71795c22ff3aa04acc53b12b2bda66827187b","documentGeneration":"efb57602971f16e5733cec35be93d8c73d079efcf14ef3d575094365e24014f0"},"gitCommit":"82187edcb3aa150025bbea451536ec5f7ab3c3ea","serverVersion":"4.60.29","sourceFiles":747,"capturedAt":"2026-10-14T08:06:51.770Z"}';if(a)try{let b=JSON.parse(a);if(1!==b.version||!/^[a-f0-9]{64}$/u.test(b.sourceFingerprint??"")||"string"!=typeof b.serverVersion||"number"!=typeof b.sourceFiles||"string"!=typeof b.capturedAt||null!==b.gitCommit&&"string"!=typeof b.gitCommit)return;return b}catch{return}}c.d(b,{C:()=>d,S:()=>e})},48825:(a,b,c)=>{c.d(b,{Jf:()=>j,V2:()=>i,bp:()=>d,wJ:()=>e});let d="professional-writing-guidance-v4-responsibility-titles-2026-10-13",e={building:{fileName:"施工组织设计章节写作分析与编制规范(建筑).docx",sha256:"9313607509897e9a252cdefd671c4c72025d2727411972788bfa61b9835a0ff2",pages:12},municipal:{fileName:"施工组织设计章节写作分析与编制规范(市政).docx",sha256:"8e36d97e7084464ab04776093550e10984d3ac4a2a64ac37d5ca74a13a3ccc82",pages:13},bidWriting:{fileName:"技术标写作指南(合肥AI评标).docx",sha256:"3f36e67531da8ac9ffb1847694403ec4246457e445612767b3a82acf02894d0e"},bidReview:{fileName:"青天大模型AI评标规则考证(2026-10-11).docx",sha256:"de976918a1a0f1486cb07e1c2fd4a72a3b86fa480cbd46353f4c1af372badc69"}},f=["先形成工程对象、工作包、部署、资源及时间的共同推演,再按交付目录组织成文。事实、数量、工作面、部位、班组、节点在各章共用稳定身份,作者不各自编数字。","功能职责不等于固定章节:概况解释条件与影响,部署决定空间和顺序,方法说明实施,质量说明检查,安全说明风险与处置,进度说明时间,平面说明现场组织,移交说明最终闭环。推荐母目录不覆盖招标或用户锁定结构。","工作包数量与方法连通,方法与资源连通,资源与工期迭代校核;材料到货早于使用,检测和必要等待进入转序与时间逻辑。同一机械或班组同期不能在不同工作面重复占用。","施工方法、部署、真正重难点与进度应充分展开;人材机重点算准,管理计划重点完成执行闭环,概况与编制依据保持准确简洁。详略按职责和风险,不按统一字数、参数密度或固定图表数量。","表格按真实数据形态选择:单项目多属性用“信息项—内容”纵向或按属性含义分组;多对象在相同指标下比较、配置或排程时才横向展开。字段宽度应容纳完整对象、控制数值和单位,不能把大量无比较目的的属性铺成十几列单行,或把长范围原文挤进窄格。真实阶段或对象矩阵需要宽表时保留全部字段与对应关系,按职责合理分组,不设置固定列数上限、不强制各章制表,不删表行、数值或对象迎合评价。","项目事实依据与技术规范依据分别治理;前者确定实际工程,后者核验控制与验收。核验规范编号、名称、实施日期、状态、替代及局部废止和对象范围;参考文件列出的编号不等于本次已验证有效。","计算、产能假设和规范查证保留内部审计,正文交付核定的配置与控制结果及必要实施条件,不堆算式和来源说明。引用规范仅限确有技术参数、验收或强制边界需要的地方。","首稿采用专业短句和必要分点:条件决定方法,动作达到可检状态,状态放行下一工序。正文工序名不以箭头串替代实施方法;实际流程图和活动网络保留其关系,图后不逐节点逐连线重复全文。","技能主题是规划参考,不是必须照抄的交付标题。主控按本工程对象及被委派职责拟定正式小节名称,避免把“候选、核验责任、适用性”这类内部判断任务直接当目录;真正承担辨识、核查职责时使用完整专业名称。专业标题说明工程对象、方法或组织职责,不拼接关键词、不照抄内部评审标签。正常技术名称重复不导致丢弃、换名或重写;同项目再次编制仍以实际条件和方案质量为准。","写作指南中的样本统计只提供观察线索,不构成评分算法;图片数、箭头数、元数据软件、标题关键词和入围差值不授予质量或真实性。项目实际要求与专业适用规则优先,不为低频统计删去必要风险和接口。"],g={building:"建筑工程按实际楼栋、楼层、流水段和专业接口组织;地下结构、主体、围护装修、机电与室外的先后和移交要一致。不能把房建通用专业强行加入实际没有的工程。",municipal:"市政按真实路线、桩号、区段和工作面组织,明确起点、推进方向、地下与地上转序;涉及社会交通时,导改、围挡、施工阶段、居民出行与施工车辆路线联动。场内便道与场外交通分开。"},h=[{id:"overview",label:"项目理解",match:/概况|项目理解|整体理解|现场条件|工程清单|专业构成/u,buildingPages:[2],municipalPages:[2],guidance:"给出事实及其对施工组织的影响,按专业呈现必要工程量;不复制设计说明、不提前展开工艺,不以无来源地质、距离或道路数据制造针对性。"},{id:"deployment",label:"总体部署",match:/总体部署|施工部署|流水段|工作面|施工区段|施工顺序/u,buildingPages:[2,3],municipalPages:[2,3],guidance:"明确区段和工作面对应哪些任务及工程量、划分理由、起点、方向、先后与穿插、专业移交条件。后续方法、资源和进度必须能从部署找到组织依据。"},{id:"difficulties",label:"重难点",match:/重难点|重点难点|项目特点|制约因素/u,buildingPages:[3,4],municipalPages:[3,4],guidance:"由真实项目证据辨识制约因素,解释原因和后果,给出技术组织、资源、检查及异常处置;只深写真正核心问题,并在相关方法、质量、安全或工期中闭合。"},{id:"method",label:"施工方法",match:/工艺|工法|施工方法|施工技术|浇筑|开挖|吊装|安装|支模/u,buildingPages:[4,5],municipalPages:[4,5],guidance:"对本节实际承担的分项写清对象和工作量、前提、顺序、步骤、材料机具工种、控制、接口、检查、异常和转序。普通工序可组织可检查,核心工序达到必要技术策划深度;不把施组全文变成专项计算书。"},{id:"materials",label:"材料供应",match:/材料|物资|永久设备|供应|采购|人材机/u,buildingPages:[5],municipalPages:[5],guidance:"数量由实际工程量或可靠换算取得,供应与工作面及使用窗口衔接;长周期构件设备串联确认、采购、到货和安装。区分施工机械与永久设备、产品标准与验收标准;不能可靠换算时不假算。"},{id:"equipment",label:"机械与仪器",match:/机械|机具|检测仪器|人材机|确保机/u,buildingPages:[5,6],municipalPages:[5,6],guidance:"关键机械以工作量、可用作业窗口、实际单机或机组能力核定数量,检查同期占用和转场。检测仪器服务实际检验。运距未知不能虚构运输循环时间;算式留审计,不抄经验台数。"},{id:"labor",label:"劳动力",match:/劳动力|班组|工种|人材机|确保人/u,buildingPages:[6,7],municipalPages:[6],guidance:"以班组、工作面、阶段和工种组织投入,核算工作量、工日和持续时间;峰值由实际同期工种矩阵求得,不能相加各专业独立峰值。配置与特种作业必须符合真实任务。"},{id:"quality",label:"质量控制",match:/质量|检验|检测|隐蔽验收|复试|样板|三检/u,buildingPages:[7],municipalPages:[6,7],guidance:"围绕真实实体写检查对象、指标、方法、适用频次、岗位、记录、不合格处置、复验和销项;合格后才转序。方法章写实施,质量章写核验,避免再抄一遍工艺。"},{id:"safety",label:"风险安全与应急",match:/危大|危险源|风险|安全|应急|专项方案|论证/u,buildingPages:[7,8],municipalPages:[7,8],guidance:"实际作业、实体参数和影响对象支撑风险与危大判定,不能靠关键词。承担现场控制时给出作业条件、停止触发、监测和处置;辨识或审核子任务只承担其边界,完整应急由被委派任务负责。"},{id:"schedule",label:"进度组织",match:/进度|工期|节点|施工计划|施工窗口|确保人|确保机/u,buildingPages:[8,9],municipalPages:[8,9],guidance:"共同任务网络连接工作量、工作面、综合能力、材料到货、必要等待、检测与转序。开始结束和搭接可复核,关键路线由逻辑计算,不将箭头示意当网络计划。进度、正文与资源共用同一时间数据。"},{id:"environment",label:"环境与外部运行",match:/文明|环境|环保|扬尘|噪声|校园秩序|交通|既有|保护/u,buildingPages:[9],municipalPages:[9],guidance:"针对实际居民、校园、生产、交通、水体或既有设施说明影响、控制、检查责任及恢复;地方措施需按属地核验,不无条件复制某城市标准。涉及既有设施先调查再分析保护监测。"},{id:"site-layout",label:"现场空间组织",match:/总平面|平面布置|临时设施|临设|运输路线|便道|便桥/u,buildingPages:[9,10],municipalPages:[9,10],guidance:"按实际场地边界和阶段部署布置物流、堆场、机具、水电排水、消防及出入口,检查真实可通行与转场条件。缺尺寸不编坐标;必要实体决定未完成时由主控解决,不用模糊正文冒充已落地。"},{id:"handover",label:"验收恢复移交",match:/竣工|移交|交付|保修|缺陷责任|退场|恢复/u,buildingPages:[10],municipalPages:[10,11],guidance:"从已施工实体与系统反推检查、调试、整改复验、资料、培训和移交。市政还核对道路、交通、绿化及临设恢复;过程隐蔽验收不重复承担整套竣工移交。"}];function i(a){let b="building"===a||"municipal"===a?g[a]:"工程类型未确认时只使用共同写作原则,不能默认套用市政或房建专业条件。";return`【编制规范萃取 ${d},是写作方法先验,不是项目事实或已核现行标准】
|
|
126
|
+
${JSON.stringify({priorRaw:l,validationFailure:m,currentSchema:n??null})}`);try{r=await D(()=>k(a,v),c.signal)}catch(a){if(c.signal?.aborted){let a=A(c.signal);throw c.outFailure&&Object.assign(c.outFailure,{value:a.message,code:C(a)}),d&&"AbortError"!==a.name&&V(c.diagnostics,a,B(a)),a}throw a}if(!r){c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r});let b=j.value?j:{value:"本次调用未返回模型内容;没有本次传输回执,不借用其他调用的故障",code:"EMPTY_OUTPUT"};c.outFailure&&Object.assign(c.outFailure,b);break}let w=al(r),x=!1;try{t=(0,e.parseJsonWithoutDuplicateKeys)(w)}catch(b){let a=b instanceof e.DuplicateJsonKeyError?b.message:function(a){let b=al(a),c=(b.match(/\{/gu)||[]).length-(b.match(/\}/gu)||[]).length,d=(b.match(/\[/gu)||[]).length-(b.match(/\]/gu)||[]).length,e=b.slice(-80).replace(/\s+/gu," ");return c>0||d>0?`JSON 被截断({ 未闭合 ${c} 个、[ 未闭合 ${d} 个),截断位置响应末段:${e}`:`JSON 语法错误,出错位置响应末段:${e}`}(w);u=`JSON 解析失败:${a}`,x=a.startsWith("JSON 被截断(")}if(!u&&c.schema){let a=[],b=am(t,c.schema,a);o=c.diagnostics,o&&0!==a.length&&(o.llm.lastInfo=`JSON Schema 超限拒收:${a.slice(0,4).map(a=>`${a.path} ${a.originalLength} 条超上限 ${a.maxItems},完整数组保留并拒收`).join(";")}`),b.length&&(u=`JSON Schema 校验失败:${b.join(";")}`)}if(!u&&c.validateProtocol){let b;try{b=c.validateProtocol(structuredClone(t))}catch(b){throw c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r}),b}b.length&&(u=`JSON 关联协议校验失败:${b.join(";")}`)}if(c.onAttempt?.({ordinal:p,system:a,prompt:v,raw:r,...u?{validationFailure:u}:{}}),(u||j.outputTruncated)&&(0,s.U5)(c.diagnostics,{system:a,prompt:v,raw:r,ordinal:p,callKind:c.callKind,validationFailure:u,outputTruncated:!!j.outputTruncated}),j.outputTruncated&&(0,q.jW)(c.diagnostics)){let a="供应商报告本次输出被截断;保留原始响应,暂停核查任务大小、实际思考及发送容量,不再次发送整包输入;默认容量截断不等于模型最大能力耗尽";c.outFailure&&Object.assign(c.outFailure,{value:a,code:"OUTPUT_TRUNCATED",outputTruncated:!0}),(0,q.wD)({nodeId:c.prefixKey??`llm:${c.callKind??"structured-generation"}`,title:c.callKind,turn:p+1,toolCalls:0,reason:a},"model-output-truncated");break}if(!u)return t;if(g=r,f=u,!function(a,b,c){if(!a)return;a.llm.schemaFailures=(a.llm.schemaFailures||0)+1,a.llm.lastError=b;let d=af(a,c);d.schemaFailures=(d.schemaFailures||0)+1}(c.diagnostics,u,c.prefixKey),(x||j.outputTruncated)&&(h=an(h)),p>=2){c.outFailure&&Object.assign(c.outFailure,{value:u,code:"JSON_VALIDATION_EXHAUSTED"});break}}}async function ap(a,b,c={}){return ao(a,b,c)}},41240:(a,b,c)=>{c.d(b,{E6:()=>f,Zw:()=>e});var d=c(76875);let e=["task","organization","labor","equipment","materials","schedule","deployment"];function f(a,b,c,g={}){let h=b.find(a=>a.id===c),i=a.tasks.find(a=>a.taskId===c);if(!h||!i)throw Error("共享工程计划查询不属于当前实际任务");let j=g.view??(/工资|实名|检验|储存|保管|安全管理|应急保障|管理制度/u.test(h.title)?"organization":/工期|进度|网络计划/u.test(h.title)?"schedule":/劳动力|工种|班组配置/u.test(h.title)?"labor":/机械|机具|设备配置/u.test(h.title)?"equipment":/材料|物资/u.test(h.title)?"materials":/部署|总体安排|组织安排/u.test(h.title)?"deployment":h.contentTypes.includes("schedule")?"schedule":"task");if(!e.includes(j))throw Error("共享工程计划查询视图无效");if(g.activityIds&&(!Array.isArray(g.activityIds)||!g.activityIds.length||g.activityIds.some(b=>!a.production.activities.some(a=>a.input.id===b))))throw Error("须使用共享计划目录中的真实活动身份");let k=a.production.activities.filter(b=>g.activityIds?g.activityIds.includes(b.input.id):"task"!==j||b.input.taskIndices.some(b=>a.tasks[b]?.taskId===c)),l=new Set(k.map(a=>a.input.id)),m=a.production.plannedResources.filter(a=>l.has(a.activityId)),n=[],o=new Map,p=(0,d.wp)(a.production,b.map(a=>a.id)).filter(a=>(!a.activityId||l.has(a.activityId))&&("task"===j||"organization"===j||"materials"===j?"task"===j:"window"===a.purpose||"organization"===a.purpose||a.purpose===j||"deployment"===j&&!a.activityId)).map(({taskIds:a,inputMemberIds:b,objectScope:c,basis:d,...e})=>{let f=o.get(d);return f||(f=`basis-${n.length}`,o.set(d,f),n.push({id:f,text:d})),{...e,basisId:f,...!e.activityId?{objectScope:c}:{}}}),q=k.map(a=>{if("task"===j)return a;let{input:b,status:c,startDay:d,endDay:e,startDate:f,endDate:g,durationDays:h,timeWindow:i,workTimeWindow:k,critical:l,floatDays:m}=a,n={id:b.id,phaseId:b.phaseId,objectScope:b.objectScope,workfront:b.workfront,status:c};return"organization"===j||"materials"===j?n:{...n,predecessors:b.predecessors,startDay:d,endDay:e,startDate:f,endDate:g,durationDays:h,timeWindow:i,workTimeWindow:k,critical:l,floatDays:m}}),r=m.map(a=>{let{activityId:b,phaseId:c,objectScope:d,workfront:e,basis:f}=a,g={activityId:b,phaseId:c,objectScope:d,workfront:e,basis:f};return"task"===j?a:"organization"===j||"materials"===j?{...g,trades:a.workers.map(a=>a.trade),equipment:a.equipment.map(({name:a,spec:b})=>({name:a,spec:b}))}:"labor"===j?{...g,crewId:a.crewId,crews:a.crews,shiftsPerDay:a.shiftsPerDay,workers:a.workers,countMeaning:"每日配置含不同轮班人员,非同时在岗峰值"}:"equipment"===j?{...g,crewId:a.crewId,crews:a.crews,equipment:a.equipment}:{...g,crewId:a.crewId,crews:a.crews,shiftsPerDay:a.shiftsPerDay,trades:a.workers.map(a=>a.trade),equipment:a.equipment.map(({name:a,spec:b})=>({name:a,spec:b}))}});return{id:a.id,contractId:a.contractId,projectSnapshotId:a.projectSnapshotId,phases:a.phases,activityDirectory:a.production.activities.map(({input:a})=>({id:a.id,phaseId:a.phaseId,objectScope:a.objectScope,workfront:a.workfront})),view:j,activities:q,plannedResources:r,numbers:p,bases:n,numberMeaning:"index指向同源完整数记录;活动对象见activityId对应活动,basisId见bases原文。对象与依据只存一份,不裁字;组织管理视图不要求数量。",..."schedule"===j||"deployment"===j||"task"===j?{calendar:a.production.calendar}:{},..."labor"===j?{labor:a.production.labor}:{},..."equipment"===j?{equipment:a.production.equipment}:{},..."materials"===j?{materials:a.production.materials.filter(a=>l.has(a.activityId)),materialStatus:"逐源用途记录,不等于已采用采购总量"}:{},issues:a.production.issues.filter(a=>!a.activityId||l.has(a.activityId)),scope:{taskId:c,activityIds:[...l],completeSelectedView:!0},task:i,interfaces:a.tasks.filter(a=>a.taskId!==c&&a.phaseIds.some(a=>i.phaseIds.includes(a))).map(({taskId:a,objectScope:b,boundary:c,handoffs:d})=>({taskId:a,objectScope:b,boundary:c,handoffs:d}))}}},42948:(a,b,c)=>{c.d(b,{Fr:()=>k,HM:()=>l,Hf:()=>n,tv:()=>m,wE:()=>o,yW:()=>p});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598);let i=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u,j=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function k(a,b){return b?`run:${b}:${a}`:a}function l(a,b,c){if(!j.test(b))throw Error("非法运行资产文件名");if(void 0!==c&&!i.test(c))throw Error("非法运行 ID");return c?g().join(a,"runs",c,"artifacts",b):g().join(a,"assets",b)}function m(a,b,c,d){let f=l(a,b,d),i=JSON.stringify(c);if(void 0===i)throw Error("运行资产不能是 undefined");e().mkdirSync(g().dirname(f),{recursive:!0});let j=`${f}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(j,i,{encoding:"utf8",flag:"wx"});try{if(d)try{e().linkSync(j,f)}catch(a){if("EEXIST"!==a.code)throw a;if(e().readFileSync(f,"utf8")!==i)throw Error(`运行资产已存在且内容不同:${d}/${b}`,{cause:a})}else e().renameSync(j,f)}finally{e().rmSync(j,{force:!0})}return{assetPath:f,bytes:Buffer.byteLength(i),sha256:(0,h.createHash)("sha256").update(i).digest("hex")}}function n(a){if(!a.runId)throw Error("实时模型进度必须绑定当前运行 ID");let b=l(a.generatedDir,"llm-live-progress.json",a.runId),c=JSON.stringify({...a.snapshot,version:1,runId:a.runId,documentId:a.documentId});e().mkdirSync(g().dirname(b),{recursive:!0});let d=`${b}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(d,c,{encoding:"utf8",flag:"wx"});try{e().renameSync(d,b)}finally{e().rmSync(d,{force:!0})}}function o(a,b){return b?[["run-start","run-start.json","本轮启动身份"],["run-inputs","run-inputs.json","本轮已准备输入快照"],["project-model","project-model.json","本轮写作与终检共用的项目事实快照"],["tender-requirements","tender-requirements.json","本轮原始招标条款、技术职责拆分、商务归宿及未裁决台账"],["document-contract","document-contract.json","本轮写作前冻结的职责、义务与七维评价合同"],["contract-ownership-plan","contract-ownership-plan.json","主控逐项确认事实、表格与交付义务的唯一主要责任小节"],["content-type-plan","content-type-plan.json","本轮主控对各节具体内容职责与适用类型的确认回执"],["contract-quality","contract-quality.json","本轮固定合同、项目快照和正文版本的七维评价回执"],["writing-task-hierarchy","writing-task-hierarchy.json","锁定交付小节与专业作者子任务之间的固定层级"],["chapter-writing-structures","chapter-writing-structures.json","本轮作者任务开始前的固定结构和内容职责"],["author-task-executions","author-task-executions.json","实际作者实例、委派任务、完整输入身份、执行终态与共用章节预算"],["author-accounting-final","author-accounting-final.json","同一合同跨续跑累计的调用、token、成本与章节预算消耗"],["author-candidates","author-candidates.json","本轮工具执行、自检、清理及重试前的原始模型返回索引"],["document-token-anomaly","document-token-anomaly.json","本轮无有效进展的重复模型消费与整份暂停回执;缺usage和供应商结算保持未知"],["document-model-final","document-model-final.json","本轮统一文档模型的最终版本与全部累计修改记录"],["contract-quality-c0","contract-quality-c0.json","固定首稿的完整七维评价,后续修改不能覆盖"],["contract-light-repair","contract-light-repair.json","统一预算内轻修的预检、提交结果与首稿通过读数"],["document-model-author","document-model-author.json","本轮固定任务的结构化作者模型、初始候选与累计修改账"],["blueprint","blueprint.json","本轮写作蓝图"],["requirement-assignments","requirement-assignments.json","本轮要求责任分配"],["structure-assignments","structure-assignments.json","本轮呈现要求分配"],["before-global-review","before-global-review.json","全文审查前章节快照(含章内重试,不等于原始首稿)"],["before-finalize","before-finalize.json","收口前章节快照"],["final-document","final-document.json","本轮最终内容快照"],["run-summary","run-summary.json","本轮阶段墙钟、调用用途与历史评分读数"]].flatMap(([c,d,f])=>{let g=l(a,d,b);if(!e().existsSync(g))return[];let i=(0,h.createHash)("sha256").update(e().readFileSync(g)).digest("hex");return[{id:k(c,b),artifactKind:c,type:"file",role:"attachment",path:g,sha256:i,runId:b,status:"generated",message:f}]}):[]}function p(a){if(!a.runId)return;let b=a.chapters.map(a=>({id:a.id,title:a.title,content:a.content,contentHash:(0,h.createHash)("sha256").update(a.content).digest("hex")}));m(a.generatedDir,`${a.stage}.json`,{version:1,runId:a.runId,documentId:a.documentId??null,stage:a.stage,capturedAt:Date.now(),chapters:b,...void 0!==a.markdown?{markdown:a.markdown}:{},rawFirstCandidate:!1},a.runId)}},43255:(a,b,c)=>{c.d(b,{X4:()=>j,Yn:()=>i});var d=c(77598),e=c(16646),f=c(55422);function g(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function h(a,b,c=!1){let d=new Map;for(let b of a.entries){if(!b.section)continue;let a=c?JSON.stringify([b.sourceFile,b.villageGroup,b.section]):b.section,e=d.get(a)||[];e.push(b),d.set(a,e)}let e=[],f=0;for(let a of d.values()){let c=g(a[0].section,a),d=a.some(a=>"unit-project"===a.sectionKind),h=[];if(d){let b=new Map;for(let d of a){let a=d.subsection||c,e=b.get(a)||[];e.push(d),b.set(a,e)}for(let[a,c]of b)h.push(k(g(a,c),c))}else h.push(k(c,a));f+=1,e.push({id:`${b}.${f}`,title:c,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),tablePlans:[],workPackages:h})}return e}function i(a){let{chapterTitles:b,boq:c}=a,d=b.map((b,d)=>{var e;let f=String(d+1),g=/主要分部分项|施工方案|施工方法/u.test(b)?h(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],subSections:g}}),e=h(c,"project",!0).flatMap(a=>a.workPackages),f=c.entries.filter(a=>!a.section);return f.length&&e.push(k("未分部清单记录",f)),{chapters:d,projectWorkPackages:e}}function j(a){return(0,d.createHash)("sha256").update(JSON.stringify([a.sourceFile,a.villageGroup,a.section,a.subsection,a.seq,a.code,a.name,a.description,a.unit,a.quantity,a.chunkIndex])).digest("hex")}function k(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},g=new Map;for(let a of c){if(!a.name)continue;let b=g.get(a.name)??new Map;b.set(a.unit,(b.get(a.unit)??0)+a.quantity),g.set(a.name,b)}for(let[a,b]of g)for(let[c,e]of b)d[b.size>1?`${a}(${c||"未注明单位"})`:a]={value:Math.round(1e3*e)/1e3,unit:c};let h=[...new Set(c.map(a=>a.name).filter(Boolean))],i=(0,f.lh)(c),k=[],l=new Set;for(let a of c){for(let b of(0,f.QU)(a.description)){let a=`${b.key}=${b.value}`;if(!l.has(a)&&(l.add(a),k.push({key:b.key,value:b.value,source:"boq"}),k.length>=24))break}if(k.length>=24)break}let m=[];for(let a of c)for(let b of(0,f.QU)(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&m.length<12&&!m.includes(b.value)&&m.push(b.value);let n=(0,e.cn)(c.map(a=>a.name)),o=[];for(let a of(0===m.length&&n.length>0&&m.push(...n[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),n.slice(0,2)))for(let b of a.standards)o.includes(b)||o.push(b);return{name:a,kind:"major",quantities:d,objectNames:h,methods:i,params:k,acceptance:m,standards:o,source:"boq",coveredSeqs:c.map(a=>a.seq),members:c.map(a=>({id:j(a),entry:{...a}}))}}},43967:(a,b,c)=>{c.d(b,{b:()=>g,jF:()=>h});let d=globalThis,e=d.__customizeStorageMaintenance??={active:!1};d.__customizeStorageApiWriters??=new Set;class f extends Error{constructor(){super("系统清空正在执行,暂不接收新的存储访问"),this.name="StorageMaintenanceError"}}function g(){return e.active}function h(){if(e.active)throw new f}},44616:(a,b,c)=>{c.d(b,{bV:()=>f,lu:()=>h,mk:()=>g});var d=c(63327);let e=new WeakMap;function f(a){let b=e.get(a);if(!b){let c=[...a.facts,...a.sourceControls??[]],f=[...new Set(c.filter(a=>"verified-source-excerpt"!==a.roleId).map(d.vg))].sort(),g=[...new Set(c.filter(a=>"verified-source-excerpt"===a.roleId).map(d.vg))].sort();b={facts:f,sources:g,factIndices:new Map(f.map((a,b)=>[a,b])),sourceIndices:new Map(g.map((a,b)=>[a,b]))},e.set(a,b)}return b}function g(a,b,c){let d=f(a);return{...b&&d.factIndices.has(b)?{factIndex:d.factIndices.get(b)}:{},...c&&d.sourceIndices.has(c)?{sourceIndex:d.sourceIndices.get(c)}:{}}}function h(a,b,c){let d="fact"===b?f(a).facts:f(a).sources;if(!Number.isSafeInteger(c)||0>Number(c)||Number(c)>=d.length)throw Error(`${"fact"===b?"属性":"原文"}引用序号不属于当前冻结项目`);return d[Number(c)]}},44736:(a,b,c)=>{c.d(b,{FP:()=>q,H0:()=>k,U2:()=>j,_e:()=>z,eb:()=>A,fN:()=>m,hg:()=>l,oN:()=>r});var d=c(77598),e=c(19898),f=c(70247);let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),h=a=>{let{rowSha256:b,...c}=a;return b===g(c)},i=a=>a.replace(/\s/gu,"");function j(a){let b=a.trim();if(!b.startsWith("|")||!b.endsWith("|"))return;let c=[],d="",e=!1;for(let a=1;a<b.length-1;a++){let f=b[a];"|"!==f||e?d+=f:(c.push(d.trim()),d=""),e="\\"===f&&!e}return c.push(d.trim()),c.length>=2?c:void 0}function k(a){let b=a[0]?.trim()??"";return/^(?:\d{1,3}(?:[..]\d{1,3}){1,4}|第[零一二三四五六七八九十百千\d]+[条款项])$/u.test(b)?b:void 0}function l(a,b,c){let{sha256:d,...f}=a;if("tender-native-file-proof-v1"!==a.version||a.file!==b||a.sourceChunkCount!==c||a.nativeLayoutVersion!==e.PDF_NATIVE_LAYOUT_VERSION||!/^[a-f0-9]{64}$/u.test(a.sourceSha256)||!/^[a-f0-9]{64}$/u.test(a.metadataSha256)||d!==g(f))throw Error("原生PDF表格文件证据身份不一致");return a.pages.flatMap(c=>{if(c.glyphSha256!==g(c.glyphs))throw Error("原生PDF字形回执不属于实际文件");if("fallback"===c.strategy)return[];if("ruled-cells"!==c.strategy)throw Error("原生PDF页面没有明确layout策略");let d=new Map(c.glyphs.map(a=>[a.id,a])),e=new Map,f=new Map;for(let a of c.cells){if(!Number.isSafeInteger(a.columnIndex)||a.columnIndex<0||!Number.isSafeInteger(a.columnSpan)||a.columnSpan<1||4!==a.bounds.length||!a.bounds.every(Number.isFinite)||a.bounds[0]>=a.bounds[2]||a.bounds[1]>=a.bounds[3])throw Error("原生表格物理合并单元格身份无效");for(let[b,c]of[[a.columnIndex,a.bounds[0]],[a.columnIndex+a.columnSpan,a.bounds[2]]]){let a=f.get(b);if(void 0!==a&&Math.abs(a-c)>1.5)throw Error("原生表格逻辑列与物理边界不一致");f.set(b,c)}let b=`${a.bounds[1]}:${a.bounds[3]}`;e.set(b,[...e.get(b)??[],a])}let h=[...e.values()].sort((a,b)=>b[0].bounds[3]-a[0].bounds[3]),i=Math.max(...c.cells.map(a=>a.columnIndex+a.columnSpan)),j=h.map(a=>{let b=Array(i).fill(""),c=0,e;for(let f of a.sort((a,b)=>a.columnIndex-b.columnIndex)){if(f.columnIndex!==c||void 0!==e&&Math.abs(f.bounds[0]-e)>1.5)throw Error("原生表格列范围重叠或缺失");c+=f.columnSpan,e=f.bounds[2],b[f.columnIndex]=f.glyphIds.map(a=>{let b=d.get(a);if(!b)throw Error("原生表格字形ID缺失");return b}).sort((a,b)=>2>=Math.abs(a.y-b.y)?a.x-b.x:b.y-a.y).map(a=>a.str).join("").replace(/\|/gu,"\\|")}if(c!==i)throw Error("原生表格列范围不完整");return b}),k=j[0]??[];return j.map((d,e)=>{let f={file:b,sourceSha256:a.sourceSha256,nativeProofSha256:a.sha256,page:c.page,row:e,rowCount:j.length,cells:d,bounds:h[e].map(a=>a.bounds),physicalCells:h[e],headers:k};return{...f,rowSha256:g(f)}})})}function m(a,b,c){let d=a.filter(a=>(void 0===c||a.page===c)&&a.cells.length===b.length&&a.cells.every((a,c)=>i(a)===i(b[c])));return 1===d.length?d[0]:void 0}let n=(a,b)=>{let c=j(b.rawText);return b.file===a.file&&!!c&&c.length===a.cells.length&&c.every((b,c)=>i(b)===i(a.cells[c]))},o=a=>(0,f.y)(a.map(({sourceGapBefore:a,sourceTableBridgeBefore:b,sourceNativeTextBridgeBefore:c,...d})=>d));function p(a,b){return h(a)&&h(b)&&a.file===b.file&&a.sourceSha256===b.sourceSha256&&a.nativeProofSha256===b.nativeProofSha256&&b.page===a.page+1&&a.row===a.rowCount-1&&1===b.row&&a.cells.length===b.cells.length&&a.cells.length>=2&&a.bounds.length===a.cells.length&&b.bounds.length===b.cells.length&&a.physicalCells.every((a,b)=>a.columnIndex===b&&1===a.columnSpan)&&b.physicalCells.every((a,b)=>a.columnIndex===b&&1===a.columnSpan)&&a.headers.length===b.headers.length&&a.headers.every((a,c)=>i(a)===i(b.headers[c]))&&a.bounds.every((a,c)=>1.5>Math.abs(a[0]-b.bounds[c][0])&&1.5>Math.abs(a[2]-b.bounds[c][2]))&&b.cells.slice(0,-1).every(a=>!i(a))&&!!i(b.cells.at(-1)??"")&&!!i(a.cells.at(-1)??"")&&!/[。!?!?;;][))】」》”’"']*$/u.test(a.cells.at(-1).trim())}function q(a,b,c,d){let{witnessSha256:e,...f}=a,h=d.flatMap((b,c)=>o([b])===a.fromSpanSha256?[c]:[]),i=d.flatMap((b,c)=>o([b])===a.toSpanSha256?[c]:[]),j=1===h.length&&1===i.length&&i[0]>=h[0]?d.slice(h[0],i[0]+1):[];if(!b||"native-table-page-bridge-v2"!==a.version||a.file!==c.file||a.file!==b.file||e!==g(f)||!p(a.from,a.to)||!j[0]||!j.at(-1)||!n(a.from,j[0])||!n(a.to,j.at(-1))||a.spansSha256!==o(j)||!j.includes(b)||!j.includes(c)||!a.transitions.some(a=>a.fromChunkIndex===b.chunkIndex&&a.toChunkIndex===c.chunkIndex&&a.fromChunkSha256===b.chunkSha256&&a.toChunkSha256===c.chunkSha256&&a.fromEnd===b.end&&a.toStart===c.start))throw Error("原生表格续行与完整layout/source spans证据不一致")}function r(a,b){let c=[...a];for(let a=0;a<c.length;a++){let d,e=c[a]?.nativeTableRow;if(!e)continue;let h=c.findIndex((b,c)=>c>a&&!!b.nativeTableRow&&0!==b.nativeTableRow.row&&b.file===e.file);if(h<0)continue;let k=c[h].nativeTableRow;if(!p(e,k)||c.slice(a+1,h).some(a=>a.nativeTableRow&&(0!==a.nativeTableRow.row||a.nativeTableRow.page!==k.page||a.nativeTableRow.nativeProofSha256!==e.nativeProofSha256)))continue;let l=a=>a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let b=a.trim(),c=j(b);return/^#{1,6}\s+(?:PDF 第\s*\d+\s*页|PDF 原生网格表格区域|-?\d+-?)$/u.test(b)||"|"===b||!!c&&(c.every(a=>/^:?-{3,}:?$/u.test(a))||c.every((a,b)=>a===`列${b+1}`)||c.every((a,b)=>i(a)===i(k.headers[b]??"")))});if(c.slice(a+1,h).some(a=>!l(a.sourceSpans?.map(a=>a.rawText).join("\n")??a.text)))continue;let m=c[a],q=c[h],r=m.sourceSpans?.at(-1),s=q.sourceSpans?.[0];if(!r||!s||void 0===r.chunkIndex||void 0===s.chunkIndex)continue;let t=b.filter(a=>a.file===e.file&&a.chunkIndex>r.chunkIndex&&a.chunkIndex<s.chunkIndex).sort((a,b)=>a.chunkIndex-b.chunkIndex);if(t.length!==s.chunkIndex-r.chunkIndex-1)continue;let u=b.find(a=>a.file===e.file&&a.chunkIndex===r.chunkIndex),v=b.find(a=>a.file===e.file&&a.chunkIndex===s.chunkIndex);if(!u||!v)continue;let w=[{chunk:u,start:r.end,end:u.text.length},...t.map(a=>({chunk:a,start:0,end:a.text.length})),{chunk:v,start:0,end:s.start}];if(w.some(a=>!l(a.chunk.text.slice(a.start,a.end))))continue;let x=[r,...w.filter(a=>a.chunk.text.slice(a.start,a.end).trim()).map(({chunk:a,start:b,end:c})=>({file:e.file,chunkIndex:a.chunkIndex,section:"PDF表格页间原始布局",chunkSha256:a.sha256,sourceStartChar:a.startChar,sourceEndChar:a.endChar,start:b,end:c,rawText:a.text.slice(b,c),text:a.text.slice(b,c)})),...q.sourceSpans];try{d=function(a,b,c){if(!p(a,b)||!c[0]||!c.at(-1)||!n(a,c[0])||!n(b,c.at(-1)))throw Error("没有相邻页同表同列续行证据");let d=[];for(let a=1;a<c.length;a++){let b=c[a-1],e=c[a];if(b.chunkIndex!==e.chunkIndex){if(void 0===b.chunkIndex||e.chunkIndex!==b.chunkIndex+1)throw Error("表格续行不能跳过未保全的parse chunk");d.push({fromChunkIndex:b.chunkIndex,toChunkIndex:e.chunkIndex,fromChunkSha256:b.chunkSha256,toChunkSha256:e.chunkSha256,fromEnd:b.end,toStart:e.start})}}let e={version:"native-table-page-bridge-v2",file:a.file,sourceSha256:a.sourceSha256,nativeProofSha256:a.nativeProofSha256,from:a,to:b,fromSpanSha256:o([c[0]]),toSpanSha256:o([c.at(-1)]),spansSha256:o(c),transitions:d};return{...e,witnessSha256:g(e)}}(e,k,x)}catch{continue}let y=[...m.sourceSpans,...x.slice(1).map((a,b)=>a.chunkIndex!==x[b].chunkIndex?{...a,sourceTableBridgeBefore:d}:a)];c.splice(a,h-a+1,{...m,text:y.map(a=>a.text).join("\n"),nativeTableRow:k,sourceSpans:y,sourceSpansSha256:(0,f.y)(y)}),a--}return c}let s=a=>/^-?\d{1,4}-?$/u.test(i(a)),t=a=>{let{lineSha256:b,...c}=a;return b===g(c)};function u(a){let{sha256:b,...c}=a;if(a.nativeLayoutVersion!==e.PDF_NATIVE_LAYOUT_VERSION||b!==g(c))throw Error("原生普通页文件证据身份不一致");return a.pages.flatMap(b=>{if(b.glyphSha256!==g(b.glyphs))throw Error("原生普通页glyph指纹不一致");let c=[];for(let a of[...b.glyphs].filter(a=>a.str.trim()).sort((a,b)=>b.y-a.y||a.x-b.x)){let b=c.find(b=>Math.abs(b.y-a.y)<=Math.max(2,.45*a.height));b?b.glyphs.push(a):c.push({y:a.y,glyphs:[a]})}return c.map((d,e)=>{d.glyphs.sort((a,b)=>a.x-b.x);let f=d.glyphs.filter(a=>/[A-Za-z\p{Script=Han}]/u.test(a.str)),h={file:a.file,sourceSha256:a.sourceSha256,nativeProofSha256:a.sha256,page:b.page,pageGlyphSha256:b.glyphSha256,line:e,lineCount:c.length,text:d.glyphs.map(a=>a.str).join("").replace(/\|/gu,"\\|"),glyphIds:d.glyphs.map(a=>a.id),x:d.glyphs[0].x,xEnd:Math.max(...d.glyphs.map(a=>a.x+a.width)),y:d.y,height:Math.max(...d.glyphs.map(a=>a.height)),columnGap:d.glyphs.some((a,b)=>b>0&&a.x-d.glyphs[b-1].x-d.glyphs[b-1].width>2*Math.max(a.height,d.glyphs[b-1].height)),fontNames:[...new Set((f.length?f:d.glyphs).flatMap(a=>a.fontName?[a.fontName]:[]))].sort()};return{...h,lineSha256:g(h)}})})}let v=(a,b,c)=>{let d=(a=>{let b=j(a.rawText);if(b){if(!b.slice(0,-1).every(a=>!i(a)))return;return b.at(-1)}return a.rawText.trim().replace(/^#{1,6}\s+/u,"")})(b);if(b.file!==a.file||void 0===d)return!1;let e=i(d),f=i(a.text);return!!f&&("start"===c?e.startsWith(f):e.endsWith(f))};function w(a,b){let c=a[0],d=b[0];return c&&d&&i(c.text)===i(d.text)&&1.5>Math.abs(c.x-d.x)&&1.5>Math.abs(c.y-d.y)&&1.5>Math.abs(c.height-d.height)&&c.fontNames.join("|")===d.fontNames.join("|")?i(c.text):void 0}function x(a,b,c,d,e){let f,g=w(c,d),j=c.filter(a=>!s(a.text)&&i(a.text)!==g),k=d.filter(a=>!s(a.text)&&i(a.text)!==g),l=1.5>Math.abs(a.xEnd-b.xEnd)&&a.x>b.x&&j.some(c=>c.line<a.line&&1.5>Math.abs(c.x-b.x)&&c.fontNames.join("|")===b.fontNames.join("|")),m=1.5>Math.abs(a.x-b.x)||l,n=!!e&&h(e)&&e.file===b.file&&e.sourceSha256===b.sourceSha256&&e.nativeProofSha256===b.nativeProofSha256&&e.page===b.page&&1===e.row&&e.cells.slice(0,-1).every(a=>!i(a))&&i(e.cells.at(-1)??"").startsWith(i(b.text));return t(a)&&t(b)&&a.file===b.file&&a.sourceSha256===b.sourceSha256&&a.nativeProofSha256===b.nativeProofSha256&&b.page===a.page+1&&a.line===j.at(-1)?.line&&b.line===k[0]?.line&&m&&2>Math.abs(a.height-b.height)&&!a.columnGap&&!b.columnGap&&(n||l||!j.some(a=>a.columnGap)&&!k.some(a=>a.columnGap))&&a.fontNames.join("|")===b.fontNames.join("|")&&(f=b.text,!/^(?:第[零一二三四五六七八九十百\d]+[章条节]|[((]?[一二三四五六七八九十百\d]+[))]|[一二三四五六七八九十百\d]+[..、])/u.test(f.trim()))&&!!i(a.text)&&!!i(b.text)&&!/[。!?!?;;::][))】」》”’"']*$/u.test(a.text.trim())}function y(a,b){let c=new Set([...b.fromPageLines,...b.toPageLines].filter(a=>s(a.text)).map(a=>i(a.text)));return a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let d=a.trim(),e=i(d.replace(/^#{1,6}\s+/u,"")),f=/^#{1,6}\s+PDF 第\s*(\d+)\s*页$/u.exec(d),g=j(d);return f?Number(f[1])===b.from.page||Number(f[1])===b.to.page:!!c.has(e)||!!b.repeatedHeader&&e===b.repeatedHeader||!!b.toGridRow&&(/^#{1,6}\s+PDF 原生网格表格区域$/u.test(d)||"|"===d||!!g&&g.length===b.toGridRow.cells.length&&(g.every(a=>/^:?-{3,}:?$/u.test(a))||g.every((a,b)=>a===`列${b+1}`)||g.every((a,c)=>i(a)===i(b.toGridRow.headers[c]??""))))})}function z(a,b,c,d){let{witnessSha256:e,...f}=a,h=function(a,b){let c=b.flatMap((b,c)=>o([b])===a.fromSpanSha256?[c]:[]),d=b.flatMap((b,c)=>o([b])===a.toSpanSha256?[c]:[]);return 1===c.length&&1===d.length&&d[0]>=c[0]?b.slice(c[0],d[0]+1):[]}(a,d);if(!b||"native-text-page-bridge-v1"!==a.version||a.file!==c.file||a.file!==b.file||e!==g(f)||!t(a.from)||!t(a.to)||a.to.page!==a.from.page+1||a.from.file!==a.file||a.to.file!==a.file||!a.fromPageLines.every(t)||!a.toPageLines.every(t)||a.repeatedHeader!==w(a.fromPageLines,a.toPageLines)||!x(a.from,a.to,a.fromPageLines,a.toPageLines,a.toGridRow)||a.from.sourceSha256!==a.sourceSha256||a.to.sourceSha256!==a.sourceSha256||a.from.nativeProofSha256!==a.nativeProofSha256||a.to.nativeProofSha256!==a.nativeProofSha256||!h[0]||!h.at(-1)||!v(a.from,h[0],"end")||!v(a.to,h.at(-1),"start")||a.toGridRow&&!n(a.toGridRow,h.at(-1))||a.spansSha256!==o(h)||!function(a,b,c,d){let e=d.indexOf(b);return!(e<0)&&d[e+1]===c&&void 0!==b.chunkIndex&&void 0!==c.chunkIndex&&!(c.chunkIndex<b.chunkIndex)&&!(c.chunkIndex>b.chunkIndex+1)&&(b.chunkIndex!==c.chunkIndex||b.chunkSha256===c.chunkSha256&&!(b.end>c.start))&&a.transitions.some(a=>a.fromChunkIndex===b.chunkIndex&&a.toChunkIndex===c.chunkIndex&&a.fromChunkSha256===b.chunkSha256&&a.toChunkSha256===c.chunkSha256&&a.fromEnd===b.end&&a.toStart===c.start)}(a,b,c,h)||h[0].chunkIndex===h.at(-1).chunkIndex&&(h.some(a=>a.chunkIndex!==h[0].chunkIndex||a.chunkSha256!==h[0].chunkSha256)||h.slice(1,-1).some(b=>!y(b.rawText,a))))throw Error("原生普通页续行与实际glyph/layout/source spans证据不一致")}function A(a,b,c,d){let e=c.flatMap(u),h=[...a],k=new Map,l=new Map,m=new Map,p=(a,b)=>JSON.stringify([a,b]);for(let a of e){let b=p(a.file,a.page);k.set(b,[...k.get(b)??[],a])}for(let a of[...b].sort((a,b)=>(a.file??"").localeCompare(b.file??"")||(a.chunkIndex??-1)-(b.chunkIndex??-1))){let b=a.file??"",c=[...a.text.matchAll(/^#{1,6}\s+PDF 第\s*(\d+)\s*页/gmu)].map(a=>({start:a.index,page:Number(a[1])}));l.set(p(b,a.chunkIndex),{initial:m.get(b),markers:c}),c.length&&m.set(b,c.at(-1).page)}let q=a=>{let b=l.get(p(a.file,a.chunkIndex));return b?.markers.filter(b=>b.start<a.start).at(-1)?.page??b?.initial},r=(a,b)=>(k.get(p(a.file,q(a)))??[]).filter(c=>v(c,a,b));for(let a=0;a<h.length;a++){let c=h[a],e=c.sourceSpans;if(!e)continue;let l=-1,m;for(let a=e.length-1;a>=0;a--){let b=r(e[a],"end").filter(a=>!s(a.text));if(1===b.length){l=a,m=b[0];break}}if(!m)continue;let t=k.get(p(m.file,m.page))??[],u=k.get(p(m.file,m.page+1))??[],z=w(t,u),A=u.find(a=>!s(a.text)&&i(a.text)!==z);if(!A)continue;let B=h.findIndex((b,c)=>c>a&&b.file===m.file&&b.sourceSpans?.[0]&&v(A,b.sourceSpans[0],"start")&&q(b.sourceSpans[0])===A.page);if(B<0)continue;let C=h[B],D=C.nativeTableRow,E=D&&1===D.row&&D.cells.slice(0,-1).every(a=>!i(a))&&C.sourceSpans?.[0]&&n(D,C.sourceSpans[0])?D:void 0;if(!x(m,A,t,u,E)||!E&&(C.clauseNo||C.sourceSpans?.[0]?.logicalBoundaryBefore||/^[^::,,。;;“”"'()()]{1,40}[::]/u.test(A.text)||d&&!d(c,C)))continue;let F=a=>a.split(/\r?\n/u).filter(a=>a.trim()).every(a=>{let b=a.trim(),c=j(b),d=i(b.replace(/^#{1,6}\s+/u,""));return/^#{1,6}\s+(?:PDF 第\s*\d+\s*页|PDF 原生网格表格区域|-?\d+-?)$/u.test(b)||s(d)||!!z&&d===z||!!E&&"|"===b||!!c&&(c.every(a=>/^:?-{3,}:?$/u.test(a))||c.every((a,b)=>a===`列${b+1}`)||!!z&&i(c.join(""))===z)});if(h.slice(a+1,B).some(a=>!F(a.sourceSpans?.map(a=>a.rawText).join("\n")??a.text))||e.slice(l+1).some(a=>!F(a.rawText)))continue;let G=h[B],H=G.sourceSpans?.[0],I=e.at(-1);if(!H||!I||void 0===H.chunkIndex||void 0===I.chunkIndex||H.chunkIndex<I.chunkIndex)continue;let J=b.filter(a=>a.file===m.file&&a.chunkIndex>I.chunkIndex&&a.chunkIndex<H.chunkIndex).sort((a,b)=>a.chunkIndex-b.chunkIndex);if(J.length!==Math.max(0,H.chunkIndex-I.chunkIndex-1))continue;let K=b.find(a=>a.file===m.file&&a.chunkIndex===I.chunkIndex),L=b.find(a=>a.file===m.file&&a.chunkIndex===H.chunkIndex);if(!K||!L)continue;let M=I.chunkIndex===H.chunkIndex?[{chunk:K,start:I.end,end:H.start}]:[{chunk:K,start:I.end,end:K.text.length},...J.map(a=>({chunk:a,start:0,end:a.text.length})),{chunk:L,start:0,end:H.start}];if(M.some(a=>a.end<a.start||!F(a.chunk.text.slice(a.start,a.end))))continue;let N=M.filter(a=>a.chunk.text.slice(a.start,a.end).trim()).map(({chunk:a,start:b,end:c})=>({file:m.file,chunkIndex:a.chunkIndex,section:"PDF普通页间原始布局",chunkSha256:a.sha256,sourceStartChar:a.startChar,sourceEndChar:a.endChar,start:b,end:c,rawText:a.text.slice(b,c),text:a.text.slice(b,c)})),O=[...e.slice(l),...N,H],P=[],Q=!0,R=I.chunkIndex===H.chunkIndex;for(let a=1;a<O.length;a++){let b=O[a-1],c=O[a];if(b.chunkIndex!==c.chunkIndex||R){if(void 0===b.chunkIndex||void 0===c.chunkIndex||c.chunkIndex<b.chunkIndex||c.chunkIndex>b.chunkIndex+1||b.chunkIndex===c.chunkIndex&&(b.chunkSha256!==c.chunkSha256||b.end>c.start)){Q=!1;break}P.push({fromChunkIndex:b.chunkIndex,toChunkIndex:c.chunkIndex,fromChunkSha256:b.chunkSha256,toChunkSha256:c.chunkSha256,fromEnd:b.end,toStart:c.start})}}if(!Q)continue;let S={version:"native-text-page-bridge-v1",file:m.file,sourceSha256:m.sourceSha256,nativeProofSha256:m.nativeProofSha256,from:m,to:A,fromPageLines:t,toPageLines:u,...E?{toGridRow:E}:{},...z?{repeatedHeader:z}:{},fromSpanSha256:o([O[0]]),toSpanSha256:o([O.at(-1)]),spansSha256:o(O),transitions:P},T={...S,witnessSha256:g(S)};if(R&&O.slice(1,-1).some(a=>!y(a.rawText,T)))continue;let U=[...N,H],V=[...e,...U.map((a,b)=>R||a.chunkIndex!==(b?U[b-1]:I).chunkIndex?{...a,sourceNativeTextBridgeBefore:T}:a),...G.sourceSpans.slice(1)];h.splice(a,B-a+1,{...c,text:V.map(a=>a.text).join("\n"),sourceSpans:V,sourceSpansSha256:(0,f.y)(V)}),a--}return h}},45455:(a,b,c)=>{c.d(b,{Bj:()=>j,xj:()=>i});var d=c(77598);let e=new Set(["decisionId","requestId","toolCallId","capturedAt","recordedAt","startedAt","endedAt","finishedAt","elapsedMs","durMs","queryTimeMs"]);function f(a){return Array.isArray(a)?a.map(f):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).filter(([a])=>!e.has(a)).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>[a,f(b)])):a}let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(f(a))).digest("hex"),h=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function i(a){return a.flatMap(a=>{let b=h(a.data);if(!a.ok||!b)return[];let c=h(b.directoryState);if("query_cad_context"===a.toolName&&["frames","instances"].includes(String(b.kind))&&c?.scope==="indexed-cad-directory"&&!0===c.complete&&0===c.recordCount&&"string"==typeof b.parsedIdentity&&"string"==typeof b.filePath)return[g(["empty-cad-directory",b.projectSnapshotId,b.filePath,b.parsedIdentity,b.kind])];if("ask_chief"===a.toolName){if("model"!==b.source)return[];let a=Object.fromEntries(("use-facts"===b.action?["factIds"]:"use-sources"===b.action?["sourceIds"]:"engineering-controls"===b.action?["controls","writingControls"]:"qualitative-controls"===b.action?["qualitativeControls"]:[]).filter(a=>Array.isArray(b[a])&&b[a].length>0).map(a=>[a,b[a]]));return Object.keys(a).length?[g(["chief-decision",b.taskId,b.action,a])]:[]}let d=Object.fromEntries(("query_construction_plan"===a.toolName?["activities","plannedResources","numbers","materials"]:"query_project_facts"===a.toolName?["candidates","sourceEvidence"]:"query_cad_context"===a.toolName?["records"]:"query_source_units"===a.toolName?["units"]:"read_source"===a.toolName?["chunks"]:["search_evidence","query_work_packages","discover_files"].includes(a.toolName)?["items"]:"list_skills"===a.toolName?["skills"]:"match_skills"===a.toolName?["matched"]:[]).flatMap(c=>{if(!Array.isArray(b[c]))return[];let d=b[c].filter(b=>{let c=h(f(b));return!!c&&!!Object.keys(c).length&&("read_source"!==a.toolName&&"search_evidence"!==a.toolName||"string"==typeof c.content&&!!c.content.trim())}),e="search_evidence"===a.toolName?d.map(a=>Object.fromEntries(Object.entries(h(a)).filter(([a])=>!["score","rank","retrievalRank","retrievalScore"].includes(a)))):d;return e.length?[[c,e]]:[]}));"load_skill"===a.toolName&&h(b.skill)&&(d.skill=b.skill);let e=Object.fromEntries(["snapshotId","projectSnapshotId","contractId",..."query_construction_plan"===a.toolName?["id"]:[],"filePath","relativePath","parsedIdentity","sceneVersion","kind","frameId","rootInstanceId","units","metadata","sourceVersionEligibility"].filter(a=>void 0!==b[a]).map(c=>[c,"metadata"===c&&"read_source"===a.toolName&&h(b[c])?Object.fromEntries(Object.entries(h(b[c])).filter(([a])=>!["mtime","indexedAt"].includes(a))):b[c]])),i=Object.entries(d).flatMap(([c,d])=>(Array.isArray(d)?d:[d]).map(d=>{let f=h(d);if("query_project_facts"===a.toolName&&f?.factId&&"verified-source-excerpt"!==f.roleId)return g(["project-fact",b.snapshotId??b.projectSnapshotId,f.factId,f.value,f.controlContext??null,h(f.sourceVersionEligibility)?.status??null]);if("query_project_facts"===a.toolName&&f&&(f.sourceEvidenceId||"verified-source-excerpt"===f.roleId))return g(["source-excerpt",b.snapshotId??b.projectSnapshotId,f.sourceEvidenceId??f.factId,f.value]);let i="query_construction_plan"===a.toolName&&"numbers"===c&&f?Object.fromEntries(Object.entries(f).filter(([a])=>"basisId"!==a)):d;return g(["source-material",a.toolName,e,c,i])}));return Number.isSafeInteger(b.offset)&&Number.isSafeInteger(b.nextOffset)&&Number(b.nextOffset)>Number(b.offset)&&i.push(g(["source-cursor",a.toolName,e,{offset:b.offset,nextOffset:b.nextOffset}])),i})}async function j(a){let b,{budget:c}=a,e=[...a.initialMessages],f=0,h=0,j="模型未产出可用正文",k="turns-exhausted",l=new Set(i(a.initialEvidence??[])),m=new Set,n=0,o=!1;for(let p=1;void 0===c.maxTurnsPerBlock||p<=c.maxTurnsPerBlock;p+=1){if(void 0!==c.maxToolCallsPerBlock&&f>=c.maxToolCallsPerBlock){j=`显式工具调用预算耗尽(${f}/${c.maxToolCallsPerBlock})`,k="tool-budget-exhausted";break}let q=await a.runTurn({system:a.system,messages:e,turn:p,...void 0!==c.maxToolCallsPerBlock?{toolCallLimit:Math.max(0,c.maxToolCallsPerBlock-f)}:{}});if(h=p,f+=q.toolCalls.length,q.refused)return a.onTurn?.({turn:p,residual:b?.residual??0,toolCalls:f,action:"unfixable"}),b?{kind:"unfixable",content:b.content,turn:p,residual:b.residual,toolCalls:f,reason:q.refused.message,issues:[],cause:"budget-refused"}:{kind:"budget_refused",turn:p,reason:q.refused.message,refused:q.refused};let r=i(q.toolResults??[]);q.protocolRecovery?.sentOutputBudget!==null&&q.protocolRecovery?.sentOutputBudget!==void 0&&r.push(g(["protocol-recovery",q.protocolRecovery.sentOutputBudget])),!o&&q.protocolRecovery?.kind==="invalid-tool-arguments"&&q.toolMessages?.some(a=>"assistant"===a.role&&a.toolCalls?.some(a=>"submit_author_task"===a.name))&&q.toolMessages.some(a=>"tool"===a.role&&a.content)&&(o=!0,r.push(g(["first-author-submission-syntax-feedback"])));let s=r.some(a=>!l.has(a));r.forEach(a=>l.add(a)),s&&(n=0);let t=q.committed||q.text;if(t?.trim()){let c=await a.check(t),g=c.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length;if(c.degraded.length>0&&!c.executed.length)return a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:t,turn:p,residual:g,toolCalls:f,reason:`自查维度全部降级(${c.degraded.join("、")}),本块未做自查,保留当前草稿`,issues:c.issues,cause:"checks-degraded"};if(0===g&&!c.degraded.length)return a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"commit"}),{kind:"passed",content:t,turn:p,residual:g,toolCalls:f};let h=(0,d.createHash)("sha256").update(JSON.stringify([t,c])).digest("hex"),i=m.has(h);if(m.add(h),(!b||g<b.residual)&&(b={content:t,residual:g}),i&&!s){j="相同候选与裁决重复,未取得新证据或改善",k="no-progress";break}a.onTurn?.({turn:p,residual:g,toolCalls:f,action:"regenerate"}),e=[...e,...q.toolMessages??[],{role:"assistant",content:t},{role:"user",content:function(a){let b=a.filter(a=>"error"===a.level||"blocker"===a.severity),c=b.slice(0,12).map((a,b)=>`${b+1}. ${a.detectorId?`[${a.detectorId}] `:""}${a.message}`),d=b.slice(12),e=new Map;for(let a of d){let b=a.detectorId||"(未标注判据)";e.set(b,(e.get(b)||0)+1)}return["【自查裁决】本稿未通过判据,下列问题必须修正后重新输出完整本节正文:",...c,d.length>0?`${d.length} 条未逐条列出,按判据分布:${[...e.entries()].map(([a,b])=>`${a} ${b} 条`).join("、")}`:"","修正要求:直接输出修正后的**完整**本节正文(不要只输出改动片段、不要解说改动过程);保留原有事实、数值与结论,不得以删除内容的方式规避问题。"].filter(Boolean).join("\n")}(c.issues)}];continue}let u=q.toolMessages??[];if(s)e=[...e,...u];else{let a=++n;if(a>=3){j="相同无进展状态在具体反馈后仍未取得新证据、游标或主控决定",k="no-progress";break}e=[...e,...u,{role:"user",content:1===a?"本轮没有新增可用来源、分页游标或已接受的主控决定。原始工具回执已保留;空结果或失败不证明资料缺失,也不能用改查询词、调用ID或再报缺来冒充进展。请依据已取得的资料换用有实际依据的工具/继续真实nextOffset,或向已接线的主控说明具体对象、已查范围与失败;若仍无法核定,保留真实decisionRequests并提交已能完成的正文,不编造参数或条件。":"再次没有新增证据。立即停止重复取证:把已能完成的正文按协议提交(未决事项写入decisionRequests保留),拟定配置按工程经验带依据给出(正文标“拟定”并登记plannedNumbers);继续同类工具调用不会产生新证据。"}]}void 0!==c.maxTurnsPerBlock&&p>=c.maxTurnsPerBlock&&(j="显式轮次预算耗尽,模型尚未提交正文")}return b?(a.onTurn?.({turn:h,residual:b.residual,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:b.content,turn:h,residual:b.residual,toolCalls:f,reason:j,issues:[],cause:k}):{kind:"no_content",turn:h,toolCalls:f,reason:j,cause:k}}},47262:(a,b,c)=>{function d(a){let b=e()?.semanticFingerprints?.[a];return"string"==typeof b&&/^[a-f0-9]{64}$/u.test(b)?b:void 0}function e(){let a='{"version":1,"sourceFingerprint":"0fdab21c22b65a3042c22ee4ac8e49fbfd22e365df64d5e9b709ccb05aecf02e","semanticFingerprints":{"projectFacts":"74e776e1da5f34542ea52ef53f02fcca1b59adc1f052c978bbb49bbc6a3e4c28","documentGeneration":"9fdf3010da97710235240be68ae778f12ca360d4e798479b8567d1607d797b84"},"gitCommit":"bdf7ea6ef6ffea62ac46fbe8dbe742b3e7efe50d","serverVersion":"4.60.31","sourceFiles":753,"capturedAt":"2026-10-14T14:19:52.174Z"}';if(a)try{let b=JSON.parse(a);if(1!==b.version||!/^[a-f0-9]{64}$/u.test(b.sourceFingerprint??"")||"string"!=typeof b.serverVersion||"number"!=typeof b.sourceFiles||"string"!=typeof b.capturedAt||null!==b.gitCommit&&"string"!=typeof b.gitCommit)return;return b}catch{return}}c.d(b,{C:()=>d,S:()=>e})},48825:(a,b,c)=>{c.d(b,{Jf:()=>j,V2:()=>i,bp:()=>d,wJ:()=>e});let d="professional-writing-guidance-v4-responsibility-titles-2026-10-13",e={building:{fileName:"施工组织设计章节写作分析与编制规范(建筑).docx",sha256:"9313607509897e9a252cdefd671c4c72025d2727411972788bfa61b9835a0ff2",pages:12},municipal:{fileName:"施工组织设计章节写作分析与编制规范(市政).docx",sha256:"8e36d97e7084464ab04776093550e10984d3ac4a2a64ac37d5ca74a13a3ccc82",pages:13},bidWriting:{fileName:"技术标写作指南(合肥AI评标).docx",sha256:"3f36e67531da8ac9ffb1847694403ec4246457e445612767b3a82acf02894d0e"},bidReview:{fileName:"青天大模型AI评标规则考证(2026-10-11).docx",sha256:"de976918a1a0f1486cb07e1c2fd4a72a3b86fa480cbd46353f4c1af372badc69"}},f=["先形成工程对象、工作包、部署、资源及时间的共同推演,再按交付目录组织成文。事实、数量、工作面、部位、班组、节点在各章共用稳定身份,作者不各自编数字。","功能职责不等于固定章节:概况解释条件与影响,部署决定空间和顺序,方法说明实施,质量说明检查,安全说明风险与处置,进度说明时间,平面说明现场组织,移交说明最终闭环。推荐母目录不覆盖招标或用户锁定结构。","工作包数量与方法连通,方法与资源连通,资源与工期迭代校核;材料到货早于使用,检测和必要等待进入转序与时间逻辑。同一机械或班组同期不能在不同工作面重复占用。","施工方法、部署、真正重难点与进度应充分展开;人材机重点算准,管理计划重点完成执行闭环,概况与编制依据保持准确简洁。详略按职责和风险,不按统一字数、参数密度或固定图表数量。","表格按真实数据形态选择:单项目多属性用“信息项—内容”纵向或按属性含义分组;多对象在相同指标下比较、配置或排程时才横向展开。字段宽度应容纳完整对象、控制数值和单位,不能把大量无比较目的的属性铺成十几列单行,或把长范围原文挤进窄格。真实阶段或对象矩阵需要宽表时保留全部字段与对应关系,按职责合理分组,不设置固定列数上限、不强制各章制表,不删表行、数值或对象迎合评价。","项目事实依据与技术规范依据分别治理;前者确定实际工程,后者核验控制与验收。核验规范编号、名称、实施日期、状态、替代及局部废止和对象范围;参考文件列出的编号不等于本次已验证有效。","计算、产能假设和规范查证保留内部审计,正文交付核定的配置与控制结果及必要实施条件,不堆算式和来源说明。引用规范仅限确有技术参数、验收或强制边界需要的地方。","首稿采用专业短句和必要分点:条件决定方法,动作达到可检状态,状态放行下一工序。正文工序名不以箭头串替代实施方法;实际流程图和活动网络保留其关系,图后不逐节点逐连线重复全文。","技能主题是规划参考,不是必须照抄的交付标题。主控按本工程对象及被委派职责拟定正式小节名称,避免把“候选、核验责任、适用性”这类内部判断任务直接当目录;真正承担辨识、核查职责时使用完整专业名称。专业标题说明工程对象、方法或组织职责,不拼接关键词、不照抄内部评审标签。正常技术名称重复不导致丢弃、换名或重写;同项目再次编制仍以实际条件和方案质量为准。","写作指南中的样本统计只提供观察线索,不构成评分算法;图片数、箭头数、元数据软件、标题关键词和入围差值不授予质量或真实性。项目实际要求与专业适用规则优先,不为低频统计删去必要风险和接口。"],g={building:"建筑工程按实际楼栋、楼层、流水段和专业接口组织;地下结构、主体、围护装修、机电与室外的先后和移交要一致。不能把房建通用专业强行加入实际没有的工程。",municipal:"市政按真实路线、桩号、区段和工作面组织,明确起点、推进方向、地下与地上转序;涉及社会交通时,导改、围挡、施工阶段、居民出行与施工车辆路线联动。场内便道与场外交通分开。"},h=[{id:"overview",label:"项目理解",match:/概况|项目理解|整体理解|现场条件|工程清单|专业构成/u,buildingPages:[2],municipalPages:[2],guidance:"给出事实及其对施工组织的影响,按专业呈现必要工程量;不复制设计说明、不提前展开工艺,不以无来源地质、距离或道路数据制造针对性。"},{id:"deployment",label:"总体部署",match:/总体部署|施工部署|流水段|工作面|施工区段|施工顺序/u,buildingPages:[2,3],municipalPages:[2,3],guidance:"明确区段和工作面对应哪些任务及工程量、划分理由、起点、方向、先后与穿插、专业移交条件。后续方法、资源和进度必须能从部署找到组织依据。"},{id:"difficulties",label:"重难点",match:/重难点|重点难点|项目特点|制约因素/u,buildingPages:[3,4],municipalPages:[3,4],guidance:"由真实项目证据辨识制约因素,解释原因和后果,给出技术组织、资源、检查及异常处置;只深写真正核心问题,并在相关方法、质量、安全或工期中闭合。"},{id:"method",label:"施工方法",match:/工艺|工法|施工方法|施工技术|浇筑|开挖|吊装|安装|支模/u,buildingPages:[4,5],municipalPages:[4,5],guidance:"对本节实际承担的分项写清对象和工作量、前提、顺序、步骤、材料机具工种、控制、接口、检查、异常和转序。普通工序可组织可检查,核心工序达到必要技术策划深度;不把施组全文变成专项计算书。"},{id:"materials",label:"材料供应",match:/材料|物资|永久设备|供应|采购|人材机/u,buildingPages:[5],municipalPages:[5],guidance:"数量由实际工程量或可靠换算取得,供应与工作面及使用窗口衔接;长周期构件设备串联确认、采购、到货和安装。区分施工机械与永久设备、产品标准与验收标准;不能可靠换算时不假算。"},{id:"equipment",label:"机械与仪器",match:/机械|机具|检测仪器|人材机|确保机/u,buildingPages:[5,6],municipalPages:[5,6],guidance:"关键机械以工作量、可用作业窗口、实际单机或机组能力核定数量,检查同期占用和转场。检测仪器服务实际检验。运距未知不能虚构运输循环时间;算式留审计,不抄经验台数。"},{id:"labor",label:"劳动力",match:/劳动力|班组|工种|人材机|确保人/u,buildingPages:[6,7],municipalPages:[6],guidance:"以班组、工作面、阶段和工种组织投入,核算工作量、工日和持续时间;峰值由实际同期工种矩阵求得,不能相加各专业独立峰值。配置与特种作业必须符合真实任务。"},{id:"quality",label:"质量控制",match:/质量|检验|检测|隐蔽验收|复试|样板|三检/u,buildingPages:[7],municipalPages:[6,7],guidance:"围绕真实实体写检查对象、指标、方法、适用频次、岗位、记录、不合格处置、复验和销项;合格后才转序。方法章写实施,质量章写核验,避免再抄一遍工艺。"},{id:"safety",label:"风险安全与应急",match:/危大|危险源|风险|安全|应急|专项方案|论证/u,buildingPages:[7,8],municipalPages:[7,8],guidance:"实际作业、实体参数和影响对象支撑风险与危大判定,不能靠关键词。承担现场控制时给出作业条件、停止触发、监测和处置;辨识或审核子任务只承担其边界,完整应急由被委派任务负责。"},{id:"schedule",label:"进度组织",match:/进度|工期|节点|施工计划|施工窗口|确保人|确保机/u,buildingPages:[8,9],municipalPages:[8,9],guidance:"共同任务网络连接工作量、工作面、综合能力、材料到货、必要等待、检测与转序。开始结束和搭接可复核,关键路线由逻辑计算,不将箭头示意当网络计划。进度、正文与资源共用同一时间数据。"},{id:"environment",label:"环境与外部运行",match:/文明|环境|环保|扬尘|噪声|校园秩序|交通|既有|保护/u,buildingPages:[9],municipalPages:[9],guidance:"针对实际居民、校园、生产、交通、水体或既有设施说明影响、控制、检查责任及恢复;地方措施需按属地核验,不无条件复制某城市标准。涉及既有设施先调查再分析保护监测。"},{id:"site-layout",label:"现场空间组织",match:/总平面|平面布置|临时设施|临设|运输路线|便道|便桥/u,buildingPages:[9,10],municipalPages:[9,10],guidance:"按实际场地边界和阶段部署布置物流、堆场、机具、水电排水、消防及出入口,检查真实可通行与转场条件。缺尺寸不编坐标;必要实体决定未完成时由主控解决,不用模糊正文冒充已落地。"},{id:"handover",label:"验收恢复移交",match:/竣工|移交|交付|保修|缺陷责任|退场|恢复/u,buildingPages:[10],municipalPages:[10,11],guidance:"从已施工实体与系统反推检查、调试、整改复验、资料、培训和移交。市政还核对道路、交通、绿化及临设恢复;过程隐蔽验收不重复承担整套竣工移交。"}];function i(a){let b="building"===a||"municipal"===a?g[a]:"工程类型未确认时只使用共同写作原则,不能默认套用市政或房建专业条件。";return`【编制规范萃取 ${d},是写作方法先验,不是项目事实或已核现行标准】
|
|
127
127
|
${f.join("\n")}
|
|
128
128
|
${b}`}function j(a){let b=h.map(b=>({role:b,score:4*!!b.match.test(a.title)+2*!!b.match.test(a.responsibility)+("method"===b.id&&a.contentTypes.includes("method")?1:0)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score).map(a=>a.role);return{version:d,source:("building"===a.projectType||"municipal"===a.projectType?e[a.projectType]:void 0)??null,roles:b.map(b=>({id:b.id,label:b.label,pages:"building"===a.projectType?b.buildingPages:"municipal"===a.projectType?b.municipalPages:[],guidance:b.guidance})),omitted:[],text:`${i(a.projectType)}
|
|
129
129
|
本任务相关功能指引仅在其被委派的职责内采用:
|