@customize-agent/server 4.60.36 → 4.60.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/3074.js +1 -1
- package/.next/server/chunks/3239.js +7 -0
- package/.next/server/chunks/5037.js +5 -5
- package/.next/server/chunks/5763.js +7 -7
- 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/config/embedding.js.nft.json +1 -1
- package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/config/models.js.nft.json +1 -1
- package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
- package/.next/server/pages/api/config/providers.js.nft.json +1 -1
- package/.next/server/pages/api/config/reset.js.nft.json +1 -1
- package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/delivery-review.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +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]/messages.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.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.nft.json +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/features.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/prompt/chat.js.nft.json +1 -1
- package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
- package/.next/server/pages/api/skills.js.nft.json +1 -1
- package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
- package/.next/server/pages/api/system/reset.js.nft.json +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/generation/[id].html +1 -1
- package/.next/server/pages/generation.html +1 -1
- package/.next/server/pages/jobs.html +1 -1
- 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/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-manifest.json +32 -32
- package/.next/static/{e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2 → 32e126df53e20cd9bcca5e12141140949358a0d11d2383f7242277a4f8acbf1d}/_buildManifest.js +1 -1
- package/.next/static/chunks/pages/generation/[id]-83db154d46fd7aeb.js +1 -0
- package/package.json +2 -2
- package/.next/server/chunks/9283.js +0 -7
- package/.next/static/chunks/pages/generation/[id]-1f97e47ce545bd11.js +0 -1
- /package/.next/static/{e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2 → 32e126df53e20cd9bcca5e12141140949358a0d11d2383f7242277a4f8acbf1d}/_ssgManifest.js +0 -0
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
"dataRoutes": [
|
|
287
287
|
{
|
|
288
288
|
"page": "/",
|
|
289
|
-
"dataRouteRegex": "^/_next/data/
|
|
289
|
+
"dataRouteRegex": "^/_next/data/32e126df53e20cd9bcca5e12141140949358a0d11d2383f7242277a4f8acbf1d/index\\.json$"
|
|
290
290
|
}
|
|
291
291
|
],
|
|
292
292
|
"rsc": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=3074,exports.ids=[3074],exports.modules={15038:(a,b,c)=>{c.d(b,{C:()=>e,f:()=>d});class d extends Error{constructor(a){super(`PLANNING_PROFESSIONAL_REVIEW_PENDING:${a.scope}:${a.reason}`),this.detail=a,this.name="PlanningReviewPendingError"}}function e(a,b){return!["pass","accept"].includes(String(a.verdict))||b.some(a=>"blocking"===a.severity)}},33074:(a,b,c)=>{c.r(b),c.d(b,{STRUCTURE_PLAN_COVERAGE_SCHEMA:()=>W,STRUCTURE_PLAN_ENRICH_SCHEMA:()=>V,STRUCTURE_PLAN_REPAIR_SCHEMA:()=>ak,STRUCTURE_PLAN_REVIEWER:()=>D,STRUCTURE_PLAN_REVIEW_SCHEMA:()=>X,STRUCTURE_PLAN_SKELETON_SCHEMA:()=>U,applyStructurePlanOperations:()=>ag,applyStructurePlanRepairPatches:()=>ao,bindStructurePlanModelCaller:()=>J,boundaryTruncate:()=>u.D,buildStructureCoverageCatalog:()=>Q,documentOutlineFromStructurePlan:()=>av,mergeOriginalIdMaps:()=>ai,parseStructureOperations:()=>af,requiredStructureFactKeys:()=>R,structureOutputRepairProjection:()=>I,structurePlanPreview:()=>au,structureReferenceContext:()=>F,synthesizeDocumentStructurePlan:()=>as});var d=c(45002),e=c(29245),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(68515),l=c(15038),m=c(40123),n=c(36690),o=c(36980),p=c(69977),q=c(23105),r=c(62369),s=c(745),t=c(91088),u=c(62563),v=c(98943);let w=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},x=a=>Array.isArray(a)?a.map(w):[],y=["C","S","U","O","B"],z={coverageItemId:["C"],coverageItemIds:["C"],requiredCoverageItemIds:["C"],dependencySectionIds:["S"],sectionId:["S"],sectionIds:["S"],sourceSectionIds:["S"],fromSectionId:["S"],toSectionId:["S"],targetSectionId:["S"],outputId:["U"],targetOutputId:["U"],obligationId:["O","B"],targetObligationId:["O","C","B"],baselineId:["B"]},A=a=>JSON.parse(JSON.stringify(a)),B=(a,b)=>Object.hasOwn(a,b)?{present:!0,value:a[b]}:{present:!1},C=(a,b)=>[...new Set([...Object.keys(a),...Object.keys(b)])].sort().filter(c=>(0,s.Fu)(B(a,c))!==(0,s.Fu)(B(b,c))),D="independent-structure-plan-review";function E(a){return a.chapters.flatMap((a,b)=>a.sections.map((c,d)=>({chapterId:a.chapterId,chapterNumber:b+1,chapterTitle:a.title,sectionId:c.sectionId,sectionNumber:d+1,title:c.title,contentGroup:c.contentGroup})))}function F(a,b=[]){return{currentPlanHash:(0,n.YG)(a).planHash,currentSections:E(a),stableReferences:(0,e.GP)(a),numberingChanges:b}}let G=[e.bx,"structureReferences.currentSections 给出当前一基章号、节号、完整 sectionId、标题和内容组;自然语言“第X章/本章section:N”须按当前坐标核对,不把零基 chapterIndex 当章号。","numberingChanges 是按应用顺序记录的历史操作,每条 from/to 只对应其 beforePlanHash/afterPlanHash;拆节是一对多,不能把拆节后的第一节当作所有旧引用的目标。根据当前 coverageItemIds、契约原文和对象范围选择真正主载,不可机械替换文字或猜落点。","逐节核对全篇 objectScope、rationale 等文字中的章/节引用、连续节范围和“分别由”次序,包括未列入前轮 findings 的引用方及你本次提出的 patches/operations。拆并移节会改变编号:同回包自然语言接口优先用明确的章节标题和内容组,避免预猜操作后的编号;后续仍须核对最终候选。文字提及相邻章本身不是重复主载,但指向错误主载或遗漏范围须修订,不能因程序校验通过而批准。"],H="requiredOutputs 回复只写 form/carrierSemantic/element/semanticRole/obligationId/baselineId/quote/reason;不存在的可选身份字段省略,不填null。requiredOutputProvenance 与 sourceKind/source 是只读来源信息,不是回复字段;来源绑定仍靠真实 obligationId/baselineId 与原 quote/reason 保留。outputId/sectionId 即使回填也由程序按落点重算,不赋予新来源或批准。";function I(a){return{requiredOutputs:a.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,carrierSemantic:a.carrierSemantic,...void 0===a.source.quote?{}:{quote:a.source.quote},...void 0===a.source.reason?{}:{reason:a.source.reason},...void 0===a.obligationId?{}:{obligationId:a.obligationId},...void 0===a.baselineId?{}:{baselineId:a.baselineId}})),requiredOutputProvenance:a.map(a=>({outputId:a.outputId,source:{...a.source}}))}}function J(a){var b;return b={caller:a.caller,planningContext:P(a.planningContext),catalog:Q(a),archive:(b,c)=>aj(a,b,c)},async(a,c,d={})=>{if(!d.schema)throw Error("STRUCTURE_SELECTION_SCHEMA_REQUIRED");let e=w((0,t.cp)(JSON.parse(c))),f=function(a){let b=new Map(y.map(a=>[a,new Map])),c=new Map,d=(a,d)=>{if("string"!=typeof d||!d||b.get(a).has(d))return;let e=`${a}${b.get(a).size+1}`;b.get(a).set(d,e),c.set(e,{family:a,id:d})};a.catalog.forEach(a=>d("C",a.id)),[...a.planningContext.contractObligations,...a.planningContext.outputObligations].forEach(a=>d("O",a.id)),a.planningContext.baselineFigures.forEach(a=>d("B",a.id));let e=w(a.payload.plan);for(let b of Array.isArray(e.chapters)?x(e.chapters):x(a.payload.currentStructure))for(let a of x(b.sections))d("S",a.sectionId),x(a.requiredOutputs).forEach(a=>d("U",a.outputId));x(e.outputRegistry).forEach(a=>d("U",a.outputId));let f=a=>[...c].filter(([,b])=>a.includes(b.family)).map(([a])=>a),g=(a,c="",d="")=>{if("numberingChanges"===c||"reviewFeedback"===c)return structuredClone(a);if(Array.isArray(a))return a.map(a=>g(a,c,d));if("string"==typeof a){for(let e of z[c]??("id"===c?"baselineFigures"===d?["B"]:y:[])){let c=b.get(e)?.get(a);if(c)return c}return a}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,g(b,a,c)])):a},h=(a,b="")=>{let c=z[b],d=a.properties&&Object.fromEntries(Object.entries(a.properties).filter(([b,c])=>{if(!z[b]||"string"!==c.type||f(z[b]).length)return!0;if(!0===c.required||Array.isArray(a.required)&&a.required.includes(b))throw Error(`STRUCTURE_SELECTION_NO_TARGET:${b}没有当前可选目标`);return!1}).map(([a,b])=>[a,h(b,a)]));return c&&"array"===a.type&&!f(c).length?{...a,maxItems:0,items:{type:"string"}}:{...a,...c&&"string"===a.type?{enum:f(c)}:{},...a.items?{items:h(a.items,b)}:{},...d?{properties:d}:{}}},i=h(a.schema),j=g(a.payload),k=(a,b="")=>Array.isArray(a)?a.map(a=>k(a,b)):"string"==typeof a&&z[b]?f(z[b])[0]:a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,k(b,a)]).filter(([,a])=>void 0!==a)):a;j.output&&(j.output=k(j.output));let l={...j,structureSelectionProtocol:{version:"structure-bound-selection-v1",instructions:"身份字段只选择本次目录中的短键:C覆盖项、S当前节、U当前输出、O义务、B基线。真实ID由程序绑定,不抄hash、不改前缀、不创造键。按原文和专业含义选择,程序不代选主载或证据。不存在的可选目标字段省略。新节/输出的身份由程序生成。原文引文和文字中的稳定引用token保持原样。示例只表示字段形状,不表示建议选择。",allowedChoices:Object.fromEntries(y.map(a=>[a,f([a])]))}},m={version:"structure-bound-selection-v1",requestHash:(0,s.Fu)([a.payload,a.schema,[...c]]),identities:Object.fromEntries(c)},n=(a,b="")=>{if(Array.isArray(a))return a.map(a=>n(a,b));if(z[b]){let d="string"==typeof a?c.get(a):void 0;if(!d||!z[b].includes(d.family))throw Error(`STRUCTURE_SELECTION_UNKNOWN:${b}=${String(a)},只允许本次选项 ${f(z[b]).join(",")}`);return d.id}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,n(b,a)])):a};return{payload:l,schema:i,binding:m,restore:n}}({...b,payload:e,schema:d.schema}),g=(0,t.yA)(f.payload);b.archive?.("selection-input",{system:a,prompt:g,schema:f.schema,binding:f.binding});let h=await b.caller(a,g,{...d,schema:f.schema,validateProtocol:a=>{try{return d.validateProtocol?.(f.restore(a))??[]}catch(a){return[a instanceof Error?a.message:String(a)]}}});if(b.archive?.("selection-response",{requestHash:f.binding.requestHash,response:h}),void 0===h)return;let i=(0,v.validateJsonAgainstSchema)(h,f.schema);if(i.length)throw Error(`STRUCTURE_SELECTION_INVALID:${i.join(";")}`);return f.restore(h)}}let K=["table","figure","diagram","org_chart","chart"];function L(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let M={type:"string"},N=a=>({type:"array",items:a}),O=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function P(a){return{...a,contractObligations:a.contractObligations.filter(p.Ln),outputObligations:a.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a))}}function Q(a){let b=[],c=new Set,d=a=>{!a.id||!a.text.trim()||c.has(a.id)||(c.add(a.id),b.push({...a,text:a.text.trim()}))};for(let[b,c]of a.confirmed.chapters.entries())for(let[a,e]of c.points.entries())d({id:"coverage:"+(0,s.Fu)(["structure-requirement-v1",b,a]).slice(0,24),text:e.requirement?.trim()||e.title,kind:"requirement",enumerated:!1,chapterIndex:b,pointIndexes:[a]});for(let b of a.planningContext.contractObligations)if((0,p.Ln)(b))if(b.items?.length)for(let a of b.items)d({id:"coverage:"+(0,s.Fu)(["structure-obligation-item-v1",b.id,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"obligation",enumerated:!0,obligationId:b.id});else d({id:"coverage:"+(0,s.Fu)(["structure-obligation-v1",b.id]).slice(0,24),text:b.text,kind:"obligation",enumerated:!1,obligationId:b.id});for(let b of a.planningContext.professionalCandidates)for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)])d({id:"coverage:"+(0,s.Fu)(["structure-method-v1",b.chapterTitle,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"method",enumerated:!1});return b}function R(a){let b=/^(?:project_name|project_code|owner|project_location|项目名称|项目编号|建设单位|建设地点)$/u;return a.factsBaseline.filter(a=>!(!a.selected||b.test(a.key)||/项目名称|项目编号|建设单位|建设地点/u.test(`${a.key} ${a.fieldName??""}`)||!a.objectName&&(/^(?:project_scope|project_investment_estimate)$/u.test(a.key)||/招标范围|承包范围|项目投资估算|工程规模/u.test(a.fieldName??"")))).map(a=>a.key)}let S=O({form:{...M,enum:K},carrierSemantic:{...M,enum:n.J9},outputId:{...M},sectionId:{...M},element:{...M,minLength:1},semanticRole:{...M,minLength:1},obligationId:{...M,minLength:1},baselineId:{...M,minLength:1},quote:{...M,minLength:2},reason:{...M,minLength:2}},["form","carrierSemantic","element","semanticRole"]),T=O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),suggestedCarriers:N(O({contentSet:{...M,minLength:1},carrier:{...M,enum:["paragraph","table","figure","chart","diagram","org_chart"]},reason:{...M,minLength:2}},["contentSet","carrier","reason"]))},["title","contentGroup","coverageItemIds"]),U={type:"object",additionalProperties:!1,required:["chapters"],properties:{chapters:N(O({chapterIndex:{type:"integer",minimum:0},title:{...M,minLength:1},sections:N(T)},["sections"]))}},V={type:"object",additionalProperties:!1,required:["sections"],properties:{sections:N(O({title:M,objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1})},["objectScope","rationale","responsibilityPositions"]))}},W={type:"object",additionalProperties:!1,required:["factQuantities"],properties:{factQuantities:N(O({key:{...M,minLength:1},kind:{...M,enum:["fact","quantity"]},sectionId:{...M,minLength:1},notApplicableReason:{...M,minLength:2}},["key","kind"])),candidateDispositions:N(O({chapterTitle:M,candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["candidateTitle","disposition"])),outputExceptions:N(O({obligationId:{...M,minLength:1},reason:{...M,minLength:2},alternative:{...M,minLength:2}},["obligationId","reason","alternative"]))}},X={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...M,enum:["pass","revise","reject","accept"]},sectionReviews:N(O({sectionId:M,verdict:{...M,enum:["pass","revise","unreviewed"]},dependencySectionIds:N(M),dependencyScopeComplete:{type:"boolean"},sourceOnlyDraft:{type:"boolean"},reason:{...M,minLength:2}},["sectionId","verdict","dependencySectionIds","dependencyScopeComplete","reason"])),findings:N(O({category:{...M,minLength:1},severity:{...M,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSectionId:M,targetOutputId:M,targetObligationId:M,detail:{...M,minLength:2},fix:{...M,minLength:2}},["category","severity","detail","fix"],!0)),patches:N(O({sectionId:{...M,minLength:1},title:{...M,minLength:1},contentGroup:{...M,minLength:1},objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1}),coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S)},["sectionId"],!0)),operations:N(O({op:{...M,enum:["update-section","move-section","merge-sections","split-section","move-coverage","move-output","change-content-group","change-carrier"]},sectionId:{...M,minLength:1},targetChapterIndex:{type:"integer",minimum:0},sourceSectionIds:N({...M,minLength:1}),title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemId:{...M,minLength:1},fromSectionId:{...M,minLength:1},toSectionId:{...M,minLength:1},outputId:{...M,minLength:1},carrierSemantic:{...M,enum:n.J9},form:{...M,enum:K},sections:N(O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1})},["title","contentGroup"]))},["op"],!0)),exceptionDecisions:N(O({obligationId:{...M,minLength:1},accepted:{type:"boolean"},basis:{...M,minLength:2}},["obligationId","accepted","basis"]))}};function Y(a){return a.map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.pointIndexes?.length?{chapterIndex:a.chapterIndex,pointIndexes:a.pointIndexes}:{}}))}function Z(a,b,c,d){let e=new Set(b.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),f=new Set(b.outputRegistry.map(a=>a.outputId)),g=new Set(c.map(a=>a.id)),h=new Set([...g,...d.contractObligations.map(a=>a.id),...d.outputObligations.map(a=>a.id)]),i=new Set([...d.contractObligations.filter(a=>!(0,p.Ln)(a)),...d.outputObligations.filter(a=>"domain-baseline"!==a.kind&&!(0,p.oY)(a))].map(a=>a.id));return a.map(a=>{let b=[];if(a.target.sectionId&&!e.has(a.target.sectionId)&&b.push(`节「${a.target.sectionId}」不存在`),a.target.outputId&&!f.has(a.target.outputId)&&b.push(`输出「${a.target.outputId}」不存在`),a.target.obligationId&&!h.has(a.target.obligationId)&&b.push(`契约项「${a.target.obligationId}」不存在`),a.target.obligationId&&i.has(a.target.obligationId)&&b.push(`义务「${a.target.obligationId}」未核定适用本技术正文,不能作为本正文必出缺口`),/不在\s*coverageCatalog|不在契约项目录/u.test(a.detail)){let c=a.detail.match(/coverage:[a-z0-9]+/gu)??[],d=c.filter(a=>g.has(a));c.length&&d.length===c.length&&b.push(`coverage id 实际存在于目录:${d.join("、")}`)}return b.length?{...a,severity:"advisory",detail:`${a.detail}(程序核对:${b.join(";")},已降为 advisory)`}:a})}function $(a,b,c,d,e=[],f){return(0,t.dk)({planningContext:(0,o.compactPlanningContextProjection)(P(a.planningContext),{facts:"keys",obligations:"texts"}),coverageCatalog:Y(c),confirmedChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),plan:b,structureReferences:F(b,e),task:"独立审查施工组织设计的二级结构计划:只审结构完整性、专业逻辑、粒度、载体与重复;不改写正文,不替作者决定工法",rules:[...G,"你是独立规划审查者,不是本计划的作者。不得因为作者写了理由就接受;逐项核对象/专业/接口/风险/阶段是否有落点。","sectionReviews 对当前每一节恰好返回一条覆盖回执,不受 findings 的条数限制。未实际审完写 unreviewed;发现未决写 revise;明确审过本节及依赖范围且可起草才写 pass。dependencySectionIds 列出实际依赖的当前节,dependencyScopeComplete 仅在依赖范围已审完时为 true。无 finding 或文字未改都不代表 pass。逐节批准只允许起草,不能替代整稿独审、正文独审或锁节。","sourceOnlyDraft 仅当该节及依赖闭包可完全依靠当前冻结来源与批准结构起草、不依赖尚未形成的工法决定/专业建包/资源配置/计算或执行基准时为 true;不确定或依赖这些成果则 false。它不批准正文、不免除正文独审和最终全局交付。","检查:章下节是否覆盖项目对象与专业系统;是否有过粗(一节承载多个对象/专业/阶段)、过细(同一主题拆碎)、空泛模板节、与已确认招标要点无关的节。","**章内节以该章确认要点为准**:节可以承接 confirmedChapters.points 或合同义务;章题是概括性表述,不等于内容错位。只有节既不承接本章任何确认要点、也不承接合同义务,或明显应归另一章时才判错位。","检查:每项合同内容义务(含原子项)是否有节承接;每项必出输出是否只有一个主载体与一个节;是否有同一内容组被表/图重复主载;组织机构图是否只有一张。","**同文覆盖项同节**:coverageCatalog 中去除空白/标点后文本相同的契约项是同一内容组;发现它们跨节时,fix 必须要求整组归并到一节,不得只移动其中一项,也不得把同文组拆到两节。","**内容组与载体语义**:同一 contentGroup 只能由一个节主载;输出声明的 carrierSemantic 必须与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。发现冲突用 patches 改 contentGroup/requiredOutputs;跨节移动/合并/拆分用 operations,不要只写文字意见。","**主载体重复 ≠ 对象范围提及**:只有同一内容组在两个节都被作为主载体展开(表/图/独立措施段落)才算 blocking duplication;仅在 objectScope/接口边界提到相邻章的对象,写 advisory。","**引用可核**:只能引用 coverageCatalog 中真实存在的契约项 id、plan 中真实存在的 sectionId/outputId;不得凭印象报告“某 id 不在目录”。","检查:节标题是否名词短语、同级平行、无评审/说明语言、无重复;objectScope/rationale 是否具体到本项目,不是可套用任何工程的空话。","检查:事实/工程量落点是否与节内声明一致;专业候选未采用是否有具体理由。","检查:规划是否写死固定阶段/工日/机械/项目常量,或把“编制依据/图纸理解/清单对账”当正文主题。","发现可修的节级问题,用 patches 返回(sectionId + 修改字段);不能修的结构问题写 blocking finding。exceptionDecisions 只对 outputExceptions 给出接受/拒绝与理由。","verdict=pass 仅当没有 blocking finding 且结构可直接进入写作;有 blocking 但已用 patches 修正可给 revise。","**输出控制**:findings 最多 12 条,按严重度排序;detail 不超过 120 字,fix 不超过 80 字;同一问题不要重复。patches 最多 12 条、operations 最多 12 条,只给确实可修的节/确实可落地的结构修改;无法修的写 finding。","**示例只是字段形状**:output 里的“工程名词短语一/二”“内容组一/二”“表名”都是占位符,不是要照抄的标题或内容组;必须换成本项目实际的工程名词、内容组与表名。",H,"只输出 JSON。"],round:d,...f?{reviewFeedback:f}:{},output:{verdict:"revise",findings:[{category:"structure",severity:"blocking",targetSectionId:"section…",detail:"可核问题",fix:"具体修法"}],patches:[{sectionId:"section…",objectScope:"修订后的对象范围",contentGroup:"内容组"}],operations:[{op:"move-coverage",coverageItemId:"coverage:…",toSectionId:"section…"},{op:"move-section",sectionId:"section…",targetChapterIndex:1},{op:"merge-sections",sectionId:"section…",sourceSectionIds:["section…"],contentGroup:"内容组"},{op:"split-section",sectionId:"section…",sections:[{title:"工程名词短语一",contentGroup:"内容组一",coverageItemIds:["coverage:…"]},{title:"工程名词短语二",contentGroup:"内容组二",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组二",reason:"唯一承载"}]}]},{op:"change-carrier",outputId:"output:…",carrierSemantic:"organization"}],exceptionDecisions:[{obligationId:"output:…",accepted:!1,basis:"拒绝理由"}]}})}function _(a,b,c,d,e){return"output:"+(0,s.Fu)(["structure-output-v2",a,b,c??"",d.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),e.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24)}function aa(a){let b=new Map(a.planningContext.outputObligations.map(a=>[a.id,a])),c=new Map(a.planningContext.baselineFigures.map(a=>[a.id,a])),d=[];for(let f of Array.isArray(a.raw)?a.raw:[]){var e;let g=f??{},h="string"==typeof g.obligationId?g.obligationId.trim():"",i="string"==typeof g.baselineId?g.baselineId.trim():"",j=h?b.get(h):void 0,k=j&&("domain-baseline"===j.kind||(0,p.oY)(j))?j:void 0,l=i?c.get(i):void 0,m=(e=g.form??k?.form??l?.form,K.includes(e)?e:"table"),o=n.J9.includes(g.carrierSemantic)?g.carrierSemantic:void 0,q=String(g.element??k?.element??l?.element??"").trim();if(!q)continue;let r=String(g.semanticRole??"").trim()||q,s=String(g.quote??k?.quote??"").trim(),t=String(g.reason??l?.requirement??"").trim(),u=k?.kind==="domain-baseline"||!!l,v=u?"domain-baseline":k?"tender":"agent-decision",w=u&&(i||k?.id)||"";d.push({outputId:_(a.sectionId,m,o,q,r),form:m,element:q,semanticRole:r,...o?{carrierSemantic:o}:{},sectionId:a.sectionId,primary:!0,source:{kind:v,...s?{quote:s}:{},...t?{reason:t}:{}},dedupeKey:"",...k?{obligationId:k.id}:{},...w?{baselineId:w}:{}})}return d}function ab(a){return{...a,outputRegistry:a.chapters.flatMap(a=>a.sections.flatMap(a=>a.requiredOutputs))}}function ac(a,b){for(let[c,d]of a.chapters.entries()){let a=d.sections.findIndex(a=>a.sectionId===b);if(a>=0)return{chapterIndex:c,sectionIndex:a,section:d.sections[a]}}}function ad(a,b,c,d){return{...a,chapters:a.chapters.map((a,e)=>e===b?{...a,sections:a.sections.map((a,b)=>b===c?d:a)}:a)}}function ae(a,b){return{...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.filter(a=>a.sectionId!==b)}))}}function af(a){let b=Array.isArray(a)?a:[],c=a=>Array.isArray(a)?[...new Set(a.map(a=>String(a).trim()).filter(Boolean))]:[],d=a=>"string"==typeof a&&a.trim()?a.trim():void 0;return b.flatMap(a=>{let b=a??{},e=String(b.op??""),f=String(b.sectionId??"").trim();switch(e){case"update-section":return f?[{op:e,sectionId:f,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{}}]:[];case"move-section":{let a=Number(b.targetChapterIndex);return f&&Number.isInteger(a)&&a>=0?[{op:e,sectionId:f,targetChapterIndex:a}]:[]}case"merge-sections":{let a=c(b.sourceSectionIds);return f&&a.length?[{op:e,sectionId:f,sourceSectionIds:a,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{}}]:[]}case"split-section":{let a=(Array.isArray(b.sections)?b.sections:[]).flatMap(a=>{let b=a??{},e=String(b.title??"").trim(),f=String(b.contentGroup??"").trim();return e&&f?[{title:e,contentGroup:f,...c(b.coverageItemIds).length?{coverageItemIds:c(b.coverageItemIds)}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:b.requiredOutputs}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{},...c(b.factKeys).length?{factKeys:c(b.factKeys)}:{},...c(b.quantityKeys).length?{quantityKeys:c(b.quantityKeys)}:{}}]:[]});return f&&a.length?[{op:e,sectionId:f,sections:a}]:[]}case"move-coverage":{let a=String(b.coverageItemId??"").trim(),c=String(b.toSectionId??"").trim(),f=d(b.fromSectionId);return a&&c?[{op:e,coverageItemId:a,toSectionId:c,...f?{fromSectionId:f}:{}}]:[]}case"move-output":{let a=String(b.outputId??"").trim(),c=String(b.toSectionId??"").trim();return a&&c?[{op:e,outputId:a,toSectionId:c}]:[]}case"change-content-group":{let a=d(b.contentGroup);return f&&a?[{op:e,sectionId:f,contentGroup:a}]:[]}case"change-carrier":{let a=String(b.outputId??"").trim();if(!a)return[];return[{op:e,outputId:a,carrierSemantic:String(b.carrierSemantic??""),...K.includes(b.form)?{form:b.form}:{}}]}default:return[]}})}function ag(a){let b=a.plan,c=[...a.operations],d=[],e=[],f=[],g=new Map;for(let b of a.plan.chapters)for(let a of b.sections)g.set(a.sectionId,a.sectionId);for(;c.length;){let h=c.shift(),i=function(a,b,c){switch(b.op){case"update-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,...b.title?.trim()?{title:b.title.trim()}:{},...b.contentGroup?.trim()?{contentGroup:b.contentGroup.trim()}:{},...b.objectScope?.trim()?{objectScope:b.objectScope.trim()}:{},...b.rationale?.trim()?{rationale:b.rationale.trim()}:{},...b.responsibilityPositions?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]}:{}})}}case"move-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};if(!a.chapters[b.targetChapterIndex])return{error:`目标章 ${b.targetChapterIndex} 不存在`};let d=ae(a,b.sectionId);return{plan:{...d,chapters:d.chapters.map((a,d)=>d===b.targetChapterIndex?{...a,sections:[...a.sections,c.section]}:a)}}}case"merge-sections":{let c=ac(a,b.sectionId);if(!c)return{error:`幸存节「${b.sectionId}」不存在`};let d=[...new Set(b.sourceSectionIds.filter(a=>a&&a!==b.sectionId))];if(!d.length)return{error:"并节至少需要一个 sourceSectionIds"};let e=d.map(b=>({id:b,location:ac(a,b)})),f=e.find(a=>!a.location);if(f)return{error:`待并节「${f.id}」不存在`};let g=e.map(a=>a.location.section),h=a=>[...new Set(a.flat().filter(Boolean))],i={...c.section,title:b.title?.trim()||c.section.title,contentGroup:b.contentGroup?.trim()||c.section.contentGroup,coverageItemIds:h([c.section.coverageItemIds,...g.map(a=>a.coverageItemIds)]),requiredOutputs:[...c.section.requiredOutputs,...g.flatMap(a=>a.requiredOutputs.map(a=>({...a,sectionId:b.sectionId})))],suggestedCarriers:[...c.section.suggestedCarriers,...g.flatMap(a=>a.suggestedCarriers)].filter((a,b,c)=>c.findIndex(b=>b.contentSet===a.contentSet&&b.carrier===a.carrier)===b),factKeys:h([c.section.factKeys,...g.map(a=>a.factKeys)]),quantityKeys:h([c.section.quantityKeys,...g.map(a=>a.quantityKeys)])},j=a;for(let a of d)j=ae(j,a);let k=ac(j,b.sectionId);if(!k)return{error:"并节后幸存节丢失"};if(j={...j=ad(j,k.chapterIndex,k.sectionIndex,i),factQuantities:j.factQuantities.map(a=>a.sectionId&&d.includes(a.sectionId)?{...a,sectionId:b.sectionId}:a)},c.section.referenceId){let a=g.flatMap(a=>a.referenceId?[a.referenceId]:[]),b=b=>a.reduce((a,b)=>a.split(`[[section:${b}]]`).join(`[[section:${c.section.referenceId}]]`),b);j={...j,chapters:j.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,objectScope:b(a.objectScope),rationale:b(a.rationale)}))}))}}return{plan:j,aliases:new Map(d.map(a=>[a,b.sectionId]))}}case"split-section":{let d=ac(a,b.sectionId);if(!d)return{error:`待拆节「${b.sectionId}」不存在`};if(b.sections.length<2)return{error:"拆节至少需要两个新节"};let e=d.section,f=b.sections.map((a,b)=>`__split:${e.sectionId}:${b}__`),g=new Set(b.sections.flatMap(a=>a.coverageItemIds??[])),h=e.coverageItemIds.filter(a=>!g.has(a));if(h.length)return{error:`拆节后契约项未分配:${h.slice(0,6).join("、")}`};let i=[...g].filter(a=>!e.coverageItemIds.includes(a));if(i.length)return{error:`拆节不能引入本节没有的契约项:${i.slice(0,6).join("、")}`};let j=new Set(b.sections.flatMap(a=>a.factKeys??[])),k=new Set(b.sections.flatMap(a=>a.quantityKeys??[])),l=e.factKeys.filter(a=>!j.has(a)),m=e.quantityKeys.filter(a=>!k.has(a)),o=b.sections.map((a,b)=>{let d=f[b];return{sectionId:d,...e.referenceId?{referenceId:`${e.referenceId}x${b+1}`}:{},title:a.title.trim(),contentGroup:a.contentGroup.trim(),objectScope:a.objectScope?.trim()||e.objectScope,rationale:a.rationale?.trim()||e.rationale,responsibilityPositions:a.responsibilityPositions?[...new Set(a.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]:[...e.responsibilityPositions],coverageItemIds:[...new Set(a.coverageItemIds??[])],requiredOutputs:aa({sectionId:d,raw:a.requiredOutputs??[],planningContext:c}),suggestedCarriers:[],factKeys:[...new Set([...a.factKeys??[],...0===b?l:[]])],quantityKeys:[...new Set([...a.quantityKeys??[],...0===b?m:[]])]}}),p=a=>a.obligationId??a.baselineId??(0,n.h5)(a.element,a.semanticRole),q=new Set(e.requiredOutputs.map(p)),r=new Set(o.flatMap(a=>a.requiredOutputs).map(p)),s=[...q].filter(a=>!r.has(a));if(s.length)return{error:`拆节后必出输出未分配:${s.slice(0,6).join("、")}`};let t=new Map;for(let a of o){for(let b of a.factKeys)t.set(`fact:${b}`,a.sectionId);for(let b of a.quantityKeys)t.set(`quantity:${b}`,a.sectionId)}let u=ad(a,d.chapterIndex,d.sectionIndex,o[0]),v=u.chapters.map((a,b)=>b===d.chapterIndex?{...a,sections:[...a.sections.slice(0,d.sectionIndex),...o,...a.sections.slice(d.sectionIndex+1)]}:a);return{plan:{...u,chapters:v,factQuantities:a.factQuantities.map(a=>{if(a.sectionId!==e.sectionId)return a;let b=t.get(`${a.kind}:${a.key}`);return b?{...a,sectionId:b}:a})},aliases:new Map([[e.sectionId,f[0]]]),splitSuccessors:new Map([[e.sectionId,f]])}}case"move-coverage":{if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let c=a.chapters.flatMap(a=>a.sections).filter(a=>a.coverageItemIds.includes(b.coverageItemId));if(b.fromSectionId&&!c.some(a=>a.sectionId===b.fromSectionId))return{error:`契约项「${b.coverageItemId}」不在节「${b.fromSectionId}」`};if(!c.length)return{error:`契约项「${b.coverageItemId}」不在任何节`};let d={...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,coverageItemIds:a.coverageItemIds.filter(a=>a!==b.coverageItemId)}))}))},e=ac(d,b.toSectionId);if(!e)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(d,e.chapterIndex,e.sectionIndex,{...e.section,coverageItemIds:[...new Set([...e.section.coverageItemIds,b.coverageItemId])]})}}case"move-output":{let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};if(c.section.sectionId===b.toSectionId)return{error:"输出已在该节"};if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.filter(a=>a.outputId!==b.outputId)}),f=ac(e,b.toSectionId);if(!f)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(e,f.chapterIndex,f.sectionIndex,{...f.section,requiredOutputs:[...f.section.requiredOutputs,{...d,sectionId:f.section.sectionId}]})}}case"change-content-group":{if(!b.contentGroup?.trim())return{error:"contentGroup 不能为空"};let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,contentGroup:b.contentGroup.trim()})}}case"change-carrier":{if(!n.J9.includes(b.carrierSemantic))return{error:`carrierSemantic「${String(b.carrierSemantic)}」不在枚举内`};let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=n._s[b.carrierSemantic],f=b.form??(e.includes(d.form)?d.form:e[0]),g={...d,carrierSemantic:b.carrierSemantic,form:f,outputId:_(c.section.sectionId,f,b.carrierSemantic,d.element,d.semanticRole)};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.map(a=>a.outputId===b.outputId?g:a)})}}default:return{error:`未知结构操作「${String(b.op)}」`}}}(b,h,a.planningContext);if("error"in i){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:i.error});continue}let j=function(a,b=new Map){let c=new Map,d=a.chapters.map(a=>({...a,sections:a.sections.map((b,d)=>{let e=`${a.chapterId}:section:${d+1}`;return c.set(b.sectionId,e),{...b,sectionId:e,requiredOutputs:b.requiredOutputs.map(a=>({...a,sectionId:e}))}})})),e=a=>{let d=b.get(a)??a;return c.get(d)??d};return{idMap:c,plan:ab({...a,chapters:d,factQuantities:a.factQuantities.map(a=>a.sectionId?{...a,sectionId:e(a.sectionId)}:a),coverageMatrix:a.coverageMatrix.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))],...a.itemLandings?{itemLandings:a.itemLandings.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))]}))}:{}}))})}}(i.plan,i.aliases),k=al(aq(j.plan,a.planningContext),a.catalog),l=a.validate(k);if(l.length){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:ah(l).slice(0,6).join(";")});continue}let m=new Map(E(k).map(a=>[a.sectionId,a])),o=E(b).flatMap(a=>{let b=(i.splitSuccessors?.get(a.sectionId)??[i.aliases?.get(a.sectionId)??a.sectionId]).flatMap(a=>{let b=m.get(j.idMap.get(a)??a);return b?[b]:[]});return 1!==b.length||b[0].sectionId!==a.sectionId?[{from:a,to:b}]:[]});for(let[a,c]of(o.length&&f.push({op:h.op,beforePlanHash:(0,n.YG)(b).planHash,afterPlanHash:(0,n.YG)(k).planHash,sections:o}),b=k,d.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:j.idMap.get(h.sectionId)??j.idMap.get(i.aliases?.get(h.sectionId)??"")??h.sectionId,originalSectionId:h.sectionId}:{}}),g)){let b=i.aliases?.get(c)??c;g.set(a,j.idMap.get(b)??b)}c=c.map(a=>(function(a,b){switch(a.op){case"update-section":case"move-section":case"split-section":case"change-content-group":return{...a,sectionId:b(a.sectionId)};case"merge-sections":return{...a,sectionId:b(a.sectionId),sourceSectionIds:a.sourceSectionIds.map(b)};case"move-coverage":return{...a,...a.fromSectionId?{fromSectionId:b(a.fromSectionId)}:{},toSectionId:b(a.toSectionId)};case"move-output":return{...a,toSectionId:b(a.toSectionId)};case"change-carrier":return a}})(a,a=>j.idMap.get(a)??a))}return{plan:b,applied:d,rejected:e,originalIdMap:g,numberingChanges:f}}function ah(a){return a.map(a=>a.message)}function ai(a,b){let c=new Map(b);for(let[d,e]of a){let a=e,f=new Set;for(;!f.has(a)&&b.has(a);)f.add(a),a=b.get(a);c.set(d,a)}return c}function aj(a,b,c){if(a.artifactDir)try{let d=a.runId?i().join(a.artifactDir,"runs",a.runId,"artifacts","structure-plan"):i().join(a.artifactDir,"structure-plan");g().mkdirSync(d,{recursive:!0}),g().writeFileSync(i().join(d,`${b}-${Date.now()}-${(0,j.randomUUID)()}.json`),JSON.stringify({runId:a.runId??null,kind:b,value:c},null,2))}catch{}}let ak={type:"object",additionalProperties:!1,required:["patches"],properties:{patches:X.properties.patches,operations:X.properties.operations}};function al(a,b){let c=new Map;for(let a of b)a.obligationId&&c.set(a.obligationId,[...c.get(a.obligationId)??[],a]);let d=new Map;for(let b of a.chapters)for(let a of b.sections)for(let b of a.coverageItemIds)d.set(b,a.sectionId);let e=new Map(a.coverageMatrix.map(a=>[a.obligationId,a]));return{...a,coverageMatrix:[...c].map(([a,b])=>{let c=b.map(a=>({item:a.text,sectionIds:d.has(a.id)?[d.get(a.id)]:[]})).filter(a=>a.sectionIds.length>0).sort((a,b)=>a.item.localeCompare(b.item)),f=[...new Set(c.flatMap(a=>a.sectionIds))].sort(),g=f.length>1?"distributed":"section";return{obligationId:a,landing:g,sectionIds:f,reason:e.get(a)?.reason??"按规划节内主载投影",..."distributed"===g?{itemLandings:c}:{}}}).sort((a,b)=>a.obligationId.localeCompare(b.obligationId))}}let am={type:"object",additionalProperties:!1,required:["dispositions"],properties:{dispositions:N(O({chapterTitle:{...M,minLength:1},candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["chapterTitle","candidateTitle","disposition","reason"]))}};async function an(a,b,c){let d=await a.caller("你是施工组织设计结构规划者。只为未进入结构的专业候选给出处置理由;只输出 JSON。",(0,t.dk)({task:"解释专业候选为何未单独进入结构:已被现有节承接,或确实不适用",currentStructure:b.chapters.filter(a=>c.some(b=>(0,q.ri)(b.chapterTitle)===(0,q.ri)(a.title))).map(a=>({chapterTitle:a.title,sections:a.sections.map(a=>({title:a.title,objectScope:a.objectScope}))})),missingCandidates:c,rules:["若候选主题已由某个现有节的结构/对象范围实际承接,disposition=used,并在 reason 写明由哪一节承接。","若确实不适用,disposition=not-applicable,并写本项目具体理由(不存在该对象、已并入哪一节、合同/图纸无该要求);不得用空话。","不得编造项目对象或来源;只输出 JSON。"],output:{dispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"具体理由"}]}}),{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:am});if(aj(a,"candidate-repair",d),!d)return b;let e=Array.isArray(d.dispositions)?d.dispositions:[],f=[...b.candidateDispositions??[]];for(let a of e){let b=String(a.chapterTitle??"").trim(),c=String(a.candidateTitle??"").trim(),d=String(a.reason??"").trim();if(!b||!c||!d)continue;let e="used"===a.disposition?"used":"not-applicable",g=f.findIndex(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b)&&(0,q.ri)(a.candidateTitle)===(0,q.ri)(c)),h={chapterTitle:b,candidateTitle:c,disposition:e,reason:d};g>=0?f[g]=h:f.push(h)}return{...b,candidateDispositions:f}}function ao(a,b,c,d){let e=new Map(b.map(a=>[String(a.sectionId??""),a])),f=aq(ab({...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>{let b=e.get(a.sectionId);return b?{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:a.sectionId,raw:b.requiredOutputs,planningContext:c})}:{}}:a})}))}),c);return a.coverageMatrix.length?al(f,d):f}async function ap(a,b,c,d,e=[],f){let g="你是施工组织设计结构规划者。按具体问题修订当前候选的范围、落点、标题与载体;保留可核证据,不得降低问题严重性。只输出 JSON。",h=function(a,b,c,d,e=[],f){return(0,t.dk)({...d?{planningContext:(0,o.compactPlanningContextProjection)(P(d.planningContext),{obligations:"texts"})}:{},task:"修补施工组织设计二级结构:根据 deterministicIssues 逐项修订当前候选,包括对象范围、专业边界、义务落点与载体;不得改动已确认一级章节",structureReferences:F(a,e),currentStructure:a.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope,rationale:a.rationale,responsibilityPositions:a.responsibilityPositions,factKeys:a.factKeys,quantityKeys:a.quantityKeys,coverageItemIds:a.coverageItemIds,...I(a.requiredOutputs)}))})),coverageCatalog:Y(c),currentFactLandings:a.factQuantities,eligibleAdditionalFactKeys:d?.planningContext.factsBaseline.filter(a=>a.selected).map(a=>a.key),...f?{reviewFeedback:{...f,currentPlanHash:(0,n.YG)(a).planHash,usage:"意见绑定reviewedPlanHash,当前候选以currentStructure为准;建议只供核对,不代表已应用或已批准。已变动目标须按当前目录与完整编号变更重新选择。"}}:{},deterministicIssues:b.map(a=>({code:a.code,message:a.message,...a.target?.sectionId?{sectionId:a.target.sectionId}:{},...a.target?.key?{key:a.target.key}:{},target:a.target})),rules:[...G,H,"title:必须是工程名词短语,同级平行;不得含招标/评审/评分/说明/报价/费用/措施费/人工费/包括但不限于/不得/必须/要求等语言,不得动词开头或以标点结尾。","coverageItemIds:**整节替换**,不是追加。每个契约项在全篇只能出现在一个节;requiredCoverageItemIds / deterministicIssues 里缺的 id 必须补到最相关节。","**同文覆盖项同节**:去除空白与标点后文本相同的契约项是同一内容组,组内所有 id 必须待在同一个节;移动/移除必须整组处理,不能只搬其中一个 id。","contentGroup:**整节替换**。同一内容组全篇只能由一个节主载;重复时只保留真正展开该内容组的节,其余节改内容组或改为引用表述。","requiredOutputs:**整节替换**,不是追加;同一内容组只能一个输出;每个输出必须带 carrierSemantic,且与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。组织机构图全篇只能一张:招标格式义务与领域基线义务合并在同一个输出里,统一用 org_chart 形式,同时填 obligationId 与 baselineId,不得同时登记 diagram 与 org_chart。","每个输出须保留当前原文/理由与来源绑定。招标必交输出填已核 obligationId 与 quote;领域基线填 baselineId;你新增的表图须填写 reason,说明为何选用这一载体,不能冒充招标要求。未修改的输出无需重写;整节替换时不能漏掉已有来源字段。","项目管理机构图与人员组成表必须在同一节:需要时同时修补两个节——一个节移除、另一个节加回;不能只删不加。","按契约项文本与节标题/对象范围的专业相关性归位;同一章的招标要点优先放入该章最相关的节。","objectScope、rationale、responsibilityPositions、factKeys、quantityKeys 可直接修订。跨节移动/合并/拆分、换载体用 operations;必须保留全部义务与输出,不能只改被举例的一节而遗漏同类问题。","factKeys 声明唯一主载;项目身份/宏观事实不强制逐节登记,但你明确使用 eligibleAdditionalFactKeys 中的事实时,程序会同步全局落点。移动须从原节移除后在目标节声明。不得把未决/未知键当已选事实,quantityKeys 不得编造新的工程量身份。","不得增删一级章节,不得编造现有 id;拆分节的 id 由程序生成。已应用补丁不等于全部问题消除,核对当前候选逐条处理。只输出 JSON。"],output:{patches:[{sectionId:"section…",title:"修订后的名词短语",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"org_chart",element:"项目管理组织机构图",semanticRole:"项目管理组织层级与汇报关系",obligationId:"output:…",baselineId:"baseline-org-chart"}]}]}})}(b,c,d,a,e,f);aj(a,"skeleton-repair-input",{system:g,prompt:h,candidate:b,issues:c});let i=await a.caller(g,h,{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:ak});if(aj(a,"skeleton-repair",i),!i)return b;let j=ao(b,Array.isArray(i.patches)?i.patches:[],a.planningContext,d),k=af(i.operations);if(!k.length)return j;let l=ag({plan:j,operations:k,catalog:d,planningContext:a.planningContext,validate:b=>ar(b,{confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:d,requiredCoverageItemIds:d.filter(a=>"method"!==a.kind).map(a=>a.id),requiredFactKeys:R(a.planningContext)},{allowTransientCoverageSplit:!0})});return e.push(...l.numberingChanges),aj(a,"repair-operations",{applied:l.applied,rejected:l.rejected,numberingChanges:l.numberingChanges,candidate:l.plan}),l.plan}function aq(a,b){let c=a.chapters.flatMap(a=>a.sections),d=a.factQuantities.map(a=>{let b=c.filter(b=>("fact"===a.kind?b.factKeys:b.quantityKeys).includes(a.key));if(1!==b.length)return a;let{notApplicableReason:d,...e}=a;return{...e,sectionId:b[0].sectionId}}),e=new Set(d.filter(a=>"fact"===a.kind).map(a=>a.key));for(let a of b.factsBaseline){if(!a.selected||e.has(a.key))continue;let b=c.filter(b=>b.factKeys.includes(a.key));1===b.length&&(d.push({kind:"fact",key:a.key,sectionId:b[0].sectionId}),e.add(a.key))}return{...a,factQuantities:d}}function ar(a,b,c){return(0,n.uc)((0,n.YG)({...a,state:a.state??"draft"}),b,c)}async function as(a){let b=a.sectionContracts??new d.G((0,s.Fu)(JSON.parse(JSON.stringify({project:a.project,planningContext:a.planningContext,confirmed:a.confirmed})))),c=b.subscribe(b=>aj(a,"section-contracts",{states:b}));try{let c=await at({...a,sectionContracts:b});return b.approveGlobal(c.plan,c.review),{...c,sectionContracts:b}}catch(a){throw b.cancel("全局结构规划未完成,撤销本轮起草许可"),a}finally{c()}}async function at(a){let b=[],c=Q({confirmed:a.confirmed,planningContext:a.planningContext}),d=c.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),f=R(a.planningContext),g={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning"},h="你是施工组织设计总编与结构规划者。只依据给定的招标确认、规划上下文与契约项目录规划结构;只输出 JSON。",i={confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:c,requiredCoverageItemIds:d,requiredFactKeys:f,requiredQuantityKeys:[]},j=0,v=0,w=async()=>{let d,f=async()=>{j+=1;let b=await a.caller(h,function(a,b){let c=(0,o.compactPlanningContextProjection)(P(a.planningContext));return(0,t.dk)({planningContext:c,coverageCatalog:Y(b),requiredCoverageItemIds:b.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),task:"规划施工组织设计的二级结构:章下的节、每节承接的契约项、每节的必出表/图与载体建议;章标题固定取招标确认原文",rules:["章数与顺序与 givenChapters 一致;章标题由程序原样写回,你不得另拟或改写。","节按工程对象、专业系统、施工阶段、工作界面、风险与管理要素划分;每章至少一节。","节标题必须是名词短语、同级平行:不得出现“招标文件、招标范围、响应、评标、评审、评分、理解、包括但不限于、不得、必须、要求、说明、投标报价、措施费”等评审/说明语言;不得以动词开头或以标点结尾。","**契约项覆盖**:coverageCatalog 中 kind=requirement 与 kind=obligation 的每一项都必须恰好落在一个节的 coverageItemIds 中,不得遗漏、重复或编造 id;kind=method 是候选,可按项目需要采用。","**输出前自检**:逐项核对 requiredCoverageItemIds 是否都出现在某个节的 coverageItemIds 中,尤其是带括号的清单型招标要点;少一项整份计划会被退回。","**原子项**:同一内容义务的多个原子项可以分布到多个节,但每个原子项仍要各自出现在某个节的 coverageItemIds 中。","**同文覆盖项同节**:去除空白与标点后文本相同的 requirement/obligation 契约项属于同一内容组,必须整组落在同一节;移动/移除时整组处理,不得拆到两节。","**必出输出**:只对经独立适用性审查确认的 planningContext.outputObligations 安排 requiredOutputs:obligationId 逐字使用给定 id;form 使用义务的形式;tender-required 输出必须带 quote;domain-baseline 输出填 baselineId。技术正文与技术附表均可为本技术标必交位置,逐项保留 delivery。来源位于合同/商务/附录不决定技术内容是否适用;contractObligations 中的技术约束须响应,但不自动要求提交原表。其他原表、建议载体与未决项留在处置账,自选图表须写 reason,不能冒充其他原表的履行。","**内容组(contentGroup)**:每个节必须声明一个 contentGroup(如项目管理组织、临时设施、质量资料、人材机配置、进度计划、总平面布置);同一内容组全篇只能由一个节主载,引用节只能写“见表X/图X/第X节”,不得再复述。","**载体语义(carrierSemantic)**:每个输出必须声明内容形态:组织机构→organization(org_chart);横道/进度条→gantt(chart);网络计划/关键线路→network(diagram);流程/工序关系→flow(diagram);综合排布/总平面/空间布置→spatial(figure);碰撞协调/专业交叉→collision(figure);对照/清单/参数矩阵→comparison(table);确实不属于以上形态才用 other。声明必须与实际 form 匹配,否则整份计划被退回。","**同一内容组只登记一次**:element 是输出的工程名称,semanticRole 是它承载的内容组(如组织结构、进度计划、总平面布置);同一 element+semanticRole 只能出现一次,不得用 table 与 figure 同时主载同一内容组。","**同一内容组的多个输出义务合并为一个输出**:例如招标格式组织机构图与领域基线组织机构图,只登记一个输出,同一个对象同时填 obligationId(招标义务)与 baselineId(基线义务);组织机构图全篇只能一张,统一用 org_chart 形式,不得同时登记 diagram 与 org_chart。","**项目管理机构图与人员组成表同节**:两者是同一内容组的两面,必须放在同一节(项目管理机构/组织节),不得拆到不同章。","**自选输出**:除输出义务外,可以按项目规模与表达需要增加表/图;没有 obligationId 的输出必须写 reason(为什么必须用该载体、唯一承载哪组内容),不要为凑数造图表。","**载体建议**:同字段事实、对照、清单、参数矩阵→table;因果、措施、论证、责任→paragraph;流程、关系、空间、层次→figure。只对确有明确形态的内容组给建议,不规定作者写法。","只使用 planningContext 中存在的对象、标准、数字与来源;不得编造工程对象、标准编号、控制值或阶段/工日/机械。","不得把“编制依据/规范目录/图纸理解/清单对账”作为独立节,除非招标明确要求单独成节。","输出 JSON;不要解释。"],givenChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),output:{chapters:[{chapterIndex:0,sections:[{title:"工程名词短语",contentGroup:"本节主载的内容组",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组",obligationId:"output:…",quote:"招标原字"}],suggestedCarriers:[{contentSet:"内容组",carrier:"table",reason:"同字段对照"}]}]}]}})}(a,c),{...g,schema:U});if(aj(a,`skeleton-${j}`,b),!b)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:骨架规划未返回可校验结果");return ab(function(a){let b=a.raw??{},c=Array.isArray(b.chapters)?b.chapters:[],d=a.confirmed.chapters.map((b,d)=>{let e=(0,m.constructionChapterId)(a.documentTitle,b.title),f=c.find(a=>Number(a.chapterIndex)===d)??c[d]??{},g=(Array.isArray(f.sections)?f.sections:[]).map((b,c)=>{let f=`${e}:section:${c+1}`;return{sectionId:f,referenceId:`r${d+1}s${c+1}`,title:String(b.title??"").trim(),contentGroup:String(b.contentGroup??"").trim(),objectScope:"",rationale:"",responsibilityPositions:[],coverageItemIds:Array.isArray(b.coverageItemIds)?[...new Set(b.coverageItemIds.map(a=>String(a).trim()).filter(Boolean))]:[],requiredOutputs:aa({sectionId:f,raw:b.requiredOutputs,planningContext:a.planningContext}),suggestedCarriers:(Array.isArray(b.suggestedCarriers)?b.suggestedCarriers:[]).map(a=>a??{}).map(a=>({contentSet:String(a.contentSet??"").trim(),carrier:function(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"}(a.carrier),reason:String(a.reason??"").trim()})),factKeys:[],quantityKeys:[]}});return{chapterId:e,title:b.title,sections:g}});return{version:"document-structure-plan-v1",...function(a){let b=(0,s.Fu)(a.planningContext);return{planId:"structure-plan:"+(0,s.Fu)([b,a.confirmed.chapters.map(a=>a.title)]).slice(0,24),projectIdentityHash:(0,s.Fu)({projectIdentity:a.planningContext.projectIdentity??null,projectSnapshotId:a.planningContext.provenance.projectSnapshotId}),planningContextHash:b}}({confirmed:a.confirmed,planningContext:a.planningContext}),chapters:d,coverageMatrix:[],outputRegistry:[],factQuantities:[],state:"draft",planHash:""}}({raw:b,confirmed:a.confirmed,planningContext:a.planningContext,documentTitle:a.documentTitle}))},l={requireSectionContract:!1,requireCoverage:!1,requireRequiredCoverageItems:!0,requireFacts:!1,requireFormat:!1,requireProfessionalCandidates:!1},n=await f(),v=ar(n,i,l),w=new Set([(0,s.Fu)(n)]);for(let d=0;d<4&&v.length;d+=1){if((v=ar(n=await ap(a,n,v,c,b),i,l)).length&&w.has((0,s.Fu)(n)))throw aj(a,"skeleton-stalled",{plan:n,issues:v}),Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:骨架补丁没有产生有效业务变化,停止重复生成;${ah(v).slice(0,8).join(";")}`);w.add((0,s.Fu)(n))}if(v.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(v).slice(0,8).join(";")}`);let x=Math.max(1,Math.floor(k.N6?.outlineChapters??4));if(await (0,r.W)(n.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),x,async({chapter:b,chapterIndex:d})=>{let f=a=>({...b,sections:b.sections.map((b,c)=>({...b,objectScope:String(a[c].objectScope??"").trim(),rationale:String(a[c].rationale??"").trim(),responsibilityPositions:[...new Set((Array.isArray(a[c].responsibilityPositions)?a[c].responsibilityPositions:[]).map(a=>String(a).trim()).filter(Boolean))]}))}),j=new Set(b.sections.map(a=>a.sectionId)),k=a=>{let c=a?.sections;return Array.isArray(c)&&c.length===b.sections.length?c.some(a=>!a||"object"!=typeof a||Array.isArray(a))?[`章节「${b.title}」对象范围的每个小节必须是对象`]:ah(ar({...n,chapters:n.chapters.map((a,b)=>b===d?f(c):a)},i,{...l,requireSectionContract:!0}).filter(a=>a.target?.sectionId&&j.has(a.target.sectionId))):[`章节「${b.title}」对象范围的小节数不符(期望 ${b.sections.length},得到 ${Array.isArray(c)?c.length:"非数组"})`]},m=async()=>{var f,i,j;let l=await a.caller(h,(f=b.title,i=b.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds})),j=n,(0,t.dk)({stableReferences:(0,e.GP)(j),planningContext:function(a,b,c,d){let e=a.planningContext,f=new Map(d.map(a=>[a.id,a])),g=[...new Set(c.flatMap(a=>a.coverageItemIds))],h=new Set(g.map(a=>f.get(a)?.obligationId).filter(a=>!!a));return{version:e.version,documentType:e.documentType,...e.projectIdentity?{projectIdentity:e.projectIdentity}:{},tenderProfile:{projectType:e.tenderProfile.projectType},factsBaseline:e.factsBaseline.filter(a=>a.selected).map(a=>{let b=a.selected.value,c=(0,u.D)(b,320);return{key:a.key,...a.fieldName?{fieldName:a.fieldName}:{},...a.objectName?{objectName:a.objectName}:{},value:c.text,valueChars:[...b].length,...c.truncated?{valueTruncated:!0,valueRemainingChars:c.remainingChars}:{}}}),factsReading:"factsBaseline 只带选中事实的边界截断值(valueTruncated=true 时完整值未送达,valueRemainingChars 是剩余字符数);写对象范围不需要复述全部事实,需要完整值/出处时按 key 用 query_project_facts 读取。",contractObligations:e.contractObligations.filter(a=>h.has(a.id)&&(0,p.Ln)(a)).map(a=>({id:a.id,text:a.text,...a.items?.length?{items:a.items}:{},...a.quote?{quote:a.quote.slice(0,300)}:{}})),coverageItems:g.map(a=>({id:a,text:f.get(a)?.text??"",...f.get(a)?.obligationId?{obligationId:f.get(a).obligationId}:{}})),professionalCandidates:e.professionalCandidates.filter(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b))}}(a,f,i,c),task:"为已定稿的小节补写对象范围、独立成节理由与责任岗位;不得增删小节、改标题或改契约项",chapterTitle:f,sections:i,rules:[e.bx,"按给定 sections 的顺序输出同样数量的对象,不输出标题,不增删、不调序。","objectScope 写清本节覆盖的本项目对象/系统/工作面及其边界与接口,使用行业通行术语;不得用“加强管理、确保质量”等空泛表述。","rationale 说明本节按什么专业逻辑独立(对象、专业系统、施工阶段、风险、资源/管理要素),为什么不能并入相邻节。","responsibilityPositions 只写岗位称谓,不写姓名;按项目实际组织给出能对本节内容负责的岗位,不套固定清单。","对象/标准/工法/依据只引用 planningContext 中可核的内容;不得编造标准编号、控制值或工程对象。","只输出 JSON。"],output:{sections:[{objectScope:"对象/专业/工作面",rationale:"独立成节理由",responsibilityPositions:["岗位称谓"]}]}})),{...g,schema:V,validateProtocol:k});aj(a,`enrich-${d+1}`,l);let m=k(l);if(m.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败;${m.join(";")}`);let o=l?.sections;if(!o||o.length!==b.sections.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败`);return o},o=await m();n.chapters[d]=f(o)}),(v=ar(n=ab(n),i,{...l,requireSectionContract:!0})).length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:对象范围阶段未通过;${ah(v).slice(0,8).join(";")}`);let y=async b=>{var e,f;let i=b?.length?(e=n,f=d,(0,t.dk)({task:"局部修正事实落点、候选处置与输出例外;覆盖矩阵由程序从节内认领投影",previousResponse:f,deterministicIssues:b,currentStructure:e.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope}))})),requiredFactKeys:R(a.planningContext),professionalCandidates:a.planningContext.professionalCandidates,requiredOutputs:a.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(a=>({id:a.id,form:a.form,element:a.element})),rules:["只纠正 deterministicIssues;保留 previousResponse 中其他有效决定,不改章节或主载归属。","事实键与小节只用给定身份,每个事实给 sectionId 或有据的 notApplicableReason;不得凭空增加工程量。","专业候选逐项写明确处置及本项目理由;不得编造来源、对象或数字。","输出例外仅针对给定必出输出,须给 reason 与 alternative,独立审查接受之前不作放行。","返回完整纠正后的同一 JSON 结构。"]})):function(a,b,c){let d=b.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,obligationId:a.obligationId??null}))}))}));return(0,t.dk)({planningContext:(0,o.compactPlanningContextProjection)(P(a.planningContext),{facts:"keys",obligations:"texts"}),coverageCatalog:Y(c),currentStructure:d,requiredFactKeys:R(a.planningContext),task:"核对项目事实/工程量落点、专业候选处置与输出例外;覆盖矩阵由程序从节内认领投影,不需要你填写;不要改章节结构",rules:["factQuantities:requiredFactKeys 中每个事实必须有 sectionId 落点,或 notApplicableReason(说明为什么本稿不需要该事实);project 身份类事实由文档身份承载,不在此列。工程量键如规划上下文没有可核来源,可留空,不编造。","candidateDispositions:**必须为 professionalCandidates 中每一个主题登记一条**(disposition=used 或 not-applicable,并写具体理由);不得遗漏、不得静默丢弃。","outputExceptions:仅当某项必出输出(含领域基线图)确实无法产出且等效载体能承担同一表达时使用;必须写 reason 与 alternative,最终由独立审查接受或拒绝。领域基线图是专业建议,不是招标原文;不要仅因基线存在就虚构项目不存在的场地/对象。","只使用 currentStructure 里的 sectionId/outputId;不得编造身份。","只输出 JSON。"],output:{factQuantities:[{key:"factKey",kind:"fact",sectionId:"section…"}],candidateDispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"本项目不存在该对象"}],outputExceptions:[{obligationId:"output:…",reason:"确实无法产出",alternative:"等效载体说明"}]}})}(a,n,c),j=await a.caller(h,i,{...g,schema:W});if(aj(a,"coverage",j),!j)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:覆盖规划未返回结果");d=j;let k=Array.isArray(j.factQuantities)?j.factQuantities:[],l=new Map;for(let a of k){if(!a.sectionId)continue;let b=l.get(a.sectionId)??{factKeys:[],quantityKeys:[]};("fact"===a.kind?b.factKeys:b.quantityKeys).push(a.key),l.set(a.sectionId,b)}n={...n,factQuantities:k,chapters:n.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,factKeys:[...new Set(l.get(a.sectionId)?.factKeys??[])],quantityKeys:[...new Set(l.get(a.sectionId)?.quantityKeys??[])]}))})),...Array.isArray(j.candidateDispositions)?{candidateDispositions:j.candidateDispositions}:{},...Array.isArray(j.outputExceptions)?{outputExceptions:j.outputExceptions}:{},formatRules:function(a,b){let c=a.tenderProfile;return{...void 0!==c.bidType?{bidType:c.bidType}:b?{bidType:b.bidType}:{},...void 0!==c.identityMarksForbidden?{identityMarksForbidden:c.identityMarksForbidden}:b?{identityMarksForbidden:b.identityMarksForbidden}:{},...void 0!==c.bodyTablePolicy?{bodyTablePolicy:c.bodyTablePolicy}:b?{bodyTablePolicy:b.bodyTablePolicy}:{},...void 0!==c.bodyFigurePolicy?{bodyFigurePolicy:c.bodyFigurePolicy}:b?{bodyFigurePolicy:b.bodyFigurePolicy}:{},...void 0!==c.bodyDiagramPolicy?{bodyDiagramPolicy:c.bodyDiagramPolicy}:b?{bodyDiagramPolicy:b.bodyDiagramPolicy}:{},...c.pageSemantics?.length?{pageSemantics:c.pageSemantics.map(a=>({...a}))}:{}}}(a.planningContext,a.bidComposition)}};await y(),v=ar(n=al(n,c),i);let z=new Set([(0,s.Fu)(n)]);for(let a=0;a<3&&v.length;a+=1){let a=(0,s.Fu)(n);if(await y(ah(v)),!(v=ar(n=al(n,c),i)).length)break;let b=(0,s.Fu)(n);if(b===a||z.has(b))break;z.add(b)}for(let b=0;b<2&&v.length;b+=1){let b=function(a,b){let c=[];for(let d of b.professionalCandidates??[])for(let b of[...d.sectionCandidates.map(a=>a.title),...d.contentRequirements.map(a=>a.title)]){if(a.chapters.some(a=>a.sections.some(a=>(0,q.qh)(a.title,b)||(0,q.ri)(`${a.objectScope}${a.rationale}`).includes((0,q.ri)(b)))))continue;let e=(a.candidateDispositions??[]).find(a=>(0,q.ri)(a.candidateTitle)===(0,q.ri)(b)&&(!a.chapterTitle||(0,q.ri)(a.chapterTitle)===(0,q.ri)(d.chapterTitle)));e&&"not-applicable"===e.disposition&&e.reason?.trim()||c.push({chapterTitle:d.chapterTitle,candidateTitle:b})}return c}(n,a.planningContext);if(!b.length)break;let c=(0,s.Fu)(n);if((v=ar(n=await an(a,n,b),i)).length&&c===(0,s.Fu)(n))break}if(v.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(v).slice(0,8).join(";")}`);return n},x=(0,n.w1)(await w(),i);v+=1;let y=x.planHash;a.sectionContracts.update(x);let z=await a.caller("你是独立的施工组织设计结构规划审查者,不是本计划的作者。只审结构完整性、专业逻辑、粒度、载体与重复;只输出 JSON。",$(a,x,c,1,b),{...g,schema:X});if(aj(a,`review-${v}`,z),!z)throw new l.f({scope:"document",candidate:x,findings:[],reason:"独立规划审查未取得;结构可校验不等于专业批准"});let B=Z((Array.isArray(z.findings)?z.findings:[]).map((a,b)=>{let c=a??{};return{id:`plan-review:${v}:${b+1}`,planId:x.planId,planHash:y,category:String(c.category??"structure"),severity:L(c.severity),target:{..."string"==typeof c.targetSectionId&&c.targetSectionId?{sectionId:c.targetSectionId}:{},..."string"==typeof c.targetOutputId&&c.targetOutputId?{outputId:c.targetOutputId}:{},..."string"==typeof c.targetObligationId&&c.targetObligationId?{obligationId:c.targetObligationId}:{}},detail:String(c.detail??""),fix:String(c.fix??"")}}),x,c,a.planningContext);a.sectionContracts.review(x,z,v);let E=[...B],F=(0,n.w1)(x,i),G=(d,e,f,g)=>{let h=d,j=new Map((Array.isArray(e.exceptionDecisions)?e.exceptionDecisions:[]).map(a=>a??{}).map(a=>[String(a.obligationId??""),a]));j.size&&(h={...h,outputExceptions:(h.outputExceptions??[]).map(a=>{let b=j.get(a.obligationId);return b?{...a,reviewAcceptance:{accepted:!0===b.accepted,reviewer:D,basis:String(b.basis??"").trim()||"独立审查未给出可核理由"}}:a})});let k=new Set,l=[],m=[];for(let b of Array.isArray(e.patches)?e.patches:[]){let c=String(b.sectionId??"").trim();if(!c)continue;let d=!1,e=h.chapters.map(e=>({...e,sections:e.sections.map(e=>e.sectionId!==c?e:(d=!0,{...e,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:e.sectionId,raw:b.requiredOutputs,planningContext:a.planningContext})}:{}}))}));if(!d)continue;let j=aq(ab({...h,chapters:e}),a.planningContext),o=ar({...j,state:"validated"},i,{allowTransientCoverageSplit:!0});if(o.length)l.push({sectionId:c,issues:o}),m.push({id:`plan-review:${g}:patch-invalid:${c}`,planId:h.planId,planHash:f,category:"patch",severity:"advisory",target:{sectionId:c},detail:`审查补丁被确定性校验拒绝(本节未改):${ah(o).slice(0,4).join(";")}`,fix:"按确定性错误修正补丁;不得删除必出契约项、必出输出或让同一契约项跨节重复"});else{let a=ar({...j,state:"validated"},i);h=a.length&&a.every(a=>"coverage-same-text-split"===a.code)?(0,n.YG)({...j,state:"validated"}):(0,n.w1)({...j,state:"validated"},i),k.add(c)}}let o=ag({plan:h,operations:af(e.operations),planningContext:a.planningContext,catalog:c,validate:a=>ar({...a,state:"validated"},i,{allowTransientCoverageSplit:!0})});for(let c of(h=o.plan,b.push(...o.numberingChanges),o.numberingChanges.length&&aj(a,"review-numbering-changes",o.numberingChanges),o.rejected))m.push({id:`plan-review:${g}:operation-rejected:${m.length+1}`,planId:h.planId,planHash:f,category:"operation",severity:"advisory",target:c.sectionId?{sectionId:c.sectionId}:{},detail:`结构操作「${c.op}」被确定性校验拒绝(计划保持操作前状态):${c.reason}`,fix:"按确定性错误修正操作,或改为 finding 并在正文阶段处理;不得删除必出契约项/输出"});for(let a of o.applied)a.originalSectionId&&k.add(a.originalSectionId);return h=(0,n.w1)({...h,state:"validated"},i),a.sectionContracts.update(h),{plan:h,addressedSectionIds:k,patchRejections:l,operationResult:o,findings:m}},H=G(F,z,y,String(v)),I=H.addressedSectionIds,J=H.patchRejections,K=H.operationResult;F=H.plan,E.push(...H.findings);let M=1,N=[],O=E.filter(a=>["patch","operation"].includes(a.category)),S=z,T=(0,l.C)(S,E)||F.planHash!==y,_=y,ac=x,ad=0,ae=0,ak=0,am=()=>ad>=3?"作者修订累计已达3次":`作者修复调用已达6次上限`;for(;T&&M<=5;){let d;N.push(...E);let f=[];if((0,l.C)(S,E)&&(E.length||M>1&&(Array.isArray(S.patches)&&S.patches.length||Array.isArray(S.operations)&&S.operations.length))){let g=E.map(a=>({code:"professional-review",message:`${a.detail};建议:${a.fix}`,target:{}})),h={reviewedPlanHash:_,verdict:S.verdict,reviewedSections:(0,e.GP)(ac),findings:E,patches:S.patches??[],operations:S.operations??[]};if(ad>=3||ae>=6){if(ak>=2){let b={scope:"document",candidate:F,findings:E,reason:`${am()}:终审修法已应用并复核 ${ak} 次,独立审查仍有未决意见`};throw aj(a,"pending",b),new l.f(b)}let b=G(F,S,_,`${M+1}-rescue`),c=ar({...b.plan,state:"validated"},i);if(b.plan.planHash===F.planHash||c.length){let d={scope:"document",candidate:b.plan,findings:E,reason:c.length?`${am()},终审结构操作应用后仍未通过确定性校验:${ah(c).slice(0,4).join(";")}`:`${am()}:独立审查仍有未决意见`};throw aj(a,"pending",d),new l.f(d)}F=b.plan,O.push(...b.findings),I=new Set([...I,...b.addressedSectionIds]),K={...b.operationResult,applied:[...K.applied,...b.operationResult.applied],rejected:[...K.rejected,...b.operationResult.rejected],numberingChanges:[...K.numberingChanges,...b.operationResult.numberingChanges],originalIdMap:ai(K.originalIdMap,b.operationResult.originalIdMap)},ak+=1,d={applied:b.operationResult.applied,rejected:b.operationResult.rejected},aj(a,"review-rescue",{round:M+1,applied:b.operationResult.applied,rejected:b.operationResult.rejected,candidate:F})}else{ad+=1;let d=F,e=[],j=new Set;for(let k=0;;k+=1){if(ae>=6){let b={scope:"document",candidate:d,findings:E,reason:`${am()}:${ah(e).join(";")||"独立审查仍有未决意见"}`};throw aj(a,"pending",b),new l.f(b)}if(ae+=1,e=ar({...d=await ap(a,d,[...g,...e],c,b,h),state:"validated"},i),f.push({attempt:ae,candidateHash:(0,n.YG)(d).planHash,issues:e}),aj(a,"author-repair-validation",{attempt:ae,candidate:d,issues:e}),!e.length)break;let m=(0,n.YG)(d).planHash;if(j.has(m)){let b={scope:"document",candidate:d,findings:E,reason:`作者修订未改变无效候选:${ah(e).join(";")}`};throw aj(a,"pending",b),new l.f(b)}if(j.add(m),k>=2){let b={scope:"document",candidate:d,findings:E,reason:`作者修订连续 ${k+1} 次未满足确定性校验:${ah(e).join(";")}`};throw aj(a,"pending",b),new l.f(b)}}F=(0,n.w1)({...d,state:"validated"},i)}}let h=F.planHash,j={reviewedPlanHash:_,currentPlanHash:h,reviewedSections:(0,e.GP)(ac),response:S,revision:function(a,b){let c=a=>a.chapters.flatMap((a,b)=>{let{sections:c,...d}=a;return c.map((c,e)=>({referenceId:c.referenceId??null,section:A(c),chapter:A(d),address:{sectionId:c.sectionId,chapterId:a.chapterId,title:c.title,chapterNumber:b+1,sectionNumber:e+1}}))}),d=c(a),e=c(b),f=(a,b)=>a.filter(a=>a.referenceId===b).length,g=a=>({...a.address,sectionHash:(0,s.Fu)(a.section),chapterHash:(0,s.Fu)(a.chapter)}),h=new Set,i=[];for(let a of d){let b=a.referenceId&&1===f(d,a.referenceId)&&1>=f(e,a.referenceId),c=b?e.find(b=>b.referenceId===a.referenceId):void 0;if(!c){i.push({referenceId:a.referenceId,status:b?"removed":"unmatched",before:g(a),changedFields:[]});continue}h.add(c);let j=[...C(a.section,c.section),...C(a.chapter,c.chapter).map(a=>`chapter.${a}`)];(a.address.chapterNumber!==c.address.chapterNumber||a.address.sectionNumber!==c.address.sectionNumber)&&j.push("position"),i.push({referenceId:a.referenceId,status:j.length?"changed":"unchanged",before:g(a),after:g(c),changedFields:j})}for(let a of e)if(!h.has(a)){let b=a.referenceId&&1===f(e,a.referenceId)&&0===f(d,a.referenceId);i.push({referenceId:a.referenceId,status:b?"added":"unmatched",after:g(a),changedFields:[]})}let j=a=>{let{chapters:b,planHash:c,...d}=A(a);return{...d,chapterOrder:b.map(a=>a.chapterId)}};return{version:"structure-review-revision-v1",reviewedPlanHash:a.planHash,currentPlanHash:b.planHash,reviewedInputHash:(0,s.Fu)(A(a)),currentInputHash:(0,s.Fu)(A(b)),sections:i,globalChangedFields:C(j(a),j(b)),authorizesReuse:!1,scope:"逐值比较实际版本。unchanged仅指节本身、章元数据及位置未变,不证明依赖未变、独立或已获专业批准;仍须审查当前完整候选及跨节关系。"}}(ac,F),validation:{reviewerPatchRejections:1===M?J:[],reviewerOperationRejections:1===M?K.rejected:[],authorAttempts:f,...d?{reviewerEditsApplied:d}:{}}};aj(a,"review-revision",{round:M+1,...j}),a.sectionContracts.update(F);let k=await a.caller("你是独立结构规划审查者。核对当前候选的专业缺陷是否实际消除,不能因程序校验通过而自动批准。只输出 JSON。",$(a,F,c,M+1,b,j),{...g,schema:X});M+=1,aj(a,`review-${M}`,{candidate:F,response:k});let m=Z((Array.isArray(k?.findings)?k.findings:[]).map((a,b)=>({id:`plan-review:${M}:${b+1}`,planId:F.planId,planHash:F.planHash,category:String(a.category??"structure"),severity:L(a.severity),target:{..."string"==typeof a.targetSectionId?{sectionId:a.targetSectionId}:{},..."string"==typeof a.targetOutputId?{outputId:a.targetOutputId}:{},..."string"==typeof a.targetObligationId?{obligationId:a.targetObligationId}:{}},detail:String(a.detail??""),fix:String(a.fix??"")})),F,c,a.planningContext);if(a.sectionContracts.review(F,k,M),T=!k||(0,l.C)(k,m),E.splice(0,E.length,...m),T&&(!k||h===_||M>5)){let b={scope:"document",candidate:F,findings:m,reason:m.map(a=>a.detail).join(";")||"修订后独立规划审查未取得明确通过"};throw aj(a,"pending",b),new l.f(b)}S=k??{},_=h,ac=F}E.push(...O);let ao=(0,n.fw)((0,n.fw)(F,"reviewed"),"frozen"),as=new Set(ao.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),at=new Set(ao.outputRegistry.map(a=>a.outputId)),au=E.map(a=>{if("operation"===a.category)return{...a,planId:ao.planId,disposition:"operation-rejected",dispositionNote:"结构操作被确定性校验拒绝,计划保持操作前状态;记录为顾问意见"};if(a.target.sectionId&&I.has(a.target.sectionId))return{...a,planId:ao.planId,disposition:"structural-change-applied",dispositionNote:"审查针对该节给出补丁/结构操作,已由程序应用并通过硬判据"};let b=a.target.sectionId?K.originalIdMap.get(a.target.sectionId)??a.target.sectionId:void 0;return b&&!as.has(b)||a.target.outputId&&!at.has(a.target.outputId)?{...a,planId:ao.planId,disposition:"superseded",dispositionNote:"结构修改后目标节/输出已不存在,视为已处理"}:{...a,planId:ao.planId,disposition:"advisory-recorded",dispositionNote:"程序硬判据通过;按顾问意见记录,不作为冻结阻断"}});return{plan:ao,coverage:{chapters:ao.chapters.length,sections:ao.chapters.reduce((a,b)=>a+b.sections.length,0),outputs:ao.outputRegistry.length,requiredCoverageItems:d.length,requiredFacts:f.length},review:{planId:ao.planId,planHash:ao.planHash,reviewer:D,rounds:M,findings:au,...N.length?{priorFindings:N}:{},verdict:"pass",advisoriesOnly:!1,incremental:{applied:K.applied,rejected:K.rejected}}}}function au(a){return{version:a.version,planId:a.planId,planHash:a.planHash,state:a.state,chapters:a.chapters.map(a=>({chapterId:a.chapterId,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,contentGroup:a.contentGroup,objectScope:a.objectScope,coverageItemIds:a.coverageItemIds,outputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,carrierSemantic:a.carrierSemantic??null,element:a.element,semanticRole:a.semanticRole,dedupeKey:a.dedupeKey})),factKeys:a.factKeys,quantityKeys:a.quantityKeys}))})),coverageMatrix:a.coverageMatrix,factQuantities:a.factQuantities,formatRules:a.formatRules??null}}function av(a,b){let c=new Map(Q({confirmed:b.confirmed,planningContext:b.planningContext}).map(a=>[a.id,a])),d=new Map(a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>[a.sectionId,{chapterIndex:b,sectionIndex:c}]))),f=new Map;for(let c of a.outputRegistry){let a=d.get(c.sectionId);if(a&&"agent-decision"!==c.source.kind)for(let d of[...new Set([c.obligationId,c.baselineId].filter(a=>!!a))]){let c=b.planningContext.outputObligations.find(a=>a.id===d);if(!c||"domain-baseline"!==c.kind&&!(0,p.oY)(c))continue;let e=f.get(d)??{sectionRefs:[]};e.sectionRefs.some(b=>b.chapterIndex===a.chapterIndex&&b.sectionIndex===a.sectionIndex)||e.sectionRefs.push(a),f.set(d,e)}}return{version:"construction-document-outline-v1",chapters:a.chapters.map(b=>({title:b.title,sections:b.sections.map(b=>{let d=b.coverageItemIds.map(a=>c.get(a)).filter(Boolean);return{title:b.title,pointIndexes:[...new Set(d.flatMap(a=>a.pointIndexes??[]))].sort((a,b)=>a-b),objectScope:(0,e.eq)(a,b.objectScope),rationale:(0,e.eq)(a,b.rationale),responsibilityPositions:b.responsibilityPositions,obligationIds:[...new Set(d.flatMap(a=>a.obligationId?[a.obligationId]:[]))],obligationItems:d.filter(a=>"obligation"===a.kind).map(a=>a.text),coverageItems:d.map(a=>({id:a.id,text:a.text,kind:a.kind,enumerated:a.enumerated??!1})),requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,...a.source.quote?{quote:a.source.quote}:{},basis:"domain-baseline"===a.source.kind?"domain-baseline":"agent-decision"===a.source.kind?"agent-decision":"tender",...a.baselineId?{baselineId:a.baselineId}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.source.reason?{reason:a.source.reason}:{}}))}})})),...a.coverageMatrix.length?{contentObligationCoverage:a.coverageMatrix.map(a=>({obligationId:a.obligationId,landing:a.landing,sectionRefs:a.sectionIds.map(a=>d.get(a)).filter(a=>!!a),reason:a.reason??""}))}:{},...b.planningContext.outputObligations.length?{outputPlan:b.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(b=>{let c=f.get(b.id),d=(a.outputExceptions??[]).find(a=>a.obligationId===b.id);return c?{obligationId:b.id,status:"planned",sectionRefs:c.sectionRefs,reason:"结构计划已安排"}:{obligationId:b.id,status:"not-applicable",reason:d?.reason??"结构计划未安排",...d?.alternative?{alternative:d.alternative}:{},...d?.reviewAcceptance?{reviewAcceptance:d.reviewAcceptance}:{}}})}:{},...a.factQuantities.length?{factCoverage:a.factQuantities.filter(a=>"fact"===a.kind).map(a=>a.sectionId?{key:a.key,landing:"section",sectionRefs:[d.get(a.sectionId)].filter(Boolean)}:{key:a.key,landing:"not-applicable",reason:a.notApplicableReason??""})}:{},selfReview:{issues:[],note:"结构计划已通过独立规划审查",status:"no-change"}}}},45002:(a,b,c)=>{c.d(b,{G:()=>h});var d=c(745);let e=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},f=a=>Array.isArray(a)?a:[],g=a=>f(a).filter(a=>"string"==typeof a);class h{constructor(a){if(this.sourceIdentity=a,this.states=new Map,this.leases=new Map,this.listeners=new Set,!a)throw Error("SECTION_CONTRACT_SOURCE_REQUIRED")}currentPlan(){return this.plan&&structuredClone(this.plan)}snapshot(){return structuredClone([...this.states.values()])}approvedGlobalPlanHash(){return this.globalPlanHash}subscribe(a){return this.listeners.add(a),a(this.snapshot()),()=>{this.listeners.delete(a)}}publish(){for(let a of this.listeners)a(this.snapshot())}sections(a){let b=new Map,c=new Set;return a.chapters.forEach((a,d)=>a.sections.forEach((e,f)=>{if(!e.referenceId||b.has(e.referenceId)||c.has(e.sectionId))throw Error("SECTION_CONTRACT_AMBIGUOUS_IDENTITY");b.set(e.referenceId,{section:e,chapter:{chapterId:a.chapterId,title:a.title},position:[d,f]}),c.add(e.sectionId)})),b}references(a){return[...new Set([...JSON.stringify(a).matchAll(/\[\[section:([^\]]+)\]\]/gu)].map(a=>a[1]))]}digest(a,b){let c=this.sections(a);if(b.some(a=>!c.has(a)))throw Error("SECTION_CONTRACT_DEPENDENCY_MISSING");return(0,d.Fu)({version:"section-contract-v1",sourceIdentity:this.sourceIdentity,projectIdentityHash:a.projectIdentityHash,planningContextHash:a.planningContextHash,interfaces:[...c].map(([a,b])=>({referenceId:a,sectionId:b.section.sectionId,chapter:b.chapter,position:b.position,title:b.section.title,contentGroup:b.section.contentGroup,coverageItemIds:b.section.coverageItemIds,requiredOutputs:b.section.requiredOutputs})),formatRules:a.formatRules??null,outputExceptions:a.outputExceptions??[],candidateDispositions:a.candidateDispositions??[],factQuantities:a.factQuantities,coverageMatrix:a.coverageMatrix,outputRegistry:a.outputRegistry,sections:[...new Set(b)].sort().map(a=>({referenceId:a,...c.get(a)}))})}revoke(a,b){let c=this.states.get(a);for(let d of(c&&this.states.set(a,{...c,status:"revoked",reason:b}),this.leases.get(a)??[]))d.abort(Error(`SECTION_CONTRACT_STALE:${b}`))}update(a){let b=this.sections(a);for(let[c,d]of(this.globalPlanHash=void 0,this.states)){let e=b.get(c);!e||e.section.sectionId!==d.sectionId||d.dependencyReferenceIds.some(a=>!b.has(a))||this.digest(a,[c,...d.dependencyReferenceIds])!==d.contractHash?this.revoke(c,"结构、来源身份或依赖合同已变化"):"global-approved"===d.status&&this.states.set(c,{...d,status:"draft-approved",reason:"局部合同未变;当前全局版本尚待审查"})}for(let[c,d]of b)this.states.has(c)||this.states.set(c,{referenceId:c,sectionId:d.section.sectionId,status:"pending",contractHash:this.digest(a,[c]),dependencyReferenceIds:[],reason:"未取得本节及依赖范围的明确专业批准"});this.plan=structuredClone(a),this.publish()}review(a,b,c){if(this.plan?.planHash!==a.planHash||(0,d.Fu)(this.plan)!==(0,d.Fu)(a))throw Error("SECTION_CONTRACT_REVIEW_VERSION_MISMATCH");let h=this.sections(a),i=new Map([...h].map(([a,b])=>[b.section.sectionId,a])),j=e(b),k=f(j.sectionReviews).map(e),l=new Map,m=k.length===h.size;for(let a of k){let b=String(a.sectionId??""),c=i.get(b);!c||l.has(c)?m=!1:l.set(c,a)}let n=new Set,o=!1;for(let a of f(j.findings).map(e)){let b=[...h].filter(([,b])=>b.section.sectionId===a.targetSectionId||b.section.requiredOutputs.some(b=>b.outputId===a.targetOutputId||!!a.targetObligationId&&b.obligationId===a.targetObligationId)||!!a.targetObligationId&&b.section.coverageItemIds.includes(String(a.targetObligationId)));b.length||(o=!0),b.forEach(([a])=>n.add(a))}let p=new Map;for(let[a,b]of h){let c=l.get(a)??{},d=g(c.dependencySectionIds),e=[...new Set([...d.map(a=>i.get(a)??`missing:${a}`),...this.references(b.section)])];p.set(a,e),(!m||o||!["pass","revise","reject","accept"].includes(String(j.verdict))||"reject"===j.verdict||"pass"!==c.verdict||!0!==c.dependencyScopeComplete||!String(c.reason??"").trim()||!Array.isArray(c.dependencySectionIds)||d.length!==c.dependencySectionIds.length||e.some(a=>!h.has(a)))&&n.add(a)}let q=a=>{let b=new Set,c=a=>{b.has(a)||(b.add(a),(p.get(a)??[]).forEach(c))};return c(a),[...b].sort()};for(let[e,f]of h){let g=q(e);if(g.some(a=>n.has(a)||!h.has(a))){this.revoke(e,"本节或依赖节未获明确批准、仍有意见,或逐节覆盖回执不完整");continue}let i=this.digest(a,g),j=this.states.get(e),k=g.every(a=>l.get(a)?.sourceOnlyDraft===!0);j?.sourceOnlyDraft&&!k&&this.revoke(e,"来源独立起草条件已撤销"),j?.contractHash!==i&&this.revoke(e,"专业确认的依赖范围已变化"),this.states.set(e,{referenceId:e,sectionId:f.section.sectionId,status:"draft-approved",contractHash:i,dependencyReferenceIds:g.filter(a=>a!==e),sourceOnlyDraft:k,approval:{kind:"section-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:c,reason:String(l.get(e).reason)},reason:"本节及依赖已明确批准;仅允许起草,交付仍待当前全局审查"})}this.publish()}approveGlobal(a,b){if("frozen"!==a.state||b.planHash!==a.planHash||"pass"!==b.verdict)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED");this.update(a);let c=this.sections(a),e=[...c.keys()].sort();for(let[f,g]of c){let c=this.states.get(f),h="draft-approved"===c.status?[f,...c.dependencyReferenceIds]:e,i=this.digest(a,h);c.contractHash!==i&&this.revoke(f,"全局批准绑定的依赖合同已变化"),this.states.set(f,{referenceId:f,sectionId:g.section.sectionId,contractHash:i,status:"global-approved",dependencyReferenceIds:h.filter(a=>a!==f),sourceOnlyDraft:"draft-approved"===c.status&&!0===c.sourceOnlyDraft,approval:{kind:"global-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:b.rounds,reason:"当前完整结构经原全局专业门禁通过"},reason:"允许起草;锁节与交付另须正文及来源审查"})}this.globalPlanHash=a.planHash,this.publish()}assertSourceDraft(a,b){let c=[...this.states.values()].find(a=>a.sectionId===b&&["draft-approved","global-approved"].includes(a.status));if(!c?.sourceOnlyDraft||this.digest(a,[c.referenceId,...c.dependencyReferenceIds])!==c.contractHash)throw Error("SECTION_SOURCE_DRAFT_NOT_APPROVED")}assertGlobal(a){if(this.globalPlanHash!==a)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED")}acquire(a){let b=[...this.states.values()].find(b=>b.sectionId===a&&["draft-approved","global-approved"].includes(b.status));if(!b)throw Error(`SECTION_CONTRACT_NOT_APPROVED:${a}`);let c=new AbortController,{referenceId:d,contractHash:e}=b,f=this.leases.get(d)??new Set;return f.add(c),this.leases.set(d,f),{referenceId:d,sectionId:a,contractHash:e,signal:c.signal,assertCurrent:()=>{let b=this.states.get(d);if(c.signal.aborted||!b||b.sectionId!==a||b.contractHash!==e||!["draft-approved","global-approved"].includes(b.status))throw Error(`SECTION_CONTRACT_STALE:${a}`)},release:()=>{f.delete(c),f.size||this.leases.delete(d)}}}cancel(a){for(let b of(this.globalPlanHash=void 0,this.states.keys()))this.revoke(b,a);this.publish()}}},62369:(a,b,c)=>{c.d(b,{W:()=>d});async function d(a,b,c){let d;if(!Number.isSafeInteger(b)||b<1)throw Error("CONSTRUCTION_PARALLEL_LIMIT_INVALID");let e=Array(a.length),f=0,g=!1,h=Array.from({length:Math.min(b,a.length)},async()=>{for(;;){if(g)return;let b=f;if(f+=1,b>=a.length)return;try{e[b]=await c(a[b],b)}catch(a){g=!0,d=a;return}}});if(await Promise.all(h),g)throw d;return e}}};
|
|
1
|
+
"use strict";exports.id=3074,exports.ids=[3074],exports.modules={15038:(a,b,c)=>{c.d(b,{C:()=>e,f:()=>d});class d extends Error{constructor(a){super(`PLANNING_PROFESSIONAL_REVIEW_PENDING:${a.scope}:${a.reason}`),this.detail=a,this.name="PlanningReviewPendingError"}}function e(a,b){return b.some(a=>"blocking"===a.severity)}},33074:(a,b,c)=>{c.r(b),c.d(b,{STRUCTURE_PLAN_COVERAGE_SCHEMA:()=>W,STRUCTURE_PLAN_ENRICH_SCHEMA:()=>V,STRUCTURE_PLAN_REPAIR_SCHEMA:()=>ak,STRUCTURE_PLAN_REVIEWER:()=>D,STRUCTURE_PLAN_REVIEW_SCHEMA:()=>X,STRUCTURE_PLAN_SKELETON_SCHEMA:()=>U,applyStructurePlanOperations:()=>ag,applyStructurePlanRepairPatches:()=>ao,bindStructurePlanModelCaller:()=>J,boundaryTruncate:()=>u.D,buildStructureCoverageCatalog:()=>Q,documentOutlineFromStructurePlan:()=>av,mergeOriginalIdMaps:()=>ai,parseStructureOperations:()=>af,requiredStructureFactKeys:()=>R,structureOutputRepairProjection:()=>I,structurePlanPreview:()=>au,structureReferenceContext:()=>F,synthesizeDocumentStructurePlan:()=>as});var d=c(45002),e=c(29245),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(68515),l=c(15038),m=c(40123),n=c(36690),o=c(36980),p=c(69977),q=c(23105),r=c(62369),s=c(745),t=c(91088),u=c(62563),v=c(98943);let w=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},x=a=>Array.isArray(a)?a.map(w):[],y=["C","S","U","O","B"],z={coverageItemId:["C"],coverageItemIds:["C"],requiredCoverageItemIds:["C"],dependencySectionIds:["S"],sectionId:["S"],sectionIds:["S"],sourceSectionIds:["S"],fromSectionId:["S"],toSectionId:["S"],targetSectionId:["S"],outputId:["U"],targetOutputId:["U"],obligationId:["O","B"],targetObligationId:["O","C","B"],baselineId:["B"]},A=a=>JSON.parse(JSON.stringify(a)),B=(a,b)=>Object.hasOwn(a,b)?{present:!0,value:a[b]}:{present:!1},C=(a,b)=>[...new Set([...Object.keys(a),...Object.keys(b)])].sort().filter(c=>(0,s.Fu)(B(a,c))!==(0,s.Fu)(B(b,c))),D="independent-structure-plan-review";function E(a){return a.chapters.flatMap((a,b)=>a.sections.map((c,d)=>({chapterId:a.chapterId,chapterNumber:b+1,chapterTitle:a.title,sectionId:c.sectionId,sectionNumber:d+1,title:c.title,contentGroup:c.contentGroup})))}function F(a,b=[]){return{currentPlanHash:(0,n.YG)(a).planHash,currentSections:E(a),stableReferences:(0,e.GP)(a),numberingChanges:b}}let G=[e.bx,"structureReferences.currentSections 给出当前一基章号、节号、完整 sectionId、标题和内容组;自然语言“第X章/本章section:N”须按当前坐标核对,不把零基 chapterIndex 当章号。","numberingChanges 是按应用顺序记录的历史操作,每条 from/to 只对应其 beforePlanHash/afterPlanHash;拆节是一对多,不能把拆节后的第一节当作所有旧引用的目标。根据当前 coverageItemIds、契约原文和对象范围选择真正主载,不可机械替换文字或猜落点。","逐节核对全篇 objectScope、rationale 等文字中的章/节引用、连续节范围和“分别由”次序,包括未列入前轮 findings 的引用方及你本次提出的 patches/operations。拆并移节会改变编号:同回包自然语言接口优先用明确的章节标题和内容组,避免预猜操作后的编号;后续仍须核对最终候选。文字提及相邻章本身不是重复主载,但指向错误主载或遗漏范围须修订,不能因程序校验通过而批准。"],H="requiredOutputs 回复只写 form/carrierSemantic/element/semanticRole/obligationId/baselineId/quote/reason;不存在的可选身份字段省略,不填null。requiredOutputProvenance 与 sourceKind/source 是只读来源信息,不是回复字段;来源绑定仍靠真实 obligationId/baselineId 与原 quote/reason 保留。outputId/sectionId 即使回填也由程序按落点重算,不赋予新来源或批准。";function I(a){return{requiredOutputs:a.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,carrierSemantic:a.carrierSemantic,...void 0===a.source.quote?{}:{quote:a.source.quote},...void 0===a.source.reason?{}:{reason:a.source.reason},...void 0===a.obligationId?{}:{obligationId:a.obligationId},...void 0===a.baselineId?{}:{baselineId:a.baselineId}})),requiredOutputProvenance:a.map(a=>({outputId:a.outputId,source:{...a.source}}))}}function J(a){var b;return b={caller:a.caller,planningContext:P(a.planningContext),catalog:Q(a),archive:(b,c)=>aj(a,b,c)},async(a,c,d={})=>{if(!d.schema)throw Error("STRUCTURE_SELECTION_SCHEMA_REQUIRED");let e=w((0,t.cp)(JSON.parse(c))),f=function(a){let b=new Map(y.map(a=>[a,new Map])),c=new Map,d=(a,d)=>{if("string"!=typeof d||!d||b.get(a).has(d))return;let e=`${a}${b.get(a).size+1}`;b.get(a).set(d,e),c.set(e,{family:a,id:d})};a.catalog.forEach(a=>d("C",a.id)),[...a.planningContext.contractObligations,...a.planningContext.outputObligations].forEach(a=>d("O",a.id)),a.planningContext.baselineFigures.forEach(a=>d("B",a.id));let e=w(a.payload.plan);for(let b of Array.isArray(e.chapters)?x(e.chapters):x(a.payload.currentStructure))for(let a of x(b.sections))d("S",a.sectionId),x(a.requiredOutputs).forEach(a=>d("U",a.outputId));x(e.outputRegistry).forEach(a=>d("U",a.outputId));let f=a=>[...c].filter(([,b])=>a.includes(b.family)).map(([a])=>a),g=(a,c="",d="")=>{if("numberingChanges"===c||"reviewFeedback"===c)return structuredClone(a);if(Array.isArray(a))return a.map(a=>g(a,c,d));if("string"==typeof a){for(let e of z[c]??("id"===c?"baselineFigures"===d?["B"]:y:[])){let c=b.get(e)?.get(a);if(c)return c}return a}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,g(b,a,c)])):a},h=(a,b="")=>{let c=z[b],d=a.properties&&Object.fromEntries(Object.entries(a.properties).filter(([b,c])=>{if(!z[b]||"string"!==c.type||f(z[b]).length)return!0;if(!0===c.required||Array.isArray(a.required)&&a.required.includes(b))throw Error(`STRUCTURE_SELECTION_NO_TARGET:${b}没有当前可选目标`);return!1}).map(([a,b])=>[a,h(b,a)]));return c&&"array"===a.type&&!f(c).length?{...a,maxItems:0,items:{type:"string"}}:{...a,...c&&"string"===a.type?{enum:f(c)}:{},...a.items?{items:h(a.items,b)}:{},...d?{properties:d}:{}}},i=h(a.schema),j=g(a.payload),k=(a,b="")=>Array.isArray(a)?a.map(a=>k(a,b)):"string"==typeof a&&z[b]?f(z[b])[0]:a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,k(b,a)]).filter(([,a])=>void 0!==a)):a;j.output&&(j.output=k(j.output));let l={...j,structureSelectionProtocol:{version:"structure-bound-selection-v1",instructions:"身份字段只选择本次目录中的短键:C覆盖项、S当前节、U当前输出、O义务、B基线。真实ID由程序绑定,不抄hash、不改前缀、不创造键。按原文和专业含义选择,程序不代选主载或证据。不存在的可选目标字段省略。新节/输出的身份由程序生成。原文引文和文字中的稳定引用token保持原样。示例只表示字段形状,不表示建议选择。",allowedChoices:Object.fromEntries(y.map(a=>[a,f([a])]))}},m={version:"structure-bound-selection-v1",requestHash:(0,s.Fu)([a.payload,a.schema,[...c]]),identities:Object.fromEntries(c)},n=(a,b="")=>{if(Array.isArray(a))return a.map(a=>n(a,b));if(z[b]){let d="string"==typeof a?c.get(a):void 0;if(!d||!z[b].includes(d.family))throw Error(`STRUCTURE_SELECTION_UNKNOWN:${b}=${String(a)},只允许本次选项 ${f(z[b]).join(",")}`);return d.id}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,n(b,a)])):a};return{payload:l,schema:i,binding:m,restore:n}}({...b,payload:e,schema:d.schema}),g=(0,t.yA)(f.payload);b.archive?.("selection-input",{system:a,prompt:g,schema:f.schema,binding:f.binding});let h=await b.caller(a,g,{...d,schema:f.schema,validateProtocol:a=>{try{return d.validateProtocol?.(f.restore(a))??[]}catch(a){return[a instanceof Error?a.message:String(a)]}}});if(b.archive?.("selection-response",{requestHash:f.binding.requestHash,response:h}),void 0===h)return;let i=(0,v.validateJsonAgainstSchema)(h,f.schema);if(i.length)throw Error(`STRUCTURE_SELECTION_INVALID:${i.join(";")}`);return f.restore(h)}}let K=["table","figure","diagram","org_chart","chart"];function L(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let M={type:"string"},N=a=>({type:"array",items:a}),O=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function P(a){return{...a,contractObligations:a.contractObligations.filter(p.Ln),outputObligations:a.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a))}}function Q(a){let b=[],c=new Set,d=a=>{!a.id||!a.text.trim()||c.has(a.id)||(c.add(a.id),b.push({...a,text:a.text.trim()}))};for(let[b,c]of a.confirmed.chapters.entries())for(let[a,e]of c.points.entries())d({id:"coverage:"+(0,s.Fu)(["structure-requirement-v1",b,a]).slice(0,24),text:e.requirement?.trim()||e.title,kind:"requirement",enumerated:!1,chapterIndex:b,pointIndexes:[a]});for(let b of a.planningContext.contractObligations)if((0,p.Ln)(b))if(b.items?.length)for(let a of b.items)d({id:"coverage:"+(0,s.Fu)(["structure-obligation-item-v1",b.id,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"obligation",enumerated:!0,obligationId:b.id});else d({id:"coverage:"+(0,s.Fu)(["structure-obligation-v1",b.id]).slice(0,24),text:b.text,kind:"obligation",enumerated:!1,obligationId:b.id});for(let b of a.planningContext.professionalCandidates)for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)])d({id:"coverage:"+(0,s.Fu)(["structure-method-v1",b.chapterTitle,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"method",enumerated:!1});return b}function R(a){let b=/^(?:project_name|project_code|owner|project_location|项目名称|项目编号|建设单位|建设地点)$/u;return a.factsBaseline.filter(a=>!(!a.selected||b.test(a.key)||/项目名称|项目编号|建设单位|建设地点/u.test(`${a.key} ${a.fieldName??""}`)||!a.objectName&&(/^(?:project_scope|project_investment_estimate)$/u.test(a.key)||/招标范围|承包范围|项目投资估算|工程规模/u.test(a.fieldName??"")))).map(a=>a.key)}let S=O({form:{...M,enum:K},carrierSemantic:{...M,enum:n.J9},outputId:{...M},sectionId:{...M},element:{...M,minLength:1},semanticRole:{...M,minLength:1},obligationId:{...M,minLength:1},baselineId:{...M,minLength:1},quote:{...M,minLength:2},reason:{...M,minLength:2}},["form","carrierSemantic","element","semanticRole"]),T=O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),suggestedCarriers:N(O({contentSet:{...M,minLength:1},carrier:{...M,enum:["paragraph","table","figure","chart","diagram","org_chart"]},reason:{...M,minLength:2}},["contentSet","carrier","reason"]))},["title","contentGroup","coverageItemIds"]),U={type:"object",additionalProperties:!1,required:["chapters"],properties:{chapters:N(O({chapterIndex:{type:"integer",minimum:0},title:{...M,minLength:1},sections:N(T)},["sections"]))}},V={type:"object",additionalProperties:!1,required:["sections"],properties:{sections:N(O({title:M,objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1})},["objectScope","rationale","responsibilityPositions"]))}},W={type:"object",additionalProperties:!1,required:["factQuantities"],properties:{factQuantities:N(O({key:{...M,minLength:1},kind:{...M,enum:["fact","quantity"]},sectionId:{...M,minLength:1},notApplicableReason:{...M,minLength:2}},["key","kind"])),candidateDispositions:N(O({chapterTitle:M,candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["candidateTitle","disposition"])),outputExceptions:N(O({obligationId:{...M,minLength:1},reason:{...M,minLength:2},alternative:{...M,minLength:2}},["obligationId","reason","alternative"]))}},X={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...M,enum:["pass","revise","reject","accept"]},sectionReviews:N(O({sectionId:M,verdict:{...M,enum:["pass","revise","unreviewed"]},dependencySectionIds:N(M),dependencyScopeComplete:{type:"boolean"},sourceOnlyDraft:{type:"boolean"},reason:{...M,minLength:2}},["sectionId","verdict","dependencySectionIds","dependencyScopeComplete","reason"])),findings:N(O({category:{...M,minLength:1},severity:{...M,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSectionId:M,targetOutputId:M,targetObligationId:M,detail:{...M,minLength:2},fix:{...M,minLength:2}},["category","severity","detail","fix"],!0)),patches:N(O({sectionId:{...M,minLength:1},title:{...M,minLength:1},contentGroup:{...M,minLength:1},objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1}),coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S)},["sectionId"],!0)),operations:N(O({op:{...M,enum:["update-section","move-section","merge-sections","split-section","move-coverage","move-output","change-content-group","change-carrier"]},sectionId:{...M,minLength:1},targetChapterIndex:{type:"integer",minimum:0},sourceSectionIds:N({...M,minLength:1}),title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemId:{...M,minLength:1},fromSectionId:{...M,minLength:1},toSectionId:{...M,minLength:1},outputId:{...M,minLength:1},carrierSemantic:{...M,enum:n.J9},form:{...M,enum:K},sections:N(O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1})},["title","contentGroup"]))},["op"],!0)),exceptionDecisions:N(O({obligationId:{...M,minLength:1},accepted:{type:"boolean"},basis:{...M,minLength:2}},["obligationId","accepted","basis"]))}};function Y(a){return a.map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.pointIndexes?.length?{chapterIndex:a.chapterIndex,pointIndexes:a.pointIndexes}:{}}))}function Z(a,b,c,d){let e=new Set(b.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),f=new Set(b.outputRegistry.map(a=>a.outputId)),g=new Set(c.map(a=>a.id)),h=new Set([...g,...d.contractObligations.map(a=>a.id),...d.outputObligations.map(a=>a.id)]),i=new Set([...d.contractObligations.filter(a=>!(0,p.Ln)(a)),...d.outputObligations.filter(a=>"domain-baseline"!==a.kind&&!(0,p.oY)(a))].map(a=>a.id));return a.map(a=>{let b=[];if(a.target.sectionId&&!e.has(a.target.sectionId)&&b.push(`节「${a.target.sectionId}」不存在`),a.target.outputId&&!f.has(a.target.outputId)&&b.push(`输出「${a.target.outputId}」不存在`),a.target.obligationId&&!h.has(a.target.obligationId)&&b.push(`契约项「${a.target.obligationId}」不存在`),a.target.obligationId&&i.has(a.target.obligationId)&&b.push(`义务「${a.target.obligationId}」未核定适用本技术正文,不能作为本正文必出缺口`),/不在\s*coverageCatalog|不在契约项目录/u.test(a.detail)){let c=a.detail.match(/coverage:[a-z0-9]+/gu)??[],d=c.filter(a=>g.has(a));c.length&&d.length===c.length&&b.push(`coverage id 实际存在于目录:${d.join("、")}`)}return b.length?{...a,severity:"advisory",detail:`${a.detail}(程序核对:${b.join(";")},已降为 advisory)`}:a})}function $(a,b,c,d,e=[],f,g){let h=function(a,b){if(!b)return{plan:a};let c=new Map([...b.chapters.flatMap(a=>a.sections.map(b=>[b.sectionId,{chapterId:a.chapterId,section:b}]))]),d=[],e=[],f=a.chapters.map(a=>({...a,sections:a.sections.map(b=>{let f=c.get(b.sectionId);return f&&f.chapterId===a.chapterId&&(0,s.Fu)(f.section)===(0,s.Fu)(b)?(e.push(b.sectionId),{...b,objectScope:b.objectScope.slice(0,180),rationale:"",responsibilityPositions:[],suggestedCarriers:[],unchanged:!0}):(d.push(b.sectionId),b)})}));return{plan:{...a,chapters:f},delta:{changedSectionIds:d,unchangedSectionIds:e}}}(b,g);return(0,t.dk)({planningContext:(0,o.structurePlanningContextProjection)(P(a.planningContext)),coverageCatalog:Y(c),confirmedChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),plan:h.plan,...h.delta?{reviewDelta:h.delta}:{},structureReferences:F(b,e),task:"独立审查施工组织设计的二级结构计划:只审结构完整性、专业逻辑、粒度、载体与重复;不改写正文,不替作者决定工法",rules:[...G,"你是独立规划审查者,不是本计划的作者。不得因为作者写了理由就接受;逐项核对象/专业/接口/风险/阶段是否有落点。","sectionReviews 对当前每一节恰好返回一条覆盖回执,不受 findings 的条数限制。未实际审完写 unreviewed;发现未决写 revise;明确审过本节及依赖范围且可起草才写 pass。dependencySectionIds 列出实际依赖的当前节,dependencyScopeComplete 仅在依赖范围已审完时为 true。无 finding 或文字未改都不代表 pass。逐节批准只允许起草,不能替代整稿独审、正文独审或锁节。","若提供 reviewDelta:unchanged 节只给紧凑索引,仍须逐节给 sectionReviews 回执;重点核对 changed 节与全局覆盖/重复,不得因详情省略把未变节判成未审。","sourceOnlyDraft 仅当该节及依赖闭包可完全依靠当前冻结来源与批准结构起草、不依赖尚未形成的工法决定/专业建包/资源配置/计算或执行基准时为 true;不确定或依赖这些成果则 false。它不批准正文、不免除正文独审和最终全局交付。","检查:章下节是否覆盖项目对象与专业系统;是否有过粗(一节承载多个对象/专业/阶段)、过细(同一主题拆碎)、空泛模板节、与已确认招标要点无关的节。","**章内节以该章确认要点为准**:节可以承接 confirmedChapters.points 或合同义务;章题是概括性表述,不等于内容错位。只有节既不承接本章任何确认要点、也不承接合同义务,或明显应归另一章时才判错位。","检查:每项合同内容义务(含原子项)是否有节承接;每项必出输出是否只有一个主载体与一个节;是否有同一内容组被表/图重复主载;组织机构图是否只有一张。","**同文覆盖项同节**:coverageCatalog 中去除空白/标点后文本相同的契约项是同一内容组;发现它们跨节时,fix 必须要求整组归并到一节,不得只移动其中一项,也不得把同文组拆到两节。","**内容组与载体语义**:同一 contentGroup 只能由一个节主载;输出声明的 carrierSemantic 必须与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。发现冲突用 patches 改 contentGroup/requiredOutputs;跨节移动/合并/拆分用 operations,不要只写文字意见。","**主载体重复 ≠ 对象范围提及**:只有同一内容组在两个节都被作为主载体展开(表/图/独立措施段落)才算 blocking duplication;仅在 objectScope/接口边界提到相邻章的对象,写 advisory。","**引用可核**:只能引用 coverageCatalog 中真实存在的契约项 id、plan 中真实存在的 sectionId/outputId;不得凭印象报告“某 id 不在目录”。","检查:节标题是否名词短语、同级平行、无评审/说明语言、无重复;objectScope/rationale 是否具体到本项目,不是可套用任何工程的空话。","检查:事实/工程量落点是否与节内声明一致;专业候选未采用是否有具体理由。","检查:规划是否写死固定阶段/工日/机械/项目常量,或把“编制依据/图纸理解/清单对账”当正文主题。","发现可修的节级问题,用 patches 返回(sectionId + 修改字段);不能修的结构问题写 blocking finding。exceptionDecisions 只对 outputExceptions 给出接受/拒绝与理由。","verdict=pass 仅当没有 blocking finding 且结构可直接进入写作;有 blocking 但已用 patches 修正可给 revise。","**输出控制**:findings 最多 12 条,按严重度排序;detail 不超过 120 字,fix 不超过 80 字;同一问题不要重复。patches 最多 12 条、operations 最多 12 条,只给确实可修的节/确实可落地的结构修改;无法修的写 finding。","**示例只是字段形状**:output 里的“工程名词短语一/二”“内容组一/二”“表名”都是占位符,不是要照抄的标题或内容组;必须换成本项目实际的工程名词、内容组与表名。",H,"只输出 JSON。"],round:d,...f?{reviewFeedback:f}:{},output:{verdict:"revise",findings:[{category:"structure",severity:"blocking",targetSectionId:"section…",detail:"可核问题",fix:"具体修法"}],patches:[{sectionId:"section…",objectScope:"修订后的对象范围",contentGroup:"内容组"}],operations:[{op:"move-coverage",coverageItemId:"coverage:…",toSectionId:"section…"},{op:"move-section",sectionId:"section…",targetChapterIndex:1},{op:"merge-sections",sectionId:"section…",sourceSectionIds:["section…"],contentGroup:"内容组"},{op:"split-section",sectionId:"section…",sections:[{title:"工程名词短语一",contentGroup:"内容组一",coverageItemIds:["coverage:…"]},{title:"工程名词短语二",contentGroup:"内容组二",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组二",reason:"唯一承载"}]}]},{op:"change-carrier",outputId:"output:…",carrierSemantic:"organization"}],exceptionDecisions:[{obligationId:"output:…",accepted:!1,basis:"拒绝理由"}]}})}function _(a,b,c,d,e){return"output:"+(0,s.Fu)(["structure-output-v2",a,b,c??"",d.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),e.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24)}function aa(a){let b=new Map(a.planningContext.outputObligations.map(a=>[a.id,a])),c=new Map(a.planningContext.baselineFigures.map(a=>[a.id,a])),d=[];for(let f of Array.isArray(a.raw)?a.raw:[]){var e;let g=f??{},h="string"==typeof g.obligationId?g.obligationId.trim():"",i="string"==typeof g.baselineId?g.baselineId.trim():"",j=h?b.get(h):void 0,k=j&&("domain-baseline"===j.kind||(0,p.oY)(j))?j:void 0,l=i?c.get(i):void 0,m=(e=g.form??k?.form??l?.form,K.includes(e)?e:"table"),o=n.J9.includes(g.carrierSemantic)?g.carrierSemantic:void 0,q=String(g.element??k?.element??l?.element??"").trim();if(!q)continue;let r=String(g.semanticRole??"").trim()||q,s=String(g.quote??k?.quote??"").trim(),t=String(g.reason??l?.requirement??"").trim(),u=k?.kind==="domain-baseline"||!!l,v=u?"domain-baseline":k?"tender":"agent-decision",w=u&&(i||k?.id)||"";d.push({outputId:_(a.sectionId,m,o,q,r),form:m,element:q,semanticRole:r,...o?{carrierSemantic:o}:{},sectionId:a.sectionId,primary:!0,source:{kind:v,...s?{quote:s}:{},...t?{reason:t}:{}},dedupeKey:"",...k?{obligationId:k.id}:{},...w?{baselineId:w}:{}})}return d}function ab(a){return{...a,outputRegistry:a.chapters.flatMap(a=>a.sections.flatMap(a=>a.requiredOutputs))}}function ac(a,b){for(let[c,d]of a.chapters.entries()){let a=d.sections.findIndex(a=>a.sectionId===b);if(a>=0)return{chapterIndex:c,sectionIndex:a,section:d.sections[a]}}}function ad(a,b,c,d){return{...a,chapters:a.chapters.map((a,e)=>e===b?{...a,sections:a.sections.map((a,b)=>b===c?d:a)}:a)}}function ae(a,b){return{...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.filter(a=>a.sectionId!==b)}))}}function af(a){let b=Array.isArray(a)?a:[],c=a=>Array.isArray(a)?[...new Set(a.map(a=>String(a).trim()).filter(Boolean))]:[],d=a=>"string"==typeof a&&a.trim()?a.trim():void 0;return b.flatMap(a=>{let b=a??{},e=String(b.op??""),f=String(b.sectionId??"").trim();switch(e){case"update-section":return f?[{op:e,sectionId:f,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{}}]:[];case"move-section":{let a=Number(b.targetChapterIndex);return f&&Number.isInteger(a)&&a>=0?[{op:e,sectionId:f,targetChapterIndex:a}]:[]}case"merge-sections":{let a=c(b.sourceSectionIds);return f&&a.length?[{op:e,sectionId:f,sourceSectionIds:a,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{}}]:[]}case"split-section":{let a=(Array.isArray(b.sections)?b.sections:[]).flatMap(a=>{let b=a??{},e=String(b.title??"").trim(),f=String(b.contentGroup??"").trim();return e&&f?[{title:e,contentGroup:f,...c(b.coverageItemIds).length?{coverageItemIds:c(b.coverageItemIds)}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:b.requiredOutputs}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{},...c(b.factKeys).length?{factKeys:c(b.factKeys)}:{},...c(b.quantityKeys).length?{quantityKeys:c(b.quantityKeys)}:{}}]:[]});return f&&a.length?[{op:e,sectionId:f,sections:a}]:[]}case"move-coverage":{let a=String(b.coverageItemId??"").trim(),c=String(b.toSectionId??"").trim(),f=d(b.fromSectionId);return a&&c?[{op:e,coverageItemId:a,toSectionId:c,...f?{fromSectionId:f}:{}}]:[]}case"move-output":{let a=String(b.outputId??"").trim(),c=String(b.toSectionId??"").trim();return a&&c?[{op:e,outputId:a,toSectionId:c}]:[]}case"change-content-group":{let a=d(b.contentGroup);return f&&a?[{op:e,sectionId:f,contentGroup:a}]:[]}case"change-carrier":{let a=String(b.outputId??"").trim();if(!a)return[];return[{op:e,outputId:a,carrierSemantic:String(b.carrierSemantic??""),...K.includes(b.form)?{form:b.form}:{}}]}default:return[]}})}function ag(a){let b=a.plan,c=[...a.operations],d=[],e=[],f=[],g=new Map;for(let b of a.plan.chapters)for(let a of b.sections)g.set(a.sectionId,a.sectionId);for(;c.length;){let h=c.shift(),i=function(a,b,c){switch(b.op){case"update-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,...b.title?.trim()?{title:b.title.trim()}:{},...b.contentGroup?.trim()?{contentGroup:b.contentGroup.trim()}:{},...b.objectScope?.trim()?{objectScope:b.objectScope.trim()}:{},...b.rationale?.trim()?{rationale:b.rationale.trim()}:{},...b.responsibilityPositions?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]}:{}})}}case"move-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};if(!a.chapters[b.targetChapterIndex])return{error:`目标章 ${b.targetChapterIndex} 不存在`};let d=ae(a,b.sectionId);return{plan:{...d,chapters:d.chapters.map((a,d)=>d===b.targetChapterIndex?{...a,sections:[...a.sections,c.section]}:a)}}}case"merge-sections":{let c=ac(a,b.sectionId);if(!c)return{error:`幸存节「${b.sectionId}」不存在`};let d=[...new Set(b.sourceSectionIds.filter(a=>a&&a!==b.sectionId))];if(!d.length)return{error:"并节至少需要一个 sourceSectionIds"};let e=d.map(b=>({id:b,location:ac(a,b)})),f=e.find(a=>!a.location);if(f)return{error:`待并节「${f.id}」不存在`};let g=e.map(a=>a.location.section),h=a=>[...new Set(a.flat().filter(Boolean))],i={...c.section,title:b.title?.trim()||c.section.title,contentGroup:b.contentGroup?.trim()||c.section.contentGroup,coverageItemIds:h([c.section.coverageItemIds,...g.map(a=>a.coverageItemIds)]),requiredOutputs:[...c.section.requiredOutputs,...g.flatMap(a=>a.requiredOutputs.map(a=>({...a,sectionId:b.sectionId})))],suggestedCarriers:[...c.section.suggestedCarriers,...g.flatMap(a=>a.suggestedCarriers)].filter((a,b,c)=>c.findIndex(b=>b.contentSet===a.contentSet&&b.carrier===a.carrier)===b),factKeys:h([c.section.factKeys,...g.map(a=>a.factKeys)]),quantityKeys:h([c.section.quantityKeys,...g.map(a=>a.quantityKeys)])},j=a;for(let a of d)j=ae(j,a);let k=ac(j,b.sectionId);if(!k)return{error:"并节后幸存节丢失"};if(j={...j=ad(j,k.chapterIndex,k.sectionIndex,i),factQuantities:j.factQuantities.map(a=>a.sectionId&&d.includes(a.sectionId)?{...a,sectionId:b.sectionId}:a)},c.section.referenceId){let a=g.flatMap(a=>a.referenceId?[a.referenceId]:[]),b=b=>a.reduce((a,b)=>a.split(`[[section:${b}]]`).join(`[[section:${c.section.referenceId}]]`),b);j={...j,chapters:j.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,objectScope:b(a.objectScope),rationale:b(a.rationale)}))}))}}return{plan:j,aliases:new Map(d.map(a=>[a,b.sectionId]))}}case"split-section":{let d=ac(a,b.sectionId);if(!d)return{error:`待拆节「${b.sectionId}」不存在`};if(b.sections.length<2)return{error:"拆节至少需要两个新节"};let e=d.section,f=b.sections.map((a,b)=>`__split:${e.sectionId}:${b}__`),g=new Set(b.sections.flatMap(a=>a.coverageItemIds??[])),h=e.coverageItemIds.filter(a=>!g.has(a));if(h.length)return{error:`拆节后契约项未分配:${h.slice(0,6).join("、")}`};let i=[...g].filter(a=>!e.coverageItemIds.includes(a));if(i.length)return{error:`拆节不能引入本节没有的契约项:${i.slice(0,6).join("、")}`};let j=new Set(b.sections.flatMap(a=>a.factKeys??[])),k=new Set(b.sections.flatMap(a=>a.quantityKeys??[])),l=e.factKeys.filter(a=>!j.has(a)),m=e.quantityKeys.filter(a=>!k.has(a)),o=b.sections.map((a,b)=>{let d=f[b];return{sectionId:d,...e.referenceId?{referenceId:`${e.referenceId}x${b+1}`}:{},title:a.title.trim(),contentGroup:a.contentGroup.trim(),objectScope:a.objectScope?.trim()||e.objectScope,rationale:a.rationale?.trim()||e.rationale,responsibilityPositions:a.responsibilityPositions?[...new Set(a.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]:[...e.responsibilityPositions],coverageItemIds:[...new Set(a.coverageItemIds??[])],requiredOutputs:aa({sectionId:d,raw:a.requiredOutputs??[],planningContext:c}),suggestedCarriers:[],factKeys:[...new Set([...a.factKeys??[],...0===b?l:[]])],quantityKeys:[...new Set([...a.quantityKeys??[],...0===b?m:[]])]}}),p=a=>a.obligationId??a.baselineId??(0,n.h5)(a.element,a.semanticRole),q=new Set(e.requiredOutputs.map(p)),r=new Set(o.flatMap(a=>a.requiredOutputs).map(p)),s=[...q].filter(a=>!r.has(a));if(s.length)return{error:`拆节后必出输出未分配:${s.slice(0,6).join("、")}`};let t=new Map;for(let a of o){for(let b of a.factKeys)t.set(`fact:${b}`,a.sectionId);for(let b of a.quantityKeys)t.set(`quantity:${b}`,a.sectionId)}let u=ad(a,d.chapterIndex,d.sectionIndex,o[0]),v=u.chapters.map((a,b)=>b===d.chapterIndex?{...a,sections:[...a.sections.slice(0,d.sectionIndex),...o,...a.sections.slice(d.sectionIndex+1)]}:a);return{plan:{...u,chapters:v,factQuantities:a.factQuantities.map(a=>{if(a.sectionId!==e.sectionId)return a;let b=t.get(`${a.kind}:${a.key}`);return b?{...a,sectionId:b}:a})},aliases:new Map([[e.sectionId,f[0]]]),splitSuccessors:new Map([[e.sectionId,f]])}}case"move-coverage":{if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let c=a.chapters.flatMap(a=>a.sections).filter(a=>a.coverageItemIds.includes(b.coverageItemId));if(b.fromSectionId&&!c.some(a=>a.sectionId===b.fromSectionId))return{error:`契约项「${b.coverageItemId}」不在节「${b.fromSectionId}」`};if(!c.length)return{error:`契约项「${b.coverageItemId}」不在任何节`};let d={...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,coverageItemIds:a.coverageItemIds.filter(a=>a!==b.coverageItemId)}))}))},e=ac(d,b.toSectionId);if(!e)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(d,e.chapterIndex,e.sectionIndex,{...e.section,coverageItemIds:[...new Set([...e.section.coverageItemIds,b.coverageItemId])]})}}case"move-output":{let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};if(c.section.sectionId===b.toSectionId)return{error:"输出已在该节"};if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.filter(a=>a.outputId!==b.outputId)}),f=ac(e,b.toSectionId);if(!f)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(e,f.chapterIndex,f.sectionIndex,{...f.section,requiredOutputs:[...f.section.requiredOutputs,{...d,sectionId:f.section.sectionId}]})}}case"change-content-group":{if(!b.contentGroup?.trim())return{error:"contentGroup 不能为空"};let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,contentGroup:b.contentGroup.trim()})}}case"change-carrier":{if(!n.J9.includes(b.carrierSemantic))return{error:`carrierSemantic「${String(b.carrierSemantic)}」不在枚举内`};let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=n._s[b.carrierSemantic],f=b.form??(e.includes(d.form)?d.form:e[0]),g={...d,carrierSemantic:b.carrierSemantic,form:f,outputId:_(c.section.sectionId,f,b.carrierSemantic,d.element,d.semanticRole)};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.map(a=>a.outputId===b.outputId?g:a)})}}default:return{error:`未知结构操作「${String(b.op)}」`}}}(b,h,a.planningContext);if("error"in i){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:i.error});continue}let j=function(a,b=new Map){let c=new Map,d=a.chapters.map(a=>({...a,sections:a.sections.map((b,d)=>{let e=`${a.chapterId}:section:${d+1}`;return c.set(b.sectionId,e),{...b,sectionId:e,requiredOutputs:b.requiredOutputs.map(a=>({...a,sectionId:e}))}})})),e=a=>{let d=b.get(a)??a;return c.get(d)??d};return{idMap:c,plan:ab({...a,chapters:d,factQuantities:a.factQuantities.map(a=>a.sectionId?{...a,sectionId:e(a.sectionId)}:a),coverageMatrix:a.coverageMatrix.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))],...a.itemLandings?{itemLandings:a.itemLandings.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))]}))}:{}}))})}}(i.plan,i.aliases),k=al(aq(j.plan,a.planningContext),a.catalog),l=a.validate(k);if(l.length){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:ah(l).slice(0,6).join(";")});continue}let m=new Map(E(k).map(a=>[a.sectionId,a])),o=E(b).flatMap(a=>{let b=(i.splitSuccessors?.get(a.sectionId)??[i.aliases?.get(a.sectionId)??a.sectionId]).flatMap(a=>{let b=m.get(j.idMap.get(a)??a);return b?[b]:[]});return 1!==b.length||b[0].sectionId!==a.sectionId?[{from:a,to:b}]:[]});for(let[a,c]of(o.length&&f.push({op:h.op,beforePlanHash:(0,n.YG)(b).planHash,afterPlanHash:(0,n.YG)(k).planHash,sections:o}),b=k,d.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:j.idMap.get(h.sectionId)??j.idMap.get(i.aliases?.get(h.sectionId)??"")??h.sectionId,originalSectionId:h.sectionId}:{}}),g)){let b=i.aliases?.get(c)??c;g.set(a,j.idMap.get(b)??b)}c=c.map(a=>(function(a,b){switch(a.op){case"update-section":case"move-section":case"split-section":case"change-content-group":return{...a,sectionId:b(a.sectionId)};case"merge-sections":return{...a,sectionId:b(a.sectionId),sourceSectionIds:a.sourceSectionIds.map(b)};case"move-coverage":return{...a,...a.fromSectionId?{fromSectionId:b(a.fromSectionId)}:{},toSectionId:b(a.toSectionId)};case"move-output":return{...a,toSectionId:b(a.toSectionId)};case"change-carrier":return a}})(a,a=>j.idMap.get(a)??a))}return{plan:b,applied:d,rejected:e,originalIdMap:g,numberingChanges:f}}function ah(a){return a.map(a=>a.message)}function ai(a,b){let c=new Map(b);for(let[d,e]of a){let a=e,f=new Set;for(;!f.has(a)&&b.has(a);)f.add(a),a=b.get(a);c.set(d,a)}return c}function aj(a,b,c){if(a.artifactDir)try{let d=a.runId?i().join(a.artifactDir,"runs",a.runId,"artifacts","structure-plan"):i().join(a.artifactDir,"structure-plan");g().mkdirSync(d,{recursive:!0}),g().writeFileSync(i().join(d,`${b}-${Date.now()}-${(0,j.randomUUID)()}.json`),JSON.stringify({runId:a.runId??null,kind:b,value:c},null,2))}catch{}}let ak={type:"object",additionalProperties:!1,required:["patches"],properties:{patches:X.properties.patches,operations:X.properties.operations}};function al(a,b){let c=new Map;for(let a of b)a.obligationId&&c.set(a.obligationId,[...c.get(a.obligationId)??[],a]);let d=new Map;for(let b of a.chapters)for(let a of b.sections)for(let b of a.coverageItemIds)d.set(b,a.sectionId);let e=new Map(a.coverageMatrix.map(a=>[a.obligationId,a]));return{...a,coverageMatrix:[...c].map(([a,b])=>{let c=b.map(a=>({item:a.text,sectionIds:d.has(a.id)?[d.get(a.id)]:[]})).filter(a=>a.sectionIds.length>0).sort((a,b)=>a.item.localeCompare(b.item)),f=[...new Set(c.flatMap(a=>a.sectionIds))].sort(),g=f.length>1?"distributed":"section";return{obligationId:a,landing:g,sectionIds:f,reason:e.get(a)?.reason??"按规划节内主载投影",..."distributed"===g?{itemLandings:c}:{}}}).sort((a,b)=>a.obligationId.localeCompare(b.obligationId))}}let am={type:"object",additionalProperties:!1,required:["dispositions"],properties:{dispositions:N(O({chapterTitle:{...M,minLength:1},candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["chapterTitle","candidateTitle","disposition","reason"]))}};async function an(a,b,c){let d=await a.caller("你是施工组织设计结构规划者。只为未进入结构的专业候选给出处置理由;只输出 JSON。",(0,t.dk)({task:"解释专业候选为何未单独进入结构:已被现有节承接,或确实不适用",currentStructure:b.chapters.filter(a=>c.some(b=>(0,q.ri)(b.chapterTitle)===(0,q.ri)(a.title))).map(a=>({chapterTitle:a.title,sections:a.sections.map(a=>({title:a.title,objectScope:a.objectScope}))})),missingCandidates:c,rules:["若候选主题已由某个现有节的结构/对象范围实际承接,disposition=used,并在 reason 写明由哪一节承接。","若确实不适用,disposition=not-applicable,并写本项目具体理由(不存在该对象、已并入哪一节、合同/图纸无该要求);不得用空话。","不得编造项目对象或来源;只输出 JSON。"],output:{dispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"具体理由"}]}}),{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:am});if(aj(a,"candidate-repair",d),!d)return b;let e=Array.isArray(d.dispositions)?d.dispositions:[],f=[...b.candidateDispositions??[]];for(let a of e){let b=String(a.chapterTitle??"").trim(),c=String(a.candidateTitle??"").trim(),d=String(a.reason??"").trim();if(!b||!c||!d)continue;let e="used"===a.disposition?"used":"not-applicable",g=f.findIndex(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b)&&(0,q.ri)(a.candidateTitle)===(0,q.ri)(c)),h={chapterTitle:b,candidateTitle:c,disposition:e,reason:d};g>=0?f[g]=h:f.push(h)}return{...b,candidateDispositions:f}}function ao(a,b,c,d){let e=new Map(b.map(a=>[String(a.sectionId??""),a])),f=aq(ab({...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>{let b=e.get(a.sectionId);return b?{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:a.sectionId,raw:b.requiredOutputs,planningContext:c})}:{}}:a})}))}),c);return a.coverageMatrix.length?al(f,d):f}async function ap(a,b,c,d,e=[],f){let g="你是施工组织设计结构规划者。按具体问题修订当前候选的范围、落点、标题与载体;保留可核证据,不得降低问题严重性。只输出 JSON。",h=function(a,b,c,d,e=[],f){return(0,t.dk)({...d?{planningContext:(0,o.structurePlanningContextProjection)(P(d.planningContext))}:{},task:"修补施工组织设计二级结构:根据 deterministicIssues 逐项修订当前候选,包括对象范围、专业边界、义务落点与载体;不得改动已确认一级章节",structureReferences:F(a,e),currentStructure:a.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope,rationale:a.rationale,responsibilityPositions:a.responsibilityPositions,factKeys:a.factKeys,quantityKeys:a.quantityKeys,coverageItemIds:a.coverageItemIds,...I(a.requiredOutputs)}))})),coverageCatalog:Y(c),currentFactLandings:a.factQuantities,eligibleAdditionalFactKeys:d?.planningContext.factsBaseline.filter(a=>a.selected).map(a=>a.key),...f?{reviewFeedback:{...f,currentPlanHash:(0,n.YG)(a).planHash,usage:"意见绑定reviewedPlanHash,当前候选以currentStructure为准;建议只供核对,不代表已应用或已批准。已变动目标须按当前目录与完整编号变更重新选择。"}}:{},deterministicIssues:b.map(a=>({code:a.code,message:a.message,...a.target?.sectionId?{sectionId:a.target.sectionId}:{},...a.target?.key?{key:a.target.key}:{},target:a.target})),rules:[...G,H,"title:必须是工程名词短语,同级平行;不得含招标/评审/评分/说明/报价/费用/措施费/人工费/包括但不限于/不得/必须/要求等语言,不得动词开头或以标点结尾。","coverageItemIds:**整节替换**,不是追加。每个契约项在全篇只能出现在一个节;requiredCoverageItemIds / deterministicIssues 里缺的 id 必须补到最相关节。","**同文覆盖项同节**:去除空白与标点后文本相同的契约项是同一内容组,组内所有 id 必须待在同一个节;移动/移除必须整组处理,不能只搬其中一个 id。","contentGroup:**整节替换**。同一内容组全篇只能由一个节主载;重复时只保留真正展开该内容组的节,其余节改内容组或改为引用表述。","requiredOutputs:**整节替换**,不是追加;同一内容组只能一个输出;每个输出必须带 carrierSemantic,且与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。组织机构图全篇只能一张:招标格式义务与领域基线义务合并在同一个输出里,统一用 org_chart 形式,同时填 obligationId 与 baselineId,不得同时登记 diagram 与 org_chart。","每个输出须保留当前原文/理由与来源绑定。招标必交输出填已核 obligationId 与 quote;领域基线填 baselineId;你新增的表图须填写 reason,说明为何选用这一载体,不能冒充招标要求。未修改的输出无需重写;整节替换时不能漏掉已有来源字段。","项目管理机构图与人员组成表必须在同一节:需要时同时修补两个节——一个节移除、另一个节加回;不能只删不加。","按契约项文本与节标题/对象范围的专业相关性归位;同一章的招标要点优先放入该章最相关的节。","objectScope、rationale、responsibilityPositions、factKeys、quantityKeys 可直接修订。跨节移动/合并/拆分、换载体用 operations;必须保留全部义务与输出,不能只改被举例的一节而遗漏同类问题。","factKeys 声明唯一主载;项目身份/宏观事实不强制逐节登记,但你明确使用 eligibleAdditionalFactKeys 中的事实时,程序会同步全局落点。移动须从原节移除后在目标节声明。不得把未决/未知键当已选事实,quantityKeys 不得编造新的工程量身份。","不得增删一级章节,不得编造现有 id;拆分节的 id 由程序生成。已应用补丁不等于全部问题消除,核对当前候选逐条处理。只输出 JSON。"],output:{patches:[{sectionId:"section…",title:"修订后的名词短语",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"org_chart",element:"项目管理组织机构图",semanticRole:"项目管理组织层级与汇报关系",obligationId:"output:…",baselineId:"baseline-org-chart"}]}]}})}(b,c,d,a,e,f);aj(a,"skeleton-repair-input",{system:g,prompt:h,candidate:b,issues:c});let i=await a.caller(g,h,{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:ak});if(aj(a,"skeleton-repair",i),!i)return b;let j=ao(b,Array.isArray(i.patches)?i.patches:[],a.planningContext,d),k=af(i.operations);if(!k.length)return j;let l=ag({plan:j,operations:k,catalog:d,planningContext:a.planningContext,validate:b=>ar(b,{confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:d,requiredCoverageItemIds:d.filter(a=>"method"!==a.kind).map(a=>a.id),requiredFactKeys:R(a.planningContext)},{allowTransientCoverageSplit:!0})});return e.push(...l.numberingChanges),aj(a,"repair-operations",{applied:l.applied,rejected:l.rejected,numberingChanges:l.numberingChanges,candidate:l.plan}),l.plan}function aq(a,b){let c=a.chapters.flatMap(a=>a.sections),d=a.factQuantities.map(a=>{let b=c.filter(b=>("fact"===a.kind?b.factKeys:b.quantityKeys).includes(a.key));if(1!==b.length)return a;let{notApplicableReason:d,...e}=a;return{...e,sectionId:b[0].sectionId}}),e=new Set(d.filter(a=>"fact"===a.kind).map(a=>a.key));for(let a of b.factsBaseline){if(!a.selected||e.has(a.key))continue;let b=c.filter(b=>b.factKeys.includes(a.key));1===b.length&&(d.push({kind:"fact",key:a.key,sectionId:b[0].sectionId}),e.add(a.key))}return{...a,factQuantities:d}}function ar(a,b,c){return(0,n.uc)((0,n.YG)({...a,state:a.state??"draft"}),b,c)}async function as(a){let b=a.sectionContracts??new d.G((0,s.Fu)(JSON.parse(JSON.stringify({project:a.project,planningContext:a.planningContext,confirmed:a.confirmed})))),c=b.subscribe(b=>aj(a,"section-contracts",{states:b}));try{let c=await at({...a,sectionContracts:b});return b.approveGlobal(c.plan,c.review),{...c,sectionContracts:b}}catch(a){throw b.cancel("全局结构规划未完成,撤销本轮起草许可"),a}finally{c()}}async function at(a){let b,c=[],d=Q({confirmed:a.confirmed,planningContext:a.planningContext}),f=d.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),g=R(a.planningContext),h={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning"},i="你是施工组织设计总编与结构规划者。只依据给定的招标确认、规划上下文与契约项目录规划结构;只输出 JSON。",j={confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:d,requiredCoverageItemIds:f,requiredFactKeys:g,requiredQuantityKeys:[]},v=0,w=0,x=async()=>{let b,f=async()=>{v+=1;let b=await a.caller(i,function(a,b){let c=(0,o.structurePlanningContextProjection)(P(a.planningContext));return(0,t.dk)({planningContext:c,coverageCatalog:Y(b),requiredCoverageItemIds:b.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),task:"规划施工组织设计的二级结构:章下的节、每节承接的契约项、每节的必出表/图与载体建议;章标题固定取招标确认原文",rules:["章数与顺序与 givenChapters 一致;章标题由程序原样写回,你不得另拟或改写。","节按工程对象、专业系统、施工阶段、工作界面、风险与管理要素划分;每章至少一节。","节标题必须是名词短语、同级平行:不得出现“招标文件、招标范围、响应、评标、评审、评分、理解、包括但不限于、不得、必须、要求、说明、投标报价、措施费”等评审/说明语言;不得以动词开头或以标点结尾。","**契约项覆盖**:coverageCatalog 中 kind=requirement 与 kind=obligation 的每一项都必须恰好落在一个节的 coverageItemIds 中,不得遗漏、重复或编造 id;kind=method 是候选,可按项目需要采用。","**输出前自检**:逐项核对 requiredCoverageItemIds 是否都出现在某个节的 coverageItemIds 中,尤其是带括号的清单型招标要点;少一项整份计划会被退回。","**原子项**:同一内容义务的多个原子项可以分布到多个节,但每个原子项仍要各自出现在某个节的 coverageItemIds 中。","**同文覆盖项同节**:去除空白与标点后文本相同的 requirement/obligation 契约项属于同一内容组,必须整组落在同一节;移动/移除时整组处理,不得拆到两节。","**必出输出**:只对经独立适用性审查确认的 planningContext.outputObligations 安排 requiredOutputs:obligationId 逐字使用给定 id;form 使用义务的形式;tender-required 输出必须带 quote;domain-baseline 输出填 baselineId。技术正文与技术附表均可为本技术标必交位置,逐项保留 delivery。来源位于合同/商务/附录不决定技术内容是否适用;contractObligations 中的技术约束须响应,但不自动要求提交原表。其他原表、建议载体与未决项留在处置账,自选图表须写 reason,不能冒充其他原表的履行。","**内容组(contentGroup)**:每个节必须声明一个 contentGroup(如项目管理组织、临时设施、质量资料、人材机配置、进度计划、总平面布置);同一内容组全篇只能由一个节主载,引用节只能写“见表X/图X/第X节”,不得再复述。","**载体语义(carrierSemantic)**:每个输出必须声明内容形态:组织机构→organization(org_chart);横道/进度条→gantt(chart);网络计划/关键线路→network(diagram);流程/工序关系→flow(diagram);综合排布/总平面/空间布置→spatial(figure);碰撞协调/专业交叉→collision(figure);对照/清单/参数矩阵→comparison(table);确实不属于以上形态才用 other。声明必须与实际 form 匹配,否则整份计划被退回。","**同一内容组只登记一次**:element 是输出的工程名称,semanticRole 是它承载的内容组(如组织结构、进度计划、总平面布置);同一 element+semanticRole 只能出现一次,不得用 table 与 figure 同时主载同一内容组。","**同一内容组的多个输出义务合并为一个输出**:例如招标格式组织机构图与领域基线组织机构图,只登记一个输出,同一个对象同时填 obligationId(招标义务)与 baselineId(基线义务);组织机构图全篇只能一张,统一用 org_chart 形式,不得同时登记 diagram 与 org_chart。","**项目管理机构图与人员组成表同节**:两者是同一内容组的两面,必须放在同一节(项目管理机构/组织节),不得拆到不同章。","**自选输出**:除输出义务外,可以按项目规模与表达需要增加表/图;没有 obligationId 的输出必须写 reason(为什么必须用该载体、唯一承载哪组内容),不要为凑数造图表。","**载体建议**:同字段事实、对照、清单、参数矩阵→table;因果、措施、论证、责任→paragraph;流程、关系、空间、层次→figure。只对确有明确形态的内容组给建议,不规定作者写法。","只使用 planningContext 中存在的对象、标准、数字与来源;不得编造工程对象、标准编号、控制值或阶段/工日/机械。","不得把“编制依据/规范目录/图纸理解/清单对账”作为独立节,除非招标明确要求单独成节。","输出 JSON;不要解释。"],givenChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),output:{chapters:[{chapterIndex:0,sections:[{title:"工程名词短语",contentGroup:"本节主载的内容组",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组",obligationId:"output:…",quote:"招标原字"}],suggestedCarriers:[{contentSet:"内容组",carrier:"table",reason:"同字段对照"}]}]}]}})}(a,d),{...h,schema:U});if(aj(a,`skeleton-${v}`,b),!b)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:骨架规划未返回可校验结果");return ab(function(a){let b=a.raw??{},c=Array.isArray(b.chapters)?b.chapters:[],d=a.confirmed.chapters.map((b,d)=>{let e=(0,m.constructionChapterId)(a.documentTitle,b.title),f=c.find(a=>Number(a.chapterIndex)===d)??c[d]??{},g=(Array.isArray(f.sections)?f.sections:[]).map((b,c)=>{let f=`${e}:section:${c+1}`;return{sectionId:f,referenceId:`r${d+1}s${c+1}`,title:String(b.title??"").trim(),contentGroup:String(b.contentGroup??"").trim(),objectScope:"",rationale:"",responsibilityPositions:[],coverageItemIds:Array.isArray(b.coverageItemIds)?[...new Set(b.coverageItemIds.map(a=>String(a).trim()).filter(Boolean))]:[],requiredOutputs:aa({sectionId:f,raw:b.requiredOutputs,planningContext:a.planningContext}),suggestedCarriers:(Array.isArray(b.suggestedCarriers)?b.suggestedCarriers:[]).map(a=>a??{}).map(a=>({contentSet:String(a.contentSet??"").trim(),carrier:function(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"}(a.carrier),reason:String(a.reason??"").trim()})),factKeys:[],quantityKeys:[]}});return{chapterId:e,title:b.title,sections:g}});return{version:"document-structure-plan-v1",...function(a){let b=(0,s.Fu)(a.planningContext);return{planId:"structure-plan:"+(0,s.Fu)([b,a.confirmed.chapters.map(a=>a.title)]).slice(0,24),projectIdentityHash:(0,s.Fu)({projectIdentity:a.planningContext.projectIdentity??null,projectSnapshotId:a.planningContext.provenance.projectSnapshotId}),planningContextHash:b}}({confirmed:a.confirmed,planningContext:a.planningContext}),chapters:d,coverageMatrix:[],outputRegistry:[],factQuantities:[],state:"draft",planHash:""}}({raw:b,confirmed:a.confirmed,planningContext:a.planningContext,documentTitle:a.documentTitle}))},g={requireSectionContract:!1,requireCoverage:!1,requireRequiredCoverageItems:!0,requireFacts:!1,requireFormat:!1,requireProfessionalCandidates:!1},l=await f(),w=ar(l,j,g),x=new Set([(0,s.Fu)(l)]);for(let b=0;b<4&&w.length;b+=1){if((w=ar(l=await ap(a,l,w,d,c),j,g)).length&&x.has((0,s.Fu)(l)))throw aj(a,"skeleton-stalled",{plan:l,issues:w}),Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:骨架补丁没有产生有效业务变化,停止重复生成;${ah(w).slice(0,8).join(";")}`);x.add((0,s.Fu)(l))}if(w.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(w).slice(0,8).join(";")}`);let y=Math.max(1,Math.floor(k.N6?.outlineChapters??4));if(await (0,r.W)(l.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),y,async({chapter:b,chapterIndex:c})=>{let f=a=>({...b,sections:b.sections.map((b,c)=>({...b,objectScope:String(a[c].objectScope??"").trim(),rationale:String(a[c].rationale??"").trim(),responsibilityPositions:[...new Set((Array.isArray(a[c].responsibilityPositions)?a[c].responsibilityPositions:[]).map(a=>String(a).trim()).filter(Boolean))]}))}),k=new Set(b.sections.map(a=>a.sectionId)),m=a=>{let d=a?.sections;return Array.isArray(d)&&d.length===b.sections.length?d.some(a=>!a||"object"!=typeof a||Array.isArray(a))?[`章节「${b.title}」对象范围的每个小节必须是对象`]:ah(ar({...l,chapters:l.chapters.map((a,b)=>b===c?f(d):a)},j,{...g,requireSectionContract:!0}).filter(a=>a.target?.sectionId&&k.has(a.target.sectionId))):[`章节「${b.title}」对象范围的小节数不符(期望 ${b.sections.length},得到 ${Array.isArray(d)?d.length:"非数组"})`]},n=async()=>{var f,g,j;let k=await a.caller(i,(f=b.title,g=b.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds})),j=l,(0,t.dk)({stableReferences:(0,e.GP)(j),planningContext:function(a,b,c,d){let e=a.planningContext,f=new Map(d.map(a=>[a.id,a])),g=[...new Set(c.flatMap(a=>a.coverageItemIds))],h=new Set(g.map(a=>f.get(a)?.obligationId).filter(a=>!!a));return{version:e.version,documentType:e.documentType,...e.projectIdentity?{projectIdentity:e.projectIdentity}:{},tenderProfile:{projectType:e.tenderProfile.projectType},factsBaseline:e.factsBaseline.filter(a=>a.selected).map(a=>{let b=a.selected.value,c=(0,u.D)(b,320);return{key:a.key,...a.fieldName?{fieldName:a.fieldName}:{},...a.objectName?{objectName:a.objectName}:{},value:c.text,valueChars:[...b].length,...c.truncated?{valueTruncated:!0,valueRemainingChars:c.remainingChars}:{}}}),factsReading:"factsBaseline 只带选中事实的边界截断值(valueTruncated=true 时完整值未送达,valueRemainingChars 是剩余字符数);写对象范围不需要复述全部事实,需要完整值/出处时按 key 用 query_project_facts 读取。",contractObligations:e.contractObligations.filter(a=>h.has(a.id)&&(0,p.Ln)(a)).map(a=>({id:a.id,text:a.text,...a.items?.length?{items:a.items}:{},...a.quote?{quote:a.quote.slice(0,300)}:{}})),coverageItems:g.map(a=>({id:a,text:f.get(a)?.text??"",...f.get(a)?.obligationId?{obligationId:f.get(a).obligationId}:{}})),professionalCandidates:e.professionalCandidates.filter(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b))}}(a,f,g,d),task:"为已定稿的小节补写对象范围、独立成节理由与责任岗位;不得增删小节、改标题或改契约项",chapterTitle:f,sections:g,rules:[e.bx,"按给定 sections 的顺序输出同样数量的对象,不输出标题,不增删、不调序。","objectScope 写清本节覆盖的本项目对象/系统/工作面及其边界与接口,使用行业通行术语;不得用“加强管理、确保质量”等空泛表述。","rationale 说明本节按什么专业逻辑独立(对象、专业系统、施工阶段、风险、资源/管理要素),为什么不能并入相邻节。","responsibilityPositions 只写岗位称谓,不写姓名;按项目实际组织给出能对本节内容负责的岗位,不套固定清单。","对象/标准/工法/依据只引用 planningContext 中可核的内容;不得编造标准编号、控制值或工程对象。","只输出 JSON。"],output:{sections:[{objectScope:"对象/专业/工作面",rationale:"独立成节理由",responsibilityPositions:["岗位称谓"]}]}})),{...h,schema:V,validateProtocol:m});aj(a,`enrich-${c+1}`,k);let n=m(k);if(n.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败;${n.join(";")}`);let o=k?.sections;if(!o||o.length!==b.sections.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败`);return o},o=await n();l.chapters[c]=f(o)}),(w=ar(l=ab(l),j,{...g,requireSectionContract:!0})).length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:对象范围阶段未通过;${ah(w).slice(0,8).join(";")}`);let z=async c=>{var e,f;let g=c?.length?(e=l,f=b,(0,t.dk)({task:"局部修正事实落点、候选处置与输出例外;覆盖矩阵由程序从节内认领投影",previousResponse:f,deterministicIssues:c,currentStructure:e.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope}))})),requiredFactKeys:R(a.planningContext),professionalCandidates:a.planningContext.professionalCandidates,requiredOutputs:a.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(a=>({id:a.id,form:a.form,element:a.element})),rules:["只纠正 deterministicIssues;保留 previousResponse 中其他有效决定,不改章节或主载归属。","事实键与小节只用给定身份,每个事实给 sectionId 或有据的 notApplicableReason;不得凭空增加工程量。","专业候选逐项写明确处置及本项目理由;不得编造来源、对象或数字。","输出例外仅针对给定必出输出,须给 reason 与 alternative,独立审查接受之前不作放行。","返回完整纠正后的同一 JSON 结构。"]})):function(a,b,c){let d=b.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,obligationId:a.obligationId??null}))}))}));return(0,t.dk)({planningContext:(0,o.structurePlanningContextProjection)(P(a.planningContext)),coverageCatalog:Y(c),currentStructure:d,requiredFactKeys:R(a.planningContext),task:"核对项目事实/工程量落点、专业候选处置与输出例外;覆盖矩阵由程序从节内认领投影,不需要你填写;不要改章节结构",rules:["factQuantities:requiredFactKeys 中每个事实必须有 sectionId 落点,或 notApplicableReason(说明为什么本稿不需要该事实);project 身份类事实由文档身份承载,不在此列。工程量键如规划上下文没有可核来源,可留空,不编造。","candidateDispositions:**必须为 professionalCandidates 中每一个主题登记一条**(disposition=used 或 not-applicable,并写具体理由);不得遗漏、不得静默丢弃。","outputExceptions:仅当某项必出输出(含领域基线图)确实无法产出且等效载体能承担同一表达时使用;必须写 reason 与 alternative,最终由独立审查接受或拒绝。领域基线图是专业建议,不是招标原文;不要仅因基线存在就虚构项目不存在的场地/对象。","只使用 currentStructure 里的 sectionId/outputId;不得编造身份。","只输出 JSON。"],output:{factQuantities:[{key:"factKey",kind:"fact",sectionId:"section…"}],candidateDispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"本项目不存在该对象"}],outputExceptions:[{obligationId:"output:…",reason:"确实无法产出",alternative:"等效载体说明"}]}})}(a,l,d),j=await a.caller(i,g,{...h,schema:W});if(aj(a,"coverage",j),!j)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:覆盖规划未返回结果");b=j;let k=Array.isArray(j.factQuantities)?j.factQuantities:[],m=new Map;for(let a of k){if(!a.sectionId)continue;let b=m.get(a.sectionId)??{factKeys:[],quantityKeys:[]};("fact"===a.kind?b.factKeys:b.quantityKeys).push(a.key),m.set(a.sectionId,b)}l={...l,factQuantities:k,chapters:l.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,factKeys:[...new Set(m.get(a.sectionId)?.factKeys??[])],quantityKeys:[...new Set(m.get(a.sectionId)?.quantityKeys??[])]}))})),...Array.isArray(j.candidateDispositions)?{candidateDispositions:j.candidateDispositions}:{},...Array.isArray(j.outputExceptions)?{outputExceptions:j.outputExceptions}:{},formatRules:function(a,b){let c=a.tenderProfile;return{...void 0!==c.bidType?{bidType:c.bidType}:b?{bidType:b.bidType}:{},...void 0!==c.identityMarksForbidden?{identityMarksForbidden:c.identityMarksForbidden}:b?{identityMarksForbidden:b.identityMarksForbidden}:{},...void 0!==c.bodyTablePolicy?{bodyTablePolicy:c.bodyTablePolicy}:b?{bodyTablePolicy:b.bodyTablePolicy}:{},...void 0!==c.bodyFigurePolicy?{bodyFigurePolicy:c.bodyFigurePolicy}:b?{bodyFigurePolicy:b.bodyFigurePolicy}:{},...void 0!==c.bodyDiagramPolicy?{bodyDiagramPolicy:c.bodyDiagramPolicy}:b?{bodyDiagramPolicy:b.bodyDiagramPolicy}:{},...c.pageSemantics?.length?{pageSemantics:c.pageSemantics.map(a=>({...a}))}:{}}}(a.planningContext,a.bidComposition)}};await z(),w=ar(l=al(l,d),j);let A=new Set([(0,s.Fu)(l)]);for(let a=0;a<3&&w.length;a+=1){let a=(0,s.Fu)(l);if(await z(ah(w)),!(w=ar(l=al(l,d),j)).length)break;let b=(0,s.Fu)(l);if(b===a||A.has(b))break;A.add(b)}for(let b=0;b<2&&w.length;b+=1){let b=function(a,b){let c=[];for(let d of b.professionalCandidates??[])for(let b of[...d.sectionCandidates.map(a=>a.title),...d.contentRequirements.map(a=>a.title)]){if(a.chapters.some(a=>a.sections.some(a=>(0,q.qh)(a.title,b)||(0,q.ri)(`${a.objectScope}${a.rationale}`).includes((0,q.ri)(b)))))continue;let e=(a.candidateDispositions??[]).find(a=>(0,q.ri)(a.candidateTitle)===(0,q.ri)(b)&&(!a.chapterTitle||(0,q.ri)(a.chapterTitle)===(0,q.ri)(d.chapterTitle)));e&&"not-applicable"===e.disposition&&e.reason?.trim()||c.push({chapterTitle:d.chapterTitle,candidateTitle:b})}return c}(l,a.planningContext);if(!b.length)break;let c=(0,s.Fu)(l);if((w=ar(l=await an(a,l,b),j)).length&&c===(0,s.Fu)(l))break}if(w.some(a=>"coverage-same-text-split"===a.code)){let b=function(a,b){let c=new Map(b.map((a,b)=>[a.id,{item:a,index:b}])),d=new Map,e=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({section:a,order:1e4*b+c})));for(let{section:a,order:b}of e)d.set(a.sectionId,b);let f=new Map;for(let{section:a,order:b}of e)for(let d of a.coverageItemIds){let e=c.get(d);if(!e||"requirement"!==e.item.kind&&"obligation"!==e.item.kind)continue;let g=(0,n.$u)(e.item.text);g&&f.set(g,[...f.get(g)??[],{coverageId:d,sectionId:a.sectionId,order:b}])}let g=[],h=new Map;for(let[a,b]of f){let e=new Map;for(let a of b)e.set(a.sectionId,(e.get(a.sectionId)??0)+1);if(e.size<=1)continue;let f=[...e].sort((a,b)=>b[1]-a[1]||(d.get(a[0])??Number.MAX_SAFE_INTEGER)-(d.get(b[0])??Number.MAX_SAFE_INTEGER))[0][0],i=[...new Set(b.map(a=>a.coverageId))].sort((a,b)=>(c.get(a)?.index??0)-(c.get(b)?.index??0));for(let a of i)h.set(a,new Set([...h.get(a)??[],f]));g.push({text:b[0]?c.get(b[0].coverageId)?.item.text??a:a,toSectionId:f,coverageIds:i})}if(!g.length)return{plan:a,moves:g};let i=a.chapters.map(a=>({...a,sections:a.sections.map(a=>{let b=a.coverageItemIds.filter(a=>!h.has(a)),d=[...h.entries()].filter(([,b])=>b.has(a.sectionId)).map(([a])=>a);return{...a,coverageItemIds:[...new Set([...b,...d])].sort((a,b)=>(c.get(a)?.index??0)-(c.get(b)?.index??0))}})}));return{plan:al(ab({...a,chapters:i}),b),moves:g}}(l,d);b.moves.length&&(aj(a,"coverage-same-text-normalized",{moves:b.moves}),w=ar(l=b.plan,j))}if(w.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(w).slice(0,8).join(";")}`);return l},y=(0,n.w1)(await x(),j);w+=1;let z=y.planHash;a.sectionContracts.update(y);let B=await a.caller("你是独立的施工组织设计结构规划审查者,不是本计划的作者。只审结构完整性、专业逻辑、粒度、载体与重复;只输出 JSON。",$(a,y,d,1,c),{...h,schema:X});aj(a,`review-${w}`,B),B||aj(a,"review-unavailable",{round:w,candidate:y,reason:"独立规划审查未取得;结构可校验,按未取得审查记录并继续"});let E=B??{verdict:"pass",findings:[],sectionReviews:[]},F=Z((Array.isArray(E.findings)?E.findings:[]).map((a,b)=>{let c=a??{};return{id:`plan-review:${w}:${b+1}`,planId:y.planId,planHash:z,category:String(c.category??"structure"),severity:L(c.severity),target:{..."string"==typeof c.targetSectionId&&c.targetSectionId?{sectionId:c.targetSectionId}:{},..."string"==typeof c.targetOutputId&&c.targetOutputId?{outputId:c.targetOutputId}:{},..."string"==typeof c.targetObligationId&&c.targetObligationId?{obligationId:c.targetObligationId}:{}},detail:String(c.detail??""),fix:String(c.fix??"")}}),y,d,a.planningContext);a.sectionContracts.review(y,E,w);let G=B?[...F]:[{id:"plan-review:unavailable",planId:y.planId,planHash:z,category:"review-unavailable",severity:"advisory",target:{},detail:"独立结构规划审查未取得;结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续轮次可继续核对;不伪造专业通过"}],H=(0,n.w1)(y,j),I=(b,e,f,g)=>{let h=b,i=new Map((Array.isArray(e.exceptionDecisions)?e.exceptionDecisions:[]).map(a=>a??{}).map(a=>[String(a.obligationId??""),a]));i.size&&(h={...h,outputExceptions:(h.outputExceptions??[]).map(a=>{let b=i.get(a.obligationId);return b?{...a,reviewAcceptance:{accepted:!0===b.accepted,reviewer:D,basis:String(b.basis??"").trim()||"独立审查未给出可核理由"}}:a})});let k=new Set,l=[],m=[];for(let b of Array.isArray(e.patches)?e.patches:[]){let c=String(b.sectionId??"").trim();if(!c)continue;let d=!1,e=h.chapters.map(e=>({...e,sections:e.sections.map(e=>e.sectionId!==c?e:(d=!0,{...e,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:e.sectionId,raw:b.requiredOutputs,planningContext:a.planningContext})}:{}}))}));if(!d)continue;let i=aq(ab({...h,chapters:e}),a.planningContext),o=ar({...i,state:"validated"},j,{allowTransientCoverageSplit:!0});if(o.length)l.push({sectionId:c,issues:o}),m.push({id:`plan-review:${g}:patch-invalid:${c}`,planId:h.planId,planHash:f,category:"patch",severity:"advisory",target:{sectionId:c},detail:`审查补丁被确定性校验拒绝(本节未改):${ah(o).slice(0,4).join(";")}`,fix:"按确定性错误修正补丁;不得删除必出契约项、必出输出或让同一契约项跨节重复"});else{let a=ar({...i,state:"validated"},j);h=a.length&&a.every(a=>"coverage-same-text-split"===a.code)?(0,n.YG)({...i,state:"validated"}):(0,n.w1)({...i,state:"validated"},j),k.add(c)}}let o=ag({plan:h,operations:af(e.operations),planningContext:a.planningContext,catalog:d,validate:a=>ar({...a,state:"validated"},j,{allowTransientCoverageSplit:!0})});for(let b of(h=o.plan,c.push(...o.numberingChanges),o.numberingChanges.length&&aj(a,"review-numbering-changes",o.numberingChanges),o.rejected))m.push({id:`plan-review:${g}:operation-rejected:${m.length+1}`,planId:h.planId,planHash:f,category:"operation",severity:"advisory",target:b.sectionId?{sectionId:b.sectionId}:{},detail:`结构操作「${b.op}」被确定性校验拒绝(计划保持操作前状态):${b.reason}`,fix:"按确定性错误修正操作,或改为 finding 并在正文阶段处理;不得删除必出契约项/输出"});for(let a of o.applied)a.originalSectionId&&k.add(a.originalSectionId);return h=(0,n.w1)({...h,state:"validated"},j),a.sectionContracts.update(h),{plan:h,addressedSectionIds:k,patchRejections:l,operationResult:o,findings:m}},J=I(H,E,z,String(w)),K=J.addressedSectionIds,M=J.patchRejections,N=J.operationResult;H=J.plan,G.push(...J.findings);let O=1,S=0,T=[],_=G.filter(a=>["patch","operation"].includes(a.category)),ac=a=>!!(a&&(Array.isArray(a.patches)&&a.patches.length>0||Array.isArray(a.operations)&&a.operations.length>0||Array.isArray(a.exceptionDecisions)&&a.exceptionDecisions.length>0)),ad=E,ae=G.filter(a=>"review-unavailable"!==a.category).length>0||ac(E),ak=z,am=y,ao=0,as=ac(E);for(;ae&&S<3;){T.push(...G);let f=b?I(H,b,ak,`${O+1}-revision-${S+1}`):void 0;b=void 0,f&&(H=f.plan,G.push(...f.findings),_.push(...f.findings),K=new Set([...K,...f.addressedSectionIds]),N={...f.operationResult,applied:[...N.applied,...f.operationResult.applied],rejected:[...N.rejected,...f.operationResult.rejected],numberingChanges:[...N.numberingChanges,...f.operationResult.numberingChanges],originalIdMap:ai(N.originalIdMap,f.operationResult.originalIdMap)});let g=f?.patchRejections??[],i=f?.operationResult.rejected??[],k=new Set(H.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),m=new Set(H.outputRegistry.map(a=>a.outputId)),o=!!f||as;as=!1;let p=G.filter(a=>"review-unavailable"!==a.category&&!(a.target.sectionId&&!k.has(a.target.sectionId))&&!(a.target.outputId&&!m.has(a.target.outputId)));if(!p.length&&!o)break;let q=[];if(p.length){let b=p.map(a=>({code:"professional-review",message:`${a.detail};建议:${a.fix}`,target:{}})),f={reviewedPlanHash:ak,verdict:ad.verdict,reviewedSections:(0,e.GP)(am),findings:p,patches:ad.patches??[],operations:ad.operations??[]},g=H,h=[],i=!1,k=new Set;for(let e=0;e<=2&&!(ao>=6);e+=1){if(ao+=1,h=ar({...g=await ap(a,g,[...b,...h],d,c,f),state:"validated"},j),q.push({attempt:ao,candidateHash:(0,n.YG)(g).planHash,issues:h}),aj(a,"author-repair-validation",{attempt:ao,candidate:g,issues:h}),!h.length){i=!0;break}let e=(0,n.YG)(g).planHash;if(k.has(e))break;k.add(e)}if(!i){let b=h.length?`作者修订未通过确定性校验:${ah(h).slice(0,4).join(";")}`:"作者修订调用已达本阶段上限,保留上一有效候选";aj(a,"revision-recorded",{round:S+1,candidate:H,findings:p,reason:b}),G.push({id:`plan-review:revision-recorded:${S+1}`,planId:H.planId,planHash:H.planHash,category:"revision-recorded",severity:"advisory",target:{},detail:`${b};按未决项记录,不阻断冻结`,fix:""});break}H=(0,n.w1)({...g,state:"validated"},j)}if(S+=1,O>=4)break;if(H.planHash===ak){aj(a,"review-skipped-unchanged",{round:O,candidate:H,reason:"修订未改变候选 hash;不重复审查同一输入"});break}let r=H.planHash,t={reviewedPlanHash:ak,currentPlanHash:r,reviewedSections:(0,e.GP)(am),response:ad,revision:function(a,b){let c=a=>a.chapters.flatMap((a,b)=>{let{sections:c,...d}=a;return c.map((c,e)=>({referenceId:c.referenceId??null,section:A(c),chapter:A(d),address:{sectionId:c.sectionId,chapterId:a.chapterId,title:c.title,chapterNumber:b+1,sectionNumber:e+1}}))}),d=c(a),e=c(b),f=(a,b)=>a.filter(a=>a.referenceId===b).length,g=a=>({...a.address,sectionHash:(0,s.Fu)(a.section),chapterHash:(0,s.Fu)(a.chapter)}),h=new Set,i=[];for(let a of d){let b=a.referenceId&&1===f(d,a.referenceId)&&1>=f(e,a.referenceId),c=b?e.find(b=>b.referenceId===a.referenceId):void 0;if(!c){i.push({referenceId:a.referenceId,status:b?"removed":"unmatched",before:g(a),changedFields:[]});continue}h.add(c);let j=[...C(a.section,c.section),...C(a.chapter,c.chapter).map(a=>`chapter.${a}`)];(a.address.chapterNumber!==c.address.chapterNumber||a.address.sectionNumber!==c.address.sectionNumber)&&j.push("position"),i.push({referenceId:a.referenceId,status:j.length?"changed":"unchanged",before:g(a),after:g(c),changedFields:j})}for(let a of e)if(!h.has(a)){let b=a.referenceId&&1===f(e,a.referenceId)&&0===f(d,a.referenceId);i.push({referenceId:a.referenceId,status:b?"added":"unmatched",after:g(a),changedFields:[]})}let j=a=>{let{chapters:b,planHash:c,...d}=A(a);return{...d,chapterOrder:b.map(a=>a.chapterId)}};return{version:"structure-review-revision-v1",reviewedPlanHash:a.planHash,currentPlanHash:b.planHash,reviewedInputHash:(0,s.Fu)(A(a)),currentInputHash:(0,s.Fu)(A(b)),sections:i,globalChangedFields:C(j(a),j(b)),authorizesReuse:!1,scope:"逐值比较实际版本。unchanged仅指节本身、章元数据及位置未变,不证明依赖未变、独立或已获专业批准;仍须审查当前完整候选及跨节关系。"}}(am,H),validation:{reviewerPatchRejections:[...1===O?M:[],...g],reviewerOperationRejections:[...1===O?J.operationResult.rejected:[],...i],authorAttempts:q}};aj(a,"review-revision",{round:O+1,...t}),a.sectionContracts.update(H);let u=await a.caller("你是独立结构规划审查者。核对当前候选的专业缺陷是否实际消除,不能因程序校验通过而自动批准。只输出 JSON。",$(a,H,d,O+1,c,t,am),{...h,schema:X});if(O+=1,aj(a,`review-${O}`,{candidate:H,response:u}),!u){aj(a,"review-unavailable",{round:O,candidate:H,reason:"修订后独立审查未取得;保留当前有效候选并记录未决项"});break}ad=u,b=u;let v=Z((Array.isArray(u.findings)?u.findings:[]).map((a,b)=>({id:`plan-review:${O}:${b+1}`,planId:H.planId,planHash:H.planHash,category:String(a.category??"structure"),severity:L(a.severity),target:{..."string"==typeof a.targetSectionId?{sectionId:a.targetSectionId}:{},..."string"==typeof a.targetOutputId?{outputId:a.targetOutputId}:{},..."string"==typeof a.targetObligationId?{obligationId:a.targetObligationId}:{}},detail:String(a.detail??""),fix:String(a.fix??"")})),H,d,a.planningContext);a.sectionContracts.review(H,u,O),G.splice(0,G.length,...v),ae=(0,l.C)(u,v)||ac(u),ak=r,am=H}if(b){let a=I(H,b,ak,"final-edits");H=a.plan,G.push(...a.findings),_.push(...a.findings),K=new Set([...K,...a.addressedSectionIds]),N={...a.operationResult,applied:[...N.applied,...a.operationResult.applied],rejected:[...N.rejected,...a.operationResult.rejected],numberingChanges:[...N.numberingChanges,...a.operationResult.numberingChanges],originalIdMap:ai(N.originalIdMap,a.operationResult.originalIdMap)}}G.push(..._.filter(a=>!G.some(b=>b.id===a.id)));let at=(0,n.fw)((0,n.fw)(H,"reviewed"),"frozen"),au=new Set(at.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),av=new Set(at.outputRegistry.map(a=>a.outputId)),aw=G.map(a=>{if("operation"===a.category)return{...a,planId:at.planId,disposition:"operation-rejected",dispositionNote:"结构操作被确定性校验拒绝,计划保持操作前状态;记录为顾问意见"};if(a.target.sectionId&&K.has(a.target.sectionId))return{...a,planId:at.planId,disposition:"structural-change-applied",dispositionNote:"审查针对该节给出补丁/结构操作,已由程序应用并通过硬判据"};let b=a.target.sectionId?N.originalIdMap.get(a.target.sectionId)??a.target.sectionId:void 0;return b&&!au.has(b)||a.target.outputId&&!av.has(a.target.outputId)?{...a,planId:at.planId,disposition:"superseded",dispositionNote:"结构修改后目标节/输出已不存在,视为已处理"}:"blocking"===a.severity?{...a,planId:at.planId,disposition:"recorded-unresolved",dispositionNote:"达到审查/修订轮次上限仍未落地,保留为未决项;不阻断冻结,整稿台账继续跟踪"}:{...a,planId:at.planId,disposition:"advisory-recorded",dispositionNote:"程序硬判据通过;按顾问意见记录,不作为冻结阻断"}}),ax=aw.filter(a=>"recorded-unresolved"===a.disposition).length;return{plan:at,coverage:{chapters:at.chapters.length,sections:at.chapters.reduce((a,b)=>a+b.sections.length,0),outputs:at.outputRegistry.length,requiredCoverageItems:f.length,requiredFacts:g.length},review:{planId:at.planId,planHash:at.planHash,reviewer:D,rounds:O,findings:aw,...T.length?{priorFindings:T}:{},verdict:ax?"revise":"pass",advisoriesOnly:0===ax,...ax?{recorded:!0,recordedBlocking:ax}:{},incremental:{applied:N.applied,rejected:N.rejected}}}}function au(a){return{version:a.version,planId:a.planId,planHash:a.planHash,state:a.state,chapters:a.chapters.map(a=>({chapterId:a.chapterId,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,contentGroup:a.contentGroup,objectScope:a.objectScope,coverageItemIds:a.coverageItemIds,outputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,carrierSemantic:a.carrierSemantic??null,element:a.element,semanticRole:a.semanticRole,dedupeKey:a.dedupeKey})),factKeys:a.factKeys,quantityKeys:a.quantityKeys}))})),coverageMatrix:a.coverageMatrix,factQuantities:a.factQuantities,formatRules:a.formatRules??null}}function av(a,b){let c=new Map(Q({confirmed:b.confirmed,planningContext:b.planningContext}).map(a=>[a.id,a])),d=new Map(a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>[a.sectionId,{chapterIndex:b,sectionIndex:c}]))),f=new Map;for(let c of a.outputRegistry){let a=d.get(c.sectionId);if(a&&"agent-decision"!==c.source.kind)for(let d of[...new Set([c.obligationId,c.baselineId].filter(a=>!!a))]){let c=b.planningContext.outputObligations.find(a=>a.id===d);if(!c||"domain-baseline"!==c.kind&&!(0,p.oY)(c))continue;let e=f.get(d)??{sectionRefs:[]};e.sectionRefs.some(b=>b.chapterIndex===a.chapterIndex&&b.sectionIndex===a.sectionIndex)||e.sectionRefs.push(a),f.set(d,e)}}return{version:"construction-document-outline-v1",chapters:a.chapters.map(b=>({title:b.title,sections:b.sections.map(b=>{let d=b.coverageItemIds.map(a=>c.get(a)).filter(Boolean);return{title:b.title,pointIndexes:[...new Set(d.flatMap(a=>a.pointIndexes??[]))].sort((a,b)=>a-b),objectScope:(0,e.eq)(a,b.objectScope),rationale:(0,e.eq)(a,b.rationale),responsibilityPositions:b.responsibilityPositions,obligationIds:[...new Set(d.flatMap(a=>a.obligationId?[a.obligationId]:[]))],obligationItems:d.filter(a=>"obligation"===a.kind).map(a=>a.text),coverageItems:d.map(a=>({id:a.id,text:a.text,kind:a.kind,enumerated:a.enumerated??!1})),requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,...a.source.quote?{quote:a.source.quote}:{},basis:"domain-baseline"===a.source.kind?"domain-baseline":"agent-decision"===a.source.kind?"agent-decision":"tender",...a.baselineId?{baselineId:a.baselineId}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.source.reason?{reason:a.source.reason}:{}}))}})})),...a.coverageMatrix.length?{contentObligationCoverage:a.coverageMatrix.map(a=>({obligationId:a.obligationId,landing:a.landing,sectionRefs:a.sectionIds.map(a=>d.get(a)).filter(a=>!!a),reason:a.reason??""}))}:{},...b.planningContext.outputObligations.length?{outputPlan:b.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(b=>{let c=f.get(b.id),d=(a.outputExceptions??[]).find(a=>a.obligationId===b.id);return c?{obligationId:b.id,status:"planned",sectionRefs:c.sectionRefs,reason:"结构计划已安排"}:{obligationId:b.id,status:"not-applicable",reason:d?.reason??"结构计划未安排",...d?.alternative?{alternative:d.alternative}:{},...d?.reviewAcceptance?{reviewAcceptance:d.reviewAcceptance}:{}}})}:{},...a.factQuantities.length?{factCoverage:a.factQuantities.filter(a=>"fact"===a.kind).map(a=>a.sectionId?{key:a.key,landing:"section",sectionRefs:[d.get(a.sectionId)].filter(Boolean)}:{key:a.key,landing:"not-applicable",reason:a.notApplicableReason??""})}:{},selfReview:{issues:[],note:"结构计划已通过独立规划审查",status:"no-change"}}}},45002:(a,b,c)=>{c.d(b,{G:()=>h});var d=c(745);let e=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},f=a=>Array.isArray(a)?a:[],g=a=>f(a).filter(a=>"string"==typeof a);class h{constructor(a){if(this.sourceIdentity=a,this.states=new Map,this.leases=new Map,this.listeners=new Set,!a)throw Error("SECTION_CONTRACT_SOURCE_REQUIRED")}currentPlan(){return this.plan&&structuredClone(this.plan)}snapshot(){return structuredClone([...this.states.values()])}approvedGlobalPlanHash(){return this.globalPlanHash}subscribe(a){return this.listeners.add(a),a(this.snapshot()),()=>{this.listeners.delete(a)}}publish(){for(let a of this.listeners)a(this.snapshot())}sections(a){let b=new Map,c=new Set;return a.chapters.forEach((a,d)=>a.sections.forEach((e,f)=>{if(!e.referenceId||b.has(e.referenceId)||c.has(e.sectionId))throw Error("SECTION_CONTRACT_AMBIGUOUS_IDENTITY");b.set(e.referenceId,{section:e,chapter:{chapterId:a.chapterId,title:a.title},position:[d,f]}),c.add(e.sectionId)})),b}references(a){return[...new Set([...JSON.stringify(a).matchAll(/\[\[section:([^\]]+)\]\]/gu)].map(a=>a[1]))]}digest(a,b){let c=this.sections(a);if(b.some(a=>!c.has(a)))throw Error("SECTION_CONTRACT_DEPENDENCY_MISSING");return(0,d.Fu)({version:"section-contract-v1",sourceIdentity:this.sourceIdentity,projectIdentityHash:a.projectIdentityHash,planningContextHash:a.planningContextHash,interfaces:[...c].map(([a,b])=>({referenceId:a,sectionId:b.section.sectionId,chapter:b.chapter,position:b.position,title:b.section.title,contentGroup:b.section.contentGroup,coverageItemIds:b.section.coverageItemIds,requiredOutputs:b.section.requiredOutputs})),formatRules:a.formatRules??null,outputExceptions:a.outputExceptions??[],candidateDispositions:a.candidateDispositions??[],factQuantities:a.factQuantities,coverageMatrix:a.coverageMatrix,outputRegistry:a.outputRegistry,sections:[...new Set(b)].sort().map(a=>({referenceId:a,...c.get(a)}))})}revoke(a,b){let c=this.states.get(a);for(let d of(c&&this.states.set(a,{...c,status:"revoked",reason:b}),this.leases.get(a)??[]))d.abort(Error(`SECTION_CONTRACT_STALE:${b}`))}update(a){let b=this.sections(a);for(let[c,d]of(this.globalPlanHash=void 0,this.states)){let e=b.get(c);!e||e.section.sectionId!==d.sectionId||d.dependencyReferenceIds.some(a=>!b.has(a))||this.digest(a,[c,...d.dependencyReferenceIds])!==d.contractHash?this.revoke(c,"结构、来源身份或依赖合同已变化"):"global-approved"===d.status&&this.states.set(c,{...d,status:"draft-approved",reason:"局部合同未变;当前全局版本尚待审查"})}for(let[c,d]of b)this.states.has(c)||this.states.set(c,{referenceId:c,sectionId:d.section.sectionId,status:"pending",contractHash:this.digest(a,[c]),dependencyReferenceIds:[],reason:"未取得本节及依赖范围的明确专业批准"});this.plan=structuredClone(a),this.publish()}review(a,b,c){if(this.plan?.planHash!==a.planHash||(0,d.Fu)(this.plan)!==(0,d.Fu)(a))throw Error("SECTION_CONTRACT_REVIEW_VERSION_MISMATCH");let h=this.sections(a),i=new Map([...h].map(([a,b])=>[b.section.sectionId,a])),j=e(b),k=f(j.sectionReviews).map(e),l=new Map,m=k.length===h.size;for(let a of k){let b=String(a.sectionId??""),c=i.get(b);!c||l.has(c)?m=!1:l.set(c,a)}let n=new Set,o=!1;for(let a of f(j.findings).map(e)){let b=[...h].filter(([,b])=>b.section.sectionId===a.targetSectionId||b.section.requiredOutputs.some(b=>b.outputId===a.targetOutputId||!!a.targetObligationId&&b.obligationId===a.targetObligationId)||!!a.targetObligationId&&b.section.coverageItemIds.includes(String(a.targetObligationId)));b.length||(o=!0),b.forEach(([a])=>n.add(a))}let p=new Map;for(let[a,b]of h){let c=l.get(a)??{},d=g(c.dependencySectionIds),e=[...new Set([...d.map(a=>i.get(a)??`missing:${a}`),...this.references(b.section)])];p.set(a,e),(!m||o||!["pass","revise","reject","accept"].includes(String(j.verdict))||"reject"===j.verdict||"pass"!==c.verdict||!0!==c.dependencyScopeComplete||!String(c.reason??"").trim()||!Array.isArray(c.dependencySectionIds)||d.length!==c.dependencySectionIds.length||e.some(a=>!h.has(a)))&&n.add(a)}let q=a=>{let b=new Set,c=a=>{b.has(a)||(b.add(a),(p.get(a)??[]).forEach(c))};return c(a),[...b].sort()};for(let[e,f]of h){let g=q(e);if(g.some(a=>n.has(a)||!h.has(a))){this.revoke(e,"本节或依赖节未获明确批准、仍有意见,或逐节覆盖回执不完整");continue}let i=this.digest(a,g),j=this.states.get(e),k=g.every(a=>l.get(a)?.sourceOnlyDraft===!0);j?.sourceOnlyDraft&&!k&&this.revoke(e,"来源独立起草条件已撤销"),j?.contractHash!==i&&this.revoke(e,"专业确认的依赖范围已变化"),this.states.set(e,{referenceId:e,sectionId:f.section.sectionId,status:"draft-approved",contractHash:i,dependencyReferenceIds:g.filter(a=>a!==e),sourceOnlyDraft:k,approval:{kind:"section-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:c,reason:String(l.get(e).reason)},reason:"本节及依赖已明确批准;仅允许起草,交付仍待当前全局审查"})}this.publish()}approveGlobal(a,b){if("frozen"!==a.state||b.planHash!==a.planHash||"pass"!==b.verdict&&!(b.recorded&&"revise"===b.verdict))throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED");this.update(a);let c=this.sections(a),e=[...c.keys()].sort();for(let[f,g]of c){let c=this.states.get(f),h="draft-approved"===c.status?[f,...c.dependencyReferenceIds]:e,i=this.digest(a,h);c.contractHash!==i&&this.revoke(f,"全局批准绑定的依赖合同已变化"),this.states.set(f,{referenceId:f,sectionId:g.section.sectionId,contractHash:i,status:"global-approved",dependencyReferenceIds:h.filter(a=>a!==f),sourceOnlyDraft:"draft-approved"===c.status&&!0===c.sourceOnlyDraft,approval:{kind:"global-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:b.rounds,reason:b.recorded?`当前结构已冻结;审查达轮次上限仍有 ${b.recordedBlocking??0} 条未决项,按台账记录并允许起草`:"当前完整结构经原全局专业门禁通过"},reason:b.recorded?"允许起草;未决项随稿记录,锁节与交付另须正文及来源审查":"允许起草;锁节与交付另须正文及来源审查"})}this.globalPlanHash=a.planHash,this.publish()}assertSourceDraft(a,b){let c=[...this.states.values()].find(a=>a.sectionId===b&&["draft-approved","global-approved"].includes(a.status));if(!c?.sourceOnlyDraft||this.digest(a,[c.referenceId,...c.dependencyReferenceIds])!==c.contractHash)throw Error("SECTION_SOURCE_DRAFT_NOT_APPROVED")}assertGlobal(a){if(this.globalPlanHash!==a)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED")}acquire(a){let b=[...this.states.values()].find(b=>b.sectionId===a&&["draft-approved","global-approved"].includes(b.status));if(!b)throw Error(`SECTION_CONTRACT_NOT_APPROVED:${a}`);let c=new AbortController,{referenceId:d,contractHash:e}=b,f=this.leases.get(d)??new Set;return f.add(c),this.leases.set(d,f),{referenceId:d,sectionId:a,contractHash:e,signal:c.signal,assertCurrent:()=>{let b=this.states.get(d);if(c.signal.aborted||!b||b.sectionId!==a||b.contractHash!==e||!["draft-approved","global-approved"].includes(b.status))throw Error(`SECTION_CONTRACT_STALE:${a}`)},release:()=>{f.delete(c),f.size||this.leases.delete(d)}}}cancel(a){for(let b of(this.globalPlanHash=void 0,this.states.keys()))this.revoke(b,a);this.publish()}}},62369:(a,b,c)=>{c.d(b,{W:()=>d});async function d(a,b,c){let d;if(!Number.isSafeInteger(b)||b<1)throw Error("CONSTRUCTION_PARALLEL_LIMIT_INVALID");let e=Array(a.length),f=0,g=!1,h=Array.from({length:Math.min(b,a.length)},async()=>{for(;;){if(g)return;let b=f;if(f+=1,b>=a.length)return;try{e[b]=await c(a[b],b)}catch(a){g=!0,d=a;return}}});if(await Promise.all(h),g)throw d;return e}}};
|