@customize-agent/server 4.60.16 → 4.60.17
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 +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/server/chunks/1243.js +1 -1
- package/.next/server/chunks/4722.js +4 -4
- package/.next/server/chunks/9666.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/documents/export.js +2 -2
- package/.next/server/pages/api/health.js +1 -1
- package/.next/server/pages/canvas/[id].html +1 -1
- package/.next/server/pages/canvas.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +36 -36
- package/.next/static/{a37c9c6ce368356c977720f5c8b1810bc2e669bf253e8daec52de1112826aa65 → e48294e78fd020ac32104f19d01d9661de11c808f0ba823098dd2b1f95bfd581}/_buildManifest.js +1 -1
- package/package.json +1 -1
- /package/.next/static/{a37c9c6ce368356c977720f5c8b1810bc2e669bf253e8daec52de1112826aa65 → e48294e78fd020ac32104f19d01d9661de11c808f0ba823098dd2b1f95bfd581}/_ssgManifest.js +0 -0
|
@@ -26,7 +26,7 @@ ${g.shared}
|
|
|
26
26
|
最终正文通过结构化任务产物提交;内容、事实和专业要求仍须完整遵守,格式标记与自评说明不写入信息单元。`,i=function(){let a=new Map,b=new WeakMap;return c=>c.map(c=>{let d;if("tool"!==c.role||!c.toolCallId)return c;let e=b.get(c);if(e)return e;let f=/^\[([^\]]+)\] ok[^\n]*\n/u.exec(c.content);if(!f)return c;try{d=JSON.parse(c.content.slice(f[0].length))}catch{return c}if(!d||"object"!=typeof d||Array.isArray(d))return c;let g={projectSnapshotId:d.projectSnapshotId??d.snapshotId,contractId:d.contractId},h={},i={...d};for(let b of bM){if(!Array.isArray(d[b]))continue;let e=[];for(let[f,i]of d[b].entries()){let d=bO(i),j=bO([g,i]),k=a.get(j);k?(h[b]??=[]).push({requestedIndex:f,...k}):(a.set(j,{toolCallId:c.toolCallId,field:b,index:e.length,sha256:d}),e.push(i))}i[b]=e}if(!Object.keys(h).length)return b.set(c,c),c;i.contextReferences=h,i.contextProjection="unique-records-with-exact-prior-tool-references",i.referenceMeaning="本次匹配结果由新增记录与contextReferences共同组成;引用指向本对话此前原字完整工具回执,不能将新增数组为空解释为查询无结果。";let j=JSON.stringify(i),k={...c,content:`[${f[1]}] ok \xb7 ${j.length} 字符
|
|
27
27
|
${j}`};return b.set(c,k),k})}(),j=[],l=0,m=[],n=a.maxTokens,p=await (0,E.Bj)({system:h,initialMessages:[{role:"user",content:`${a.prompt}
|
|
28
28
|
|
|
29
|
-
${g.task}`}],initialEvidence:[...a.preloadedSourceRecords?.length?[{toolName:"query_project_facts",ok:!0,data:{snapshotId:a.toolContext.projectModel.snapshotId,candidates:a.preloadedSourceRecords}}]:[],...a.preloadedMemberIds?.length?[{toolName:"query_work_packages",ok:!0,data:(0,I.H)(a.toolContext.projectModel,{query:"*",memberIds:[...a.preloadedMemberIds]})}]:[],...a.preloadedConstructionPlan?[{toolName:"query_construction_plan",ok:!0,data:a.preloadedConstructionPlan}]:[]],budget:(0,B.Su)(a.diagnostics).budget,...a.onTurn?{onTurn:a.onTurn}:{},check:async a=>({issues:a.trim()?[]:[{detectorId:"block-structure-contract",level:"error",severity:"blocker",message:"结构化任务尚未提交"}],executed:["block-structure-contract"],degraded:[]}),runTurn:async({messages:g,toolCallLimit:p,turn:q})=>{let t,u,v,w;a.signal?.throwIfAborted();let x=(0,B.Iw)((0,B.Su)(a.diagnostics)),z=[...bG("locate"),...bG("plan"),...bG("generate")],C=new Set((0,bI.F)(a.toolContext)),E=[...new Map(z.map(a=>[a.name,a])).values()].filter(b=>C.has(b.name)&&(!a.toolContext?.allowedTools||a.toolContext.allowedTools.includes(b.name))).map(a=>{let b=structuredClone(a.inputSchema);return{name:a.name,description:a.description,parameters:b}}),F=i(g),G=!1,H=n,I=await (0,A._v)({system:h,messages:F,tools:E,requireToolCall:!0,taskKind:"composition",onRawResponse:e=>{if(w=e,v=void 0,G=!0,u=(0,y.TF)(a.diagnostics,{chapterId:a.chapterId??"",blockTitle:a.blockTitle??b,turn:q,response:e,request:{system:h,messages:F,tools:E,maxTokens:H,requireToolCall:!0}}),e.responseMetadata?.finishReason==="length"){(0,d.wD)({nodeId:b,chapterId:a.chapterId,title:a.blockTitle,turn:q,toolCalls:e.toolCalls.length,reason:"作者工具输出被供应商截断;完整原响应已归档,暂停核查单任务协议与实际思考开销,不重写整任务或继续整包取证"},"model-output-truncated");let c=e.requestMetadata?.maxTokens,f=void 0!==H?Math.ceil(1.5*H):void 0!==c?Math.ceil(1.5*c):void 0,g=e.requestMetadata?.outputCap;v={kind:"incomplete-output",sentOutputBudget:c??null,nextOutputBudget:(n=void 0===f?void 0:void 0===g?f:Math.min(f,g))??null,finishReason:"length"}}else e.responseMetadata?.protocolFailure&&(v={kind:"invalid-tool-arguments"===e.responseMetadata.protocolFailure?"invalid-tool-arguments":"incomplete-stream",sentOutputBudget:null,nextOutputBudget:null,finishReason:e.responseMetadata.finishReason??null,detail:e.droppedToolCalls??null});e.responseMetadata?.completed===!1&&(e.toolCalls.some(a=>"submit_author_task"===a.name)||Array.isArray(e.rawToolCalls)&&e.rawToolCalls.some(a=>a?.name==="submit_author_task"||a?.function?.name==="submit_author_task"))&&(0,bP.E7)(a.diagnostics,c.section.id,!1)},callKind:(0,bP.OD)(a.diagnostics,c.section.id)?"chapter-repair":"chapter-writing",stablePrefixChars:a.stablePrefixChars,maxTokens:H,signal:a.signal,diagnostics:a.diagnostics});if(a.signal?.throwIfAborted(),G||(u=(0,y.TF)(a.diagnostics,{chapterId:a.chapterId??"",blockTitle:a.blockTitle??b,turn:q,response:I})),!G&&I?.responseMetadata?.completed===!1&&I.toolCalls.some(a=>"submit_author_task"===a.name)&&(0,bP.E7)(a.diagnostics,c.section.id,!1),!I){if(w?.responseMetadata?.protocolFailure==="invalid-tool-arguments"&&Array.isArray(w.rawToolCalls)){let a=w.rawToolCalls.map(a=>({id:a.id,name:a.name??a.function?.name,arguments:a.arguments??a.function?.arguments}));if(a.length&&a.every(a=>"string"==typeof a.id&&a.id&&"string"==typeof a.arguments&&E.some(b=>b.name===a.name))){let b=[{role:"assistant",content:w.content,...void 0===w.thinkingContent?{}:{thinkingContent:w.thinkingContent},toolCalls:a},...a.map(a=>({role:"tool",toolCallId:a.id,content:s(r(a.name,k(`本次参数未执行:${JSON.stringify(w.droppedToolCalls??[])};只纠正语法结构,保留前述原字全部正文、表格和图数据`),Date.now()))}))];return{text:"",toolCalls:[],protocolRecovery:v,toolMessages:b}}}let b=(0,B.Su)(a.diagnostics);if((0,B.Iw)(b)>x||(0,B.nY)(b)||(0,B.Z9)(b)){let a=(0,B.nY)(b)??(0,B.Z9)(b);return{text:"",toolCalls:[],refused:{kind:a?.kind??"budget",message:a?.message??"预算耗尽:本次调用未发起"}}}return{text:"",toolCalls:[],...v?{protocolRecovery:v,toolMessages:[{role:"user",content:`上一工具响应未接纳。实际协议回执:${JSON.stringify(v)}。解析失败或未报告finish_reason不能证明输出额度不足,不凭空扩大预算;原始有意义文字完整保留。保留完整原任务和已取得证据,纠正实际工具参数语法与标注;已有服务端保留的可解析原稿使用correct_author_submission,不重新生成它的段落、表行或图数据;不得补造事实。`}]}:{}}}let J=[],K=[],L=[],M=[],N=async(b,d)=>{let e;if(I.responseMetadata?.completed!==!0)throw Error("作者响应未完整结束,不能提交为完整任务");if(void 0!==a.maxAuthorSubmissions&&l>=a.maxAuthorSubmissions)throw Error("本任务的定向内容修改次数已用完,不能再次改稿");try{e=(0,bK.Ix)(b,{contract:c.contract,taskId:c.section.id,projectModel:a.toolContext?.projectModel}),await a.beforeAuthorSubmit?.(e)}catch(b){throw(0,bP.E7)(a.diagnostics,c.section.id,!1),b}let f=(0,bP.Y1)(a.diagnostics,c.section.id,e,e&&"object"==typeof e&&"string"==typeof e.revisionReason?e.revisionReason:void 0,{preserveFirstDraft:!a.beforeAuthorSubmit});for(let b of(l+=1,(0,y.cG)(a.diagnostics,f,u,d),t=f.markdown,f.output.decisionRequests))await a.toolContext.audit?.requestClarification({question:b.question,blocking:!0});return{taskId:f.output.taskId,contentHash:f.contentHash,pendingCriterionIds:f.pendingCriterionIds}},O={...a.toolContext,stage:"generate",allowedTools:E.map(a=>a.name),authorTask:{criterionIds:(0,e.C)(c.contract,c.section.id).map(a=>a.id),submit:async a=>{let b=m.length,c={output:structuredClone(a),accepted:!1,rawCallId:u??null};m.push(c);try{let b=await N(a);c.accepted=!0;let d=(0,bK.t3)(a);return d.length?{...b,shapeRepairs:d}:b}catch(d){let a=d instanceof Error?d.message:String(d),c=/包含协议外字段/u.test(a)?";可用 correct_author_submission 的 remove-unknown-field 操作删除该键(错误信息已给出路径),或去掉该键后重新提交":/须保留非空实际原文/u.test(a)?";可用 drop-empty-fragment 删除仅含空text的片段,或修正后重新提交":/已退役|units 旧形态|format 无效/u.test(a)?";请按 compact-v7 载体形(paragraphs/tables/figures/decisionRequests)重新提交":/守恒/u.test(a)?";单元顺序与全部载体须保持完整,不丢弃也不补造":"";throw Error(`${a};原稿已完整保留,submissionIndex=${b}。标注纠正用correct_author_submission,不重写段落、表行或图数据;来源资格仍须独立核验。${c}`,{cause:d})}},correct:async(a,b)=>{if(!Number.isSafeInteger(a)||a<0)throw Error("原稿序号无效");let c=m[a];if(!c||c.accepted)throw Error("只能纠正本任务当前实际未接收原稿");let d=(0,bQ.QN)(c.output,b);c.output=d;let e=await N(d,{submissionIndex:a,originalRawCallId:c.rawCallId,changes:b});return c.accepted=!0,e}}},P=void 0!==p?Math.max(0,p):I.toolCalls.length,Q=a=>"submit_author_task"===a||"correct_author_submission"===a,R=I.toolCalls.find(a=>Q(a.name)),S=new Set([...I.toolCalls.filter(a=>!Q(a.name)).slice(0,Math.max(0,P-(R||void 0!==p&&E.some(a=>"submit_author_task"===a.name)?1:0))),...R&&P>0?[R]:[]]),T=I.toolCalls.filter(a=>S.has(a)),U=I.toolCalls.length-T.length;for(let b of(U>0&&(console.warn(`[agent-tools] 单轮工具调用超块级预算,已截断 ${U} 次(限额 ${p})`),a.onToolIssue?.([{level:"warning",category:"structure",owner:"system",message:`本轮工具调用超出块级上限,已执行前 ${T.length} 次、截断 ${U} 次——请合并查询或减少工具调用`,suggestion:"下一轮只调真正需要的工具;剩余额度见块预算"}])),T)){let c,d;a.signal?.throwIfAborted();let e=Date.now();try{c=(0,f.parseJsonWithoutDuplicateKeys)(b.arguments||"{}")}catch(a){d=a instanceof Error?a.message:String(a)}let g=d?r(b.name,k(d),e):await bH(b.name,c,O);if(a.signal?.throwIfAborted(),K.push(g.ok?{toolName:b.name,ok:!0,data:g.data}:{toolName:b.name,ok:!1,error:{code:g.error.code}}),g.ok){let a=function(a,b){let c=b??{},d=(...a)=>{for(let b of a){let a=c[b];if("string"==typeof a&&a.trim())return a.trim()}};return"search_evidence"===a||"discover_files"===a?d("query"):"read_source"===a||"query_source_units"===a?d("filePath","path"):void 0}(b.name,c);a&&O.audit?.recordEvidenceCall&&O.audit.recordEvidenceCall({tool:b.name,term:a})}0===L.length&&L.push({role:"assistant",content:I.content??"",toolCalls:T.map(a=>({id:a.id,name:a.name,arguments:a.arguments})),...void 0!==I.thinkingContent?{thinkingContent:I.thinkingContent}:{}}),L.push({role:"tool",content:s(g),toolCallId:b.id});let h=g.ok?g.injection:void 0;h?.suspicious&&M.push({tool:b.name,patterns:h.patterns}),J.push({toolName:b.name,ok:g.ok,durMs:Date.now()-e,summary:g.ok?`ok ${g.bytes??0}B${h?.suspicious?" \xb7 疑似注入(按数据对待)":""}`:`${g.error.code}`})}if(j.push(...J),M.length>0){let c=M.map(a=>`${a.tool}(${a.patterns.join("、")})`).join(";");a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${M.length} 处:${c}——已按数据对待并记节点 issue`);try{a.onToolIssue?a.onToolIssue(M.map(a=>(function(a){let b=[...a.patterns].sort().join("、")||"未标注模式";return{level:"warning",severity:"warning",category:"scope",owner:"system",repairability:"manual_review",message:`工具「${a.tool}」返回的资料内容命中疑似注入形态(${b})——该内容已按数据对待(模型侧带「${o}」前缀),本节正文不得因它改变写作口径`,suggestion:"人工复核该资料:若确为提示注入,请把该文件移出资料范围后重跑本节;正文中据其写出的事实须另行核实来源。",...a.nodeId?{sectionTitle:a.nodeId}:{},provenance:{detectorId:"suspicious-injection",fingerprint:(0,D.c6)(`${a.tool}\u0000${b}\u0000${a.nodeId??""}`)}}})({...a,nodeId:b}))):console.warn(`[agent-tools] 工具结果命中疑似注入(${c})但本次未提供节点问题汇(onToolIssue)——命中未被静默丢弃,见 llm.lastInfo`)}catch(d){let b=d instanceof Error?d.message:String(d);a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${M.length} 处:${c}——**节点 issue 未落库**(${b}):命中未被静默丢弃,但记账不完整`),console.error(`[agent-tools] 记录疑似注入节点 issue 失败(${c}):${b}`,d)}}let V=L.length>0?[...L,...U?[{role:"user",content:`该原始响应另有${U}个工具请求未执行,不能将它们当成取证结果。正文提交额度已经预留;依据实际已给的资料与已完成取证写作,真实缺口留作未决事项,不再猜属性或遍历全部资料。`}]:[]]:[];return{text:t??"",...void 0!==t?{committed:t}:{},toolCalls:J,toolMessages:V,toolResults:K}}}),q=m.filter(a=>!a.accepted).length;if(("unfixable"===p.kind||"no_content"===p.kind)&&"no-progress"===p.cause&&(0,d.wD)({nodeId:b,chapterId:a.chapterId,title:a.blockTitle,turn:p.turn,toolCalls:p.toolCalls,reason:p.reason}),a.onOutcome?.(q?{...p,rejectedSubmissions:q}:p),"no_content"===p.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环未产出正文:${p.reason}`);return}if("budget_refused"===p.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环被预算挡回(${p.refused.kind}):${p.reason}`);return}"unfixable"===p.kind&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`写手循环停止(${p.cause}),保留当前候选(残余 ${p.residual}):${p.reason}`);let t=function(a){if("unfixable"===a.kind&&!(a.residual<=0)&&"budget-refused"!==a.cause&&"tool-budget-exhausted"!==a.cause)return{issue:{level:"error",severity:"blocker",category:"structure",message:`块写作未收敛(残余 ${a.residual}):${a.reason}`},reason:`写手循环 ${a.turn} 轮后仍不达标(残余 ${a.residual}):${a.reason} —— 提交当前最好草稿,缺口由块账与导出门禁承载`}}(p);return t&&(a.diagnostics&&(a.diagnostics.llm.lastInfo=`${a.diagnostics.llm.lastInfo??""};本块残余 ${"unfixable"===p.kind?p.residual:0} 未收敛`),a.toolContext?.audit?.declareUnfixable(t)),p.content}},6455:(a,b,c)=>{c.d(b,{AY:()=>C,DZ:()=>B,O5:()=>D,cs:()=>j});var d=c(77598),e=c(11685);let f="tender-clarification-source-group-v2",g="tender-source-group-accounting-v2",h=/^(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::]|[??]\s*$/u,i=/(?:请问|请明确|请确认|请澄清)[::]\s*$/u,j=/^(?:回复|答复|答疑|答|澄清|释义)[::]/u,k=RegExp(`(?:^|\\n)${j.source.slice(1)}`,"u"),l=/^[((](\d{1,2}|[一二三四五六七八九十])[))]/u,m=/(?:请问|请明确|请确认|请澄清|(?:^|\n)(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::])/u,n=/[??]\s*$/u,o=/[??。!!;;]\s*$/u,p=/^\s*(?:\d{1,3}[..、]|第[一二三四五六七八九十百\d]+[章节条])/u,q=/^[a-f0-9]{64}$/u,r=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),s=a=>(0,d.createHash)("sha256").update(a).digest("hex"),t=a=>r(a);function u(a,b){return r({version:f,groupFingerprint:a.fingerprint,sourceSpans:b})}function v(a){let b=a.versionContext;return a.file&&b?.document.sourceFile===a.file&&q.test(b.sourceIdentity.sourceSha256)&&q.test(b.sourceIdentity.parsedSha256)?b.sourceIdentity:void 0}function w(a,b){let c=v(a),d=v(b),e=a.sourceSpans?.at(-1),f=b.sourceSpans?.[0];return!!(c&&d&&a.file===b.file&&c.sourceSha256===d.sourceSha256&&c.parsedSha256===d.parsedSha256&&e&&f&&e.file===f.file&&void 0!==e.chunkIndex&&void 0!==f.chunkIndex&&f.chunkIndex>=e.chunkIndex&&f.chunkIndex<=e.chunkIndex+1&&(f.chunkIndex!==e.chunkIndex||f.start>=e.end))}function x(a,b){let c=v(a),d=v(b);return!!(c&&d&&a.file===b.file&&c.sourceSha256===d.sourceSha256&&c.parsedSha256===d.parsedSha256)}function y(a,b,c,d){if(!x(a,b)||void 0!==c.sourceGroup||c.file!==a.file||!Array.isArray(c.sourceSpans)||!c.sourceSpans.length||c.sourceSpansSha256!==(0,e.y)(c.sourceSpans))throw Error("问题续行缺少真实同源物理证明");d(c);let f=[...a.sourceSpans??[],...b.sourceSpans??[]],g=a.sourceSpans?.at(-1),h=b.sourceSpans?.[0];if(!g||!h||void 0===g.chunkIndex||void 0===h.chunkIndex||h.chunkIndex<g.chunkIndex||h.chunkIndex===g.chunkIndex&&h.start<g.end)throw Error("问题续行原成员范围逆序或缺失");let i=f.map(a=>c.sourceSpans.flatMap((b,c)=>!function(a,b){let c={...b};return void 0===a.sourceGapBefore&&delete c.sourceGapBefore,void 0===a.sourceNativeTextBridgeBefore&&delete c.sourceNativeTextBridgeBefore,JSON.stringify(c)===JSON.stringify(a)}(a,b)?[]:[c]));if(i.some(a=>1!==a.length)||i.some((a,b)=>b>0&&a[0]<=i[b-1][0])||i[0]?.[0]!==0||i.at(-1)?.[0]!==c.sourceSpans.length-1)throw Error("问题续行证明未完整保留两端原成员spans及原顺序");let j=i[a.sourceSpans.length-1][0],k=i[a.sourceSpans.length][0],l=new Set(i.map(a=>a[0]));if(c.sourceSpans.some((a,b)=>!l.has(b)&&(b<=j||b>=k)))throw Error("问题续行证明借用了原成员之外的正文");let m=c.sourceSpans.slice(j+1,k+1).flatMap(a=>a.sourceNativeTextBridgeBefore?[a.sourceNativeTextBridgeBefore]:[]);if(c.sourceSpans.some((a,b)=>!l.has(b))&&!m.length)throw Error("问题续行新增页布局spans缺少真实原生页面证明");if(m.some(b=>b.file!==a.file||b.sourceSha256!==v(a).sourceSha256)||a.section!==b.section&&!m.length)throw Error("问题续行跨页/栏目缺少本物理文件原生页面证明");if(g.chunkIndex!==h.chunkIndex&&!c.sourceSpans.slice(j+1,k+1).some(a=>a.sourceNativeTextBridgeBefore||a.sourceGapBefore))throw Error("问题续行跨chunk缺少原生页面或真实空白gap证明")}function z(a){let b=k.exec(a);return!!(b&&!a.slice(0,b.index).trim())}function A(a,b,c,d){let e={end:b+1,continuations:[]},f=a[b];if(!v(f)||!f.sourceSpans?.length||k.test(f.text))return e;let g=a[b-1];if(g&&x(g,f)&&m.test(g.text)&&!n.test(g.text)&&!k.test(g.text)&&!m.test(f.text)&&!p.test(f.text)&&!l.test(f.text.trim()))return e;let j=i.test(f.text);if(!j&&!h.test(f.text)&&!m.test(f.text))return e;if(!j){let g=a[b+1];if(h.test(f.text)&&o.test(f.text)&&g&&w(f,g)&&!g.clauseNo&&!g.sourceSpans?.[0]?.logicalBoundaryBefore&&z(g.text))return{end:b+2,continuations:[]};if(!d||n.test(f.text))return e;let i=[],j=b+1;for(;j<a.length;){let f=a[j-1],g=a[j];if(!x(f,g)||g.clauseNo||g.sourceSpans?.[0]?.logicalBoundaryBefore||l.test(g.text.trim())||p.test(g.text))break;let h=function(a){let b=k.exec(a),c=b?a.slice(0,b.index):a;if(!(!c.trim()||b&&!n.test(c)||c.split(/\r?\n/u).some(a=>l.test(a.trim())||p.test(a)||m.test(a))))return{complete:n.test(c),containsReply:!!b}}(g.text);if(!h)break;let o=d.proveContinuation(f,g);if(!o)break;if(y(f,g,o,c),i.push({fromOffset:j-1-b,toOffset:j-b,proofBinding:o}),h.containsReply)return{end:j+1,continuations:i};if(h.complete){let b=a[j+1];return b&&w(g,b)&&!b.clauseNo&&!b.sourceSpans?.[0]?.logicalBoundaryBefore&&z(b.text)?{end:j+2,continuations:i}:e}j+=1}return e}let q=b+1,r=1,s=b+1;for(;q<a.length;){let b=a[q];if(!w(a[q-1],b)||function(a){let b=l.exec(a.trim());if(b)return/^\d+$/u.test(b[1])?Number(b[1]):"一二三四五六七八九十".indexOf(b[1])+1}(b.text)!==r||!h.test(b.text))break;if(k.test(b.text)){q+=1,s=q,r+=1;continue}let c=a[q+1];if(!c||!w(b,c)||c.clauseNo||c.sourceSpans?.[0]?.logicalBoundaryBefore||!z(c.text))break;q+=2,s=q,r+=1}return{end:s,continuations:[]}}function B(a,b){let c=a.sourceGroup;if(!c||c.version!==f||"\n\n"!==c.separator||c.sourceFile!==a.file||!q.test(c.sourceIdentity?.sourceSha256??"")||!q.test(c.sourceIdentity?.parsedSha256??"")||!Array.isArray(c.members)||c.members.length<2||!Array.isArray(c.questionContinuations))throw Error("问答源组缺少当前同源完整成员及投影身份");let d=0,g=new Set;for(let[a,f]of c.members.entries()){if(!Number.isSafeInteger(f.sourceOrdinal)||f.sourceOrdinal<0||g.has(f.sourceOrdinal)||a>0&&f.sourceOrdinal!==c.members[a-1].sourceOrdinal+1||f.file!==c.sourceFile||"string"!=typeof f.text||!f.text.trim()||f.start!==d||f.end!==d+f.text.length||!f.sourceSpans?.length||f.sourceSpansSha256!==(0,e.y)(f.sourceSpans))throw Error("问答源组成员原序号/原文/UTF16投影/原spans身份不一致");b({text:f.text,file:f.file,sourceSpans:f.sourceSpans,sourceSpansSha256:f.sourceSpansSha256}),g.add(f.sourceOrdinal),d=f.end+2*(a<c.members.length-1)}let h=c.members.map(a=>({...a,versionContext:{sourceIdentity:c.sourceIdentity,document:{sourceFile:c.sourceFile,isClarification:!0}}})),i=new Map;for(let a of c.questionContinuations){let d=c.members.find(b=>b.sourceOrdinal===a.fromSourceOrdinal),e=c.members.find(b=>b.sourceOrdinal===a.toSourceOrdinal),f=JSON.stringify([a.fromSourceOrdinal,a.toSourceOrdinal]);if(!d||!e||e.sourceOrdinal!==d.sourceOrdinal+1||i.has(f))throw Error("问题续行证明关联了未知/重复原成员");y(h[c.members.indexOf(d)],h[c.members.indexOf(e)],a.proofBinding,b),i.set(f,a.proofBinding)}let j=A(h,0,b,{proveContinuation:(a,b)=>i.get(JSON.stringify([h.indexOf(a)+c.members[0].sourceOrdinal,h.indexOf(b)+c.members[0].sourceOrdinal]))});if(j.end!==h.length||j.continuations.length!==i.size)throw Error("问答源组成员不是完整结构问题与答复,不能关联未知邻项");let k=c.members.map(a=>a.text).join("\n\n"),l=c.members.flatMap(a=>a.sourceSpans),{fingerprint:m,...n}=c;if(k!==a.text||s(k)!==c.textSha256||r(c.members)!==c.membersSha256||t(n)!==m||JSON.stringify(a.sourceSpans)!==JSON.stringify(l)||a.sourceSpansSha256!==u(c,l))throw Error("问答源组原母投影/成员守恒或独立来源组指纹不一致")}function C(a){if(!a||a.version!==g||!Number.isSafeInteger(a.rawCount)||a.rawCount<0||!Number.isSafeInteger(a.groupCount)||a.groupCount<0||a.reduction!==a.rawCount-a.groupCount||!Array.isArray(a.groups)||a.groups.length!==a.groupCount)throw Error("原始源单元与判审源组账缺失或不闭合");let b=new Set,c=0;if(a.groups.forEach((d,e)=>{if(d.judgmentIndex!==e||!Array.isArray(d.rawOrdinals)||!d.rawOrdinals.length||d.rawOrdinals.length>1&&(!q.test(d.sourceGroupFingerprint??"")||!d.sourceFile?.trim()||!q.test(d.parentFingerprint??"")||!q.test(d.sourceSpansSha256??""))||1===d.rawOrdinals.length&&void 0!==d.sourceGroupFingerprint)throw Error("判审源组缺少其真实原单元组身份");d.rawOrdinals.forEach(d=>{if(!Number.isSafeInteger(d)||d!==c||d>=a.rawCount||b.has(d))throw Error("源组成员没有按完整原始inventory唯一连续覆盖");b.add(d),c+=1})}),b.size!==a.rawCount)throw Error("源组账未保全原始来源分母")}function D(a,b,c){a.forEach(b);let d=[],e=[];for(let g=0;g<a.length;){let h=A(a,g,b,c),i=h.end,j=a.slice(g,i),k=j[0];if(j.length>1){let a=0,c=j.map((b,c)=>{let d={sourceOrdinal:g+c,text:b.text,file:b.file,...void 0===b.section?{}:{section:b.section},...void 0===b.clauseNo?{}:{clauseNo:b.clauseNo},sourceSpans:b.sourceSpans,sourceSpansSha256:b.sourceSpansSha256,start:a,end:a+b.text.length};return a=d.end+2,d}),d=c.map(a=>a.text).join("\n\n"),e={version:f,sourceFile:k.file,sourceIdentity:{...v(k)},separator:"\n\n",members:c,questionContinuations:h.continuations.map(({fromOffset:a,toOffset:b,proofBinding:c})=>({fromSourceOrdinal:g+a,toSourceOrdinal:g+b,proofBinding:c})),textSha256:s(d),membersSha256:r(c)},i={...e,fingerprint:t(e)},l=c.flatMap(a=>a.sourceSpans);B(k={...k,text:d,sourceGroup:i,sourceSpans:l,sourceSpansSha256:u(i,l)},b)}e.push({judgmentIndex:d.length,rawOrdinals:Array.from({length:i-g},(a,b)=>g+b),...k.sourceGroup?{sourceGroupFingerprint:k.sourceGroup.fingerprint,sourceFile:k.sourceGroup.sourceFile,parentFingerprint:k.sourceGroup.textSha256,sourceSpansSha256:k.sourceSpansSha256}:{}}),d.push(k),g=i}let h={version:g,rawCount:a.length,groupCount:d.length,reduction:a.length-d.length,groups:e};return C(h),{clauses:d,accounting:h}}},7148:(a,b,c)=>{c.d(b,{Q0:()=>g,RD:()=>i,Sn:()=>f,eu:()=>d,wA:()=>h});let d={米:"m",m:"m",延长米:"m",公里:"km",千米:"km",km:"km",平方米:"m2",平方:"m2","㎡":"m2","m\xb2":"m2",m2:"m2",立方米:"m3",方:"m3","m\xb3":"m3",m3:"m3",吨:"t",t:"t",千克:"kg",公斤:"kg",kg:"kg"},e=[["m3","m\xb3","立方米","方"],["m2","m\xb2","㎡","平方米"],["m","米","延长米"],["t","吨"],["kg","千克","公斤"],["km","公里","千米"]];function f(a){let b=String(a||"").trim().toLowerCase();return Object.prototype.hasOwnProperty.call(d,b)?d[b]:b}function g(a,b){let c=String(a||"").trim().toLowerCase(),d=String(b||"").trim().toLowerCase();return!c||!d||c===d||f(c)===f(d)||e.some(a=>a.includes(c)&&a.includes(d))}let h="平方米|立方米|m2|m3|m\xb2|m\xb3|㎡|延长米|公里|千米|kg|km|吨|座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|t",i=[...new Set([...h.split("|"),"日历天","工作日","小时","分钟","个月","毫米","厘米","兆帕","千瓦","万元","亿元","台班","日","周","秒","mm","cm","MPa","kW","天","月","年","人","层","栋","%","%","dB(A)","dB","分贝","℃","\xb0C","kPa","Pa","kN","N","kV","V","A","Hz","rpm","m/s","mm/s","m\xb3/h","m3/h","L/s","μg/m\xb3","μg/m3","mg/m\xb3","mg/m3","克","g","亩","公顷","hm2","hm\xb2","平米","公斤","千克","升","毫升","L","ml","mL","元","度","级","星","辆","Wp","kWp","MWp"])].sort((a,b)=>b.length-a.length).map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("|")},7661:(a,b,c)=>{c.d(b,{s:()=>i});var d=c(77598),e=c(12866),f=c(59948);let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),h=a=>"string"==typeof a?a.replace(/\r\n/gu,"\n").split("\n").map(a=>a.trim()).join("\n"):Array.isArray(a)?a.map(h):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,h(b)])):a;function i(a,b,c,d){if(c.contractId!==a.id||b.contractId!==a.id)throw Error("写作指标的首稿、模型和合同身份不一致");let i=new Map(c.findings.map(a=>[a.criterionId,a])),j=new Map(c.findings.map(a=>[a.criterionId,a.status])),k=a=>"met"===j.get(a)&&["professional","strong"].includes(i.get(a)?.qualityLevel??"unmeasured"),l=a.criteria.filter(a=>a.applicable&&!a.chapterId),m=new Set(c.sourceReviews?.filter(a=>"met"!==a.status).map(a=>a.taskId)),n=a.sections.map(c=>{let d=a.criteria.filter(a=>a.applicable&&a.sectionId===c.id),e=b.taskAttempts[c.id]?.firstComplete===!0;return{taskId:c.id,produced:!!b.tasks[c.id],protocolFirstComplete:e,firstQualityPassed:e&&!b.tasks[c.id]?.firstCandidate.qualityIssues?.length&&!m.has(c.id)&&d.length>0&&d.every(a=>k(a.id))}}),o=a.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0),p=0,q=0,r=0,s=0,t=0;for(let c of a.sections){let d=b.tasks[c.id];if(!d)continue;let f=b.taskAttempts[c.id]?.firstComplete===!0&&!d.firstCandidate.qualityIssues?.length&&!m.has(c.id),k=new Map(d.firstCandidate.output.units.map(a=>[a.id,a])),l=a.criteria.filter(a=>a.applicable&&a.sectionId===c.id),n=new Set;for(let a of d.current.output.units){s+=1;let m=f&&b.c0TaskHashes?.[c.id]!==null?k.get(a.id):void 0,o=(0,e.renderAuthorUnit)(a).length;q+=o;let p=d.firstCandidate.output.factBindings.filter(b=>b.unitId===a.id),u=d.current.output.factBindings.filter(b=>b.unitId===a.id),v=d.firstCandidate.output.numericBindings?.filter(b=>b.unitId===a.id)??[],w=d.current.output.numericBindings?.filter(b=>b.unitId===a.id)??[],x=l.filter(b=>{let c=i.get(b.id)?.authorUnitIds;return void 0===c?a.criterionIds.includes(b.id):c.includes(a.id)});m&&g(h(m))===g(h(a))&&g(p)===g(u)&&g(v)===g(w)&&x.length>0&&x.every(a=>"met"===j.get(a.id))&&a.criterionIds.every(a=>"met"===j.get(a))&&(n.add(a.id),t+=1,r+=o)}for(let e of a.criteria.filter(a=>a.applicable&&a.sectionId===c.id)){let a=i.get(e.id)?.authorUnitIds,g=(!f||b.c0TaskHashes?.[c.id]===null?[]:d.firstCandidate.output.units).filter(b=>void 0!==a?a.includes(b.id):b.criterionIds.includes(e.id));g.length&&"met"===j.get(e.id)&&(p+=e.weight*g.filter(a=>n.has(a.id)).length/g.length)}}let{missingUsageCalls:u,totalTokens:v,repairTokens:w}=(0,f.TV)(d);return{version:"writing-metrics-v2-professional-2026-10-12",contractId:a.id,firstDocumentHash:c.documentHash,metricDefinition:"task-professional-pass-and-document-conditions-v2",taskMetrics:n,firstPassRate:n.length?n.filter(a=>a.firstQualityPassed).length/n.length:null,documentConditionsPassed:l.every(a=>k(a.id)),unresolvedDocumentCriterionIds:l.filter(a=>!k(a.id)).map(a=>a.id),retention:{fixedWeight:o,retainedWeight:p,conservativeWeightRatio:o?p/o:null,evidencePolicy:"confirmed-applicable-criterion-unit-evidence-v1",currentUnits:s,retainedUnits:t,contentChars:q,retainedContentChars:r,charRatio:q?r/q:null},rework:b.rework,generationTokens:{totalTokens:u?null:v,repairTokens:u?null:w,repairRatio:!u&&v?w/v:null,missingUsageCalls:u,purposePolicy:"首候选后的写作调用及明确轻修保守计入chapter-repair;资料理解、规划和纯审查单独报告"},calibration:"initial-unvalidated",expertValidated:!1}}},7942:(a,b,c)=>{c.d(b,{Fr:()=>k,HM:()=>l,Hf:()=>n,tv:()=>m,wE:()=>o,yW:()=>p});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598);let i=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u,j=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function k(a,b){return b?`run:${b}:${a}`:a}function l(a,b,c){if(!j.test(b))throw Error("非法运行资产文件名");if(void 0!==c&&!i.test(c))throw Error("非法运行 ID");return c?g().join(a,"runs",c,"artifacts",b):g().join(a,"assets",b)}function m(a,b,c,d){let f=l(a,b,d),i=JSON.stringify(c);if(void 0===i)throw Error("运行资产不能是 undefined");e().mkdirSync(g().dirname(f),{recursive:!0});let j=`${f}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(j,i,{encoding:"utf8",flag:"wx"});try{if(d)try{e().linkSync(j,f)}catch(a){if("EEXIST"!==a.code)throw a;if(e().readFileSync(f,"utf8")!==i)throw Error(`运行资产已存在且内容不同:${d}/${b}`,{cause:a})}else e().renameSync(j,f)}finally{e().rmSync(j,{force:!0})}return{assetPath:f,bytes:Buffer.byteLength(i),sha256:(0,h.createHash)("sha256").update(i).digest("hex")}}function n(a){if(!a.runId)throw Error("实时模型进度必须绑定当前运行 ID");let b=l(a.generatedDir,"llm-live-progress.json",a.runId),c=JSON.stringify({...a.snapshot,version:1,runId:a.runId,documentId:a.documentId});e().mkdirSync(g().dirname(b),{recursive:!0});let d=`${b}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(d,c,{encoding:"utf8",flag:"wx"});try{e().renameSync(d,b)}finally{e().rmSync(d,{force:!0})}}function o(a,b){return b?[["run-start","run-start.json","本轮启动身份"],["run-inputs","run-inputs.json","本轮已准备输入快照"],["project-model","project-model.json","本轮写作与终检共用的项目事实快照"],["tender-requirements","tender-requirements.json","本轮原始招标条款、技术职责拆分、商务归宿及未裁决台账"],["document-contract","document-contract.json","本轮写作前冻结的职责、义务与七维评价合同"],["contract-ownership-plan","contract-ownership-plan.json","主控逐项确认事实、表格与交付义务的唯一主要责任小节"],["content-type-plan","content-type-plan.json","本轮主控对各节具体内容职责与适用类型的确认回执"],["contract-quality","contract-quality.json","本轮固定合同、项目快照和正文版本的七维评价回执"],["writing-task-hierarchy","writing-task-hierarchy.json","锁定交付小节与专业作者子任务之间的固定层级"],["chapter-writing-structures","chapter-writing-structures.json","本轮作者任务开始前的固定结构和内容职责"],["author-task-executions","author-task-executions.json","实际作者实例、委派任务、完整输入身份、执行终态与共用章节预算"],["author-accounting-final","author-accounting-final.json","同一合同跨续跑累计的调用、token、成本与章节预算消耗"],["author-candidates","author-candidates.json","本轮工具执行、自检、清理及重试前的原始模型返回索引"],["document-token-anomaly","document-token-anomaly.json","本轮无有效进展的重复模型消费与整份暂停回执;缺usage和供应商结算保持未知"],["document-model-final","document-model-final.json","本轮统一文档模型的最终版本与全部累计修改记录"],["contract-quality-c0","contract-quality-c0.json","固定首稿的完整七维评价,后续修改不能覆盖"],["contract-light-repair","contract-light-repair.json","统一预算内轻修的预检、提交结果与首稿通过读数"],["document-model-author","document-model-author.json","本轮固定任务的结构化作者模型、初始候选与累计修改账"],["blueprint","blueprint.json","本轮写作蓝图"],["requirement-assignments","requirement-assignments.json","本轮要求责任分配"],["structure-assignments","structure-assignments.json","本轮呈现要求分配"],["before-global-review","before-global-review.json","全文审查前章节快照(含章内重试,不等于原始首稿)"],["before-finalize","before-finalize.json","收口前章节快照"],["final-document","final-document.json","本轮最终内容快照"],["run-summary","run-summary.json","本轮阶段墙钟、调用用途与历史评分读数"]].flatMap(([c,d,f])=>{let g=l(a,d,b);if(!e().existsSync(g))return[];let i=(0,h.createHash)("sha256").update(e().readFileSync(g)).digest("hex");return[{id:k(c,b),artifactKind:c,type:"file",role:"attachment",path:g,sha256:i,runId:b,status:"generated",message:f}]}):[]}function p(a){if(!a.runId)return;let b=a.chapters.map(a=>({id:a.id,title:a.title,content:a.content,contentHash:(0,h.createHash)("sha256").update(a.content).digest("hex")}));m(a.generatedDir,`${a.stage}.json`,{version:1,runId:a.runId,documentId:a.documentId??null,stage:a.stage,capturedAt:Date.now(),chapters:b,...void 0!==a.markdown?{markdown:a.markdown}:{},rawFirstCandidate:!1},a.runId)}},8014:(a,b,c)=>{c.d(b,{QE:()=>i,cq:()=>h,qd:()=>j,uP:()=>k});var d=c(77598),e=c(17529);let f=a=>(0,d.createHash)("sha256").update(a).digest("hex");function g(a){if((0,e.ky)(a),!Number.isSafeInteger(a.index)||a.index<0||a.parentFingerprint!==f(a.text)||!a.file||!a.sourceSpans?.length||!a.sourceSpansSha256||![a.sourceIdentity?.sourceSha256,a.sourceIdentity?.parsedSha256,a.contextFingerprint].every(a=>"string"==typeof a&&/^[a-f0-9]{64}$/u.test(a)))throw Error("发现证据缺少当前完整母本/原始跨度/来源身份");let b=a.sourceGroup?.members??[{text:a.text,start:0,end:a.text.length,sourceSpans:a.sourceSpans,sourceOrdinal:void 0}],c=0,d=b.map((d,e)=>{let g=d.start,h=b[e+1]?.start??a.text.length;if(a.text.slice(g,d.end)!==d.text||!d.sourceSpans.length||h<d.end||a.text.slice(d.end,h).replace(/\s/gu,""))throw Error("发现证据成员/分隔不属于当前完整原母位置");let i=d.sourceSpans.map(a=>({sourceSpanOrdinal:c++,...void 0===d.sourceOrdinal?{}:{sourceOrdinal:d.sourceOrdinal},file:a.file,...void 0===a.chunkIndex?{}:{chunkIndex:a.chunkIndex},chunkSha256:a.chunkSha256,start:a.start,end:a.end,rawTextSha256:f(a.rawText)})),j=a.text.slice(g,h),k={version:"tender-discovery-source-evidence-v3",index:a.index,parentFingerprint:a.parentFingerprint,file:a.file,sourceIdentity:a.sourceIdentity,contextFingerprint:a.contextFingerprint,sourceSpansSha256:a.sourceSpansSha256,groupFingerprint:a.sourceGroup?.fingerprint,evidenceIndex:e,start:g,end:h,physicalSpans:i};return{evidenceId:`E${a.index}.${e}@${f(JSON.stringify(k)).slice(0,24)}`,evidenceIndex:e,start:g,end:h,quote:j,quoteSha256:f(j),physicalSpans:i}});if(!d.length||0!==d[0].start||d.at(-1).end!==a.text.length||d.map(a=>a.quote).join("")!==a.text)throw Error("发现证据显示未完整覆盖原母,不能裁剪正文");return d}function h(a,b){if(!Array.isArray(b)||!b.length||b.some(a=>"string"!=typeof a||!a)||new Set(b).size!==b.length)throw Error("发现候选必须选择显式唯一当前 evidenceIds,不能复制引文或按位置猜测");let c=new Map(g(a).map(a=>[a.evidenceId,a]));return b.map(a=>{let b=c.get(a);if(!b)throw Error(`发现 evidenceId 不属于当前原母/成员/跨度:${a}`);return b}).sort((a,b)=>a.start-b.start)}function i(a){return{sourceId:`S${a.index}`,section:a.section,clauseNo:a.clauseNo,originalSource:g(a).map(b=>({evidenceRef:`S${a.index}/M${b.evidenceIndex}`,text:b.quote,...b.physicalSpans[0]?.sourceOrdinal===void 0?{}:{memberOrdinal:b.physicalSpans[0].sourceOrdinal}}))}}function j(a,b){let c=new Map(g(a).map(b=>[`S${a.index}/M${b.evidenceIndex}`,b]));if(!Array.isArray(b)||!b.length||b.some(a=>"string"!=typeof a)||new Set(b).size!==b.length)throw Error("发现候选必须选择当前明确提供的唯一evidenceRefs");return b.map(a=>{let b=c.get(a);if(!b)throw Error(`发现evidenceRef不属于当前原母显式成员:${a}`);return b}).sort((a,b)=>a.start-b.start)}function k(a){let b=new Map;for(let c of a)for(let a of g(c)){let d=`S${c.index}/M${a.evidenceIndex}`;if(b.has(d))throw Error("当前批次原文引用身份重复");b.set(d,{unit:c,quote:a})}return a=>{if(!Array.isArray(a)||!a.length||a.some(a=>"string"!=typeof a)||new Set(a).size!==a.length)throw Error("候选必须选择当前明确提供的唯一evidenceRefs");let c=a.map(a=>{let c=b.get(a);if(!c)throw Error(`evidenceRef不属于当前批次真实原文:${a}`);return c}),d=c[0].unit;if(c.some(a=>a.unit!==d))throw Error("一个候选不能混用不同母本引用;按实际独立职责分开提交");return{unit:d,quotes:c.map(a=>a.quote).sort((a,b)=>a.start-b.start)}}}},10025:(a,b,c)=>{function d(a){let b=String(a||"").trim();return b?/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u.test(b)?"date":/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:万元|元)\s*\//u.test(b)?"money":/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC|JTG|SL|DL|YB|HG)\s*\/?\s*T?\s*[\d.]+/iu.test(b)?"standard":/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u.test(b)?"spec":/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|株|棵|处|项|日历天|天|层|樘|扇|片|组|件|孔|盏)/u.test(b)?"measure":"text":"text"}c.d(b,{Oq:()=>j,Su:()=>r,UD:()=>i,dm:()=>d,f2:()=>k,yJ:()=>e});let e="变更修改为|变更为|变更至|澄清为|澄清修改为|修改为|调整为|调整至|更正为|修正为|现为|现改为|更改为",f=/[。;;\n]/u,g=RegExp("\\d{4}\\s*年\\s*\\d{1,2}\\s*月\\s*\\d{1,2}\\s*日|\\d+(?:\\.\\d+)?\\s*(?:万元|亿元|日历天|个?月|天|m2|m3|m\xb2|m\xb3|㎡|mm|cm|km|m|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|kV|MPa|kPa|kW|W|A|V|%)|(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\\s*/?\\s*T?\\s*[\\d.]+(?:-\\d{2,4})?","giu"),h=/(?:第\s*)?(\d{1,2}(?:\.\d{1,2}){1,3})\s*(?:条|项|款)?/u;function i(a){let b=RegExp(`(${e})\\s*[::]?\\s*(${g.source}|[\\u4e00-\\u9fa5]{2,12})`,"u"),c=RegExp(g.source,"gu"),i=RegExp(`([\\u4e00-\\u9fa5]{2,8})\\s*[::]\\s*(${g.source})`,"gu"),j=[],k=new Set,l=a=>{let b=`${a.superseded}\u0000${a.effective}`;a.superseded===a.effective||k.has(b)||(k.add(b),j.push(a))},m=/变更|澄清|补疑|补遗|调整为|修改为|更正/;for(let g of a){let a=String(g.text||"");if(a&&m.test(a))for(let j of a.split(f)){let a=j.replace(/\s+/gu,"");if(a.length<4)continue;let f=function(a){let b=[],c=h.exec(a)?.[1];c&&b.push(c);let d=a.match(/[一-龥]{2,8}(?=[::))]?(?:为|是|按|采用|统一|变更|澄清|调整))/gu);for(let c of(d&&b.push(...d.slice(0,3)),a.matchAll(/([一-龥]{2,12})\s*[::]\s*(?=\d)/gu)))b.push(c[1].replace(/^(?:原|现|本工程|本项目)/u,""));return/计划工期|合同工期|总工期/u.test(a)&&b.push("计划工期"),[...new Set(b)]}(a),k=b.exec(a);if(k){let b=k[2].trim();if(!/\d/u.test(b)||RegExp(e,"u").test(b))continue;let h=d(b);for(let e of[...a.slice(0,k.index).matchAll(c)].map(a=>a[0].trim()))e!==b&&d(e)===h&&l({superseded:e,effective:b,scope:f,evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"});continue}let m=[...a.matchAll(i)];if(m.length>=2){let b=new Map;for(let a of m){let c=b.get(a[1])||[];c.push(a[2].trim()),b.set(a[1],c)}for(let[c,d]of b){let b=[...new Set(d)];b.length<2||l({superseded:b[0],effective:b[b.length-1],scope:[...new Set([...f,c])],evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"})}}}}return j}function j(a){let b=new Map;for(let c of a){let a=`${c.superseded}\u0000${c.scope.join("|")}`,d=b.get(a);if(!d){b.set(a,c);continue}let e=(d.effective===c.superseded,{...c,superseded:d.superseded,evidence:[...d.evidence,...c.evidence],scope:[...new Set([...d.scope,...c.scope])]});b.set(a,e)}return[...b.values()]}function k(a,b){if(!b||0===b.length)return 0;let c=0;for(let d of a){let a=function(a,b){let c=String(a||""),d=[];for(let a of b)"override"===a.kind&&a.superseded&&c.includes(a.superseded)&&(c=c.replace(RegExp(a.superseded.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),(b,e)=>{if(e>0&&/[\d.,]/u.test(c[e-1]))return b;let f=Math.max(c.lastIndexOf("。",e-1),c.lastIndexOf(";",e-1),c.lastIndexOf(";",e-1),c.lastIndexOf("\n",e-1))+1,g=c.slice(f,e);if(!function(a,b){if(!a.length)return!1;if(a.some(a=>/计划工期|合同工期|总工期|^工期$/u.test(a))){let a=[...b.matchAll(/(?:计划|合同|总)?工期|周期|期限|节点|阶段|地下|租赁|养护/gu)].at(-1)?.[0];return!!(a&&/^(?:计划|合同|总)?工期$/u.test(a))}return a.some(a=>{let c=a.replace(/^(?:原|现|本工程|本项目)/u,"");return c.length>=2&&b.includes(c)})}(a.scope,g))return b;let h=c.slice(Math.max(f,e-12),e+b.length+12);return/原(?:为|值|内容|计划|合同|招标)|此前|由[^,。;]{0,12}(?:变更|调整)|变更过程/u.test(h)?b:(d.push({from:b,to:a.effective}),a.effective)}));return{text:c,applied:d}}(String(d.content??""),b);0!==a.applied.length&&(d.content=a.text,c+=1)}return c}let l=[{attribute:"合同金额",re:/(?:最高投标限价|招标控制价|合同估算价(?:格)?|工程估算价|投标限价)(?<gap>[^。;\n]{0,16}?)(?:现)?(?:调整)?为?\s*[::]?\s*(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u},{attribute:"计划工期",re:/(?:计划工期|合同工期|总工期)(?<gap>[^。;\n]{0,16}?)(?<num>[\d,]+(?:\.\d+)?)\s*个?\s*日历天/u},{attribute:"暂列金额",re:/(?:暂列金额|暂列金)(?<gap>[^。;\n\d]{0,12}?)(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u},{attribute:"抗震设防烈度",re:/抗震设防烈度[::\s为是]*(?<num>[6-9]\s*度)(?!\s*(?:及|以上|以下|至))/u},{attribute:"地震加速度",re:/(?:设计基本)?地震加速度[::\s为是]*(?<num>\d(?:\.\d+)?\s*g(?![a-z]))/u},{attribute:"场地类别",re:/场地类别[^。;\n]{0,32}?(?<num>(?:[ⅠⅡⅢⅣ]+|[IV]{1,3})\s*类)/u},{attribute:"地基基础设计等级",re:/地基基础设计等级[::\s为是]*(?<num>[甲乙丙]\s*级)/u},{attribute:"抗震设防类别",re:/(?:建筑)?抗震设防类别[::\s为是]*(?<num>[甲乙丙丁]\s*类)(?!型)/u}],m=RegExp(`(?:${e})\\s*[::]?\\s*(\\d{1,4})\\s*个?\\s*日历天`,"u"),n=/(?:计划工期|合同工期|总工期|工期)/u,o=/(?:暂列|暂估|分部分项|单项工程|单位工程|措施项目|其他项目|规费|税金|人工费|材料费|机械费|管理费|利润|单价|合价)/u,p=/现澄清为|现变更为|澄清为如下|澄清修改为|变更修改为|现调整为|全部作废|以本次[^。;\n]{0,10}为准|以澄清[^。;\n]{0,6}为准/u,q=/^\s*(?:\d{1,2}\s*[、..]|问\s*[::])/u;function r(a){let b=[],c=/作废|以本次(?:招标)?答疑附件(?:中材料)?为准|以澄清(?:文件)?为准/u;for(let d of a){let a=String(d.text||"");if(!a)continue;let f=/(?<label>(?:计划|实际|拟定)?开工(?:日期|时间))(?<gap>[^。;;]{0,32}?)(?<num>20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/gu;for(let c of a.matchAll(f)){let f=c.groups.gap,g=c.groups.num.replace(/\s+/gu,""),h=/^(\d{4})年(\d{1,2})月(\d{1,2})日$/u.exec(g),i=`${Number(h[1])}年${Number(h[2])}月${Number(h[3])}日`,j=new Date(Date.UTC(Number(h[1]),Number(h[2])-1,Number(h[3])));if(j.getUTCFullYear()!==Number(h[1])||j.getUTCMonth()!==Number(h[2])-1||j.getUTCDate()!==Number(h[3]))continue;let k=Math.max(a.lastIndexOf("。",c.index),a.lastIndexOf(";",c.index),a.lastIndexOf(";",c.index))+1,l=a.slice(c.index+c[0].length).search(/[。;;]/u),m=l<0?a.length:c.index+c[0].length+l+1,n=a.slice(k,m),o=a.slice(Math.max(k,c.index-32),c.index);if(/未(?:确定|明确)|不(?:是|采用|作为)|不得|取消|作废|开标|发布|支付|签订/u.test(f)||/(?:不采用|不是|不得采用|已取消)\s*$/u.test(o))continue;let q=c.groups.label,r=/[((]([^()()]*?开工(?:通知|令)[^()()]*?)[))]/u.exec(n)?.[1]??/((?:具体|实际)开工(?:日期|时间)[^。;;]{0,80}?以[^。;;]{0,80}?开工(?:通知|令)[^。;;]{0,20}?为准)/u.exec(n)?.[1],s=/([\d一二三四五六七八九十A-Za-z]+(?:号楼|#楼|标段|工区|栋))\s*$/u.exec(o)?.[1]??"项目主体",t=o.split(/[,,。;;]|\n\s*\n/u).at(-1),u=/(?:见|详见|参见)[^,,。;;]{0,24}$/u.test(t)?"reference":/原(?:招标文件|招标公告|合同|内容)?\s*$/u.test(t)?"superseded":"current",v=a.slice(k,c.index+c[0].length-c.groups.num.length);b.push({attribute:"开工日期",value:i,source:d.source,supersedesPriorMaterials:!1,clarified:"current"===u&&(RegExp(e,"u").test(f)||p.test(v)),openingDate:{kind:/实际/u.test(q)?"actual":/计划|拟定/u.test(q)||r?"planned":"unspecified",role:u,objectName:s,...r?{condition:r}:{},quote:n,sourceStartChar:k,sourceEndChar:m,dateStartChar:c.index+c[0].length-c.groups.num.length,dateEndChar:c.index+c[0].length}})}let g=!1;for(let f of a.split(/\n\s*\n/u))for(let a of(q.test(f)&&/[??]/u.test(f)&&(g=!1),p.test(f)&&(g=!0),f.split(/[。;;\n]/u))){let f;if(a.length<6)continue;let h=c.test(a),i=g||p.test(a),j=n.test(a)?m.exec(a)?.[1]:void 0;j&&b.push({attribute:"计划工期",value:`${j}日历天`,source:d.source,supersedesPriorMaterials:h,clarified:i});let k=a.search(/(?:暂列金额|暂列金)/u),q=k>=0?RegExp(`(?:${e})\\s*[::]?\\s*(\\d+(?:\\.\\d+)?)\\s*(亿元|万元|元)`,"gu"):void 0;if(q){for(let b of a.matchAll(q))if((b.index??0)>k){f=b;break}}for(let c of(f&&b.push({attribute:"暂列金额",value:`${f[1]}${f[2]||""}`,source:d.source,supersedesPriorMaterials:h,clarified:i}),l)){if("计划工期"===c.attribute&&j||"暂列金额"===c.attribute&&f)continue;let e=c.re.exec(a);if(!e?.groups)continue;let g=e.groups.num?.replace(/,/gu,"")||"";if(!g||o.test(e.groups.gap||""))continue;let k="合同金额"===c.attribute||"暂列金额"===c.attribute?`${g}${e.groups.unit||""}`:"计划工期"===c.attribute?`${g}日历天`:g.trim();b.push({attribute:c.attribute,value:k,source:d.source,supersedesPriorMaterials:h,clarified:i})}}}return b}},10501:(a,b,c)=>{c.d(b,{j:()=>m});var d=c(89247),e=c(14409),f=c(11248),g=c(28068),h=c(31037),i=c(92050),j=c(91898),k=c(57656),l=c(13518);function m(a,b){let c=b.attribute.trim(),m=e.nC.find(a=>a.key===c||a.label===c||a.aliases.includes(c)),n=[...a.facts,...a.sourceControls??[]].filter(a=>(m?(0,e.nD)(a)?.key===m.key:a.fieldId===c||a.fieldName===c||a.key===c)&&(!b.valueDomain||(0,d.IL)(a.value)===b.valueDomain)),o=m&&e.zT.has(m.key),p=n.filter(a=>!b.objectName||a.objectName===b.objectName||o&&"项目主体"===b.objectName&&!a.objectName),q=n.filter(a=>!a.objectName&&!o),r=new Map(p.filter(b=>Object.hasOwn(a.sources,b.resolutionRef?.winnerSourceFile??b.sourceFile)).map(b=>[b,(0,l.Q)(a,b)])),s=p.filter(b=>Object.hasOwn(a.sources,b.sourceFile)&&(0,g.j)(b)&&(!b.resolutionRef||!!(b.resolutionRef.winnerSourceFile&&Object.hasOwn(a.sources,b.resolutionRef.winnerSourceFile)))&&r.get(b)?.status==="eligible"),t=new Set(s.map(a=>(0,f.K3)(a.value))),u=new Set(s.map(a=>a.objectName).filter(Boolean)),v=s.filter(a=>a.controlContext),w=new Map;for(let a of v){let b=a.controlContext,c=JSON.stringify([b.objectName,b.attribute,b.condition,b.baseline,b.relation]),d=w.get(c)??new Set;d.add((0,f.K3)(a.value)),w.set(c,d)}let x=[...w.values()].some(a=>a.size>1),y=p.length&&p.every(a=>"technical_parameter"===a.fieldId),z=y&&p.some(b=>r.get(b)?.status==="eligible"&&(0,h.P)(a,b)),A=n.length?p.some(a=>r.get(a)?.status==="unresolved")?"needs-source-version-decision":s.some(a=>(0,j.p)(a).requiresTechnicalDecision)?"needs-technical-decision":!q.length||b.objectName&&p.length?s.length?x?"ambiguous":v.length===s.length&&(w.size>1||v.some(a=>"exact"!==a.controlContext.relation))?"conditioned":y&&v.length!==s.length?"needs-context-interpretation":t.size>1||!b.objectName&&u.size>1?"ambiguous":"resolved":z?"needs-context-interpretation":"unmeasured":"unbound":"unmeasured",B=[];for(let b of p){let c=b.resolutionRef?.winnerSourceFile??b.sourceFile,f=b.resolutionRef?b.resolutionRef.winnerSourceRef??null:b.sourceRef??null,g={factId:(0,e.vg)(b),...(0,i.mk)(a,(0,e.vg)(b),(0,h.P)(a,b)),objectName:b.objectName??(o?"项目主体":null),attribute:b.fieldId||b.fieldName||b.key,value:b.value,valueDomain:(0,d.IL)(b.value),technicalMeaning:(0,j.p)(b),sourceFile:c,sourceFingerprint:a.sources[c]?.sha256??null,sourceVersionEligibility:r.get(b)??{status:"unmeasured",decisionIds:[],reason:"没有对应当前冻结解析来源身份"},sourceSemantics:b.sourceSemantics??(0,k.Q)(f?.roleId??b.roleId,f?.processingType??b.processingType),sourceRef:f,sourceEvidenceId:(0,h.P)(a,b),resolutionRef:b.resolutionRef??null,derivation:b.derivation??null,temporalConstraint:b.temporalConstraint??null,confidence:b.confidence};B.push({...g,controlContext:b.controlContext??null})}let C=new Set(p.map(b=>(0,h.P)(a,b)).filter(Boolean)),D=(a.sourceControls??[]).filter(a=>C.has((0,e.vg)(a))).map(b=>({sourceEvidenceId:(0,e.vg)(b),...(0,i.mk)(a,void 0,(0,e.vg)(b)),sourceFile:b.sourceFile,chunkIndex:b.sourceRef?.chunkIndex,value:b.value}));return{snapshotId:a.snapshotId,attribute:c,objectName:b.objectName??null,status:A,value:"resolved"===A?s[0].value:null,candidates:B,totalCandidates:p.length,complete:!0,statusScope:"all-matching-facts",unboundCandidates:b.objectName?q.map(a=>(0,e.vg)(a)):[],unboundTotal:q.length,sourceEvidence:D,diagnosis:{phase:n.length?p.length?"needs-source-version-decision"===A?"source-use":"unbound"===A?"object-binding":"needs-technical-decision"===A||"needs-context-interpretation"===A||"conditioned"===A?"control-context":"ambiguous"===A?"value-resolution":s.length?"resolved":"fact-admission":"object-binding":"attribute-extraction",matchingAttributeRecords:n.length,matchingObjectRecords:p.length,qualifiedRecords:s.length,sourceCorpusSearched:!1,provesMissingSource:!1,nextAction:n.length?p.length?"needs-context-interpretation"===A?"完整原文已返回;解释实际对象、属性和条件,不将裸数字多值当作冲突":"conditioned"===A?"按每条完整工况与控制性质分别使用,不压成全项目单值":"resolved"===A?"使用已提供事实及出处,不重复查询同一属性":"核对候选的具体来源、条件或准入原因,未决不表示原文缺料":q.length?"属性候选尚未关联指定对象;按已有原文上下文解释,不要求用户逐项核定":"已有其他对象的属性记录,指定对象未命中;核对具体对象及别名,不能说原文没有数据":"属性库未命中;按本任务具体问题检索冻结原文,不能凭属性零命中认定原文缺料"}}}},10806:(a,b,c)=>{c.d(b,{b:()=>f});var d=c(14409),e=c(28068);function f(a){let{contract:b,section:c,project:f}=a;if(b.projectSnapshotId!==f.snapshotId||!b.sections.some(a=>a.id===c.id&&a.chapterId===c.chapterId))throw Error("作者任务准入不属于当前固定合同和项目快照");let g=b.criteria.filter(a=>a.applicable&&a.admission?.status==="unmeasured"&&(a.sectionId===c.id||!a.sectionId&&a.chapterId===c.chapterId)).map(a=>({...a.admission,reason:a.description,criterionIds:[a.id],factIds:[...a.factIds??[]]}));for(let a of b.criteria.filter(a=>a.applicable&&a.sectionId===c.id))for(let b of a.factIds??[]){let c=[...f.facts,...f.sourceControls??[]].find(a=>(0,d.vg)(a)===b);!(c&&(0,e.j)(c)&&Object.hasOwn(f.sources,c.sourceFile)&&(!c.resolutionRef||c.resolutionRef.winnerSourceFile&&Object.hasOwn(f.sources,c.resolutionRef.winnerSourceFile)))&&(g.some(c=>c.criterionIds.includes(a.id)&&c.factIds.includes(b))||g.push({status:"unmeasured",code:c?.temporalConstraint?.status==="unmeasured"?"unmeasured-temporal-control":"unmeasured-required-fact",effect:a.admission?.effect??"candidate-review",reason:c?.temporalConstraint?.status==="unmeasured"?"本任务引用的开工事件日期或条件尚未核定,不能用于时间断言":"本任务必用事实尚无可直接使用的已确认值",criterionIds:[a.id],factIds:[b]}))}return a.sharedTask&&"planned"!==a.sharedTask.status&&g.push({status:"unmeasured",code:"shared-task-plan-pending",effect:"candidate-review",reason:a.sharedTask.reason??"本任务组织安排尚未确认;可提交有证据的正文候选,实际方法与条件仍须取证",criterionIds:[],factIds:[]}),{contractId:b.id,taskId:c.id,status:g.some(a=>"task-block"===a.effect)?"blocked":g.length?"candidate-review":"ready",issues:g}}},11189:(a,b,c)=>{c.d(b,{X4:()=>j,Yn:()=>i});var d=c(77598),e=c(22496),f=c(26927);function g(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function h(a,b,c=!1){let d=new Map;for(let b of a.entries){if(!b.section)continue;let a=c?JSON.stringify([b.sourceFile,b.villageGroup,b.section]):b.section,e=d.get(a)||[];e.push(b),d.set(a,e)}let e=[],f=0;for(let a of d.values()){let c=g(a[0].section,a),d=a.some(a=>"unit-project"===a.sectionKind),h=[];if(d){let b=new Map;for(let d of a){let a=d.subsection||c,e=b.get(a)||[];e.push(d),b.set(a,e)}for(let[a,c]of b)h.push(k(g(a,c),c))}else h.push(k(c,a));f+=1,e.push({id:`${b}.${f}`,title:c,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),tablePlans:[],workPackages:h})}return e}function i(a){let{chapterTitles:b,boq:c}=a,d=b.map((b,d)=>{var e;let f=String(d+1),g=/主要分部分项|施工方案|施工方法/u.test(b)?h(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],subSections:g}}),e=h(c,"project",!0).flatMap(a=>a.workPackages),f=c.entries.filter(a=>!a.section);return f.length&&e.push(k("未分部清单记录",f)),{chapters:d,projectWorkPackages:e}}function j(a){return(0,d.createHash)("sha256").update(JSON.stringify([a.sourceFile,a.villageGroup,a.section,a.subsection,a.seq,a.code,a.name,a.description,a.unit,a.quantity,a.chunkIndex])).digest("hex")}function k(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},g=new Map;for(let a of c){if(!a.name)continue;let b=g.get(a.name)??new Map;b.set(a.unit,(b.get(a.unit)??0)+a.quantity),g.set(a.name,b)}for(let[a,b]of g)for(let[c,e]of b)d[b.size>1?`${a}(${c||"未注明单位"})`:a]={value:Math.round(1e3*e)/1e3,unit:c};let h=[...new Set(c.map(a=>a.name).filter(Boolean))],i=(0,f.lh)(c),k=[],l=new Set;for(let a of c){for(let b of(0,f.QU)(a.description)){let a=`${b.key}=${b.value}`;if(!l.has(a)&&(l.add(a),k.push({key:b.key,value:b.value,source:"boq"}),k.length>=24))break}if(k.length>=24)break}let m=[];for(let a of c)for(let b of(0,f.QU)(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&m.length<12&&!m.includes(b.value)&&m.push(b.value);let n=(0,e.cn)(c.map(a=>a.name)),o=[];for(let a of(0===m.length&&n.length>0&&m.push(...n[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),n.slice(0,2)))for(let b of a.standards)o.includes(b)||o.push(b);return{name:a,kind:"major",quantities:d,objectNames:h,methods:i,params:k,acceptance:m,standards:o,source:"boq",coveredSeqs:c.map(a=>a.seq),members:c.map(a=>({id:j(a),entry:{...a}}))}}},11248:(a,b,c)=>{c.d(b,{Hr:()=>l,K3:()=>m,PQ:()=>q,dP:()=>s,iw:()=>o,tR:()=>r});var d=c(7148);let e=/[A-Za-z0-9%+-.,]/gu,f="[+−-]?\\d+(?:\\.\\d+)?",g="(?:毫米|厘米|米|mm|cm|m)",h=`${f}\\s*(?:${g})?`,i=`(?:${h}\\s*[\xd7xX**]\\s*)+${f}\\s*(?:${g}|\\(${g}\\)|(${g}))`,j=RegExp(`(?<![A-Za-z\\d])(?:${i})(?![A-Za-z\\d])|(?<![A-Za-z\\d])[+−-]?\\d+(?:\\.\\d+)?\\s*(?:\xb0\\s*C|${d.RD})(?![A-Za-z])|(?<![A-Za-z\\d])(?:C[1-9]\\d{1,2}|(?:HRB|HRBF|HPB)\\d{3}[E]?|Q\\d{3}[A-E]?|P\\d{1,2}|M\\d{1,3}(?:\\.\\d+)?|LOD\\s*\\d+(?:\\.\\d+)?|DN\\d+|[Φφ∅⌀\xd8\xf8]\\s*\\d+(?:\\.\\d+)?)(?![A-Za-z\\d])`,"giu");function k(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function l(a){return a.replace(e,k).replace(/−/gu,"-").replace(/\s+/gu,"").replace(/(?<=\d)[~~](?=[+-]?\d)/gu,"~").replace(/[—–‑﹣]/gu,"-").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/毫升/gu,"ml").replace(/升/gu,"l").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/°\s*C/giu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"")}function m(a){return l(a).toLowerCase()}function n(a){let b=/^([+-]?\d+)(?:\.(\d+))?$/u.exec(a);if(!b)return a;let c=(b[2]??"").replace(/0+$/u,"");return`${b[1]}${c?`.${c}`:""}`}function o(a){let b=p(a);if(void 0!==b)return b;let c=m(a),d=/^([+-]?\d+(?:\.\d+)?)(.*)$/u.exec(c);return d?`${n(d[1])}${d[2]}`:c}function p(a){let b=a.replace(e,k).replace(/−/gu,"-").trim();if(!RegExp(`^(?:${i})$`,"iu").test(b))return;let c=b.split(/[×xX**]/u).map(a=>m(a)).map(a=>/^([+-]?\d+(?:\.\d+)?)(mm|cm|m)?$/u.exec(a));if(c.some(a=>!a))return;let d=c.at(-1)[2];if(!d)return;let f=c.map(a=>a[2]??d),g=c.map(a=>n(a[1]));return f.every(a=>a===d)?`${g.join("x")}${d}`:g.map((a,b)=>`${a}${f[b]}`).join("x")}function q(a){return[...a.replace(e,k).replace(/−/gu,"-").matchAll(j)].map(b=>{let c=a.slice(b.index,b.index+b[0].length);return{index:b.index,raw:c,value:p(c)??m(c).replace(/^[Φφ∅⌀Øø]/u,"φ")}})}function r(a){return a.replace(e,k).replace(j,a=>p(a)??m(a)).replace(/(?<=\d)[~~](?=[+-]?\d)/gu,"~").replace(/\s+/gu,"")}function s(a,b){let c=r(b);if(!c)return!1;let d=r(a);for(let a=d.indexOf(c);a>=0;a=d.indexOf(c,a+1))if(!(/^[+-]?\d/u.test(c)&&/[\d.+-]/u.test(d[a-1]??""))&&!(/[A-Za-z\d]$/u.test(c)&&/[A-Za-z\d]/u.test(d[a+c.length]??"")))return!0;return!1}},11685:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(77598);let e=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex")},12152:(a,b,c)=>{function d(a){let b=e()?.semanticFingerprints?.[a];return"string"==typeof b&&/^[a-f0-9]{64}$/u.test(b)?b:void 0}function e(){let a='{"version":1,"sourceFingerprint":"a37c9c6ce368356c977720f5c8b1810bc2e669bf253e8daec52de1112826aa65","semanticFingerprints":{"projectFacts":"6603ba520b089d5952f59ff1964fcae21e8e643b0a2b053cc2f0e51c5b412eb2","documentGeneration":"804cfa9612ef170d0748517d852349051cefd2072e75cd0fbd324f7fe6296151"},"gitCommit":"2d2dcba4158d91c947ddcd4bbc5440c08561c92d","serverVersion":"4.60.16","sourceFiles":739,"capturedAt":"2026-10-13T17:27:50.973Z"}';if(a)try{let b=JSON.parse(a);if(1!==b.version||!/^[a-f0-9]{64}$/u.test(b.sourceFingerprint??"")||"string"!=typeof b.serverVersion||"number"!=typeof b.sourceFiles||"string"!=typeof b.capturedAt||null!==b.gitCommit&&"string"!=typeof b.gitCommit)return;return b}catch{return}}c.d(b,{C:()=>d,S:()=>e})},12866:(a,b,c)=>{c.d(b,{t3:()=>N,Ix:()=>O,renderAuthorTableRecord:()=>Q,r2:()=>W,renderAuthorUnit:()=>R,validateAuthorTaskOutput:()=>V});var d=c(54233),e=c(71783),f=c(59758),g=c(77598),h=c(7148);let i=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须是对象`);return a},j=(a,b)=>{if(!Array.isArray(a))throw Error(`${b}必须是完整数组`);return a},k=(a,b,c)=>{if(Object.keys(a).some(a=>!b.includes(a)))throw Error(`${c}含协议外字段`)},l=["projectNumbers","normativeNumbers","derivedNumbers","plannedNumbers"],m=()=>({factBindings:[],sourceBindings:[],projectNumbers:[],normativeNumbers:[],derivedNumbers:[],plannedNumbers:[],productionNumbers:[],sectionReferences:[]});var n=c(35091),o=c(14409),p=c(91898),q=c(11248),r=c(92050),s=c(28068),t=c(58214),u=c(57349),v=c(56999),w=c(4456),x=c(10501),y=c(31037),z=c(94173),A=c(10806),B=c(13518);let C="author-task-output-v1-2026-10-06",D=(a,b)=>{if("string"!=typeof a||!a.trim())throw Error(`${b}必须是非空文本`);return a},E=(a,b)=>{if(!Array.isArray(a))throw Error(`${b}必须是完整数组`);return a},F=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须是对象`);return a},G=(a,b)=>{if(new Set(a).size!==a.length)throw Error(`${b}身份重复`)},H=(a,b,c)=>{let d=Object.keys(a).filter(a=>!b.includes(a));if(d.length)throw Error(`${c}包含协议外字段,不能丢弃内容后当完整提交:${d.join("、")}`)},I=(a,b)=>{let c=D(a,b);if(/\r|\n|```|^\s*#{1,3}\s/u.test(c))throw Error(`${b}不得夹带章节或多行正文`);return c},J=a=>a.replace(/\\/gu,"\\\\").replace(/\|/gu,"\\|").replace(/\r?\n/gu,"<br>"),K=a=>JSON.stringify(a.replace(/\r?\n/gu," ")),L=(a,b)=>{let c={...a};for(let a of b){let b=c[a];(null==b||"string"==typeof b&&!b.trim()||Array.isArray(b)&&!b.length)&&delete c[a]}return c};function M(a){let b=[],c=structuredClone(a),d=(a,c,d)=>{for(let e of Object.keys(a))c.includes(e)||(delete a[e],b.push(`${d}/${e} 非正文键已移除`))},e=(a,c)=>{if(!Array.isArray(a))return a;let e=[];return a.forEach((a,f)=>{if(!a||"object"!=typeof a||Array.isArray(a))return void e.push(a);if(Object.hasOwn(a,"sectionIndex")){if("string"==typeof a.text&&a.text.trim())throw Error('小节引用片段含协议外字段 text:引用片段的连接语须写在该片段前后,片段内只保留 {"sectionIndex":序号}');d(a,["sectionIndex"],`${c}/${f}`),e.push(a);return}if(1===Object.keys(a).length&&""===a.text)return void b.push(`${c}/${f} 空片段已移除`);d(a,v.kj,`${c}/${f}`),e.push(a)}),e},f=(a,b)=>(!a||"object"!=typeof a||Array.isArray(a)||(d(a,v.XU,b),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/parts`)),Array.isArray(a.columns)&&a.columns.forEach((a,c)=>{a&&"object"==typeof a&&!Array.isArray(a)&&d(a,v.$h,`${b}/columns/${c}`)}),Array.isArray(a.rows)&&a.rows.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,["id","cells",...v.fd],`${b}/rows/${c}`),Array.isArray(a.cells)&&a.cells.forEach((a,f)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,["parts",...v.fd],`${b}/rows/${c}/cells/${f}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/rows/${c}/cells/${f}/parts`)))}))}),Array.isArray(a.nodes)&&a.nodes.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,v.RP,`${b}/nodes/${c}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/nodes/${c}/parts`)))}),Array.isArray(a.edges)&&a.edges.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,v.Ib,`${b}/edges/${c}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/edges/${c}/parts`)))})),a);for(let a of["paragraphs","tables","figures"])Array.isArray(c[a])&&(c[a]=c[a].map((b,c)=>f(b,`${a}/${c}`)));if(d(c,v.Ue,""),b.length){let b=(0,v.IO)(a),d=(0,v.IO)(c);if(!b||!d||b.bodyHash!==d.bodyHash)throw Error("提交形状修正会改变正文内容,不能静默接收;请按 compact-v7 协议重新提交")}return{value:c,repairs:b}}function N(a){if(!a||"object"!=typeof a||Array.isArray(a)||!("compact-v7"===a.format||["paragraphs","tables","figures"].some(b=>Object.hasOwn(a,b))))return[];try{return M(a).repairs}catch{return[]}}function O(a,b){if(a&&"object"==typeof a&&!Array.isArray(a)){if("string"==typeof a.version&&"string"==typeof a.contractId&&"string"==typeof a.projectSnapshotId&&"string"==typeof a.taskId&&Array.isArray(a.units))return a;let c=a.format;if(Array.isArray(a.units))throw Error("作者提交含 units 旧形态:请以 compact-v7(paragraphs/tables/figures/decisionRequests)重新提交");if(void 0!==c&&"compact-v7"!==c)throw Error(`作者提交 format 无效(${String(c)}):请以 compact-v7 提交,或省略该字段`);if("compact-v7"===c||["paragraphs","tables","figures","decisionRequests","revisionReason"].some(b=>Object.hasOwn(a,b))){let{value:c}=M(a);return c.format="compact-v7",P(c,b)}}return P(a,b)}function P(a,b){if(!a||"object"!=typeof a||"compact-v7"!==a.format)return a;let c=F(a,"当前作者提交"),d=(0,u.XN)(b.contract),e=function(a,b={}){let c=i(a,"正文引用产物");k(c,["format","paragraphs","tables","figures","decisionRequests","revisionReason"],"正文引用产物");let d=(a,c,d=!0,e)=>{let f=m(),g=j(a,"正文片段");if(!g.length)throw Error("正文片段不能为空");let n=g.map((a,c)=>{let d=i(a,"正文片段"),e=c?i(g[c-1],"正文片段"):void 0,f=e&&Object.hasOwn(e,"sectionIndex")&&Object.hasOwn(d,"sectionIndex")?"、":"";return{part:d,text:(a=>{if(Object.hasOwn(a,"sectionIndex")){if(k(a,["sectionIndex"],"真实小节引用片段"),!Number.isSafeInteger(a.sectionIndex)||0>Number(a.sectionIndex)||!b.sections?.[Number(a.sectionIndex)])throw Error("小节引用序号不在当前冻结合同");return b.sections[Number(a.sectionIndex)].label}if("string"!=typeof a.text||!a.text.trim())throw Error("正文片段须保留非空实际原文");return a.text})(d),separator:f}}),o=n.map(a=>a.separator+a.text).join(""),p=0;return{text:n.map(({part:a,text:g,separator:m})=>{let n=(p+=m.length)+g.length;if(Object.hasOwn(a,"sectionIndex"))return f.sectionReferences.push({sectionId:b.sections[Number(a.sectionIndex)].sectionId,quote:g,textRange:{start:p,end:n},...void 0===c?{}:{columnKey:c},...e}),p=n,m+g;k(a,["text","factIndices","sourceIndices","productionNumberIndices",...l],"正文片段");let q=/(?:^|[^A-Za-z\d])[+−-]?\d+(?:\.\d+)?\s*$/u.test(g)?RegExp(`^\\s*(?:${h.RD})(?![A-Za-z0-9])`,"iu").exec(o.slice(n))?.[0]??"":"",r={quote:o.slice(p,n+q.length),...d?{textRange:{start:p,end:n+q.length}}:{},...void 0===c?{}:{columnKey:c}};if(p+=g.length,Object.hasOwn(a,"productionNumberIndices")){let b=j(a.productionNumberIndices,"本轮施工生产计划数值序号");if(new Set(b).size!==b.length||b.some(a=>!Number.isSafeInteger(a)||0>Number(a)))throw Error("施工生产计划数值序号重复或无效");for(let a of b)f.productionNumbers.push({index:a,...r})}for(let[b,c,d]of[["factIndices","factBindings","factIndex"],["sourceIndices","sourceBindings","sourceIndex"]]){if(!Object.hasOwn(a,b))continue;let e=j(a[b],"冻结引用序号");if(new Set(e).size!==e.length||e.some(a=>!Number.isSafeInteger(a)||0>Number(a)))throw Error("正文片段引用序号重复或无效");for(let a of e)f[c].push({[d]:a,...r})}let s={projectNumbers:["factIndex"],normativeNumbers:["factIndex","version","scope"],derivedNumbers:["formula","inputFactIndices","basis"],plannedNumbers:["basis","constraints"]};for(let b of l)if(Object.hasOwn(a,b))for(let c of j(a[b],b)){let a=i(c,b);k(a,s[b],b),f[b].push({...a,...r})}return m+g}).join(""),refs:f}},e=j(c.paragraphs,"段落").map(a=>{let b=i(a,"段落");k(b,["id","heading","criterionIndices","parts"],"段落");let{parts:c,...e}=b,f=d(c);return{...e,text:f.text,...f.refs}});return{paragraphs:e,tables:j(c.tables,"表格").map(a=>{let b=i(a,"表格");k(b,["id","heading","criterionIndices","caption","columns","rows"],"表格");let c=j(b.columns,"表格字段").map(a=>i(a,"表格字段")),e=j(b.rows,"表格记录").map(a=>{let b=i(a,"表格记录");k(b,["id","cells"],"表格记录");let e=j(b.cells,"表格单元格");if(e.length!==c.length)throw Error("正文引用表格记录与字段不守恒");let f=m(),g=e.map((a,b)=>{let e=i(a,"表格单元格");if(k(e,["parts"],"表格单元格"),"string"!=typeof c[b].key||!c[b].key)throw Error("表格字段身份无效");let g=d(e.parts,c[b].key);for(let a of Object.keys(f))f[a].push(...g.refs[a]);return g.text});return{id:b.id,cells:g,...f}});return{...b,rows:e}}),figures:j(c.figures,"图件").map(a=>{let b=i(a,"图件");k(b,["id","heading","criterionIndices","caption","nodes","edges","layout"],"图件");let c=m(),e=j(b.nodes,"图件节点").map(a=>{let b=i(a,"图件节点");k(b,["id","parts"],"图件节点");let e=d(b.parts,void 0,!1,{nodeId:b.id});for(let a of Object.keys(c))c[a].push(...e.refs[a]);return{id:b.id,label:e.text}}),f=j(b.edges,"图件关系").map((a,b)=>{let e=i(a,"图件关系");if(k(e,["from","to","parts"],"图件关系"),!Object.hasOwn(e,"parts"))return{from:e.from,to:e.to};let f=d(e.parts,void 0,!1,{edgeIndex:b});for(let a of Object.keys(c))c[a].push(...f.refs[a]);return{from:e.from,to:e.to,label:f.text}});return{...b,nodes:e,edges:f,...c}}),decisionRequests:c.decisionRequests,revisionReason:c.revisionReason}}({...c,tables:E(c.tables,"表格").map(a=>{let b=F(a,"表格");return{...b,rows:E(b.rows,"表格记录").map((a,b)=>({...F(a,"表格记录"),id:`row-${b+1}`}))}})},{sections:b.contract.sections.map(a=>({sectionId:a.id,label:d.sections.get(a.id)}))}),g=(0,f.C)(b.contract,b.taskId),n=a=>(0,f.resolveAuthorCriterionIndices)(g.map(a=>a.id),E(a,"职责序号")),o=a=>{if(!Number.isSafeInteger(a)||1>Number(a))throw Error("单元ID必须为正整数");return`${b.taskId}:unit:${a}`},p=[],q=[],s=[],v=(a,c)=>{let d={...a};for(let a of["factBindings","sourceBindings","projectNumbers","normativeNumbers","derivedNumbers","plannedNumbers","productionNumbers","sectionReferences"]){for(let e of E(d[a],a)){let{factIndex:d,sourceIndex:f,inputFactIndices:g,...h}=F(e,a);if("sectionReferences"===a)s.push({...h,...c});else if("plannedNumbers"===a)q.push({...c,quote:h.quote,..."columnKey"in h?{columnKey:h.columnKey}:{},..."textRange"in h?{textRange:h.textRange}:{},source:{kind:"planned-arrangement",basis:h.basis,constraints:h.constraints}});else{if(!b.projectModel)throw Error("冻结引用必须由本轮实际项目还原");if("factBindings"===a||"sourceBindings"===a)p.push({...h,...c,factId:(0,r.lu)(b.projectModel,"sourceBindings"===a?"source":"fact","sourceBindings"===a?f:d),..."sourceBindings"===a?{sourceKind:"source-excerpt"}:{}});else{let e,{quote:f,columnKey:i,textRange:j,...k}=h;if("productionNumbers"===a){let{planId:a,reference:c}=(0,t.tF)(b.projectModel,b.taskId,k.index);e={kind:"production-plan",planId:a,index:k.index,use:c.kind}}else e="derivedNumbers"===a?{kind:"derived",...k,inputFactIds:E(g,"推导输入序号").map(a=>(0,r.lu)(b.projectModel,"fact",a))}:{kind:"projectNumbers"===a?"project-fact":"normative-reference",...k,factId:(0,r.lu)(b.projectModel,"fact",d)};q.push({...c,quote:f,...void 0===i?{}:{columnKey:i},...void 0===j?{}:{textRange:j},source:e})}}}delete d[a]}return d},w=[];for(let[a,b]of[["paragraphs","paragraph"],["tables","table"],["figures","figure"]])for(let c of E(e[a],a)){let d=F(c,a),e=o(d.id),f="table"===b?{...d,rows:E(d.rows,"表格记录").map(a=>{let b=F(a,"表格记录"),c=v(b,{unitId:e,rowId:b.id}),f=E(c.cells,"表格字段值"),g=E(d.columns,"表格字段").map(a=>F(a,"表格字段"));return{...c,cells:Object.fromEntries(g.map((a,b)=>[D(a.key,"字段key"),f[b]]))}})}:v(d,{unitId:e}),{criterionIndices:g,...h}=f=L(f,["heading"]);w.push({...h,kind:b,id:e,criterionIds:n(g)})}return w.sort((a,b)=>Number(String(a.id).split(":").at(-1))-Number(String(b.id).split(":").at(-1))),{version:C,contractId:b.contract.id,projectSnapshotId:b.contract.projectSnapshotId,taskId:b.taskId,units:w,factBindings:p,numericBindings:q,sectionReferences:s,decisionRequests:E(c.decisionRequests,"未决请求").map(a=>{let{criterionIndices:b,...c}=F(a,"未决请求");return{...c,criterionIds:n(b)}}),...void 0===c.revisionReason?{}:{revisionReason:c.revisionReason}}}function Q(a,b){return`| ${a.columns.map(a=>J(b.cells[a.key])).join(" | ")} |`}function R(a,b=4,c,d){let e=a.heading?.trim().replace(/^\d+(?:[..]\d+)*[\s、..]+/u,"").trim(),f=e===d?.trim()||"paragraph"!==a.kind&&e===a.caption.trim(),g=e&&!f?`${"#".repeat(b)} ${e}
|
|
29
|
+
${g.task}`}],initialEvidence:[...a.preloadedSourceRecords?.length?[{toolName:"query_project_facts",ok:!0,data:{snapshotId:a.toolContext.projectModel.snapshotId,candidates:a.preloadedSourceRecords}}]:[],...a.preloadedMemberIds?.length?[{toolName:"query_work_packages",ok:!0,data:(0,I.H)(a.toolContext.projectModel,{query:"*",memberIds:[...a.preloadedMemberIds]})}]:[],...a.preloadedConstructionPlan?[{toolName:"query_construction_plan",ok:!0,data:a.preloadedConstructionPlan}]:[]],budget:(0,B.Su)(a.diagnostics).budget,...a.onTurn?{onTurn:a.onTurn}:{},check:async a=>({issues:a.trim()?[]:[{detectorId:"block-structure-contract",level:"error",severity:"blocker",message:"结构化任务尚未提交"}],executed:["block-structure-contract"],degraded:[]}),runTurn:async({messages:g,toolCallLimit:p,turn:q})=>{let t,u,v,w;a.signal?.throwIfAborted();let x=(0,B.Iw)((0,B.Su)(a.diagnostics)),z=[...bG("locate"),...bG("plan"),...bG("generate")],C=new Set((0,bI.F)(a.toolContext)),E=[...new Map(z.map(a=>[a.name,a])).values()].filter(b=>C.has(b.name)&&(!a.toolContext?.allowedTools||a.toolContext.allowedTools.includes(b.name))).map(a=>{let b=structuredClone(a.inputSchema);return{name:a.name,description:a.description,parameters:b}}),F=i(g),G=!1,H=n,I=await (0,A._v)({system:h,messages:F,tools:E,requireToolCall:!0,taskKind:"composition",onRawResponse:e=>{if(w=e,v=void 0,G=!0,u=(0,y.TF)(a.diagnostics,{chapterId:a.chapterId??"",blockTitle:a.blockTitle??b,turn:q,response:e,request:{system:h,messages:F,tools:E,maxTokens:H,requireToolCall:!0}}),e.responseMetadata?.finishReason==="length"){(0,d.wD)({nodeId:b,chapterId:a.chapterId,title:a.blockTitle,turn:q,toolCalls:e.toolCalls.length,reason:"作者工具输出被供应商截断;完整原响应已归档,暂停核查单任务协议与实际思考开销,不重写整任务或继续整包取证"},"model-output-truncated");let c=e.requestMetadata?.maxTokens,f=void 0!==H?Math.ceil(1.5*H):void 0!==c?Math.ceil(1.5*c):void 0,g=e.requestMetadata?.outputCap;v={kind:"incomplete-output",sentOutputBudget:c??null,nextOutputBudget:(n=void 0===f?void 0:void 0===g?f:Math.min(f,g))??null,finishReason:"length"}}else e.responseMetadata?.protocolFailure&&(v={kind:"invalid-tool-arguments"===e.responseMetadata.protocolFailure?"invalid-tool-arguments":"incomplete-stream",sentOutputBudget:null,nextOutputBudget:null,finishReason:e.responseMetadata.finishReason??null,detail:e.droppedToolCalls??null});e.responseMetadata?.completed===!1&&(e.toolCalls.some(a=>"submit_author_task"===a.name)||Array.isArray(e.rawToolCalls)&&e.rawToolCalls.some(a=>a?.name==="submit_author_task"||a?.function?.name==="submit_author_task"))&&(0,bP.E7)(a.diagnostics,c.section.id,!1)},callKind:(0,bP.OD)(a.diagnostics,c.section.id)?"chapter-repair":"chapter-writing",stablePrefixChars:a.stablePrefixChars,maxTokens:H,signal:a.signal,diagnostics:a.diagnostics});if(a.signal?.throwIfAborted(),G||(u=(0,y.TF)(a.diagnostics,{chapterId:a.chapterId??"",blockTitle:a.blockTitle??b,turn:q,response:I})),!G&&I?.responseMetadata?.completed===!1&&I.toolCalls.some(a=>"submit_author_task"===a.name)&&(0,bP.E7)(a.diagnostics,c.section.id,!1),!I){if(w?.responseMetadata?.protocolFailure==="invalid-tool-arguments"&&Array.isArray(w.rawToolCalls)){let a=w.rawToolCalls.map(a=>({id:a.id,name:a.name??a.function?.name,arguments:a.arguments??a.function?.arguments}));if(a.length&&a.every(a=>"string"==typeof a.id&&a.id&&"string"==typeof a.arguments&&E.some(b=>b.name===a.name))){let b=[{role:"assistant",content:w.content,...void 0===w.thinkingContent?{}:{thinkingContent:w.thinkingContent},toolCalls:a},...a.map(a=>({role:"tool",toolCallId:a.id,content:s(r(a.name,k(`本次参数未执行:${JSON.stringify(w.droppedToolCalls??[])};只纠正语法结构,保留前述原字全部正文、表格和图数据`),Date.now()))}))];return{text:"",toolCalls:[],protocolRecovery:v,toolMessages:b}}}let b=(0,B.Su)(a.diagnostics);if((0,B.Iw)(b)>x||(0,B.nY)(b)||(0,B.Z9)(b)){let a=(0,B.nY)(b)??(0,B.Z9)(b);return{text:"",toolCalls:[],refused:{kind:a?.kind??"budget",message:a?.message??"预算耗尽:本次调用未发起"}}}return{text:"",toolCalls:[],...v?{protocolRecovery:v,toolMessages:[{role:"user",content:`上一工具响应未接纳。实际协议回执:${JSON.stringify(v)}。解析失败或未报告finish_reason不能证明输出额度不足,不凭空扩大预算;原始有意义文字完整保留。保留完整原任务和已取得证据,纠正实际工具参数语法与标注;已有服务端保留的可解析原稿使用correct_author_submission,不重新生成它的段落、表行或图数据;不得补造事实。`}]}:{}}}let J=[],K=[],L=[],M=[],N=async(b,d)=>{let e;if(I.responseMetadata?.completed!==!0)throw Error("作者响应未完整结束,不能提交为完整任务");if(void 0!==a.maxAuthorSubmissions&&l>=a.maxAuthorSubmissions)throw Error("本任务的定向内容修改次数已用完,不能再次改稿");try{e=(0,bK.Ix)(b,{contract:c.contract,taskId:c.section.id,projectModel:a.toolContext?.projectModel}),await a.beforeAuthorSubmit?.(e)}catch(b){throw(0,bP.E7)(a.diagnostics,c.section.id,!1),b}let f=(0,bP.Y1)(a.diagnostics,c.section.id,e,e&&"object"==typeof e&&"string"==typeof e.revisionReason?e.revisionReason:void 0,{preserveFirstDraft:!a.beforeAuthorSubmit});for(let b of(l+=1,(0,y.cG)(a.diagnostics,f,u,d),t=f.markdown,f.output.decisionRequests))await a.toolContext.audit?.requestClarification({question:b.question,blocking:!0});return{taskId:f.output.taskId,contentHash:f.contentHash,pendingCriterionIds:f.pendingCriterionIds}},O={...a.toolContext,stage:"generate",allowedTools:E.map(a=>a.name),authorTask:{criterionIds:(0,e.C)(c.contract,c.section.id).map(a=>a.id),submit:async a=>{let b=m.length,c={output:structuredClone(a),accepted:!1,rawCallId:u??null};m.push(c);try{let b=await N(a);c.accepted=!0;let d=(0,bK.t3)(a);return d.length?{...b,shapeRepairs:d}:b}catch(d){let a=d instanceof Error?d.message:String(d),c=/包含协议外字段/u.test(a)?";可用 correct_author_submission 的 remove-unknown-field 操作删除该键(错误信息已给出路径),或去掉该键后重新提交":/须保留非空实际原文/u.test(a)?";可用 drop-empty-fragment 删除仅含空text的片段,或修正后重新提交":/已退役|units 旧形态|format 无效/u.test(a)?";请按 compact-v7 载体形(paragraphs/tables/figures/decisionRequests)重新提交":/守恒/u.test(a)?";单元顺序与全部载体须保持完整,不丢弃也不补造":"";throw Error(`${a};原稿已完整保留,submissionIndex=${b}。标注纠正用correct_author_submission,不重写段落、表行或图数据;来源资格仍须独立核验。${c}`,{cause:d})}},correct:async(a,b)=>{if(!Number.isSafeInteger(a)||a<0)throw Error("原稿序号无效");let c=m[a];if(!c||c.accepted)throw Error("只能纠正本任务当前实际未接收原稿");let d=(0,bQ.QN)(c.output,b);c.output=d;let e=await N(d,{submissionIndex:a,originalRawCallId:c.rawCallId,changes:b});return c.accepted=!0,e}}},P=void 0!==p?Math.max(0,p):I.toolCalls.length,Q=a=>"submit_author_task"===a||"correct_author_submission"===a,R=I.toolCalls.find(a=>Q(a.name)),S=new Set([...I.toolCalls.filter(a=>!Q(a.name)).slice(0,Math.max(0,P-(R||void 0!==p&&E.some(a=>"submit_author_task"===a.name)?1:0))),...R&&P>0?[R]:[]]),T=I.toolCalls.filter(a=>S.has(a)),U=I.toolCalls.length-T.length;for(let b of(U>0&&(console.warn(`[agent-tools] 单轮工具调用超块级预算,已截断 ${U} 次(限额 ${p})`),a.onToolIssue?.([{level:"warning",category:"structure",owner:"system",message:`本轮工具调用超出块级上限,已执行前 ${T.length} 次、截断 ${U} 次——请合并查询或减少工具调用`,suggestion:"下一轮只调真正需要的工具;剩余额度见块预算"}])),T)){let c,d;a.signal?.throwIfAborted();let e=Date.now();try{c=(0,f.parseJsonWithoutDuplicateKeys)(b.arguments||"{}")}catch(a){d=a instanceof Error?a.message:String(a)}let g=d?r(b.name,k(d),e):await bH(b.name,c,O);if(a.signal?.throwIfAborted(),K.push(g.ok?{toolName:b.name,ok:!0,data:g.data}:{toolName:b.name,ok:!1,error:{code:g.error.code}}),g.ok){let a=function(a,b){let c=b??{},d=(...a)=>{for(let b of a){let a=c[b];if("string"==typeof a&&a.trim())return a.trim()}};return"search_evidence"===a||"discover_files"===a?d("query"):"read_source"===a||"query_source_units"===a?d("filePath","path"):void 0}(b.name,c);a&&O.audit?.recordEvidenceCall&&O.audit.recordEvidenceCall({tool:b.name,term:a})}0===L.length&&L.push({role:"assistant",content:I.content??"",toolCalls:T.map(a=>({id:a.id,name:a.name,arguments:a.arguments})),...void 0!==I.thinkingContent?{thinkingContent:I.thinkingContent}:{}}),L.push({role:"tool",content:s(g),toolCallId:b.id});let h=g.ok?g.injection:void 0;h?.suspicious&&M.push({tool:b.name,patterns:h.patterns}),J.push({toolName:b.name,ok:g.ok,durMs:Date.now()-e,summary:g.ok?`ok ${g.bytes??0}B${h?.suspicious?" \xb7 疑似注入(按数据对待)":""}`:`${g.error.code}`})}if(j.push(...J),M.length>0){let c=M.map(a=>`${a.tool}(${a.patterns.join("、")})`).join(";");a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${M.length} 处:${c}——已按数据对待并记节点 issue`);try{a.onToolIssue?a.onToolIssue(M.map(a=>(function(a){let b=[...a.patterns].sort().join("、")||"未标注模式";return{level:"warning",severity:"warning",category:"scope",owner:"system",repairability:"manual_review",message:`工具「${a.tool}」返回的资料内容命中疑似注入形态(${b})——该内容已按数据对待(模型侧带「${o}」前缀),本节正文不得因它改变写作口径`,suggestion:"人工复核该资料:若确为提示注入,请把该文件移出资料范围后重跑本节;正文中据其写出的事实须另行核实来源。",...a.nodeId?{sectionTitle:a.nodeId}:{},provenance:{detectorId:"suspicious-injection",fingerprint:(0,D.c6)(`${a.tool}\u0000${b}\u0000${a.nodeId??""}`)}}})({...a,nodeId:b}))):console.warn(`[agent-tools] 工具结果命中疑似注入(${c})但本次未提供节点问题汇(onToolIssue)——命中未被静默丢弃,见 llm.lastInfo`)}catch(d){let b=d instanceof Error?d.message:String(d);a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${M.length} 处:${c}——**节点 issue 未落库**(${b}):命中未被静默丢弃,但记账不完整`),console.error(`[agent-tools] 记录疑似注入节点 issue 失败(${c}):${b}`,d)}}let V=L.length>0?[...L,...U?[{role:"user",content:`该原始响应另有${U}个工具请求未执行,不能将它们当成取证结果。正文提交额度已经预留;依据实际已给的资料与已完成取证写作,真实缺口留作未决事项,不再猜属性或遍历全部资料。`}]:[]]:[];return{text:t??"",...void 0!==t?{committed:t}:{},toolCalls:J,toolMessages:V,toolResults:K}}}),q=m.filter(a=>!a.accepted).length;if(("unfixable"===p.kind||"no_content"===p.kind)&&"no-progress"===p.cause&&(0,d.wD)({nodeId:b,chapterId:a.chapterId,title:a.blockTitle,turn:p.turn,toolCalls:p.toolCalls,reason:p.reason}),a.onOutcome?.(q?{...p,rejectedSubmissions:q}:p),"no_content"===p.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环未产出正文:${p.reason}`);return}if("budget_refused"===p.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环被预算挡回(${p.refused.kind}):${p.reason}`);return}"unfixable"===p.kind&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`写手循环停止(${p.cause}),保留当前候选(残余 ${p.residual}):${p.reason}`);let t=function(a){if("unfixable"===a.kind&&!(a.residual<=0)&&"budget-refused"!==a.cause&&"tool-budget-exhausted"!==a.cause)return{issue:{level:"error",severity:"blocker",category:"structure",message:`块写作未收敛(残余 ${a.residual}):${a.reason}`},reason:`写手循环 ${a.turn} 轮后仍不达标(残余 ${a.residual}):${a.reason} —— 提交当前最好草稿,缺口由块账与导出门禁承载`}}(p);return t&&(a.diagnostics&&(a.diagnostics.llm.lastInfo=`${a.diagnostics.llm.lastInfo??""};本块残余 ${"unfixable"===p.kind?p.residual:0} 未收敛`),a.toolContext?.audit?.declareUnfixable(t)),p.content}},6455:(a,b,c)=>{c.d(b,{AY:()=>C,DZ:()=>B,O5:()=>D,cs:()=>j});var d=c(77598),e=c(11685);let f="tender-clarification-source-group-v2",g="tender-source-group-accounting-v2",h=/^(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::]|[??]\s*$/u,i=/(?:请问|请明确|请确认|请澄清)[::]\s*$/u,j=/^(?:回复|答复|答疑|答|澄清|释义)[::]/u,k=RegExp(`(?:^|\\n)${j.source.slice(1)}`,"u"),l=/^[((](\d{1,2}|[一二三四五六七八九十])[))]/u,m=/(?:请问|请明确|请确认|请澄清|(?:^|\n)(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::])/u,n=/[??]\s*$/u,o=/[??。!!;;]\s*$/u,p=/^\s*(?:\d{1,3}[..、]|第[一二三四五六七八九十百\d]+[章节条])/u,q=/^[a-f0-9]{64}$/u,r=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),s=a=>(0,d.createHash)("sha256").update(a).digest("hex"),t=a=>r(a);function u(a,b){return r({version:f,groupFingerprint:a.fingerprint,sourceSpans:b})}function v(a){let b=a.versionContext;return a.file&&b?.document.sourceFile===a.file&&q.test(b.sourceIdentity.sourceSha256)&&q.test(b.sourceIdentity.parsedSha256)?b.sourceIdentity:void 0}function w(a,b){let c=v(a),d=v(b),e=a.sourceSpans?.at(-1),f=b.sourceSpans?.[0];return!!(c&&d&&a.file===b.file&&c.sourceSha256===d.sourceSha256&&c.parsedSha256===d.parsedSha256&&e&&f&&e.file===f.file&&void 0!==e.chunkIndex&&void 0!==f.chunkIndex&&f.chunkIndex>=e.chunkIndex&&f.chunkIndex<=e.chunkIndex+1&&(f.chunkIndex!==e.chunkIndex||f.start>=e.end))}function x(a,b){let c=v(a),d=v(b);return!!(c&&d&&a.file===b.file&&c.sourceSha256===d.sourceSha256&&c.parsedSha256===d.parsedSha256)}function y(a,b,c,d){if(!x(a,b)||void 0!==c.sourceGroup||c.file!==a.file||!Array.isArray(c.sourceSpans)||!c.sourceSpans.length||c.sourceSpansSha256!==(0,e.y)(c.sourceSpans))throw Error("问题续行缺少真实同源物理证明");d(c);let f=[...a.sourceSpans??[],...b.sourceSpans??[]],g=a.sourceSpans?.at(-1),h=b.sourceSpans?.[0];if(!g||!h||void 0===g.chunkIndex||void 0===h.chunkIndex||h.chunkIndex<g.chunkIndex||h.chunkIndex===g.chunkIndex&&h.start<g.end)throw Error("问题续行原成员范围逆序或缺失");let i=f.map(a=>c.sourceSpans.flatMap((b,c)=>!function(a,b){let c={...b};return void 0===a.sourceGapBefore&&delete c.sourceGapBefore,void 0===a.sourceNativeTextBridgeBefore&&delete c.sourceNativeTextBridgeBefore,JSON.stringify(c)===JSON.stringify(a)}(a,b)?[]:[c]));if(i.some(a=>1!==a.length)||i.some((a,b)=>b>0&&a[0]<=i[b-1][0])||i[0]?.[0]!==0||i.at(-1)?.[0]!==c.sourceSpans.length-1)throw Error("问题续行证明未完整保留两端原成员spans及原顺序");let j=i[a.sourceSpans.length-1][0],k=i[a.sourceSpans.length][0],l=new Set(i.map(a=>a[0]));if(c.sourceSpans.some((a,b)=>!l.has(b)&&(b<=j||b>=k)))throw Error("问题续行证明借用了原成员之外的正文");let m=c.sourceSpans.slice(j+1,k+1).flatMap(a=>a.sourceNativeTextBridgeBefore?[a.sourceNativeTextBridgeBefore]:[]);if(c.sourceSpans.some((a,b)=>!l.has(b))&&!m.length)throw Error("问题续行新增页布局spans缺少真实原生页面证明");if(m.some(b=>b.file!==a.file||b.sourceSha256!==v(a).sourceSha256)||a.section!==b.section&&!m.length)throw Error("问题续行跨页/栏目缺少本物理文件原生页面证明");if(g.chunkIndex!==h.chunkIndex&&!c.sourceSpans.slice(j+1,k+1).some(a=>a.sourceNativeTextBridgeBefore||a.sourceGapBefore))throw Error("问题续行跨chunk缺少原生页面或真实空白gap证明")}function z(a){let b=k.exec(a);return!!(b&&!a.slice(0,b.index).trim())}function A(a,b,c,d){let e={end:b+1,continuations:[]},f=a[b];if(!v(f)||!f.sourceSpans?.length||k.test(f.text))return e;let g=a[b-1];if(g&&x(g,f)&&m.test(g.text)&&!n.test(g.text)&&!k.test(g.text)&&!m.test(f.text)&&!p.test(f.text)&&!l.test(f.text.trim()))return e;let j=i.test(f.text);if(!j&&!h.test(f.text)&&!m.test(f.text))return e;if(!j){let g=a[b+1];if(h.test(f.text)&&o.test(f.text)&&g&&w(f,g)&&!g.clauseNo&&!g.sourceSpans?.[0]?.logicalBoundaryBefore&&z(g.text))return{end:b+2,continuations:[]};if(!d||n.test(f.text))return e;let i=[],j=b+1;for(;j<a.length;){let f=a[j-1],g=a[j];if(!x(f,g)||g.clauseNo||g.sourceSpans?.[0]?.logicalBoundaryBefore||l.test(g.text.trim())||p.test(g.text))break;let h=function(a){let b=k.exec(a),c=b?a.slice(0,b.index):a;if(!(!c.trim()||b&&!n.test(c)||c.split(/\r?\n/u).some(a=>l.test(a.trim())||p.test(a)||m.test(a))))return{complete:n.test(c),containsReply:!!b}}(g.text);if(!h)break;let o=d.proveContinuation(f,g);if(!o)break;if(y(f,g,o,c),i.push({fromOffset:j-1-b,toOffset:j-b,proofBinding:o}),h.containsReply)return{end:j+1,continuations:i};if(h.complete){let b=a[j+1];return b&&w(g,b)&&!b.clauseNo&&!b.sourceSpans?.[0]?.logicalBoundaryBefore&&z(b.text)?{end:j+2,continuations:i}:e}j+=1}return e}let q=b+1,r=1,s=b+1;for(;q<a.length;){let b=a[q];if(!w(a[q-1],b)||function(a){let b=l.exec(a.trim());if(b)return/^\d+$/u.test(b[1])?Number(b[1]):"一二三四五六七八九十".indexOf(b[1])+1}(b.text)!==r||!h.test(b.text))break;if(k.test(b.text)){q+=1,s=q,r+=1;continue}let c=a[q+1];if(!c||!w(b,c)||c.clauseNo||c.sourceSpans?.[0]?.logicalBoundaryBefore||!z(c.text))break;q+=2,s=q,r+=1}return{end:s,continuations:[]}}function B(a,b){let c=a.sourceGroup;if(!c||c.version!==f||"\n\n"!==c.separator||c.sourceFile!==a.file||!q.test(c.sourceIdentity?.sourceSha256??"")||!q.test(c.sourceIdentity?.parsedSha256??"")||!Array.isArray(c.members)||c.members.length<2||!Array.isArray(c.questionContinuations))throw Error("问答源组缺少当前同源完整成员及投影身份");let d=0,g=new Set;for(let[a,f]of c.members.entries()){if(!Number.isSafeInteger(f.sourceOrdinal)||f.sourceOrdinal<0||g.has(f.sourceOrdinal)||a>0&&f.sourceOrdinal!==c.members[a-1].sourceOrdinal+1||f.file!==c.sourceFile||"string"!=typeof f.text||!f.text.trim()||f.start!==d||f.end!==d+f.text.length||!f.sourceSpans?.length||f.sourceSpansSha256!==(0,e.y)(f.sourceSpans))throw Error("问答源组成员原序号/原文/UTF16投影/原spans身份不一致");b({text:f.text,file:f.file,sourceSpans:f.sourceSpans,sourceSpansSha256:f.sourceSpansSha256}),g.add(f.sourceOrdinal),d=f.end+2*(a<c.members.length-1)}let h=c.members.map(a=>({...a,versionContext:{sourceIdentity:c.sourceIdentity,document:{sourceFile:c.sourceFile,isClarification:!0}}})),i=new Map;for(let a of c.questionContinuations){let d=c.members.find(b=>b.sourceOrdinal===a.fromSourceOrdinal),e=c.members.find(b=>b.sourceOrdinal===a.toSourceOrdinal),f=JSON.stringify([a.fromSourceOrdinal,a.toSourceOrdinal]);if(!d||!e||e.sourceOrdinal!==d.sourceOrdinal+1||i.has(f))throw Error("问题续行证明关联了未知/重复原成员");y(h[c.members.indexOf(d)],h[c.members.indexOf(e)],a.proofBinding,b),i.set(f,a.proofBinding)}let j=A(h,0,b,{proveContinuation:(a,b)=>i.get(JSON.stringify([h.indexOf(a)+c.members[0].sourceOrdinal,h.indexOf(b)+c.members[0].sourceOrdinal]))});if(j.end!==h.length||j.continuations.length!==i.size)throw Error("问答源组成员不是完整结构问题与答复,不能关联未知邻项");let k=c.members.map(a=>a.text).join("\n\n"),l=c.members.flatMap(a=>a.sourceSpans),{fingerprint:m,...n}=c;if(k!==a.text||s(k)!==c.textSha256||r(c.members)!==c.membersSha256||t(n)!==m||JSON.stringify(a.sourceSpans)!==JSON.stringify(l)||a.sourceSpansSha256!==u(c,l))throw Error("问答源组原母投影/成员守恒或独立来源组指纹不一致")}function C(a){if(!a||a.version!==g||!Number.isSafeInteger(a.rawCount)||a.rawCount<0||!Number.isSafeInteger(a.groupCount)||a.groupCount<0||a.reduction!==a.rawCount-a.groupCount||!Array.isArray(a.groups)||a.groups.length!==a.groupCount)throw Error("原始源单元与判审源组账缺失或不闭合");let b=new Set,c=0;if(a.groups.forEach((d,e)=>{if(d.judgmentIndex!==e||!Array.isArray(d.rawOrdinals)||!d.rawOrdinals.length||d.rawOrdinals.length>1&&(!q.test(d.sourceGroupFingerprint??"")||!d.sourceFile?.trim()||!q.test(d.parentFingerprint??"")||!q.test(d.sourceSpansSha256??""))||1===d.rawOrdinals.length&&void 0!==d.sourceGroupFingerprint)throw Error("判审源组缺少其真实原单元组身份");d.rawOrdinals.forEach(d=>{if(!Number.isSafeInteger(d)||d!==c||d>=a.rawCount||b.has(d))throw Error("源组成员没有按完整原始inventory唯一连续覆盖");b.add(d),c+=1})}),b.size!==a.rawCount)throw Error("源组账未保全原始来源分母")}function D(a,b,c){a.forEach(b);let d=[],e=[];for(let g=0;g<a.length;){let h=A(a,g,b,c),i=h.end,j=a.slice(g,i),k=j[0];if(j.length>1){let a=0,c=j.map((b,c)=>{let d={sourceOrdinal:g+c,text:b.text,file:b.file,...void 0===b.section?{}:{section:b.section},...void 0===b.clauseNo?{}:{clauseNo:b.clauseNo},sourceSpans:b.sourceSpans,sourceSpansSha256:b.sourceSpansSha256,start:a,end:a+b.text.length};return a=d.end+2,d}),d=c.map(a=>a.text).join("\n\n"),e={version:f,sourceFile:k.file,sourceIdentity:{...v(k)},separator:"\n\n",members:c,questionContinuations:h.continuations.map(({fromOffset:a,toOffset:b,proofBinding:c})=>({fromSourceOrdinal:g+a,toSourceOrdinal:g+b,proofBinding:c})),textSha256:s(d),membersSha256:r(c)},i={...e,fingerprint:t(e)},l=c.flatMap(a=>a.sourceSpans);B(k={...k,text:d,sourceGroup:i,sourceSpans:l,sourceSpansSha256:u(i,l)},b)}e.push({judgmentIndex:d.length,rawOrdinals:Array.from({length:i-g},(a,b)=>g+b),...k.sourceGroup?{sourceGroupFingerprint:k.sourceGroup.fingerprint,sourceFile:k.sourceGroup.sourceFile,parentFingerprint:k.sourceGroup.textSha256,sourceSpansSha256:k.sourceSpansSha256}:{}}),d.push(k),g=i}let h={version:g,rawCount:a.length,groupCount:d.length,reduction:a.length-d.length,groups:e};return C(h),{clauses:d,accounting:h}}},7148:(a,b,c)=>{c.d(b,{Q0:()=>g,RD:()=>i,Sn:()=>f,eu:()=>d,wA:()=>h});let d={米:"m",m:"m",延长米:"m",公里:"km",千米:"km",km:"km",平方米:"m2",平方:"m2","㎡":"m2","m\xb2":"m2",m2:"m2",立方米:"m3",方:"m3","m\xb3":"m3",m3:"m3",吨:"t",t:"t",千克:"kg",公斤:"kg",kg:"kg"},e=[["m3","m\xb3","立方米","方"],["m2","m\xb2","㎡","平方米"],["m","米","延长米"],["t","吨"],["kg","千克","公斤"],["km","公里","千米"]];function f(a){let b=String(a||"").trim().toLowerCase();return Object.prototype.hasOwnProperty.call(d,b)?d[b]:b}function g(a,b){let c=String(a||"").trim().toLowerCase(),d=String(b||"").trim().toLowerCase();return!c||!d||c===d||f(c)===f(d)||e.some(a=>a.includes(c)&&a.includes(d))}let h="平方米|立方米|m2|m3|m\xb2|m\xb3|㎡|延长米|公里|千米|kg|km|吨|座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|t",i=[...new Set([...h.split("|"),"日历天","工作日","小时","分钟","个月","毫米","厘米","兆帕","千瓦","万元","亿元","台班","日","周","秒","mm","cm","MPa","kW","天","月","年","人","层","栋","%","%","dB(A)","dB","分贝","℃","\xb0C","kPa","Pa","kN","N","kV","V","A","Hz","rpm","m/s","mm/s","m\xb3/h","m3/h","L/s","μg/m\xb3","μg/m3","mg/m\xb3","mg/m3","克","g","亩","公顷","hm2","hm\xb2","平米","公斤","千克","升","毫升","L","ml","mL","元","度","级","星","辆","Wp","kWp","MWp"])].sort((a,b)=>b.length-a.length).map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("|")},7661:(a,b,c)=>{c.d(b,{s:()=>i});var d=c(77598),e=c(12866),f=c(59948);let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),h=a=>"string"==typeof a?a.replace(/\r\n/gu,"\n").split("\n").map(a=>a.trim()).join("\n"):Array.isArray(a)?a.map(h):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,h(b)])):a;function i(a,b,c,d){if(c.contractId!==a.id||b.contractId!==a.id)throw Error("写作指标的首稿、模型和合同身份不一致");let i=new Map(c.findings.map(a=>[a.criterionId,a])),j=new Map(c.findings.map(a=>[a.criterionId,a.status])),k=a=>"met"===j.get(a)&&["professional","strong"].includes(i.get(a)?.qualityLevel??"unmeasured"),l=a.criteria.filter(a=>a.applicable&&!a.chapterId),m=new Set(c.sourceReviews?.filter(a=>"met"!==a.status).map(a=>a.taskId)),n=a.sections.map(c=>{let d=a.criteria.filter(a=>a.applicable&&a.sectionId===c.id),e=b.taskAttempts[c.id]?.firstComplete===!0;return{taskId:c.id,produced:!!b.tasks[c.id],protocolFirstComplete:e,firstQualityPassed:e&&!b.tasks[c.id]?.firstCandidate.qualityIssues?.length&&!m.has(c.id)&&d.length>0&&d.every(a=>k(a.id))}}),o=a.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0),p=0,q=0,r=0,s=0,t=0;for(let c of a.sections){let d=b.tasks[c.id];if(!d)continue;let f=b.taskAttempts[c.id]?.firstComplete===!0&&!d.firstCandidate.qualityIssues?.length&&!m.has(c.id),k=new Map(d.firstCandidate.output.units.map(a=>[a.id,a])),l=a.criteria.filter(a=>a.applicable&&a.sectionId===c.id),n=new Set;for(let a of d.current.output.units){s+=1;let m=f&&b.c0TaskHashes?.[c.id]!==null?k.get(a.id):void 0,o=(0,e.renderAuthorUnit)(a).length;q+=o;let p=d.firstCandidate.output.factBindings.filter(b=>b.unitId===a.id),u=d.current.output.factBindings.filter(b=>b.unitId===a.id),v=d.firstCandidate.output.numericBindings?.filter(b=>b.unitId===a.id)??[],w=d.current.output.numericBindings?.filter(b=>b.unitId===a.id)??[],x=l.filter(b=>{let c=i.get(b.id)?.authorUnitIds;return void 0===c?a.criterionIds.includes(b.id):c.includes(a.id)});m&&g(h(m))===g(h(a))&&g(p)===g(u)&&g(v)===g(w)&&x.length>0&&x.every(a=>"met"===j.get(a.id))&&a.criterionIds.every(a=>"met"===j.get(a))&&(n.add(a.id),t+=1,r+=o)}for(let e of a.criteria.filter(a=>a.applicable&&a.sectionId===c.id)){let a=i.get(e.id)?.authorUnitIds,g=(!f||b.c0TaskHashes?.[c.id]===null?[]:d.firstCandidate.output.units).filter(b=>void 0!==a?a.includes(b.id):b.criterionIds.includes(e.id));g.length&&"met"===j.get(e.id)&&(p+=e.weight*g.filter(a=>n.has(a.id)).length/g.length)}}let{missingUsageCalls:u,totalTokens:v,repairTokens:w}=(0,f.TV)(d);return{version:"writing-metrics-v2-professional-2026-10-12",contractId:a.id,firstDocumentHash:c.documentHash,metricDefinition:"task-professional-pass-and-document-conditions-v2",taskMetrics:n,firstPassRate:n.length?n.filter(a=>a.firstQualityPassed).length/n.length:null,documentConditionsPassed:l.every(a=>k(a.id)),unresolvedDocumentCriterionIds:l.filter(a=>!k(a.id)).map(a=>a.id),retention:{fixedWeight:o,retainedWeight:p,conservativeWeightRatio:o?p/o:null,evidencePolicy:"confirmed-applicable-criterion-unit-evidence-v1",currentUnits:s,retainedUnits:t,contentChars:q,retainedContentChars:r,charRatio:q?r/q:null},rework:b.rework,generationTokens:{totalTokens:u?null:v,repairTokens:u?null:w,repairRatio:!u&&v?w/v:null,missingUsageCalls:u,purposePolicy:"首候选后的写作调用及明确轻修保守计入chapter-repair;资料理解、规划和纯审查单独报告"},calibration:"initial-unvalidated",expertValidated:!1}}},7942:(a,b,c)=>{c.d(b,{Fr:()=>k,HM:()=>l,Hf:()=>n,tv:()=>m,wE:()=>o,yW:()=>p});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598);let i=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u,j=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function k(a,b){return b?`run:${b}:${a}`:a}function l(a,b,c){if(!j.test(b))throw Error("非法运行资产文件名");if(void 0!==c&&!i.test(c))throw Error("非法运行 ID");return c?g().join(a,"runs",c,"artifacts",b):g().join(a,"assets",b)}function m(a,b,c,d){let f=l(a,b,d),i=JSON.stringify(c);if(void 0===i)throw Error("运行资产不能是 undefined");e().mkdirSync(g().dirname(f),{recursive:!0});let j=`${f}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(j,i,{encoding:"utf8",flag:"wx"});try{if(d)try{e().linkSync(j,f)}catch(a){if("EEXIST"!==a.code)throw a;if(e().readFileSync(f,"utf8")!==i)throw Error(`运行资产已存在且内容不同:${d}/${b}`,{cause:a})}else e().renameSync(j,f)}finally{e().rmSync(j,{force:!0})}return{assetPath:f,bytes:Buffer.byteLength(i),sha256:(0,h.createHash)("sha256").update(i).digest("hex")}}function n(a){if(!a.runId)throw Error("实时模型进度必须绑定当前运行 ID");let b=l(a.generatedDir,"llm-live-progress.json",a.runId),c=JSON.stringify({...a.snapshot,version:1,runId:a.runId,documentId:a.documentId});e().mkdirSync(g().dirname(b),{recursive:!0});let d=`${b}.${(0,h.randomUUID)()}.tmp`;e().writeFileSync(d,c,{encoding:"utf8",flag:"wx"});try{e().renameSync(d,b)}finally{e().rmSync(d,{force:!0})}}function o(a,b){return b?[["run-start","run-start.json","本轮启动身份"],["run-inputs","run-inputs.json","本轮已准备输入快照"],["project-model","project-model.json","本轮写作与终检共用的项目事实快照"],["tender-requirements","tender-requirements.json","本轮原始招标条款、技术职责拆分、商务归宿及未裁决台账"],["document-contract","document-contract.json","本轮写作前冻结的职责、义务与七维评价合同"],["contract-ownership-plan","contract-ownership-plan.json","主控逐项确认事实、表格与交付义务的唯一主要责任小节"],["content-type-plan","content-type-plan.json","本轮主控对各节具体内容职责与适用类型的确认回执"],["contract-quality","contract-quality.json","本轮固定合同、项目快照和正文版本的七维评价回执"],["writing-task-hierarchy","writing-task-hierarchy.json","锁定交付小节与专业作者子任务之间的固定层级"],["chapter-writing-structures","chapter-writing-structures.json","本轮作者任务开始前的固定结构和内容职责"],["author-task-executions","author-task-executions.json","实际作者实例、委派任务、完整输入身份、执行终态与共用章节预算"],["author-accounting-final","author-accounting-final.json","同一合同跨续跑累计的调用、token、成本与章节预算消耗"],["author-candidates","author-candidates.json","本轮工具执行、自检、清理及重试前的原始模型返回索引"],["document-token-anomaly","document-token-anomaly.json","本轮无有效进展的重复模型消费与整份暂停回执;缺usage和供应商结算保持未知"],["document-model-final","document-model-final.json","本轮统一文档模型的最终版本与全部累计修改记录"],["contract-quality-c0","contract-quality-c0.json","固定首稿的完整七维评价,后续修改不能覆盖"],["contract-light-repair","contract-light-repair.json","统一预算内轻修的预检、提交结果与首稿通过读数"],["document-model-author","document-model-author.json","本轮固定任务的结构化作者模型、初始候选与累计修改账"],["blueprint","blueprint.json","本轮写作蓝图"],["requirement-assignments","requirement-assignments.json","本轮要求责任分配"],["structure-assignments","structure-assignments.json","本轮呈现要求分配"],["before-global-review","before-global-review.json","全文审查前章节快照(含章内重试,不等于原始首稿)"],["before-finalize","before-finalize.json","收口前章节快照"],["final-document","final-document.json","本轮最终内容快照"],["run-summary","run-summary.json","本轮阶段墙钟、调用用途与历史评分读数"]].flatMap(([c,d,f])=>{let g=l(a,d,b);if(!e().existsSync(g))return[];let i=(0,h.createHash)("sha256").update(e().readFileSync(g)).digest("hex");return[{id:k(c,b),artifactKind:c,type:"file",role:"attachment",path:g,sha256:i,runId:b,status:"generated",message:f}]}):[]}function p(a){if(!a.runId)return;let b=a.chapters.map(a=>({id:a.id,title:a.title,content:a.content,contentHash:(0,h.createHash)("sha256").update(a.content).digest("hex")}));m(a.generatedDir,`${a.stage}.json`,{version:1,runId:a.runId,documentId:a.documentId??null,stage:a.stage,capturedAt:Date.now(),chapters:b,...void 0!==a.markdown?{markdown:a.markdown}:{},rawFirstCandidate:!1},a.runId)}},8014:(a,b,c)=>{c.d(b,{QE:()=>i,cq:()=>h,qd:()=>j,uP:()=>k});var d=c(77598),e=c(17529);let f=a=>(0,d.createHash)("sha256").update(a).digest("hex");function g(a){if((0,e.ky)(a),!Number.isSafeInteger(a.index)||a.index<0||a.parentFingerprint!==f(a.text)||!a.file||!a.sourceSpans?.length||!a.sourceSpansSha256||![a.sourceIdentity?.sourceSha256,a.sourceIdentity?.parsedSha256,a.contextFingerprint].every(a=>"string"==typeof a&&/^[a-f0-9]{64}$/u.test(a)))throw Error("发现证据缺少当前完整母本/原始跨度/来源身份");let b=a.sourceGroup?.members??[{text:a.text,start:0,end:a.text.length,sourceSpans:a.sourceSpans,sourceOrdinal:void 0}],c=0,d=b.map((d,e)=>{let g=d.start,h=b[e+1]?.start??a.text.length;if(a.text.slice(g,d.end)!==d.text||!d.sourceSpans.length||h<d.end||a.text.slice(d.end,h).replace(/\s/gu,""))throw Error("发现证据成员/分隔不属于当前完整原母位置");let i=d.sourceSpans.map(a=>({sourceSpanOrdinal:c++,...void 0===d.sourceOrdinal?{}:{sourceOrdinal:d.sourceOrdinal},file:a.file,...void 0===a.chunkIndex?{}:{chunkIndex:a.chunkIndex},chunkSha256:a.chunkSha256,start:a.start,end:a.end,rawTextSha256:f(a.rawText)})),j=a.text.slice(g,h),k={version:"tender-discovery-source-evidence-v3",index:a.index,parentFingerprint:a.parentFingerprint,file:a.file,sourceIdentity:a.sourceIdentity,contextFingerprint:a.contextFingerprint,sourceSpansSha256:a.sourceSpansSha256,groupFingerprint:a.sourceGroup?.fingerprint,evidenceIndex:e,start:g,end:h,physicalSpans:i};return{evidenceId:`E${a.index}.${e}@${f(JSON.stringify(k)).slice(0,24)}`,evidenceIndex:e,start:g,end:h,quote:j,quoteSha256:f(j),physicalSpans:i}});if(!d.length||0!==d[0].start||d.at(-1).end!==a.text.length||d.map(a=>a.quote).join("")!==a.text)throw Error("发现证据显示未完整覆盖原母,不能裁剪正文");return d}function h(a,b){if(!Array.isArray(b)||!b.length||b.some(a=>"string"!=typeof a||!a)||new Set(b).size!==b.length)throw Error("发现候选必须选择显式唯一当前 evidenceIds,不能复制引文或按位置猜测");let c=new Map(g(a).map(a=>[a.evidenceId,a]));return b.map(a=>{let b=c.get(a);if(!b)throw Error(`发现 evidenceId 不属于当前原母/成员/跨度:${a}`);return b}).sort((a,b)=>a.start-b.start)}function i(a){return{sourceId:`S${a.index}`,section:a.section,clauseNo:a.clauseNo,originalSource:g(a).map(b=>({evidenceRef:`S${a.index}/M${b.evidenceIndex}`,text:b.quote,...b.physicalSpans[0]?.sourceOrdinal===void 0?{}:{memberOrdinal:b.physicalSpans[0].sourceOrdinal}}))}}function j(a,b){let c=new Map(g(a).map(b=>[`S${a.index}/M${b.evidenceIndex}`,b]));if(!Array.isArray(b)||!b.length||b.some(a=>"string"!=typeof a)||new Set(b).size!==b.length)throw Error("发现候选必须选择当前明确提供的唯一evidenceRefs");return b.map(a=>{let b=c.get(a);if(!b)throw Error(`发现evidenceRef不属于当前原母显式成员:${a}`);return b}).sort((a,b)=>a.start-b.start)}function k(a){let b=new Map;for(let c of a)for(let a of g(c)){let d=`S${c.index}/M${a.evidenceIndex}`;if(b.has(d))throw Error("当前批次原文引用身份重复");b.set(d,{unit:c,quote:a})}return a=>{if(!Array.isArray(a)||!a.length||a.some(a=>"string"!=typeof a)||new Set(a).size!==a.length)throw Error("候选必须选择当前明确提供的唯一evidenceRefs");let c=a.map(a=>{let c=b.get(a);if(!c)throw Error(`evidenceRef不属于当前批次真实原文:${a}`);return c}),d=c[0].unit;if(c.some(a=>a.unit!==d))throw Error("一个候选不能混用不同母本引用;按实际独立职责分开提交");return{unit:d,quotes:c.map(a=>a.quote).sort((a,b)=>a.start-b.start)}}}},10025:(a,b,c)=>{function d(a){let b=String(a||"").trim();return b?/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u.test(b)?"date":/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:万元|元)\s*\//u.test(b)?"money":/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC|JTG|SL|DL|YB|HG)\s*\/?\s*T?\s*[\d.]+/iu.test(b)?"standard":/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u.test(b)?"spec":/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|株|棵|处|项|日历天|天|层|樘|扇|片|组|件|孔|盏)/u.test(b)?"measure":"text":"text"}c.d(b,{Oq:()=>j,Su:()=>r,UD:()=>i,dm:()=>d,f2:()=>k,yJ:()=>e});let e="变更修改为|变更为|变更至|澄清为|澄清修改为|修改为|调整为|调整至|更正为|修正为|现为|现改为|更改为",f=/[。;;\n]/u,g=RegExp("\\d{4}\\s*年\\s*\\d{1,2}\\s*月\\s*\\d{1,2}\\s*日|\\d+(?:\\.\\d+)?\\s*(?:万元|亿元|日历天|个?月|天|m2|m3|m\xb2|m\xb3|㎡|mm|cm|km|m|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|kV|MPa|kPa|kW|W|A|V|%)|(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\\s*/?\\s*T?\\s*[\\d.]+(?:-\\d{2,4})?","giu"),h=/(?:第\s*)?(\d{1,2}(?:\.\d{1,2}){1,3})\s*(?:条|项|款)?/u;function i(a){let b=RegExp(`(${e})\\s*[::]?\\s*(${g.source}|[\\u4e00-\\u9fa5]{2,12})`,"u"),c=RegExp(g.source,"gu"),i=RegExp(`([\\u4e00-\\u9fa5]{2,8})\\s*[::]\\s*(${g.source})`,"gu"),j=[],k=new Set,l=a=>{let b=`${a.superseded}\u0000${a.effective}`;a.superseded===a.effective||k.has(b)||(k.add(b),j.push(a))},m=/变更|澄清|补疑|补遗|调整为|修改为|更正/;for(let g of a){let a=String(g.text||"");if(a&&m.test(a))for(let j of a.split(f)){let a=j.replace(/\s+/gu,"");if(a.length<4)continue;let f=function(a){let b=[],c=h.exec(a)?.[1];c&&b.push(c);let d=a.match(/[一-龥]{2,8}(?=[::))]?(?:为|是|按|采用|统一|变更|澄清|调整))/gu);for(let c of(d&&b.push(...d.slice(0,3)),a.matchAll(/([一-龥]{2,12})\s*[::]\s*(?=\d)/gu)))b.push(c[1].replace(/^(?:原|现|本工程|本项目)/u,""));return/计划工期|合同工期|总工期/u.test(a)&&b.push("计划工期"),[...new Set(b)]}(a),k=b.exec(a);if(k){let b=k[2].trim();if(!/\d/u.test(b)||RegExp(e,"u").test(b))continue;let h=d(b);for(let e of[...a.slice(0,k.index).matchAll(c)].map(a=>a[0].trim()))e!==b&&d(e)===h&&l({superseded:e,effective:b,scope:f,evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"});continue}let m=[...a.matchAll(i)];if(m.length>=2){let b=new Map;for(let a of m){let c=b.get(a[1])||[];c.push(a[2].trim()),b.set(a[1],c)}for(let[c,d]of b){let b=[...new Set(d)];b.length<2||l({superseded:b[0],effective:b[b.length-1],scope:[...new Set([...f,c])],evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"})}}}}return j}function j(a){let b=new Map;for(let c of a){let a=`${c.superseded}\u0000${c.scope.join("|")}`,d=b.get(a);if(!d){b.set(a,c);continue}let e=(d.effective===c.superseded,{...c,superseded:d.superseded,evidence:[...d.evidence,...c.evidence],scope:[...new Set([...d.scope,...c.scope])]});b.set(a,e)}return[...b.values()]}function k(a,b){if(!b||0===b.length)return 0;let c=0;for(let d of a){let a=function(a,b){let c=String(a||""),d=[];for(let a of b)"override"===a.kind&&a.superseded&&c.includes(a.superseded)&&(c=c.replace(RegExp(a.superseded.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),(b,e)=>{if(e>0&&/[\d.,]/u.test(c[e-1]))return b;let f=Math.max(c.lastIndexOf("。",e-1),c.lastIndexOf(";",e-1),c.lastIndexOf(";",e-1),c.lastIndexOf("\n",e-1))+1,g=c.slice(f,e);if(!function(a,b){if(!a.length)return!1;if(a.some(a=>/计划工期|合同工期|总工期|^工期$/u.test(a))){let a=[...b.matchAll(/(?:计划|合同|总)?工期|周期|期限|节点|阶段|地下|租赁|养护/gu)].at(-1)?.[0];return!!(a&&/^(?:计划|合同|总)?工期$/u.test(a))}return a.some(a=>{let c=a.replace(/^(?:原|现|本工程|本项目)/u,"");return c.length>=2&&b.includes(c)})}(a.scope,g))return b;let h=c.slice(Math.max(f,e-12),e+b.length+12);return/原(?:为|值|内容|计划|合同|招标)|此前|由[^,。;]{0,12}(?:变更|调整)|变更过程/u.test(h)?b:(d.push({from:b,to:a.effective}),a.effective)}));return{text:c,applied:d}}(String(d.content??""),b);0!==a.applied.length&&(d.content=a.text,c+=1)}return c}let l=[{attribute:"合同金额",re:/(?:最高投标限价|招标控制价|合同估算价(?:格)?|工程估算价|投标限价)(?<gap>[^。;\n]{0,16}?)(?:现)?(?:调整)?为?\s*[::]?\s*(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u},{attribute:"计划工期",re:/(?:计划工期|合同工期|总工期)(?<gap>[^。;\n]{0,16}?)(?<num>[\d,]+(?:\.\d+)?)\s*个?\s*日历天/u},{attribute:"暂列金额",re:/(?:暂列金额|暂列金)(?<gap>[^。;\n\d]{0,12}?)(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u},{attribute:"抗震设防烈度",re:/抗震设防烈度[::\s为是]*(?<num>[6-9]\s*度)(?!\s*(?:及|以上|以下|至))/u},{attribute:"地震加速度",re:/(?:设计基本)?地震加速度[::\s为是]*(?<num>\d(?:\.\d+)?\s*g(?![a-z]))/u},{attribute:"场地类别",re:/场地类别[^。;\n]{0,32}?(?<num>(?:[ⅠⅡⅢⅣ]+|[IV]{1,3})\s*类)/u},{attribute:"地基基础设计等级",re:/地基基础设计等级[::\s为是]*(?<num>[甲乙丙]\s*级)/u},{attribute:"抗震设防类别",re:/(?:建筑)?抗震设防类别[::\s为是]*(?<num>[甲乙丙丁]\s*类)(?!型)/u}],m=RegExp(`(?:${e})\\s*[::]?\\s*(\\d{1,4})\\s*个?\\s*日历天`,"u"),n=/(?:计划工期|合同工期|总工期|工期)/u,o=/(?:暂列|暂估|分部分项|单项工程|单位工程|措施项目|其他项目|规费|税金|人工费|材料费|机械费|管理费|利润|单价|合价)/u,p=/现澄清为|现变更为|澄清为如下|澄清修改为|变更修改为|现调整为|全部作废|以本次[^。;\n]{0,10}为准|以澄清[^。;\n]{0,6}为准/u,q=/^\s*(?:\d{1,2}\s*[、..]|问\s*[::])/u;function r(a){let b=[],c=/作废|以本次(?:招标)?答疑附件(?:中材料)?为准|以澄清(?:文件)?为准/u;for(let d of a){let a=String(d.text||"");if(!a)continue;let f=/(?<label>(?:计划|实际|拟定)?开工(?:日期|时间))(?<gap>[^。;;]{0,32}?)(?<num>20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/gu;for(let c of a.matchAll(f)){let f=c.groups.gap,g=c.groups.num.replace(/\s+/gu,""),h=/^(\d{4})年(\d{1,2})月(\d{1,2})日$/u.exec(g),i=`${Number(h[1])}年${Number(h[2])}月${Number(h[3])}日`,j=new Date(Date.UTC(Number(h[1]),Number(h[2])-1,Number(h[3])));if(j.getUTCFullYear()!==Number(h[1])||j.getUTCMonth()!==Number(h[2])-1||j.getUTCDate()!==Number(h[3]))continue;let k=Math.max(a.lastIndexOf("。",c.index),a.lastIndexOf(";",c.index),a.lastIndexOf(";",c.index))+1,l=a.slice(c.index+c[0].length).search(/[。;;]/u),m=l<0?a.length:c.index+c[0].length+l+1,n=a.slice(k,m),o=a.slice(Math.max(k,c.index-32),c.index);if(/未(?:确定|明确)|不(?:是|采用|作为)|不得|取消|作废|开标|发布|支付|签订/u.test(f)||/(?:不采用|不是|不得采用|已取消)\s*$/u.test(o))continue;let q=c.groups.label,r=/[((]([^()()]*?开工(?:通知|令)[^()()]*?)[))]/u.exec(n)?.[1]??/((?:具体|实际)开工(?:日期|时间)[^。;;]{0,80}?以[^。;;]{0,80}?开工(?:通知|令)[^。;;]{0,20}?为准)/u.exec(n)?.[1],s=/([\d一二三四五六七八九十A-Za-z]+(?:号楼|#楼|标段|工区|栋))\s*$/u.exec(o)?.[1]??"项目主体",t=o.split(/[,,。;;]|\n\s*\n/u).at(-1),u=/(?:见|详见|参见)[^,,。;;]{0,24}$/u.test(t)?"reference":/原(?:招标文件|招标公告|合同|内容)?\s*$/u.test(t)?"superseded":"current",v=a.slice(k,c.index+c[0].length-c.groups.num.length);b.push({attribute:"开工日期",value:i,source:d.source,supersedesPriorMaterials:!1,clarified:"current"===u&&(RegExp(e,"u").test(f)||p.test(v)),openingDate:{kind:/实际/u.test(q)?"actual":/计划|拟定/u.test(q)||r?"planned":"unspecified",role:u,objectName:s,...r?{condition:r}:{},quote:n,sourceStartChar:k,sourceEndChar:m,dateStartChar:c.index+c[0].length-c.groups.num.length,dateEndChar:c.index+c[0].length}})}let g=!1;for(let f of a.split(/\n\s*\n/u))for(let a of(q.test(f)&&/[??]/u.test(f)&&(g=!1),p.test(f)&&(g=!0),f.split(/[。;;\n]/u))){let f;if(a.length<6)continue;let h=c.test(a),i=g||p.test(a),j=n.test(a)?m.exec(a)?.[1]:void 0;j&&b.push({attribute:"计划工期",value:`${j}日历天`,source:d.source,supersedesPriorMaterials:h,clarified:i});let k=a.search(/(?:暂列金额|暂列金)/u),q=k>=0?RegExp(`(?:${e})\\s*[::]?\\s*(\\d+(?:\\.\\d+)?)\\s*(亿元|万元|元)`,"gu"):void 0;if(q){for(let b of a.matchAll(q))if((b.index??0)>k){f=b;break}}for(let c of(f&&b.push({attribute:"暂列金额",value:`${f[1]}${f[2]||""}`,source:d.source,supersedesPriorMaterials:h,clarified:i}),l)){if("计划工期"===c.attribute&&j||"暂列金额"===c.attribute&&f)continue;let e=c.re.exec(a);if(!e?.groups)continue;let g=e.groups.num?.replace(/,/gu,"")||"";if(!g||o.test(e.groups.gap||""))continue;let k="合同金额"===c.attribute||"暂列金额"===c.attribute?`${g}${e.groups.unit||""}`:"计划工期"===c.attribute?`${g}日历天`:g.trim();b.push({attribute:c.attribute,value:k,source:d.source,supersedesPriorMaterials:h,clarified:i})}}}return b}},10501:(a,b,c)=>{c.d(b,{j:()=>m});var d=c(89247),e=c(14409),f=c(11248),g=c(28068),h=c(31037),i=c(92050),j=c(91898),k=c(57656),l=c(13518);function m(a,b){let c=b.attribute.trim(),m=e.nC.find(a=>a.key===c||a.label===c||a.aliases.includes(c)),n=[...a.facts,...a.sourceControls??[]].filter(a=>(m?(0,e.nD)(a)?.key===m.key:a.fieldId===c||a.fieldName===c||a.key===c)&&(!b.valueDomain||(0,d.IL)(a.value)===b.valueDomain)),o=m&&e.zT.has(m.key),p=n.filter(a=>!b.objectName||a.objectName===b.objectName||o&&"项目主体"===b.objectName&&!a.objectName),q=n.filter(a=>!a.objectName&&!o),r=new Map(p.filter(b=>Object.hasOwn(a.sources,b.resolutionRef?.winnerSourceFile??b.sourceFile)).map(b=>[b,(0,l.Q)(a,b)])),s=p.filter(b=>Object.hasOwn(a.sources,b.sourceFile)&&(0,g.j)(b)&&(!b.resolutionRef||!!(b.resolutionRef.winnerSourceFile&&Object.hasOwn(a.sources,b.resolutionRef.winnerSourceFile)))&&r.get(b)?.status==="eligible"),t=new Set(s.map(a=>(0,f.K3)(a.value))),u=new Set(s.map(a=>a.objectName).filter(Boolean)),v=s.filter(a=>a.controlContext),w=new Map;for(let a of v){let b=a.controlContext,c=JSON.stringify([b.objectName,b.attribute,b.condition,b.baseline,b.relation]),d=w.get(c)??new Set;d.add((0,f.K3)(a.value)),w.set(c,d)}let x=[...w.values()].some(a=>a.size>1),y=p.length&&p.every(a=>"technical_parameter"===a.fieldId),z=y&&p.some(b=>r.get(b)?.status==="eligible"&&(0,h.P)(a,b)),A=n.length?p.some(a=>r.get(a)?.status==="unresolved")?"needs-source-version-decision":s.some(a=>(0,j.p)(a).requiresTechnicalDecision)?"needs-technical-decision":!q.length||b.objectName&&p.length?s.length?x?"ambiguous":v.length===s.length&&(w.size>1||v.some(a=>"exact"!==a.controlContext.relation))?"conditioned":y&&v.length!==s.length?"needs-context-interpretation":t.size>1||!b.objectName&&u.size>1?"ambiguous":"resolved":z?"needs-context-interpretation":"unmeasured":"unbound":"unmeasured",B=[];for(let b of p){let c=b.resolutionRef?.winnerSourceFile??b.sourceFile,f=b.resolutionRef?b.resolutionRef.winnerSourceRef??null:b.sourceRef??null,g={factId:(0,e.vg)(b),...(0,i.mk)(a,(0,e.vg)(b),(0,h.P)(a,b)),objectName:b.objectName??(o?"项目主体":null),attribute:b.fieldId||b.fieldName||b.key,value:b.value,valueDomain:(0,d.IL)(b.value),technicalMeaning:(0,j.p)(b),sourceFile:c,sourceFingerprint:a.sources[c]?.sha256??null,sourceVersionEligibility:r.get(b)??{status:"unmeasured",decisionIds:[],reason:"没有对应当前冻结解析来源身份"},sourceSemantics:b.sourceSemantics??(0,k.Q)(f?.roleId??b.roleId,f?.processingType??b.processingType),sourceRef:f,sourceEvidenceId:(0,h.P)(a,b),resolutionRef:b.resolutionRef??null,derivation:b.derivation??null,temporalConstraint:b.temporalConstraint??null,confidence:b.confidence};B.push({...g,controlContext:b.controlContext??null})}let C=new Set(p.map(b=>(0,h.P)(a,b)).filter(Boolean)),D=(a.sourceControls??[]).filter(a=>C.has((0,e.vg)(a))).map(b=>({sourceEvidenceId:(0,e.vg)(b),...(0,i.mk)(a,void 0,(0,e.vg)(b)),sourceFile:b.sourceFile,chunkIndex:b.sourceRef?.chunkIndex,value:b.value}));return{snapshotId:a.snapshotId,attribute:c,objectName:b.objectName??null,status:A,value:"resolved"===A?s[0].value:null,candidates:B,totalCandidates:p.length,complete:!0,statusScope:"all-matching-facts",unboundCandidates:b.objectName?q.map(a=>(0,e.vg)(a)):[],unboundTotal:q.length,sourceEvidence:D,diagnosis:{phase:n.length?p.length?"needs-source-version-decision"===A?"source-use":"unbound"===A?"object-binding":"needs-technical-decision"===A||"needs-context-interpretation"===A||"conditioned"===A?"control-context":"ambiguous"===A?"value-resolution":s.length?"resolved":"fact-admission":"object-binding":"attribute-extraction",matchingAttributeRecords:n.length,matchingObjectRecords:p.length,qualifiedRecords:s.length,sourceCorpusSearched:!1,provesMissingSource:!1,nextAction:n.length?p.length?"needs-context-interpretation"===A?"完整原文已返回;解释实际对象、属性和条件,不将裸数字多值当作冲突":"conditioned"===A?"按每条完整工况与控制性质分别使用,不压成全项目单值":"resolved"===A?"使用已提供事实及出处,不重复查询同一属性":"核对候选的具体来源、条件或准入原因,未决不表示原文缺料":q.length?"属性候选尚未关联指定对象;按已有原文上下文解释,不要求用户逐项核定":"已有其他对象的属性记录,指定对象未命中;核对具体对象及别名,不能说原文没有数据":"属性库未命中;按本任务具体问题检索冻结原文,不能凭属性零命中认定原文缺料"}}}},10806:(a,b,c)=>{c.d(b,{b:()=>f});var d=c(14409),e=c(28068);function f(a){let{contract:b,section:c,project:f}=a;if(b.projectSnapshotId!==f.snapshotId||!b.sections.some(a=>a.id===c.id&&a.chapterId===c.chapterId))throw Error("作者任务准入不属于当前固定合同和项目快照");let g=b.criteria.filter(a=>a.applicable&&a.admission?.status==="unmeasured"&&(a.sectionId===c.id||!a.sectionId&&a.chapterId===c.chapterId)).map(a=>({...a.admission,reason:a.description,criterionIds:[a.id],factIds:[...a.factIds??[]]}));for(let a of b.criteria.filter(a=>a.applicable&&a.sectionId===c.id))for(let b of a.factIds??[]){let c=[...f.facts,...f.sourceControls??[]].find(a=>(0,d.vg)(a)===b);!(c&&(0,e.j)(c)&&Object.hasOwn(f.sources,c.sourceFile)&&(!c.resolutionRef||c.resolutionRef.winnerSourceFile&&Object.hasOwn(f.sources,c.resolutionRef.winnerSourceFile)))&&(g.some(c=>c.criterionIds.includes(a.id)&&c.factIds.includes(b))||g.push({status:"unmeasured",code:c?.temporalConstraint?.status==="unmeasured"?"unmeasured-temporal-control":"unmeasured-required-fact",effect:a.admission?.effect??"candidate-review",reason:c?.temporalConstraint?.status==="unmeasured"?"本任务引用的开工事件日期或条件尚未核定,不能用于时间断言":"本任务必用事实尚无可直接使用的已确认值",criterionIds:[a.id],factIds:[b]}))}return a.sharedTask&&"planned"!==a.sharedTask.status&&g.push({status:"unmeasured",code:"shared-task-plan-pending",effect:"candidate-review",reason:a.sharedTask.reason??"本任务组织安排尚未确认;可提交有证据的正文候选,实际方法与条件仍须取证",criterionIds:[],factIds:[]}),{contractId:b.id,taskId:c.id,status:g.some(a=>"task-block"===a.effect)?"blocked":g.length?"candidate-review":"ready",issues:g}}},11189:(a,b,c)=>{c.d(b,{X4:()=>j,Yn:()=>i});var d=c(77598),e=c(22496),f=c(26927);function g(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function h(a,b,c=!1){let d=new Map;for(let b of a.entries){if(!b.section)continue;let a=c?JSON.stringify([b.sourceFile,b.villageGroup,b.section]):b.section,e=d.get(a)||[];e.push(b),d.set(a,e)}let e=[],f=0;for(let a of d.values()){let c=g(a[0].section,a),d=a.some(a=>"unit-project"===a.sectionKind),h=[];if(d){let b=new Map;for(let d of a){let a=d.subsection||c,e=b.get(a)||[];e.push(d),b.set(a,e)}for(let[a,c]of b)h.push(k(g(a,c),c))}else h.push(k(c,a));f+=1,e.push({id:`${b}.${f}`,title:c,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),tablePlans:[],workPackages:h})}return e}function i(a){let{chapterTitles:b,boq:c}=a,d=b.map((b,d)=>{var e;let f=String(d+1),g=/主要分部分项|施工方案|施工方法/u.test(b)?h(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],subSections:g}}),e=h(c,"project",!0).flatMap(a=>a.workPackages),f=c.entries.filter(a=>!a.section);return f.length&&e.push(k("未分部清单记录",f)),{chapters:d,projectWorkPackages:e}}function j(a){return(0,d.createHash)("sha256").update(JSON.stringify([a.sourceFile,a.villageGroup,a.section,a.subsection,a.seq,a.code,a.name,a.description,a.unit,a.quantity,a.chunkIndex])).digest("hex")}function k(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},g=new Map;for(let a of c){if(!a.name)continue;let b=g.get(a.name)??new Map;b.set(a.unit,(b.get(a.unit)??0)+a.quantity),g.set(a.name,b)}for(let[a,b]of g)for(let[c,e]of b)d[b.size>1?`${a}(${c||"未注明单位"})`:a]={value:Math.round(1e3*e)/1e3,unit:c};let h=[...new Set(c.map(a=>a.name).filter(Boolean))],i=(0,f.lh)(c),k=[],l=new Set;for(let a of c){for(let b of(0,f.QU)(a.description)){let a=`${b.key}=${b.value}`;if(!l.has(a)&&(l.add(a),k.push({key:b.key,value:b.value,source:"boq"}),k.length>=24))break}if(k.length>=24)break}let m=[];for(let a of c)for(let b of(0,f.QU)(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&m.length<12&&!m.includes(b.value)&&m.push(b.value);let n=(0,e.cn)(c.map(a=>a.name)),o=[];for(let a of(0===m.length&&n.length>0&&m.push(...n[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),n.slice(0,2)))for(let b of a.standards)o.includes(b)||o.push(b);return{name:a,kind:"major",quantities:d,objectNames:h,methods:i,params:k,acceptance:m,standards:o,source:"boq",coveredSeqs:c.map(a=>a.seq),members:c.map(a=>({id:j(a),entry:{...a}}))}}},11248:(a,b,c)=>{c.d(b,{Hr:()=>l,K3:()=>m,PQ:()=>q,dP:()=>s,iw:()=>o,tR:()=>r});var d=c(7148);let e=/[A-Za-z0-9%+-.,]/gu,f="[+−-]?\\d+(?:\\.\\d+)?",g="(?:毫米|厘米|米|mm|cm|m)",h=`${f}\\s*(?:${g})?`,i=`(?:${h}\\s*[\xd7xX**]\\s*)+${f}\\s*(?:${g}|\\(${g}\\)|(${g}))`,j=RegExp(`(?<![A-Za-z\\d])(?:${i})(?![A-Za-z\\d])|(?<![A-Za-z\\d])[+−-]?\\d+(?:\\.\\d+)?\\s*(?:\xb0\\s*C|${d.RD})(?![A-Za-z])|(?<![A-Za-z\\d])(?:C[1-9]\\d{1,2}|(?:HRB|HRBF|HPB)\\d{3}[E]?|Q\\d{3}[A-E]?|P\\d{1,2}|M\\d{1,3}(?:\\.\\d+)?|LOD\\s*\\d+(?:\\.\\d+)?|DN\\d+|[Φφ∅⌀\xd8\xf8]\\s*\\d+(?:\\.\\d+)?)(?![A-Za-z\\d])`,"giu");function k(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function l(a){return a.replace(e,k).replace(/−/gu,"-").replace(/\s+/gu,"").replace(/(?<=\d)[~~](?=[+-]?\d)/gu,"~").replace(/[—–‑﹣]/gu,"-").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/毫升/gu,"ml").replace(/升/gu,"l").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/°\s*C/giu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"")}function m(a){return l(a).toLowerCase()}function n(a){let b=/^([+-]?\d+)(?:\.(\d+))?$/u.exec(a);if(!b)return a;let c=(b[2]??"").replace(/0+$/u,"");return`${b[1]}${c?`.${c}`:""}`}function o(a){let b=p(a);if(void 0!==b)return b;let c=m(a),d=/^([+-]?\d+(?:\.\d+)?)(.*)$/u.exec(c);return d?`${n(d[1])}${d[2]}`:c}function p(a){let b=a.replace(e,k).replace(/−/gu,"-").trim();if(!RegExp(`^(?:${i})$`,"iu").test(b))return;let c=b.split(/[×xX**]/u).map(a=>m(a)).map(a=>/^([+-]?\d+(?:\.\d+)?)(mm|cm|m)?$/u.exec(a));if(c.some(a=>!a))return;let d=c.at(-1)[2];if(!d)return;let f=c.map(a=>a[2]??d),g=c.map(a=>n(a[1]));return f.every(a=>a===d)?`${g.join("x")}${d}`:g.map((a,b)=>`${a}${f[b]}`).join("x")}function q(a){return[...a.replace(e,k).replace(/−/gu,"-").matchAll(j)].map(b=>{let c=a.slice(b.index,b.index+b[0].length);return{index:b.index,raw:c,value:p(c)??m(c).replace(/^[Φφ∅⌀Øø]/u,"φ")}})}function r(a){return a.replace(e,k).replace(j,a=>p(a)??m(a)).replace(/(?<=\d)[~~](?=[+-]?\d)/gu,"~").replace(/\s+/gu,"")}function s(a,b){let c=r(b);if(!c)return!1;let d=r(a);for(let a=d.indexOf(c);a>=0;a=d.indexOf(c,a+1))if(!(/^[+-]?\d/u.test(c)&&/[\d.+-]/u.test(d[a-1]??""))&&!(/[A-Za-z\d]$/u.test(c)&&/[A-Za-z\d]/u.test(d[a+c.length]??"")))return!0;return!1}},11685:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(77598);let e=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex")},12152:(a,b,c)=>{function d(a){let b=e()?.semanticFingerprints?.[a];return"string"==typeof b&&/^[a-f0-9]{64}$/u.test(b)?b:void 0}function e(){let a='{"version":1,"sourceFingerprint":"e48294e78fd020ac32104f19d01d9661de11c808f0ba823098dd2b1f95bfd581","semanticFingerprints":{"projectFacts":"ff78868c530a4484fff65160865b7baf73b8cdac27ad7e8a911658ef95717e1c","documentGeneration":"e9cc7e209e6e187c55c9fcf60a70f8700bc226362064aaa493f5f549725b8a9e"},"gitCommit":"2d2dcba4158d91c947ddcd4bbc5440c08561c92d","serverVersion":"4.60.17","sourceFiles":739,"capturedAt":"2026-10-13T17:46:53.959Z"}';if(a)try{let b=JSON.parse(a);if(1!==b.version||!/^[a-f0-9]{64}$/u.test(b.sourceFingerprint??"")||"string"!=typeof b.serverVersion||"number"!=typeof b.sourceFiles||"string"!=typeof b.capturedAt||null!==b.gitCommit&&"string"!=typeof b.gitCommit)return;return b}catch{return}}c.d(b,{C:()=>d,S:()=>e})},12866:(a,b,c)=>{c.d(b,{t3:()=>N,Ix:()=>O,renderAuthorTableRecord:()=>Q,r2:()=>W,renderAuthorUnit:()=>R,validateAuthorTaskOutput:()=>V});var d=c(54233),e=c(71783),f=c(59758),g=c(77598),h=c(7148);let i=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须是对象`);return a},j=(a,b)=>{if(!Array.isArray(a))throw Error(`${b}必须是完整数组`);return a},k=(a,b,c)=>{if(Object.keys(a).some(a=>!b.includes(a)))throw Error(`${c}含协议外字段`)},l=["projectNumbers","normativeNumbers","derivedNumbers","plannedNumbers"],m=()=>({factBindings:[],sourceBindings:[],projectNumbers:[],normativeNumbers:[],derivedNumbers:[],plannedNumbers:[],productionNumbers:[],sectionReferences:[]});var n=c(35091),o=c(14409),p=c(91898),q=c(11248),r=c(92050),s=c(28068),t=c(58214),u=c(57349),v=c(56999),w=c(4456),x=c(10501),y=c(31037),z=c(94173),A=c(10806),B=c(13518);let C="author-task-output-v1-2026-10-06",D=(a,b)=>{if("string"!=typeof a||!a.trim())throw Error(`${b}必须是非空文本`);return a},E=(a,b)=>{if(!Array.isArray(a))throw Error(`${b}必须是完整数组`);return a},F=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须是对象`);return a},G=(a,b)=>{if(new Set(a).size!==a.length)throw Error(`${b}身份重复`)},H=(a,b,c)=>{let d=Object.keys(a).filter(a=>!b.includes(a));if(d.length)throw Error(`${c}包含协议外字段,不能丢弃内容后当完整提交:${d.join("、")}`)},I=(a,b)=>{let c=D(a,b);if(/\r|\n|```|^\s*#{1,3}\s/u.test(c))throw Error(`${b}不得夹带章节或多行正文`);return c},J=a=>a.replace(/\\/gu,"\\\\").replace(/\|/gu,"\\|").replace(/\r?\n/gu,"<br>"),K=a=>JSON.stringify(a.replace(/\r?\n/gu," ")),L=(a,b)=>{let c={...a};for(let a of b){let b=c[a];(null==b||"string"==typeof b&&!b.trim()||Array.isArray(b)&&!b.length)&&delete c[a]}return c};function M(a){let b=[],c=structuredClone(a),d=(a,c,d)=>{for(let e of Object.keys(a))c.includes(e)||(delete a[e],b.push(`${d}/${e} 非正文键已移除`))},e=(a,c)=>{if(!Array.isArray(a))return a;let e=[];return a.forEach((a,f)=>{if(!a||"object"!=typeof a||Array.isArray(a))return void e.push(a);if(Object.hasOwn(a,"sectionIndex")){if("string"==typeof a.text&&a.text.trim())throw Error('小节引用片段含协议外字段 text:引用片段的连接语须写在该片段前后,片段内只保留 {"sectionIndex":序号}');d(a,["sectionIndex"],`${c}/${f}`),e.push(a);return}if(1===Object.keys(a).length&&""===a.text)return void b.push(`${c}/${f} 空片段已移除`);d(a,v.kj,`${c}/${f}`),e.push(a)}),e},f=(a,b)=>(!a||"object"!=typeof a||Array.isArray(a)||(d(a,v.XU,b),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/parts`)),Array.isArray(a.columns)&&a.columns.forEach((a,c)=>{a&&"object"==typeof a&&!Array.isArray(a)&&d(a,v.$h,`${b}/columns/${c}`)}),Array.isArray(a.rows)&&a.rows.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,["id","cells",...v.fd],`${b}/rows/${c}`),Array.isArray(a.cells)&&a.cells.forEach((a,f)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,["parts",...v.fd],`${b}/rows/${c}/cells/${f}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/rows/${c}/cells/${f}/parts`)))}))}),Array.isArray(a.nodes)&&a.nodes.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,v.RP,`${b}/nodes/${c}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/nodes/${c}/parts`)))}),Array.isArray(a.edges)&&a.edges.forEach((a,c)=>{!(!a||"object"!=typeof a||Array.isArray(a))&&(d(a,v.Ib,`${b}/edges/${c}`),Array.isArray(a.parts)&&(a.parts=e(a.parts,`${b}/edges/${c}/parts`)))})),a);for(let a of["paragraphs","tables","figures"])Array.isArray(c[a])&&(c[a]=c[a].map((b,c)=>f(b,`${a}/${c}`)));if(d(c,v.Ue,""),b.length){let b=(0,v.IO)(a),d=(0,v.IO)(c);if(!b||!d||b.bodyHash!==d.bodyHash)throw Error("提交形状修正会改变正文内容,不能静默接收;请按 compact-v7 协议重新提交")}return{value:c,repairs:b}}function N(a){if(!a||"object"!=typeof a||Array.isArray(a)||!("compact-v7"===a.format||["paragraphs","tables","figures"].some(b=>Object.hasOwn(a,b))))return[];try{return M(a).repairs}catch{return[]}}function O(a,b){if(a&&"object"==typeof a&&!Array.isArray(a)){if("string"==typeof a.version&&"string"==typeof a.contractId&&"string"==typeof a.projectSnapshotId&&"string"==typeof a.taskId&&Array.isArray(a.units))return a;let c=a.format;if(Array.isArray(a.units))throw Error("作者提交含 units 旧形态:请以 compact-v7(paragraphs/tables/figures/decisionRequests)重新提交");if(void 0!==c&&"compact-v7"!==c)throw Error(`作者提交 format 无效(${String(c)}):请以 compact-v7 提交,或省略该字段`);if("compact-v7"===c||["paragraphs","tables","figures","decisionRequests","revisionReason"].some(b=>Object.hasOwn(a,b))){let{value:c}=M(a);return c.format="compact-v7",P(c,b)}}return P(a,b)}function P(a,b){if(!a||"object"!=typeof a||"compact-v7"!==a.format)return a;let c=F(a,"当前作者提交"),d=(0,u.XN)(b.contract),e=function(a,b={}){let c=i(a,"正文引用产物");k(c,["format","paragraphs","tables","figures","decisionRequests","revisionReason"],"正文引用产物");let d=(a,c,d=!0,e)=>{let f=m(),g=j(a,"正文片段");if(!g.length)throw Error("正文片段不能为空");let n=g.map((a,c)=>{let d=i(a,"正文片段"),e=c?i(g[c-1],"正文片段"):void 0,f=e&&Object.hasOwn(e,"sectionIndex")&&Object.hasOwn(d,"sectionIndex")?"、":"";return{part:d,text:(a=>{if(Object.hasOwn(a,"sectionIndex")){if(k(a,["sectionIndex"],"真实小节引用片段"),!Number.isSafeInteger(a.sectionIndex)||0>Number(a.sectionIndex)||!b.sections?.[Number(a.sectionIndex)])throw Error("小节引用序号不在当前冻结合同");return b.sections[Number(a.sectionIndex)].label}if("string"!=typeof a.text||!a.text.trim())throw Error("正文片段须保留非空实际原文");return a.text})(d),separator:f}}),o=n.map(a=>a.separator+a.text).join(""),p=0;return{text:n.map(({part:a,text:g,separator:m})=>{let n=(p+=m.length)+g.length;if(Object.hasOwn(a,"sectionIndex"))return f.sectionReferences.push({sectionId:b.sections[Number(a.sectionIndex)].sectionId,quote:g,textRange:{start:p,end:n},...void 0===c?{}:{columnKey:c},...e}),p=n,m+g;k(a,["text","factIndices","sourceIndices","productionNumberIndices",...l],"正文片段");let q=/(?:^|[^A-Za-z\d])[+−-]?\d+(?:\.\d+)?\s*$/u.test(g)?RegExp(`^\\s*(?:${h.RD})(?![A-Za-z0-9])`,"iu").exec(o.slice(n))?.[0]??"":"",r={quote:o.slice(p,n+q.length),...d?{textRange:{start:p,end:n+q.length}}:{},...void 0===c?{}:{columnKey:c}};if(p+=g.length,Object.hasOwn(a,"productionNumberIndices")){let b=j(a.productionNumberIndices,"本轮施工生产计划数值序号");if(new Set(b).size!==b.length||b.some(a=>!Number.isSafeInteger(a)||0>Number(a)))throw Error("施工生产计划数值序号重复或无效");for(let a of b)f.productionNumbers.push({index:a,...r})}for(let[b,c,d]of[["factIndices","factBindings","factIndex"],["sourceIndices","sourceBindings","sourceIndex"]]){if(!Object.hasOwn(a,b))continue;let e=j(a[b],"冻结引用序号");if(new Set(e).size!==e.length||e.some(a=>!Number.isSafeInteger(a)||0>Number(a)))throw Error("正文片段引用序号重复或无效");for(let a of e)f[c].push({[d]:a,...r})}let s={projectNumbers:["factIndex"],normativeNumbers:["factIndex","version","scope"],derivedNumbers:["formula","inputFactIndices","basis"],plannedNumbers:["basis","constraints"]};for(let b of l)if(Object.hasOwn(a,b))for(let c of j(a[b],b)){let a=i(c,b);k(a,s[b],b),f[b].push({...a,...r})}return m+g}).join(""),refs:f}},e=j(c.paragraphs,"段落").map(a=>{let b=i(a,"段落");k(b,["id","heading","criterionIndices","parts"],"段落");let{parts:c,...e}=b,f=d(c);return{...e,text:f.text,...f.refs}});return{paragraphs:e,tables:j(c.tables,"表格").map(a=>{let b=i(a,"表格");k(b,["id","heading","criterionIndices","caption","columns","rows"],"表格");let c=j(b.columns,"表格字段").map(a=>i(a,"表格字段")),e=j(b.rows,"表格记录").map(a=>{let b=i(a,"表格记录");k(b,["id","cells"],"表格记录");let e=j(b.cells,"表格单元格");if(e.length!==c.length)throw Error("正文引用表格记录与字段不守恒");let f=m(),g=e.map((a,b)=>{let e=i(a,"表格单元格");if(k(e,["parts"],"表格单元格"),"string"!=typeof c[b].key||!c[b].key)throw Error("表格字段身份无效");let g=d(e.parts,c[b].key);for(let a of Object.keys(f))f[a].push(...g.refs[a]);return g.text});return{id:b.id,cells:g,...f}});return{...b,rows:e}}),figures:j(c.figures,"图件").map(a=>{let b=i(a,"图件");k(b,["id","heading","criterionIndices","caption","nodes","edges","layout"],"图件");let c=m(),e=j(b.nodes,"图件节点").map(a=>{let b=i(a,"图件节点");k(b,["id","parts"],"图件节点");let e=d(b.parts,void 0,!1,{nodeId:b.id});for(let a of Object.keys(c))c[a].push(...e.refs[a]);return{id:b.id,label:e.text}}),f=j(b.edges,"图件关系").map((a,b)=>{let e=i(a,"图件关系");if(k(e,["from","to","parts"],"图件关系"),!Object.hasOwn(e,"parts"))return{from:e.from,to:e.to};let f=d(e.parts,void 0,!1,{edgeIndex:b});for(let a of Object.keys(c))c[a].push(...f.refs[a]);return{from:e.from,to:e.to,label:f.text}});return{...b,nodes:e,edges:f,...c}}),decisionRequests:c.decisionRequests,revisionReason:c.revisionReason}}({...c,tables:E(c.tables,"表格").map(a=>{let b=F(a,"表格");return{...b,rows:E(b.rows,"表格记录").map((a,b)=>({...F(a,"表格记录"),id:`row-${b+1}`}))}})},{sections:b.contract.sections.map(a=>({sectionId:a.id,label:d.sections.get(a.id)}))}),g=(0,f.C)(b.contract,b.taskId),n=a=>(0,f.resolveAuthorCriterionIndices)(g.map(a=>a.id),E(a,"职责序号")),o=a=>{if(!Number.isSafeInteger(a)||1>Number(a))throw Error("单元ID必须为正整数");return`${b.taskId}:unit:${a}`},p=[],q=[],s=[],v=(a,c)=>{let d={...a};for(let a of["factBindings","sourceBindings","projectNumbers","normativeNumbers","derivedNumbers","plannedNumbers","productionNumbers","sectionReferences"]){for(let e of E(d[a],a)){let{factIndex:d,sourceIndex:f,inputFactIndices:g,...h}=F(e,a);if("sectionReferences"===a)s.push({...h,...c});else if("plannedNumbers"===a)q.push({...c,quote:h.quote,..."columnKey"in h?{columnKey:h.columnKey}:{},..."textRange"in h?{textRange:h.textRange}:{},source:{kind:"planned-arrangement",basis:h.basis,constraints:h.constraints}});else{if(!b.projectModel)throw Error("冻结引用必须由本轮实际项目还原");if("factBindings"===a||"sourceBindings"===a)p.push({...h,...c,factId:(0,r.lu)(b.projectModel,"sourceBindings"===a?"source":"fact","sourceBindings"===a?f:d),..."sourceBindings"===a?{sourceKind:"source-excerpt"}:{}});else{let e,{quote:f,columnKey:i,textRange:j,...k}=h;if("productionNumbers"===a){let{planId:a,reference:c}=(0,t.tF)(b.projectModel,b.taskId,k.index);e={kind:"production-plan",planId:a,index:k.index,use:c.kind}}else e="derivedNumbers"===a?{kind:"derived",...k,inputFactIds:E(g,"推导输入序号").map(a=>(0,r.lu)(b.projectModel,"fact",a))}:{kind:"projectNumbers"===a?"project-fact":"normative-reference",...k,factId:(0,r.lu)(b.projectModel,"fact",d)};q.push({...c,quote:f,...void 0===i?{}:{columnKey:i},...void 0===j?{}:{textRange:j},source:e})}}}delete d[a]}return d},w=[];for(let[a,b]of[["paragraphs","paragraph"],["tables","table"],["figures","figure"]])for(let c of E(e[a],a)){let d=F(c,a),e=o(d.id),f="table"===b?{...d,rows:E(d.rows,"表格记录").map(a=>{let b=F(a,"表格记录"),c=v(b,{unitId:e,rowId:b.id}),f=E(c.cells,"表格字段值"),g=E(d.columns,"表格字段").map(a=>F(a,"表格字段"));return{...c,cells:Object.fromEntries(g.map((a,b)=>[D(a.key,"字段key"),f[b]]))}})}:v(d,{unitId:e}),{criterionIndices:g,...h}=f=L(f,["heading"]);w.push({...h,kind:b,id:e,criterionIds:n(g)})}return w.sort((a,b)=>Number(String(a.id).split(":").at(-1))-Number(String(b.id).split(":").at(-1))),{version:C,contractId:b.contract.id,projectSnapshotId:b.contract.projectSnapshotId,taskId:b.taskId,units:w,factBindings:p,numericBindings:q,sectionReferences:s,decisionRequests:E(c.decisionRequests,"未决请求").map(a=>{let{criterionIndices:b,...c}=F(a,"未决请求");return{...c,criterionIds:n(b)}}),...void 0===c.revisionReason?{}:{revisionReason:c.revisionReason}}}function Q(a,b){return`| ${a.columns.map(a=>J(b.cells[a.key])).join(" | ")} |`}function R(a,b=4,c,d){let e=a.heading?.trim().replace(/^\d+(?:[..]\d+)*[\s、..]+/u,"").trim(),f=e===d?.trim()||"paragraph"!==a.kind&&e===a.caption.trim(),g=e&&!f?`${"#".repeat(b)} ${e}
|
|
30
30
|
|
|
31
31
|
`:"";if("paragraph"===a.kind)return g+a.text;if("table"===a.kind)return g+[a.caption,"",`| ${a.columns.map(a=>J(a.title+(a.unit?`(${a.unit})`:""))).join(" | ")} |`,`| ${a.columns.map(()=>"---").join(" | ")} |`,...a.rows.map(b=>Q(a,b))].join("\n");let h=new Map(a.nodes.map((a,b)=>[a.id,`n${b}`]));if(c){let b=a.caption.replace(/\[|\]/gu,""),d=c(a);if(void 0===d)return g+a.caption;let e="string"==typeof d?[d]:d;if(!e.length)throw Error("图件渲染不能返回空资产集合");return g+[a.caption,...e.map((a,c)=>``)].join("\n\n")}return g+[a.caption,"","```mermaid","flowchart TD",...a.nodes.map(a=>` ${h.get(a.id)}[${K(a.label)}]`),...a.edges.map(a=>` ${h.get(a.from)} -->${a.label?`|${K(a.label)}|`:""} ${h.get(a.to)}`),"```"].join("\n")}function S(a,b){let c=(0,q.K3)(b),d=(0,q.K3)(a);if(!c)return!1;for(let a=d.indexOf(c);a>=0;a=d.indexOf(c,a+1)){let b=d[a-1]??"",e=d[a+c.length]??"";if(!(/\d/u.test(c)&&(/\d/u.test(b)||/[a-z0-9]$/u.test(c)&&/[a-z0-9]/u.test(e))||/^[a-z]/u.test(c)&&/[a-z0-9]/u.test(b))&&!(/^[+-]?\d/u.test(c)&&/[.+\-±]/u.test(b)))return!0}return!1}function T(a){let b=[],c=0;for(let d=0;d<a.length;d+=1){let e=a[d];(/[。;;]/u.test(e)||/[,,]/u.test(e)&&!(/\d/u.test(a[d-1]??"")&&/\d/u.test(a[d+1]??"")))&&(b.push(a.slice(c,d)),c=d+1)}return b.push(a.slice(c)),b}function U(a,b,c){return T(a).some(a=>(0,q.K3)(a).includes((0,q.K3)(b))&&S(a,c)&&!/不(?:得)?(?:采用|使用)|禁止采用|禁止使用/u.test(a))}function V(a,b,c={}){let f;(0,n.oH)(b.contract);let i=function(a,b){let c=[],d=(e,f)=>{if(Array.isArray(e))return e.map((a,b)=>d(a,`${f}[${b}]`));if(!e||"object"!=typeof e)return e;let g={};for(let[a,h]of Object.entries(e)){if(!f&&"annotations"===a){if(!Array.isArray(h)||h.some(a=>!a||"object"!=typeof a||Object.keys(a).some(a=>!["path","field","value"].includes(a))||"string"!=typeof a.path||"string"!=typeof a.field||"string"!=typeof a.value))throw Error("协议注记台账无效");c.push(...h);continue}if(b&&/^(?:units|paragraphs|tables|figures)\[\d+\]$/u.test(f)&&/^(?:criterionIndices|criterionIds|factIndices|sourceIndices)_note$/u.test(a)&&"string"==typeof h){c.push({path:f,field:a,value:h});continue}g[a]=d(h,f?`${f}.${a}`:a)}if(b&&/^(?:units|paragraphs|tables|figures)\[\d+\]$/u.test(f)){let b=!f.startsWith("units[")||"format"in a?"criterionIndices":"criterionIds";Object.hasOwn(g,b)||(g[b]=[])}return g};return{value:d(a,""),annotations:c}}(a,!!c.preserveQualityDefects),j=F(O(i.value,{contract:b.contract,taskId:b.taskId,projectModel:b.projectModel}),"作者产物");if(H(j,["version","contractId","projectSnapshotId","taskId","units","factBindings","decisionRequests","numericBindings","sectionReferences","revisionReason"],"作者产物"),j.version!==C||j.contractId!==b.contract.id||j.projectSnapshotId!==b.projectModel.snapshotId||j.projectSnapshotId!==b.contract.projectSnapshotId||j.taskId!==b.taskId)throw Error("作者产物的协议、任务、合同或项目版本不一致");let k=b.contract.sections.find(a=>a.id===b.taskId);if(!k)throw Error("作者产物的任务不在冻结合同中");let l=new Set(b.contract.criteria.filter(a=>a.sectionId===k.id&&a.applicable).map(a=>a.id)),m=new Set,r=[],v=new Set,J=[],K=[],L=[],M=(a,b=l)=>{if(!c.preserveQualityDefects)throw Error(a);for(let c of(r.push(a),b))v.add(c)},N=(a,b=!1)=>{if(!c.preserveQualityDefects&&!(b&&c.deferSourceParaphrases))throw Error(a);J.push(a)};for(let a of i.annotations)N(`作者协议注记留档,不能作为正文或职责完成证据:${a.path}.${a.field}=${a.value}`);let P=a=>{let b=E(a,"评价项ID").map(a=>D(a,"评价项ID"));if(G(b,"评价项"),b.some(a=>!l.has(a)))throw Error("作者单元包含任务范围外评价项");return b.length||N("作者单元缺少职责标注,保留原文与完整合同分母,不自动补绑职责"),b.forEach(a=>m.add(a)),b},Q=E(j.units,"作者信息单元").map(a=>{let b=F(a,"信息单元"),c=D(b.id,"单元ID");if(!c.startsWith(`${k.id}:unit:`)||!/^[A-Za-z0-9:._-]+$/u.test(c))throw Error("作者单元ID必须属于本任务");let d={id:c,criterionIds:P(b.criterionIds),...b.heading?{heading:I(b.heading,"单元标题")}:{}};if("paragraph"===b.kind){H(b,["id","kind","criterionIds","heading","text"],"段落");let a=D(b.text,"段落正文");if(/^#{1,6}\s/mu.test(a)||/```|^\|.+\|$/mu.test(a)||/\r?\n\s*\r?\n/u.test(a))throw Error("段落不得夹带新章节、表格或多个不透明段落;标题放在 heading,段落分别提交");return{...d,kind:"paragraph",text:a}}if("table"===b.kind){H(b,["id","kind","criterionIds","heading","caption","columns","rows"],"表格");let a=E(b.columns,"表格字段").map(a=>{let b=F(a,"表格字段");return H(b,["key","title","unit"],"表格字段"),{key:D(b.key,"字段ID"),title:D(b.title,"字段名"),...b.unit?{unit:D(b.unit,"单位")}:{}}});if(!a.length)throw Error("表格没有字段");G(a.map(a=>a.key),"表格字段");let c=new Set(a.map(a=>a.key)),e=E(b.rows,"表格完整记录").map(b=>{let d=F(b,"表格记录");H(d,["id","cells"],"表格记录");let e=F(d.cells,"表格单元格");if(Object.keys(e).length!==c.size||Object.keys(e).some(a=>!c.has(a)))throw Error("表格记录字段与表头不守恒");let f=Object.fromEntries(a.map(a=>[a.key,D(e[a.key],"表格单元格")]));return{id:D(d.id,"表格记录ID"),cells:f}});if(!e.length)throw Error("表格没有数据记录");return G(e.map(a=>a.id),"表格记录"),{...d,kind:"table",caption:I(b.caption,"表名"),columns:a,rows:e}}if("figure"===b.kind){H(b,["id","kind","criterionIds","heading","caption","nodes","edges","layout"],"图件");let a=E(b.nodes,"图件节点").map(a=>{let b=F(a,"图件节点");return H(b,["id","label"],"图件节点"),{id:D(b.id,"图节点ID"),label:D(b.label,"图节点内容")}});if(!a.length)throw Error("图件没有节点");G(a.map(a=>a.id),"图件节点");let c=new Set(a.map(a=>a.id)),f=E(b.edges,"图件关系").map(a=>{let b=F(a,"图件关系");H(b,["from","to","label"],"图件关系");let d=D(b.from,"图起点"),e=D(b.to,"图终点");if(!c.has(d)||!c.has(e))throw Error("图件关系引用了不存在的节点");return{from:d,to:e,...b.label?{label:D(b.label,"图关系内容")}:{}}});return{...d,kind:"figure",caption:I(b.caption,"图名"),nodes:a,edges:f,...b.layout?{layout:(0,e.Q)(b.layout,a.map(a=>a.id),f)}:{}}}throw Error("作者信息单元类型不合法")});if(G(Q.map(a=>a.id),"作者单元"),b.contract.deliveryPolicy)for(let a of Q){let b="paragraph"===a.kind?a.text:"table"===a.kind?a.rows.map(a=>Object.values(a.cells).join(" ")).join("\n"):[a.caption,...a.nodes.map(a=>a.label),...a.edges.map(a=>a.label??"")].join("\n");for(let c of(0,d.G0)(b))M(`单元${a.id}:${c}`,a.criterionIds.length?a.criterionIds:l);"figure"===a.kind&&/总平面|场地布置|平面布置/u.test(a.caption)&&!a.layout&&M(`单元${a.id}:节点边关系图没有设施空间位置与线路,不能冒充施工平面布置图`,a.criterionIds.length?a.criterionIds:l),"figure"===a.kind&&a.layout&&!/示意/u.test(a.caption)&&M(`单元${a.id}:相对坐标布置须明确为示意,不能冒充测量比例或现场定位图`,a.criterionIds.length?a.criterionIds:l)}let W=(0,u.XN)(b.contract),X=void 0===j.sectionReferences?void 0:E(j.sectionReferences,"真实小节引用").map(a=>{let b,c=F(a,"真实小节引用");H(c,["unitId","sectionId","quote","textRange","rowId","columnKey","nodeId","edgeIndex"],"真实小节引用");let d=D(c.unitId,"引用单元"),e=D(c.sectionId,"真实目标小节"),f=D(c.quote,"实际小节标签"),g=Q.find(a=>a.id===d),h=W.sections.get(e);if(!g||!h||h!==f)throw Error("小节引用身份或展示标签不属于当前真实合同");if("paragraph"===g.kind){if(["rowId","columnKey","nodeId","edgeIndex"].some(a=>void 0!==c[a]))throw Error("段落小节引用不能冒用其他载体定位");b=g.text}else if("table"===g.kind){if(void 0!==c.nodeId||void 0!==c.edgeIndex)throw Error("表格小节引用不能冒用图定位");let a=g.rows.find(a=>a.id===c.rowId),d=g.columns.find(a=>a.key===c.columnKey);if(!a||!d)throw Error("小节引用必须指向实际表格记录和字段");b=a.cells[d.key]}else{if(void 0!==c.rowId||void 0!==c.columnKey||void 0!==c.nodeId==(void 0!==c.edgeIndex))throw Error("图件小节引用须指向唯一真实节点或关系");b=void 0!==c.nodeId?g.nodes.find(a=>a.id===c.nodeId)?.label??"":Number.isSafeInteger(c.edgeIndex)&&Number(c.edgeIndex)>=0?g.edges[Number(c.edgeIndex)]?.label??"":""}let i=F(c.textRange,"小节引用UTF16位置");if(H(i,["start","end"],"小节引用UTF16位置"),!Number.isSafeInteger(i.start)||!Number.isSafeInteger(i.end)||0>Number(i.start)||Number(i.end)<=Number(i.start)||Number(i.end)>b.length||b.slice(Number(i.start),Number(i.end))!==f)throw Error("小节引用位置没有对齐这一处真实正文");return{...c,unitId:d,sectionId:e,quote:f,textRange:{start:Number(i.start),end:Number(i.end)}}});for(let a of Q)for(let b of"paragraph"===a.kind?[{text:a.text}]:"table"===a.kind?a.rows.flatMap(a=>Object.entries(a.cells).map(([b,c])=>({text:c,rowId:a.id,columnKey:b}))):[...a.nodes.map(a=>({text:a.label,nodeId:a.id})),...a.edges.map((a,b)=>({text:a.label??"",edgeIndex:b}))]){let c=b;for(let b of W.sections.values())for(let d=c.text.indexOf(b);d>=0;d=c.text.indexOf(b,d+b.length))X?.some(e=>e.unitId===a.id&&e.quote===b&&e.textRange.start===d&&e.rowId===c.rowId&&e.columnKey===c.columnKey&&e.nodeId===c.nodeId&&e.edgeIndex===c.edgeIndex)||M(`手抄小节编号标题缺少真实接口绑定:${b};使用实际sectionIndex并说明实施接口`,a.criterionIds);for(let b of c.text.matchAll(/(?<!附)表\d+(?![-..\d])/gu))M(`正文存在悬挂数字表号引用:${b[0]};应引用实际题注编号或上表/下表及表名`,a.criterionIds);/(?:招标文件|合同|设计文件)[^。;;]{0,24}附表\d+/u.test(c.text)&&M("正文用外部附表指向代替本任务具体执行要求;核实原表后明确本项目职责与配置,不由接收器删除或补写正文",a.criterionIds)}let Y=E(j.decisionRequests,"决定请求").map(a=>{let b=F(a,"决定请求");return H(b,["id","question","reason","criterionIds"],"决定请求"),{id:D(b.id,"请求ID"),question:D(b.question,"待决定问题"),reason:D(b.reason,"决定依据缺口"),criterionIds:P(b.criterionIds)}});for(let a of(G(Y.map(a=>a.id),"决定请求"),m.size!==l.size&&N(`作者任务未覆盖完整评价集合:缺 ${[...l].filter(a=>!m.has(a)).join("、")}`),b.contract.criteria.filter(a=>l.has(a.id)&&a.carrier)))if(!Q.some(b=>b.kind===a.carrier&&b.criterionIds.includes(a.id))&&!Y.some(b=>b.criterionIds.includes(a.id))){let b=`载体义务必须由真实${"table"===a.carrier?"表格":"图件"}单元完成,或明确保留未决事项:${a.id}`;Q.some(b=>b.kind===a.carrier)?N(b):M(b)}let Z=E(j.factBindings,"事实绑定").map(a=>{let d=F(a,"事实绑定"),e=D(d.unitId,"事实所在单元"),f=D(d.factId,"事实ID"),g=D(d.quote,"事实断言");if(H(d,["unitId","factId","quote","rowId","columnKey","sourceKind","textRange"],"事实绑定"),void 0!==d.sourceKind&&"source-excerpt"!==d.sourceKind)throw Error("事实绑定来源角色非法");let h={..."source-excerpt"===d.sourceKind?{sourceKind:"source-excerpt"}:{},...d.textRange?{textRange:d.textRange}:{}};void 0!==d.rowId&&D(d.rowId,"事实记录ID"),void 0!==d.columnKey&&D(d.columnKey,"事实字段ID");try{let a,i,l=Q.find(a=>a.id===e),m=[...b.projectModel.facts,...b.projectModel.sourceControls??[]].find(a=>(0,o.vg)(a)===f);if("source-excerpt"===d.sourceKind&&(!/^source-excerpt:[a-f0-9]{24}$/u.test(f)||m?.roleId!=="verified-source-excerpt"))throw Error("原文引用须使用实际冻结sourceEvidenceId,不能借项目单值ID或自造ID");if(!l||!m||!Object.hasOwn(b.projectModel.sources,m.sourceFile)||!(0,s.j)(m))throw Error("事实绑定不属于冻结项目或缺少可靠来源");if(void 0!==d.textRange){let a=F(d.textRange,"正文引用位置");H(a,["start","end"],"正文引用位置");let b="paragraph"===l.kind?l.text:"table"===l.kind?l.rows.find(a=>a.id===d.rowId)?.cells[String(d.columnKey)]:void 0;if("string"!=typeof b||!Number.isSafeInteger(a.start)||!Number.isSafeInteger(a.end)||0>Number(a.start)||Number(a.end)<=Number(a.start)||Number(a.end)>b.length||b.slice(Number(a.start),Number(a.end))!==g)throw Error("正文引用位置没有对应实际原文片段,不能给另一处同值借用出处")}let n=(m.resolutionRef?.winnerSourceRef??m.sourceRef)?.cadInterpretation;if(n&&n.parsedIdentity!==b.projectModel.sources[m.resolutionRef?.winnerSourceFile??m.sourceFile]?.sha256)throw Error("已复核CAD属性的解析身份不属于本轮冻结来源,不能直接转挂新图纸");if(n&&(0,q.K3)(m.value)!==(0,q.K3)(`${n.rawValue}${n.unit}`))throw Error("CAD属性的生效值与实际复核值不一致");if(b.contract.deliveryPolicy&&!k.contentTypes.includes("project")&&(0,p.p)(m).requiresTechnicalDecision)throw Error("工程几何概述或未决属性不能作为已核定的施工控制值;须按对象、部位、工况与单位完成主控技术裁决");let r=R(l),u=g,v=!0,A=!1,C=!1,G=m.resolutionRef?.winnerSourceRef?.sourceSpan??m.sourceRef?.sourceSpan,I="source-excerpt"===d.sourceKind?E(j.factBindings,"事实绑定").filter(a=>{let b=F(a,"事实绑定");return"source-excerpt"===b.sourceKind&&b.unitId===e&&b.quote===g&&b.rowId===d.rowId&&b.columnKey===d.columnKey&&JSON.stringify(b.textRange??null)===JSON.stringify(d.textRange??null)}).map(a=>[...b.projectModel.facts,...b.projectModel.sourceControls??[]].find(b=>(0,o.vg)(b)===F(a,"事实绑定").factId)).filter(a=>!!(a&&"verified-source-excerpt"===a.roleId&&(0,s.j)(a)&&Object.hasOwn(b.projectModel.sources,a.sourceFile))):[m],J=[...new Set(I.flatMap(a=>(0,t._1)(b.projectModel,a)))],M=!(0,o.nD)(m)&&/[\u4e00-\u9fff]/u.test(m.value)&&m.value.length>=12&&("verified-source-excerpt"===m.roleId||G&&(0,q.K3)(G).includes((0,q.K3)(m.value))),O=(a,b="")=>{if(!c.preserveQualityDefects&&!c.deferSourceParaphrases)return;let h=b?`${a}${b}`:a,i=(0,t.ei)(h),j=M&&(i.length>0||0===J.length)&&i.every(a=>J.includes(a));if((S(h,m.value)||j)&&(!m.objectName||"项目主体"===m.objectName||("table"===l.kind?(0,q.K3)(r).includes((0,q.K3)(m.objectName)):U(a,m.objectName,m.value))))return N(`作者引用定位未对齐正文,真实对象和值需独立核验:${e}/${f}`,!0),A=!0,L.push({unitId:e,factId:f,submittedQuote:g,verifiedQuote:a,...d.rowId?{rowId:String(d.rowId)}:{},...d.columnKey?{columnKey:String(d.columnKey)}:{}}),K.push({unitId:e,factId:f,quote:a,...d.rowId?{rowId:String(d.rowId)}:{},...d.columnKey?{columnKey:String(d.columnKey)}:{}}),h};if("table"===l.kind){let b=D(d.rowId,"表格事实记录ID"),c=D(d.columnKey,"表格事实字段ID"),e=l.rows.find(a=>a.id===b);if(!e||!e.cells[c])throw Error("表格事实绑定不在指定记录与字段中");r=Object.values(e.cells).join(" ");let f=l.columns.find(a=>a.key===c)?.unit;if((0,q.dP)(e.cells[c],g))f&&!S(g,m.value)&&(u=`${g}${f}`);else{let a=O(e.cells[c],f);if(!a)throw Error("表格事实绑定不在指定记录与字段中");u=a}a={rowId:b,columnKey:c}}else if(!(0,q.dP)(r,g)){let a;for(let b of"paragraph"===l.kind?(l.text.match(/[^。!?]+[。!?]?/gu)??[]).map(a=>a.trim()).filter(Boolean):l.nodes.map(a=>a.label))if(a=O(b))break;if(!a)throw Error("事实断言不在绑定信息单元中");u=a}if("verified-source-excerpt"===m.roleId){if(!c.preserveQualityDefects&&!c.deferSourceParaphrases)throw Error("原文片段引用须独立来源复验,不能按项目单值直接准入");if((0,t.ei)(u).some(a=>!J.includes(a)))throw Error("原文片段没有支持该数值,不能补造参数");for(let a of[...(0,w.$_)([{filePath:m.sourceFile,content:"table"===l.kind?r:u,chapterId:k.chapterId,score:1,source:"written-assertion-check"}]),...(0,o.UT)([{filePath:m.sourceFile,processingType:"drawing",content:"table"===l.kind?r:u}])]){let c=(0,o.nD)(a);if(!c||"project_scope"===c.key)continue;let d=(0,p.p)(a);if(b.contract.deliveryPolicy&&!k.contentTypes.includes("project")&&"design-geometry"===d.role&&("range"===d.precision||"approximate"===d.precision))throw Error("原文中的几何范围或约数不能绕过技术核定成为施工控制值;须按具体部位与工况采用已核准控制属性");let e=(0,x.j)(b.projectModel,{attribute:c.key,..."project_scale"===c.key?{objectName:"项目主体"}:{}});if("resolved"===e.status&&e.value&&!S(a.value,e.value))throw Error(`原文引用不能覆盖已裁决的项目单值:${c.label}`)}A||K.push({unitId:e,factId:f,quote:g,...a,...h.textRange?{textRange:h.textRange}:{}})}else if(!S(u,m.value)){let i=(0,t.ei)(u),j=(0,o.nD)(m),l=j?.key,n=l&&["project_name","owner","project_location","quality_standard"].includes(l)&&!i.length?(0,w.$_)([{filePath:m.sourceFile,content:u,chapterId:k.chapterId,score:1,source:"written-assertion-check"}]):void 0,p=/^(?:本(?:项目|工程|标段))(?:(?:的)?(?:施工|质量|安全|进度|管理|组织|现场|技术|资源|人员|材料|设备|交接|责任|检查|控制|验收|保障|实施|编制|安排|工作|措施|体系))*[,。;、\s]*$/u.test(u);if(c.preserveQualityDefects&&p&&n&&!n.some(a=>(0,o.nD)(a)?.key===l))N(`事实标注没有在该段陈述这一项目属性,属于多余上下文标注,不能作为落实证据:${e}/${f}`),v=!1;else if(c.preserveQualityDefects&&"quality_standard"===l&&!i.length&&n&&!n.some(a=>(0,o.nD)(a)?.key===l))N(`质量标准引用尚需区分实际属性断言与程序上下文标注:${e}/${f}`),K.push({unitId:e,factId:f,quote:g,...a,...h,reviewPurpose:"reference-relevance"}),v=!1;else if(c.preserveQualityDefects&&J.length&&!i.length)N(`事实标注没有陈述该定量属性的值,不能作为落实证据:${e}/${f}`),v=!1;else if((c.preserveQualityDefects||c.deferSourceParaphrases)&&j?.valueType==="text"&&"project_name"!==l&&!J.length&&!i.length&&(0,y.P)(b.projectModel,m))K.push({unitId:e,factId:f,quote:g,...a,...h});else{if(!c.preserveQualityDefects&&!c.deferSourceParaphrases||!M||!i.length&&J.length>0||i.some(a=>!J.includes(a)))throw Error("事实断言没有正确引用该事实的生效值");A||K.push({unitId:e,factId:f,quote:g,...d.rowId?{rowId:String(d.rowId)}:{},...d.columnKey?{columnKey:String(d.columnKey)}:{},...h.textRange?{textRange:h.textRange}:{}})}}if(v&&"paragraph"===l.kind&&m.objectName&&"项目主体"!==m.objectName&&!U(u,m.objectName,m.value)){let a=(0,q.K3)(l.text),b=(0,q.K3)(g),d=a.indexOf(b),h=d>=0&&0>a.indexOf(b,d+b.length)?T(l.text).filter(a=>(0,q.dP)(a,g)&&U(a,m.objectName,m.value)):[];if(1===h.length){if(!c.preserveQualityDefects&&!c.deferSourceParaphrases)throw Error("短引文的段内对象定位须独立复验");u=h[0],L.push({unitId:e,factId:f,submittedQuote:g,verifiedQuote:h[0]}),K.some(a=>a.unitId===e&&a.factId===f&&a.quote===h[0])||K.push({unitId:e,factId:f,quote:h[0]})}else if(c.preserveQualityDefects||c.deferSourceParaphrases){let a=function(a,b,c,d){let e=(0,q.K3)(c),f=(a.match(/[^。;;!?]+[。;;!?]?/gu)??[]).filter(a=>(0,q.dP)(a,b)&&(0,q.K3)(a).includes(e)&&S(a,d));if(1!==f.length)return;let g=f[0],h=T(g).filter(a=>(0,q.K3)(a).includes(e));if(!(!h.length||h.some(a=>(0,t.ei)(a).length>0||/不(?:得)?(?:采用|使用)|禁止采用|禁止使用/u.test(a))))return g}(l.text,g,m.objectName,m.value);a&&(C=!0,i=a,K.push({unitId:e,factId:f,quote:a}))}}let P="table"===l.kind?r:i??u;if(v&&m.objectName&&"项目主体"!==m.objectName&&!(0,q.K3)(P).includes((0,q.K3)(m.objectName)))throw Error("事实绑定对象与该断言或表格记录不一致");if(v&&"table"!==l.kind&&m.objectName&&"项目主体"!==m.objectName&&!U(u,m.objectName,m.value)&&!C)throw Error("事实的对象和值不属于同一断言,不能用整段中的不同句子证明绑定");if(b.contract.deliveryPolicy&&(n||G&&/对于|(?:当|若)[^。;\n]{1,50}(?:时|则)|仅(?:在|对|用于|适用于)|限于|适用于/u.test(G))&&!K.some(a=>a.unitId===e&&a.factId===f&&a.quote===u)&&K.push({unitId:e,factId:f,quote:u,...a,...h.textRange&&u===g?{textRange:h.textRange}:{}}),v&&b.contract.deliveryPolicy){let c=(0,t._1)(b.projectModel,m),d=(0,t.ei)(u),i=d.length>0||"other"!==(0,p.p)(m).role||!!(0,B.Y)(m).domain||!!n,j=(0,z.jh)(b.projectModel,k.id,m,d),l=(0,z.W5)(b.projectModel,k.id,m),o=i||l?void 0:(()=>{try{return(0,z.tS)({project:b.projectModel,taskId:k.id,fact:m,usage:"verified-source-excerpt"===m.roleId?"source-reference":"project-fact",quantitativeValues:[],assertedText:u})}catch{return}})(),q=j?{reviewPurpose:"claim-applicability",claimCategory:"unmeasured",sourceApplication:j}:i?{reviewPurpose:"source-applicability",sourceApplication:(0,z.tS)({project:b.projectModel,taskId:k.id,fact:m,usage:"verified-source-excerpt"===m.roleId?"source-reference":"project-fact",quantitativeValues:d.filter(a=>c.includes(a)),assertedText:u})}:{reviewPurpose:"claim-applicability",claimCategory:"unmeasured",...l||o?{sourceApplication:l??o}:{}},r=K.find(b=>b.unitId===e&&b.factId===f&&b.quote===u&&b.rowId===a?.rowId&&b.columnKey===a?.columnKey);r?Object.assign(r,q):K.push({unitId:e,factId:f,quote:u,...a,...h.textRange&&u===g?{textRange:h.textRange}:{},...q})}return{unitId:e,factId:f,quote:g,...a,...h}}catch(i){let a=Q.find(a=>a.id===e),c=b.contract.criteria.filter(a=>l.has(a.id)&&("facts"===a.dimension||a.factIds?.includes(f)||k.contentTypes.includes("method")&&(0,t.ei)(g).length>0&&"methods"===a.dimension&&/控制点|参数与依据|控制参数|持续时间及推导依据/u.test(a.description))).filter(b=>"facts"===b.dimension||!a||a.criterionIds.includes(b.id)).map(a=>a.id);return M(i instanceof Error?i.message:String(i),c),{unitId:e,factId:f,quote:g,...void 0!==d.rowId?{rowId:String(d.rowId)}:{},...void 0!==d.columnKey?{columnKey:String(d.columnKey)}:{},...h}}});if(c.preserveQualityDefects&&void 0!==j.numericBindings)for(let a of E(j.numericBindings,"定量登记")){let b=F(a,"定量登记");for(let a of(H(b,["unitId","quote","rowId","columnKey","source","textRange"],"定量登记"),D(b.unitId,"定量单元ID"),D(b.quote,"定量断言"),["rowId","columnKey"]))void 0!==b[a]&&D(b[a],a);let c=F(b.source,"定量来源"),d={"project-fact":["factId"],"normative-reference":["factId","version","scope"],derived:["formula","inputFactIds","basis"],"planned-arrangement":["basis","constraints"],"production-plan":["planId","index","use"]}[String(c.kind)];if(!d)throw Error("定量来源类型非法");for(let a of(H(c,["kind",...d],"定量来源"),d))if("inputFactIds"===a||"constraints"===a)E(c[a],a).forEach(b=>D(b,a));else if("index"===a){if(!Number.isSafeInteger(c.index)||0>Number(c.index))throw Error("生产数值序号无效")}else D(c[a],a)}let $=Z.map(a=>{let b=L.find(b=>b.unitId===a.unitId&&b.factId===a.factId&&b.submittedQuote===a.quote&&b.rowId===a.rowId&&b.columnKey===a.columnKey);return b&&!a.textRange?{...a,quote:b.verifiedQuote}:a}),_=c.preserveQualityDefects&&Array.isArray(j.numericBindings)?j.numericBindings.filter(a=>a.source?.kind==="planned-arrangement"&&!(0,t.ei)(a.quote).length&&!RegExp(`\\d|[一二三四五六七八九十百千万]+(?:${h.RD})`,"u").test(a.quote)):[];for(let a of _)N(`无数值的拟定措施被多余登记在数值类别,保留正文但不能算定量依据:${a.unitId}`);let aa=Array.isArray(j.numericBindings)?j.numericBindings.filter(a=>!_.includes(a)):j.numericBindings;try{f=(0,t.Db)(aa,{units:Q,project:b.projectModel,factBindings:$,required:"required-v1"===b.contract.numericSourcePolicy,taskId:k.id,requireSourceApplications:!!b.contract.deliveryPolicy}),_.length&&(f=j.numericBindings)}catch(c){let a=b.contract.criteria.filter(a=>l.has(a.id)&&("facts"===a.dimension||"methods"===a.dimension&&/控制点|参数与依据|控制参数|持续时间及推导依据/u.test(a.description)||"understanding"===a.dimension)).map(a=>a.id);M(c instanceof Error?c.message:String(c),a),f=j.numericBindings}let ab={version:C,contractId:b.contract.id,projectSnapshotId:b.projectModel.snapshotId,taskId:k.id,units:Q,factBindings:Z,decisionRequests:Y,...f?{numericBindings:f}:{},...X?{sectionReferences:X}:{},...i.annotations.length?{annotations:i.annotations}:{}},ac=Q.length?[`${"#".repeat(k.headingLevel??3)} ${k.title}`,...Q.map(a=>R(a,(k.headingLevel??3)+1,void 0,k.title))].join("\n\n"):"",ad=(0,A.b)({contract:b.contract,section:k,project:b.projectModel});return{output:ab,section:k,markdown:ac,contentHash:(0,g.createHash)("sha256").update(JSON.stringify(ab)).digest("hex"),pendingCriterionIds:[...new Set([...Y.flatMap(a=>a.criterionIds),...v,...ad.issues.flatMap(a=>a.criterionIds)])],..."ready"===ad.status?{}:{writingReadiness:ad},...r.length?{qualityIssues:r}:{},...J.length?{annotationIssues:J}:{},...K.length?{sourceReviewRequests:K}:{},...L.length?{locatorEvidence:L}:{},qualityMeasured:!1}}function W(a){let b=(0,f.C)(a.contract,a.section.id),c=new Set(b.flatMap(a=>a.factIds??[])),d=a.projectModel?.facts.find(a=>c.has((0,o.vg)(a))&&(0,s.j)(a)&&!(0,p.p)(a).requiresTechnicalDecision&&1===(0,t.ei)(a.value).length&&a.value.length<=100),e=d&&a.projectModel?(0,r.bV)(a.projectModel).factIndices.get((0,o.vg)(d)):void 0;return{shared:["【作者产物协议】完成取证与必要规划后,通过submit_author_task提交本节完整产物,只输出compact-v7在实际正文片段上登记来源的形式。合同、项目及任务身份由已委派上下文还原。",'output={format:"compact-v7",paragraphs:[{id:1,parts:[{text:"一段完整专业正文"}],criterionIndices:[0]}],tables:[],figures:[],decisionRequests:[]}。','场地布置示意图在figures中提供layout:{coordinateSystem:"relative-schematic",placements:[{nodeId,x,y,width,height}],routes:[{edgeIndex,points:[{x,y}]}]}。全部坐标属于0~1图框,逐节点安排区域且不重叠,逐关系给真实拟定线路;不是现场尺寸,不能输出虚构比例或方位。caption明确为布置示意图。工序/接口关系图不填写layout。',"段落、单元格和图件文字由parts按顺序直接拼接,每项为{text,factIndices?,sourceIndices?,projectNumbers?,normativeNumbers?,derivedNumbers?,plannedNumbers?}。text就是实际交付文字;出处只在同一片段的索引与数值字段登记,片段内不写任何出处文字或位置标识——服务端从片段实际所属载体生成引用原句和位置,不猜出处、不改写或增删正文。","跨小节接口使用独立片段{sectionIndex:序号},由服务端恢复这一真实合同的编号和标题;正文文字中禁止出现任何小节的「编号+标题」原样(如「6.2 材料与过程控制」),也禁止把编号标题清单连排成句——一律用{sectionIndex}片段,连接语(如“分别见”“由…承担”)由你写在片段前后;该片段不能另填text或出处。前后实施接口句仍由你按实际职责写;引用标签不代表目标正文已经产出或质量通过,实际缺项保留待办。","图表caption只写实际主题,不自行填写表号或图号;服务器按章顺序和真实载体统一编排。引用本节表格用“上表/下表+实际表名”;跨小节使用sectionIndex引用对应真实小节并说明接口,不猜写其他作者的表号,不把来源图纸编号当本技术标的图号。",`本轮真实小节引用字典:${JSON.stringify(a.contract.sections.map((b,c)=>({sectionIndex:c,label:(0,u.XN)(a.contract).sections.get(b.id),contentTypes:b.contentTypes})))}。只按真实接口选择目标,不按编号猜专业职责。`,"单元id用稳定正整数。criterionIndices从0开始,明确选择本单元实际完成的下列职责;不能默认绑定全节。每段分别提交,parts拼接后不夹带标题、表格或多个段落;必要的内部小标题用heading。不同事实断言分片登记其来源,普通定性方法片段不必附来源数组。不要为了分片拆碎工程逻辑和上下文。","固定小节标题由服务端输出,内部heading不要重复本节标题;表格或图件已有caption,不再用相同heading重复一次表名/图名。同一内部主题连续多段,只在开始处填写heading,后文直接承接。",'tables条目为{id,caption:"非空实际表名",columns:[{key,title,unit?}],rows:[{cells:[{parts:[{text:"实际字段值"}]}]}],criterionIndices};行身份由服务端按真实行序生成,记录内只写cells。每条cells必须与columns等长,每格在自己的parts登记来源,不在行级复制引用。figures条目为{id,caption:"非空实际图名",nodes:[{id,parts}],edges:[{from,to,parts?}],layout?,criterionIndices},所有端点须存在。三类单元共用唯一正整数id,按正文实际顺序编号;顺序本身就是正文次序。没有的类别保留空数组,不创建空载体。',"片段的factIndices=[factIndex]只选择已提供且实际陈述的冻结属性,如工期属性支持540日历天,不能拿面积属性支持楼层。factIndex从0开始,只写序号。正文与来源使用同一片段,避免另抄来源中的措辞成为假引用。","片段的sourceIndices=[sourceIndex]引用尚未抽成独立属性的完整原文。sourceIndex取已提供记录或query_project_facts/search_evidence/read_source/query_work_packages返回的原文序号;factIndex与sourceIndex是独立索引,不能代用或猜序号;身份一律由服务端还原。不同来源支持的断言分别登记。服务端只还原身份和实际原文位置,不推定来源已经支持,仍独立核验对象、范围、条件与含义。","自主提出的工序方法、岗位分工、审批巡查和异常闭环属于本方案措施,不是资料既定事实;定性措施不必附事实绑定。不要拿“承包人应编制预案”等泛条款给自己新增的整套响应分级背书,也不要把方案动作冒充资料原文已有。资料约束如实引用,实施方法由你按项目风险、条件和专业知识展开,其可执行性由方法与义务评价核验。自拟数值仍须明确标为拟定,登记依据和约束。","当前已提供的同源施工生产计划数值用parts.productionNumberIndices=[本任务已授权序号]登记,服务端还原当前plan/contract/project身份和planned或derived用途。正文明确拟定或计算,并准确保留目录量值、完整单位和实际对象工况;计划目录不等于资料既定事实或已核工程采用,不写成confirmed,真实产能或计算缺口仍保留未决。","decisionRequests=[{id,question,reason,criterionIndices}],真实未决问题明确保留;没有时返回[]。资料未明不能编造事实,也不能删除该职责。",...a.contract.numericSourcePolicy?["每个带单位数值及强度等级、牌号、管径须在其实际片段中有factIndices、sourceIndices或分类来源登记。所有分类来源条目只写归类依据,不写引文与定位;其对应断言就是所属片段的实际text。","出处按每一处实际断言登记,同一工期、层数或控制值在另一句/段/记录再次出现,也在那一处附对应引用;第一处引用不会覆盖后来重复值。一个片段包含面积、栋数、层数等不同属性时,分别选择支持各属性的真实序号,不能借“1栋10层”的事实为同片段的用地面积背书。无依据的24小时、100%或其他数值不能当通用措施加入;先查询真实依据,或用完整定性动作表述。",'projectNumbers条目另填factIndex(可靠冻结属性序号,仍须事实绑定证明对象);normativeNumbers填写factIndex、version、scope(实际冻结记录及可核原文,不能填文件名、规范名或自创序号);derivedNumbers填写formula:"$0/$1"、inputFactIndices和basis(输入各含一个明确数值,结果精确一致);plannedNumbers填写basis和constraints(正文及对应表格记录明确“拟定/拟配置/拟安排”,不冒充资料事实)。没有的类别返回[],不填写其他类别的字段;无依据时保留定性或真实未决。',"规范名称、规范编号(如GB50242)、条款号和日期本身不是定量控制值,不填入normativeNumbers;作为依据引用时用真实片段的factIndices/sourceIndices绑定原文。规范中的控制值才填normativeNumbers,并核对版本与适用范围。已有属性引用覆盖的项目数值无需重复登记projectNumbers。"]:[],...a.contract.criteria.filter(a=>!a.chapterId&&a.applicable).map(a=>`【全文共同约束】${(0,n.Av)(a)}`),"首次写入不填写revisionReason,由服务端登记真实首次稿;已有接收稿的修改须在revisionReason说明具体原因。协议标注纠正使用correct_author_submission,只选择服务端已保留的submissionIndex和需改标注,不再次生成全部段落、表行或图件;实质正文改写必须另行完整提交并如实计账。各任务的实质正文修改如实计入累计返工记录,不为提高分数反复重写。提交结构完整不等于质量通过,后续仍执行冻结合同评价。不要额外返回另一份Markdown。"].join("\n"),task:[`【当前固定任务】${a.section.id}:${a.section.title}`,...d&&void 0!==e?[`本轮真实冻结属性引用示例(仅说明登记方法,不要求重复写正文):${JSON.stringify({attribute:d.fieldName??d.key,objectName:d.objectName,value:d.value,parts:[{text:`${d.fieldName??d.key}为${d.value}。`,factIndices:[e]}]})}。示例仅演示登记,实际正文保持项目适用条件并避免无必要重复。`]:[],`本节职责序号:${JSON.stringify(b.map((a,b)=>({index:b,description:(0,n.Av)(a),...a.carrier?{carrier:a.carrier}:{}})))}。所有职责须有实质信息单元或明确未决请求,不省略。`].join("\n")}}},12969:(a,b,c)=>{c.d(b,{a:()=>h,n:()=>i});var d=c(27723);let e=a=>a.replace(/\s/gu,"").replace(/[-—]/gu,"-").toUpperCase(),f=a=>e(a).replace(/[《》]/gu,""),g=a=>/^[\s《》(())::,,;;。]*(?:(?:标准)?编号[\s::]*)?[\s《》(())::,,;;。]*$/u.test(a);function h(a,b){let c=b.flatMap(a=>a.units.flatMap(a=>"table"===a.kind?a.rows.map(a=>Object.values(a.cells)):("paragraph"===a.kind?[a.text]:[a.caption,...a.nodes.map(a=>a.label),...a.edges.map(a=>a.label??"")]).map(a=>[a]))),h=[];for(let b of a.uses){let a=b.name?.text,i=b.code?.text,j=[a,i].filter(Boolean).join(" / "),k=!!(a&&i&&/[--—]\s*\d{4}$/u.test(i));(k?c.some(b=>b.some(b=>(function(a,b,c){return(0,d.Z5)(a).some(d=>{if(e(d.code.text)!==e(c))return!1;if(d.name)return e(d.name.text)===e(b);let f=a.indexOf(b);for(;f>=0;){let c=f+b.length;if(c<=d.code.start&&g(a.slice(c,d.code.start))||f>=d.code.end&&g(a.slice(d.code.end,f)))return!0;f=a.indexOf(b,c)}return!1})})(b,a,i))||b.some(b=>f(b)===f(a))&&b.some(b=>(0,d.Z5)(b).some(b=>e(b.code.text)===e(i)&&(!b.name||e(b.name.text)===e(a))))):c.some(b=>(!a||b.some(b=>e(b).includes(e(a))))&&(!i||b.some(a=>(0,d.Z5)(a).some(a=>e(a.code.text)===e(i))))))?k||h.push({rowId:b.id,useIds:[b.id],status:"unmeasured",message:`实际引用${j}已列字面记录,但正文名称、完整编号或版本未明确,完整依据覆盖仍未判定;不得借其他版本补齐`}):h.push({rowId:b.id,useIds:[b.id],status:"not-met",message:`正文实际引用未在编制依据同一记录覆盖:${j};实际位置 ${b.taskId}/${b.unitId}/${b.field}${b.rowId?`/${b.rowId}/${b.columnKey}`:""}`})}return h}function i(a,b,c){let d=c.units.find(b=>b.id===a.unitId);if(!d||b.taskId!==a.taskId||b.unitId!==a.unitId||b.rowId!==a.rowId||b.columnKey!==a.columnKey)return!1;let e="paragraph"===d.kind&&"text"===a.field?d.text:"table"===d.kind&&"cell"===a.field?d.rows.find(b=>b.id===a.rowId)?.cells[a.columnKey??""]:"caption"===a.field&&"paragraph"!==d.kind?d.caption:"figure"===d.kind&&a.field.startsWith("node:")?d.nodes.find(b=>`node:${b.id}`===a.field)?.label:"figure"===d.kind&&a.field.startsWith("edge:")?d.edges[Number(a.field.slice(5))]?.label:void 0,f=a.code??a.name;if(!f||void 0===e||e.slice(f.start,f.end)!==f.text)return!1;if(b.textRange)return Number.isSafeInteger(b.textRange.start)&&Number.isSafeInteger(b.textRange.end)&&b.textRange.start>=0&&b.textRange.end<=e.length&&b.textRange.start<=f.start&&b.textRange.end>=f.end;let g=e.indexOf(b.quote);return g>=0&&0>e.indexOf(b.quote,g+1)&&g<=f.start&&g+b.quote.length>=f.end}},13518:(a,b,c)=>{c.d(b,{Q:()=>g,Y:()=>f});var d=c(91898),e=c(44753);function f(a){let b=(0,d.p)(a);return{sourceFile:a.resolutionRef?.winnerSourceFile??a.sourceFile,quote:(a.resolutionRef?.winnerSourceRef??a.sourceRef)?.sourceSpan??a.value,sourceChunkIndex:(a.resolutionRef?.winnerSourceRef??a.sourceRef)?.chunkIndex,usage:"project-fact",attribute:a.fieldId??a.key,objectScope:a.objectName,assertedText:a.value,..."recommended_brand"===a.fieldId?{domain:"procurement-brand"}:"other"!==b.role?{domain:"construction-method"}:{}}}function g(a,b){return(0,e.bz)(a,f(b))}},13571:(a,b,c)=>{function d(a){let b=a.trim(),c=[],d="",e=0,f=!1;for(let a of b)(f="|"===a&&e%2==0)?(c.push(d.trim()),d=""):d+=a,e="\\"===a?e+1:0;return c.push(d.trim()),b.startsWith("|")&&c.shift(),f&&c.pop(),c}function e(a){let b=String(a||"").split("\n"),c=[],e=0;for(;e<b.length;){if(!b[e].trim().startsWith("|")){e+=1;continue}let a=e;for(;e<b.length&&b[e].trim().startsWith("|");)e+=1;let f=b.slice(a,e);if(f.length<3)continue;let g=f.findIndex(a=>/^\|[\s:|-]+\|?$/u.test(a.trim()));if(g<=0)continue;let h=d(f[0]).filter(a=>a.length>0).length;if(h<2)continue;let i=a>0?b[a-1].trim():"",j=/^表\s*[\d一二三四五六七八九十]+/u.test(i)?i:"";for(let b=g+1;b<f.length;b+=1){if(/^\|[\s:|-]+\|?$/u.test(f[b].trim()))continue;let e=d(f[b]).length;e!==h&&c.push({caption:j,line:a+1,expected:h,actual:e,rowLine:a+b+1})}}return c}c.d(b,{ql:()=>e}),c(22157)},13807:(a,b,c)=>{c.d(b,{Su:()=>k,hM:()=>p,jV:()=>o,mo:()=>i,pM:()=>m,rh:()=>l,zm:()=>j});let d=["pause","abort","resume","repair","resize","status","requirement"],e={pause:"暂停生成",abort:"中止生成",resume:"继续生成(修复式续跑)",repair:"定点修复",resize:"调整范围",status:"询问状态",requirement:"补充要求"},f={一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9,十:10};function g(a,b={}){let c={},d=[],e=b.chapters??[],h=a.match(/@([\w.:\-一-龥]+)/u)?.[1];h&&(c.nodeId=h,d.push(`结构化槽位:\`@${h}\``));let i=a.match(/第\s*([一二两三四五六七八九十\d]{1,3})\s*章/u)?.[1];if(i){let a=function(a){let b=a.trim();if(/^\d+$/u.test(b))return Number(b);if(void 0!==f[b])return f[b];let c=b.match(/^十([一二三四五六七八九])?$/u);if(c)return 10+(c[1]?f[c[1]]:0);let d=b.match(/^([二三四五六七八九])十([一二三四五六七八九])?$/u);if(d)return 10*f[d[1]]+(d[2]?f[d[2]]:0)}(i),b=void 0!==a?e[a-1]:void 0;b?(c.chapterId=b.id,c.chapterTitle=b.title,d.push(`结构化槽位:第 ${i} 章 ⇒ 「${b.title}」`)):0===e.length?d.push(`识别到"第 ${i} 章"但当前没有章清单可比对(不猜)`):d.push(`识别到"第 ${i} 章"但超出既有 ${e.length} 章(不猜)`)}else{let b=e.filter(b=>b.title&&a.includes(b.title)).sort((a,b)=>b.title.length-a.title.length);b.length>0&&(c.chapterId=b[0].id,c.chapterTitle=b[0].title,d.push(`结构化槽位:正文点名片名「${b[0].title}」`))}let j=a.match(/第\s*([一二两三四五六七八九十\d]{1,3})\s*块/u)?.[1];j&&(c.blockTitle=`第 ${j} 块`,d.push(`结构化槽位:第 ${j} 块(块序,按章内块序定位)`));let k=[...new Set([...a.matchAll(/\b([a-z][a-z0-9]+(?:-[a-z0-9]+){1,4})\b/gu)].map(a=>a[1]))];if(k.length>0){let a=b.criteriaIds&&b.criteriaIds.length>0?k.filter(a=>b.criteriaIds.includes(a)):k;a.length>0&&(c.criteria=a,d.push(`结构化槽位:判据 id「${a.join("、")}」${b.criteriaIds&&b.criteriaIds.length>0?"(在既有判据清单里)":""}`))}let l=a.match(/(\d+(?:\.\d+)?)\s*万\s*字/u)?.[1],m=a.match(/(\d{3,})\s*字(?!符)/u)?.[1],n=a.match(/(\d{1,3})\s*%/u)?.[1];return l?(c.value=Math.round(1e4*Number(l)),d.push(`结构化槽位:篇幅 ${l} 万字 ⇒ ${c.value} 字`)):m?(c.value=Number(m),d.push(`结构化槽位:篇幅 ${m} 字`)):n&&(c.value=Number(n),d.push(`结构化槽位:比例 ${n}%(按比例调整)`)),{target:c,reasons:d}}let h=[{kind:"abort",pattern:/中止|终止|取消(本次|这次|生成)|不(做了|要了|用写了)|停止生成/u,reason:"规则:中止类措辞"},{kind:"pause",pattern:/暂停|先停|停一下|等一下|缓一缓|别写了/u,reason:"规则:暂停类措辞"},{kind:"resume",pattern:/继续(生成|写|吧|跑)?|接着(写|生成|跑)|恢复生成|再跑(一遍)?|重跑一遍|继续生成/u,reason:"规则:继续类措辞"},{kind:"status",pattern:/现在(在)?(干|做)什么|进度|状态|卡在哪|为什么(卡|停|失败|没|失守)|什么情况|怎么回事|到哪(一步)?了|还要多久/u,reason:"规则:状态问询措辞"},{kind:"repair",pattern:/修复|修一下|修一修|改一下|重写|补写|定向修|按.*修|把.*(改|修|重写)/u,reason:"规则:修复类措辞"},{kind:"resize",pattern:/压到|缩到|缩到|扩到|篇幅|字数(目标|要求|不够|太多)|减(少)?(章|篇)|跳过|先不管|删掉.*章|追加.*章/u,reason:"规则:范围调整措辞"},{kind:"requirement",pattern:/别忘了|记得(写|加|补)|补充(要求|一点|说明)|要求(加上|增加)|注意(写上|补上)|还要(写|加|包含)/u,reason:"规则:补充要求措辞"}];function i(a){return{system:`你是文档生成系统的指令分类器。
|
|
32
32
|
把用户的一句话归到下面这组标签里的**恰好一个**;不确定就回 "unknown"。
|
|
@@ -48,7 +48,7 @@ semanticKind:本项目自身的设计、条件与施工要求为 project-desig
|
|
|
48
48
|
先判断整条义务的范围,不能仅按局部关键词分配。涵盖土建、装饰、安装等多个专业的全工程承包范围,应由工程范围/总体部署等可承载全范围汇总的任务主责,不得仅因出现土石方或基坑就把完整土建范围交给基坑工法任务。主责作者要响应整条义务,不以同章其他作者可能会写作为免责依据。
|
|
49
49
|
chapterAuthority=proposed表示此前语义粗分配,仅是建议,你可在合同冻结前依据真实小节职责纠正归属,reason说明为何纠正。没有标proposed的指定章属于已声明范围,不能越章。绝不改变既有大纲章节/小节标题和顺序。用给定数字序号选择,不抄写长ID。每个itemIndex恰好返回一次。只返回{"owners":[{"itemIndex":0,"taskIndex":2,"reason":"具体职责及必要的归属纠正依据"}]}。
|
|
50
50
|
【固定作者任务】${JSON.stringify(i.map((a,b)=>({taskIndex:b,...a})))}
|
|
51
|
-
【全部本批义务及各自合法任务序号】${JSON.stringify(g.map((a,b)=>({itemIndex:b,...a,allowedTaskIndices:i.flatMap((b,c)=>a.chapterId&&"proposed"!==a.chapterAuthority&&b.chapterId!==a.chapterId?[]:[c])})))}`,{maxTokens:6e3,temperature:0,diagnostics:a.diagnostics,signal:a.signal,taskKind:(0,e.TO)(),callKind:"planning-review",schema:{type:"object",required:["owners"],properties:{owners:{type:"array",minItems:g.length,maxItems:g.length,items:{type:"object"}}}}});a.onBatch?.({offset:d,attempt:c,items:g,tasks:i,raw:h});let j=h&&"object"==typeof h&&Array.isArray(h.owners)?h.owners:[],k=new Map,l=new Map;for(let a of j){let b=Number.isInteger(a?.itemIndex)?g[a.itemIndex]?.id:a?.criterionId;if(!b||!g.some(a=>a.id===b))continue;let c=k.get(b)??[];k.set(b,c);try{c.push(function(a,b,c,d=!0){if(!c||"object"!=typeof c||!Array.isArray(c.owners))throw Error("主控责任分配缺少owners");let e=new Set,f=c.owners.map(c=>{if(!c||"object"!=typeof c)throw Error("责任分配不是对象");let d={criterionId:Number.isInteger(c.itemIndex)?a[c.itemIndex]?.id:c.criterionId,sectionId:Number.isInteger(c.taskIndex)?b[c.taskIndex]?.id:c.sectionId,reason:c.reason},f=a.find(a=>a.id===d.criterionId),g=b.find(a=>a.id===d.sectionId);if(!f||e.has(d.criterionId))throw Error("责任分配含重复或未知义务ID");if(!g||f.chapterId&&g.chapterId!==f.chapterId&&"proposed"!==f.chapterAuthority)throw Error("责任小节不存在或越过已裁决的责任章");if("string"!=typeof d.reason||!d.reason.trim())throw Error("责任分配缺少职责依据");return e.add(d.criterionId),{criterionId:d.criterionId,sectionId:d.sectionId,reason:d.reason}});if(d&&e.size!==a.length)throw Error("主控责任分配集合不完整");return f}(g,i,{owners:[a]},!1)[0])}catch(a){l.set(b,a instanceof Error?a.message:String(a))}}for(let a of g){let c=k.get(a.id)??[];b[d+f.findIndex(b=>b.id===a.id)]=1!==c.length||l.has(a.id)?{criterionId:a.id,status:"unmeasured",reason:l.get(a.id)??(c.length>1?"同一义务重复分配,未执行":"主控没有返回该义务的合法主责")}:{criterionId:a.id,...c[0],status:"confirmed"}}}catch(c){if(a.signal?.aborted)throw c;g.forEach(a=>{b[d+f.findIndex(b=>b.id===a.id)]={criterionId:a.id,status:"unmeasured",reason:c instanceof Error?c.message:String(c)}})}g=f.filter(a=>b[d+f.findIndex(b=>b.id===a.id)]?.status!=="confirmed")}}})),{version:"contract-ownership-plan-v1-2026-10-06",inputHash:h([a.items,a.tasks]),decisions:b}}},27723:(a,b,c)=>{c.d(b,{$7:()=>t,B:()=>s,Z5:()=>r,dE:()=>v,rn:()=>u});var d=c(77598),e=c(14409),f=c(31037),g=c(44753),h=c(26244);let i=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),j=a=>(0,d.createHash)("sha256").update(a).digest("hex"),k=a=>a.replace(/\s/gu,""),l=a=>k(a).replace(/[-—]/gu,"-").toUpperCase(),m=/(?<![A-Za-z0-9])(?:DB\s*\d{1,4}(?:\s*\/\s*[A-Z])?|[A-Z]{1,8}(?:\s*\/\s*[A-Z]{1,12})?)\s*[--—]?\s*\d{2,8}(?:\.\d+)*(?:\s*[--—]\s*\d{4})?(?![A-Za-z0-9])/gu,n=/^(?:GB(?:Z|\/T|\/Z)?|JGJ(?:\/T)?|CJJ(?:\/T)?|JTG|CECS|DB\d*(?:\/T)?|T\/[A-Z]+|SL(?:\/T)?|DL(?:\/T)?|TB(?:\/T)?|JT(?:\/T)?|YY(?:\/T)?|HG(?:\/T)?|JC(?:\/T)?|QB(?:\/T)?|NB(?:\/T)?|NY(?:\/T)?|ISO|IEC|EN|BS|DIN|ASTM|AS|NF)[-]?\d/u,o=/《([^《》\r\n]+)》/gu,p=a=>/^[\s(())::,,;;。]*$/u.test(a);function q(a,b,c){return{start:b,end:c,text:a.slice(b,c),sha256:j(a.slice(b,c))}}function r(a,b=!1){let c=[...a.matchAll(o)];return[...a.matchAll(m)].flatMap(d=>{let e=d.index,f=e+d[0].length,g=c.flatMap(b=>b.index+b[0].length<=e&&p(a.slice(b.index+b[0].length,e))?[{title:b,distance:e-b.index-b[0].length}]:b.index>=f&&p(a.slice(f,b.index))?[{title:b,distance:b.index-f}]:[]),h=g.filter(a=>a.distance===Math.min(...g.map(a=>a.distance))),i=1===h.length?q(a,h[0].title.index+1,h[0].title.index+h[0].title[0].length-1):void 0;return i||!b&&n.test(l(d[0]))?[{code:q(a,e,f),...i?{name:i}:{}}]:[]})}function s(a){(0,g.gM)(a.project.sourceVersionPolicy);let b=new Set;for(let c of a.tasks){if(b.has(c.taskId)||c.output.taskId!==c.taskId||c.output.projectSnapshotId!==a.project.snapshotId||c.contentHash!==i(c.output))throw Error("规范引用登记任务不属于当前真实正文或内容身份已变化");b.add(c.taskId)}let c=[],d=[],m=[...a.project.facts,...a.project.sourceControls??[]],n=b=>{let c=m.find(a=>(0,e.vg)(a)===b),d=c&&("verified-source-excerpt"===c.roleId?(0,e.vg)(c):(0,f.P)(a.project,c));return d?a.project.sourceControls?.find(a=>(0,e.vg)(a)===d):void 0};for(let b of a.tasks)for(let f of b.output.units)for(let g of"paragraph"===f.kind?[{field:"text",text:f.text}]:"table"===f.kind?[{field:"caption",text:f.caption},...f.columns.map(a=>({field:`column:${a.key}`,text:a.title})),...f.rows.flatMap(a=>Object.entries(a.cells).map(([b,c])=>({field:"cell",rowId:a.id,columnKey:b,text:c})))]:[{field:"caption",text:f.caption},...f.nodes.map(a=>({field:`node:${a.id}`,text:a.label})),...f.edges.map((a,b)=>({field:`edge:${b}`,text:a.label??""}))])for(let m of function(a){let b=r(a);return[...b,...[...a.matchAll(o)].filter(a=>/(?:规范|标准|规程|导则|条例|规定|办法)$/u.test(a[1])&&!b.some(b=>b.name?.start===a.index+1)).map(b=>({name:q(a,b.index+1,b.index+b[0].length-1)}))]}(g.text)){let o=m;if(!o.name&&o.code&&"table"===f.kind&&g.rowId){let a=f.rows.find(a=>a.id===g.rowId),c=b.output.factBindings.filter(b=>b.unitId===f.id&&b.rowId===a.id).map(a=>n(a.factId)).filter(a=>!!a),d=Object.entries(a.cells).filter(([a])=>a!==g.columnKey).flatMap(([a,b])=>{let d=c.flatMap(a=>r(a.value,!0)).filter(a=>l(a.code.text)===l(o.code.text)&&a.name&&k(b.replace(/[《》]/gu,""))===k(a.name.text)),e=f.columns.find(b=>b.key===a);if(!b.trim()||!d.length&&!e?.title.includes("名称"))return[];let g=b.startsWith("《")&&b.endsWith("》")?1:0,h=g?b.length-1:b.length;return[{name:q(b,g,h),nameColumnKey:a}]});1===d.length&&(o={...o,...d[0]})}let p=`normative-use:${i([b.taskId,f.id,g.field,g.rowId??null,g.columnKey??null,o]).slice(0,24)}`,s={id:p,taskId:b.taskId,unitId:f.id,field:g.field,...g.rowId?{rowId:g.rowId}:{},...g.columnKey?{columnKey:g.columnKey}:{},...o,sources:[],boundSources:[],officialStatus:(0,h.Fk)(a.project,o.code?.text??"")};c.push(s);let t=(a,c)=>d.push({code:a,useId:p,taskId:b.taskId,message:c}),u=[o.name?.text,o.code?.text].filter(Boolean).join("(")+(o.name&&o.code?")":""),v=o.code??o.name,w=b.output.factBindings.filter(a=>a.unitId===f.id&&a.rowId===g.rowId&&a.columnKey===g.columnKey&&(a.textRange?g.text.slice(a.textRange.start,a.textRange.end)===a.quote&&a.textRange.start<=v.start&&a.textRange.end>=v.end&&(!o.name||o.nameColumnKey||a.textRange.start<=o.name.start&&a.textRange.end>=o.name.end):g.text.includes(a.quote)&&a.quote.includes(v.text)&&(!o.name||o.nameColumnKey||a.quote.includes(o.name.text))));for(let c of(w.length||t("unbound-source",`正文引用${u}没有同一实际位置的来源绑定`),w)){let d=n(c.factId),h=d&&(0,e.vg)(d);if(!d||d.sourceRef?.chunkIndex===void 0)continue;let m=a.project.sourceVersionPolicy.sources[d.sourceFile];if(!m||m.parsedSha256!==a.project.sources[d.sourceFile]?.sha256)throw Error("规范引用来源解析身份不属于当前冻结项目");let p=a.project.sourceVersionPolicy.documents.find(a=>a.sourceFile===d.sourceFile)?.scopeEvidenceChunks.find(a=>a.chunkIndex===d.sourceRef.chunkIndex);if(p&&p.text!==d.value||h!==`source-excerpt:${i([d.sourceFile,d.sourceRef.chunkIndex,d.value]).slice(0,24)}`)throw Error("规范引用完整原文没有对应同一冻结解析切片");if(s.boundSources.some(a=>a.sourceId===h)||s.boundSources.push({sourceId:String(h),sourceFile:d.sourceFile,chunkIndex:d.sourceRef.chunkIndex,sourceSha256:m.sourceSha256,parsedSha256:m.parsedSha256,chunkSha256:j(d.value),text:d.value}),!o.code)continue;let q=o.code;if(o.nameColumnKey&&"table"===f.kind){let a=f.rows.find(a=>a.id===g.rowId).cells[o.nameColumnKey];if(!b.output.factBindings.some(b=>b.unitId===f.id&&b.rowId===g.rowId&&b.columnKey===o.nameColumnKey&&n(b.factId)===d&&(b.textRange?a.slice(b.textRange.start,b.textRange.end)===b.quote&&b.textRange.start<=o.name.start&&b.textRange.end>=o.name.end:a.includes(b.quote)&&b.quote.includes(o.name.text))))continue}let t=r(d.value,!0).filter(a=>a.name&&(!o.name||k(a.name.text)===k(o.name.text))&&(l(a.code.text)===l(q.text)||!/[--—]\s*\d{4}$/u.test(q.text)&&l(a.code.text).replace(/-\d{4}$/u,"")===l(q.text)));if(1!==t.length)continue;let u=t[0],v=Math.min(u.name.start,u.code.start),w=Math.max(u.name.end,u.code.end),x=d.value.slice(v,w);s.sources.some(a=>a.sourceId===h)||s.sources.push({sourceId:String(h),sourceFile:d.sourceFile,chunkIndex:d.sourceRef.chunkIndex,sourceSha256:m.sourceSha256,parsedSha256:m.parsedSha256,chunkSha256:j(d.value),name:u.name,code:u.code,quote:x,quoteSha256:j(x)})}o.name||t("missing-name",`正文编号${o.code?.text}未写真实完整名称;所选原文候选不替正文自动补名`),o.code||t("missing-code",`正文名称${o.name?.text}未写编号;未决用途仍完整登记,不猜编号或版本`),w.length&&!s.sources.length&&t("source-literal-mismatch",`正文引用${u}未在所选同一冻结来源中唯一成对定位;不借其他文件或版本补齐`),new Set(s.sources.map(a=>JSON.stringify([k(a.name.text),l(a.code.text)]))).size>1&&t("bibliography-unmeasured",`正文引用${u}对应多个所选名称或版本,不能自动选择一个目录项`),o.code&&!/[--—]\s*\d{4}$/u.test(o.code.text)&&t("edition-unspecified",`正文未明确${o.code.text}版本年;所选原文候选不替正文自动补版本`),"unmeasured"===s.officialStatus.status?t("official-status-unmeasured",`${u}现行名称版本未核定:${s.officialStatus.reason}`):"current"!==s.officialStatus.status?t("official-status-ineligible",`${u}实际官方记录状态不支持作为现行依据:${s.officialStatus.reason}`):o.name&&k(o.name.text)!==k(s.officialStatus.records[0].name)&&t("official-name-mismatch",`${u}与同一完整编号的实际官方名称不一致;须由主控按本用途复核,不能改年份或借名通过`)}let p=structuredClone([...a.qualifications??[]]),s=[],t=new Set;for(let a of p){let b=`${a.useId}\0${a.sourceId}`;if(t.has(b)||!a.reviewId?.trim()||!a.reason?.trim()||!["confirmed","unmeasured","rejected"].includes(a.status)||!c.some(b=>b.id===a.useId&&b.sources.some(b=>b.sourceId===a.sourceId)))throw Error("规范采用资格回执没有对应本轮实际正文及字面来源");t.add(b)}for(let b of c){let c=p.filter(a=>a.useId===b.id&&"confirmed"===a.status),e=!1;for(let f of c){let c=b.sources.find(a=>a.sourceId===f.sourceId),h=(0,g.bz)(a.project,{sourceFile:c.sourceFile,sourceChunkIndex:c.chunkIndex,quote:c.quote,assertedText:`${b.name?.text??""} ${b.code?.text??""}`,usage:"normative-reference"});"eligible"===h.status?e=!0:d.push({code:"source-ineligible",useId:b.id,taskId:b.taskId,message:h.reason})}e&&!d.some(a=>a.useId===b.id)?s.push(b.id):d.push({code:p.some(a=>a.useId===b.id&&"rejected"===a.status)?"qualification-rejected":"qualification-unmeasured",useId:b.id,taskId:b.taskId,message:"真实引用索引不等于规范专业适用和现行采用已通过;该实际用途仍未核定"})}let u=new Map;for(let a of c.filter(a=>a.sources.length&&!d.some(b=>b.useId===a.id&&"bibliography-unmeasured"===b.code))){let b=a.sources[0],c=i([k(b.name.text),l(b.code.text)]),d=u.get(c)??{id:`normative-bibliography:${c.slice(0,24)}`,name:b.name.text,code:b.code.text,useIds:[],taskIds:[],sourceIds:[]};d.useIds.push(a.id),d.taskIds=[...new Set([...d.taskIds,a.taskId])],d.sourceIds=[...new Set([...d.sourceIds,...a.sources.map(a=>a.sourceId)])],u.set(c,d)}let v={version:"normative-use-register-v2-complete-actual-catalog",projectSnapshotId:a.project.snapshotId,sourcePolicyId:a.project.sourceVersionPolicy.policyId,taskHashes:Object.fromEntries(a.tasks.map(a=>[a.taskId,a.contentHash])),uses:c,bibliographicRows:[...u.values()],qualifications:p,verifiedUseIds:s,issues:d};return{...v,id:`normative-register:${i(v)}`}}function t(a,b){if(JSON.stringify(s({...b,qualifications:a.qualifications}))!==JSON.stringify(a))throw Error("规范引用登记与当前任务正文、来源、版本或采用资格不一致;必须重新编译,不能沿用旧编制依据")}function u(a,b){t(a,b);let c=new Set(a.uses.flatMap(a=>a.boundSources.map(a=>a.sourceId)));return{registerId:a.id,projectSnapshotId:a.projectSnapshotId,sourcePolicyId:a.sourcePolicyId,citationCatalog:a.uses.map(b=>({...b,qualification:a.qualifications.filter(a=>a.useId===b.id),verified:a.verifiedUseIds.includes(b.id),issues:a.issues.filter(a=>a.useId===b.id)})),bibliographicRows:a.bibliographicRows,issues:a.issues,sourceEvidence:(b.project.sourceControls??[]).filter(a=>c.has((0,e.vg)(a))),qualificationMeaning:"实际正文引用索引;未核专业适用和当前资格在issues保留,不作为采用许可"}}function v(a,b){let c=new Map(b.map(a=>[a.taskId,a.title]));return{说明:a.qualificationMeaning,引用条目:a.citationCatalog.map(a=>({出现小节:c.get(a.taskId)??a.taskId,载体:"text"===a.field?"正文段落":"cell"===a.field?"表格单元格":a.field,引用编号:a.code?.text??"",名称:a.name?.text??"",已独立核定:a.verified,官方目录状态:`${a.officialStatus.status}(${a.officialStatus.reason})`,原字引文:a.sources.map(a=>a.quote).filter(Boolean).slice(0,3),采用资格:a.qualification.map(a=>`${a.status}:${a.reason}`),未决:a.issues.map(a=>a.message)})),名称编号配对:a.bibliographicRows.map(a=>({名称:a.name,编号:a.code})),全局未决:a.issues.map(a=>a.message),来源原文:a.sourceEvidence}}},28068:(a,b,c)=>{c.d(b,{j:()=>d});function d(a){return(!a.temporalConstraint||"resolved"===a.temporalConstraint.status)&&Number.isFinite(a.confidence)&&a.confidence>=.75&&a.confidence<=1}},29281:(a,b,c)=>{c.d(b,{I:()=>i,R:()=>j});var d=c(96770),e=c(51342),f=c(47774);let g=globalThis,h=g.__customizeConfigStores??=new Map;function i(){(0,f.jF)();let a=(0,e.J0)();return h.has(a)||h.set(a,new d.ConfigStore(a)),h.get(a)}function j(){h.clear()}},29300:(a,b,c)=>{c.d(b,{O:()=>d});function d(a,b){return Math.max(1,Number.isFinite(a)&&a>0?Math.floor(a):Number.isSafeInteger(b)&&b>0?b:1)}},30055:(a,b,c)=>{c.d(b,{Fy:()=>h,aF:()=>f});let d={structure:"结构完整性",table:"表格质量",fact_consistency:"数值/事实一致性",evidence_coverage:"证据覆盖",professional_chain:"专业链条",control_loop:"控制闭环",format:"格式规范",style:"文风与模板化",scope:"范围与商务边界"},e={local_deterministic:"确定性修复器(已执行未收敛:核对该检测器与修复器口径是否同源)",llm_repairable:"LLM 定向修复(自动轮次已耗尽:按定位与建议人工修订,或补齐锚点证据后续修重试)",manual_review:"人工复核(自动修复链不消费该类缺陷)",not_repair_needed:"系统判定无需修复(若仍阻断:复核检测器是否误报)"};function f(a,b,c){let f=a.map((a,c)=>({index:c+1,category:a.category?d[a.category]:"其他",location:function(a,b){if(a.chapterId){let c=b?.find(b=>b.id===a.chapterId);if(c?.title)return a.sectionTitle?`${c.title} / ${a.sectionTitle}`:c.title}if(a.sectionTitle)return a.sectionTitle;let c=a.message.match(/^(\d{1,2}(?:\.\d{1,2}){1,3}[\s\u00a0]*[^\s::]{2,24})[^::]{0,24}[::]/u);return c?c[1].trim():"全文"}(a,b),problem:a.message,action:a.suggestion||"人工核对后修订正文;修订必须同步导出源(doc.json.markdown)并复核守恒,或基于检查点续修重试。",repairPath:a.repairability?e[a.repairability]:"自动修复链已执行(残留待人工定位)",detectorId:a.provenance?.detectorId}));return{suspended:!0,generatedAt:Date.now(),total:f.length,repairChainSummary:"已保存逐项问题与依据;实际自动处理范围以本轮执行回执为准",items:f,...c&&c.length>0?{declarations:c.map(a=>({location:a.declaredAt,problem:a.issue.message,reason:a.reason,declaredAtMs:a.declaredAtMs}))}:{}}}function g(a,b=80){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}function h(a,b=8){let c=a.items.slice(0,b).map(a=>`${a.index}.【${a.category}】${g(a.location,24)}:${g(a.problem)}`),d=a.total>b?`;…另 ${a.total-b} 项`:"",e=a.declarations&&a.declarations.length>0?`;另有写作期声明不可修 ${a.declarations.length} 项(${a.declarations.slice(0,3).map(a=>`${g(a.location,16)}:${g(a.problem)}`).join(";")})`:"";return`导出门禁未通过:存在 ${a.total} 项阻断。当前稿可查看,草稿导出将标记为非交付物——${a.repairChainSummary}。复核清单:${c.join(";")}${d}${e}(完整清单见执行阶段「Agent 最终门禁」与交付复核清单)`}},30839:(a,b,c)=>{c.d(b,{C:()=>n,e:()=>m});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(59948),j=c(7942);let k=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),l="native-execution-accounting-";async function m(a,b){let c=(0,i.pE)(a.diagnostics);try{return await b()}finally{let b=(0,h.randomUUID)(),d={version:1,id:b,contractId:a.contractId,originRunId:a.runId,delta:(0,i.sQ)(c,(0,i.pE)(a.diagnostics))};(0,j.tv)(a.directory,`${l}${b}.json`,{receipt:d,sha256:k(d)},a.runId),(0,i.P_)(a.diagnostics).add(b)}}function n(a){let b=g().dirname((0,j.HM)(a.directory,"author-resume-state.json",a.runId)),c=(0,i.P_)(a.diagnostics);for(let d of e().readdirSync(b).filter(a=>a.startsWith(l)&&a.endsWith(".json")).sort()){let f=JSON.parse(e().readFileSync(g().join(b,d),"utf8")),h=f.receipt;if(!h||1!==h.version||h.contractId!==a.contractId||h.originRunId!==a.runId||d!==`${l}${h.id}.json`||f.sha256!==k(h))throw Error("结构化修复执行消耗回执损坏或身份不一致");c.has(h.id)||((0,i.zh)(a.diagnostics,h.delta),c.add(h.id))}}},31037:(a,b,c)=>{c.d(b,{P:()=>h,y:()=>i});var d=c(77598),e=c(4456),f=c(11248),g=c(57656);function h(a,b){let c=b.resolutionRef?.winnerSourceFile??b.sourceFile,d=b.resolutionRef?.winnerSourceRef??b.sourceRef;if(!Object.hasOwn(a.sources,c)||d?.chunkIndex===void 0)return;let g=a.sourceControls?.find(a=>"verified-source-excerpt"===a.roleId&&a.sourceFile===c&&a.sourceRef?.chunkIndex===d.chunkIndex);return g&&(!d.sourceSpan||(0,f.dP)((0,e.wj)(g.value),(0,e.wj)(d.sourceSpan)))?g.factId:void 0}function i(a){return a.filter(a=>a.content.trim()).map(a=>{let b=`source-excerpt:${(0,d.createHash)("sha256").update(JSON.stringify([a.filePath,a.chunkIndex,a.content])).digest("hex").slice(0,24)}`;return{factId:b,fieldId:b,key:"冻结原文片段",fieldName:"冻结原文片段",value:a.content,sourceFile:a.filePath,roleId:"verified-source-excerpt",processingType:a.processingType,confidence:.9,sourceSemantics:(0,g.Q)(a.roleId,a.processingType),sourceRef:{filePath:a.filePath,roleId:"verified-source-excerpt",sectionTitle:a.sectionTitle,chunkIndex:a.chunkIndex}}})}},31698:(a,b,c)=>{c.d(b,{oG:()=>U,QP:()=>T,An:()=>S});var d=c(46026),e=c(12152),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(24299),l=c(44533),m=c(70949),n=c(4456),o=c(91977),p=c(34893),q=c(48479),r=c(7942),s=c(22157),t=c(80572),u=c(11248),v=c(14409),w=c(19898),x=c(31037),y=c(57656),z=c(91898),A=c(52686);function B(a,b,c){let d=a.readSnapshot(()=>{if(!Object.hasOwn(b.sources,c.filePath))throw Error("视图文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("视图解析身份已经变化,不能与旧项目绑定");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==w.CAD_SCENE_VERSION)throw Error("视图场景版本不兼容");if(!a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload)throw Error("视图图框身份不存在");return{actual:d,scene:a.loadCadScene(c.filePath)}}),e=(0,w.renderCadSourceView)(d.scene,c);return{...e,receipt:{...e.receipt,filePath:c.filePath,projectSnapshotId:b.snapshotId,parsedIdentity:d.actual.sha256,frameEntities:e.receipt.visibleAnnotations.length,recordsComplete:!0,completeScope:"projected-geometry-and-indexed-annotations-assigned-to-selected-frame",unassignedEntitiesIncluded:!1}}}function C(a,b,c){return a.readSnapshot(()=>{if(!c||"string"!=typeof c.filePath||!Object.hasOwn(b.sources,c.filePath))throw Error("CAD证据文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("CAD证据解析身份已经变化");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==w.CAD_SCENE_VERSION)throw Error("CAD证据结构版本不兼容");let f=a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload;if(!f)throw Error("CAD证据的真实图框不存在");if("string"!=typeof c.rawValue||!/^[+−-]?\d+(?:\.\d+)?$/u.test(c.rawValue.trim()))throw Error("CAD单值须为一个实际数字,不得取范围端点或解析显示字符串猜值");if("string"!=typeof c.valueEntityId||!Array.isArray(c.unitEntityIds)||!c.unitEntityIds.length||!Array.isArray(c.scopeEntityIds)||!c.scopeEntityIds.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let g=[c.valueEntityId,...c.unitEntityIds,...c.scopeEntityIds];if(g.length>12||g.some(a=>"string"!=typeof a)||new Set(g).size!==g.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let h=g.map(b=>{let d=a.queryMaterialEntityPage(c.filePath,{kind:"cad-entity",entityId:b,offset:0,limit:1}).records[0]?.payload;if(!d||d.sheet!==c.frameId||Array.isArray(d.sheetCandidates)&&d.sheetCandidates.length>1)throw Error("CAD实体不属于同一明确图框,不能跨图或跨歧义对象绑定");return d}),i=h[0];if("string"!=typeof i.text||(0,w.decodeCadString)(i.text).trim()!==c.rawValue.trim())throw Error("CAD数值不是实际标注的完整原文;未确认格式码或复合值须先解释");return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:d.sha256,sceneVersion:e.version,frame:f,value:i,unitAnnotations:h.slice(1,1+c.unitEntityIds.length),scopeAnnotations:h.slice(1+c.unitEntityIds.length),sourceQuality:e.quality,drawingCoordinateUnits:e.units,applicability:"not-evaluated",approvedForWriting:!1}})}async function D(a){let b=a.candidate;if(!b||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(b.attribute)||!["m","mm","cm"].includes(b.unit)||!b.objectName?.trim()||b.objectName.length>300||!b.condition?.trim()||b.condition.length>1e3)throw Error("几何候选属性、对象、工况或单位无效");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)(?:[((][^))]*[))])?$/u.test(b.objectName.trim())||/^(?:场地整平后高程|场地整平后标高|开挖面高程|开挖面标高|坑底标高|桩长|桩径)$/u.test(b.objectName.trim()))throw Error("图名、剖面编号或属性名不能代替实际施工部位,须继续核对区段/构件对应关系");let c=a.readEvidence(b.evidence);if(c.projectSnapshotId!==a.project.snapshotId||c.parsedIdentity!==a.project.sources[b.evidence.filePath]?.sha256)throw Error("几何证据与当前冻结项目不一致");if(!c.unitAnnotations.some(a=>"string"==typeof a.displayText&&a.displayText.trim()===b.unit))throw Error("候选单位没有实际单位文字实体支持,不能从INSUNITS或制图惯例猜值");if(!a.views.length||a.views.length>4||a.views.some(d=>d.receipt.parsedIdentity!==c.parsedIdentity||d.receipt.filePath!==c.filePath||d.receipt.frameId!==b.evidence.frameId||d.receipt.projectSnapshotId!==a.project.snapshotId))throw Error("几何复核视图不属于同一冻结来源身份");let d=new Set(a.views.flatMap(a=>a.receipt.visibleAnnotations.map(a=>a.id))),e=[b.evidence.valueEntityId,...b.evidence.unitEntityIds,...b.evidence.scopeEntityIds];if(e.some(a=>!d.has(a)))throw Error("数值、单位说明和部位实体必须在已提供视图中可核对,不能用未看的节点补成完整关系");let f=JSON.stringify({task:"独立审核图示工程属性,不代写正文",candidate:b,sourceEvidence:c,views:a.views.map(a=>({...a.receipt,sourceQuality:void 0,visibleAnnotations:a.receipt.visibleAnnotations.filter(a=>e.includes(a.id)),visibleAnnotationCount:a.receipt.visibleAnnotations.length,renderingLimitations:a.receipt.renderingLimitations})),instructions:'逐项确认实际数值、单位文字及其适用符号、真实施工部位、施工工况和属性。必须核对剖面编号与实际区段/构件的对应关系;只知道来源剖面、不知道施工部位不能confirmed。同图框相邻不证明属于同一对象,主体开挖面、板顶/支撑标高、垫层底和排水沟底不得混用;图框或图例无法辨认、单位只靠惯例、局部值推广全工程、阶段关系未核或被省略实体影响判断,返回unmeasured/rejected。不要由绘图坐标差计算工程值。只返回JSON {status:"confirmed"|"rejected"|"unmeasured",reason:"具体依据与限制"}。'}),g=await a.reviewer({prompt:f,images:a.views.map((a,b)=>({name:`同一真实图框局部${b+1}`,png:a.png}))});if(!g||!["confirmed","rejected","unmeasured"].includes(String(g.status))||"string"!=typeof g.reason||!g.reason.trim())throw Error("独立几何复核结果无效");return a.readEvidence(b.evidence),{candidate:b,proof:c,review:{status:g.status,reason:g.reason},sourceViewHashes:a.views.map(a=>(0,j.createHash)("sha256").update(a.png).digest("hex")),normalizedValue:"confirmed"===g.status?`${b.evidence.rawValue.trim()}${b.unit}`:null,approvedForWriting:"confirmed"===g.status,expertValidated:!1}}function E(a){if(!a.approvedForWriting||"confirmed"!==a.review.status||!a.normalizedValue)return;let{candidate:b,proof:c}=a;if(a.normalizedValue!==`${b.evidence.rawValue.trim()}${b.unit}`||64!==c.parsedIdentity.length)throw Error("已复核CAD属性的值或解析身份不一致");let d={ground_elevation:"场地整平后地面标高",pit_bottom_elevation:"主体开挖面标高",foundation_elevation:"基础控制标高",pile_length:"桩长",pile_diameter:"桩径"},e={parsedIdentity:c.parsedIdentity,frameId:b.evidence.frameId,valueEntityId:b.evidence.valueEntityId,rawValue:b.evidence.rawValue,unit:b.unit,unitEntityIds:[...b.evidence.unitEntityIds],scopeEntityIds:[...b.evidence.scopeEntityIds],condition:b.condition,reviewReason:a.review.reason,sourceViewHashes:[...a.sourceViewHashes]};return{factId:`cad-reviewed:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,b.attribute,b.objectName,a.normalizedValue,e])).digest("hex").slice(0,24)}`,fieldId:b.attribute,fieldName:d[b.attribute],key:d[b.attribute],objectName:b.objectName,value:a.normalizedValue,sourceFile:c.filePath,roleId:"cad-reviewed-geometry",processingType:"drawing",confidence:.9,sourceRef:{filePath:c.filePath,roleId:"cad-reviewed-geometry",sourceSpan:b.evidence.rawValue,cadInterpretation:e}}}let F=a=>a?JSON.parse(a.replace(/^\s*```(?:json)?\s*/u,"").replace(/\s*```\s*$/u,"")):void 0,G=["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"],H=(a,b,c)=>{if(!Object.hasOwn(b.sources,c)||a.parsedFileFingerprint(c).sha256!==b.sources[c].sha256)throw Error("CAD准备期间解析来源已变化")};async function I(a){let b,c=[],d=[],e=a.caller??A.rI,f=G.filter(b=>a.requestedAttributes.includes(b));if(!f.length||!a.filePaths.length)return{facts:c,readings:d,complete:!1};let g=a.read(b=>b.readSnapshot(()=>a.filePaths.map(c=>{H(b,a.project,c);let d=b.loadMaterialEntities(c,"cad-scene-quality")[0]?.payload;if(d?.version!==w.CAD_SCENE_VERSION)return{filePath:c,frames:[],complete:!1,reason:"结构版本尚未支持当前图示复核"};let e=b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:0,limit:24}),f=[...e.records];for(let a=24;a<Math.min(e.total,96);a+=24)f.push(...b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:a,limit:24}).records);return{filePath:c,frames:f.map(a=>{let b=a.payload;return{id:b.id,title:b.title,name:b.name,drawingNumber:b.drawingNumber}}),complete:f.length===e.total}})));if(g.every(a=>0===a.frames.length))return d.push(...g.map(a=>({filePath:a.filePath,status:"unmeasured",reason:a.reason??"当前解析没有可供图像复核的实际图框;须通过真实根实例读取标注并继续核对对象和工况,不能据此认定工程属性不存在",catalogComplete:a.complete}))),{facts:c,readings:d,complete:!1};let h=0;try{b=F(await e("你是工程资料读图智能体,选择真实图框以准备施工控制属性。",JSON.stringify({requestedAttributes:f,catalog:g,instructions:"只选择与请求属性有关的真实图框,最多四个;剖面、详图和平面按实际图名及部位综合判断。目录截断或资料尚未理解不代表没有参数。仅返回JSON {frames:[{filePath,frameId,attributes:[]}]};不得自造ID,不取数字、不写施工正文。"}),!0,{diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:2e3}));let i=b?.frames;if(!Array.isArray(i)||i.length>4)throw Error("读图选择没有返回有限的实际图框");let j=i.map(a=>{if(!g.some(b=>b.filePath===a.filePath&&b.frames.some(b=>b.id===a.frameId))||!Array.isArray(a.attributes)||!a.attributes.length||a.attributes.some(a=>!f.includes(a)))throw Error("读图选择超出实际目录或请求属性");return a});if(new Set(j.map(a=>JSON.stringify([a.filePath,a.frameId]))).size!==j.length)throw Error("读图选择重复,不能对同图框重复消耗模型预算");let k=j.map(a=>({selection:a,status:"unmeasured"}));d.push(...k);let l=0;await Promise.all(Array.from({length:Math.min(2,j.length)},async()=>{for(;l<j.length;){let b=l++,d=j[b];a.signal?.throwIfAborted();let f=k[b];try{let b=a.read(b=>b.readSnapshot(()=>{H(b,a.project,d.filePath);let c=b.queryMaterialEntityPage(d.filePath,{kind:"cad-frame",entityId:d.frameId,offset:0,limit:1}).records[0]?.payload,e=b.loadCadScene(d.filePath);if(!c)throw Error("图框身份失效,不能以不完整标注确认控制值");let f=c.polygon,g={minX:Math.min(...f.map(a=>a.x)),maxX:Math.max(...f.map(a=>a.x)),minY:Math.min(...f.map(a=>a.y)),maxY:Math.max(...f.map(a=>a.y))},h=e.annotations.filter(a=>a.sheet===d.frameId&&a.text.trim()).map(a=>({id:a.id,text:(0,w.projectCadAnnotationText)(a.text,a.entityType),position:a.position}));return{bounds:g,annotations:h}}));if(JSON.stringify(b.annotations).length>16e4)throw Error("图框文字超过当前完整理解预算,需进一步分区取证");let g=a.read(b=>B(b,a.project,{filePath:d.filePath,frameId:d.frameId,width:3200,fontPath:a.fontPath})),i=(b.bounds.minX+b.bounds.maxX)/2,j=(b.bounds.minY+b.bounds.maxY)/2,k=[{minX:b.bounds.minX,maxX:i,minY:j,maxY:b.bounds.maxY},{minX:i,maxX:b.bounds.maxX,minY:j,maxY:b.bounds.maxY},{minX:b.bounds.minX,maxX:i,minY:b.bounds.minY,maxY:j},{minX:i,maxX:b.bounds.maxX,minY:b.bounds.minY,maxY:j}].map(b=>a.read(c=>B(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath}))),l=await e("你是施工技术资料读图智能体。候选必须指向实际原始实体,不能靠数字相邻猜工程属性。",JSON.stringify({selection:d,sourceView:{...g.receipt,sourceQuality:void 0,visibleAnnotations:void 0},annotations:b.annotations,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),partitions:k.map((a,b)=>({imageIndex:b,viewport:a.receipt.viewport})),instructions:"四张图按左上、右上、左下、右下完整分区读取,属于同一真实图框。结合图形、标高符号、单位说明和文字定位实际施工部位与工况;剖面编号只是来源定位,objectName须写对应区段/构件等实际工程对象,不得仅用“4-4剖面”或“开挖面高程”充当施工对象。scopeEntityIds须同时包含真实部位与解释施工工况的实体。主体垫层底、支撑、结构板、排水沟底及局部刻槽不能互换。每个对象分别提出明确属性候选,最多六条。图例xx.xxx是示意占位符,不是工程值。单位须有m/mm/cm实际独立文字实体;裸数值须完整标注原文,不取范围端点,不据绘图坐标相减。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]},文件和图框由当前读取上下文固定,不重复抄写地址。图像无法辨认或部位关系未核清时保留unresolved,不编造结论。"}),!0,{files:k.map((a,b)=>({name:`同一实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});f.rawDiscovery=l;let m=F(l);f.discovery=m;let n=m?.candidates;if(!Array.isArray(n)||n.length>6)throw Error("图示候选超出本次理解预算或协议");let o=a=>{if(!a.evidence||void 0!==a.evidence.filePath&&a.evidence.filePath!==d.filePath||void 0!==a.evidence.frameId&&a.evidence.frameId!==d.frameId)throw Error("候选声明了本次读取之外的来源");let b=a.objectName?.split(/[//]/u).map(a=>a.trim()).filter(Boolean)??[],c=b.filter(a=>!/^[\dA-Za-z\s\-—~~]+剖面(?:图)?$/u.test(a)),e=b.length>1&&c.length&&c.length<b.length?c.join("/"):a.objectName;return{...a,objectName:e,evidence:{...a.evidence,filePath:d.filePath,frameId:d.frameId}}},p=n.map(o),q=p.flatMap((b,c)=>{try{if(!a.read(c=>C(c,a.project,b.evidence)).unitAnnotations.some(a=>String(a.displayText).trim()===b.unit))throw Error("单位未指向实际m/mm/cm文字实体");if(/^(?:[\dA-Za-z\s\-—~~]+)?剖面(?:图)?$/u.test(b.objectName))throw Error("仅定位来源剖面,尚未对应到实际施工区段");return[]}catch(a){return[{index:c,reason:a instanceof Error?a.message:String(a)}]}});if(q.length){let c=await e("你是工程读图智能体,纠正本次真实来源读取提案,不能编造数值、单位或部位。",JSON.stringify({selection:d,previousCandidates:p,rejectedCandidates:q,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),annotations:b.annotations,instruction:"只提出有实际图示支持的完整工程属性候选;xx.xxx是图例占位,范围不能取端点。剖面编号须对应实际区段/构件,单位须提供实际单位及说明实体,工况须区分主体和局部。无依据的保留unresolved;不要为补齐数量填数。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]}。"}),!0,{files:k.map((a,b)=>({name:`原实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});f.refinement={defects:q,raw:c};let g=F(c)?.candidates;if(!Array.isArray(g)||g.length>6)throw Error("写前图示纠正未返回完整候选,未执行属性准入");p=g.map(o)}let r=[];for(let g of(f.results=r,p))try{if(h>=12)throw Error("本轮图示候选复核预算已用完,该候选未测量");if(g.evidence?.filePath!==d.filePath||g.evidence?.frameId!==d.frameId||!d.attributes.includes(g.attribute))throw Error("图示候选跨来源、图框或属性");let f=a.read(b=>C(b,a.project,g.evidence)),i=[f.value,...f.unitAnnotations,...f.scopeAnnotations].map(a=>a.position),j=(function(a,b){if(!b.length||b.some(a=>!Number.isFinite(a.x)||!Number.isFinite(a.y)))throw Error("局部阅读缺少实际实体位置");let c=Math.max(a.maxX-a.minX,a.maxY-a.minY);if(!Number.isFinite(c)||c<=0)throw Error("图框范围无效");let d=[];for(let a of b){let b=d.find(b=>b.every(b=>Math.hypot(b.x-a.x,b.y-a.y)<=.24*c));b?b.push(a):d.push([a])}if(d.length>4)throw Error("数值与单位、部位的图示关系需要超过四个局部,保留未决而不截去限定");return d.map(a=>{let b=Math.min(...a.map(a=>a.x)),d=Math.max(...a.map(a=>a.x)),e=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.y)),g=Math.max(d-b+.08*c,.22*c),h=Math.max(f-e+.08*c,.28*g);return{minX:(b+d-(g=Math.max(g,.8*h)))/2,maxX:(b+d+g)/2,minY:(e+f-h)/2,maxY:(e+f+h)/2}})})(b.bounds,i).map(b=>a.read(c=>B(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath})));h+=1;let k=await D({project:a.project,candidate:g,views:j,readEvidence:b=>a.read(c=>C(c,a.project,b)),reviewer:async b=>F(await e("你是独立工程读图复核智能体,复验候选的真实适用关系。",b.prompt,!0,{files:b.images.map(a=>({name:a.name,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:3e3}))});r.push(k);let l=E(k);l&&c.push(l)}catch(b){a.signal?.throwIfAborted(),r.push({candidate:g,status:"unmeasured",reason:b instanceof Error?b.message:String(b)})}f.status="reviewed"}catch(b){a.signal?.throwIfAborted(),f.reason=b instanceof Error?b.message:String(b)}}}))}catch(c){a.signal?.throwIfAborted(),d.push({status:"unmeasured",selection:b,reason:c instanceof Error?c.message:String(c)})}return{facts:[...new Map(c.map(a=>[(0,j.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),a])).values()].sort((a,b)=>a.factId.localeCompare(b.factId)),readings:d,complete:!1}}var J=c(76908);let K=a=>!!a&&"object"==typeof a&&!Array.isArray(a),L=a=>"string"==typeof a&&!!a.trim(),M=a=>Array.isArray(a)?a.map(M):K(a)?Object.fromEntries(Object.keys(a).sort().filter(b=>void 0!==a[b]).map(b=>[b,M(a[b])])):a,N=a=>{let b;return b=JSON.stringify(M(a)),(0,j.createHash)("sha256").update(b).digest("hex")};var O=c(44753);let P="project-model-v11-shared-attributes-2026-10-13",Q=a=>(0,j.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function R(a){let b=(0,v.nD)(a)?.key,c=a.value;if("schedule_requirement"===b){let a=[...c.matchAll(/\d+(?:\.\d+)?\s*(?:日历天|工作日|天|个月|月)/gu)];1===a.length&&(c=a[0][0].replace(/\s+/gu,""))}return"owner"===b&&(c=c.split(/(?:办公|联系)?地址\s*[::]/u)[0].replace(/[((]\s*$/u,"").trim()),c===a.value?a:{...a,value:c,sourceRef:a.sourceRef?{...a.sourceRef,sourceSpan:a.sourceRef.sourceSpan??a.value}:void 0}}async function S(a){let b=a.global.input.signal;(0,s.Te)(b);let c=[...new Set(a.prepare.materialFilePaths)].sort(),f=(0,d.$)(a.prepare.projectRoot,c);if(f.length)throw Error(`项目资料解析检查未通过:${f.map(a=>a.message).join(";")}`);let h=await (0,l.E8)(a.prepare.projectRoot,c,b),x=c.flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({chapterId:"project-model",filePath:b,content:c.content,sectionTitle:c.sectionTitle,chunkIndex:c.chunkIndex,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),score:1,source:"parsed-project-model"}))),y=(0,l.VD)(a.prepare.projectRoot,a=>a.listIndexSourceStates(c)),A=(0,O.cW)(i().join((0,m.Gl)(a.prepare.projectRoot),"assets","source-editions")),B=(0,O.mb)(c.map(b=>({sourceFile:b,parsedSha256:h[b].sha256,sourceSha256:y.find(a=>a.relativePath===b).contentHash,sourceKind:a.prepare.kindByPath?.get(b),processingType:x.some(a=>a.filePath===b&&/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(a.content))?"table":a.understanding.fileProcessingByPath.get(b),chunks:x.filter(a=>a.filePath===b).map(a=>({chunkIndex:a.chunkIndex,content:a.content}))})),A.confirmations,A.assets),D=(0,o.Zh)(a.prepare.template,a.prepare.documentSpec).filter(b=>{let c=a.planning.requiredContentNeeds?.[b.name];return!c||"project-fact"===c.kind}),F=(0,k.x)(a.planning.generationDiagnostics),G=(0,e.C)("projectFacts"),H=i().join((0,m.Gl)(a.prepare.projectRoot),"assets","reviewed-cad"),M=g().existsSync(H)?g().readdirSync(H).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort().map(a=>[a,(0,j.createHash)("sha256").update(g().readFileSync(i().join(H,a))).digest("hex")]):[],S=Q({version:P,targets:D,localFactTargets:(0,o.Uy)(a.prepare.template,a.prepare.documentSpec),domain:a.prepare.domainProfile,prompt:a.prepare.factExtractionPromptTexts,modelIdentity:F,algorithmIdentity:G,registeredCadAssets:M,extractionTuning:{maxChars:(0,t.z)().factExtractionMaxChars}}),T=Q({sources:h,contextHash:S,sourceVersionPolicyId:B.policyId}),U=i().join((0,m.Gl)(a.prepare.projectRoot),"project-model-cache",`${T}.json`);if(G&&g().existsSync(U))try{let a=JSON.parse(g().readFileSync(U,"utf8")),b=a.data;if(!b||Q(b)!==a.sha256)throw Error("项目事实缓存内容校验不通过");if(b.version===P&&b.inputHash===T&&Q(b.sources)===Q(h)&&b.sourceVersionPolicy?.policyId===B.policyId&&Array.isArray(b.facts)&&Array.isArray(b.tables)&&Array.isArray(b.unresolvedFields))return{...b,cacheHit:!0}}catch{}let V=(0,n.d6)({evidence:x,template:a.prepare.template,spec:a.prepare.documentSpec,diagnostics:a.planning.generationDiagnostics,parsedOnly:!0}),W=a=>{let b=(0,v.nD)(a)?.key;return!b||!["project_name","project_scope","project_code","owner","project_location","foundation_support_form"].includes(b)||(0,n.R7)(b,a.value)},X=(0,s.lX)([...V.localFacts,...V.projectBasicFacts,...(0,v.UT)(x),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," "),d=/R(\d+)C(\d+)\s+(?:材料\/设备名称|材料名称|设备名称)\s*[::]\s*(.+?)\s+R\1C(\d+)\s+推荐品牌\s*[::]\s*(.+?)(?=\s+R\d+C\d+\b|$)/giu;for(let e of a.matchAll(d)){let a=e[3].trim(),d=e[5].trim();if(!a||!d||/^(?:无|暂无|未指定|见.*)$/u.test(d))continue;let f=`source-brand:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,e[1],e[4],a,d])).digest("hex").slice(0,24)}`;b.set(f,{factId:f,fieldId:"recommended_brand",fieldName:"推荐品牌",key:"推荐品牌",objectName:a,value:d,sourceFile:c.filePath,roleId:c.roleId||"parsed-table",processingType:c.processingType||"table",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-table",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,cellRange:`R${e[1]}C${e[4]}`,sourceSpan:e[0]}})}}return[...b.values()]}(x),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," ");for(let d of a.matchAll(/(?:新建|建设|建造)\s*(\d+)\s*栋\s*(\d+)\s*层(?:的)?\s*([\u4e00-\u9fff]{0,18}?(?:用房|厂房|住宅楼|教学楼|宿舍楼|办公楼|大厦))/gu)){if(/远期|设想|建议|目标/u.test(a.slice(Math.max(0,d.index-12),d.index)))continue;let e=d[3];for(let[a,f,g]of[["building_count","建设栋数",`${d[1]}栋`],["building_floors","建筑层数",`${d[2]}层`]]){let h=`source-scale:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,e,a,g])).digest("hex").slice(0,24)}`;b.set(h,{factId:h,fieldId:a,fieldName:f,key:f,objectName:e,value:g,sourceFile:c.filePath,roleId:c.roleId||"parsed-project-scope",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-project-scope",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,sourceSpan:d[0]}})}}}return[...b.values()]}(x)]).map(R).filter(W);X.push(...(0,J.Yn)(x,B));let Y=X.filter(a=>(0,z.p)(a).requiresTechnicalDecision&&/\.(?:dwg|dxf)$/iu.test(a.sourceFile)),Z=!1;if(Y.length){let c=[...new Set(Y.flatMap(a=>{let b=(0,v.nD)(a)?.key??a.fieldId??a.key;return"excavation_depth"===b?["ground_elevation","pit_bottom_elevation"]:"foundation_depth"===b?["ground_elevation","foundation_elevation"]:[b]}))],d={snapshotId:Q({inputHash:T,sources:h,stage:"cad-before-freeze"}),sources:h},e=function(a){let b,c=(b=a.generatedDir,i().join(b,"assets","reviewed-cad")),d=new Map,e=[];if(!g().existsSync(c))return{facts:[],reuseReceipts:e,complete:!1};for(let b of g().readdirSync(c).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort()){let f=i().join(c,b),h=b.slice(0,-5);try{let b=JSON.parse(g().readFileSync(f,"utf8"));if(!K(b)||b.id!==h||!K(b.data)||"reusable-reviewed-cad-v1-2026-10-08"!==b.data.version||b.contentHash!==N(b.data)||!K(b.data.provenance)||b.id!==N({version:b.data.version,provenance:b.data.provenance}))throw Error("CAD历史资产完整性校验失败");let{audit:c,results:i,modelMetadata:j}=function(a){let b;if(!K(a)||!L(a.kind)||!K(a.result))throw Error("历史CAD资产必须为完整审核envelope,不能仅提供事实或项目模型");if(L(a.model))b={scope:"original-audit",model:a.model};else if(K(a.llm)&&Array.isArray(a.llm.modelChoices)&&a.llm.modelChoices.some(a=>K(a)&&L(a.chosen)&&L(a.provider)))b={scope:"original-audit-call-ledger",llm:a.llm,perResultReviewerModel:"not-recorded"};else throw Error("历史CAD审核缺少原模型来源元数据,不能冒称本轮重新视觉审核");let c=(Object.hasOwn(a.result,"candidate")?[a.result]:Array.isArray(a.result.readings)?a.result.readings.flatMap(a=>K(a)&&Array.isArray(a.results)?a.results:[]):[]).filter(a=>K(a)&&!0===a.approvedForWriting);if(!c.length)throw Error("历史CAD资产没有完整核准结果,裸事实和未决候选不能复用");for(let a of c){if(!K(a.candidate)||!K(a.candidate.evidence)||!K(a.proof)||!K(a.review)||"confirmed"!==a.review.status||!L(a.review.reason)||!1!==a.expertValidated||!L(a.candidate.objectName)||!L(a.candidate.condition)||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(String(a.candidate.attribute))||!["m","mm","cm"].includes(String(a.candidate.unit))||!Array.isArray(a.sourceViewHashes)||!a.sourceViewHashes.length||a.sourceViewHashes.length>4||a.sourceViewHashes.some(a=>"string"!=typeof a||!/^[0-9a-f]{64}$/u.test(a))||!L(a.proof.projectSnapshotId)||!L(a.proof.parsedIdentity)||!/^[0-9a-f]{64}$/u.test(a.proof.parsedIdentity)||!K(a.proof.frame)||!K(a.proof.value)||!Array.isArray(a.proof.unitAnnotations)||!a.proof.unitAnnotations.length||!Array.isArray(a.proof.scopeAnnotations)||!a.proof.scopeAnnotations.length)throw Error("历史CAD核准缺少候选、图示证明、原审核或图像哈希");let b=a.candidate.evidence;if(!L(b.filePath)||!L(b.frameId)||!L(b.valueEntityId)||!L(b.rawValue)||!/^[+−-]?\d+(?:\.\d+)?$/u.test(b.rawValue.trim())||!Array.isArray(b.unitEntityIds)||!b.unitEntityIds.length||!Array.isArray(b.scopeEntityIds)||!b.scopeEntityIds.length||a.normalizedValue!==`${b.rawValue.trim()}${a.candidate.unit}`)throw Error("历史CAD核准的单值、单位或部位实体证据不完整");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)$/u.test(a.candidate.objectName.trim()))throw Error("历史核准尚未绑定实际施工对象,不能用来源图名代替")}return{audit:a,results:c,modelMetadata:b}}(b.data.originalAudit);if(b.data.provenance.originalAuditKind!==c.kind||N(b.data.provenance.originalModelMetadata)!==N(j))throw Error("历史审核来源或模型元数据与原始回执不一致");for(let[c,g]of i.entries()){if(a.requestedAttributes&&!a.requestedAttributes.includes(g.candidate.attribute))continue;let i=b.data.provenance,j={assetId:h,assetPath:f,...i,candidateIndex:c,originalProjectSnapshotId:g.proof.projectSnapshotId,status:"rejected",reason:"",currentVisionReviewPerformed:!1,expertValidated:!1};try{!function(a,b,c){let d=a.candidate.evidence,e=c(d),f=a.proof;if(e.projectSnapshotId!==b.snapshotId||e.parsedIdentity!==b.sources[d.filePath]?.sha256||f.parsedIdentity!==e.parsedIdentity||f.filePath!==d.filePath)throw Error("历史CAD审核的冻结解析指纹与当前来源不一致");let g=a=>({filePath:a.filePath,parsedIdentity:a.parsedIdentity,sceneVersion:a.sceneVersion,frame:a.frame,value:a.value,unitAnnotations:a.unitAnnotations,scopeAnnotations:a.scopeAnnotations,drawingCoordinateUnits:a.drawingCoordinateUnits});if(N(g(e))!==N(g(f)))throw Error("历史CAD审核的图框、量值、单位或范围实体与当前证明不一致");if(!e.unitAnnotations.some(b=>"string"==typeof b.displayText&&b.displayText.trim()===a.candidate.unit))throw Error("历史CAD单位没有当前实际单位文字实体支持");if(!E(a))throw Error("历史审核没有准入可写事实")}(g,a.project,a.readEvidence);let b=E(g);d.set(b.factId,b),j.status="reused",j.reason="当前冻结解析与实际实体证明均与历史完整图示审核一致;保留原审核,不宣称本轮模型重新看图",j.factId=b.factId,j.verification="current-entities-match-historical-review"}catch(a){j.reason=a instanceof Error?a.message:String(a)}e.push(j)}}catch(a){e.push({assetId:h,assetPath:f,status:"rejected",reason:a instanceof Error?a.message:String(a),currentVisionReviewPerformed:!1,expertValidated:!1})}}return{facts:[...d.values()],reuseReceipts:e,complete:!1}}({generatedDir:(0,m.Gl)(a.prepare.projectRoot),project:d,requestedAttributes:c,readEvidence:b=>(0,l.VD)(a.prepare.projectRoot,a=>C(a,d,b))});X.push(...e.facts);let f=[...new Set(Y.map(a=>a.sourceFile))].filter(a=>!c.every(b=>e.facts.some(c=>c.sourceFile===a&&c.fieldId===b)));a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"cad-historical-reuse.json",e,a.global.input.runId);let j=f.length?await I({project:d,filePaths:f,requestedAttributes:c,diagnostics:a.planning.generationDiagnostics,signal:b,read:b=>(0,l.VD)(a.prepare.projectRoot,b),fontPath:g().existsSync("/System/Library/Fonts/STHeiti Light.ttc")?"/System/Library/Fonts/STHeiti Light.ttc":void 0}):void 0;j&&(X.push(...j.facts),Z=!j.facts.length||!j.readings.length||j.readings.some(a=>"reviewed"!==a.status||Array.isArray(a.results)&&a.results.some(a=>"unmeasured"===a.status||a.review?.status==="unmeasured")),a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"cad-writing-preparation.json",j,a.global.input.runId))}let $=b=>i().join((0,m.Gl)(a.prepare.projectRoot),"project-model-cache",`source-${Q([b,h[b].sha256,S])}.json`),_=a=>{let b=(0,u.K3)(a.value);return!!b&&x.some(c=>c.filePath===a.sourceFile&&(a.sourceRef?.chunkIndex===void 0||a.sourceRef.chunkIndex===c.chunkIndex)&&(0,u.K3)(c.content).includes(b))};for(let a of c)if(G)try{let b=JSON.parse(g().readFileSync($(a),"utf8"));Q(b.data)===b.sha256&&Array.isArray(b.data)&&X.push(...b.data.filter(_).map(R).filter(W))}catch{}let aa=D.filter(a=>a.required&&!X.some(b=>(0,n.PV)(b,a))),ab=new Map;for(let b of aa)ab.set(b.id,x.filter(a=>(0,o.I2)(a,b)).sort((c,d)=>{let e=c=>(0,w.carrierStrength)((0,w.domainForAttribute)(b.name),(0,w.resolveCarrier)({kind:a.prepare.kindByPath?.get(c.filePath)??c.processingType??"other",section:c.sectionTitle}));return e(d)-e(c)||d.content.split(b.name).length-c.content.split(b.name).length||c.filePath.localeCompare(d.filePath)||c.chunkIndex-d.chunkIndex}));let ac=[...new Map(aa.flatMap(a=>ab.get(a.id)??[]).map(a=>[`${a.filePath}\0${a.chunkIndex}\0${a.sectionTitle}\0${a.content}`,a])).values()];a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"project-fact-extraction-scope.json",{projectAttributeTargets:D,missingAttributes:aa.map(a=>({...a,candidateCount:ab.get(a.id)?.length??0})),otherContentDuties:(0,o.Uy)(a.prepare.template,a.prepare.documentSpec).filter(a=>!D.some(b=>b.id===a.id)),selectedChunks:ac.length,selectedSourceChars:ac.reduce((a,b)=>a+b.content.length,0),sourceFiles:c.length,structuredTables:V.structuredTables.length,boundary:"完整解析来源、结构化表与非共同属性义务保留;非共同属性不是全局待填单值字段,也不表示正文已完成"},a.global.input.runId);let ad=!1;if(ac.length>0){let c={...a.prepare.template,chapters:a.prepare.template.chapters.map(a=>({...a,requiredFacts:a.requiredFacts.filter(a=>aa.some(b=>b.id===a||b.name===a))}))},d=a.prepare.documentSpec?{...a.prepare.documentSpec,factFields:a.prepare.documentSpec.factFields.filter(a=>aa.some(b=>b.id===a.id))}:void 0,e=await (0,n.OQ)(ac,a.prepare.factExtractionPromptTexts,c,d,b,a.planning.generationDiagnostics,b=>{(0,q.Wl)(a,{batch:"generation.understanding",stage:{type:"fact_extraction",roleId:"project-attribute-extraction",status:"running",message:"done"===b.phase?`共同属性第${b.index}/${b.total}批已核验,累计${b.factsSoFar}条`:`共同属性第${b.index}/${b.total}批${"waiting"===b.phase?"仍在读取":"开始读取"},本批${b.batchChars}字符`}}),a.global.emitProgress()},{cache:(0,p.G)(i().join((0,m.Gl)(a.prepare.projectRoot),"source-fact-response-cache"),a.planning.generationDiagnostics,"literal-source-fact-response-v2"),sourceIdentities:h,onReceipt:b=>{a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),`source-fact-batch-${b.index}.json`,b,a.global.input.runId)}});(0,s.Te)(b);let f=(0,s.lX)(e.facts).filter(_).map(R).filter(W);for(let a of(X.push(...f),ad=e.stages.some(a=>"failed"===a.status),new Set(f.map(a=>a.sourceFile)))){if(!G||!h[a])continue;let b=[...new Map(X.filter(b=>b.sourceFile===a&&_(b)).map(a=>[Q([a.fieldId,a.key,a.objectName,a.value,a.sourceRef]),a])).values()],c=$(a);g().mkdirSync(i().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.tmp`;g().writeFileSync(d,JSON.stringify({data:b,sha256:Q(b)})),g().renameSync(d,c)}}if(Q((0,l.Y8)(a.prepare.projectRoot,c))!==Q(h))throw Error("写前理解期间解析资料已变化,不能将旧候选与新来源一起冻结");let ae={version:P,inputHash:T,sources:h,sourceVersionPolicy:B,facts:X,tables:V.structuredTables,unresolvedFields:aa.filter(a=>!X.some(b=>(0,n.PV)(b,a))).map(a=>({id:a.id,name:a.name,status:"unmeasured",candidateCount:ab.get(a.id)?.length??0,phase:ab.get(a.id)?.length?"attribute-extraction":"source-location",provesMissingSource:!1,candidateLocations:(ab.get(a.id)??[]).map(a=>({sourceFile:a.filePath,chunkIndex:a.chunkIndex})),reason:ab.get(a.id)?.length?"已有相关解析原文,属性理解尚未完成;不能凭抽取失败认定原文缺料":"当前字段关键词尚未定位原文,未据此判定全库缺料"})),cacheHit:!1};if(G&&!ad&&!Z){g().mkdirSync(i().dirname(U),{recursive:!0});let a=`${U}.${process.pid}.tmp`;g().writeFileSync(a,JSON.stringify({data:ae,sha256:Q(ae)})),g().renameSync(a,U)}return ae}function T(a){let b=a.understanding.preparedProjectFacts;if(!b)throw Error("项目事实准备尚未完成,不能开始写作");if((0,O.gM)(b.sourceVersionPolicy),(0,O.cW)(i().join((0,m.Gl)(a.prepare.projectRoot),"assets","source-editions")).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("理解期间来源发行确认已变化,不能冻结旧用途账");let c=Object.keys(b.sources).flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({filePath:b,content:c.content,chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,chapterId:"project-source-assertions",score:1,source:"complete-parsed-source",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b)}))),d=JSON.parse(JSON.stringify({version:P,inputHash:b.inputHash,sources:b.sources,sourceVersionPolicy:b.sourceVersionPolicy,facts:a.understanding.arbitratedFacts.map(b=>(0,y.G5)(b,{roleId:a.understanding.fileRoleByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile),processingType:a.understanding.fileProcessingByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile)})),sourceControls:(0,x.y)(c),factsModel:a.understanding.preliminaryFactsModel,unresolvedFields:b.unresolvedFields,workPackages:a.blueprint?.integratedBlueprint?.outline.projectWorkPackages??[]})),e={...d,snapshotId:Q(d)};return a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"project-model.json",e,a.global.input.runId),a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"source-version-policy.json",e.sourceVersionPolicy,a.global.input.runId),a.understanding.arbitratedFacts=JSON.parse(JSON.stringify(e.facts)),a.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(e.factsModel)),e}function U(a,b){if(b.version!==P)throw Error("项目事实快照版本失配,须按当前语义属性重新准备,不能转换旧快照用于生成");if(!b.sourceVersionPolicy)throw Error("项目恢复缺少冻结来源版本用途账,须按当前来源重新准备");if((0,O.gM)(b.sourceVersionPolicy),(0,O.cW)(i().join((0,m.Gl)(a),"assets","source-editions")).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("来源发行确认资产已变化,原项目快照不能继续复用");let{snapshotId:c,...e}=b;if(Q(e)!==c)throw Error("项目事实快照已被改写,不能沿用原快照身份");if(0===Object.keys(b.sources).length){if(b.facts.length>0)throw Error("项目事实没有解析来源身份,不能进入写作或交付评价");return}let f=(0,d.$)(a,Object.keys(b.sources));if(f.length)throw Error(`写作资料当前解析状态未通过:${f.map(a=>a.message).join(";")};保留草稿,不能使用历史解析继续写作或交付评价`);if(Q((0,l.Y8)(a,Object.keys(b.sources)))!==Q(b.sources))throw Error("写作期间解析资料已经变更,当前事实快照已过期;保留草稿并使用新快照重新规划受影响任务")}},31719:(a,b,c)=>{c.d(b,{x:()=>h,G:()=>i});var d=c(77598),e=c(19898);function f(a,b){let c=g(a,b).geometryGraph.entities[0],d=a=>c.pairs.find(b=>b[0]===a)?.[1],e=d("5"),f=e??`ordinal-${c.ordinal}`;if(e&&1!==a.geometryGraph.entities.filter(a=>a.pairs.some(a=>"5"===a[0]&&a[1]===e)).length)throw Error("CAD根源handle不唯一,不能猜所属实例标注");return{rootInstanceId:b,sourceOrdinal:c.ordinal,entityType:c.type,sourceHandle:e??null,ownerHandle:d("330")??null,blockName:["INSERT","DIMENSION"].includes(c.type)?d("2")??null:null,instancePrefix:["INSERT","DIMENSION"].includes(c.type)?[f]:[],reference:f}}function g(a,b){if(!/^(?:0|[1-9]\d*)$/u.test(b)||!Number.isSafeInteger(Number(b)))throw Error("CAD根实例身份无效");let c=a.geometryGraph.entities.findIndex(a=>String(a.ordinal)===b);if(c<0)throw Error("CAD根实例不属于该冻结图纸");let d=a.geometryGraph.entities[c];if(["SECTION","ENDSEC","ENDBLK","SEQEND","VERTEX"].includes(d.type))throw Error("源marker或序列成员不是独立几何根,须定位实际POLYLINE等根实例");let e=[d];if("POLYLINE"===d.type){let b=c+1;for(;a.geometryGraph.entities[b]?.type==="VERTEX";)e.push(a.geometryGraph.entities[b++]);if(a.geometryGraph.entities[b]?.type!=="SEQEND")throw Error("POLYLINE源序列未闭合,不能截去后续顶点冒充完整几何");e.push(a.geometryGraph.entities[b])}return{...a,geometryGraph:{...a.geometryGraph,entities:e}}}class h extends Error{constructor(...a){super(...a),this.name="CadQueryInputError"}}function i(a,b,c){return a.readSnapshot(()=>{let i=b.sources[c.filePath];if(!i)throw Error("图纸不属于本轮冻结项目");let j=a.parsedFileFingerprint(c.filePath);if(j.sha256!==i.sha256)throw Error("图纸解析资产已变化,不能把新图框或坐标绑定到旧项目快照;须重新冻结项目");let k=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(!k?.version)throw Error("该图纸尚未按实际块实例与图框解析;旧图带不能作为图框身份,须重新解析");if(k.version!==e.CAD_SCENE_VERSION)throw Error("图纸结构版本与当前读取协议不兼容,须重新解析并冻结项目");let l=c.kind??"frames";if(!["frames","annotations","geometry","instances"].includes(l))throw new h("CAD查询类型无效");if(void 0!==c.rootInstanceId&&(!["geometry","annotations"].includes(l)||"string"!=typeof c.rootInstanceId))throw new h("rootInstanceId只用于定位目录返回的实际几何或标注根");if("instances"===l&&(c.frameId||c.entityId||c.query||c.placement||void 0!==c.textOnly||c.order||"full"===c.detail))throw new h("instances仅分页读取实际根目录,不接受图框、标注或全文筛选");if(c.rootInstanceId&&c.placement)throw new h("根实例几何投影不使用图框块归属筛选");if(void 0!==c.detail&&(!["full","catalog"].includes(c.detail)||"catalog"===c.detail&&!["frames","instances"].includes(l)))throw new h("目录投影只用于frames或instances,不能省略标注或几何细节");let m="annotations"===l&&!c.frameId&&!c.entityId&&!c.rootInstanceId&&"string"==typeof c.query&&!!c.query.trim();if(["annotations","geometry"].includes(l)&&!c.frameId&&!c.entityId&&!c.rootInstanceId&&!m)throw new h("标注与几何查询须明确实际frameId或entityId;无图框时按instances真实根或非空实际字面query定位标注候选,不能全图猜对象");let n=c.frameId?a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload:void 0;if(c.frameId&&!n)throw new h("图框身份不属于该冻结图纸");if(void 0!==c.placement&&!["all","drawing-space","frame-instance"].includes(c.placement))throw new h("CAD块归属筛选无效");if(c.placement&&"all"!==c.placement&&(!c.frameId||"frames"===l))throw new h("块归属筛选须选择实际图框的标注或几何");if(void 0!==c.textOnly&&("boolean"!=typeof c.textOnly||"annotations"!==l))throw new h("文字筛选只用于标注");if(void 0!==c.order&&(!["source","position"].includes(c.order)||"annotations"!==l))throw new h("位置排序只用于标注");let o=n?.source,p=c.placement&&"all"!==c.placement?{path:o?.instancePath,handle:o?.handle,included:"frame-instance"===c.placement}:void 0;if(p&&(!Array.isArray(p.path)||!p.path.length||p.path.some(a=>"string"!=typeof a)))throw Error("图框实际块路径不完整,不能猜筛选归属");let q=c.offset??0,r=c.limit??8,s="instances"===l?function(a,b,c,d){let e=a.queryMaterialEntityPage(b,{kind:"cad-geometry-root",offset:c,limit:d});return{...e,records:e.records.map(a=>{let b=a.payload,c=b.pairs;if(!Number.isSafeInteger(b.ordinal)||0>Number(b.ordinal)||a.entityKey!==String(b.ordinal)||!Array.isArray(c)||c.some(a=>!Array.isArray(a)||2!==a.length||a.some(a=>"string"!=typeof a)))throw Error("CAD根实例身份或原始组码不完整,须重新解析");let d=a=>c.find(b=>b[0]===a)?.[1]??null;return{...a,payload:{rootInstanceId:a.entityKey,sourceOrdinal:b.ordinal,entityType:b.type,sourceHandle:d("5"),ownerHandle:d("330"),blockName:["INSERT","DIMENSION"].includes(String(b.type))?d("2"):null,layout:d("410"),sourceMarker:["SECTION","ENDSEC","ENDBLK","SEQEND"].includes(String(b.type)),sequenceMember:["VERTEX","SEQEND"].includes(String(b.type))}}})}}(a,c.filePath,q,r):m?function(a,b,c){if("string"!=typeof c.query||!c.query.trim())throw Error("无图框标注定位须提供非空实际字面query");let d=a.loadCadScene(b),e=a.queryMaterialEntityPage(b,{kind:"cad-entity",...c});return{...e,records:e.records.map(a=>{let b=a.payload,c=b.source,e=d.geometryGraph.entities.filter(a=>{if(["SECTION","ENDSEC","ENDBLK","SEQEND","VERTEX"].includes(a.type))return!1;let d=a.pairs.find(a=>"5"===a[0])?.[1],e=d??`ordinal-${a.ordinal}`;return 0===c.instancePath.length&&c.ordinal===a.ordinal||["INSERT","DIMENSION"].includes(a.type)&&c.instancePath[0]===e||"INSERT"===a.type&&"ATTRIB"===b.entityType&&0===c.instancePath.length&&void 0!==d&&c.ownerHandle===d}).flatMap(a=>{try{let{reference:b,...c}=f(d,String(a.ordinal));return[c]}catch{return[]}});return{...a,rootBindings:e,rootBindingStatus:e.length?"source-bound":"unmeasured"}})}}(a,c.filePath,{query:c.query,textOnly:c.textOnly,order:c.order,offset:q,limit:r}):"annotations"===l&&void 0!==c.rootInstanceId?function(a,b,c){if(!Number.isSafeInteger(c.offset)||c.offset<0||!Number.isSafeInteger(c.limit)||c.limit<1||c.limit>24)throw Error("结构记录分页范围无效");let d=a.loadCadScene(b),g=f(d,c.rootInstanceId),h=d.annotations.filter(a=>{let b=a.source,d=b.ordinal===g.sourceOrdinal&&0===b.instancePath.length,f=g.instancePrefix.length>0&&b.instancePath[0]===g.reference,h="INSERT"===g.entityType&&"ATTRIB"===a.entityType&&0===b.instancePath.length&&null!==g.sourceHandle&&b.ownerHandle===g.sourceHandle;return(d||f||h)&&(!c.frameId||a.sheet===c.frameId)&&(!c.entityId||a.id===c.entityId)&&(!c.query||(0,e.projectCadAnnotationText)(a.text,a.entityType).includes(c.query))&&(!c.textOnly||!!(0,e.projectCadAnnotationText)(a.text,a.entityType).trim())});"position"===c.order&&(h=h.map((a,b)=>({annotation:a,index:b})).sort((a,b)=>(b.annotation.position.y??0)-(a.annotation.position.y??0)||(a.annotation.position.x??0)-(b.annotation.position.x??0)||a.index-b.index).map(a=>a.annotation));let{reference:i,...j}=g;return{total:h.length,rootBinding:j,records:h.slice(c.offset,c.offset+c.limit).map(a=>({entityKind:"cad-entity",entityKey:a.id,payload:{...a,displayText:(0,e.projectCadAnnotationText)(a.text,a.entityType)}}))}}(a,c.filePath,{rootInstanceId:c.rootInstanceId,frameId:c.frameId,entityId:c.entityId,query:c.query,textOnly:c.textOnly,order:c.order,offset:q,limit:r}):"geometry"===l&&void 0!==c.rootInstanceId?function(a,b,c){if(!Number.isSafeInteger(c.offset)||c.offset<0||!Number.isSafeInteger(c.limit)||c.limit<1||c.limit>24)throw Error("结构记录分页范围无效");let d=g(a.loadCadScene(b),c.rootInstanceId),f=[],h=0;for(let a of(0,e.iterateCadSceneGeometry)(d))if((!c.frameId||a.sheet===c.frameId)&&(!c.entityId||a.id===c.entityId)&&!c.query&&!(h++<c.offset)){if(f.length===c.limit)return{total:null,records:f};f.push({entityKind:"cad-geometry",entityKey:a.id,payload:a})}return{total:h,records:f}}(a,c.filePath,{rootInstanceId:c.rootInstanceId,frameId:c.frameId,entityId:c.entityId,query:c.query,offset:q,limit:r}):"geometry"===l?a.queryCadGeometryPage(c.filePath,{frameId:c.frameId,entityId:c.entityId,query:c.query,offset:q,limit:r,framePlacement:p}):a.queryMaterialEntityPage(c.filePath,{kind:"frames"===l?"cad-frame":"cad-entity",..."frames"!==l&&c.frameId?{frameId:c.frameId}:{},entityId:c.entityId,query:c.query,offset:q,limit:r,framePlacement:p,textOnly:c.textOnly,order:c.order}),t=s.records.map(a=>"frames"===l&&"catalog"===c.detail?{...a,payload:Object.fromEntries(["id","name","title","drawingNumber","layout"].filter(b=>Object.hasOwn(a.payload,b)).map(b=>[b,a.payload[b]]))}:a),u=q+t.length;return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:j.sha256,sceneVersion:k.version,kind:l,frameId:c.frameId??null,rootInstanceId:c.rootInstanceId??null,projection:"instances"===l?"catalog":c.detail??"full",selection:{placement:c.placement??"all",textOnly:c.textOnly??!1,order:c.order??"source"},sceneQuality:k.quality?{...k.quality,issues:void 0,issueCount:k.quality.issues?.length??0,issueReasons:[...new Set(k.quality.issues?.map(a=>a.reason)??[])],detailsComplete:!1}:null,units:k.units,records:t,..."frames"===l||"instances"===l?{directoryState:{scope:"indexed-cad-directory",complete:0===q&&null!==s.total&&u>=s.total&&!c.frameId&&!c.entityId&&!c.query,recordCount:s.total}}:{},...s.rootBinding?{rootBinding:s.rootBinding}:{},..."annotations"===l?{readingSourceIds:t.map(a=>({entityId:a.payload.id,sourceId:`cad-read:${(0,d.createHash)("sha256").update(JSON.stringify([c.filePath,j.sha256,c.rootInstanceId,a.payload.id,a.payload.source])).digest("hex")}`}))}:{},total:s.total,totalMeasured:null!==s.total,offset:q,nextOffset:null===s.total||u<s.total?u:null,complete:0===q&&null!==s.total&&u>=s.total,completeScope:m?"matching-literal-candidates":"geometry"===l?"matching-block-instance-projection":void 0!==c.rootInstanceId?"matching-root-instance-annotations":"matching-indexed-records",sourceInterpretationComplete:k.quality?.complete===!0,engineeringDecision:"not-evaluated",note:"标注text保留源字段,displayText是同一字段按DXF存储及显示规则确定性解码的文字;query定位displayText的字面子串,不是语义检索或多关键词并集。数字标注常没有属性名,零命中应取消筛选读取所选图框,不证明没有该参数。分页按实际nextOffset继续,不能按limit自行跳页。坐标、图框及尺寸尚未判定工程属性、部位和工况;范围与约数不能据此变成准确施工值。未返回或尚未支持的结构不代表图纸没有。"}})}},32460:(a,b,c)=>{c.d(b,{MZ:()=>l,TF:()=>j,cG:()=>k,yY:()=>i});var d=c(77598),e=c(95393),f=c(7942),g=c(56999);let h=new WeakMap;function i(a,b){b.runId&&h.set(a,{generatedDir:b.generatedDir,runId:b.runId,contractId:b.contract.id,projectSnapshotId:b.contract.projectSnapshotId,tasks:new Map(b.contract.sections.map(a=>[JSON.stringify([a.chapterId,a.title]),a.id])),expectedTaskIds:b.contract.sections.map(a=>a.id),records:[],candidates:[],rawDrafts:[],previousDrafts:new Map})}function j(a,b){let c=a&&h.get(a);if(!c)return;let i=c.tasks.get(JSON.stringify([b.chapterId,b.blockTitle])),j=i??`unplanned:${(0,d.createHash)("sha256").update(JSON.stringify([b.chapterId,b.blockTitle])).digest("hex").slice(0,24)}`,k=c.records.filter(a=>a.taskId===j).length,l=(0,d.randomUUID)();for(let a of Array.isArray(b.response?.rawToolCalls)?b.response.rawToolCalls:b.response?.toolCalls??[]){let b;if(a?.name!=="submit_author_task"||"string"!=typeof a.arguments)continue;try{b=(0,e.parseJsonWithoutDuplicateKeys)(a.arguments).output}catch{}let d=c.previousDrafts.get(j),f=(0,g.Br)(d,b),h=b&&"object"==typeof b?b.revisionReason:void 0;c.rawDrafts.push({taskId:j,callId:l,toolCallId:"string"==typeof a.id?a.id:null,ordinal:c.rawDrafts.filter(a=>a.taskId===j).length,declaredReason:"string"==typeof h?h:null,comparison:f}),(0,g.IO)(b)&&c.previousDrafts.set(j,structuredClone(b))}let m=(0,f.tv)(c.generatedDir,`author-response-${l}.json`,{version:1,runId:c.runId,contractId:c.contractId,projectSnapshotId:c.projectSnapshotId,taskId:j,belongsToFrozenTask:!!i,callId:l,ordinal:k,turn:b.turn,firstResponse:0===k,responseReceived:!!b.response,rawText:b.response?.rawContent??b.response?.content??null,request:b.request??null,rawToolCalls:b.response?.rawToolCalls??null,droppedToolCalls:b.response?.droppedToolCalls??null,appliedRequest:b.response?.requestMetadata??null,toolCalls:b.response?.toolCalls??[],modelResponse:b.response?.responseMetadata??null,c0Qualification:"unmeasured"},c.runId);return c.records.push({taskId:j,callId:l,ordinal:k,responseReceived:!!b.response,...m}),l}function k(a,b,c,e){let g=a&&h.get(a);if(!g)return;if(b.output.contractId!==g.contractId||b.output.projectSnapshotId!==g.projectSnapshotId||!g.expectedTaskIds.includes(b.output.taskId))throw Error("结构化候选的归档身份不属于当前运行");let i=g.candidates.filter(a=>a.taskId===b.output.taskId).length,j=(0,f.tv)(g.generatedDir,`author-candidate-${(0,d.randomUUID)()}.json`,{version:1,runId:g.runId,contractId:g.contractId,taskId:b.output.taskId,ordinal:i,rawCallId:c??null,protocolComplete:!0,qualityMeasured:!1,candidate:b,...e?{protocolCorrection:e}:{}},g.runId);g.candidates.push({taskId:b.output.taskId,ordinal:i,rawCallId:c??null,...j,contentHash:b.contentHash,hasContent:b.output.units.length>0})}function l(a){let b=h.get(a);if(!b)return;let c={expectedTasks:b.expectedTaskIds.length,observedTasks:new Set(b.records.filter(a=>b.expectedTaskIds.includes(a.taskId)).map(a=>a.taskId)).size,rawResponses:b.records.filter(a=>a.responseReceived).length};return(0,f.tv)(b.generatedDir,"author-candidates.json",{version:1,runId:b.runId,contractId:b.contractId,expectedTaskIds:b.expectedTaskIds,records:b.records,structuredCandidates:b.candidates,rawDrafts:b.rawDrafts,preAcceptanceWriting:{meaningfulDrafts:b.rawDrafts.filter(a=>"unmeasured"!==a.comparison.kind).length,unchangedBodyCorrections:b.rawDrafts.filter(a=>"unchanged-body"===a.comparison.kind).length,formattingOnlyChanges:b.rawDrafts.filter(a=>"formatting-only"===a.comparison.kind).length,contentChanges:b.rawDrafts.filter(a=>"content-changed"===a.comparison.kind).length,unmeasuredResponses:b.rawDrafts.filter(a=>"unmeasured"===a.comparison.kind).length,addedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.addedChars,0),removedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.removedChars,0),replacedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.replacedChars,0),scope:"actual-raw-writing-before-admission",professionalQualityMeasured:!1},...c,firstPassAndSemanticReworkMeasured:!1},b.runId),c}},34594:(a,b,c)=>{c.d(b,{D5:()=>i,vO:()=>h,y3:()=>g});var d=c(12866);let e=a=>"string"==typeof a?a.replace(/\r\n/gu,"\n").split("\n").map(a=>a.trim()).join("\n"):Array.isArray(a)?a.map(e):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,e(b)])):a,f=(a,b)=>JSON.stringify(e(a))===JSON.stringify(e(b));function g(a,b){let c=a.sections.map(a=>a.id);if(b.contractId!==a.id||b.projectSnapshotId!==a.projectSnapshotId||JSON.stringify(b.expectedTaskIds)!==JSON.stringify(c))throw Error("返工账不属于当前固定合同");let g=a.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0);if(b.rework.fixedReferenceUnits!==g)throw Error("返工职责分母已改变");let h=new Map,i=new Map,j=new Map,k=new Map,l=new Set,m=0,n=0,o=0,p=0;for(let d of b.revisions){if(!c.includes(d.taskId)||l.has(d.id)||!d.reason?.trim()||d.beforeHash!==(j.get(d.taskId)??null)||!d.afterHash||!["first-candidate","formatting","content"].includes(d.kind)||[d.addedChars,d.removedChars,d.replacedChars].some(a=>!Number.isSafeInteger(a)||a<0)||new Set(d.affectedCriterionIds).size!==d.affectedCriterionIds.length)throw Error("返工修改历史链不完整");if(!k.has(d.taskId)){let a=b.authorPassSealed&&b.c0TaskHashes?.[d.taskId]===null?"content":"first-candidate";if(d.kind!==a)throw Error("原首候选初始修订类型与固定C0身份不一致");k.set(d.taskId,d.afterHash)}if("first-candidate"===d.kind&&null!==d.beforeHash)throw Error("原首候选不能被后续修订刷新");if("content"!==d.kind&&(d.addedChars||d.removedChars||d.replacedChars||d.affectedCriterionIds.length))throw Error("非内容修订不能隐藏已发生返工");if(l.add(d.id),j.set(d.taskId,d.afterHash),"content"===d.kind){for(let b of d.affectedCriterionIds){let c=a.criteria.find(a=>a.id===b&&a.applicable&&a.sectionId===d.taskId);if(!c)throw Error("返工职责不属于原任务");m+=c.weight}h.set(d.taskId,(h.get(d.taskId)??0)+d.addedChars+d.removedChars+d.replacedChars);let b=i.get(d.taskId)??new Set;d.affectedCriterionIds.forEach(a=>b.add(a)),i.set(d.taskId,b),n+=d.addedChars,o+=d.removedChars,p+=d.replacedChars}}for(let[a,g]of Object.entries(b.tasks)){if(!c.includes(a)||j.get(a)!==g.current.contentHash||k.get(a)!==g.firstCandidate.contentHash)throw Error("当前候选或原首稿与修改历史不一致");let l=b.authorPassSealed&&b.c0TaskHashes?.[a]===null?void 0:g.firstCandidate.output;if(!f(l,g.current.output)){let b=new Map((l?.units??[]).map(a=>[a.id,a])),c=new Map(g.current.output.units.map(a=>[a.id,a])),j=new Set,k=0;for(let a of new Set([...b.keys(),...c.keys()])){let g=b.get(a),h=c.get(a);if(f(g,h))continue;[...g?.criterionIds??[],...h?.criterionIds??[]].forEach(a=>j.add(a));let i=g?String(e((0,d.renderAuthorUnit)(g))):"",l=h?String(e((0,d.renderAuthorUnit)(h))):"",m=0;for(;m<i.length&&m<l.length&&i[m]===l[m];)m++;let n=0;for(;n<i.length-m&&n<l.length-m&&i[i.length-n-1]===l[l.length-n-1];)n++;k+=Math.max(i.length-m-n,l.length-m-n)}if(f(l?.factBindings??[],g.current.output.factBindings)&&f(l?.decisionRequests??[],g.current.output.decisionRequests)&&f(l?.numericBindings??[],g.current.output.numericBindings??[])||g.current.output.units.flatMap(a=>a.criterionIds).forEach(a=>j.add(a)),(h.get(a)??0)<k||[...j].some(b=>!i.get(a)?.has(b)))throw Error("累计修改账没有覆盖真实原首稿至当前正文的内容或职责变更")}}if([...j.keys()].some(a=>!b.tasks[a]))throw Error("修订对应候选缺失");if(b.authorPassSealed){if(JSON.stringify(Object.keys(b.c0TaskHashes??{}).sort())!==JSON.stringify([...c].sort()))throw Error("固定C0任务分母缺失");for(let a of c){let c=b.c0TaskHashes[a];if(null!==c&&(!b.tasks[a]||c!==b.tasks[a].firstCandidate.contentHash))throw Error("固定C0首稿身份不一致")}}else if(void 0!==b.c0ReferenceChars)throw Error("未封存首稿不能签发固定C0字符分母");let q=a.sections.reduce((a,c)=>{let d=b.tasks[c.id]?.firstCandidate;return b.authorPassSealed&&null===b.c0TaskHashes[c.id]?a:a+(d?d.markdown.length:0)},0);if(b.authorPassSealed&&b.c0ReferenceChars!==q)throw Error("固定C0字符分母已改变");let r=n+o+p;return{fixedReferenceUnits:g,cumulativeUnits:m,cumulativeAddedChars:n,cumulativeRemovedChars:o,cumulativeReplacedChars:p,referenceChars:q,provisionalRatio:g?m/g:0,cumulativeCharRatio:q?r/q:0,changedChars:r,scope:b.authorPassSealed?"sealed-c0":"provisional-author-pass"}}function h(a,b){let c=g(a,b);for(let a of["fixedReferenceUnits","cumulativeUnits","cumulativeAddedChars","cumulativeRemovedChars","cumulativeReplacedChars","referenceChars","provisionalRatio","cumulativeCharRatio"])if(!Number.isFinite(b.rework[a])||Math.abs(b.rework[a]-c[a])>1e-9)throw Error("累计修改账与原修订历史或固定C0分母不一致");return c}function i(a,b){let c=h(a,b),d=[];return b.authorPassSealed||d.push("原作者首轮尚未封存,不能签发固定C0返工预算通过回执"),c.changedChars>.1*c.referenceChars&&d.push(`文档累计删增替换超出固定C0的10%字符预算:${c.changedChars}/${c.referenceChars};完整首稿和修改历史已保留`),d}},34680:(a,b,c)=>{c.d(b,{JP:()=>e,X6:()=>h,Zk:()=>f,fC:()=>i,w2:()=>g});var d=c(73806);function e(a){let b=a.template.chapters.length,c=`${a.template.name}
|
|
51
|
+
【全部本批义务及各自合法任务序号】${JSON.stringify(g.map((a,b)=>({itemIndex:b,...a,allowedTaskIndices:i.flatMap((b,c)=>a.chapterId&&"proposed"!==a.chapterAuthority&&b.chapterId!==a.chapterId?[]:[c])})))}`,{maxTokens:6e3,temperature:0,diagnostics:a.diagnostics,signal:a.signal,taskKind:(0,e.TO)(),callKind:"planning-review",schema:{type:"object",required:["owners"],properties:{owners:{type:"array",minItems:g.length,maxItems:g.length,items:{type:"object"}}}}});a.onBatch?.({offset:d,attempt:c,items:g,tasks:i,raw:h});let j=h&&"object"==typeof h&&Array.isArray(h.owners)?h.owners:[],k=new Map,l=new Map;for(let a of j){let b=Number.isInteger(a?.itemIndex)?g[a.itemIndex]?.id:a?.criterionId;if(!b||!g.some(a=>a.id===b))continue;let c=k.get(b)??[];k.set(b,c);try{c.push(function(a,b,c,d=!0){if(!c||"object"!=typeof c||!Array.isArray(c.owners))throw Error("主控责任分配缺少owners");let e=new Set,f=c.owners.map(c=>{if(!c||"object"!=typeof c)throw Error("责任分配不是对象");let d={criterionId:Number.isInteger(c.itemIndex)?a[c.itemIndex]?.id:c.criterionId,sectionId:Number.isInteger(c.taskIndex)?b[c.taskIndex]?.id:c.sectionId,reason:c.reason},f=a.find(a=>a.id===d.criterionId),g=b.find(a=>a.id===d.sectionId);if(!f||e.has(d.criterionId))throw Error("责任分配含重复或未知义务ID");if(!g||f.chapterId&&g.chapterId!==f.chapterId&&"proposed"!==f.chapterAuthority)throw Error("责任小节不存在或越过已裁决的责任章");if("string"!=typeof d.reason||!d.reason.trim())throw Error("责任分配缺少职责依据");return e.add(d.criterionId),{criterionId:d.criterionId,sectionId:d.sectionId,reason:d.reason}});if(d&&e.size!==a.length)throw Error("主控责任分配集合不完整");return f}(g,i,{owners:[a]},!1)[0])}catch(a){l.set(b,a instanceof Error?a.message:String(a))}}for(let a of g){let c=k.get(a.id)??[];b[d+f.findIndex(b=>b.id===a.id)]=1!==c.length||l.has(a.id)?{criterionId:a.id,status:"unmeasured",reason:l.get(a.id)??(c.length>1?"同一义务重复分配,未执行":"主控没有返回该义务的合法主责")}:{criterionId:a.id,...c[0],status:"confirmed"}}}catch(c){if(a.signal?.aborted)throw c;g.forEach(a=>{b[d+f.findIndex(b=>b.id===a.id)]={criterionId:a.id,status:"unmeasured",reason:c instanceof Error?c.message:String(c)}})}g=f.filter(a=>b[d+f.findIndex(b=>b.id===a.id)]?.status!=="confirmed")}}})),{version:"contract-ownership-plan-v1-2026-10-06",inputHash:h([a.items,a.tasks]),decisions:b}}},27723:(a,b,c)=>{c.d(b,{$7:()=>t,B:()=>s,Z5:()=>r,dE:()=>v,rn:()=>u});var d=c(77598),e=c(14409),f=c(31037),g=c(44753),h=c(26244);let i=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),j=a=>(0,d.createHash)("sha256").update(a).digest("hex"),k=a=>a.replace(/\s/gu,""),l=a=>k(a).replace(/[-—]/gu,"-").toUpperCase(),m=/(?<![A-Za-z0-9])(?:DB\s*\d{1,4}(?:\s*\/\s*[A-Z])?|[A-Z]{1,8}(?:\s*\/\s*[A-Z]{1,12})?)\s*[--—]?\s*\d{2,8}(?:\.\d+)*(?:\s*[--—]\s*\d{4})?(?![A-Za-z0-9])/gu,n=/^(?:GB(?:Z|\/T|\/Z)?|JGJ(?:\/T)?|CJJ(?:\/T)?|JTG|CECS|DB\d*(?:\/T)?|T\/[A-Z]+|SL(?:\/T)?|DL(?:\/T)?|TB(?:\/T)?|JT(?:\/T)?|YY(?:\/T)?|HG(?:\/T)?|JC(?:\/T)?|QB(?:\/T)?|NB(?:\/T)?|NY(?:\/T)?|ISO|IEC|EN|BS|DIN|ASTM|AS|NF)[-]?\d/u,o=/《([^《》\r\n]+)》/gu,p=a=>/^[\s(())::,,;;。]*$/u.test(a);function q(a,b,c){return{start:b,end:c,text:a.slice(b,c),sha256:j(a.slice(b,c))}}function r(a,b=!1){let c=[...a.matchAll(o)];return[...a.matchAll(m)].flatMap(d=>{let e=d.index,f=e+d[0].length,g=c.flatMap(b=>b.index+b[0].length<=e&&p(a.slice(b.index+b[0].length,e))?[{title:b,distance:e-b.index-b[0].length}]:b.index>=f&&p(a.slice(f,b.index))?[{title:b,distance:b.index-f}]:[]),h=g.filter(a=>a.distance===Math.min(...g.map(a=>a.distance))),i=1===h.length?q(a,h[0].title.index+1,h[0].title.index+h[0].title[0].length-1):void 0;return i||!b&&n.test(l(d[0]))?[{code:q(a,e,f),...i?{name:i}:{}}]:[]})}function s(a){(0,g.gM)(a.project.sourceVersionPolicy);let b=new Set;for(let c of a.tasks){if(b.has(c.taskId)||c.output.taskId!==c.taskId||c.output.projectSnapshotId!==a.project.snapshotId||c.contentHash!==i(c.output))throw Error("规范引用登记任务不属于当前真实正文或内容身份已变化");b.add(c.taskId)}let c=[],d=[],m=[...a.project.facts,...a.project.sourceControls??[]],n=b=>{let c=m.find(a=>(0,e.vg)(a)===b),d=c&&("verified-source-excerpt"===c.roleId?(0,e.vg)(c):(0,f.P)(a.project,c));return d?a.project.sourceControls?.find(a=>(0,e.vg)(a)===d):void 0};for(let b of a.tasks)for(let f of b.output.units)for(let g of"paragraph"===f.kind?[{field:"text",text:f.text}]:"table"===f.kind?[{field:"caption",text:f.caption},...f.columns.map(a=>({field:`column:${a.key}`,text:a.title})),...f.rows.flatMap(a=>Object.entries(a.cells).map(([b,c])=>({field:"cell",rowId:a.id,columnKey:b,text:c})))]:[{field:"caption",text:f.caption},...f.nodes.map(a=>({field:`node:${a.id}`,text:a.label})),...f.edges.map((a,b)=>({field:`edge:${b}`,text:a.label??""}))])for(let m of function(a){let b=r(a);return[...b,...[...a.matchAll(o)].filter(a=>/(?:规范|标准|规程|导则|条例|规定|办法)$/u.test(a[1])&&!b.some(b=>b.name?.start===a.index+1)).map(b=>({name:q(a,b.index+1,b.index+b[0].length-1)}))]}(g.text)){let o=m;if(!o.name&&o.code&&"table"===f.kind&&g.rowId){let a=f.rows.find(a=>a.id===g.rowId),c=b.output.factBindings.filter(b=>b.unitId===f.id&&b.rowId===a.id).map(a=>n(a.factId)).filter(a=>!!a),d=Object.entries(a.cells).filter(([a])=>a!==g.columnKey).flatMap(([a,b])=>{let d=c.flatMap(a=>r(a.value,!0)).filter(a=>l(a.code.text)===l(o.code.text)&&a.name&&k(b.replace(/[《》]/gu,""))===k(a.name.text)),e=f.columns.find(b=>b.key===a);if(!b.trim()||!d.length&&!e?.title.includes("名称"))return[];let g=b.startsWith("《")&&b.endsWith("》")?1:0,h=g?b.length-1:b.length;return[{name:q(b,g,h),nameColumnKey:a}]});1===d.length&&(o={...o,...d[0]})}let p=`normative-use:${i([b.taskId,f.id,g.field,g.rowId??null,g.columnKey??null,o]).slice(0,24)}`,s={id:p,taskId:b.taskId,unitId:f.id,field:g.field,...g.rowId?{rowId:g.rowId}:{},...g.columnKey?{columnKey:g.columnKey}:{},...o,sources:[],boundSources:[],officialStatus:(0,h.Fk)(a.project,o.code?.text??"")};c.push(s);let t=(a,c)=>d.push({code:a,useId:p,taskId:b.taskId,message:c}),u=[o.name?.text,o.code?.text].filter(Boolean).join("(")+(o.name&&o.code?")":""),v=o.code??o.name,w=b.output.factBindings.filter(a=>a.unitId===f.id&&a.rowId===g.rowId&&a.columnKey===g.columnKey&&(a.textRange?g.text.slice(a.textRange.start,a.textRange.end)===a.quote&&a.textRange.start<=v.start&&a.textRange.end>=v.end&&(!o.name||o.nameColumnKey||a.textRange.start<=o.name.start&&a.textRange.end>=o.name.end):g.text.includes(a.quote)&&a.quote.includes(v.text)&&(!o.name||o.nameColumnKey||a.quote.includes(o.name.text))));for(let c of(w.length||t("unbound-source",`正文引用${u}没有同一实际位置的来源绑定`),w)){let d=n(c.factId),h=d&&(0,e.vg)(d);if(!d||d.sourceRef?.chunkIndex===void 0)continue;let m=a.project.sourceVersionPolicy.sources[d.sourceFile];if(!m||m.parsedSha256!==a.project.sources[d.sourceFile]?.sha256)throw Error("规范引用来源解析身份不属于当前冻结项目");let p=a.project.sourceVersionPolicy.documents.find(a=>a.sourceFile===d.sourceFile)?.scopeEvidenceChunks.find(a=>a.chunkIndex===d.sourceRef.chunkIndex);if(p&&p.text!==d.value||h!==`source-excerpt:${i([d.sourceFile,d.sourceRef.chunkIndex,d.value]).slice(0,24)}`)throw Error("规范引用完整原文没有对应同一冻结解析切片");if(s.boundSources.some(a=>a.sourceId===h)||s.boundSources.push({sourceId:String(h),sourceFile:d.sourceFile,chunkIndex:d.sourceRef.chunkIndex,sourceSha256:m.sourceSha256,parsedSha256:m.parsedSha256,chunkSha256:j(d.value),text:d.value}),!o.code)continue;let q=o.code;if(o.nameColumnKey&&"table"===f.kind){let a=f.rows.find(a=>a.id===g.rowId).cells[o.nameColumnKey];if(!b.output.factBindings.some(b=>b.unitId===f.id&&b.rowId===g.rowId&&b.columnKey===o.nameColumnKey&&n(b.factId)===d&&(b.textRange?a.slice(b.textRange.start,b.textRange.end)===b.quote&&b.textRange.start<=o.name.start&&b.textRange.end>=o.name.end:a.includes(b.quote)&&b.quote.includes(o.name.text))))continue}let t=r(d.value,!0).filter(a=>a.name&&(!o.name||k(a.name.text)===k(o.name.text))&&(l(a.code.text)===l(q.text)||!/[--—]\s*\d{4}$/u.test(q.text)&&l(a.code.text).replace(/-\d{4}$/u,"")===l(q.text)));if(1!==t.length)continue;let u=t[0],v=Math.min(u.name.start,u.code.start),w=Math.max(u.name.end,u.code.end),x=d.value.slice(v,w);s.sources.some(a=>a.sourceId===h)||s.sources.push({sourceId:String(h),sourceFile:d.sourceFile,chunkIndex:d.sourceRef.chunkIndex,sourceSha256:m.sourceSha256,parsedSha256:m.parsedSha256,chunkSha256:j(d.value),name:u.name,code:u.code,quote:x,quoteSha256:j(x)})}o.name||t("missing-name",`正文编号${o.code?.text}未写真实完整名称;所选原文候选不替正文自动补名`),o.code||t("missing-code",`正文名称${o.name?.text}未写编号;未决用途仍完整登记,不猜编号或版本`),w.length&&!s.sources.length&&t("source-literal-mismatch",`正文引用${u}未在所选同一冻结来源中唯一成对定位;不借其他文件或版本补齐`),new Set(s.sources.map(a=>JSON.stringify([k(a.name.text),l(a.code.text)]))).size>1&&t("bibliography-unmeasured",`正文引用${u}对应多个所选名称或版本,不能自动选择一个目录项`),o.code&&!/[--—]\s*\d{4}$/u.test(o.code.text)&&t("edition-unspecified",`正文未明确${o.code.text}版本年;所选原文候选不替正文自动补版本`),"unmeasured"===s.officialStatus.status?t("official-status-unmeasured",`${u}现行名称版本未核定:${s.officialStatus.reason}`):"current"!==s.officialStatus.status?t("official-status-ineligible",`${u}实际官方记录状态不支持作为现行依据:${s.officialStatus.reason}`):o.name&&k(o.name.text)!==k(s.officialStatus.records[0].name)&&t("official-name-mismatch",`${u}与同一完整编号的实际官方名称不一致;须由主控按本用途复核,不能改年份或借名通过`)}let p=structuredClone([...a.qualifications??[]]),s=[],t=new Set;for(let a of p){let b=`${a.useId}\0${a.sourceId}`;if(t.has(b)||!a.reviewId?.trim()||!a.reason?.trim()||!["confirmed","unmeasured","rejected"].includes(a.status)||!c.some(b=>b.id===a.useId&&b.sources.some(b=>b.sourceId===a.sourceId)))throw Error("规范采用资格回执没有对应本轮实际正文及字面来源");t.add(b)}for(let b of c){let c=p.filter(a=>a.useId===b.id&&"confirmed"===a.status),e=!1;for(let f of c){let c=b.sources.find(a=>a.sourceId===f.sourceId),h=(0,g.bz)(a.project,{sourceFile:c.sourceFile,sourceChunkIndex:c.chunkIndex,quote:c.quote,assertedText:`${b.name?.text??""} ${b.code?.text??""}`,usage:"normative-reference"});"eligible"===h.status?e=!0:d.push({code:"source-ineligible",useId:b.id,taskId:b.taskId,message:h.reason})}e&&!d.some(a=>a.useId===b.id)?s.push(b.id):d.push({code:p.some(a=>a.useId===b.id&&"rejected"===a.status)?"qualification-rejected":"qualification-unmeasured",useId:b.id,taskId:b.taskId,message:"真实引用索引不等于规范专业适用和现行采用已通过;该实际用途仍未核定"})}let u=new Map;for(let a of c.filter(a=>a.sources.length&&!d.some(b=>b.useId===a.id&&"bibliography-unmeasured"===b.code))){let b=a.sources[0],c=i([k(b.name.text),l(b.code.text)]),d=u.get(c)??{id:`normative-bibliography:${c.slice(0,24)}`,name:b.name.text,code:b.code.text,useIds:[],taskIds:[],sourceIds:[]};d.useIds.push(a.id),d.taskIds=[...new Set([...d.taskIds,a.taskId])],d.sourceIds=[...new Set([...d.sourceIds,...a.sources.map(a=>a.sourceId)])],u.set(c,d)}let v={version:"normative-use-register-v2-complete-actual-catalog",projectSnapshotId:a.project.snapshotId,sourcePolicyId:a.project.sourceVersionPolicy.policyId,taskHashes:Object.fromEntries(a.tasks.map(a=>[a.taskId,a.contentHash])),uses:c,bibliographicRows:[...u.values()],qualifications:p,verifiedUseIds:s,issues:d};return{...v,id:`normative-register:${i(v)}`}}function t(a,b){if(JSON.stringify(s({...b,qualifications:a.qualifications}))!==JSON.stringify(a))throw Error("规范引用登记与当前任务正文、来源、版本或采用资格不一致;必须重新编译,不能沿用旧编制依据")}function u(a,b){t(a,b);let c=new Set(a.uses.flatMap(a=>a.boundSources.map(a=>a.sourceId)));return{registerId:a.id,projectSnapshotId:a.projectSnapshotId,sourcePolicyId:a.sourcePolicyId,citationCatalog:a.uses.map(b=>({...b,qualification:a.qualifications.filter(a=>a.useId===b.id),verified:a.verifiedUseIds.includes(b.id),issues:a.issues.filter(a=>a.useId===b.id)})),bibliographicRows:a.bibliographicRows,issues:a.issues,sourceEvidence:(b.project.sourceControls??[]).filter(a=>c.has((0,e.vg)(a))),qualificationMeaning:"实际正文引用索引;未核专业适用和当前资格在issues保留,不作为采用许可"}}function v(a,b){let c=new Map(b.map(a=>[a.taskId,a.title]));return{说明:a.qualificationMeaning,引用条目:a.citationCatalog.map(a=>({出现小节:c.get(a.taskId)??a.taskId,载体:"text"===a.field?"正文段落":"cell"===a.field?"表格单元格":a.field,引用编号:a.code?.text??"",名称:a.name?.text??"",已独立核定:a.verified,官方目录状态:`${a.officialStatus.status}(${a.officialStatus.reason})`,原字引文:a.sources.map(a=>a.quote).filter(Boolean).slice(0,3),采用资格:a.qualification.map(a=>`${a.status}:${a.reason}`),未决:a.issues.map(a=>a.message)})),名称编号配对:a.bibliographicRows.map(a=>({名称:a.name,编号:a.code})),全局未决:a.issues.map(a=>a.message),来源原文:a.sourceEvidence}}},28068:(a,b,c)=>{c.d(b,{j:()=>d});function d(a){return(!a.temporalConstraint||"resolved"===a.temporalConstraint.status)&&Number.isFinite(a.confidence)&&a.confidence>=.75&&a.confidence<=1}},29281:(a,b,c)=>{c.d(b,{I:()=>i,R:()=>j});var d=c(96770),e=c(51342),f=c(47774);let g=globalThis,h=g.__customizeConfigStores??=new Map;function i(){(0,f.jF)();let a=(0,e.J0)();return h.has(a)||h.set(a,new d.ConfigStore(a)),h.get(a)}function j(){h.clear()}},29300:(a,b,c)=>{c.d(b,{O:()=>d});function d(a,b){return Math.max(1,Number.isFinite(a)&&a>0?Math.floor(a):Number.isSafeInteger(b)&&b>0?b:1)}},30055:(a,b,c)=>{c.d(b,{Fy:()=>h,aF:()=>f});let d={structure:"结构完整性",table:"表格质量",fact_consistency:"数值/事实一致性",evidence_coverage:"证据覆盖",professional_chain:"专业链条",control_loop:"控制闭环",format:"格式规范",style:"文风与模板化",scope:"范围与商务边界"},e={local_deterministic:"确定性修复器(已执行未收敛:核对该检测器与修复器口径是否同源)",llm_repairable:"LLM 定向修复(自动轮次已耗尽:按定位与建议人工修订,或补齐锚点证据后续修重试)",manual_review:"人工复核(自动修复链不消费该类缺陷)",not_repair_needed:"系统判定无需修复(若仍阻断:复核检测器是否误报)"};function f(a,b,c){let f=a.map((a,c)=>({index:c+1,category:a.category?d[a.category]:"其他",location:function(a,b){if(a.chapterId){let c=b?.find(b=>b.id===a.chapterId);if(c?.title)return a.sectionTitle?`${c.title} / ${a.sectionTitle}`:c.title}if(a.sectionTitle)return a.sectionTitle;let c=a.message.match(/^(\d{1,2}(?:\.\d{1,2}){1,3}[\s\u00a0]*[^\s::]{2,24})[^::]{0,24}[::]/u);return c?c[1].trim():"全文"}(a,b),problem:a.message,action:a.suggestion||"人工核对后修订正文;修订必须同步导出源(doc.json.markdown)并复核守恒,或基于检查点续修重试。",repairPath:a.repairability?e[a.repairability]:"自动修复链已执行(残留待人工定位)",detectorId:a.provenance?.detectorId}));return{suspended:!0,generatedAt:Date.now(),total:f.length,repairChainSummary:"已保存逐项问题与依据;实际自动处理范围以本轮执行回执为准",items:f,...c&&c.length>0?{declarations:c.map(a=>({location:a.declaredAt,problem:a.issue.message,reason:a.reason,declaredAtMs:a.declaredAtMs}))}:{}}}function g(a,b=80){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}function h(a,b=8){let c=a.items.slice(0,b).map(a=>`${a.index}.【${a.category}】${g(a.location,24)}:${g(a.problem)}`),d=a.total>b?`;…另 ${a.total-b} 项`:"",e=a.declarations&&a.declarations.length>0?`;另有写作期声明不可修 ${a.declarations.length} 项(${a.declarations.slice(0,3).map(a=>`${g(a.location,16)}:${g(a.problem)}`).join(";")})`:"";return`导出门禁未通过:存在 ${a.total} 项阻断。当前稿可查看,草稿导出将标记为非交付物——${a.repairChainSummary}。复核清单:${c.join(";")}${d}${e}(完整清单见执行阶段「Agent 最终门禁」与交付复核清单)`}},30839:(a,b,c)=>{c.d(b,{C:()=>n,e:()=>m});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(59948),j=c(7942);let k=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),l="native-execution-accounting-";async function m(a,b){let c=(0,i.pE)(a.diagnostics);try{return await b()}finally{let b=(0,h.randomUUID)(),d={version:1,id:b,contractId:a.contractId,originRunId:a.runId,delta:(0,i.sQ)(c,(0,i.pE)(a.diagnostics))};(0,j.tv)(a.directory,`${l}${b}.json`,{receipt:d,sha256:k(d)},a.runId),(0,i.P_)(a.diagnostics).add(b)}}function n(a){let b=g().dirname((0,j.HM)(a.directory,"author-resume-state.json",a.runId)),c=(0,i.P_)(a.diagnostics);for(let d of e().readdirSync(b).filter(a=>a.startsWith(l)&&a.endsWith(".json")).sort()){let f=JSON.parse(e().readFileSync(g().join(b,d),"utf8")),h=f.receipt;if(!h||1!==h.version||h.contractId!==a.contractId||h.originRunId!==a.runId||d!==`${l}${h.id}.json`||f.sha256!==k(h))throw Error("结构化修复执行消耗回执损坏或身份不一致");c.has(h.id)||((0,i.zh)(a.diagnostics,h.delta),c.add(h.id))}}},31037:(a,b,c)=>{c.d(b,{P:()=>h,y:()=>i});var d=c(77598),e=c(4456),f=c(11248),g=c(57656);function h(a,b){let c=b.resolutionRef?.winnerSourceFile??b.sourceFile,d=b.resolutionRef?.winnerSourceRef??b.sourceRef;if(!Object.hasOwn(a.sources,c)||d?.chunkIndex===void 0)return;let g=a.sourceControls?.find(a=>"verified-source-excerpt"===a.roleId&&a.sourceFile===c&&a.sourceRef?.chunkIndex===d.chunkIndex);return g&&(!d.sourceSpan||(0,f.dP)((0,e.wj)(g.value),(0,e.wj)(d.sourceSpan)))?g.factId:void 0}function i(a){return a.filter(a=>a.content.trim()).map(a=>{let b=`source-excerpt:${(0,d.createHash)("sha256").update(JSON.stringify([a.filePath,a.chunkIndex,a.content])).digest("hex").slice(0,24)}`;return{factId:b,fieldId:b,key:"冻结原文片段",fieldName:"冻结原文片段",value:a.content,sourceFile:a.filePath,roleId:"verified-source-excerpt",processingType:a.processingType,confidence:.9,sourceSemantics:(0,g.Q)(a.roleId,a.processingType),sourceRef:{filePath:a.filePath,roleId:"verified-source-excerpt",sectionTitle:a.sectionTitle,chunkIndex:a.chunkIndex}}})}},31698:(a,b,c)=>{c.d(b,{oG:()=>U,QP:()=>T,An:()=>S});var d=c(46026),e=c(12152),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(24299),l=c(44533),m=c(70949),n=c(4456),o=c(91977),p=c(34893),q=c(48479),r=c(7942),s=c(22157),t=c(80572),u=c(11248),v=c(14409),w=c(19898),x=c(31037),y=c(57656),z=c(91898),A=c(52686);function B(a,b,c){let d=a.readSnapshot(()=>{if(!Object.hasOwn(b.sources,c.filePath))throw Error("视图文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("视图解析身份已经变化,不能与旧项目绑定");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==w.CAD_SCENE_VERSION)throw Error("视图场景版本不兼容");if(!a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload)throw Error("视图图框身份不存在");return{actual:d,scene:a.loadCadScene(c.filePath)}}),e=(0,w.renderCadSourceView)(d.scene,c);return{...e,receipt:{...e.receipt,filePath:c.filePath,projectSnapshotId:b.snapshotId,parsedIdentity:d.actual.sha256,frameEntities:e.receipt.visibleAnnotations.length,recordsComplete:!0,completeScope:"projected-geometry-and-indexed-annotations-assigned-to-selected-frame",unassignedEntitiesIncluded:!1}}}function C(a,b,c){return a.readSnapshot(()=>{if(!c||"string"!=typeof c.filePath||!Object.hasOwn(b.sources,c.filePath))throw Error("CAD证据文件不属于冻结项目");let d=a.parsedFileFingerprint(c.filePath);if(d.sha256!==b.sources[c.filePath].sha256)throw Error("CAD证据解析身份已经变化");let e=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(e?.version!==w.CAD_SCENE_VERSION)throw Error("CAD证据结构版本不兼容");let f=a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload;if(!f)throw Error("CAD证据的真实图框不存在");if("string"!=typeof c.rawValue||!/^[+−-]?\d+(?:\.\d+)?$/u.test(c.rawValue.trim()))throw Error("CAD单值须为一个实际数字,不得取范围端点或解析显示字符串猜值");if("string"!=typeof c.valueEntityId||!Array.isArray(c.unitEntityIds)||!c.unitEntityIds.length||!Array.isArray(c.scopeEntityIds)||!c.scopeEntityIds.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let g=[c.valueEntityId,...c.unitEntityIds,...c.scopeEntityIds];if(g.length>12||g.some(a=>"string"!=typeof a)||new Set(g).size!==g.length)throw Error("CAD单值、单位和部位定位须完整且不重复");let h=g.map(b=>{let d=a.queryMaterialEntityPage(c.filePath,{kind:"cad-entity",entityId:b,offset:0,limit:1}).records[0]?.payload;if(!d||d.sheet!==c.frameId||Array.isArray(d.sheetCandidates)&&d.sheetCandidates.length>1)throw Error("CAD实体不属于同一明确图框,不能跨图或跨歧义对象绑定");return d}),i=h[0];if("string"!=typeof i.text||(0,w.decodeCadString)(i.text).trim()!==c.rawValue.trim())throw Error("CAD数值不是实际标注的完整原文;未确认格式码或复合值须先解释");return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:d.sha256,sceneVersion:e.version,frame:f,value:i,unitAnnotations:h.slice(1,1+c.unitEntityIds.length),scopeAnnotations:h.slice(1+c.unitEntityIds.length),sourceQuality:e.quality,drawingCoordinateUnits:e.units,applicability:"not-evaluated",approvedForWriting:!1}})}async function D(a){let b=a.candidate;if(!b||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(b.attribute)||!["m","mm","cm"].includes(b.unit)||!b.objectName?.trim()||b.objectName.length>300||!b.condition?.trim()||b.condition.length>1e3)throw Error("几何候选属性、对象、工况或单位无效");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)(?:[((][^))]*[))])?$/u.test(b.objectName.trim())||/^(?:场地整平后高程|场地整平后标高|开挖面高程|开挖面标高|坑底标高|桩长|桩径)$/u.test(b.objectName.trim()))throw Error("图名、剖面编号或属性名不能代替实际施工部位,须继续核对区段/构件对应关系");let c=a.readEvidence(b.evidence);if(c.projectSnapshotId!==a.project.snapshotId||c.parsedIdentity!==a.project.sources[b.evidence.filePath]?.sha256)throw Error("几何证据与当前冻结项目不一致");if(!c.unitAnnotations.some(a=>"string"==typeof a.displayText&&a.displayText.trim()===b.unit))throw Error("候选单位没有实际单位文字实体支持,不能从INSUNITS或制图惯例猜值");if(!a.views.length||a.views.length>4||a.views.some(d=>d.receipt.parsedIdentity!==c.parsedIdentity||d.receipt.filePath!==c.filePath||d.receipt.frameId!==b.evidence.frameId||d.receipt.projectSnapshotId!==a.project.snapshotId))throw Error("几何复核视图不属于同一冻结来源身份");let d=new Set(a.views.flatMap(a=>a.receipt.visibleAnnotations.map(a=>a.id))),e=[b.evidence.valueEntityId,...b.evidence.unitEntityIds,...b.evidence.scopeEntityIds];if(e.some(a=>!d.has(a)))throw Error("数值、单位说明和部位实体必须在已提供视图中可核对,不能用未看的节点补成完整关系");let f=JSON.stringify({task:"独立审核图示工程属性,不代写正文",candidate:b,sourceEvidence:c,views:a.views.map(a=>({...a.receipt,sourceQuality:void 0,visibleAnnotations:a.receipt.visibleAnnotations.filter(a=>e.includes(a.id)),visibleAnnotationCount:a.receipt.visibleAnnotations.length,renderingLimitations:a.receipt.renderingLimitations})),instructions:'逐项确认实际数值、单位文字及其适用符号、真实施工部位、施工工况和属性。必须核对剖面编号与实际区段/构件的对应关系;只知道来源剖面、不知道施工部位不能confirmed。同图框相邻不证明属于同一对象,主体开挖面、板顶/支撑标高、垫层底和排水沟底不得混用;图框或图例无法辨认、单位只靠惯例、局部值推广全工程、阶段关系未核或被省略实体影响判断,返回unmeasured/rejected。不要由绘图坐标差计算工程值。只返回JSON {status:"confirmed"|"rejected"|"unmeasured",reason:"具体依据与限制"}。'}),g=await a.reviewer({prompt:f,images:a.views.map((a,b)=>({name:`同一真实图框局部${b+1}`,png:a.png}))});if(!g||!["confirmed","rejected","unmeasured"].includes(String(g.status))||"string"!=typeof g.reason||!g.reason.trim())throw Error("独立几何复核结果无效");return a.readEvidence(b.evidence),{candidate:b,proof:c,review:{status:g.status,reason:g.reason},sourceViewHashes:a.views.map(a=>(0,j.createHash)("sha256").update(a.png).digest("hex")),normalizedValue:"confirmed"===g.status?`${b.evidence.rawValue.trim()}${b.unit}`:null,approvedForWriting:"confirmed"===g.status,expertValidated:!1}}function E(a){if(!a.approvedForWriting||"confirmed"!==a.review.status||!a.normalizedValue)return;let{candidate:b,proof:c}=a;if(a.normalizedValue!==`${b.evidence.rawValue.trim()}${b.unit}`||64!==c.parsedIdentity.length)throw Error("已复核CAD属性的值或解析身份不一致");let d={ground_elevation:"场地整平后地面标高",pit_bottom_elevation:"主体开挖面标高",foundation_elevation:"基础控制标高",pile_length:"桩长",pile_diameter:"桩径"},e={parsedIdentity:c.parsedIdentity,frameId:b.evidence.frameId,valueEntityId:b.evidence.valueEntityId,rawValue:b.evidence.rawValue,unit:b.unit,unitEntityIds:[...b.evidence.unitEntityIds],scopeEntityIds:[...b.evidence.scopeEntityIds],condition:b.condition,reviewReason:a.review.reason,sourceViewHashes:[...a.sourceViewHashes]};return{factId:`cad-reviewed:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,b.attribute,b.objectName,a.normalizedValue,e])).digest("hex").slice(0,24)}`,fieldId:b.attribute,fieldName:d[b.attribute],key:d[b.attribute],objectName:b.objectName,value:a.normalizedValue,sourceFile:c.filePath,roleId:"cad-reviewed-geometry",processingType:"drawing",confidence:.9,sourceRef:{filePath:c.filePath,roleId:"cad-reviewed-geometry",sourceSpan:b.evidence.rawValue,cadInterpretation:e}}}let F=a=>a?JSON.parse(a.replace(/^\s*```(?:json)?\s*/u,"").replace(/\s*```\s*$/u,"")):void 0,G=["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"],H=(a,b,c)=>{if(!Object.hasOwn(b.sources,c)||a.parsedFileFingerprint(c).sha256!==b.sources[c].sha256)throw Error("CAD准备期间解析来源已变化")};async function I(a){let b,c=[],d=[],e=a.caller??A.rI,f=G.filter(b=>a.requestedAttributes.includes(b));if(!f.length||!a.filePaths.length)return{facts:c,readings:d,complete:!1};let g=a.read(b=>b.readSnapshot(()=>a.filePaths.map(c=>{H(b,a.project,c);let d=b.loadMaterialEntities(c,"cad-scene-quality")[0]?.payload;if(d?.version!==w.CAD_SCENE_VERSION)return{filePath:c,frames:[],complete:!1,reason:"结构版本尚未支持当前图示复核"};let e=b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:0,limit:24}),f=[...e.records];for(let a=24;a<Math.min(e.total,96);a+=24)f.push(...b.queryMaterialEntityPage(c,{kind:"cad-frame",offset:a,limit:24}).records);return{filePath:c,frames:f.map(a=>{let b=a.payload;return{id:b.id,title:b.title,name:b.name,drawingNumber:b.drawingNumber}}),complete:f.length===e.total}})));if(g.every(a=>0===a.frames.length))return d.push(...g.map(a=>({filePath:a.filePath,status:"unmeasured",reason:a.reason??"当前解析没有可供图像复核的实际图框;须通过真实根实例读取标注并继续核对对象和工况,不能据此认定工程属性不存在",catalogComplete:a.complete}))),{facts:c,readings:d,complete:!1};let h=0;try{b=F(await e("你是工程资料读图智能体,选择真实图框以准备施工控制属性。",JSON.stringify({requestedAttributes:f,catalog:g,instructions:"只选择与请求属性有关的真实图框,最多四个;剖面、详图和平面按实际图名及部位综合判断。目录截断或资料尚未理解不代表没有参数。仅返回JSON {frames:[{filePath,frameId,attributes:[]}]};不得自造ID,不取数字、不写施工正文。"}),!0,{diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:2e3}));let i=b?.frames;if(!Array.isArray(i)||i.length>4)throw Error("读图选择没有返回有限的实际图框");let j=i.map(a=>{if(!g.some(b=>b.filePath===a.filePath&&b.frames.some(b=>b.id===a.frameId))||!Array.isArray(a.attributes)||!a.attributes.length||a.attributes.some(a=>!f.includes(a)))throw Error("读图选择超出实际目录或请求属性");return a});if(new Set(j.map(a=>JSON.stringify([a.filePath,a.frameId]))).size!==j.length)throw Error("读图选择重复,不能对同图框重复消耗模型预算");let k=j.map(a=>({selection:a,status:"unmeasured"}));d.push(...k);let l=0;await Promise.all(Array.from({length:Math.min(2,j.length)},async()=>{for(;l<j.length;){let b=l++,d=j[b];a.signal?.throwIfAborted();let f=k[b];try{let b=a.read(b=>b.readSnapshot(()=>{H(b,a.project,d.filePath);let c=b.queryMaterialEntityPage(d.filePath,{kind:"cad-frame",entityId:d.frameId,offset:0,limit:1}).records[0]?.payload,e=b.loadCadScene(d.filePath);if(!c)throw Error("图框身份失效,不能以不完整标注确认控制值");let f=c.polygon,g={minX:Math.min(...f.map(a=>a.x)),maxX:Math.max(...f.map(a=>a.x)),minY:Math.min(...f.map(a=>a.y)),maxY:Math.max(...f.map(a=>a.y))},h=e.annotations.filter(a=>a.sheet===d.frameId&&a.text.trim()).map(a=>({id:a.id,text:(0,w.projectCadAnnotationText)(a.text,a.entityType),position:a.position}));return{bounds:g,annotations:h}}));if(JSON.stringify(b.annotations).length>16e4)throw Error("图框文字超过当前完整理解预算,需进一步分区取证");let g=a.read(b=>B(b,a.project,{filePath:d.filePath,frameId:d.frameId,width:3200,fontPath:a.fontPath})),i=(b.bounds.minX+b.bounds.maxX)/2,j=(b.bounds.minY+b.bounds.maxY)/2,k=[{minX:b.bounds.minX,maxX:i,minY:j,maxY:b.bounds.maxY},{minX:i,maxX:b.bounds.maxX,minY:j,maxY:b.bounds.maxY},{minX:b.bounds.minX,maxX:i,minY:b.bounds.minY,maxY:j},{minX:i,maxX:b.bounds.maxX,minY:b.bounds.minY,maxY:j}].map(b=>a.read(c=>B(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath}))),l=await e("你是施工技术资料读图智能体。候选必须指向实际原始实体,不能靠数字相邻猜工程属性。",JSON.stringify({selection:d,sourceView:{...g.receipt,sourceQuality:void 0,visibleAnnotations:void 0},annotations:b.annotations,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),partitions:k.map((a,b)=>({imageIndex:b,viewport:a.receipt.viewport})),instructions:"四张图按左上、右上、左下、右下完整分区读取,属于同一真实图框。结合图形、标高符号、单位说明和文字定位实际施工部位与工况;剖面编号只是来源定位,objectName须写对应区段/构件等实际工程对象,不得仅用“4-4剖面”或“开挖面高程”充当施工对象。scopeEntityIds须同时包含真实部位与解释施工工况的实体。主体垫层底、支撑、结构板、排水沟底及局部刻槽不能互换。每个对象分别提出明确属性候选,最多六条。图例xx.xxx是示意占位符,不是工程值。单位须有m/mm/cm实际独立文字实体;裸数值须完整标注原文,不取范围端点,不据绘图坐标相减。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]},文件和图框由当前读取上下文固定,不重复抄写地址。图像无法辨认或部位关系未核清时保留unresolved,不编造结论。"}),!0,{files:k.map((a,b)=>({name:`同一实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});f.rawDiscovery=l;let m=F(l);f.discovery=m;let n=m?.candidates;if(!Array.isArray(n)||n.length>6)throw Error("图示候选超出本次理解预算或协议");let o=a=>{if(!a.evidence||void 0!==a.evidence.filePath&&a.evidence.filePath!==d.filePath||void 0!==a.evidence.frameId&&a.evidence.frameId!==d.frameId)throw Error("候选声明了本次读取之外的来源");let b=a.objectName?.split(/[//]/u).map(a=>a.trim()).filter(Boolean)??[],c=b.filter(a=>!/^[\dA-Za-z\s\-—~~]+剖面(?:图)?$/u.test(a)),e=b.length>1&&c.length&&c.length<b.length?c.join("/"):a.objectName;return{...a,objectName:e,evidence:{...a.evidence,filePath:d.filePath,frameId:d.frameId}}},p=n.map(o),q=p.flatMap((b,c)=>{try{if(!a.read(c=>C(c,a.project,b.evidence)).unitAnnotations.some(a=>String(a.displayText).trim()===b.unit))throw Error("单位未指向实际m/mm/cm文字实体");if(/^(?:[\dA-Za-z\s\-—~~]+)?剖面(?:图)?$/u.test(b.objectName))throw Error("仅定位来源剖面,尚未对应到实际施工区段");return[]}catch(a){return[{index:c,reason:a instanceof Error?a.message:String(a)}]}});if(q.length){let c=await e("你是工程读图智能体,纠正本次真实来源读取提案,不能编造数值、单位或部位。",JSON.stringify({selection:d,previousCandidates:p,rejectedCandidates:q,actualScalarAnnotations:b.annotations.filter(a=>/^[+−-]?\d+(?:\.\d+)?$/u.test(String(a.text).trim())),annotations:b.annotations,instruction:"只提出有实际图示支持的完整工程属性候选;xx.xxx是图例占位,范围不能取端点。剖面编号须对应实际区段/构件,单位须提供实际单位及说明实体,工况须区分主体和局部。无依据的保留unresolved;不要为补齐数量填数。仅返回JSON {candidates:[{attribute,objectName,condition,unit,evidence:{valueEntityId,rawValue,unitEntityIds:[],scopeEntityIds:[]}}],unresolved:[]}。"}),!0,{files:k.map((a,b)=>({name:`原实际图框分区${b+1}`,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:6500});f.refinement={defects:q,raw:c};let g=F(c)?.candidates;if(!Array.isArray(g)||g.length>6)throw Error("写前图示纠正未返回完整候选,未执行属性准入");p=g.map(o)}let r=[];for(let g of(f.results=r,p))try{if(h>=12)throw Error("本轮图示候选复核预算已用完,该候选未测量");if(g.evidence?.filePath!==d.filePath||g.evidence?.frameId!==d.frameId||!d.attributes.includes(g.attribute))throw Error("图示候选跨来源、图框或属性");let f=a.read(b=>C(b,a.project,g.evidence)),i=[f.value,...f.unitAnnotations,...f.scopeAnnotations].map(a=>a.position),j=(function(a,b){if(!b.length||b.some(a=>!Number.isFinite(a.x)||!Number.isFinite(a.y)))throw Error("局部阅读缺少实际实体位置");let c=Math.max(a.maxX-a.minX,a.maxY-a.minY);if(!Number.isFinite(c)||c<=0)throw Error("图框范围无效");let d=[];for(let a of b){let b=d.find(b=>b.every(b=>Math.hypot(b.x-a.x,b.y-a.y)<=.24*c));b?b.push(a):d.push([a])}if(d.length>4)throw Error("数值与单位、部位的图示关系需要超过四个局部,保留未决而不截去限定");return d.map(a=>{let b=Math.min(...a.map(a=>a.x)),d=Math.max(...a.map(a=>a.x)),e=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.y)),g=Math.max(d-b+.08*c,.22*c),h=Math.max(f-e+.08*c,.28*g);return{minX:(b+d-(g=Math.max(g,.8*h)))/2,maxX:(b+d+g)/2,minY:(e+f-h)/2,maxY:(e+f+h)/2}})})(b.bounds,i).map(b=>a.read(c=>B(c,a.project,{filePath:d.filePath,frameId:d.frameId,viewport:b,width:3200,fontPath:a.fontPath})));h+=1;let k=await D({project:a.project,candidate:g,views:j,readEvidence:b=>a.read(c=>C(c,a.project,b)),reviewer:async b=>F(await e("你是独立工程读图复核智能体,复验候选的真实适用关系。",b.prompt,!0,{files:b.images.map(a=>({name:a.name,mimeType:"image/png",data:a.png})),diagnostics:a.diagnostics,signal:a.signal,callKind:"fact-extraction",maxTokens:3e3}))});r.push(k);let l=E(k);l&&c.push(l)}catch(b){a.signal?.throwIfAborted(),r.push({candidate:g,status:"unmeasured",reason:b instanceof Error?b.message:String(b)})}f.status="reviewed"}catch(b){a.signal?.throwIfAborted(),f.reason=b instanceof Error?b.message:String(b)}}}))}catch(c){a.signal?.throwIfAborted(),d.push({status:"unmeasured",selection:b,reason:c instanceof Error?c.message:String(c)})}return{facts:[...new Map(c.map(a=>[(0,j.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),a])).values()].sort((a,b)=>a.factId.localeCompare(b.factId)),readings:d,complete:!1}}var J=c(76908);let K=a=>!!a&&"object"==typeof a&&!Array.isArray(a),L=a=>"string"==typeof a&&!!a.trim(),M=a=>Array.isArray(a)?a.map(M):K(a)?Object.fromEntries(Object.keys(a).sort().filter(b=>void 0!==a[b]).map(b=>[b,M(a[b])])):a,N=a=>{let b;return b=JSON.stringify(M(a)),(0,j.createHash)("sha256").update(b).digest("hex")};var O=c(44753);let P="project-model-v11-shared-attributes-2026-10-13",Q=a=>(0,j.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function R(a){let b=(0,v.nD)(a)?.key,c=a.value;if("schedule_requirement"===b){let a=[...c.matchAll(/\d+(?:\.\d+)?\s*(?:日历天|工作日|天|个月|月)/gu)];1===a.length&&(c=a[0][0].replace(/\s+/gu,""))}return"owner"===b&&(c=c.split(/(?:办公|联系)?地址\s*[::]/u)[0].replace(/[((]\s*$/u,"").trim()),c===a.value?a:{...a,value:c,sourceRef:a.sourceRef?{...a.sourceRef,sourceSpan:a.sourceRef.sourceSpan??a.value}:void 0}}async function S(a){let b=a.global.input.signal;(0,s.Te)(b);let c=[...new Set(a.prepare.materialFilePaths)].sort(),f=(0,d.$)(a.prepare.projectRoot,c);if(f.length)throw Error(`项目资料解析检查未通过:${f.map(a=>a.message).join(";")}`);let h=await (0,l.E8)(a.prepare.projectRoot,c,b),x=c.flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({chapterId:"project-model",filePath:b,content:c.content,sectionTitle:c.sectionTitle,chunkIndex:c.chunkIndex,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),score:1,source:"parsed-project-model"}))),y=(0,l.VD)(a.prepare.projectRoot,a=>a.listIndexSourceStates(c)),A=(0,O.cW)(i().join((0,m.Gl)(a.prepare.projectRoot),"assets","source-editions"),c),B=(0,O.mb)(c.map(b=>({sourceFile:b,parsedSha256:h[b].sha256,sourceSha256:y.find(a=>a.relativePath===b).contentHash,sourceKind:a.prepare.kindByPath?.get(b),processingType:x.some(a=>a.filePath===b&&/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(a.content))?"table":a.understanding.fileProcessingByPath.get(b),chunks:x.filter(a=>a.filePath===b).map(a=>({chunkIndex:a.chunkIndex,content:a.content}))})),A.confirmations,A.assets),D=(0,o.Zh)(a.prepare.template,a.prepare.documentSpec).filter(b=>{let c=a.planning.requiredContentNeeds?.[b.name];return!c||"project-fact"===c.kind}),F=(0,k.x)(a.planning.generationDiagnostics),G=(0,e.C)("projectFacts"),H=i().join((0,m.Gl)(a.prepare.projectRoot),"assets","reviewed-cad"),M=g().existsSync(H)?g().readdirSync(H).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort().map(a=>[a,(0,j.createHash)("sha256").update(g().readFileSync(i().join(H,a))).digest("hex")]):[],S=Q({version:P,targets:D,localFactTargets:(0,o.Uy)(a.prepare.template,a.prepare.documentSpec),domain:a.prepare.domainProfile,prompt:a.prepare.factExtractionPromptTexts,modelIdentity:F,algorithmIdentity:G,registeredCadAssets:M,extractionTuning:{maxChars:(0,t.z)().factExtractionMaxChars}}),T=Q({sources:h,contextHash:S,sourceVersionPolicyId:B.policyId}),U=i().join((0,m.Gl)(a.prepare.projectRoot),"project-model-cache",`${T}.json`);if(G&&g().existsSync(U))try{let a=JSON.parse(g().readFileSync(U,"utf8")),b=a.data;if(!b||Q(b)!==a.sha256)throw Error("项目事实缓存内容校验不通过");if(b.version===P&&b.inputHash===T&&Q(b.sources)===Q(h)&&b.sourceVersionPolicy?.policyId===B.policyId&&Array.isArray(b.facts)&&Array.isArray(b.tables)&&Array.isArray(b.unresolvedFields))return{...b,cacheHit:!0}}catch{}let V=(0,n.d6)({evidence:x,template:a.prepare.template,spec:a.prepare.documentSpec,diagnostics:a.planning.generationDiagnostics,parsedOnly:!0}),W=a=>{let b=(0,v.nD)(a)?.key;return!b||!["project_name","project_scope","project_code","owner","project_location","foundation_support_form"].includes(b)||(0,n.R7)(b,a.value)},X=(0,s.lX)([...V.localFacts,...V.projectBasicFacts,...(0,v.UT)(x),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," "),d=/R(\d+)C(\d+)\s+(?:材料\/设备名称|材料名称|设备名称)\s*[::]\s*(.+?)\s+R\1C(\d+)\s+推荐品牌\s*[::]\s*(.+?)(?=\s+R\d+C\d+\b|$)/giu;for(let e of a.matchAll(d)){let a=e[3].trim(),d=e[5].trim();if(!a||!d||/^(?:无|暂无|未指定|见.*)$/u.test(d))continue;let f=`source-brand:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,e[1],e[4],a,d])).digest("hex").slice(0,24)}`;b.set(f,{factId:f,fieldId:"recommended_brand",fieldName:"推荐品牌",key:"推荐品牌",objectName:a,value:d,sourceFile:c.filePath,roleId:c.roleId||"parsed-table",processingType:c.processingType||"table",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-table",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,cellRange:`R${e[1]}C${e[4]}`,sourceSpan:e[0]}})}}return[...b.values()]}(x),...function(a){let b=new Map;for(let c of a){let a=c.content.replace(/\s+/gu," ");for(let d of a.matchAll(/(?:新建|建设|建造)\s*(\d+)\s*栋\s*(\d+)\s*层(?:的)?\s*([\u4e00-\u9fff]{0,18}?(?:用房|厂房|住宅楼|教学楼|宿舍楼|办公楼|大厦))/gu)){if(/远期|设想|建议|目标/u.test(a.slice(Math.max(0,d.index-12),d.index)))continue;let e=d[3];for(let[a,f,g]of[["building_count","建设栋数",`${d[1]}栋`],["building_floors","建筑层数",`${d[2]}层`]]){let h=`source-scale:${(0,j.createHash)("sha256").update(JSON.stringify([c.filePath,e,a,g])).digest("hex").slice(0,24)}`;b.set(h,{factId:h,fieldId:a,fieldName:f,key:f,objectName:e,value:g,sourceFile:c.filePath,roleId:c.roleId||"parsed-project-scope",confidence:.9,sourceRef:{filePath:c.filePath,roleId:c.roleId||"parsed-project-scope",chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,sourceSpan:d[0]}})}}}return[...b.values()]}(x)]).map(R).filter(W);X.push(...(0,J.Yn)(x,B));let Y=X.filter(a=>(0,z.p)(a).requiresTechnicalDecision&&/\.(?:dwg|dxf)$/iu.test(a.sourceFile)),Z=!1;if(Y.length){let c=[...new Set(Y.flatMap(a=>{let b=(0,v.nD)(a)?.key??a.fieldId??a.key;return"excavation_depth"===b?["ground_elevation","pit_bottom_elevation"]:"foundation_depth"===b?["ground_elevation","foundation_elevation"]:[b]}))],d={snapshotId:Q({inputHash:T,sources:h,stage:"cad-before-freeze"}),sources:h},e=function(a){let b,c=(b=a.generatedDir,i().join(b,"assets","reviewed-cad")),d=new Map,e=[];if(!g().existsSync(c))return{facts:[],reuseReceipts:e,complete:!1};for(let b of g().readdirSync(c).filter(a=>/^[0-9a-f]{64}\.json$/u.test(a)).sort()){let f=i().join(c,b),h=b.slice(0,-5);try{let b=JSON.parse(g().readFileSync(f,"utf8"));if(!K(b)||b.id!==h||!K(b.data)||"reusable-reviewed-cad-v1-2026-10-08"!==b.data.version||b.contentHash!==N(b.data)||!K(b.data.provenance)||b.id!==N({version:b.data.version,provenance:b.data.provenance}))throw Error("CAD历史资产完整性校验失败");let{audit:c,results:i,modelMetadata:j}=function(a){let b;if(!K(a)||!L(a.kind)||!K(a.result))throw Error("历史CAD资产必须为完整审核envelope,不能仅提供事实或项目模型");if(L(a.model))b={scope:"original-audit",model:a.model};else if(K(a.llm)&&Array.isArray(a.llm.modelChoices)&&a.llm.modelChoices.some(a=>K(a)&&L(a.chosen)&&L(a.provider)))b={scope:"original-audit-call-ledger",llm:a.llm,perResultReviewerModel:"not-recorded"};else throw Error("历史CAD审核缺少原模型来源元数据,不能冒称本轮重新视觉审核");let c=(Object.hasOwn(a.result,"candidate")?[a.result]:Array.isArray(a.result.readings)?a.result.readings.flatMap(a=>K(a)&&Array.isArray(a.results)?a.results:[]):[]).filter(a=>K(a)&&!0===a.approvedForWriting);if(!c.length)throw Error("历史CAD资产没有完整核准结果,裸事实和未决候选不能复用");for(let a of c){if(!K(a.candidate)||!K(a.candidate.evidence)||!K(a.proof)||!K(a.review)||"confirmed"!==a.review.status||!L(a.review.reason)||!1!==a.expertValidated||!L(a.candidate.objectName)||!L(a.candidate.condition)||!["ground_elevation","pit_bottom_elevation","foundation_elevation","pile_length","pile_diameter"].includes(String(a.candidate.attribute))||!["m","mm","cm"].includes(String(a.candidate.unit))||!Array.isArray(a.sourceViewHashes)||!a.sourceViewHashes.length||a.sourceViewHashes.length>4||a.sourceViewHashes.some(a=>"string"!=typeof a||!/^[0-9a-f]{64}$/u.test(a))||!L(a.proof.projectSnapshotId)||!L(a.proof.parsedIdentity)||!/^[0-9a-f]{64}$/u.test(a.proof.parsedIdentity)||!K(a.proof.frame)||!K(a.proof.value)||!Array.isArray(a.proof.unitAnnotations)||!a.proof.unitAnnotations.length||!Array.isArray(a.proof.scopeAnnotations)||!a.proof.scopeAnnotations.length)throw Error("历史CAD核准缺少候选、图示证明、原审核或图像哈希");let b=a.candidate.evidence;if(!L(b.filePath)||!L(b.frameId)||!L(b.valueEntityId)||!L(b.rawValue)||!/^[+−-]?\d+(?:\.\d+)?$/u.test(b.rawValue.trim())||!Array.isArray(b.unitEntityIds)||!b.unitEntityIds.length||!Array.isArray(b.scopeEntityIds)||!b.scopeEntityIds.length||a.normalizedValue!==`${b.rawValue.trim()}${a.candidate.unit}`)throw Error("历史CAD核准的单值、单位或部位实体证据不完整");if(/^(?:[\dA-Za-z\s\-—~~]+)?(?:剖面(?:图)?|截面(?:图)?|详图|平面图)$/u.test(a.candidate.objectName.trim()))throw Error("历史核准尚未绑定实际施工对象,不能用来源图名代替")}return{audit:a,results:c,modelMetadata:b}}(b.data.originalAudit);if(b.data.provenance.originalAuditKind!==c.kind||N(b.data.provenance.originalModelMetadata)!==N(j))throw Error("历史审核来源或模型元数据与原始回执不一致");for(let[c,g]of i.entries()){if(a.requestedAttributes&&!a.requestedAttributes.includes(g.candidate.attribute))continue;let i=b.data.provenance,j={assetId:h,assetPath:f,...i,candidateIndex:c,originalProjectSnapshotId:g.proof.projectSnapshotId,status:"rejected",reason:"",currentVisionReviewPerformed:!1,expertValidated:!1};try{!function(a,b,c){let d=a.candidate.evidence,e=c(d),f=a.proof;if(e.projectSnapshotId!==b.snapshotId||e.parsedIdentity!==b.sources[d.filePath]?.sha256||f.parsedIdentity!==e.parsedIdentity||f.filePath!==d.filePath)throw Error("历史CAD审核的冻结解析指纹与当前来源不一致");let g=a=>({filePath:a.filePath,parsedIdentity:a.parsedIdentity,sceneVersion:a.sceneVersion,frame:a.frame,value:a.value,unitAnnotations:a.unitAnnotations,scopeAnnotations:a.scopeAnnotations,drawingCoordinateUnits:a.drawingCoordinateUnits});if(N(g(e))!==N(g(f)))throw Error("历史CAD审核的图框、量值、单位或范围实体与当前证明不一致");if(!e.unitAnnotations.some(b=>"string"==typeof b.displayText&&b.displayText.trim()===a.candidate.unit))throw Error("历史CAD单位没有当前实际单位文字实体支持");if(!E(a))throw Error("历史审核没有准入可写事实")}(g,a.project,a.readEvidence);let b=E(g);d.set(b.factId,b),j.status="reused",j.reason="当前冻结解析与实际实体证明均与历史完整图示审核一致;保留原审核,不宣称本轮模型重新看图",j.factId=b.factId,j.verification="current-entities-match-historical-review"}catch(a){j.reason=a instanceof Error?a.message:String(a)}e.push(j)}}catch(a){e.push({assetId:h,assetPath:f,status:"rejected",reason:a instanceof Error?a.message:String(a),currentVisionReviewPerformed:!1,expertValidated:!1})}}return{facts:[...d.values()],reuseReceipts:e,complete:!1}}({generatedDir:(0,m.Gl)(a.prepare.projectRoot),project:d,requestedAttributes:c,readEvidence:b=>(0,l.VD)(a.prepare.projectRoot,a=>C(a,d,b))});X.push(...e.facts);let f=[...new Set(Y.map(a=>a.sourceFile))].filter(a=>!c.every(b=>e.facts.some(c=>c.sourceFile===a&&c.fieldId===b)));a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"cad-historical-reuse.json",e,a.global.input.runId);let j=f.length?await I({project:d,filePaths:f,requestedAttributes:c,diagnostics:a.planning.generationDiagnostics,signal:b,read:b=>(0,l.VD)(a.prepare.projectRoot,b),fontPath:g().existsSync("/System/Library/Fonts/STHeiti Light.ttc")?"/System/Library/Fonts/STHeiti Light.ttc":void 0}):void 0;j&&(X.push(...j.facts),Z=!j.facts.length||!j.readings.length||j.readings.some(a=>"reviewed"!==a.status||Array.isArray(a.results)&&a.results.some(a=>"unmeasured"===a.status||a.review?.status==="unmeasured")),a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"cad-writing-preparation.json",j,a.global.input.runId))}let $=b=>i().join((0,m.Gl)(a.prepare.projectRoot),"project-model-cache",`source-${Q([b,h[b].sha256,S])}.json`),_=a=>{let b=(0,u.K3)(a.value);return!!b&&x.some(c=>c.filePath===a.sourceFile&&(a.sourceRef?.chunkIndex===void 0||a.sourceRef.chunkIndex===c.chunkIndex)&&(0,u.K3)(c.content).includes(b))};for(let a of c)if(G)try{let b=JSON.parse(g().readFileSync($(a),"utf8"));Q(b.data)===b.sha256&&Array.isArray(b.data)&&X.push(...b.data.filter(_).map(R).filter(W))}catch{}let aa=D.filter(a=>a.required&&!X.some(b=>(0,n.PV)(b,a))),ab=new Map;for(let b of aa)ab.set(b.id,x.filter(a=>(0,o.I2)(a,b)).sort((c,d)=>{let e=c=>(0,w.carrierStrength)((0,w.domainForAttribute)(b.name),(0,w.resolveCarrier)({kind:a.prepare.kindByPath?.get(c.filePath)??c.processingType??"other",section:c.sectionTitle}));return e(d)-e(c)||d.content.split(b.name).length-c.content.split(b.name).length||c.filePath.localeCompare(d.filePath)||c.chunkIndex-d.chunkIndex}));let ac=[...new Map(aa.flatMap(a=>ab.get(a.id)??[]).map(a=>[`${a.filePath}\0${a.chunkIndex}\0${a.sectionTitle}\0${a.content}`,a])).values()];a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"project-fact-extraction-scope.json",{projectAttributeTargets:D,missingAttributes:aa.map(a=>({...a,candidateCount:ab.get(a.id)?.length??0})),otherContentDuties:(0,o.Uy)(a.prepare.template,a.prepare.documentSpec).filter(a=>!D.some(b=>b.id===a.id)),selectedChunks:ac.length,selectedSourceChars:ac.reduce((a,b)=>a+b.content.length,0),sourceFiles:c.length,structuredTables:V.structuredTables.length,boundary:"完整解析来源、结构化表与非共同属性义务保留;非共同属性不是全局待填单值字段,也不表示正文已完成"},a.global.input.runId);let ad=!1;if(ac.length>0){let c={...a.prepare.template,chapters:a.prepare.template.chapters.map(a=>({...a,requiredFacts:a.requiredFacts.filter(a=>aa.some(b=>b.id===a||b.name===a))}))},d=a.prepare.documentSpec?{...a.prepare.documentSpec,factFields:a.prepare.documentSpec.factFields.filter(a=>aa.some(b=>b.id===a.id))}:void 0,e=await (0,n.OQ)(ac,a.prepare.factExtractionPromptTexts,c,d,b,a.planning.generationDiagnostics,b=>{(0,q.Wl)(a,{batch:"generation.understanding",stage:{type:"fact_extraction",roleId:"project-attribute-extraction",status:"running",message:"done"===b.phase?`共同属性第${b.index}/${b.total}批已核验,累计${b.factsSoFar}条`:`共同属性第${b.index}/${b.total}批${"waiting"===b.phase?"仍在读取":"开始读取"},本批${b.batchChars}字符`}}),a.global.emitProgress()},{cache:(0,p.G)(i().join((0,m.Gl)(a.prepare.projectRoot),"source-fact-response-cache"),a.planning.generationDiagnostics,"literal-source-fact-response-v2"),sourceIdentities:h,onReceipt:b=>{a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),`source-fact-batch-${b.index}.json`,b,a.global.input.runId)}});(0,s.Te)(b);let f=(0,s.lX)(e.facts).filter(_).map(R).filter(W);for(let a of(X.push(...f),ad=e.stages.some(a=>"failed"===a.status),new Set(f.map(a=>a.sourceFile)))){if(!G||!h[a])continue;let b=[...new Map(X.filter(b=>b.sourceFile===a&&_(b)).map(a=>[Q([a.fieldId,a.key,a.objectName,a.value,a.sourceRef]),a])).values()],c=$(a);g().mkdirSync(i().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.tmp`;g().writeFileSync(d,JSON.stringify({data:b,sha256:Q(b)})),g().renameSync(d,c)}}if(Q((0,l.Y8)(a.prepare.projectRoot,c))!==Q(h))throw Error("写前理解期间解析资料已变化,不能将旧候选与新来源一起冻结");let ae={version:P,inputHash:T,sources:h,sourceVersionPolicy:B,facts:X,tables:V.structuredTables,unresolvedFields:aa.filter(a=>!X.some(b=>(0,n.PV)(b,a))).map(a=>({id:a.id,name:a.name,status:"unmeasured",candidateCount:ab.get(a.id)?.length??0,phase:ab.get(a.id)?.length?"attribute-extraction":"source-location",provesMissingSource:!1,candidateLocations:(ab.get(a.id)??[]).map(a=>({sourceFile:a.filePath,chunkIndex:a.chunkIndex})),reason:ab.get(a.id)?.length?"已有相关解析原文,属性理解尚未完成;不能凭抽取失败认定原文缺料":"当前字段关键词尚未定位原文,未据此判定全库缺料"})),cacheHit:!1};if(G&&!ad&&!Z){g().mkdirSync(i().dirname(U),{recursive:!0});let a=`${U}.${process.pid}.tmp`;g().writeFileSync(a,JSON.stringify({data:ae,sha256:Q(ae)})),g().renameSync(a,U)}return ae}function T(a){let b=a.understanding.preparedProjectFacts;if(!b)throw Error("项目事实准备尚未完成,不能开始写作");if((0,O.gM)(b.sourceVersionPolicy),(0,O.cW)(i().join((0,m.Gl)(a.prepare.projectRoot),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("理解期间来源发行确认已变化,不能冻结旧用途账");let c=Object.keys(b.sources).flatMap(b=>a.understanding.project.listEvidenceChunks({relativePath:b}).map(c=>({filePath:b,content:c.content,chunkIndex:c.chunkIndex,sectionTitle:c.sectionTitle,chapterId:"project-source-assertions",score:1,source:"complete-parsed-source",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b)}))),d=JSON.parse(JSON.stringify({version:P,inputHash:b.inputHash,sources:b.sources,sourceVersionPolicy:b.sourceVersionPolicy,facts:a.understanding.arbitratedFacts.map(b=>(0,y.G5)(b,{roleId:a.understanding.fileRoleByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile),processingType:a.understanding.fileProcessingByPath.get(b.resolutionRef?.winnerSourceFile??b.sourceFile)})),sourceControls:(0,x.y)(c),factsModel:a.understanding.preliminaryFactsModel,unresolvedFields:b.unresolvedFields,workPackages:a.blueprint?.integratedBlueprint?.outline.projectWorkPackages??[]})),e={...d,snapshotId:Q(d)};return a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"project-model.json",e,a.global.input.runId),a.global.input.runId&&(0,r.tv)((0,m.Gl)(a.prepare.projectRoot),"source-version-policy.json",e.sourceVersionPolicy,a.global.input.runId),a.understanding.arbitratedFacts=JSON.parse(JSON.stringify(e.facts)),a.understanding.preliminaryFactsModel=JSON.parse(JSON.stringify(e.factsModel)),e}function U(a,b){if(b.version!==P)throw Error("项目事实快照版本失配,须按当前语义属性重新准备,不能转换旧快照用于生成");if(!b.sourceVersionPolicy)throw Error("项目恢复缺少冻结来源版本用途账,须按当前来源重新准备");if((0,O.gM)(b.sourceVersionPolicy),(0,O.cW)(i().join((0,m.Gl)(a),"assets","source-editions"),Object.keys(b.sources)).fingerprint!==b.sourceVersionPolicy.assetFingerprint)throw Error("来源发行确认资产已变化,原项目快照不能继续复用");let{snapshotId:c,...e}=b;if(Q(e)!==c)throw Error("项目事实快照已被改写,不能沿用原快照身份");if(0===Object.keys(b.sources).length){if(b.facts.length>0)throw Error("项目事实没有解析来源身份,不能进入写作或交付评价");return}let f=(0,d.$)(a,Object.keys(b.sources));if(f.length)throw Error(`写作资料当前解析状态未通过:${f.map(a=>a.message).join(";")};保留草稿,不能使用历史解析继续写作或交付评价`);if(Q((0,l.Y8)(a,Object.keys(b.sources)))!==Q(b.sources))throw Error("写作期间解析资料已经变更,当前事实快照已过期;保留草稿并使用新快照重新规划受影响任务")}},31719:(a,b,c)=>{c.d(b,{x:()=>h,G:()=>i});var d=c(77598),e=c(19898);function f(a,b){let c=g(a,b).geometryGraph.entities[0],d=a=>c.pairs.find(b=>b[0]===a)?.[1],e=d("5"),f=e??`ordinal-${c.ordinal}`;if(e&&1!==a.geometryGraph.entities.filter(a=>a.pairs.some(a=>"5"===a[0]&&a[1]===e)).length)throw Error("CAD根源handle不唯一,不能猜所属实例标注");return{rootInstanceId:b,sourceOrdinal:c.ordinal,entityType:c.type,sourceHandle:e??null,ownerHandle:d("330")??null,blockName:["INSERT","DIMENSION"].includes(c.type)?d("2")??null:null,instancePrefix:["INSERT","DIMENSION"].includes(c.type)?[f]:[],reference:f}}function g(a,b){if(!/^(?:0|[1-9]\d*)$/u.test(b)||!Number.isSafeInteger(Number(b)))throw Error("CAD根实例身份无效");let c=a.geometryGraph.entities.findIndex(a=>String(a.ordinal)===b);if(c<0)throw Error("CAD根实例不属于该冻结图纸");let d=a.geometryGraph.entities[c];if(["SECTION","ENDSEC","ENDBLK","SEQEND","VERTEX"].includes(d.type))throw Error("源marker或序列成员不是独立几何根,须定位实际POLYLINE等根实例");let e=[d];if("POLYLINE"===d.type){let b=c+1;for(;a.geometryGraph.entities[b]?.type==="VERTEX";)e.push(a.geometryGraph.entities[b++]);if(a.geometryGraph.entities[b]?.type!=="SEQEND")throw Error("POLYLINE源序列未闭合,不能截去后续顶点冒充完整几何");e.push(a.geometryGraph.entities[b])}return{...a,geometryGraph:{...a.geometryGraph,entities:e}}}class h extends Error{constructor(...a){super(...a),this.name="CadQueryInputError"}}function i(a,b,c){return a.readSnapshot(()=>{let i=b.sources[c.filePath];if(!i)throw Error("图纸不属于本轮冻结项目");let j=a.parsedFileFingerprint(c.filePath);if(j.sha256!==i.sha256)throw Error("图纸解析资产已变化,不能把新图框或坐标绑定到旧项目快照;须重新冻结项目");let k=a.loadMaterialEntities(c.filePath,"cad-scene-quality")[0]?.payload;if(!k?.version)throw Error("该图纸尚未按实际块实例与图框解析;旧图带不能作为图框身份,须重新解析");if(k.version!==e.CAD_SCENE_VERSION)throw Error("图纸结构版本与当前读取协议不兼容,须重新解析并冻结项目");let l=c.kind??"frames";if(!["frames","annotations","geometry","instances"].includes(l))throw new h("CAD查询类型无效");if(void 0!==c.rootInstanceId&&(!["geometry","annotations"].includes(l)||"string"!=typeof c.rootInstanceId))throw new h("rootInstanceId只用于定位目录返回的实际几何或标注根");if("instances"===l&&(c.frameId||c.entityId||c.query||c.placement||void 0!==c.textOnly||c.order||"full"===c.detail))throw new h("instances仅分页读取实际根目录,不接受图框、标注或全文筛选");if(c.rootInstanceId&&c.placement)throw new h("根实例几何投影不使用图框块归属筛选");if(void 0!==c.detail&&(!["full","catalog"].includes(c.detail)||"catalog"===c.detail&&!["frames","instances"].includes(l)))throw new h("目录投影只用于frames或instances,不能省略标注或几何细节");let m="annotations"===l&&!c.frameId&&!c.entityId&&!c.rootInstanceId&&"string"==typeof c.query&&!!c.query.trim();if(["annotations","geometry"].includes(l)&&!c.frameId&&!c.entityId&&!c.rootInstanceId&&!m)throw new h("标注与几何查询须明确实际frameId或entityId;无图框时按instances真实根或非空实际字面query定位标注候选,不能全图猜对象");let n=c.frameId?a.queryMaterialEntityPage(c.filePath,{kind:"cad-frame",entityId:c.frameId,offset:0,limit:1}).records[0]?.payload:void 0;if(c.frameId&&!n)throw new h("图框身份不属于该冻结图纸");if(void 0!==c.placement&&!["all","drawing-space","frame-instance"].includes(c.placement))throw new h("CAD块归属筛选无效");if(c.placement&&"all"!==c.placement&&(!c.frameId||"frames"===l))throw new h("块归属筛选须选择实际图框的标注或几何");if(void 0!==c.textOnly&&("boolean"!=typeof c.textOnly||"annotations"!==l))throw new h("文字筛选只用于标注");if(void 0!==c.order&&(!["source","position"].includes(c.order)||"annotations"!==l))throw new h("位置排序只用于标注");let o=n?.source,p=c.placement&&"all"!==c.placement?{path:o?.instancePath,handle:o?.handle,included:"frame-instance"===c.placement}:void 0;if(p&&(!Array.isArray(p.path)||!p.path.length||p.path.some(a=>"string"!=typeof a)))throw Error("图框实际块路径不完整,不能猜筛选归属");let q=c.offset??0,r=c.limit??8,s="instances"===l?function(a,b,c,d){let e=a.queryMaterialEntityPage(b,{kind:"cad-geometry-root",offset:c,limit:d});return{...e,records:e.records.map(a=>{let b=a.payload,c=b.pairs;if(!Number.isSafeInteger(b.ordinal)||0>Number(b.ordinal)||a.entityKey!==String(b.ordinal)||!Array.isArray(c)||c.some(a=>!Array.isArray(a)||2!==a.length||a.some(a=>"string"!=typeof a)))throw Error("CAD根实例身份或原始组码不完整,须重新解析");let d=a=>c.find(b=>b[0]===a)?.[1]??null;return{...a,payload:{rootInstanceId:a.entityKey,sourceOrdinal:b.ordinal,entityType:b.type,sourceHandle:d("5"),ownerHandle:d("330"),blockName:["INSERT","DIMENSION"].includes(String(b.type))?d("2"):null,layout:d("410"),sourceMarker:["SECTION","ENDSEC","ENDBLK","SEQEND"].includes(String(b.type)),sequenceMember:["VERTEX","SEQEND"].includes(String(b.type))}}})}}(a,c.filePath,q,r):m?function(a,b,c){if("string"!=typeof c.query||!c.query.trim())throw Error("无图框标注定位须提供非空实际字面query");let d=a.loadCadScene(b),e=a.queryMaterialEntityPage(b,{kind:"cad-entity",...c});return{...e,records:e.records.map(a=>{let b=a.payload,c=b.source,e=d.geometryGraph.entities.filter(a=>{if(["SECTION","ENDSEC","ENDBLK","SEQEND","VERTEX"].includes(a.type))return!1;let d=a.pairs.find(a=>"5"===a[0])?.[1],e=d??`ordinal-${a.ordinal}`;return 0===c.instancePath.length&&c.ordinal===a.ordinal||["INSERT","DIMENSION"].includes(a.type)&&c.instancePath[0]===e||"INSERT"===a.type&&"ATTRIB"===b.entityType&&0===c.instancePath.length&&void 0!==d&&c.ownerHandle===d}).flatMap(a=>{try{let{reference:b,...c}=f(d,String(a.ordinal));return[c]}catch{return[]}});return{...a,rootBindings:e,rootBindingStatus:e.length?"source-bound":"unmeasured"}})}}(a,c.filePath,{query:c.query,textOnly:c.textOnly,order:c.order,offset:q,limit:r}):"annotations"===l&&void 0!==c.rootInstanceId?function(a,b,c){if(!Number.isSafeInteger(c.offset)||c.offset<0||!Number.isSafeInteger(c.limit)||c.limit<1||c.limit>24)throw Error("结构记录分页范围无效");let d=a.loadCadScene(b),g=f(d,c.rootInstanceId),h=d.annotations.filter(a=>{let b=a.source,d=b.ordinal===g.sourceOrdinal&&0===b.instancePath.length,f=g.instancePrefix.length>0&&b.instancePath[0]===g.reference,h="INSERT"===g.entityType&&"ATTRIB"===a.entityType&&0===b.instancePath.length&&null!==g.sourceHandle&&b.ownerHandle===g.sourceHandle;return(d||f||h)&&(!c.frameId||a.sheet===c.frameId)&&(!c.entityId||a.id===c.entityId)&&(!c.query||(0,e.projectCadAnnotationText)(a.text,a.entityType).includes(c.query))&&(!c.textOnly||!!(0,e.projectCadAnnotationText)(a.text,a.entityType).trim())});"position"===c.order&&(h=h.map((a,b)=>({annotation:a,index:b})).sort((a,b)=>(b.annotation.position.y??0)-(a.annotation.position.y??0)||(a.annotation.position.x??0)-(b.annotation.position.x??0)||a.index-b.index).map(a=>a.annotation));let{reference:i,...j}=g;return{total:h.length,rootBinding:j,records:h.slice(c.offset,c.offset+c.limit).map(a=>({entityKind:"cad-entity",entityKey:a.id,payload:{...a,displayText:(0,e.projectCadAnnotationText)(a.text,a.entityType)}}))}}(a,c.filePath,{rootInstanceId:c.rootInstanceId,frameId:c.frameId,entityId:c.entityId,query:c.query,textOnly:c.textOnly,order:c.order,offset:q,limit:r}):"geometry"===l&&void 0!==c.rootInstanceId?function(a,b,c){if(!Number.isSafeInteger(c.offset)||c.offset<0||!Number.isSafeInteger(c.limit)||c.limit<1||c.limit>24)throw Error("结构记录分页范围无效");let d=g(a.loadCadScene(b),c.rootInstanceId),f=[],h=0;for(let a of(0,e.iterateCadSceneGeometry)(d))if((!c.frameId||a.sheet===c.frameId)&&(!c.entityId||a.id===c.entityId)&&!c.query&&!(h++<c.offset)){if(f.length===c.limit)return{total:null,records:f};f.push({entityKind:"cad-geometry",entityKey:a.id,payload:a})}return{total:h,records:f}}(a,c.filePath,{rootInstanceId:c.rootInstanceId,frameId:c.frameId,entityId:c.entityId,query:c.query,offset:q,limit:r}):"geometry"===l?a.queryCadGeometryPage(c.filePath,{frameId:c.frameId,entityId:c.entityId,query:c.query,offset:q,limit:r,framePlacement:p}):a.queryMaterialEntityPage(c.filePath,{kind:"frames"===l?"cad-frame":"cad-entity",..."frames"!==l&&c.frameId?{frameId:c.frameId}:{},entityId:c.entityId,query:c.query,offset:q,limit:r,framePlacement:p,textOnly:c.textOnly,order:c.order}),t=s.records.map(a=>"frames"===l&&"catalog"===c.detail?{...a,payload:Object.fromEntries(["id","name","title","drawingNumber","layout"].filter(b=>Object.hasOwn(a.payload,b)).map(b=>[b,a.payload[b]]))}:a),u=q+t.length;return{projectSnapshotId:b.snapshotId,filePath:c.filePath,parsedIdentity:j.sha256,sceneVersion:k.version,kind:l,frameId:c.frameId??null,rootInstanceId:c.rootInstanceId??null,projection:"instances"===l?"catalog":c.detail??"full",selection:{placement:c.placement??"all",textOnly:c.textOnly??!1,order:c.order??"source"},sceneQuality:k.quality?{...k.quality,issues:void 0,issueCount:k.quality.issues?.length??0,issueReasons:[...new Set(k.quality.issues?.map(a=>a.reason)??[])],detailsComplete:!1}:null,units:k.units,records:t,..."frames"===l||"instances"===l?{directoryState:{scope:"indexed-cad-directory",complete:0===q&&null!==s.total&&u>=s.total&&!c.frameId&&!c.entityId&&!c.query,recordCount:s.total}}:{},...s.rootBinding?{rootBinding:s.rootBinding}:{},..."annotations"===l?{readingSourceIds:t.map(a=>({entityId:a.payload.id,sourceId:`cad-read:${(0,d.createHash)("sha256").update(JSON.stringify([c.filePath,j.sha256,c.rootInstanceId,a.payload.id,a.payload.source])).digest("hex")}`}))}:{},total:s.total,totalMeasured:null!==s.total,offset:q,nextOffset:null===s.total||u<s.total?u:null,complete:0===q&&null!==s.total&&u>=s.total,completeScope:m?"matching-literal-candidates":"geometry"===l?"matching-block-instance-projection":void 0!==c.rootInstanceId?"matching-root-instance-annotations":"matching-indexed-records",sourceInterpretationComplete:k.quality?.complete===!0,engineeringDecision:"not-evaluated",note:"标注text保留源字段,displayText是同一字段按DXF存储及显示规则确定性解码的文字;query定位displayText的字面子串,不是语义检索或多关键词并集。数字标注常没有属性名,零命中应取消筛选读取所选图框,不证明没有该参数。分页按实际nextOffset继续,不能按limit自行跳页。坐标、图框及尺寸尚未判定工程属性、部位和工况;范围与约数不能据此变成准确施工值。未返回或尚未支持的结构不代表图纸没有。"}})}},32460:(a,b,c)=>{c.d(b,{MZ:()=>l,TF:()=>j,cG:()=>k,yY:()=>i});var d=c(77598),e=c(95393),f=c(7942),g=c(56999);let h=new WeakMap;function i(a,b){b.runId&&h.set(a,{generatedDir:b.generatedDir,runId:b.runId,contractId:b.contract.id,projectSnapshotId:b.contract.projectSnapshotId,tasks:new Map(b.contract.sections.map(a=>[JSON.stringify([a.chapterId,a.title]),a.id])),expectedTaskIds:b.contract.sections.map(a=>a.id),records:[],candidates:[],rawDrafts:[],previousDrafts:new Map})}function j(a,b){let c=a&&h.get(a);if(!c)return;let i=c.tasks.get(JSON.stringify([b.chapterId,b.blockTitle])),j=i??`unplanned:${(0,d.createHash)("sha256").update(JSON.stringify([b.chapterId,b.blockTitle])).digest("hex").slice(0,24)}`,k=c.records.filter(a=>a.taskId===j).length,l=(0,d.randomUUID)();for(let a of Array.isArray(b.response?.rawToolCalls)?b.response.rawToolCalls:b.response?.toolCalls??[]){let b;if(a?.name!=="submit_author_task"||"string"!=typeof a.arguments)continue;try{b=(0,e.parseJsonWithoutDuplicateKeys)(a.arguments).output}catch{}let d=c.previousDrafts.get(j),f=(0,g.Br)(d,b),h=b&&"object"==typeof b?b.revisionReason:void 0;c.rawDrafts.push({taskId:j,callId:l,toolCallId:"string"==typeof a.id?a.id:null,ordinal:c.rawDrafts.filter(a=>a.taskId===j).length,declaredReason:"string"==typeof h?h:null,comparison:f}),(0,g.IO)(b)&&c.previousDrafts.set(j,structuredClone(b))}let m=(0,f.tv)(c.generatedDir,`author-response-${l}.json`,{version:1,runId:c.runId,contractId:c.contractId,projectSnapshotId:c.projectSnapshotId,taskId:j,belongsToFrozenTask:!!i,callId:l,ordinal:k,turn:b.turn,firstResponse:0===k,responseReceived:!!b.response,rawText:b.response?.rawContent??b.response?.content??null,request:b.request??null,rawToolCalls:b.response?.rawToolCalls??null,droppedToolCalls:b.response?.droppedToolCalls??null,appliedRequest:b.response?.requestMetadata??null,toolCalls:b.response?.toolCalls??[],modelResponse:b.response?.responseMetadata??null,c0Qualification:"unmeasured"},c.runId);return c.records.push({taskId:j,callId:l,ordinal:k,responseReceived:!!b.response,...m}),l}function k(a,b,c,e){let g=a&&h.get(a);if(!g)return;if(b.output.contractId!==g.contractId||b.output.projectSnapshotId!==g.projectSnapshotId||!g.expectedTaskIds.includes(b.output.taskId))throw Error("结构化候选的归档身份不属于当前运行");let i=g.candidates.filter(a=>a.taskId===b.output.taskId).length,j=(0,f.tv)(g.generatedDir,`author-candidate-${(0,d.randomUUID)()}.json`,{version:1,runId:g.runId,contractId:g.contractId,taskId:b.output.taskId,ordinal:i,rawCallId:c??null,protocolComplete:!0,qualityMeasured:!1,candidate:b,...e?{protocolCorrection:e}:{}},g.runId);g.candidates.push({taskId:b.output.taskId,ordinal:i,rawCallId:c??null,...j,contentHash:b.contentHash,hasContent:b.output.units.length>0})}function l(a){let b=h.get(a);if(!b)return;let c={expectedTasks:b.expectedTaskIds.length,observedTasks:new Set(b.records.filter(a=>b.expectedTaskIds.includes(a.taskId)).map(a=>a.taskId)).size,rawResponses:b.records.filter(a=>a.responseReceived).length};return(0,f.tv)(b.generatedDir,"author-candidates.json",{version:1,runId:b.runId,contractId:b.contractId,expectedTaskIds:b.expectedTaskIds,records:b.records,structuredCandidates:b.candidates,rawDrafts:b.rawDrafts,preAcceptanceWriting:{meaningfulDrafts:b.rawDrafts.filter(a=>"unmeasured"!==a.comparison.kind).length,unchangedBodyCorrections:b.rawDrafts.filter(a=>"unchanged-body"===a.comparison.kind).length,formattingOnlyChanges:b.rawDrafts.filter(a=>"formatting-only"===a.comparison.kind).length,contentChanges:b.rawDrafts.filter(a=>"content-changed"===a.comparison.kind).length,unmeasuredResponses:b.rawDrafts.filter(a=>"unmeasured"===a.comparison.kind).length,addedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.addedChars,0),removedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.removedChars,0),replacedChars:b.rawDrafts.reduce((a,b)=>a+b.comparison.replacedChars,0),scope:"actual-raw-writing-before-admission",professionalQualityMeasured:!1},...c,firstPassAndSemanticReworkMeasured:!1},b.runId),c}},34594:(a,b,c)=>{c.d(b,{D5:()=>i,vO:()=>h,y3:()=>g});var d=c(12866);let e=a=>"string"==typeof a?a.replace(/\r\n/gu,"\n").split("\n").map(a=>a.trim()).join("\n"):Array.isArray(a)?a.map(e):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,e(b)])):a,f=(a,b)=>JSON.stringify(e(a))===JSON.stringify(e(b));function g(a,b){let c=a.sections.map(a=>a.id);if(b.contractId!==a.id||b.projectSnapshotId!==a.projectSnapshotId||JSON.stringify(b.expectedTaskIds)!==JSON.stringify(c))throw Error("返工账不属于当前固定合同");let g=a.criteria.filter(a=>a.applicable&&a.sectionId).reduce((a,b)=>a+b.weight,0);if(b.rework.fixedReferenceUnits!==g)throw Error("返工职责分母已改变");let h=new Map,i=new Map,j=new Map,k=new Map,l=new Set,m=0,n=0,o=0,p=0;for(let d of b.revisions){if(!c.includes(d.taskId)||l.has(d.id)||!d.reason?.trim()||d.beforeHash!==(j.get(d.taskId)??null)||!d.afterHash||!["first-candidate","formatting","content"].includes(d.kind)||[d.addedChars,d.removedChars,d.replacedChars].some(a=>!Number.isSafeInteger(a)||a<0)||new Set(d.affectedCriterionIds).size!==d.affectedCriterionIds.length)throw Error("返工修改历史链不完整");if(!k.has(d.taskId)){let a=b.authorPassSealed&&b.c0TaskHashes?.[d.taskId]===null?"content":"first-candidate";if(d.kind!==a)throw Error("原首候选初始修订类型与固定C0身份不一致");k.set(d.taskId,d.afterHash)}if("first-candidate"===d.kind&&null!==d.beforeHash)throw Error("原首候选不能被后续修订刷新");if("content"!==d.kind&&(d.addedChars||d.removedChars||d.replacedChars||d.affectedCriterionIds.length))throw Error("非内容修订不能隐藏已发生返工");if(l.add(d.id),j.set(d.taskId,d.afterHash),"content"===d.kind){for(let b of d.affectedCriterionIds){let c=a.criteria.find(a=>a.id===b&&a.applicable&&a.sectionId===d.taskId);if(!c)throw Error("返工职责不属于原任务");m+=c.weight}h.set(d.taskId,(h.get(d.taskId)??0)+d.addedChars+d.removedChars+d.replacedChars);let b=i.get(d.taskId)??new Set;d.affectedCriterionIds.forEach(a=>b.add(a)),i.set(d.taskId,b),n+=d.addedChars,o+=d.removedChars,p+=d.replacedChars}}for(let[a,g]of Object.entries(b.tasks)){if(!c.includes(a)||j.get(a)!==g.current.contentHash||k.get(a)!==g.firstCandidate.contentHash)throw Error("当前候选或原首稿与修改历史不一致");let l=b.authorPassSealed&&b.c0TaskHashes?.[a]===null?void 0:g.firstCandidate.output;if(!f(l,g.current.output)){let b=new Map((l?.units??[]).map(a=>[a.id,a])),c=new Map(g.current.output.units.map(a=>[a.id,a])),j=new Set,k=0;for(let a of new Set([...b.keys(),...c.keys()])){let g=b.get(a),h=c.get(a);if(f(g,h))continue;[...g?.criterionIds??[],...h?.criterionIds??[]].forEach(a=>j.add(a));let i=g?String(e((0,d.renderAuthorUnit)(g))):"",l=h?String(e((0,d.renderAuthorUnit)(h))):"",m=0;for(;m<i.length&&m<l.length&&i[m]===l[m];)m++;let n=0;for(;n<i.length-m&&n<l.length-m&&i[i.length-n-1]===l[l.length-n-1];)n++;k+=Math.max(i.length-m-n,l.length-m-n)}if(f(l?.factBindings??[],g.current.output.factBindings)&&f(l?.decisionRequests??[],g.current.output.decisionRequests)&&f(l?.numericBindings??[],g.current.output.numericBindings??[])||g.current.output.units.flatMap(a=>a.criterionIds).forEach(a=>j.add(a)),(h.get(a)??0)<k||[...j].some(b=>!i.get(a)?.has(b)))throw Error("累计修改账没有覆盖真实原首稿至当前正文的内容或职责变更")}}if([...j.keys()].some(a=>!b.tasks[a]))throw Error("修订对应候选缺失");if(b.authorPassSealed){if(JSON.stringify(Object.keys(b.c0TaskHashes??{}).sort())!==JSON.stringify([...c].sort()))throw Error("固定C0任务分母缺失");for(let a of c){let c=b.c0TaskHashes[a];if(null!==c&&(!b.tasks[a]||c!==b.tasks[a].firstCandidate.contentHash))throw Error("固定C0首稿身份不一致")}}else if(void 0!==b.c0ReferenceChars)throw Error("未封存首稿不能签发固定C0字符分母");let q=a.sections.reduce((a,c)=>{let d=b.tasks[c.id]?.firstCandidate;return b.authorPassSealed&&null===b.c0TaskHashes[c.id]?a:a+(d?d.markdown.length:0)},0);if(b.authorPassSealed&&b.c0ReferenceChars!==q)throw Error("固定C0字符分母已改变");let r=n+o+p;return{fixedReferenceUnits:g,cumulativeUnits:m,cumulativeAddedChars:n,cumulativeRemovedChars:o,cumulativeReplacedChars:p,referenceChars:q,provisionalRatio:g?m/g:0,cumulativeCharRatio:q?r/q:0,changedChars:r,scope:b.authorPassSealed?"sealed-c0":"provisional-author-pass"}}function h(a,b){let c=g(a,b);for(let a of["fixedReferenceUnits","cumulativeUnits","cumulativeAddedChars","cumulativeRemovedChars","cumulativeReplacedChars","referenceChars","provisionalRatio","cumulativeCharRatio"])if(!Number.isFinite(b.rework[a])||Math.abs(b.rework[a]-c[a])>1e-9)throw Error("累计修改账与原修订历史或固定C0分母不一致");return c}function i(a,b){let c=h(a,b),d=[];return b.authorPassSealed||d.push("原作者首轮尚未封存,不能签发固定C0返工预算通过回执"),c.changedChars>.1*c.referenceChars&&d.push(`文档累计删增替换超出固定C0的10%字符预算:${c.changedChars}/${c.referenceChars};完整首稿和修改历史已保留`),d}},34680:(a,b,c)=>{c.d(b,{JP:()=>e,X6:()=>h,Zk:()=>f,fC:()=>i,w2:()=>g});var d=c(73806);function e(a){let b=a.template.chapters.length,c=`${a.template.name}
|
|
52
52
|
${a.template.category||""}
|
|
53
53
|
${a.requirement||""}`;return{mode:/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(c)?"strict":b>=8?"longform":"balanced"}}function f(a){return{...a?{strategy:a}:{},metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}function g(a,b){a.strategy=b}async function h(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function i(a){return a.map(a=>`## [${a.category}] ${a.name}
|
|
54
54
|
${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
|
|
@@ -56,7 +56,7 @@ ${b.trim()}
|
|
|
56
56
|
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],e=!1,f=!1;for(let a of b){let b=a.trim();if((0,d.bl)(b)&&(f=!0),f){c.push(a),(0,d.Ui)(b)&&(f=!1);continue}let g=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),h=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(g&&!h){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),e=!0;continue}if(e){if(!b){e=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;e=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}c(62576),c(81024)},34893:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(24299);let j=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function k(a,b,c){let d=(0,i.x)(b),f=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return j({version:c,inputKey:a,model:d})};return{load(b){let d=f(b),h=g().join(a,`${d}.json`);if(!e().existsSync(h))return;let i=JSON.parse(e().readFileSync(h,"utf8"));if(i.version!==c||i.cacheKey!==d||j(i.response)!==i.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:i.response,receipt:{cacheKey:d,responseSha256:i.responseSha256}}},save(b,d){let i=f(b),k=g().join(a,`${i}.json`);e().mkdirSync(a,{recursive:!0});let l=`${k}.${process.pid}.${(0,h.randomUUID)()}.tmp`;try{e().writeFileSync(l,JSON.stringify({version:c,cacheKey:i,responseSha256:j(d),response:d})),e().renameSync(l,k)}finally{e().rmSync(l,{force:!0})}}}}},35091:(a,b,c)=>{c.d(b,{Av:()=>u,E3:()=>z,GM:()=>n,MT:()=>x,O3:()=>t,Sb:()=>v,_n:()=>B,if:()=>p,oH:()=>w,qK:()=>s,rO:()=>A,vB:()=>y});var d=c(27606),e=c(76908),f=c(77598),g=c(54233),h=c(47103),i=c(63172),j=c(14409),k=c(28068),l=c(59011),m=c(92050);let n="document-contract-v9-explicit-writing-dependencies-2026-10-13",o=[{id:"response",label:"招标响应与交付完整性"},{id:"facts",label:"项目事实与技术依据"},{id:"understanding",label:"工程理解与项目针对性"},{id:"methods",label:"施工方法与控制可执行性"},{id:"planning",label:"部署资源与工期可行性"},{id:"assurance",label:"质量安全与验收闭环"},{id:"expression",label:"专业表达与图表有效性"}],p={project:["对象与部位范围","已确认的关键事实","项目特点对后文的影响"],basis:["来源与适用版本","适用对象","依据在本方案中的实际用途"],management:["责任岗位","触发条件","执行动作","交接接口","异常处理与闭环"],method:["作业条件:本节方法适用的对象、部位、工况及前置放行条件,不能用通用准备事项替代决定方法是否可实施的前提","方法与工序顺序:说明条件如何决定动作、动作怎样形成下一工序的作业面;同一对象和阶段的顺序与实际约束一致,不能只罗列工序名","接口与前后工序:明确移交对象、达到的状态和放行证据;不同阶段的初检、复核与最终验收应区分,不能把同一个验收条件同时写成动作前提和动作结果","控制点:控制对象、执行动作、合格或停止条件及其作用明确;本节尚未核定的技术决定不能用后续资料、审批或通用巡查替代","验收与记录:检查对象、所处阶段、确认岗位、放行条件与记录相互对应,验收能够证明所述方法及接口已达到要求","本节实际提出及明确委派的适用参数与依据;没有独立定量控制职责时不要求另造数字;数值有出处仍须核验工程对象、工况、层位及其在工序中的用途"],risk:["风险对象与触发条件","预防与监测","责任与响应","本节风险控制所需资源与联络;辨识评估只评价岗位和结果传递,不承接全套应急物资与救援联络","本节职责完成与问题闭环;辨识评估以签认和交接收束,恢复施工仅在承担应急处置职责时评价"],schedule:["工作量与约束","逻辑关系","资源能力","本节承担的持续时间及推导依据;资源选配或供应接口不重复承担完整总工期推导","冲突与纠偏"],presentation:["必需字段与结构","数据绑定与单位","关系与图文一致"],response:["适用要求与责任边界","实质响应","可行的履行方法"]},q=a=>(0,f.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),r=new WeakMap;function s(a,b){w(b),r.set(a,b)}function t(a,b,c){let d=a&&r.get(a);if(!d)return;let e=d.sections.filter(a=>a.chapterId===b&&a.title===c);if(1!==e.length)throw Error(`作者任务不属于冻结结构或身份重复:${b}/${c}`);return{contract:d,section:e[0]}}function u(a){let b=a.description,c=a.workPackage;return c?b.replace(`覆盖该工作包的全部 ${c.members.length} 个对象、部位和系统。`,`覆盖该工作包的全部 ${c.members.length} 个对象、部位和系统(清单见【本节工作包对象清单】)。`):b}function v(a){if(a.projectModel&&a.contract.projectSnapshotId!==a.projectModel.snapshotId)throw Error("作者资料投影不属于冻结合同项目");let b=new Map((a.projectModel?.sourceControls??[]).filter(a=>"verified-source-excerpt"===a.roleId).map(a=>[`${a.sourceFile}\0${a.sourceRef?.chunkIndex}`,(0,j.vg)(a)]));return[`【本节固定任务合同】任务 ${a.section.id},合同 ${a.contract.id},项目快照 ${a.contract.projectSnapshotId}。`,`内容职责:${a.section.responsibility};适用内容类型:${a.section.contentTypes.join("、")}。`,"按适用控制点形成可执行内容;详略按实际职责,不能靠重复或添加无关参数凑足。",...[...new Map(a.contract.criteria.filter(b=>b.sectionId===a.section.id&&b.sourceContext).map(a=>[a.sourceContext.index,a.sourceContext])).values()].map(c=>`【本任务义务来源定位】${JSON.stringify({file:c.file,section:c.section,...a.projectModel?{}:{text:c.text},physicalChunks:c.sourceSpans?.map(c=>{let d=b.get(`${c.file}\0${c.chunkIndex}`);return{file:c.file,chunkIndex:c.chunkIndex,...d&&a.projectModel?(0,m.mk)(a.projectModel,void 0,d):{}}})})}。完整物理原文在任务来源候选中只提供一份,问答、条件和例外一起核对;商业金额及提问假设不能变施工参数,义务摘要不作为项目事实。出处引用选择真实源库sourceIndex,不把母本序号当作者引用序号。`),...a.contract.deliveryPolicy?g.lY:[],...a.projectModel?[]:a.contract.criteria.filter(b=>b.sectionId===a.section.id&&b.applicable).map(a=>`- [${a.id}] ${u(a)}`),...function(a,b){let c=[...new Map(a.map(a=>a.workPackage).filter(a=>!!a).map(a=>[a.id,a])).values()];if(!c.length)return[];if(b&&c.some(a=>a.members.some(a=>!Object.hasOwn(b.sources,a.sourceFile))))throw Error("工作包目录包含非本次冻结来源");return["【本节工作包对象清单】以下为完整成员范围目录。每个memberId仍指向冻结清单的完整规格、原量单位及出处;query_work_packages可按memberIds批量取得完整记录。目录不授予源采用或正文已覆盖资格。按真实工法及采购安装用途归组写作,不逐件重复查已提供原文,不把供货清单当工序。",...c.flatMap(a=>{let b=new Map;for(let c of a.members){let a=JSON.stringify([c.object,c.scope,c.part,c.sourceFile]),d=b.get(a)??{object:c.object,scope:c.scope,part:c.part,sourceFile:c.sourceFile,memberIds:[],units:new Set,specifications:new Set};d.memberIds.push(c.id),d.units.add(c.unit),d.specifications.add(c.specification),b.set(a,d)}return[`工作包「${a.name}」共${a.members.length}个成员:${JSON.stringify([...b.values()].map(({specifications:a,units:b,...c})=>({...c,units:[...b],specificationVariants:a.size})))}`]})]}(a.contract.criteria.filter(b=>b.sectionId===a.section.id&&b.applicable),a.projectModel)].join("\n")}function w(a){if(a.version!==n)throw Error("文档合同版本不受支持;请按当前协议重新生成,不转换历史合同");if(void 0!==a.deliveryPolicy&&a.deliveryPolicy!==g.yD)throw Error("专业交付策略未登记");if(void 0!==a.factEvaluationScope&&"task-and-document-v1"!==a.factEvaluationScope)throw Error("文档事实评价作用域未登记");let{id:b,...c}=a;if(q(c)!==b)throw Error("评价合同已变更,不能改写冻结的义务分母");for(let[b,c]of[["章节",a.chapters.map(a=>a.id)],["小节",a.sections.map(a=>a.id)],["评价项",a.criteria.map(a=>a.id)]])if(c.some(a=>!a.trim())||new Set(c).size!==c.length)throw Error(`文档合同${b}身份重复或为空`);for(let b of[...a.chapters,...a.sections])if(!b.title.trim()||/[\r\n]/u.test(b.title))throw Error("合同标题必须是完整单行名称");let d=a.chapters.flatMap(a=>a.sectionIds);if(new Set(d).size!==d.length||q([...d].sort())!==q(a.sections.map(a=>a.id).sort()))throw Error("合同章内任务集合重复、遗漏或含未知身份");for(let b of a.chapters)if(b.sectionIds.some(c=>!a.sections.some(a=>a.id===c&&a.chapterId===b.id)))throw Error("合同章内任务归属不一致");for(let b of a.sections){if("boolean"!=typeof b.collectsDocumentNormativeUses||b.collectsDocumentNormativeUses&&!b.contentTypes.includes("basis"))throw Error("作者任务全文规范汇总依赖无效");if(!a.chapters.some(a=>a.id===b.chapterId)||!b.contentTypes.length||b.contentTypes.some(a=>!Object.hasOwn(p,a)))throw Error("作者任务的章或适用类型无效");if(new Set(b.criterionIds).size!==b.criterionIds.length||q([...b.criterionIds].sort())!==q(a.criteria.filter(a=>a.sectionId===b.id).map(a=>a.id).sort()))throw Error("作者任务评价集合与冻结分母不一致");if(b.parentSectionId&&!a.sections.some(a=>a.id===b.parentSectionId&&a.chapterId===b.chapterId&&(a.headingLevel??3)===3))throw Error("子任务的交付父小节无效")}for(let b of a.criteria){if(!o.some(a=>a.id===b.dimension))throw Error("评价项使用未登记的诊断维度;不执行旧评分维度");if(!Number.isFinite(b.weight)||b.weight<=0)throw Error("合同评价权重必须为有限正数");if(b.sectionId&&!a.sections.some(a=>a.id===b.sectionId&&a.chapterId===b.chapterId))throw Error("合同评价项的责任任务不属于该章");if(!b.applicable&&!b.notApplicableReason?.trim())throw Error("不适用项必须保留明确依据");if(b.workPackage){let a=b.workPackage.members;if(!Array.isArray(a)||!a.length||new Set(a.map(a=>a.id)).size!==a.length||a.some(a=>!a.id?.trim()||!a.sourceFile?.trim()||!Number.isSafeInteger(a.chunkIndex)||a.chunkIndex<0||"string"!=typeof a.specification||"string"!=typeof a.code||!Number.isSafeInteger(a.seq)||"string"!=typeof a.unit||!Number.isFinite(a.quantity)))throw Error("工作包覆盖清单缺少真实成员身份、原文特征、原量单位或来源定位")}}}function x(a){if(a.types?.length)return{types:[...new Set(a.types)],evidence:`规划明确声明:${a.responsibility}`};let b=`${a.title} ${a.responsibility}`,c=[];return/概况|项目边界|工程特点|基本信息/u.test(b)&&c.push("project"),/编制依据|适用说明|规范依据/u.test(b)&&c.push("basis"),/职责|制度|管理|组织机构|交接|协调/u.test(b)&&c.push("management"),(a.hasWorkPackages||/工艺|施工方法|施工方案|作业方法|操作步骤/u.test(b))&&c.push("method"),/风险|应急|危大|隐患/u.test(b)&&c.push("risk"),/进度|工期|资源配置|资源计划|劳动力计划/u.test(b)&&c.push("schedule"),/表格|图件|布置图|网络图|横道图|明细表/u.test(b)&&c.push("presentation"),/承诺|要求响应|履行/u.test(b)&&c.push("response"),{types:c.length?c:["management"],evidence:`规划职责候选:${b};${c.length?"按职责匹配":"通用程序职责,待主控确认具体专业类型"}`}}function y(a){let b=[],c=[],f=c=>{let d=b.filter(a=>!c.chapterId||a.chapterId===c.chapterId),e=a.reassignedCriterionOwners?.[c.id],f=e?.sectionId??a.criterionOwnerSectionIds?.[c.id]??(1===d.length?d[0].id:void 0);if(!f){c.source=`主要责任小节尚需确认;${c.source}`,c.admission??={status:"unmeasured",code:"unconfirmed-owner",effect:"candidate-review"};return}let g=(e?b:d).find(a=>a.id===f);if(!g)throw Error(`义务的主要责任小节不属于固定章结构:${c.id}`);if(e&&!e.reason.trim())throw Error("主控纠正义务归属必须说明真实职责依据");c.sectionId=g.id,c.chapterId=g.chapterId,g.criterionIds.push(c.id)},m=a.chapters.map(d=>{let e=d.sections?.length?d.sections:[d.title],f=e.map((f,h)=>{let i=`${d.id}:section:${h+1}`,j=a.sectionResponsibilities?.[i]??`本节主责:${f}`,l=x({title:f,responsibility:j,types:a.sectionTypes?.[i],hasWorkPackages:a.workPackageSections?.has(i)});a.sectionTypeEvidence?.[i]&&(l.evidence=a.sectionTypeEvidence[i]);let m=a.taskHeadings?.[i],n=m?.parentTitle?e.findIndex(a=>a===m.parentTitle):-1;if(m?.level===4&&n<0)throw Error("作者子任务缺少真实交付小节");let o={headingLevel:m?.level??3,...n>=0?{parentSectionId:`${d.id}:section:${n+1}`}:{},id:i,chapterId:d.id,title:f,responsibility:j,contentTypes:l.types,collectsDocumentNormativeUses:a.documentNormativeUseCollectorIds?.has(i)??!1,typeEvidence:l.evidence,criterionIds:[]},q=(a,b,e,f)=>{let g=`${i}:${a}:${b}`;o.criterionIds.push(g),c.push({id:g,chapterId:d.id,sectionId:i,dimension:a,description:e,critical:f,weight:1,source:l.evidence,applicable:!0})};for(let b of(q("response","responsibility",`完成本节职责:${j},不能只有标题`,!0),a.facts.some(k.j)&&q("facts","assertions","本节实际陈述的项目事实与数值应有对应的真实属性或完整原文依据,保持对象、部位、条件及已裁决口径;规范与拟定安排不得冒充资料既定值。纯定性管理程序无需补数字或重复项目概况,只核验其实际陈述,不以参数数量判分",!0),(a.unconfirmedSectionTypes?.has(i)||m?.confirmed===!1)&&(q("understanding","type-applicability","主控在写作前确认本节内容类型与适用控制点,不能套用默认管理程序替代专业职责",!0),c.at(-1).source="内容类型尚未确认",c.at(-1).admission={status:"unmeasured",code:"unconfirmed-content-type",effect:"candidate-review"}),l.types))for(let[a,c]of p[b].entries())q("schedule"===b?"planning":"risk"===b?"assurance":"project"===b?"understanding":"basis"===b?"facts":"presentation"===b?"expression":"response"===b?"response":"methods",`${b}:${a+1}`,`${b}:${c};仅在本节对象适用的范围评价,不补造数字`,!1);return q("expression","readable","表达或数据载体完整可读,表图和文字中的关系一致",!1),q("understanding","substance",a.deliveryPolicy?g.HU:"内容切合项目、解释充分,措施可以执行,不以套话或原文粘贴代替方案",!1),q("understanding","scope","遵守本节主责和统一事实,重复处使用必要承接,不矛盾也不删除必要内容",!1),b.push(o),i});for(let[b,e]of d.requiredFacts.entries()){let f=a.requiredContentNeeds?.[e],g=j.nC.find(a=>a.key===e||a.label===e||a.aliases.includes(e)),h=a.facts.filter(a=>(0,k.j)(a)&&(g?(0,j.nD)(a)?.key===g.key:a.fieldId===e||a.fieldName===e||a.key===e)),i=g&&!j.zT.has(g.key)?h.filter(a=>"scale"===g.valueType?"项目主体"===a.objectName:!!a.objectName):h,m=h.length>0&&!i.length;c.push({id:`${d.id}:facts:${b+1}`,chapterId:d.id,dimension:f&&"project-fact"!==f.kind?"method"===f.kind?"methods":"planned-resource"===f.kind?"planning":"response":"facts",description:(0,l.HN)(e,f),...!f||"project-fact"===f.kind?m?{candidateFactIds:h.map(j.vg),description:`${(0,l.HN)(e,f)};实际属性原文候选已提供,须解释对象及口径后在正文逐断言核验,不同时采用互斥值,也不解释为原文缺料`}:{factIds:i.map(j.vg)}:{},...(!f||"project-fact"===f.kind)&&!h.length?{admission:{status:"unmeasured",code:"unmeasured-required-fact",effect:"candidate-review"}}:f?.confirmed===!1?{admission:{status:"unmeasured",code:"unconfirmed-obligation",effect:"candidate-review"}}:{},weight:1,critical:!0,applicable:!0,source:f?.confirmed===!1?"内容职责性质尚未确认":f?`主控编译必需内容:${f.kind};${f.reason}`:"规划必用事实"})}for(let[a,b]of(d.tablePlans??[]).entries())c.push({id:`${d.id}:table:${b.id||a+1}`,chapterId:d.id,dimension:"expression",description:`完成「${b.title}」及字段:${b.fields.map(a=>a.name).join("、")}`,carrier:"table",weight:1,critical:b.required,applicable:!0,source:b.reason});for(let[b,e]of(d.diagramRequirements??[]).entries())c.push({id:`${d.id}:figure:${b+1}`,chapterId:d.id,dimension:"expression",description:`完整承接明确图件职责:${e};${a.bodyDiagramForbidden?"正文禁图时以完整结构化表格承载节点、时间或关系并说明,不插入图片":"必须形成实际图件,完整保留节点、数据和关系,不能只留未来绘制承诺"}`,carrier:a.bodyDiagramForbidden?"table":"figure",weight:1,critical:!0,applicable:!0,source:"已明确的图件及图文关系要求"});return{id:d.id,title:d.title,sectionIds:f}});c.push({id:"document:consistency:cross-chapter",dimension:"planning",description:"全文按对象与适用条件保持共同事实、措施决定和交接关系一致;不同章节不能作相互冲突的承诺或重复完整展开同一职责",weight:1,critical:!0,applicable:!0,source:"冻结全文一致性职责"});let o=[];for(let b of a.requirements){let f=(0,d.DS)(b);if(o.includes(f))throw Error(`文档合同义务身份重复:${f};应在要求裁决层合并来源`);o.push(f);let g=a.assignments.filter(a=>(0,d.DS)(a.entry)===(0,d.DS)(b));if(1!==g.length)throw Error(`文档合同要求必须有唯一主责章:${b.text}`);let h=a.chapters.find(a=>(0,i.NT)(a.title)===(0,i.NT)(g[0].chapterTitle));if(!h)throw Error(`文档合同要求的主责章不存在:${g[0].chapterTitle}`);let j=b.discoveryEvidence&&a.requirementSourceLibrary?.units.find(a=>a.index===b.discoveryEvidence.sourceIndex);if(b.discoveryEvidence&&(!j||j.parentFingerprint!==b.discoveryEvidence.parentFingerprint))throw Error("技术义务缺少同一当前完整原母,不能只给作者摘要");let k=(0,e.eW)(b.scopeReview?{...b,text:b.scopeReview.responsibility}:b,a.facts);c.push({id:f,chapterId:h.id,dimension:"response",description:`${b.policy}:${k.text}${"comply"===b.policy?";遵守类不要求逐字复述原条款,核验本节方案是否遵守适用控制及有无矛盾,不因未抄写原文判缺少响应":""}${k.factIds.length?";obligationContexts保留的日期母本仅用于审计,已证取代的日期不再作为正文响应或一致性评价目标;日期按effectiveTemporalControls及当前事实评价,其他原职责继续承担":""}`,...k.factIds.length?{factIds:k.factIds,effectiveTemporalControls:k.sources}:{},obligationId:f,obligationPolicy:b.policy,...b.discoveryEvidence?{discoveryEvidence:b.discoveryEvidence,sourceContext:j}:{},weight:1,critical:!1,applicable:!0,source:k.sources.length?JSON.stringify({originalSources:b.sources,currentTemporalControls:k.sources}):JSON.stringify(b.sources)})}for(let b of a.extraObligations??[]){if(o.includes(b.id))throw Error("附加交付义务身份重复");o.push(b.id),c.push({id:b.id,chapterId:b.chapterId,dimension:"response",description:b.text,source:b.source,...b.admission?{admission:b.admission}:{},...b.workPackage?{workPackage:b.workPackage}:{},weight:1,critical:!1,applicable:!0,obligationId:b.id})}for(let b of c.filter(a=>!a.sectionId)){let c=a.extraObligations?.find(a=>a.id===b.id);c?.global||"document:consistency:cross-chapter"===b.id||f(b)}for(let b of(a.facts.some(k.j)&&c.push({id:"document:facts:assertions",dimension:"facts",description:"全文的项目事实陈述应与冻结资料中的对象、部位、范围及生效口径一致;定量断言须有项目事实、适用规范、可复核推导或明确拟定安排的来源,不扩大事实适用范围或把拟定值冒充资料既定值",weight:1,critical:!0,applicable:!0,source:"冻结项目事实池与全文事实断言核对"}),a.deliveryPolicy&&c.push({id:"document:consistency:construction-system",dimension:"planning",description:"按本项目实际交付范围核对整套施工组织闭合:同一工程量与部位进入部署和适用方法,同一工作面及工序连接资源和时间;材料到货早于使用,机械班组同期不被重复占用,检测与等待进入转序,质量安全对象对应实际工序,适用的总平面服务部署物流,主要实体最终有验收或移交去向。按具体对象和关系举证,不将章节各自自洽或图上有箭头当整篇可执行;不存在的专业或不承担的交付功能不强行加入",weight:1,critical:!0,applicable:!0,source:"用户编制规范的跨章节施工数据链与功能闭合,按本轮专业交付范围适用"}),[{dimension:"understanding",description:"由真实工程条件解释分区部署、重难点及方法选择,说明这些条件如何影响实际实施,不能只列项目名或关键词。"},{dimension:"planning",description:"按本项目承担的工作面、数量用途、有效产能、同期资源和活动依赖核方案可行性;不同对象及必要等待清楚,不以阶段总数相加冒充关键线路。"},{dimension:"assurance",description:"真实施工对象对应有效质量、安全、异常处置和验收移交;不强加不存在的专业与风险,不用泛化巡查替代关键控制。"},{dimension:"expression",description:"全文以专业标题、简明叙述和有效图表表达实际决定;正常专业名称与必要承接可重复,不用参数数量、图片数量或箭头数量评价。"}]))c.some(a=>a.dimension===b.dimension)||c.push({id:`document:${b.dimension}`,...b,weight:1,critical:!1,applicable:!0,source:"实际交付范围的整篇专业诊断,按承担的工程职责评价"});for(let[b,d]of Object.entries(a.dimensionApplicability??{})){if(!1!==d.applicable||!d.reason.trim()||!d.source.trim()||/没(?:有)?抽|检测失败|没写|资料不足|未返回/u.test(d.reason))throw Error(`维度不适用缺少真实范围依据:${b}`);let a=c.filter(a=>a.dimension===b);if(a.some(a=>"实际交付范围的整篇专业诊断,按承担的工程职责评价"!==a.source))throw Error(`已有明确专业义务的维度不能整维排除:${b}`);for(let b of a)b.applicable=!1,b.notApplicableReason=`${d.source}:${d.reason}`}for(let b of c){let c=a.applicability?.[b.id];if(c){if(!c.reason.trim())throw Error(`评价项适用性缺少编译依据:${b.id}`);if(!c.applicable&&/没(?:有)?抽|检测失败|没写|资料不足|未返回/u.test(c.reason))throw Error(`缺项不能从评价分母排除:${b.id}`);b.applicable=c.applicable,c.applicable||(b.notApplicableReason=c.reason)}}let r={version:n,projectSnapshotId:a.projectSnapshotId,...a.facts.some(k.j)?{factEvaluationScope:"task-and-document-v1"}:{},...a.requireQuantitativeSources?{numericSourcePolicy:"required-v1"}:{},...a.deliveryPolicy?{deliveryPolicy:a.deliveryPolicy}:{},...a.deliveryPolicy?{writingKnowledge:{version:h.bp,projectType:a.writingProjectType??"general",sourceHashes:Object.values(h.wJ).map(a=>a.sha256)}}:{},inputSnapshotHash:a.inputSnapshotHash,chapters:m,sections:b,criteria:c,obligationIds:o,scoringCalibration:"expert-anchors-pending",...a.dimensionApplicability?{dimensionApplicability:a.dimensionApplicability}:{}};return{...r,id:q(r)}}let z=["deficient","usable","professional","strong"],A={deficient:"缺陷明显",usable:"基本可用",professional:"专业充分",strong:"针对性与组织性较好",unmeasured:"尚未评级"};function B(a,b){w(a);let c=new Map,d=new Set(a.criteria.map(a=>a.id));for(let e of b){if(!d.has(e.criterionId)||c.has(e.criterionId))throw Error(`质量回执身份不合法或重复:${e.criterionId}`);if(!["met","not-met","unmeasured"].includes(e.status))throw Error(`质量回执状态不合法:${e.criterionId}`);if(e.qualityLevel&&![...z,"unmeasured"].includes(e.qualityLevel))throw Error(`专业档位无效:${e.criterionId}`);let b=a.criteria.find(a=>a.id===e.criterionId);if("met"===e.status&&b.factIds?.length===0)throw Error(`必用事实没有可靠身份,不能宣称落实:${e.criterionId}`);c.set(e.criterionId,b.admission?.status==="unmeasured"?{...e,status:"unmeasured",reason:`职责范围尚未核定,不能以正文评审消除待核责任;${e.reason}`}:e)}let e=o.map(b=>{let d=a.criteria.filter(a=>a.dimension===b.id&&a.applicable),e=d.filter(a=>c.get(a.id)?.status==="met").length,f=d.filter(a=>c.get(a.id)?.status==="not-met").length,g=d.length-e-f,h=a.criteria.filter(a=>a.dimension===b.id&&!a.applicable).map(a=>a.notApplicableReason),i=a.dimensionApplicability?.[b.id];!d.length&&i&&h.push(`${i.source}:${i.reason}`);let j=!d.length&&h.length>0,k=d.map(a=>c.get(a.id)?.status==="not-met"?"deficient":c.get(a.id)?.status!=="met"?"unmeasured":c.get(a.id)?.qualityLevel??"unmeasured"),l=k.includes("deficient")?"deficient":!k.length||k.includes("unmeasured")?"unmeasured":z[Math.min(...k.map(a=>z.indexOf(a)))];return{...b,status:j?"not-applicable":g||!d.length?"unmeasured":"measured",notApplicableReasons:h,verification:{met:e,failed:f,unmeasured:g,total:d.length},coverage:d.length?(e+f)/d.length:+!!j,qualityLevel:l,qualityLabel:A[l]}}),f=a.criteria.filter(a=>a.applicable&&c.get(a.id)?.status!=="met"),g=f.filter(a=>a.critical||c.get(a.id)?.impact==="blocking").map(a=>a.id),h=new Map,i={minor:0,major:1,blocking:2};for(let a of f){let b=c.get(a.id),d=b?.defectId||`criterion:${a.id}`,e=g.includes(a.id)?"blocking":b?.impact??"major",f=h.get(d),j=b?.reason??"尚未执行核验";h.set(d,{id:d,criterionIds:[...f?.criterionIds??[],a.id],impact:f&&i[f.impact]>i[e]?f.impact:e,status:f?.status==="not-met"||b?.status==="not-met"?"not-met":"unmeasured",reason:f&&f.reason!==j?`${f.reason};${j}`:j})}let j=[...h.values()],k=a.criteria.filter(a=>a.applicable&&c.get(a.id)?.status==="met").flatMap(a=>{let b=c.get(a.id),d=b.qualityLevel??"unmeasured";return"professional"===d||"strong"===d?[]:[{criterionId:a.id,chapterId:a.chapterId,dimension:a.dimension,qualityLevel:d,reason:b.reason,...b.quote?{quote:b.quote}:{}}]}),l=e.every(a=>"unmeasured"!==a.status),m=e.filter(a=>"not-applicable"!==a.status).every(a=>"unmeasured"!==a.qualityLevel);return{version:n,contractId:a.id,scoringCalibration:a.scoringCalibration,dimensions:e,blocking:g,defects:j,qualityGaps:k,verificationComplete:l,deliveryReady:0===f.length&&l&&m&&0===k.length,qualityRated:m,expertValidated:!1}}},35405:(a,b,c)=>{c.d(b,{Bj:()=>j,xj:()=>i});var d=c(77598);let e=new Set(["decisionId","requestId","toolCallId","capturedAt","recordedAt","startedAt","endedAt","finishedAt","elapsedMs","durMs","queryTimeMs"]);function f(a){return Array.isArray(a)?a.map(f):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).filter(([a])=>!e.has(a)).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>[a,f(b)])):a}let g=a=>(0,d.createHash)("sha256").update(JSON.stringify(f(a))).digest("hex"),h=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function i(a){return a.flatMap(a=>{let b=h(a.data);if(!a.ok||!b)return[];let c=h(b.directoryState);if("query_cad_context"===a.toolName&&["frames","instances"].includes(String(b.kind))&&c?.scope==="indexed-cad-directory"&&!0===c.complete&&0===c.recordCount&&"string"==typeof b.parsedIdentity&&"string"==typeof b.filePath)return[g(["empty-cad-directory",b.projectSnapshotId,b.filePath,b.parsedIdentity,b.kind])];if("ask_chief"===a.toolName){if("model"!==b.source)return[];let a=Object.fromEntries(("use-facts"===b.action?["factIds"]:"use-sources"===b.action?["sourceIds"]:"engineering-controls"===b.action?["controls","writingControls"]:"qualitative-controls"===b.action?["qualitativeControls"]:[]).filter(a=>Array.isArray(b[a])&&b[a].length>0).map(a=>[a,b[a]]));return Object.keys(a).length?[g(["chief-decision",b.taskId,b.action,a])]:[]}let d=Object.fromEntries(("query_construction_plan"===a.toolName?["activities","plannedResources","numbers","materials"]:"query_project_facts"===a.toolName?["candidates","sourceEvidence"]:"query_cad_context"===a.toolName?["records"]:"query_source_units"===a.toolName?["units"]:"read_source"===a.toolName?["chunks"]:["search_evidence","query_work_packages","discover_files"].includes(a.toolName)?["items"]:"list_skills"===a.toolName?["skills"]:"match_skills"===a.toolName?["matched"]:[]).flatMap(c=>{if(!Array.isArray(b[c]))return[];let d=b[c].filter(b=>{let c=h(f(b));return!!c&&!!Object.keys(c).length&&("read_source"!==a.toolName&&"search_evidence"!==a.toolName||"string"==typeof c.content&&!!c.content.trim())}),e="search_evidence"===a.toolName?d.map(a=>Object.fromEntries(Object.entries(h(a)).filter(([a])=>!["score","rank","retrievalRank","retrievalScore"].includes(a)))):d;return e.length?[[c,e]]:[]}));"load_skill"===a.toolName&&h(b.skill)&&(d.skill=b.skill);let e=Object.fromEntries(["snapshotId","projectSnapshotId","contractId",..."query_construction_plan"===a.toolName?["id"]:[],"filePath","relativePath","parsedIdentity","sceneVersion","kind","frameId","rootInstanceId","units","metadata","sourceVersionEligibility"].filter(a=>void 0!==b[a]).map(c=>[c,"metadata"===c&&"read_source"===a.toolName&&h(b[c])?Object.fromEntries(Object.entries(h(b[c])).filter(([a])=>!["mtime","indexedAt"].includes(a))):b[c]])),i=Object.entries(d).flatMap(([c,d])=>(Array.isArray(d)?d:[d]).map(d=>{let f=h(d);if("query_project_facts"===a.toolName&&f?.factId&&"verified-source-excerpt"!==f.roleId)return g(["project-fact",b.snapshotId??b.projectSnapshotId,f.factId,f.value,f.controlContext??null,h(f.sourceVersionEligibility)?.status??null]);if("query_project_facts"===a.toolName&&f&&(f.sourceEvidenceId||"verified-source-excerpt"===f.roleId))return g(["source-excerpt",b.snapshotId??b.projectSnapshotId,f.sourceEvidenceId??f.factId,f.value]);let i="query_construction_plan"===a.toolName&&"numbers"===c&&f?Object.fromEntries(Object.entries(f).filter(([a])=>"basisId"!==a)):d;return g(["source-material",a.toolName,e,c,i])}));return Number.isSafeInteger(b.offset)&&Number.isSafeInteger(b.nextOffset)&&Number(b.nextOffset)>Number(b.offset)&&i.push(g(["source-cursor",a.toolName,e,{offset:b.offset,nextOffset:b.nextOffset}])),i})}async function j(a){let b,{budget:c}=a,e=[...a.initialMessages],f=0,h=0,j="模型未产出可用正文",k="turns-exhausted",l=new Set(i(a.initialEvidence??[])),m=new Set,n=0;for(let o=1;void 0===c.maxTurnsPerBlock||o<=c.maxTurnsPerBlock;o+=1){if(void 0!==c.maxToolCallsPerBlock&&f>=c.maxToolCallsPerBlock){j=`显式工具调用预算耗尽(${f}/${c.maxToolCallsPerBlock})`,k="tool-budget-exhausted";break}let p=await a.runTurn({system:a.system,messages:e,turn:o,...void 0!==c.maxToolCallsPerBlock?{toolCallLimit:Math.max(0,c.maxToolCallsPerBlock-f)}:{}});if(h=o,f+=p.toolCalls.length,p.refused)return a.onTurn?.({turn:o,residual:b?.residual??0,toolCalls:f,action:"unfixable"}),b?{kind:"unfixable",content:b.content,turn:o,residual:b.residual,toolCalls:f,reason:p.refused.message,issues:[],cause:"budget-refused"}:{kind:"budget_refused",turn:o,reason:p.refused.message,refused:p.refused};let q=i(p.toolResults??[]);p.protocolRecovery?.sentOutputBudget!==null&&p.protocolRecovery?.sentOutputBudget!==void 0&&q.push(g(["protocol-recovery",p.protocolRecovery.sentOutputBudget]));let r=q.some(a=>!l.has(a));q.forEach(a=>l.add(a)),r&&(n=0);let s=p.committed||p.text;if(s?.trim()){let c=await a.check(s),g=c.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length;if(c.degraded.length>0&&!c.executed.length)return a.onTurn?.({turn:o,residual:g,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:s,turn:o,residual:g,toolCalls:f,reason:`自查维度全部降级(${c.degraded.join("、")}),本块未做自查,保留当前草稿`,issues:c.issues,cause:"checks-degraded"};if(0===g&&!c.degraded.length)return a.onTurn?.({turn:o,residual:g,toolCalls:f,action:"commit"}),{kind:"passed",content:s,turn:o,residual:g,toolCalls:f};let h=(0,d.createHash)("sha256").update(JSON.stringify([s,c])).digest("hex"),i=m.has(h);if(m.add(h),(!b||g<b.residual)&&(b={content:s,residual:g}),i&&!r){j="相同候选与裁决重复,未取得新证据或改善",k="no-progress";break}a.onTurn?.({turn:o,residual:g,toolCalls:f,action:"regenerate"}),e=[...e,...p.toolMessages??[],{role:"assistant",content:s},{role:"user",content:function(a){let b=a.filter(a=>"error"===a.level||"blocker"===a.severity),c=b.slice(0,12).map((a,b)=>`${b+1}. ${a.detectorId?`[${a.detectorId}] `:""}${a.message}`),d=b.slice(12),e=new Map;for(let a of d){let b=a.detectorId||"(未标注判据)";e.set(b,(e.get(b)||0)+1)}return["【自查裁决】本稿未通过判据,下列问题必须修正后重新输出完整本节正文:",...c,d.length>0?`${d.length} 条未逐条列出,按判据分布:${[...e.entries()].map(([a,b])=>`${a} ${b} 条`).join("、")}`:"","修正要求:直接输出修正后的**完整**本节正文(不要只输出改动片段、不要解说改动过程);保留原有事实、数值与结论,不得以删除内容的方式规避问题。"].filter(Boolean).join("\n")}(c.issues)}];continue}let t=p.toolMessages??[];if(r)e=[...e,...t];else{let a=++n;if(a>=3){j="相同无进展状态在具体反馈后仍未取得新证据、游标或主控决定",k="no-progress";break}e=[...e,...t,{role:"user",content:1===a?"本轮没有新增可用来源、分页游标或已接受的主控决定。原始工具回执已保留;空结果或失败不证明资料缺失,也不能用改查询词、调用ID或再报缺来冒充进展。请依据已取得的资料换用有实际依据的工具/继续真实nextOffset,或向已接线的主控说明具体对象、已查范围与失败;若仍无法核定,保留真实decisionRequests并提交已能完成的正文,不编造参数或条件。":"再次没有新增证据。立即停止重复取证:把已能完成的正文按协议提交(未决事项写入decisionRequests保留),拟定配置按工程经验带依据给出(正文标“拟定”并登记plannedNumbers);继续同类工具调用不会产生新证据。"}]}void 0!==c.maxTurnsPerBlock&&o>=c.maxTurnsPerBlock&&(j="显式轮次预算耗尽,模型尚未提交正文")}return b?(a.onTurn?.({turn:h,residual:b.residual,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:b.content,turn:h,residual:b.residual,toolCalls:f,reason:j,issues:[],cause:k}):{kind:"no_content",turn:h,toolCalls:f,reason:j,cause:k}}},35547:(a,b,c)=>{c.d(b,{Ih:()=>g,ON:()=>m,Vl:()=>v,WY:()=>i,eS:()=>d,nm:()=>k,qE:()=>K,u2:()=>f});let d=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,e=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function f(a){let b=[];for(let c of a.matchAll(e)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d;f!==e&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料统一三者数值,删除错误数值表述。`})}return b}let g=/(?<!分)([\u4e00-\u9fa5]{2})\1(?!项)/gu,h="抹面|打底|找平|坐浆|结合层|粘结层|罩面|批嵌|腻子";function i(a){let b=[];for(let c of a.matchAll(RegExp(`(${h})[^。;;
|
|
57
57
|
|]{0,10}?(\\d{3,})\\s*mm`,"gu"))){let a=Number(c[2]);a>=100&&b.push(`“${c[1]}”厚度 ${a}mm`)}for(let c of a.matchAll(RegExp(`(\\d{3,})\\s*mm厚?[^。;;
|
|
58
58
|
|]{0,18}(${h})`,"gu"))){let a=Number(c[1]);a>=100&&b.push(`“${c[2]}”厚度 ${a}mm`)}let c=[...new Set(b)].slice(0,3);return 0===c.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`装饰层工艺参数异常:${c.join("、")} 远超工艺常规厚度(抹面/打底/找平 20mm、坐浆 20~30mm)`,suggestion:"装饰层(抹面/打底/找平/坐浆/结合层)厚度按工艺常规取值:抹面打底找平 20mm、坐浆 20~30mm,与结构层厚度(墙体/垫层/回填)区分,不得串用。"}]}let j=/不再另行(?:出现|统计|编制|设置|单列|重复)[^。;;\u000A]{0,40}|以[^。;;\u000A]{0,16}为唯一[^。;;\u000A]{0,24}不再[^。;;\u000A]{0,20}|不再另行[^。;;\u000A]{0,24}(?:口径|基准|表述|数值|数据|统计)/gu;function k(a){let b=[...a.matchAll(j)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文存在元话语声明句 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):声明≠数据,正文只保留数据不保留口径声明`,suggestion:"删除「不再另行出现其他口径」「不再另行统计累计投入人次」「以 X 为唯一控制基准,不再…」类自我声明句;数据本身的唯一性由数值一致体现,不需要文字声明。"}]}let l=/(?:[Pp]\s*=\s*[^。;;\n]{0,60}(?:Σ|cosφ|[Kk][12])|[qQ]\s*=\s*[^。;;\n]{0,40}|Σ\s*P|cos\s*φ|[Kk][12]\s*[×*]\s*Σ|[Kk][12]\s*Σ\s*P)/gu;function m(a){let b=[...a.matchAll(l)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现公式形态残留 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):正文只允许计算值不允许计算公式`,suggestion:"删除公式符号(P =、Σ、cosφ、K1、q =),只保留计算结果值:如「用电负荷约 48kW」「高峰日生活用水量约 X m\xb3」;公式推导过程一律不进入正文。"}]}let n=/^\s*\|[\s:|-]+\|/u,o=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,p=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,q=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,r=/工程|项目|标段|业绩/u,s=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,t=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,u=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function v(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(o))p.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(q))r.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(s))c.push(b[0].trim());for(let b of a.matchAll(t))u.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let w=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,x=/^(?:其他|其它|其余|剩余|差额|补差)/u,y=/^(?:其中|占比|比例|备注|说明|注[::])/u,z=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,A=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,B=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,C=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,D="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function E(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function F(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||C.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(z.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(A.test(d)||B.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(D,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(D,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function G(a){let b=F(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function H(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=F(a);if(f.uncertain||x.test(E(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function I(a){return String(Math.round(100*a)/100)}function J(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function K(a){let b=function(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>n.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(function(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}(a);if(0===b.length)return[];let c=[];for(let a of b){let b=function(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>w.test(E(b[a]??""))),e=c.map((a,b)=>b).filter(a=>w.test(E(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||y.test(E(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=G(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=H(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=J(a[0]??"")||`第 ${c+1} 行`,n=J(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${I(e.value)}${e.unit} ≠ 分项和 ${I(k.sum)}${k.unit}(差 ${I(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=G(e);if(!g)continue;let j=H(c.filter((a,b)=>b!==i&&!y.test(E(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=J(a[0]??"")||"合计",m=J(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${I(g.value)}${g.unit} ≠ 分项和 ${I(j.sum)}${j.unit}(差 ${I(k)})`)}}return f}(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}},37095:(a,b,c)=>{c.d(b,{CU:()=>s,H7:()=>r,JB:()=>p,Qf:()=>n,kW:()=>q,oy:()=>o});var d=c(51342),e=c(29021),f=c(33873),g=c(19898);function h(a){return f.join((0,d.J0)(),"projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a,b){let c=h(a);e.mkdirSync(f.dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(d,`${(function(a){if(a.length<=200)return a;let b=new Set([...a].sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,200).map(a=>a.id));return a.filter(a=>b.has(a.id))})(b).map(a=>JSON.stringify(a)).join("\n")}
|
|
59
|
-
`,"utf8"),e.renameSync(d,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return e.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),d=k.get(a);if(d&&d.mtimeMs===c)return d.records;let f=function(a){let b=function(a){let b=h(a);return e.existsSync(b)?e.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).find(a=>a.id===b)}function q(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function r(a){let b=m(a),c=h(a);return e.existsSync(c)&&e.unlinkSync(c),k.delete(a),b.length}function s(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},37502:(a,b,c)=>{c.d(b,{Cg:()=>q,Yd:()=>r,eC:()=>A,lH:()=>z,p7:()=>s,q1:()=>B});var d=c(58214),e=c(11248),f=c(14409),g=c(91898),h=c(57656),i=c(44753);let j=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须为对象`);return a},k=(a,b,c)=>{if(Reflect.ownKeys(a).some(a=>"string"!=typeof a||!b.includes(a)))throw Error(`${c}含未知字段`)},l=(a,b)=>{if("string"!=typeof a||!a.trim()||a.length>4e3)throw Error(`${b}须有明确文本`);return a},m=(a,b,c=0)=>{if(!Array.isArray(a)||a.length<c||a.length>96||Array.from(a).some(a=>void 0===a))throw Error(`${b}必须为完整数组`);return a},n=(a,b,c)=>{let d=m(a,c);if(d.some(a=>!Number.isSafeInteger(a)||0>Number(a)||Number(a)>=b)||new Set(d).size!==d.length)throw Error(`${c}越界、重复或不属于本任务实际字典`);return d},o=a=>a.replace(/^([+−-]?\d+(?:\.\d+)?)/u,a=>String(Number(a.replace("−","-")))),p=(a,b)=>{let c=b.trim();return/^[A-Za-z][A-Za-z\d]*(?:[-./][A-Za-z\d]+)*$/u.test(c)&&/\d/u.test(c)?[(0,e.K3)(c)]:[...new Set([...(0,d.ei)(`${a} ${b}`).map(o),...(b.match(/(?<![A-Za-z\d])[A-Za-z][A-Za-z\d]*(?:[-./][A-Za-z\d]+)*(?![A-Za-z\d])/gu)??[]).filter(a=>/\d/u.test(a)&&(/[-./]/u.test(a)||!(0,d.ei)(a).length)).map(e.K3)])]},q=p,r=a=>"design-geometry"===(0,g.p)({fieldId:a,key:a,value:"1m",objectName:"已给对象"}).role||/标高|高程|坑深|坑底深度|桩长|桩径|净宽|净高|实体尺寸|构件尺寸/u.test(a)||/深度/u.test(a)&&!/每层|分层|单层/u.test(a),s=function(a,b,c){if(/(?:约|左右|大约|大致|估计)|\d\s*(?:~|~|至|到|–|—)\s*[+−-]?\d/u.test(a))return!0;let d="(mm|毫米|cm|厘米|m|米)",e="([+−-]?\\d+(?:\\.\\d+)?)";for(let a of b.matchAll(RegExp(`${e}\\s*${d}?\\s*(?:~|~|至|到|–|—|-)\\s*${e}\\s*${d}(?![a-zA-Z\xb2\xb323])`,"giu")))if([a[1]+(a[2]??a[4]),a[3]+a[4]].some(a=>p("",a).includes(c)))return!0;for(let a of b.matchAll(RegExp(`(?:约|大约|大致|估计)\\s*${e}\\s*${d}|${e}\\s*${d}\\s*左右`,"giu")))if(p("",(a[1]??a[3])+(a[2]??a[4])).includes(c))return!0;return!1},t={type:"string",minLength:1},u={type:"integer",minimum:0},v={type:"array",items:t},w=(a,b)=>{if(!["confirmed","rejected","unmeasured"].includes(String(a)))throw Error(`${b}状态无效`);return a},x=(a,b)=>{let c=((a,b,c=0)=>m(a,b,c).map(a=>l(a,b)))(a,b);if(new Set(c).size!==c.length)throw Error(`${b}重复`);return c},y=(a,b)=>a.length===b.length&&a.every(a=>b.includes(a));function z(a,b){let c=j(a,"施工工况复核");if(k(c,["confirmed","reason","sourceResults","sourceCases","variantResults","controlsResults","uncoveredSourceCases"],"施工工况复核"),"boolean"!=typeof c.confirmed)throw Error("施工工况复核缺少实际确认状态");let d=b.requiredSourceDictionaryIndices??[...new Set(b.variants.flatMap(a=>a.sourceDictionaryIndices))];n([...d],b.sourceDictionary.length,"待复核完整来源字典");let g=new Set(b.variants.map(a=>a.id));if(g.size!==b.variants.length)throw Error("待复核工况身份重复");let o=new Set,q=m(c.sourceCases,"sourceCases").map(a=>{let c=j(a,"sourceCases");k(c,["id","sourceDictionaryIndex","quote","objectScope","condition","semanticKind","versionDomain","applicability","variantIds","reason"],"sourceCases");let f=l(c.id,"sourceCases.id");if(o.has(f))throw Error("来源工况分支身份重复");o.add(f);let m=n([c.sourceDictionaryIndex],b.sourceDictionary.length,"sourceCases.sourceDictionaryIndex")[0];if(!d.includes(m))throw Error("来源分支不属于当前完整复核范围");let p=l(c.quote,"sourceCases.quote");if(!(0,e.dP)(b.sourceDictionary[m].value,p))throw Error("来源分支引文没有定位到实际完整原文");if(!["applicable","not-applicable","unmeasured"].includes(String(c.applicability)))throw Error("来源分支缺少实际适用性判断");if(!h.Rs.includes(c.semanticKind))throw Error("来源分支尚未区分项目设计、实际条件、规范约束与参考选项");if("unmeasured"===c.semanticKind&&"unmeasured"!==c.applicability)throw Error("来源语义未核定,不能宣称项目适用或不适用");if(void 0!==c.versionDomain&&"unmeasured"!==c.versionDomain&&!i.LN.includes(c.versionDomain))throw Error("来源版本用途域无效");if("reference-method"===c.semanticKind&&void 0!==c.versionDomain&&"construction-method"!==c.versionDomain)throw Error("参考工序不能声明采购品牌、规格或清单量域");let q=x(c.variantIds,"sourceCases.variantIds");if(q.some(a=>!g.has(a)))throw Error("来源分支引用不存在的施工工况");if("applicable"!==c.applicability&&q.length)throw Error("未判定或不适用来源不能预支施工工况覆盖");return{id:f,sourceDictionaryIndex:m,quote:p,objectScope:l(c.objectScope,"sourceCases.objectScope"),condition:l(c.condition,"sourceCases.condition"),semanticKind:c.semanticKind,...void 0!==c.versionDomain?{versionDomain:c.versionDomain}:{},applicability:c.applicability,variantIds:q,reason:l(c.reason,"sourceCases.reason")}});for(let a of b.expectedSourceCases??[]){let b=q.find(b=>b.id===a.id);if(!b||JSON.stringify([b.sourceDictionaryIndex,b.quote,b.objectScope,b.condition,b.semanticKind,b.versionDomain??"unmeasured"])!==JSON.stringify([a.sourceDictionaryIndex,a.quote,a.objectScope,a.condition,a.semanticKind,a.versionDomain??"unmeasured"]))throw Error("复验遗漏或改写已读取的原始工况分支")}let r=new Set,s=m(c.sourceResults,"sourceResults").map(a=>{let c=j(a,"sourceResults");k(c,["sourceDictionaryIndex","complete","caseIds","reason"],"sourceResults");let e=n([c.sourceDictionaryIndex],b.sourceDictionary.length,"sourceResults.sourceDictionaryIndex")[0];if(!d.includes(e)||r.has(e)||"boolean"!=typeof c.complete)throw Error("逐源完整复核漏项、重复或状态不明");r.add(e);let f=x(c.caseIds,"sourceResults.caseIds");if(!y(f,q.filter(a=>a.sourceDictionaryIndex===e).map(a=>a.id)))throw Error("逐源回执遗漏实际来源分支或借其他来源分支");return{sourceDictionaryIndex:e,complete:c.complete,caseIds:f,reason:l(c.reason,"sourceResults.reason")}});if(r.size!==d.length)throw Error("来源完整复核缺项,不能确认所有工况已覆盖");let t=new Set,u=m(c.variantResults,"variantResults").map(a=>{let b=j(a,"variantResults");k(b,["variantId","status","sourceCaseIds","reason"],"variantResults");let c=l(b.variantId,"variantResults.variantId");if(!g.has(c)||t.has(c))throw Error("逐工况复核未知或重复身份");t.add(c);let d=x(b.sourceCaseIds,"variantResults.sourceCaseIds");if(!y(d,q.filter(a=>"applicable"===a.applicability&&a.variantIds.includes(c)).map(a=>a.id)))throw Error("施工工况与来源分支双向覆盖关系不一致");return{variantId:c,status:w(b.status,"variantResults"),sourceCaseIds:d,reason:l(b.reason,"variantResults.reason")}});if(t.size!==g.size)throw Error("逐施工工况复核缺项");let v=b.variants.flatMap(a=>a.quantitativeControls.map(b=>`${a.id}\0${b.id}`)),z=new Set,A=m(c.controlsResults,"controlsResults").map(a=>{let c=j(a,"controlsResults");k(c,["variantId","controlId","status","reason","usage","sourceCaseIds","selectionEvidence"],"controlsResults");let d=l(c.variantId,"controlsResults.variantId"),e=l(c.controlId,"controlsResults.controlId"),g=`${d}\0${e}`;if(!v.includes(g)||z.has(g))throw Error("逐控制项复核未知或重复身份");z.add(g);let i=w(c.status,"controlsResults");if(!["project-property","normative-constraint"].includes(String(c.usage)))throw Error("控制用途未区分项目属性与适用规范约束");let n=x(c.sourceCaseIds,"controlsResults.sourceCaseIds"),o=n.map(a=>{let b=q.find(b=>b.id===a);if(!b||"confirmed"===i&&("applicable"!==b.applicability||!b.variantIds.includes(d)))throw Error("控制来源工况没有绑定同一实际施工对象");return b}),r=m(c.selectionEvidence,"controlsResults.selectionEvidence").map(a=>{let b=j(a,"selectionEvidence");k(b,["selectorSourceCaseId","optionSourceCaseId","selectionKey"],"selectionEvidence");let c=l(b.selectorSourceCaseId,"selectionEvidence.selectorSourceCaseId"),e=l(b.optionSourceCaseId,"selectionEvidence.optionSourceCaseId"),f=l(b.selectionKey,"selectionEvidence.selectionKey"),g=q.find(a=>a.id===c),i=o.find(a=>a.id===e);if(!g||!["project-design","project-condition"].includes(g.semanticKind)||"applicable"!==g.applicability||!g.variantIds.includes(d)||!i||"reference-option"!==i.semanticKind||!(0,h.YA)(g.quote,f)||!(0,h.YA)(i.quote,f))throw Error("参考选项缺少本项目真实选型原文及同一选型标识关联");return{selectorSourceCaseId:c,optionSourceCaseId:e,selectionKey:f}});if("confirmed"===i){let a,g=b.variants.find(a=>a.id===d).quantitativeControls.find(a=>a.id===e);if("sourceDictionaryIndex"in g.source)a=[g.source.sourceDictionaryIndex];else{let c=b.facts?.[g.source.factLocalIndex];if(!c||(0,f.vg)(c)!==g.source.factId)throw Error("控制事实缺少同任务实际出处,不能借其他原文核定");let d=c.resolutionRef?.winnerSourceRef??c.sourceRef,e=c.resolutionRef?.winnerSourceFile??c.sourceFile;a=b.sourceDictionary.flatMap((a,b)=>a.sourceFile===e&&a.sourceRef?.chunkIndex===d?.chunkIndex?[b]:[])}let h=o.filter(b=>a.includes(b.sourceDictionaryIndex)&&p(g.attribute,b.quote).includes(p(g.attribute,`${g.value}${g.unit??""}`)[0]));if(!h.length)throw Error("控制用途没有当前出处与量值的真实来源工况");if("normative-constraint"===c.usage&&(r.length||h.some(a=>"normative-rule"!==a.semanticKind)))throw Error("参考设计选项或项目属性不能伪装成通用规范约束");if(h.some(a=>"reference-method"===a.semanticKind))throw Error("参考工序不能承接项目产品选型、设计规格或清单量控制");if("project-property"===c.usage&&h.some(a=>"normative-rule"===a.semanticKind||"unmeasured"===a.semanticKind||"reference-option"===a.semanticKind&&!r.some(b=>b.optionSourceCaseId===a.id)))throw Error("未选型的参考参数不能升级为项目属性")}return{variantId:d,controlId:e,status:i,reason:l(c.reason,"controlsResults.reason"),usage:c.usage,sourceCaseIds:n,selectionEvidence:r}});if(z.size!==v.length)throw Error("实际控制项复核缺项");let B=x(c.uncoveredSourceCases,"uncoveredSourceCases"),C=q.filter(a=>"unmeasured"===a.applicability||b.variants.length>0&&"applicable"===a.applicability&&!a.variantIds.length).map(a=>a.id);if(!y(B,C))throw Error("未覆盖原文分支没有完整登记,不能由总体通过掩盖");let D=!C.length&&s.every(a=>a.complete)&&u.every(a=>"confirmed"===a.status)&&A.every(a=>"confirmed"===a.status);if(c.confirmed&&!D)throw Error("总体通过不能覆盖未读完整来源、未覆盖工况或未确认控制项");return{confirmed:c.confirmed&&D,reason:l(c.reason,"施工工况复核.reason"),sourceResults:s,sourceCases:q,variantResults:u,controlsResults:A,uncoveredSourceCases:B}}function A(a){if(!a.confirmed)throw Error(`施工工况未完成专业复核:${a.reason};未覆盖分支:${a.uncoveredSourceCases.join("、")}`)}function B(a,b){let c=b?.length??new Set(a.flatMap(a=>a.sourceDictionaryIndices)).size,d=(a,b)=>({type:"object",additionalProperties:!1,required:a,properties:b}),e={type:"string",enum:["confirmed","rejected","unmeasured"]};return d(["confirmed","reason","sourceResults","sourceCases","variantResults","controlsResults","uncoveredSourceCases"],{confirmed:{type:"boolean"},reason:t,sourceResults:{type:"array",minItems:c,maxItems:c,items:d(["sourceDictionaryIndex","complete","caseIds","reason"],{sourceDictionaryIndex:u,complete:{type:"boolean"},caseIds:v,reason:t})},sourceCases:{type:"array",items:d(["id","sourceDictionaryIndex","quote","objectScope","condition","semanticKind","versionDomain","applicability","variantIds","reason"],{id:t,sourceDictionaryIndex:u,quote:t,objectScope:t,condition:t,semanticKind:{type:"string",enum:[...h.Rs]},versionDomain:{type:"string",enum:[...i.LN,"unmeasured"],description:"当前实际断言的版本用途域,须依据完整原文与对象/属性核定;同文件引用A材料品牌不扩到其土方量/压实工序。未知填unmeasured。reference-method只能construction-method且不能承接产品选型、规格、清单量。"},applicability:{type:"string",enum:["applicable","not-applicable","unmeasured"]},variantIds:v,reason:t})},variantResults:{type:"array",minItems:a.length,maxItems:a.length,items:d(["variantId","status","sourceCaseIds","reason"],{variantId:t,status:e,sourceCaseIds:v,reason:t})},controlsResults:{type:"array",minItems:a.reduce((a,b)=>a+b.quantitativeControls.length,0),maxItems:a.reduce((a,b)=>a+b.quantitativeControls.length,0),items:d(["variantId","controlId","status","reason","usage","sourceCaseIds","selectionEvidence"],{variantId:t,controlId:t,status:e,reason:t,usage:{type:"string",enum:["project-property","normative-constraint"]},sourceCaseIds:v,selectionEvidence:{type:"array",items:d(["selectorSourceCaseId","optionSourceCaseId","selectionKey"],{selectorSourceCaseId:t,optionSourceCaseId:t,selectionKey:t})}})},uncoveredSourceCases:v})}},41791:(a,b,c)=>{c.d(b,{k:()=>h,w:()=>g});var d=c(77598);let e={prepare:["template","derivation","documentSpec","projectMaterialProfile","projectMaterialSummary","projectUnderstanding","domainProfile","readiness","promptTexts","nativeAuthorPromptTexts","nativeAuthorReferenceTexts","reviewPromptTexts","repairPromptTexts","factExtractionPromptTexts","promptDocumentRules","requirementSemantics","hasExplicitOutline"],understanding:["allEvidence","writerEvidence","indexHealth","requestedEvidencePerChapter","rolePoolRisk","retrievalCoverageReports","webResearchReport","missingItems","clarificationRequests","unfixableDeclarations","failedChapterMessages","chapterGenerationStages","chapterGenerationStagesByOrder","canonicalFacts","evaluationItems","agentWorkflow","bidComposition","hazardResolution"],planning:["generationStrategy","projectContext","tenderRequirements","clarificationOverrides","earlyTruthAudit","truthConstraint","conclusionTable","requiredContentNeeds","projectTypeDecision","sharedConstructionPlan"],blueprint:["integratedBlueprint","requirementAssignments","structureAssignments","structureUnattached"]},f=a=>(0,d.createHash)("sha256").update(a).digest("hex");function g(a){let b=JSON.stringify(Object.fromEntries(Object.entries(e).map(([b,c])=>[b,Object.fromEntries(c.map(c=>[c,a[b][c]]))])),(a,b)=>b instanceof Map?{__authorResumeCollection:"map",entries:[...b]}:b instanceof Set?{__authorResumeCollection:"set",entries:[...b]}:b);return{version:1,sha256:f(b),json:b}}function h(a,b){if(1!==b.version||"string"!=typeof b.json||f(b.json)!==b.sha256)throw Error("作者续跑上下文校验失败");let c=JSON.parse(b.json,(a,b)=>b?.__authorResumeCollection==="map"?new Map(b.entries):b?.__authorResumeCollection==="set"?new Set(b.entries):b);for(let[b,d]of Object.entries(e)){let e=c[b];if(!e||"object"!=typeof e)throw Error("作者续跑上下文缺少冻结阶段");for(let c of d)Object.hasOwn(e,c)&&(a[b][c]=e[c])}}},43800:(a,b,c)=>{c.d(b,{h:()=>d});class d{constructor(a){this.controller=new AbortController,this.pending=new Set,this.signal=a?AbortSignal.any([a,this.controller.signal]):this.controller.signal}fail(a,b="preparation"){if(this.firstFailure||(this.firstFailure={error:a,origin:b,at:Date.now()}),!this.controller.signal.aborted){let a=Error("本轮前置工作已失败,取消其余准备任务",{cause:this.firstFailure.error});a.name="AbortError",this.controller.abort(a)}}get failure(){return this.firstFailure?.error}get failed(){return void 0!==this.firstFailure}run(a){this.signal.throwIfAborted();let b=Promise.resolve().then(()=>(this.signal.throwIfAborted(),a()));return this.pending.add(b),b.then(()=>{this.pending.delete(b)},a=>{this.pending.delete(b),this.fail(a)}),b}async pool(a,b,c){if(this.failed)throw this.failure;if(this.signal.throwIfAborted(),!Number.isSafeInteger(c)||c<1)throw Error("准备任务并发数必须是正整数");let d=Array(a.length),e=0,f=Array.from({length:Math.max(0,Math.min(a.length,Math.floor(c)))},()=>this.run(async()=>{for(;!this.signal.aborted&&e<a.length;){let c=e++;d[c]=await b(a[c],c),this.signal.throwIfAborted()}}));if(await Promise.allSettled(f),this.failed)throw this.failure;return this.signal.throwIfAborted(),d}async drain(){for(;this.pending.size;)await Promise.allSettled([...this.pending])}receipt(){let a=this.firstFailure?.error;return{pending:this.pending.size,drained:0===this.pending.size,signalAborted:this.signal.aborted,firstFailure:this.firstFailure?{at:this.firstFailure.at,origin:this.firstFailure.origin,name:a instanceof Error?a.name:null,message:a instanceof Error?a.message:String(a)}:null}}}},44753:(a,b,c)=>{c.d(b,{L2:()=>y,LN:()=>m,Tu:()=>z,bz:()=>x,cW:()=>r,gM:()=>v,mb:()=>s,xg:()=>i});var d=c(77598),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g);let i="source-version-policy-v3",j=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),k=a=>a.normalize("NFKC").replace(/(?:^|\n)\s*#{1,6}\s*/gu,"\n").replace(/\s+/gu,""),l=/^[a-f0-9]{64}$/u,m=["boq-quantity","procurement-brand","procurement-specification","construction-method"],n=a=>/^20\d{2}-\d{2}-\d{2}$/u.test(a)&&Number.isFinite(Date.parse(a))&&new Date(a).toISOString().slice(0,10)===a;function o(a){if("human-source-edition-v1"!==a.version||"human"!==a.origin||!a.reviewer?.trim()||!a.confirmedAt||!Number.isFinite(Date.parse(a.confirmedAt))||!a.declarationId||!n(a.issuedAt)||!a.family||!Array.isArray(a.domains)||!a.domains.length||new Set(a.domains).size!==a.domains.length||a.domains.some(a=>!m.includes(a))||!a.declarationSource?.sourceFile||!l.test(a.declarationSource.sourceSha256)||!l.test(a.declarationSource.parsedSha256)||!Array.isArray(a.currentSources)||!a.currentSources.length||new Set(a.currentSources.map(a=>a.sourceFile)).size!==a.currentSources.length||a.currentSources.some(a=>!a.sourceFile||!l.test(a.sourceSha256)||!l.test(a.parsedSha256)))throw Error("来源发行确认资产无真实人审身份、发行日期、用途域或SHA绑定")}function p(a){let b=k(a),c=[];for(let a of(b.includes("工程量清单")&&c.push({family:"工程量清单",domains:["boq-quantity","procurement-specification"]}),b.includes("最高投标限价")&&c.push({family:"最高投标限价",domains:["boq-quantity","procurement-specification"]}),b.matchAll(/(?:工程标准化)?[A-Za-z]类采购物资|[\p{L}\d]{2,20}材料清单/gu)))c.some(b=>b.family===a[0])||c.push({family:a[0],domains:["procurement-brand","procurement-specification","boq-quantity"]});return c}function q(a,b,c){let d=0;return[...a.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex).flatMap(a=>{let e=d,f=e+a.content.length;return d=f+1,e<c&&f>b?[{chunkIndex:a.chunkIndex,startChar:Math.max(0,b-e),endChar:Math.min(a.content.length,c-e)}]:[]})}function r(a){let b=[],c=[];if(f().existsSync(a))for(let e of f().readdirSync(a).filter(a=>/^[A-Za-z\d][A-Za-z\d._-]*\.json$/u.test(a)).sort()){let g=f().readFileSync(h().join(a,e)),i=JSON.parse(g.toString("utf8"));try{o(i)}catch{throw Error(`来源发行确认资产无真实人审身份、发行日期、用途域或SHA绑定:${e}`)}b.push(i),c.push({name:e,sha256:(0,d.createHash)("sha256").update(g).digest("hex")})}return{confirmations:b,assets:c,fingerprint:j(c)}}function s(a,b=[],c=[]){if(c.length!==b.length||new Set(c.map(a=>a.name)).size!==c.length||c.some(a=>!/^[A-Za-z\d][A-Za-z\d._-]*\.json$/u.test(a.name)||!l.test(a.sha256)))throw Error("来源发行确认必须来自实际持久资产,内存人审布尔或模型声明不能冻结为确认");let e=Object.fromEntries(a.map(a=>[a.sourceFile,{parsedSha256:a.parsedSha256,sourceSha256:a.sourceSha256}])),f=new Map(a.map(a=>[a.sourceFile,[...a.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex).map(a=>a.content).join("\n")])),g=a.map(a=>{let b=f.get(a.sourceFile),c=function(a){let b=a.split(/\r?\n/u).map(a=>a.replace(/^\s*#{1,6}\s*/u,"").trim()),c=b.flatMap(a=>{let b=/^(20\d{2})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日$/u.exec(a);if(!b)return[];let c=`${b[1]}-${b[2].padStart(2,"0")}-${b[3].padStart(2,"0")}`;return n(c)?[c]:[]}),d=b.findIndex(a=>/^PDF\s*第\s*1\s*页/u.test(a)),e=(d>=0?b.slice(d+1):b).filter(a=>a&&!/^(?:资料类型|资料名称|MIME|文件(?:名|名称|路径|大小|类型)?\s*[::]|源文件\s*[::]|PDF\s*第)/u.test(a)),f=e[0]??"",g=a=>/^(?:[^::|。!?]{1,180})?(?:补疑|答疑|澄清)(?:[\d一二三四五六七八九十零〇]+)?(?:文件|通知|公告|说明|函)?$/u.test(a),h=k(f);!g(h)&&/(?:补|答|澄)$/u.test(h)&&/^[疑清][\d一二三四五六七八九十零〇]*(?:文件|通知|公告|说明|函)?$/u.test(k(e[1]??""))?h+=k(e[1]):!g(h)&&/(?:项目|工程)$/u.test(h)&&/^(?:补疑|答疑|澄清)[\d一二三四五六七八九十零〇]*(?:文件|通知|公告|说明|函)?$/u.test(k(e[1]??""))&&(h+=k(e[1]));let i=g(h);return{title:i?h:f,isClarification:i,projectIdentifier:/项目编号\s*[::]\s*([A-Za-z\d-]+)/u.exec(a)?.[1]??null,issuedAt:c.at(-1)??null}}(b),e=c.isClarification,g=/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(b),h=/(?:bill|quantit|cost|price|material|table|清单|物资|材料)/iu.test(`${a.sourceKind??""} ${a.processingType??""}`),i=b.split(/\r?\n/u).filter(a=>/工作表\s*[::]|表标题\s*[::]|^\s*#{1,6}\s/u.test(a)||/^(?:招标工程量清单|最高投标限价|工程标准化.{0,10}采购物资)\s*$/u.test(a.trim())).join("\n"),j=!e&&g&&h?p(i).map(a=>a.family):[],l=function(a,b,c,d){if(!d.length)return[];let e=p(c).map(a=>a.family);if(/工作表\s*[::]|表标题\s*[::]/u.test(c)&&d.every(a=>e.includes(a))||1===d.length&&k(c)===d[0])return d.map(b=>({family:b,mode:"whole-source",heading:c,spans:a.chunks.map(a=>({chunkIndex:a.chunkIndex,startChar:0,endChar:a.content.length}))}));let f=[...b.matchAll(/^(#{1,6})\s+([^\n]+)$/gmu)].filter(a=>{let b=a[2].trim();return!/[..·。]{2,}|\|/u.test(b)&&!/^(?:PDF\s*第|文件(?:名|名称|大小|路径)|资料(?:类型|名称)|-?\d+-?\s*$)/u.test(b)&&(/^(?:第[\d一二三四五六七八九十百]+章|\d+(?:[..]\d+)*[、..::\s]*[^\d]|[一二三四五六七八九十]+[、..])/u.test(b)||p(b).some(a=>k(b)===a.family))}).map(a=>{let b=a[2].trim(),c=/^(\d+(?:[..]\d+)*)/u.exec(b)?.[1];return{start:a.index,level:a[1].length,title:b,heading:a[0],chapter:/^第[\d一二三四五六七八九十百]+章/u.test(b),ordinalDepth:c?.split(/[..]/u).length,familyTitle:k(b).replace(/^第[\d一二三四五六七八九十百]+章[、..::]*/u,"").replace(/^\d+(?:[..]\d+)*[、..::]*/u,"").replace(/^[一二三四五六七八九十]+[、..]/u,"")}});return d.flatMap(b=>{let d=f.filter(a=>a.familyTitle===b);return d.length?d.map(c=>{let d=f.find(a=>a.start>c.start&&a.title!==c.title&&(c.chapter?a.chapter:a.chapter||(void 0!==c.ordinalDepth?void 0!==a.ordinalDepth&&a.ordinalDepth<=c.ordinalDepth:a.level<=c.level)));return d?{family:b,mode:"embedded-source-section",heading:c.heading,spans:q(a,c.start,d.start)}:{family:b,mode:"unmeasured",heading:c.heading,spans:[]}}):[{family:b,mode:"unmeasured",heading:c,spans:[]}]})}(a,b,c.title,j);return{sourceFile:a.sourceFile,...c,families:j,editionScopes:l,scopeEvidenceChunks:l.some(a=>"whole-source"!==a.mode)?a.chunks.map(a=>({chunkIndex:a.chunkIndex,text:a.content,sha256:(0,d.createHash)("sha256").update(a.content).digest("hex")})):[],domainDependencies:[]}}),h=[];for(let b of a){let a=g.find(a=>a.sourceFile===b.sourceFile);if(!a.isClarification)continue;let c=f.get(b.sourceFile),d=[...b.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex),i=0,l=d.map(a=>{let b=i;return i+=a.content.length+1,{...a,start:b,end:b+a.content.length}});for(let d of c.matchAll(/[^。!?]+[。!?]?/gu)){let c=d[0],f=/(?:本(?:项目|工程)(?:的)?|(?:工程标准化)?[A-Za-z]类采购物资|工程量清单)/u.exec(c),g=f?.index??c.length-c.trimStart().length,i=c.slice(g).trimEnd(),m=k(i),n=d.index+g,o=n+i.length;if(/重新(?:发放|发布)/u.test(m)&&/(?:上[一]?版本|原版本|旧版本).{0,100}作废/u.test(m)&&/以本次.{0,40}(?:版本|文件|附件)为准/u.test(m))for(let c of p(i)){let d=`source-edition:${j([a.projectIdentifier,a.title,a.issuedAt,c.family,m]).slice(0,24)}`,f=l.filter(a=>a.start<o&&a.end>n).map(a=>({chunkIndex:a.chunkIndex,startChar:Math.max(0,n-a.start),endChar:Math.min(a.content.length,o-a.start)}));if(!f.length)throw Error("发行声明缺少完整实际切片定位");let g={sourceFile:b.sourceFile,spans:f,...e[b.sourceFile]},k=h.find(a=>a.id===d);k?k.sources.push(g):h.push({id:d,...c,quote:i,issuedAt:a.issuedAt,projectIdentifier:a.projectIdentifier,title:a.title,sources:[g]})}}}let m=g.flatMap(b=>{if(!b.isClarification)return[];let c=a.find(a=>a.sourceFile===b.sourceFile);return[...f.get(b.sourceFile).matchAll(/工程量清单[^。!?]*品牌[^。!?]*以[^。!?]*为准[。!?]?/gu)].map(a=>({document:b,families:p(a[0]).filter(a=>a.domains.includes("procurement-brand")).map(a=>a.family),proof:{sourceFile:b.sourceFile,...e[b.sourceFile],quote:a[0],spans:q(c,a.index,a.index+a[0].length)}}))});for(let b of g){if(!b.families.includes("工程量清单")&&!b.families.includes("最高投标限价"))continue;let c=a.find(a=>a.sourceFile===b.sourceFile);for(let a of[...new Set(h.filter(a=>a.domains.includes("procurement-brand")).map(a=>a.family))])if(!b.families.includes(a))for(let d of c.chunks)for(let c of d.content.matchAll(/[^\n]+/gu)){if(!k(c[0]).includes(k(a)))continue;let e=m.filter(c=>{let d=c.document,e=d.title.replace(/(?:补疑|答疑|澄清)\d*$/u,"");return c.families.includes(a)&&d.projectIdentifier&&(d.projectIdentifier===b.projectIdentifier||!b.projectIdentifier&&e&&k(f.get(b.sourceFile)).includes(k(e)))});e.length&&b.domainDependencies.push({family:a,domain:"procurement-brand",quote:c[0],spans:[{chunkIndex:d.chunkIndex,startChar:c.index,endChar:c.index+c[0].length}],authoritySources:e.map(a=>a.proof)})}}for(let a of b){o(a);let b=h.find(b=>b.id===a.declarationId);if(!b||a.issuedAt!==b.issuedAt||a.family!==b.family||a.domains.some(a=>!b.domains.includes(a))||!b.sources.some(b=>b.sourceFile===a.declarationSource.sourceFile&&b.sourceSha256===a.declarationSource.sourceSha256&&b.parsedSha256===a.declarationSource.parsedSha256)||a.currentSources.some(b=>!e[b.sourceFile]||!g.find(a=>a.sourceFile===b.sourceFile)?.families.includes(a.family)||b.sourceSha256!==e[b.sourceFile].sourceSha256||b.parsedSha256!==e[b.sourceFile].parsedSha256))throw Error("来源发行确认不属于当前真实声明/发行日期/用途域/源SHA/解析身份")}let r=[];for(let a of[...new Set(h.map(a=>a.family))]){let c=h.filter(b=>b.family===a),d=c.filter(a=>a.issuedAt).sort((a,b)=>a.issuedAt.localeCompare(b.issuedAt)),e=d.length===c.length,f=new Set(c.map(a=>a.projectIdentifier).filter(Boolean)),i=e&&f.size<=1?d.at(-1)?.issuedAt:null,k=i?d.filter(a=>a.issuedAt===i):c,l=1===k.length?k[0]:null,m=g.filter(b=>b.families.includes(a)).map(a=>a.sourceFile);for(let c of[...new Set(k.flatMap(a=>a.domains))]){let d=l?b.filter(b=>b.declarationId===l.id&&b.issuedAt===l.issuedAt&&b.family===a&&b.domains.includes(c)):[];if(new Set(d.map(a=>j([...a.currentSources].sort((a,b)=>a.sourceFile.localeCompare(b.sourceFile))))).size>1)throw Error("同一发行声明和用途域有不同的附件人审归属,须解决冲突;不能合并旧新版或按资产顺序择一");let e=[...new Set(d.flatMap(a=>a.currentSources.map(a=>a.sourceFile)))],f=e.length&&l?"confirmed":"unresolved";r.push({id:`source-edition-decision:${j([k.map(a=>a.id),c,e]).slice(0,24)}`,declarationId:l?.id??null,declarationIds:k.map(a=>a.id).sort(),family:a,domain:c,status:f,currentSourceFiles:"confirmed"===f?e:[],candidateSourceFiles:m,reason:"confirmed"===f?"实际人审发行确认绑定同一声明、发行日期和当前源/解析SHA":"已知旧版作废/重发声明,但完整发行附件归属未获真实确认;文件名、内部modified、序号或单项内容对应不能替代整本发行证明"})}}let t={version:i,assetFingerprint:j(c),sources:e,documents:g,declarations:h,decisions:r,confirmationAssets:c};return u({...t,policyId:j(t)})}let t=new WeakSet;function u(a){if(t.has(a))return a;let b=function(a){let b=[],c=new Set,d=new Set,e=a=>{if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return;if("object"!=typeof a||null===a)throw Error("来源版本账必须为有限 JSON plain data,不能含 undefined/function/symbol");if(d.has(a))throw Error("来源版本账不能含循环身份");if(c.has(a))return;let f=Array.isArray(a),g=Object.getPrototypeOf(a);if(f?g!==Array.prototype:g!==Object.prototype&&null!==g)throw Error("来源版本账只允许 plain records/arrays,不能认证 Date/Map/特殊对象");d.add(a),c.add(a),b.push(a);let h=Object.getOwnPropertyDescriptors(a);for(let b of Reflect.ownKeys(h)){if("string"!=typeof b)throw Error("来源版本账不能含 symbol 字段");let c=h[b];if(!f||"length"!==b){if(!("value"in c)||!c.enumerable)throw Error("来源版本账不能含 accessor/隐藏字段");if(f&&(!/^(0|[1-9]\d*)$/u.test(b)||Number(b)>=a.length))throw Error("来源版本账数组不能含旁路字段");e(c.value)}}if(f&&Object.keys(a).length!==a.length)throw Error("来源版本账数组不能含空洞");d.delete(a)};return e(a),b}(a),{policyId:c,...e}=a;if(a.version!==i||c!==j(e))throw Error("冻结来源版本用途账被改写或协议不一致");if(a.documents.some(a=>!Array.isArray(a.editionScopes)||!Array.isArray(a.scopeEvidenceChunks)||a.families.some(b=>!a.editionScopes.some(a=>a.family===b))||a.editionScopes.some(b=>!["whole-source","embedded-source-section","unmeasured"].includes(b.mode)||!a.families.includes(b.family)||!Array.isArray(b.spans)||"unmeasured"!==b.mode&&!b.spans.length||b.spans.some(a=>!Number.isSafeInteger(a.chunkIndex)||!Number.isSafeInteger(a.startChar)||!Number.isSafeInteger(a.endChar)||a.startChar<0||a.endChar<a.startChar))||a.scopeEvidenceChunks.some(a=>a.sha256!==(0,d.createHash)("sha256").update(a.text).digest("hex"))))throw Error("冻结来源缺少当前真实发行作用范围或chunk原文身份;旧未知范围不能自动作全源或豁免");if(a.decisions.some(a=>"confirmed"===a.status)&&!a.confirmationAssets.length)throw Error("已确认发行用途缺真实持久人审资产身份");for(let a=b.length-1;a>=0;a-=1)Object.freeze(b[a]);return t.add(a),a}function v(a){t.has(a)||u(a)}function w(a,b){let c=b.quote?.replace(/\s/gu,"");if(!c)return;let d=[],e=[...a.scopeEvidenceChunks].sort((a,b)=>a.chunkIndex-b.chunkIndex),f=void 0!==b.sourceChunkIndex?c.length+(e.find(a=>a.chunkIndex===b.sourceChunkIndex)?.text.replace(/\s/gu,"").length??0):1/0;for(let a of e){if(void 0!==b.sourceChunkIndex&&(a.chunkIndex<b.sourceChunkIndex||f<=0)||b.sourceChunkIndices&&!b.sourceChunkIndices.includes(a.chunkIndex))continue;let c=d.at(-1);c&&c.at(-1).chunkIndex+1===a.chunkIndex?c.push(a):d.push([a]),f-=a.text.replace(/\s/gu,"").length}let g=[];for(let a of d){let d=[],e="";for(let b of a)for(let a=0;a<b.text.length;a++)/\s/u.test(b.text[a])||(e+=b.text[a],d.push({chunkIndex:b.chunkIndex,char:a}));for(let a=e.indexOf(c);a>=0;a=e.indexOf(c,a+1)){if(void 0!==b.sourceChunkIndex&&d[a].chunkIndex!==b.sourceChunkIndex)continue;let e=new Map;for(let b of d.slice(a,a+c.length)){let a=e.get(b.chunkIndex);a?a.endChar=b.char+1:e.set(b.chunkIndex,{chunkIndex:b.chunkIndex,startChar:b.char,endChar:b.char+1})}g.push([...e.values()])}}return 1===g.length?g[0]:void 0}function x(a,b){let c=a.sourceVersionPolicy;if(!c)throw Error("新生成或恢复缺少冻结来源版本用途账;旧存档只能只读追溯,不能作为本次准入");if(v(c),!c.sources[b.sourceFile]||c.sources[b.sourceFile].parsedSha256!==a.sources[b.sourceFile]?.sha256)throw Error("来源版本用途与当前冻结解析身份不一致");return function(a,b,c){if("reference-method"===c.usage&&"reference-method"===c.nature&&c.referenceMethodReviewId?.trim()&&c.technicalActionOnly&&!c.quantitativeValues?.length&&!c.designSelection&&(!c.domain||"construction-method"===c.domain))return{status:"eligible",decisionIds:[],reason:"已独立核定的参考工序用途,不形成本项目产品选型、规格或清单量"};if("reference-method"===c.usage||"reference-method"===c.nature)throw Error("参考工序用途缺真实独立核定或承接了产品选型、规格、清单量,不能取得来源版本资格");let d=[],e=b.filter(b=>{let e=b.candidateSourceFiles.includes(c.sourceFile)&&(!c.domain||"construction-method"===c.domain||c.quantitativeValues?.length||c.designSelection||b.domain===c.domain),f=e?function(a,b,c){let d=a?.editionScopes.filter(a=>a.family===b);if(!d?.length||d.some(a=>"unmeasured"===a.mode))return"unmeasured";if(d.some(a=>"whole-source"===a.mode))return"edition-content";let e=w(a,c);return e?e.some(a=>d.some(b=>b.spans.some(b=>b.chunkIndex===a.chunkIndex&&a.startChar<b.endChar&&a.endChar>b.startChar)))?"edition-content":"outside-edition-content":"unmeasured"}(a,b.family,c):void 0;"unmeasured"===f&&d.push(b.id);let g=a?.domainDependencies.some(d=>{if(d.family!==b.family||d.domain!==b.domain)return!1;if(c.domain)return c.domain===d.domain;if(!c.quote)return!0;let e=w(a,c);return!e||e.some(a=>d.spans.some(b=>b.chunkIndex===a.chunkIndex&&a.startChar<b.endChar&&a.endChar>b.startChar))});return e&&"outside-edition-content"!==f||g}),f=e.filter(a=>"confirmed"!==a.status||!a.currentSourceFiles.includes(c.sourceFile)),g=f.filter(a=>"confirmed"===a.status&&!a.candidateSourceFiles.includes(c.sourceFile));return{status:d.length||f.some(a=>"unresolved"===a.status)||g.length?"unresolved":f.length?"superseded":"eligible",decisionIds:e.map(a=>a.id),reason:[...d.length?["实际采用关系没有在已核发行内容范围精确定位;不能把整个混合文件视为清单附件,也不能猜测范围豁免"]:[],...f.map(a=>g.includes(a)?`该字段引用${a.family}的${a.domain}域;发行附件虽已确认,引用表自身不能证明当前产品选用,须引用已确认附件的实际同对象证据`:a.reason)].join(";")||"该实际用途未被源版本声明限制,或具有同域真实发行确认"}}(c.documents.find(a=>a.sourceFile===b.sourceFile),c.decisions,b)}function y(a,b){let c={sourceFile:b.sourceFile,objectScope:b.name,usage:"project-fact"};return{sourceVersionEligibility:x(a,{...c,assertedText:`${b.name} ${b.description} ${b.quantity}${b.unit}`}),sourceVersionFieldEligibility:{quantity:x(a,{...c,domain:"boq-quantity",attribute:"quantity",assertedText:`${b.quantity}${b.unit}`}),description:x(a,{...c,attribute:"description",assertedText:b.description})}}}function z(a,b){let c=x(a,b);if("eligible"!==c.status)throw Error(`来源版本${"unresolved"===c.status?"未决":"已被取代"},不能将该域品牌/规格/清单参数登记为当前已核设计:${c.reason}`)}},45462:(a,b,c)=>{c.d(b,{W9:()=>r,_n:()=>s,O:()=>q,Hz:()=>t,_W:()=>u});var d=c(76760);c(19898);var e=c(81892),f=c(44533);function g(a){let b=a.split(/[,。;:、\s\d()()《》<>【】"“”'‘’\-/\\|,.:;]+/u).filter(Boolean),c=new Set;for(let a of b){let b=a.trim();if(b.length>=2&&c.add(b),b.length>=3)for(let a=0;a<=b.length-2;a++){let d=b.slice(a,a+2);d.length>=2&&!/^[a-zA-Z0-9]+$/u.test(d)&&c.add(d)}}return[...c]}function h(a,b,c=.3){return function(a,b){let c=new Set(g(a)),d=new Set(g(b));if(0===c.size||0===d.size)return 0;let e=0;for(let a of c)if(d.has(a))e+=1;else if(a.length>=2){for(let b of d)if(b.length>=2&&(b.includes(a)||a.includes(b))){e+=.5;break}}return e/Math.max(c.size,1)}(a,b)>=c}function i(a,b,c,d="items"){let e=c.maxItems??Number.MAX_SAFE_INTEGER,f=c.maxChars??Number.MAX_SAFE_INTEGER,g=c.charFn??(a=>JSON.stringify(a).length),h=a.map(a=>({item:a,score:b(a)}));h.sort((a,b)=>b.score-a.score);let j=[],k=[],l=0;for(let{item:a}of h){let b=g(a);j.length<e&&l+b<=f?(j.push(a),l+=b):k.push(a)}let m=[];if(k.length>0){for(let a of(m.push(`[selection] ${d}: 预算 ${e}项/${f}字符 → 选中 ${j.length}项(${l}字符),丢弃 ${k.length}项`),k.slice(0,10))){let b="string"==typeof a?a.slice(0,80):JSON.stringify(a).slice(0,80);m.push(` - 丢弃: ${b}`)}k.length>10&&m.push(` ... 及其他 ${k.length-10} 项`)}return{selected:j,dropped:k,droppedLog:m}}function j(a){let b=0,c=a.length;return 0===c?0:(b+=3*(a.match(/\d+(?:\.\d+)?/gu)||[]).length,/m[23²³]?|mm|cm|km|t|kg|台|套|个|项|批|次|份|人|日历天|天|月|万元|元|%|MPa|kPa|kN|℃/iu.test(a)&&(b+=2),/GB|JGJ|ISO|CJJ|CECS|DL|YB|SH|HG|SY|NB/iu.test(a)&&(b+=3),/验收|质量|安全|工期|进度|成本|风险|危大|重点|难点|关键|控制|标准|规范|设计|施工|材料|设备/u.test(a)&&(b+=1),c<20&&(b-=1),/项目名称|工程名称|招标人|建设地点|计划工期|质量标准|合同估算/u.test(a)&&(b+=2),b)}c(70933);let k=["tender_document","bill_of_quantities","drawing","addendum","contract","technical_specification","schedule_document","quality_safety_document","other"],l={tender_document:"招标文件正文",bill_of_quantities:"工程量清单",drawing:"图纸/设计资料",addendum:"补疑/澄清/答疑",contract:"合同资料",technical_specification:"技术规范/技术要求",schedule_document:"工期/进度资料",quality_safety_document:"质量安全文明资料",other:"其他资料"},m={addendum:100,tender_document:90,contract:80,technical_specification:75,bill_of_quantities:70,drawing:65,schedule_document:60,quality_safety_document:60,other:10};function n(a){return l[a]||"其他资料"}function o(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}let p=/\.(?:dwg|dxf|dwt|dws)$/iu;function q(a){if(p.test(d.basename(o(a))))return{kind:"drawing",confidence:.95,signals:["CAD 图形格式(扩展名判定,与目录名无关)"]};let b=o(a).toLowerCase(),c=[],e=(d,e)=>(d.lastIndex=0,(!!d.test(a)||!!d.test(b))&&(c.push(e),!0));return e(/补疑|答疑|澄清|疑问回复|答复|变更|更正|补充通知|addendum|clarification/iu,"补疑/澄清关键词")?{kind:"addendum",confidence:.92,signals:c}:e(/清单|工程量|分部分项|措施项目|项目特征|招标控制价|boq|bill.?of.?quantities/iu,"清单/工程量关键词")?{kind:"bill_of_quantities",confidence:.9,signals:c}:e(/图纸|施工图|建筑图|结构图|安装图|设计图|总平|平面图|立面图|剖面图|节点|dwg|drawing|cad/iu,"图纸/设计关键词")?{kind:"drawing",confidence:.88,signals:c}:e(/招标文件|投标人须知|评标办法|招标公告|招标正文|招标需求|tender|bidding/iu,"招标文件关键词")?{kind:"tender_document",confidence:.9,signals:c}:e(/合同|协议书|专用条款|通用条款|contract/iu,"合同关键词")?{kind:"contract",confidence:.82,signals:c}:e(/技术规范|技术要求|施工规范|验收规范|标准|做法说明|specification|standard/iu,"技术规范关键词")?{kind:"technical_specification",confidence:.8,signals:c}:e(/工期|进度|计划|节点|里程碑|schedule/iu,"工期进度关键词")?{kind:"schedule_document",confidence:.72,signals:c}:e(/质量|安全|文明|环保|危大|验收|quality|safety/iu,"质量安全关键词")?{kind:"quality_safety_document",confidence:.72,signals:c}:{kind:"other",confidence:.35,signals:["未命中明确资料类型,按其他资料处理"]}}function r(a,b){let c=function(a,b){let c=new Set((b.selectedFiles||[]).map(a=>o(a)).filter(Boolean)),d=[...b.selectedRoots||[]],e=a.filter(a=>c.has(o(a.relativePath))&&"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0);return{files:e,roots:d,warnings:0===e.length?["所选资料范围内没有可用文件(未索引/未切片/文件缺失)。"]:[]}}((0,f.Yy)(a),b),e={tender_document:[],bill_of_quantities:[],drawing:[],addendum:[],contract:[],technical_specification:[],schedule_document:[],quality_safety_document:[],other:[]},g=c.files.map(a=>{let b=q(a.relativePath),c={filePath:a.relativePath,fileName:d.basename(a.relativePath),kind:b.kind,confidence:b.confidence,priority:m[b.kind],chunkCount:a.chunkCount,summary:`${n(b.kind)}:${d.basename(a.relativePath)},可用切片 ${a.chunkCount||0} 条。`,keySignals:b.signals};return e[b.kind].push(c),c}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence),h=(c.roots[0]||function(a){let b=o(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}(g[0]?.filePath||"")||"当前知识库项目").replace(/\.(?:pdf|docx?|xlsx?|xls|dwg|zip)$/iu,"").replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").trim(),i=[...c.warnings];return 0===e.tender_document.length&&i.push("未识别到招标文件正文,工程概况、招标响应和评审要求可能不足。"),0===e.bill_of_quantities.length&&i.push("未识别到工程量清单,施工范围、资源配置和主要工程内容可能不足。"),0===e.drawing.length&&i.push("未识别到图纸/设计资料,施工方法、专业接口和构造做法可能不足。"),{projectName:h,materialRoots:c.roots,files:g,groups:e,warnings:i}}function s(a,b,c){let d=c?function(a){let b=["## 项目资料图谱分析结果",""];for(let c of(a.analysisScope&&b.push("以下是按预算选择片段的理解摘要,仅供定位和规划。节点须回查冻结原文才能作为项目事实;“缺口”是选段中的待核线索,不能证明原始资料不含该内容,不得直接写成正文事实。",""),a.works.length&&b.push("### 主要工程内容"),a.works))b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}(c):"",f=[`本次文档必须围绕项目资料包”${b.projectName}”展开,不得把其他项目资料混入正文。`,"招标文件正文用于确定项目边界、招标响应、工期质量安全目标和评审关注点。","招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏。","工程量清单用于确定主要工程内容、分部分项、项目特征、资源配置和施工方法依据。","图纸/设计资料用于确定施工对象、空间关系、构造做法、专业接口和重点难点。","补疑/澄清/答疑属于高优先级修正资料,如与原文件冲突,以补疑/澄清/答疑为准。"],g=a.chapters.map(a=>{var d;let f=(d=a.title,/概况|工程|项目|总体/u.test(d)?["tender_document","addendum","bill_of_quantities"]:/部署|组织|平面|准备/u.test(d)?["tender_document","bill_of_quantities","drawing","addendum"]:/施工|工艺|技术|方案|方法|分部分项/u.test(d)?["bill_of_quantities","drawing","technical_specification","addendum"]:/进度|工期/u.test(d)?["tender_document","addendum","schedule_document","bill_of_quantities"]:/质量|验收/u.test(d)?["tender_document","technical_specification","drawing","quality_safety_document","addendum"]:/安全|文明|环保|风险|危大/u.test(d)?["tender_document","quality_safety_document","drawing","addendum"]:/资源|材料|设备|劳动力|机械/u.test(d)?["bill_of_quantities","drawing","tender_document"]:["tender_document","bill_of_quantities","drawing","addendum","technical_specification"]).filter(a=>b.groups[a]?.length>0),g=f.length?f:["tender_document","bill_of_quantities","drawing"].filter(a=>b.groups[a]?.length>0),l=(c?.works||[]).filter(b=>{if(!b.name)return!1;let c=h(b.name,a.title),d=(a.sections||[]).some(a=>h(b.name,a));return c||d}).map(a=>`${a.name}:${a.scope}`),m=(c?.methods||[]).filter(b=>!!b.applicableWorks?.length&&b.applicableWorks.some(b=>{let c=h(b,a.title),d=(a.sections||[]).some(a=>h(b,a));return c||d})).map(a=>a.name);return{chapterId:a.id,chapterTitle:a.title,writingGoal:(()=>{let b=`围绕”${a.title}”组织本项目资料事实,优先体现招标要求、清单工程内容、图纸施工对象和补疑修正口径。`,c=(0,e.u)(a.title);return c?`${b}本章专业写作重点:${c.goal}。`:b})(),mustUseMaterialKinds:g,evidenceQueries:Object.fromEntries(k.map(b=>[b,function(a,b){let c=i(a.sections||[],a=>j(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:sections`),d=i(a.requiredFacts,a=>j(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:facts`),e=c.selected.join(" "),f=d.selected.join(" "),g=`${a.title} ${e} ${f}`.trim();return[...new Set(({tender_document:[g,`${a.title} 招标范围 工期 质量 标准 评审 响应要求`,"项目概况 招标范围 投标文件 技术标 施工组织设计"],bill_of_quantities:[g,`${a.title} 工程量清单 分部分项 项目特征 数量 单位`,"清单 工程内容 主要分部分项 工程量 项目特征"],drawing:[g,`${a.title} 图纸 设计说明 构造做法 施工部位 节点`,"图纸 设计说明 平面 节点 构造 做法 专业接口"],addendum:[g,`${a.title} 补疑 澄清 答疑 变更 修正`,"补疑 澄清 答疑 招标文件 清单 图纸 修正"],contract:[g,`${a.title} 合同 条款 履约 责任 验收`],technical_specification:[g,`${a.title} 技术规范 施工要求 验收标准 控制要点`],schedule_document:[g,`${a.title} 工期 进度 节点 计划 里程碑`],quality_safety_document:[g,`${a.title} 质量 安全 文明 环保 验收 风险`],other:[g]})[b].filter(Boolean))]}(a,b)])),mustCover:[...new Set([a.purpose,...a.sections||[],...a.requiredFacts,...l,...m])].filter(Boolean),avoidWriting:["不得脱离项目资料泛泛套写通用内容","不得编造资料未确认的项目专属数字、日期、金额、工程量、材料规格;标准和法规只能作为待核候选,具体名称、完整编号、现行状态与适用对象须有可核依据","不得忽略补疑/澄清对原始资料的修正"]}}),l=function(a){let{profile:b}=a,c=k.map(a=>`${n(a)}:${b.groups[a].length?b.groups[a].map(a=>`${a.fileName}(${a.chunkCount||0})`).join("、"):"未识别"}`).join("\n"),d=a.chapterPlans.map((a,b)=>`${b+1}. ${a.chapterTitle}
|
|
59
|
+
`,"utf8"),e.renameSync(d,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return e.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),d=k.get(a);if(d&&d.mtimeMs===c)return d.records;let f=function(a){let b=function(a){let b=h(a);return e.existsSync(b)?e.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).find(a=>a.id===b)}function q(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function r(a){let b=m(a),c=h(a);return e.existsSync(c)&&e.unlinkSync(c),k.delete(a),b.length}function s(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},37502:(a,b,c)=>{c.d(b,{Cg:()=>q,Yd:()=>r,eC:()=>A,lH:()=>z,p7:()=>s,q1:()=>B});var d=c(58214),e=c(11248),f=c(14409),g=c(91898),h=c(57656),i=c(44753);let j=(a,b)=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error(`${b}必须为对象`);return a},k=(a,b,c)=>{if(Reflect.ownKeys(a).some(a=>"string"!=typeof a||!b.includes(a)))throw Error(`${c}含未知字段`)},l=(a,b)=>{if("string"!=typeof a||!a.trim()||a.length>4e3)throw Error(`${b}须有明确文本`);return a},m=(a,b,c=0)=>{if(!Array.isArray(a)||a.length<c||a.length>96||Array.from(a).some(a=>void 0===a))throw Error(`${b}必须为完整数组`);return a},n=(a,b,c)=>{let d=m(a,c);if(d.some(a=>!Number.isSafeInteger(a)||0>Number(a)||Number(a)>=b)||new Set(d).size!==d.length)throw Error(`${c}越界、重复或不属于本任务实际字典`);return d},o=a=>a.replace(/^([+−-]?\d+(?:\.\d+)?)/u,a=>String(Number(a.replace("−","-")))),p=(a,b)=>{let c=b.trim();return/^[A-Za-z][A-Za-z\d]*(?:[-./][A-Za-z\d]+)*$/u.test(c)&&/\d/u.test(c)?[(0,e.K3)(c)]:[...new Set([...(0,d.ei)(`${a} ${b}`).map(o),...(b.match(/(?<![A-Za-z\d])[A-Za-z][A-Za-z\d]*(?:[-./][A-Za-z\d]+)*(?![A-Za-z\d])/gu)??[]).filter(a=>/\d/u.test(a)&&(/[-./]/u.test(a)||!(0,d.ei)(a).length)).map(e.K3)])]},q=p,r=a=>"design-geometry"===(0,g.p)({fieldId:a,key:a,value:"1m",objectName:"已给对象"}).role||/标高|高程|坑深|坑底深度|桩长|桩径|净宽|净高|实体尺寸|构件尺寸/u.test(a)||/深度/u.test(a)&&!/每层|分层|单层/u.test(a),s=function(a,b,c){if(/(?:约|左右|大约|大致|估计)|\d\s*(?:~|~|至|到|–|—)\s*[+−-]?\d/u.test(a))return!0;let d="(mm|毫米|cm|厘米|m|米)",e="([+−-]?\\d+(?:\\.\\d+)?)";for(let a of b.matchAll(RegExp(`${e}\\s*${d}?\\s*(?:~|~|至|到|–|—|-)\\s*${e}\\s*${d}(?![a-zA-Z\xb2\xb323])`,"giu")))if([a[1]+(a[2]??a[4]),a[3]+a[4]].some(a=>p("",a).includes(c)))return!0;for(let a of b.matchAll(RegExp(`(?:约|大约|大致|估计)\\s*${e}\\s*${d}|${e}\\s*${d}\\s*左右`,"giu")))if(p("",(a[1]??a[3])+(a[2]??a[4])).includes(c))return!0;return!1},t={type:"string",minLength:1},u={type:"integer",minimum:0},v={type:"array",items:t},w=(a,b)=>{if(!["confirmed","rejected","unmeasured"].includes(String(a)))throw Error(`${b}状态无效`);return a},x=(a,b)=>{let c=((a,b,c=0)=>m(a,b,c).map(a=>l(a,b)))(a,b);if(new Set(c).size!==c.length)throw Error(`${b}重复`);return c},y=(a,b)=>a.length===b.length&&a.every(a=>b.includes(a));function z(a,b){let c=j(a,"施工工况复核");if(k(c,["confirmed","reason","sourceResults","sourceCases","variantResults","controlsResults","uncoveredSourceCases"],"施工工况复核"),"boolean"!=typeof c.confirmed)throw Error("施工工况复核缺少实际确认状态");let d=b.requiredSourceDictionaryIndices??[...new Set(b.variants.flatMap(a=>a.sourceDictionaryIndices))];n([...d],b.sourceDictionary.length,"待复核完整来源字典");let g=new Set(b.variants.map(a=>a.id));if(g.size!==b.variants.length)throw Error("待复核工况身份重复");let o=new Set,q=m(c.sourceCases,"sourceCases").map(a=>{let c=j(a,"sourceCases");k(c,["id","sourceDictionaryIndex","quote","objectScope","condition","semanticKind","versionDomain","applicability","variantIds","reason"],"sourceCases");let f=l(c.id,"sourceCases.id");if(o.has(f))throw Error("来源工况分支身份重复");o.add(f);let m=n([c.sourceDictionaryIndex],b.sourceDictionary.length,"sourceCases.sourceDictionaryIndex")[0];if(!d.includes(m))throw Error("来源分支不属于当前完整复核范围");let p=l(c.quote,"sourceCases.quote");if(!(0,e.dP)(b.sourceDictionary[m].value,p))throw Error("来源分支引文没有定位到实际完整原文");if(!["applicable","not-applicable","unmeasured"].includes(String(c.applicability)))throw Error("来源分支缺少实际适用性判断");if(!h.Rs.includes(c.semanticKind))throw Error("来源分支尚未区分项目设计、实际条件、规范约束与参考选项");if("unmeasured"===c.semanticKind&&"unmeasured"!==c.applicability)throw Error("来源语义未核定,不能宣称项目适用或不适用");if(void 0!==c.versionDomain&&"unmeasured"!==c.versionDomain&&!i.LN.includes(c.versionDomain))throw Error("来源版本用途域无效");if("reference-method"===c.semanticKind&&void 0!==c.versionDomain&&"construction-method"!==c.versionDomain)throw Error("参考工序不能声明采购品牌、规格或清单量域");let q=x(c.variantIds,"sourceCases.variantIds");if(q.some(a=>!g.has(a)))throw Error("来源分支引用不存在的施工工况");if("applicable"!==c.applicability&&q.length)throw Error("未判定或不适用来源不能预支施工工况覆盖");return{id:f,sourceDictionaryIndex:m,quote:p,objectScope:l(c.objectScope,"sourceCases.objectScope"),condition:l(c.condition,"sourceCases.condition"),semanticKind:c.semanticKind,...void 0!==c.versionDomain?{versionDomain:c.versionDomain}:{},applicability:c.applicability,variantIds:q,reason:l(c.reason,"sourceCases.reason")}});for(let a of b.expectedSourceCases??[]){let b=q.find(b=>b.id===a.id);if(!b||JSON.stringify([b.sourceDictionaryIndex,b.quote,b.objectScope,b.condition,b.semanticKind,b.versionDomain??"unmeasured"])!==JSON.stringify([a.sourceDictionaryIndex,a.quote,a.objectScope,a.condition,a.semanticKind,a.versionDomain??"unmeasured"]))throw Error("复验遗漏或改写已读取的原始工况分支")}let r=new Set,s=m(c.sourceResults,"sourceResults").map(a=>{let c=j(a,"sourceResults");k(c,["sourceDictionaryIndex","complete","caseIds","reason"],"sourceResults");let e=n([c.sourceDictionaryIndex],b.sourceDictionary.length,"sourceResults.sourceDictionaryIndex")[0];if(!d.includes(e)||r.has(e)||"boolean"!=typeof c.complete)throw Error("逐源完整复核漏项、重复或状态不明");r.add(e);let f=x(c.caseIds,"sourceResults.caseIds");if(!y(f,q.filter(a=>a.sourceDictionaryIndex===e).map(a=>a.id)))throw Error("逐源回执遗漏实际来源分支或借其他来源分支");return{sourceDictionaryIndex:e,complete:c.complete,caseIds:f,reason:l(c.reason,"sourceResults.reason")}});if(r.size!==d.length)throw Error("来源完整复核缺项,不能确认所有工况已覆盖");let t=new Set,u=m(c.variantResults,"variantResults").map(a=>{let b=j(a,"variantResults");k(b,["variantId","status","sourceCaseIds","reason"],"variantResults");let c=l(b.variantId,"variantResults.variantId");if(!g.has(c)||t.has(c))throw Error("逐工况复核未知或重复身份");t.add(c);let d=x(b.sourceCaseIds,"variantResults.sourceCaseIds");if(!y(d,q.filter(a=>"applicable"===a.applicability&&a.variantIds.includes(c)).map(a=>a.id)))throw Error("施工工况与来源分支双向覆盖关系不一致");return{variantId:c,status:w(b.status,"variantResults"),sourceCaseIds:d,reason:l(b.reason,"variantResults.reason")}});if(t.size!==g.size)throw Error("逐施工工况复核缺项");let v=b.variants.flatMap(a=>a.quantitativeControls.map(b=>`${a.id}\0${b.id}`)),z=new Set,A=m(c.controlsResults,"controlsResults").map(a=>{let c=j(a,"controlsResults");k(c,["variantId","controlId","status","reason","usage","sourceCaseIds","selectionEvidence"],"controlsResults");let d=l(c.variantId,"controlsResults.variantId"),e=l(c.controlId,"controlsResults.controlId"),g=`${d}\0${e}`;if(!v.includes(g)||z.has(g))throw Error("逐控制项复核未知或重复身份");z.add(g);let i=w(c.status,"controlsResults");if(!["project-property","normative-constraint"].includes(String(c.usage)))throw Error("控制用途未区分项目属性与适用规范约束");let n=x(c.sourceCaseIds,"controlsResults.sourceCaseIds"),o=n.map(a=>{let b=q.find(b=>b.id===a);if(!b||"confirmed"===i&&("applicable"!==b.applicability||!b.variantIds.includes(d)))throw Error("控制来源工况没有绑定同一实际施工对象");return b}),r=m(c.selectionEvidence,"controlsResults.selectionEvidence").map(a=>{let b=j(a,"selectionEvidence");k(b,["selectorSourceCaseId","optionSourceCaseId","selectionKey"],"selectionEvidence");let c=l(b.selectorSourceCaseId,"selectionEvidence.selectorSourceCaseId"),e=l(b.optionSourceCaseId,"selectionEvidence.optionSourceCaseId"),f=l(b.selectionKey,"selectionEvidence.selectionKey"),g=q.find(a=>a.id===c),i=o.find(a=>a.id===e);if(!g||!["project-design","project-condition"].includes(g.semanticKind)||"applicable"!==g.applicability||!g.variantIds.includes(d)||!i||"reference-option"!==i.semanticKind||!(0,h.YA)(g.quote,f)||!(0,h.YA)(i.quote,f))throw Error("参考选项缺少本项目真实选型原文及同一选型标识关联");return{selectorSourceCaseId:c,optionSourceCaseId:e,selectionKey:f}});if("confirmed"===i){let a,g=b.variants.find(a=>a.id===d).quantitativeControls.find(a=>a.id===e);if("sourceDictionaryIndex"in g.source)a=[g.source.sourceDictionaryIndex];else{let c=b.facts?.[g.source.factLocalIndex];if(!c||(0,f.vg)(c)!==g.source.factId)throw Error("控制事实缺少同任务实际出处,不能借其他原文核定");let d=c.resolutionRef?.winnerSourceRef??c.sourceRef,e=c.resolutionRef?.winnerSourceFile??c.sourceFile;a=b.sourceDictionary.flatMap((a,b)=>a.sourceFile===e&&a.sourceRef?.chunkIndex===d?.chunkIndex?[b]:[])}let h=o.filter(b=>a.includes(b.sourceDictionaryIndex)&&p(g.attribute,b.quote).includes(p(g.attribute,`${g.value}${g.unit??""}`)[0]));if(!h.length)throw Error("控制用途没有当前出处与量值的真实来源工况");if("normative-constraint"===c.usage&&(r.length||h.some(a=>"normative-rule"!==a.semanticKind)))throw Error("参考设计选项或项目属性不能伪装成通用规范约束");if(h.some(a=>"reference-method"===a.semanticKind))throw Error("参考工序不能承接项目产品选型、设计规格或清单量控制");if("project-property"===c.usage&&h.some(a=>"normative-rule"===a.semanticKind||"unmeasured"===a.semanticKind||"reference-option"===a.semanticKind&&!r.some(b=>b.optionSourceCaseId===a.id)))throw Error("未选型的参考参数不能升级为项目属性")}return{variantId:d,controlId:e,status:i,reason:l(c.reason,"controlsResults.reason"),usage:c.usage,sourceCaseIds:n,selectionEvidence:r}});if(z.size!==v.length)throw Error("实际控制项复核缺项");let B=x(c.uncoveredSourceCases,"uncoveredSourceCases"),C=q.filter(a=>"unmeasured"===a.applicability||b.variants.length>0&&"applicable"===a.applicability&&!a.variantIds.length).map(a=>a.id);if(!y(B,C))throw Error("未覆盖原文分支没有完整登记,不能由总体通过掩盖");let D=!C.length&&s.every(a=>a.complete)&&u.every(a=>"confirmed"===a.status)&&A.every(a=>"confirmed"===a.status);if(c.confirmed&&!D)throw Error("总体通过不能覆盖未读完整来源、未覆盖工况或未确认控制项");return{confirmed:c.confirmed&&D,reason:l(c.reason,"施工工况复核.reason"),sourceResults:s,sourceCases:q,variantResults:u,controlsResults:A,uncoveredSourceCases:B}}function A(a){if(!a.confirmed)throw Error(`施工工况未完成专业复核:${a.reason};未覆盖分支:${a.uncoveredSourceCases.join("、")}`)}function B(a,b){let c=b?.length??new Set(a.flatMap(a=>a.sourceDictionaryIndices)).size,d=(a,b)=>({type:"object",additionalProperties:!1,required:a,properties:b}),e={type:"string",enum:["confirmed","rejected","unmeasured"]};return d(["confirmed","reason","sourceResults","sourceCases","variantResults","controlsResults","uncoveredSourceCases"],{confirmed:{type:"boolean"},reason:t,sourceResults:{type:"array",minItems:c,maxItems:c,items:d(["sourceDictionaryIndex","complete","caseIds","reason"],{sourceDictionaryIndex:u,complete:{type:"boolean"},caseIds:v,reason:t})},sourceCases:{type:"array",items:d(["id","sourceDictionaryIndex","quote","objectScope","condition","semanticKind","versionDomain","applicability","variantIds","reason"],{id:t,sourceDictionaryIndex:u,quote:t,objectScope:t,condition:t,semanticKind:{type:"string",enum:[...h.Rs]},versionDomain:{type:"string",enum:[...i.LN,"unmeasured"],description:"当前实际断言的版本用途域,须依据完整原文与对象/属性核定;同文件引用A材料品牌不扩到其土方量/压实工序。未知填unmeasured。reference-method只能construction-method且不能承接产品选型、规格、清单量。"},applicability:{type:"string",enum:["applicable","not-applicable","unmeasured"]},variantIds:v,reason:t})},variantResults:{type:"array",minItems:a.length,maxItems:a.length,items:d(["variantId","status","sourceCaseIds","reason"],{variantId:t,status:e,sourceCaseIds:v,reason:t})},controlsResults:{type:"array",minItems:a.reduce((a,b)=>a+b.quantitativeControls.length,0),maxItems:a.reduce((a,b)=>a+b.quantitativeControls.length,0),items:d(["variantId","controlId","status","reason","usage","sourceCaseIds","selectionEvidence"],{variantId:t,controlId:t,status:e,reason:t,usage:{type:"string",enum:["project-property","normative-constraint"]},sourceCaseIds:v,selectionEvidence:{type:"array",items:d(["selectorSourceCaseId","optionSourceCaseId","selectionKey"],{selectorSourceCaseId:t,optionSourceCaseId:t,selectionKey:t})}})},uncoveredSourceCases:v})}},41791:(a,b,c)=>{c.d(b,{k:()=>h,w:()=>g});var d=c(77598);let e={prepare:["template","derivation","documentSpec","projectMaterialProfile","projectMaterialSummary","projectUnderstanding","domainProfile","readiness","promptTexts","nativeAuthorPromptTexts","nativeAuthorReferenceTexts","reviewPromptTexts","repairPromptTexts","factExtractionPromptTexts","promptDocumentRules","requirementSemantics","hasExplicitOutline"],understanding:["allEvidence","writerEvidence","indexHealth","requestedEvidencePerChapter","rolePoolRisk","retrievalCoverageReports","webResearchReport","missingItems","clarificationRequests","unfixableDeclarations","failedChapterMessages","chapterGenerationStages","chapterGenerationStagesByOrder","canonicalFacts","evaluationItems","agentWorkflow","bidComposition","hazardResolution"],planning:["generationStrategy","projectContext","tenderRequirements","clarificationOverrides","earlyTruthAudit","truthConstraint","conclusionTable","requiredContentNeeds","projectTypeDecision","sharedConstructionPlan"],blueprint:["integratedBlueprint","requirementAssignments","structureAssignments","structureUnattached"]},f=a=>(0,d.createHash)("sha256").update(a).digest("hex");function g(a){let b=JSON.stringify(Object.fromEntries(Object.entries(e).map(([b,c])=>[b,Object.fromEntries(c.map(c=>[c,a[b][c]]))])),(a,b)=>b instanceof Map?{__authorResumeCollection:"map",entries:[...b]}:b instanceof Set?{__authorResumeCollection:"set",entries:[...b]}:b);return{version:1,sha256:f(b),json:b}}function h(a,b){if(1!==b.version||"string"!=typeof b.json||f(b.json)!==b.sha256)throw Error("作者续跑上下文校验失败");let c=JSON.parse(b.json,(a,b)=>b?.__authorResumeCollection==="map"?new Map(b.entries):b?.__authorResumeCollection==="set"?new Set(b.entries):b);for(let[b,d]of Object.entries(e)){let e=c[b];if(!e||"object"!=typeof e)throw Error("作者续跑上下文缺少冻结阶段");for(let c of d)Object.hasOwn(e,c)&&(a[b][c]=e[c])}}},43800:(a,b,c)=>{c.d(b,{h:()=>d});class d{constructor(a){this.controller=new AbortController,this.pending=new Set,this.signal=a?AbortSignal.any([a,this.controller.signal]):this.controller.signal}fail(a,b="preparation"){if(this.firstFailure||(this.firstFailure={error:a,origin:b,at:Date.now()}),!this.controller.signal.aborted){let a=Error("本轮前置工作已失败,取消其余准备任务",{cause:this.firstFailure.error});a.name="AbortError",this.controller.abort(a)}}get failure(){return this.firstFailure?.error}get failed(){return void 0!==this.firstFailure}run(a){this.signal.throwIfAborted();let b=Promise.resolve().then(()=>(this.signal.throwIfAborted(),a()));return this.pending.add(b),b.then(()=>{this.pending.delete(b)},a=>{this.pending.delete(b),this.fail(a)}),b}async pool(a,b,c){if(this.failed)throw this.failure;if(this.signal.throwIfAborted(),!Number.isSafeInteger(c)||c<1)throw Error("准备任务并发数必须是正整数");let d=Array(a.length),e=0,f=Array.from({length:Math.max(0,Math.min(a.length,Math.floor(c)))},()=>this.run(async()=>{for(;!this.signal.aborted&&e<a.length;){let c=e++;d[c]=await b(a[c],c),this.signal.throwIfAborted()}}));if(await Promise.allSettled(f),this.failed)throw this.failure;return this.signal.throwIfAborted(),d}async drain(){for(;this.pending.size;)await Promise.allSettled([...this.pending])}receipt(){let a=this.firstFailure?.error;return{pending:this.pending.size,drained:0===this.pending.size,signalAborted:this.signal.aborted,firstFailure:this.firstFailure?{at:this.firstFailure.at,origin:this.firstFailure.origin,name:a instanceof Error?a.name:null,message:a instanceof Error?a.message:String(a)}:null}}}},44753:(a,b,c)=>{c.d(b,{L2:()=>y,LN:()=>m,Tu:()=>z,bz:()=>x,cW:()=>r,gM:()=>v,mb:()=>s,xg:()=>i});var d=c(77598),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g);let i="source-version-policy-v3",j=a=>(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),k=a=>a.normalize("NFKC").replace(/(?:^|\n)\s*#{1,6}\s*/gu,"\n").replace(/\s+/gu,""),l=/^[a-f0-9]{64}$/u,m=["boq-quantity","procurement-brand","procurement-specification","construction-method"],n=a=>/^20\d{2}-\d{2}-\d{2}$/u.test(a)&&Number.isFinite(Date.parse(a))&&new Date(a).toISOString().slice(0,10)===a;function o(a){if("human-source-edition-v1"!==a.version||"human"!==a.origin||!a.reviewer?.trim()||!a.confirmedAt||!Number.isFinite(Date.parse(a.confirmedAt))||!a.declarationId||!n(a.issuedAt)||!a.family||!Array.isArray(a.domains)||!a.domains.length||new Set(a.domains).size!==a.domains.length||a.domains.some(a=>!m.includes(a))||!a.declarationSource?.sourceFile||!l.test(a.declarationSource.sourceSha256)||!l.test(a.declarationSource.parsedSha256)||!Array.isArray(a.currentSources)||!a.currentSources.length||new Set(a.currentSources.map(a=>a.sourceFile)).size!==a.currentSources.length||a.currentSources.some(a=>!a.sourceFile||!l.test(a.sourceSha256)||!l.test(a.parsedSha256)))throw Error("来源发行确认资产无真实人审身份、发行日期、用途域或SHA绑定")}function p(a){let b=k(a),c=[];for(let a of(b.includes("工程量清单")&&c.push({family:"工程量清单",domains:["boq-quantity","procurement-specification"]}),b.includes("最高投标限价")&&c.push({family:"最高投标限价",domains:["boq-quantity","procurement-specification"]}),b.matchAll(/(?:工程标准化)?[A-Za-z]类采购物资|[\p{L}\d]{2,20}材料清单/gu)))c.some(b=>b.family===a[0])||c.push({family:a[0],domains:["procurement-brand","procurement-specification","boq-quantity"]});return c}function q(a,b,c){let d=0;return[...a.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex).flatMap(a=>{let e=d,f=e+a.content.length;return d=f+1,e<c&&f>b?[{chunkIndex:a.chunkIndex,startChar:Math.max(0,b-e),endChar:Math.min(a.content.length,c-e)}]:[]})}function r(a,b){let c=[],e=[],g=b?new Set(b):void 0;if(f().existsSync(a))for(let b of f().readdirSync(a).filter(a=>/^[A-Za-z\d][A-Za-z\d._-]*\.json$/u.test(a)).sort()){let i=f().readFileSync(h().join(a,b)),j=JSON.parse(i.toString("utf8"));if(g){let a=[j.declarationSource?.sourceFile,...Array.isArray(j.currentSources)?j.currentSources.map(a=>a?.sourceFile):[]];if(a.length&&a.every(a=>"string"==typeof a&&a.length>0)){if(!a.some(a=>g.has(a)))continue;if(a.some(a=>!g.has(a)))throw Error(`本轮资料范围未完整包含来源发行确认引用:${b}`)}}try{o(j)}catch{throw Error(`来源发行确认资产无真实人审身份、发行日期、用途域或SHA绑定:${b}`)}c.push(j),e.push({name:b,sha256:(0,d.createHash)("sha256").update(i).digest("hex")})}return{confirmations:c,assets:e,fingerprint:j(e)}}function s(a,b=[],c=[]){if(c.length!==b.length||new Set(c.map(a=>a.name)).size!==c.length||c.some(a=>!/^[A-Za-z\d][A-Za-z\d._-]*\.json$/u.test(a.name)||!l.test(a.sha256)))throw Error("来源发行确认必须来自实际持久资产,内存人审布尔或模型声明不能冻结为确认");let e=Object.fromEntries(a.map(a=>[a.sourceFile,{parsedSha256:a.parsedSha256,sourceSha256:a.sourceSha256}])),f=new Map(a.map(a=>[a.sourceFile,[...a.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex).map(a=>a.content).join("\n")])),g=a.map(a=>{let b=f.get(a.sourceFile),c=function(a){let b=a.split(/\r?\n/u).map(a=>a.replace(/^\s*#{1,6}\s*/u,"").trim()),c=b.flatMap(a=>{let b=/^(20\d{2})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日$/u.exec(a);if(!b)return[];let c=`${b[1]}-${b[2].padStart(2,"0")}-${b[3].padStart(2,"0")}`;return n(c)?[c]:[]}),d=b.findIndex(a=>/^PDF\s*第\s*1\s*页/u.test(a)),e=(d>=0?b.slice(d+1):b).filter(a=>a&&!/^(?:资料类型|资料名称|MIME|文件(?:名|名称|路径|大小|类型)?\s*[::]|源文件\s*[::]|PDF\s*第)/u.test(a)),f=e[0]??"",g=a=>/^(?:[^::|。!?]{1,180})?(?:补疑|答疑|澄清)(?:[\d一二三四五六七八九十零〇]+)?(?:文件|通知|公告|说明|函)?$/u.test(a),h=k(f);!g(h)&&/(?:补|答|澄)$/u.test(h)&&/^[疑清][\d一二三四五六七八九十零〇]*(?:文件|通知|公告|说明|函)?$/u.test(k(e[1]??""))?h+=k(e[1]):!g(h)&&/(?:项目|工程)$/u.test(h)&&/^(?:补疑|答疑|澄清)[\d一二三四五六七八九十零〇]*(?:文件|通知|公告|说明|函)?$/u.test(k(e[1]??""))&&(h+=k(e[1]));let i=g(h);return{title:i?h:f,isClarification:i,projectIdentifier:/项目编号\s*[::]\s*([A-Za-z\d-]+)/u.exec(a)?.[1]??null,issuedAt:c.at(-1)??null}}(b),e=c.isClarification,g=/(?:^|\n)\s*\|[^\n]+\|\s*\n\s*\|[ :|-]+\|/u.test(b),h=/(?:bill|quantit|cost|price|material|table|清单|物资|材料)/iu.test(`${a.sourceKind??""} ${a.processingType??""}`),i=b.split(/\r?\n/u).filter(a=>/工作表\s*[::]|表标题\s*[::]|^\s*#{1,6}\s/u.test(a)||/^(?:招标工程量清单|最高投标限价|工程标准化.{0,10}采购物资)\s*$/u.test(a.trim())).join("\n"),j=!e&&g&&h?p(i).map(a=>a.family):[],l=function(a,b,c,d){if(!d.length)return[];let e=p(c).map(a=>a.family);if(/工作表\s*[::]|表标题\s*[::]/u.test(c)&&d.every(a=>e.includes(a))||1===d.length&&k(c)===d[0])return d.map(b=>({family:b,mode:"whole-source",heading:c,spans:a.chunks.map(a=>({chunkIndex:a.chunkIndex,startChar:0,endChar:a.content.length}))}));let f=[...b.matchAll(/^(#{1,6})\s+([^\n]+)$/gmu)].filter(a=>{let b=a[2].trim();return!/[..·。]{2,}|\|/u.test(b)&&!/^(?:PDF\s*第|文件(?:名|名称|大小|路径)|资料(?:类型|名称)|-?\d+-?\s*$)/u.test(b)&&(/^(?:第[\d一二三四五六七八九十百]+章|\d+(?:[..]\d+)*[、..::\s]*[^\d]|[一二三四五六七八九十]+[、..])/u.test(b)||p(b).some(a=>k(b)===a.family))}).map(a=>{let b=a[2].trim(),c=/^(\d+(?:[..]\d+)*)/u.exec(b)?.[1];return{start:a.index,level:a[1].length,title:b,heading:a[0],chapter:/^第[\d一二三四五六七八九十百]+章/u.test(b),ordinalDepth:c?.split(/[..]/u).length,familyTitle:k(b).replace(/^第[\d一二三四五六七八九十百]+章[、..::]*/u,"").replace(/^\d+(?:[..]\d+)*[、..::]*/u,"").replace(/^[一二三四五六七八九十]+[、..]/u,"")}});return d.flatMap(b=>{let d=f.filter(a=>a.familyTitle===b);return d.length?d.map(c=>{let d=f.find(a=>a.start>c.start&&a.title!==c.title&&(c.chapter?a.chapter:a.chapter||(void 0!==c.ordinalDepth?void 0!==a.ordinalDepth&&a.ordinalDepth<=c.ordinalDepth:a.level<=c.level)));return d?{family:b,mode:"embedded-source-section",heading:c.heading,spans:q(a,c.start,d.start)}:{family:b,mode:"unmeasured",heading:c.heading,spans:[]}}):[{family:b,mode:"unmeasured",heading:c,spans:[]}]})}(a,b,c.title,j);return{sourceFile:a.sourceFile,...c,families:j,editionScopes:l,scopeEvidenceChunks:l.some(a=>"whole-source"!==a.mode)?a.chunks.map(a=>({chunkIndex:a.chunkIndex,text:a.content,sha256:(0,d.createHash)("sha256").update(a.content).digest("hex")})):[],domainDependencies:[]}}),h=[];for(let b of a){let a=g.find(a=>a.sourceFile===b.sourceFile);if(!a.isClarification)continue;let c=f.get(b.sourceFile),d=[...b.chunks].sort((a,b)=>a.chunkIndex-b.chunkIndex),i=0,l=d.map(a=>{let b=i;return i+=a.content.length+1,{...a,start:b,end:b+a.content.length}});for(let d of c.matchAll(/[^。!?]+[。!?]?/gu)){let c=d[0],f=/(?:本(?:项目|工程)(?:的)?|(?:工程标准化)?[A-Za-z]类采购物资|工程量清单)/u.exec(c),g=f?.index??c.length-c.trimStart().length,i=c.slice(g).trimEnd(),m=k(i),n=d.index+g,o=n+i.length;if(/重新(?:发放|发布)/u.test(m)&&/(?:上[一]?版本|原版本|旧版本).{0,100}作废/u.test(m)&&/以本次.{0,40}(?:版本|文件|附件)为准/u.test(m))for(let c of p(i)){let d=`source-edition:${j([a.projectIdentifier,a.title,a.issuedAt,c.family,m]).slice(0,24)}`,f=l.filter(a=>a.start<o&&a.end>n).map(a=>({chunkIndex:a.chunkIndex,startChar:Math.max(0,n-a.start),endChar:Math.min(a.content.length,o-a.start)}));if(!f.length)throw Error("发行声明缺少完整实际切片定位");let g={sourceFile:b.sourceFile,spans:f,...e[b.sourceFile]},k=h.find(a=>a.id===d);k?k.sources.push(g):h.push({id:d,...c,quote:i,issuedAt:a.issuedAt,projectIdentifier:a.projectIdentifier,title:a.title,sources:[g]})}}}let m=g.flatMap(b=>{if(!b.isClarification)return[];let c=a.find(a=>a.sourceFile===b.sourceFile);return[...f.get(b.sourceFile).matchAll(/工程量清单[^。!?]*品牌[^。!?]*以[^。!?]*为准[。!?]?/gu)].map(a=>({document:b,families:p(a[0]).filter(a=>a.domains.includes("procurement-brand")).map(a=>a.family),proof:{sourceFile:b.sourceFile,...e[b.sourceFile],quote:a[0],spans:q(c,a.index,a.index+a[0].length)}}))});for(let b of g){if(!b.families.includes("工程量清单")&&!b.families.includes("最高投标限价"))continue;let c=a.find(a=>a.sourceFile===b.sourceFile);for(let a of[...new Set(h.filter(a=>a.domains.includes("procurement-brand")).map(a=>a.family))])if(!b.families.includes(a))for(let d of c.chunks)for(let c of d.content.matchAll(/[^\n]+/gu)){if(!k(c[0]).includes(k(a)))continue;let e=m.filter(c=>{let d=c.document,e=d.title.replace(/(?:补疑|答疑|澄清)\d*$/u,"");return c.families.includes(a)&&d.projectIdentifier&&(d.projectIdentifier===b.projectIdentifier||!b.projectIdentifier&&e&&k(f.get(b.sourceFile)).includes(k(e)))});e.length&&b.domainDependencies.push({family:a,domain:"procurement-brand",quote:c[0],spans:[{chunkIndex:d.chunkIndex,startChar:c.index,endChar:c.index+c[0].length}],authoritySources:e.map(a=>a.proof)})}}for(let a of b){o(a);let b=h.find(b=>b.id===a.declarationId);if(!b||a.issuedAt!==b.issuedAt||a.family!==b.family||a.domains.some(a=>!b.domains.includes(a))||!b.sources.some(b=>b.sourceFile===a.declarationSource.sourceFile&&b.sourceSha256===a.declarationSource.sourceSha256&&b.parsedSha256===a.declarationSource.parsedSha256)||a.currentSources.some(b=>!e[b.sourceFile]||!g.find(a=>a.sourceFile===b.sourceFile)?.families.includes(a.family)||b.sourceSha256!==e[b.sourceFile].sourceSha256||b.parsedSha256!==e[b.sourceFile].parsedSha256))throw Error("来源发行确认不属于当前真实声明/发行日期/用途域/源SHA/解析身份")}let r=[];for(let a of[...new Set(h.map(a=>a.family))]){let c=h.filter(b=>b.family===a),d=c.filter(a=>a.issuedAt).sort((a,b)=>a.issuedAt.localeCompare(b.issuedAt)),e=d.length===c.length,f=new Set(c.map(a=>a.projectIdentifier).filter(Boolean)),i=e&&f.size<=1?d.at(-1)?.issuedAt:null,k=i?d.filter(a=>a.issuedAt===i):c,l=1===k.length?k[0]:null,m=g.filter(b=>b.families.includes(a)).map(a=>a.sourceFile);for(let c of[...new Set(k.flatMap(a=>a.domains))]){let d=l?b.filter(b=>b.declarationId===l.id&&b.issuedAt===l.issuedAt&&b.family===a&&b.domains.includes(c)):[];if(new Set(d.map(a=>j([...a.currentSources].sort((a,b)=>a.sourceFile.localeCompare(b.sourceFile))))).size>1)throw Error("同一发行声明和用途域有不同的附件人审归属,须解决冲突;不能合并旧新版或按资产顺序择一");let e=[...new Set(d.flatMap(a=>a.currentSources.map(a=>a.sourceFile)))],f=e.length&&l?"confirmed":"unresolved";r.push({id:`source-edition-decision:${j([k.map(a=>a.id),c,e]).slice(0,24)}`,declarationId:l?.id??null,declarationIds:k.map(a=>a.id).sort(),family:a,domain:c,status:f,currentSourceFiles:"confirmed"===f?e:[],candidateSourceFiles:m,reason:"confirmed"===f?"实际人审发行确认绑定同一声明、发行日期和当前源/解析SHA":"已知旧版作废/重发声明,但完整发行附件归属未获真实确认;文件名、内部modified、序号或单项内容对应不能替代整本发行证明"})}}let t={version:i,assetFingerprint:j(c),sources:e,documents:g,declarations:h,decisions:r,confirmationAssets:c};return u({...t,policyId:j(t)})}let t=new WeakSet;function u(a){if(t.has(a))return a;let b=function(a){let b=[],c=new Set,d=new Set,e=a=>{if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return;if("object"!=typeof a||null===a)throw Error("来源版本账必须为有限 JSON plain data,不能含 undefined/function/symbol");if(d.has(a))throw Error("来源版本账不能含循环身份");if(c.has(a))return;let f=Array.isArray(a),g=Object.getPrototypeOf(a);if(f?g!==Array.prototype:g!==Object.prototype&&null!==g)throw Error("来源版本账只允许 plain records/arrays,不能认证 Date/Map/特殊对象");d.add(a),c.add(a),b.push(a);let h=Object.getOwnPropertyDescriptors(a);for(let b of Reflect.ownKeys(h)){if("string"!=typeof b)throw Error("来源版本账不能含 symbol 字段");let c=h[b];if(!f||"length"!==b){if(!("value"in c)||!c.enumerable)throw Error("来源版本账不能含 accessor/隐藏字段");if(f&&(!/^(0|[1-9]\d*)$/u.test(b)||Number(b)>=a.length))throw Error("来源版本账数组不能含旁路字段");e(c.value)}}if(f&&Object.keys(a).length!==a.length)throw Error("来源版本账数组不能含空洞");d.delete(a)};return e(a),b}(a),{policyId:c,...e}=a;if(a.version!==i||c!==j(e))throw Error("冻结来源版本用途账被改写或协议不一致");if(a.documents.some(a=>!Array.isArray(a.editionScopes)||!Array.isArray(a.scopeEvidenceChunks)||a.families.some(b=>!a.editionScopes.some(a=>a.family===b))||a.editionScopes.some(b=>!["whole-source","embedded-source-section","unmeasured"].includes(b.mode)||!a.families.includes(b.family)||!Array.isArray(b.spans)||"unmeasured"!==b.mode&&!b.spans.length||b.spans.some(a=>!Number.isSafeInteger(a.chunkIndex)||!Number.isSafeInteger(a.startChar)||!Number.isSafeInteger(a.endChar)||a.startChar<0||a.endChar<a.startChar))||a.scopeEvidenceChunks.some(a=>a.sha256!==(0,d.createHash)("sha256").update(a.text).digest("hex"))))throw Error("冻结来源缺少当前真实发行作用范围或chunk原文身份;旧未知范围不能自动作全源或豁免");if(a.decisions.some(a=>"confirmed"===a.status)&&!a.confirmationAssets.length)throw Error("已确认发行用途缺真实持久人审资产身份");for(let a=b.length-1;a>=0;a-=1)Object.freeze(b[a]);return t.add(a),a}function v(a){t.has(a)||u(a)}function w(a,b){let c=b.quote?.replace(/\s/gu,"");if(!c)return;let d=[],e=[...a.scopeEvidenceChunks].sort((a,b)=>a.chunkIndex-b.chunkIndex),f=void 0!==b.sourceChunkIndex?c.length+(e.find(a=>a.chunkIndex===b.sourceChunkIndex)?.text.replace(/\s/gu,"").length??0):1/0;for(let a of e){if(void 0!==b.sourceChunkIndex&&(a.chunkIndex<b.sourceChunkIndex||f<=0)||b.sourceChunkIndices&&!b.sourceChunkIndices.includes(a.chunkIndex))continue;let c=d.at(-1);c&&c.at(-1).chunkIndex+1===a.chunkIndex?c.push(a):d.push([a]),f-=a.text.replace(/\s/gu,"").length}let g=[];for(let a of d){let d=[],e="";for(let b of a)for(let a=0;a<b.text.length;a++)/\s/u.test(b.text[a])||(e+=b.text[a],d.push({chunkIndex:b.chunkIndex,char:a}));for(let a=e.indexOf(c);a>=0;a=e.indexOf(c,a+1)){if(void 0!==b.sourceChunkIndex&&d[a].chunkIndex!==b.sourceChunkIndex)continue;let e=new Map;for(let b of d.slice(a,a+c.length)){let a=e.get(b.chunkIndex);a?a.endChar=b.char+1:e.set(b.chunkIndex,{chunkIndex:b.chunkIndex,startChar:b.char,endChar:b.char+1})}g.push([...e.values()])}}return 1===g.length?g[0]:void 0}function x(a,b){let c=a.sourceVersionPolicy;if(!c)throw Error("新生成或恢复缺少冻结来源版本用途账;旧存档只能只读追溯,不能作为本次准入");if(v(c),!c.sources[b.sourceFile]||c.sources[b.sourceFile].parsedSha256!==a.sources[b.sourceFile]?.sha256)throw Error("来源版本用途与当前冻结解析身份不一致");return function(a,b,c){if("reference-method"===c.usage&&"reference-method"===c.nature&&c.referenceMethodReviewId?.trim()&&c.technicalActionOnly&&!c.quantitativeValues?.length&&!c.designSelection&&(!c.domain||"construction-method"===c.domain))return{status:"eligible",decisionIds:[],reason:"已独立核定的参考工序用途,不形成本项目产品选型、规格或清单量"};if("reference-method"===c.usage||"reference-method"===c.nature)throw Error("参考工序用途缺真实独立核定或承接了产品选型、规格、清单量,不能取得来源版本资格");let d=[],e=b.filter(b=>{let e=b.candidateSourceFiles.includes(c.sourceFile)&&(!c.domain||"construction-method"===c.domain||c.quantitativeValues?.length||c.designSelection||b.domain===c.domain),f=e?function(a,b,c){let d=a?.editionScopes.filter(a=>a.family===b);if(!d?.length||d.some(a=>"unmeasured"===a.mode))return"unmeasured";if(d.some(a=>"whole-source"===a.mode))return"edition-content";let e=w(a,c);return e?e.some(a=>d.some(b=>b.spans.some(b=>b.chunkIndex===a.chunkIndex&&a.startChar<b.endChar&&a.endChar>b.startChar)))?"edition-content":"outside-edition-content":"unmeasured"}(a,b.family,c):void 0;"unmeasured"===f&&d.push(b.id);let g=a?.domainDependencies.some(d=>{if(d.family!==b.family||d.domain!==b.domain)return!1;if(c.domain)return c.domain===d.domain;if(!c.quote)return!0;let e=w(a,c);return!e||e.some(a=>d.spans.some(b=>b.chunkIndex===a.chunkIndex&&a.startChar<b.endChar&&a.endChar>b.startChar))});return e&&"outside-edition-content"!==f||g}),f=e.filter(a=>"confirmed"!==a.status||!a.currentSourceFiles.includes(c.sourceFile)),g=f.filter(a=>"confirmed"===a.status&&!a.candidateSourceFiles.includes(c.sourceFile));return{status:d.length||f.some(a=>"unresolved"===a.status)||g.length?"unresolved":f.length?"superseded":"eligible",decisionIds:e.map(a=>a.id),reason:[...d.length?["实际采用关系没有在已核发行内容范围精确定位;不能把整个混合文件视为清单附件,也不能猜测范围豁免"]:[],...f.map(a=>g.includes(a)?`该字段引用${a.family}的${a.domain}域;发行附件虽已确认,引用表自身不能证明当前产品选用,须引用已确认附件的实际同对象证据`:a.reason)].join(";")||"该实际用途未被源版本声明限制,或具有同域真实发行确认"}}(c.documents.find(a=>a.sourceFile===b.sourceFile),c.decisions,b)}function y(a,b){let c={sourceFile:b.sourceFile,objectScope:b.name,usage:"project-fact"};return{sourceVersionEligibility:x(a,{...c,assertedText:`${b.name} ${b.description} ${b.quantity}${b.unit}`}),sourceVersionFieldEligibility:{quantity:x(a,{...c,domain:"boq-quantity",attribute:"quantity",assertedText:`${b.quantity}${b.unit}`}),description:x(a,{...c,attribute:"description",assertedText:b.description})}}}function z(a,b){let c=x(a,b);if("eligible"!==c.status)throw Error(`来源版本${"unresolved"===c.status?"未决":"已被取代"},不能将该域品牌/规格/清单参数登记为当前已核设计:${c.reason}`)}},45462:(a,b,c)=>{c.d(b,{W9:()=>r,_n:()=>s,O:()=>q,Hz:()=>t,_W:()=>u});var d=c(76760);c(19898);var e=c(81892),f=c(44533);function g(a){let b=a.split(/[,。;:、\s\d()()《》<>【】"“”'‘’\-/\\|,.:;]+/u).filter(Boolean),c=new Set;for(let a of b){let b=a.trim();if(b.length>=2&&c.add(b),b.length>=3)for(let a=0;a<=b.length-2;a++){let d=b.slice(a,a+2);d.length>=2&&!/^[a-zA-Z0-9]+$/u.test(d)&&c.add(d)}}return[...c]}function h(a,b,c=.3){return function(a,b){let c=new Set(g(a)),d=new Set(g(b));if(0===c.size||0===d.size)return 0;let e=0;for(let a of c)if(d.has(a))e+=1;else if(a.length>=2){for(let b of d)if(b.length>=2&&(b.includes(a)||a.includes(b))){e+=.5;break}}return e/Math.max(c.size,1)}(a,b)>=c}function i(a,b,c,d="items"){let e=c.maxItems??Number.MAX_SAFE_INTEGER,f=c.maxChars??Number.MAX_SAFE_INTEGER,g=c.charFn??(a=>JSON.stringify(a).length),h=a.map(a=>({item:a,score:b(a)}));h.sort((a,b)=>b.score-a.score);let j=[],k=[],l=0;for(let{item:a}of h){let b=g(a);j.length<e&&l+b<=f?(j.push(a),l+=b):k.push(a)}let m=[];if(k.length>0){for(let a of(m.push(`[selection] ${d}: 预算 ${e}项/${f}字符 → 选中 ${j.length}项(${l}字符),丢弃 ${k.length}项`),k.slice(0,10))){let b="string"==typeof a?a.slice(0,80):JSON.stringify(a).slice(0,80);m.push(` - 丢弃: ${b}`)}k.length>10&&m.push(` ... 及其他 ${k.length-10} 项`)}return{selected:j,dropped:k,droppedLog:m}}function j(a){let b=0,c=a.length;return 0===c?0:(b+=3*(a.match(/\d+(?:\.\d+)?/gu)||[]).length,/m[23²³]?|mm|cm|km|t|kg|台|套|个|项|批|次|份|人|日历天|天|月|万元|元|%|MPa|kPa|kN|℃/iu.test(a)&&(b+=2),/GB|JGJ|ISO|CJJ|CECS|DL|YB|SH|HG|SY|NB/iu.test(a)&&(b+=3),/验收|质量|安全|工期|进度|成本|风险|危大|重点|难点|关键|控制|标准|规范|设计|施工|材料|设备/u.test(a)&&(b+=1),c<20&&(b-=1),/项目名称|工程名称|招标人|建设地点|计划工期|质量标准|合同估算/u.test(a)&&(b+=2),b)}c(70933);let k=["tender_document","bill_of_quantities","drawing","addendum","contract","technical_specification","schedule_document","quality_safety_document","other"],l={tender_document:"招标文件正文",bill_of_quantities:"工程量清单",drawing:"图纸/设计资料",addendum:"补疑/澄清/答疑",contract:"合同资料",technical_specification:"技术规范/技术要求",schedule_document:"工期/进度资料",quality_safety_document:"质量安全文明资料",other:"其他资料"},m={addendum:100,tender_document:90,contract:80,technical_specification:75,bill_of_quantities:70,drawing:65,schedule_document:60,quality_safety_document:60,other:10};function n(a){return l[a]||"其他资料"}function o(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}let p=/\.(?:dwg|dxf|dwt|dws)$/iu;function q(a){if(p.test(d.basename(o(a))))return{kind:"drawing",confidence:.95,signals:["CAD 图形格式(扩展名判定,与目录名无关)"]};let b=o(a).toLowerCase(),c=[],e=(d,e)=>(d.lastIndex=0,(!!d.test(a)||!!d.test(b))&&(c.push(e),!0));return e(/补疑|答疑|澄清|疑问回复|答复|变更|更正|补充通知|addendum|clarification/iu,"补疑/澄清关键词")?{kind:"addendum",confidence:.92,signals:c}:e(/清单|工程量|分部分项|措施项目|项目特征|招标控制价|boq|bill.?of.?quantities/iu,"清单/工程量关键词")?{kind:"bill_of_quantities",confidence:.9,signals:c}:e(/图纸|施工图|建筑图|结构图|安装图|设计图|总平|平面图|立面图|剖面图|节点|dwg|drawing|cad/iu,"图纸/设计关键词")?{kind:"drawing",confidence:.88,signals:c}:e(/招标文件|投标人须知|评标办法|招标公告|招标正文|招标需求|tender|bidding/iu,"招标文件关键词")?{kind:"tender_document",confidence:.9,signals:c}:e(/合同|协议书|专用条款|通用条款|contract/iu,"合同关键词")?{kind:"contract",confidence:.82,signals:c}:e(/技术规范|技术要求|施工规范|验收规范|标准|做法说明|specification|standard/iu,"技术规范关键词")?{kind:"technical_specification",confidence:.8,signals:c}:e(/工期|进度|计划|节点|里程碑|schedule/iu,"工期进度关键词")?{kind:"schedule_document",confidence:.72,signals:c}:e(/质量|安全|文明|环保|危大|验收|quality|safety/iu,"质量安全关键词")?{kind:"quality_safety_document",confidence:.72,signals:c}:{kind:"other",confidence:.35,signals:["未命中明确资料类型,按其他资料处理"]}}function r(a,b){let c=function(a,b){let c=new Set((b.selectedFiles||[]).map(a=>o(a)).filter(Boolean)),d=[...b.selectedRoots||[]],e=a.filter(a=>c.has(o(a.relativePath))&&"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0);return{files:e,roots:d,warnings:0===e.length?["所选资料范围内没有可用文件(未索引/未切片/文件缺失)。"]:[]}}((0,f.Yy)(a),b),e={tender_document:[],bill_of_quantities:[],drawing:[],addendum:[],contract:[],technical_specification:[],schedule_document:[],quality_safety_document:[],other:[]},g=c.files.map(a=>{let b=q(a.relativePath),c={filePath:a.relativePath,fileName:d.basename(a.relativePath),kind:b.kind,confidence:b.confidence,priority:m[b.kind],chunkCount:a.chunkCount,summary:`${n(b.kind)}:${d.basename(a.relativePath)},可用切片 ${a.chunkCount||0} 条。`,keySignals:b.signals};return e[b.kind].push(c),c}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence),h=(c.roots[0]||function(a){let b=o(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}(g[0]?.filePath||"")||"当前知识库项目").replace(/\.(?:pdf|docx?|xlsx?|xls|dwg|zip)$/iu,"").replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").trim(),i=[...c.warnings];return 0===e.tender_document.length&&i.push("未识别到招标文件正文,工程概况、招标响应和评审要求可能不足。"),0===e.bill_of_quantities.length&&i.push("未识别到工程量清单,施工范围、资源配置和主要工程内容可能不足。"),0===e.drawing.length&&i.push("未识别到图纸/设计资料,施工方法、专业接口和构造做法可能不足。"),{projectName:h,materialRoots:c.roots,files:g,groups:e,warnings:i}}function s(a,b,c){let d=c?function(a){let b=["## 项目资料图谱分析结果",""];for(let c of(a.analysisScope&&b.push("以下是按预算选择片段的理解摘要,仅供定位和规划。节点须回查冻结原文才能作为项目事实;“缺口”是选段中的待核线索,不能证明原始资料不含该内容,不得直接写成正文事实。",""),a.works.length&&b.push("### 主要工程内容"),a.works))b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}(c):"",f=[`本次文档必须围绕项目资料包”${b.projectName}”展开,不得把其他项目资料混入正文。`,"招标文件正文用于确定项目边界、招标响应、工期质量安全目标和评审关注点。","招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏。","工程量清单用于确定主要工程内容、分部分项、项目特征、资源配置和施工方法依据。","图纸/设计资料用于确定施工对象、空间关系、构造做法、专业接口和重点难点。","补疑/澄清/答疑属于高优先级修正资料,如与原文件冲突,以补疑/澄清/答疑为准。"],g=a.chapters.map(a=>{var d;let f=(d=a.title,/概况|工程|项目|总体/u.test(d)?["tender_document","addendum","bill_of_quantities"]:/部署|组织|平面|准备/u.test(d)?["tender_document","bill_of_quantities","drawing","addendum"]:/施工|工艺|技术|方案|方法|分部分项/u.test(d)?["bill_of_quantities","drawing","technical_specification","addendum"]:/进度|工期/u.test(d)?["tender_document","addendum","schedule_document","bill_of_quantities"]:/质量|验收/u.test(d)?["tender_document","technical_specification","drawing","quality_safety_document","addendum"]:/安全|文明|环保|风险|危大/u.test(d)?["tender_document","quality_safety_document","drawing","addendum"]:/资源|材料|设备|劳动力|机械/u.test(d)?["bill_of_quantities","drawing","tender_document"]:["tender_document","bill_of_quantities","drawing","addendum","technical_specification"]).filter(a=>b.groups[a]?.length>0),g=f.length?f:["tender_document","bill_of_quantities","drawing"].filter(a=>b.groups[a]?.length>0),l=(c?.works||[]).filter(b=>{if(!b.name)return!1;let c=h(b.name,a.title),d=(a.sections||[]).some(a=>h(b.name,a));return c||d}).map(a=>`${a.name}:${a.scope}`),m=(c?.methods||[]).filter(b=>!!b.applicableWorks?.length&&b.applicableWorks.some(b=>{let c=h(b,a.title),d=(a.sections||[]).some(a=>h(b,a));return c||d})).map(a=>a.name);return{chapterId:a.id,chapterTitle:a.title,writingGoal:(()=>{let b=`围绕”${a.title}”组织本项目资料事实,优先体现招标要求、清单工程内容、图纸施工对象和补疑修正口径。`,c=(0,e.u)(a.title);return c?`${b}本章专业写作重点:${c.goal}。`:b})(),mustUseMaterialKinds:g,evidenceQueries:Object.fromEntries(k.map(b=>[b,function(a,b){let c=i(a.sections||[],a=>j(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:sections`),d=i(a.requiredFacts,a=>j(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:facts`),e=c.selected.join(" "),f=d.selected.join(" "),g=`${a.title} ${e} ${f}`.trim();return[...new Set(({tender_document:[g,`${a.title} 招标范围 工期 质量 标准 评审 响应要求`,"项目概况 招标范围 投标文件 技术标 施工组织设计"],bill_of_quantities:[g,`${a.title} 工程量清单 分部分项 项目特征 数量 单位`,"清单 工程内容 主要分部分项 工程量 项目特征"],drawing:[g,`${a.title} 图纸 设计说明 构造做法 施工部位 节点`,"图纸 设计说明 平面 节点 构造 做法 专业接口"],addendum:[g,`${a.title} 补疑 澄清 答疑 变更 修正`,"补疑 澄清 答疑 招标文件 清单 图纸 修正"],contract:[g,`${a.title} 合同 条款 履约 责任 验收`],technical_specification:[g,`${a.title} 技术规范 施工要求 验收标准 控制要点`],schedule_document:[g,`${a.title} 工期 进度 节点 计划 里程碑`],quality_safety_document:[g,`${a.title} 质量 安全 文明 环保 验收 风险`],other:[g]})[b].filter(Boolean))]}(a,b)])),mustCover:[...new Set([a.purpose,...a.sections||[],...a.requiredFacts,...l,...m])].filter(Boolean),avoidWriting:["不得脱离项目资料泛泛套写通用内容","不得编造资料未确认的项目专属数字、日期、金额、工程量、材料规格;标准和法规只能作为待核候选,具体名称、完整编号、现行状态与适用对象须有可核依据","不得忽略补疑/澄清对原始资料的修正"]}}),l=function(a){let{profile:b}=a,c=k.map(a=>`${n(a)}:${b.groups[a].length?b.groups[a].map(a=>`${a.fileName}(${a.chunkCount||0})`).join("、"):"未识别"}`).join("\n"),d=a.chapterPlans.map((a,b)=>`${b+1}. ${a.chapterTitle}
|
|
60
60
|
- 写作目标:${a.writingGoal}
|
|
61
61
|
- 必用资料类型:${a.mustUseMaterialKinds.map(n).join("、")||"按现有资料综合使用"}
|
|
62
62
|
- 必须覆盖:${a.mustCover.join("、")||"按章节目标展开"}
|