@customize-agent/server 4.60.30 → 4.60.32
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 +285 -193
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +6 -0
- package/.next/server/chunks/1243.js +1 -1
- package/.next/server/chunks/6321.js +1 -1
- package/.next/server/chunks/6822.js +1 -1
- package/.next/server/chunks/{4722.js → 7848.js} +14 -14
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/9666.js +43 -42
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js +2 -1
- package/.next/server/pages/api/config/embedding.js +2 -1
- package/.next/server/pages/api/config/healthCheck.js +2 -1
- package/.next/server/pages/api/config/models.js +2 -1
- package/.next/server/pages/api/config/providers/[provider].js +2 -1
- package/.next/server/pages/api/config/providers.js +2 -1
- package/.next/server/pages/api/config/reset.js +3 -0
- package/.next/server/pages/api/config/reset.js.nft.json +1 -0
- package/.next/server/pages/api/config/web-access.js +2 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/generate/preview.js +1 -1
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/health.js +1 -1
- package/.next/server/pages/api/kb/features.js +2 -1
- package/.next/server/pages/api/prompt/chat.js +3 -2
- package/.next/server/pages/api/system/reset.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/jobs.html +1 -0
- package/.next/server/pages/jobs.js.nft.json +1 -0
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills/new.js.nft.json +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +39 -37
- package/.next/static/279fd5e41d98af82751903f8ea0267af84a75c794a35915a6e294777024190f8/_buildManifest.js +1 -0
- package/.next/static/chunks/1141-d420a7685bc3623c.js +1 -0
- package/.next/static/chunks/1210-703ad87eaeee1e4e.js +15 -0
- package/.next/static/chunks/1499-ff8f02f6bb6f3d45.js +10 -0
- package/.next/static/chunks/1702-f5e99af7aface475.js +1 -0
- package/.next/static/chunks/2864-b040f2bffa08c139.js +6 -0
- package/.next/static/chunks/3456-70bb03a39473f693.js +1 -0
- package/.next/static/chunks/3980-73841c40d55ddfa1.js +1 -0
- package/.next/static/chunks/4052-199e61ca9e6a33e7.js +1 -0
- package/.next/static/chunks/4337-a670a1a94ab505d9.js +1 -0
- package/.next/static/chunks/4530-e73bdd645bb7a953.js +1 -0
- package/.next/static/chunks/4565-3c5ff667062ccec9.js +21 -0
- package/.next/static/chunks/4665-1984a3d8b0573fa1.js +1 -0
- package/.next/static/chunks/5061-80765d4a612286e0.js +1 -0
- package/.next/static/chunks/5544-d77b8289662b4c28.js +4 -0
- package/.next/static/chunks/5760-f4191aac081b12d4.js +11 -0
- package/.next/static/chunks/6409-5a3bb0fbad4f64b1.js +14 -0
- package/.next/static/chunks/6506-ac0ba7338cc84b7d.js +1 -0
- package/.next/static/chunks/6748-07b0b05bf03c72f0.js +1 -0
- package/.next/static/chunks/7217-416b8488e0d2d498.js +1 -0
- package/.next/static/chunks/7576-ba6fc03060415b0e.js +1 -0
- package/.next/static/chunks/7646-159733564c7eb8dc.js +1 -0
- package/.next/static/chunks/7795-c11ff1a81c67c5aa.js +1 -0
- package/.next/static/chunks/8318-cb3a94de1617f983.js +1 -0
- package/.next/static/chunks/8338-b2ea00050048ba9f.js +4 -0
- package/.next/static/chunks/8399-a001bb2a0cb1640b.js +16 -0
- package/.next/static/chunks/8564-ac3e2f1bf87765b3.js +1 -0
- package/.next/static/chunks/8569-1d5c61a3f4fa0e26.js +16 -0
- package/.next/static/chunks/8715-ee013bd7f5ba38e8.js +1 -0
- package/.next/static/chunks/8750-a3c55a576effb3a6.js +1 -0
- package/.next/static/chunks/{787-207289f4bb577708.js → 8787-49b1f35eb4acfac9.js} +1 -1
- package/.next/static/chunks/{964-82cc4701f08f7351.js → 8964-e959915ecfae86b2.js} +1 -1
- package/.next/static/chunks/9551-f4b09bf2213ad571.js +16 -0
- package/.next/static/chunks/9605-3dee531f8a7ecbe0.js +4 -0
- package/.next/static/chunks/9937-e4b2deadd24e3962.js +1 -0
- package/.next/static/chunks/framework-9cde5013cd555765.js +1 -0
- package/.next/static/chunks/main-b313efde54fa6d2e.js +1 -0
- package/.next/static/chunks/pages/_app-646f249ed0cc363f.js +140 -0
- package/.next/static/chunks/pages/_error-c01b6fb772028676.js +1 -0
- package/.next/static/chunks/pages/canvas/[id]-18865f1b7e3a4696.js +1 -0
- package/.next/static/chunks/pages/canvas-47a86f1679c159af.js +1 -0
- package/.next/static/chunks/pages/documents-a1af5c6be26daed2.js +1 -0
- package/.next/static/chunks/pages/guide-fdf0822dc1d28813.js +1 -0
- package/.next/static/chunks/pages/index-c572e9caa60cb278.js +1 -0
- package/.next/static/chunks/pages/jobs-ebd1877dbf788a83.js +1 -0
- package/.next/static/chunks/pages/knowledge/file-detail-3d1ffd43f4f0e47b.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-b796702bb5f8ac50.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-6d7b21cdca1255f2.js +1 -0
- package/.next/static/chunks/pages/knowledge/{source-preview-814c683fc3723177.js → source-preview-24936b9a746ed07f.js} +1 -1
- package/.next/static/chunks/pages/knowledge-2a776c1740386874.js +1 -0
- package/.next/static/chunks/pages/models-e679c45d71631078.js +1 -0
- package/.next/static/chunks/pages/overview-7e8018014009682e.js +1 -0
- package/.next/static/chunks/pages/prompt-11f87694feb6514c.js +1 -0
- package/.next/static/chunks/pages/settings-e8dcaba1551a0b2b.js +1 -0
- package/.next/static/chunks/pages/skills/[id]/edit-99e616d5019e80b1.js +1 -0
- package/.next/static/chunks/pages/skills/[id]-71f696be252bbf0d.js +1 -0
- package/.next/static/chunks/pages/skills/new-00886ea4c676f927.js +1 -0
- package/.next/static/chunks/pages/skills-8ad2577b4aa17f3b.js +1 -0
- package/.next/static/chunks/pages/system/logs-0856f7c65432befb.js +1 -0
- package/.next/static/chunks/{webpack-6224d37324e372cb.js → webpack-2da1769ff35eb1ed.js} +1 -1
- package/.next/static/css/808682ca3875966b.css +1 -0
- package/messages/en-US.json +35 -1
- package/messages/zh-CN.json +35 -1
- package/package.json +3 -3
- package/scripts/brand-moon-fit.cjs +0 -47
- package/scripts/generate-brand-assets.cjs +0 -41
- package/scripts/half-built-scan.allow.json +16 -6
- package/scripts/half-built-scan.baseline.json +2 -17
- package/scripts/half-built-scan.mjs +1 -84
- package/.next/server/chunks/6021.js +0 -1
- package/.next/static/chunks/127-7d37d37dab02bd10.js +0 -1
- package/.next/static/chunks/162-36b2a3e6ee7d9717.js +0 -8
- package/.next/static/chunks/257-879f095890deadad.js +0 -1
- package/.next/static/chunks/313-4b3ff7075e0ff3c3.js +0 -1
- package/.next/static/chunks/318-ca122b774ea4ee84.js +0 -1
- package/.next/static/chunks/338-19ccbaec57a7bf9c.js +0 -4
- package/.next/static/chunks/499-2233cadc6d4da647.js +0 -10
- package/.next/static/chunks/530-98c3b3fbf3fcd8e3.js +0 -1
- package/.next/static/chunks/551-446a9d48add4944f.js +0 -16
- package/.next/static/chunks/569-2bfdde9e402af5b2.js +0 -16
- package/.next/static/chunks/576-6699fed6c88502fe.js +0 -1
- package/.next/static/chunks/579-fc0a2eb64aedb001.js +0 -1
- package/.next/static/chunks/665-0634aa49137defc4.js +0 -1
- package/.next/static/chunks/711-40c1a2dbd15c2807.js +0 -21
- package/.next/static/chunks/715-6285c5942e5ec5ea.js +0 -1
- package/.next/static/chunks/717-743b697a417dd5ee.js +0 -4
- package/.next/static/chunks/748-e13db510f76568b1.js +0 -1
- package/.next/static/chunks/795-3edd02531a6d39ae.js +0 -1
- package/.next/static/chunks/808-0506edc7454b5c0e.js +0 -1
- package/.next/static/chunks/864-b06700e1a4e573f2.js +0 -6
- package/.next/static/chunks/880-64d8a15c524106d2.js +0 -1
- package/.next/static/chunks/955-f0542d4dea118b62.js +0 -1
- package/.next/static/chunks/framework-4b565b3ddc94cdac.js +0 -1
- package/.next/static/chunks/main-0c91f573696223ca.js +0 -1
- package/.next/static/chunks/pages/_app-5f5b2094ef219088.js +0 -185
- package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +0 -1
- package/.next/static/chunks/pages/canvas/[id]-792d02e3874c19c0.js +0 -1
- package/.next/static/chunks/pages/canvas-e011bb88585d3441.js +0 -1
- package/.next/static/chunks/pages/documents-e6a80f2de39c6fd2.js +0 -1
- package/.next/static/chunks/pages/guide-3185f12fbcb5a6af.js +0 -1
- package/.next/static/chunks/pages/index-cb27bfa36c212ab5.js +0 -1
- package/.next/static/chunks/pages/knowledge/file-detail-c34e1f995fb8316f.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +0 -1
- package/.next/static/chunks/pages/knowledge-3afd4bc337d44550.js +0 -1
- package/.next/static/chunks/pages/models-e07b2e29595effd7.js +0 -1
- package/.next/static/chunks/pages/overview-8713b5d37af0eeb3.js +0 -1
- package/.next/static/chunks/pages/prompt-47a1ac955831dedb.js +0 -1
- package/.next/static/chunks/pages/settings-8879d8c90bee2025.js +0 -1
- package/.next/static/chunks/pages/skills/[id]/edit-88e2490a4190467b.js +0 -1
- package/.next/static/chunks/pages/skills/[id]-4700cd743c5efe05.js +0 -1
- package/.next/static/chunks/pages/skills/new-b2204742b055565a.js +0 -1
- package/.next/static/chunks/pages/skills-1f6bcb42cd90abeb.js +0 -1
- package/.next/static/chunks/pages/system/logs-8c5dd4d06fa9d8c9.js +0 -1
- package/.next/static/css/cb79b8022e718258.css +0 -1
- package/.next/static/e20217fc48f7d7bdc8b62a7ec3647e78e1695668d237c7e44f973da8621a5ece/_buildManifest.js +0 -1
- package/scripts/capture-baseline.mjs +0 -353
- /package/.next/static/{e20217fc48f7d7bdc8b62a7ec3647e78e1695668d237c7e44f973da8621a5ece → 279fd5e41d98af82751903f8ea0267af84a75c794a35915a6e294777024190f8}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=8644,a.ids=[8644],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},17532:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.mjs")},19898:a=>{a.exports=require("@customize-agent/knowledge")},26735:(a,b,c)=>{c.r(b),c.d(b,{config:()=>a6,default:()=>a5,handler:()=>a8});var d={};c.r(d),c.d(d,{EXPORT_RECEIPT_HEADERS:()=>Z,__documentExportTest__:()=>a1,config:()=>Y,default:()=>a2});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c.n(i),k=c(76760),l=c.n(k),m=c(77598);let n="Noto Sans CJK SC";function o(){let a=[l().resolve(process.cwd(),"public/fonts"),l().resolve(process.cwd(),"apps/server/public/fonts")].map(a=>l().join(a,"NotoSansCJKsc-Regular.otf")).find(a=>j().existsSync(a));if(!a)throw Error("随服务发布的中文字体资源缺失,不能把缺字产物当作完整导出");return a}async function p(a,b){let c=Object.keys(a.files).filter(a=>/^word\/(?:document|styles|footer\d*|header\d*)\.xml$/u.test(a)),d=new Set,e=!1;for(let f of c){let c=a.file(f);if(!c)continue;let g=await c.async("string"),h=g.replace(/<w:rFonts\b[^>]*\/?>(?:<\/w:rFonts>)?/gu,a=>{let c=/w:eastAsia="([^"]+)"/u.exec(a)?.[1];return c===n?(e=!0,a):b?(e=!0,c&&d.add(c),a.replace(/\s+w:eastAsia(?:Theme)?="[^"]*"/gu,"").replace(/\/?>(?:<\/w:rFonts>)?$/u,` w:eastAsia="${n}"/>`)):a});h!==g&&a.file(f,h)}if(!e)return{embedded:!1,changedFamilies:[]};let f=o(),g=j().readFileSync(f),h=JSON.parse(j().readFileSync(l().join(l().dirname(f),"font-manifest.json"),"utf8")),i=(0,m.createHash)("sha256").update(g).digest("hex");if(i!==h.sha256||0!==h.embeddingFsType)throw Error("中文字体资源与可嵌入的发布清单不一致");let k=(0,m.randomUUID)(),p=Buffer.from(k.replace(/-/gu,""),"hex").reverse(),q=Buffer.from(g);for(let a=0;a<32;a++)q[a]^=p[a%16];a.file("word/fonts/NotoSansCJKsc-Regular.odttf",q);let r="http://schemas.openxmlformats.org/officeDocument/2006/relationships",s=await a.file("word/fontTable.xml")?.async("string")??'<w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>';s.includes("xmlns:r=")||(s=s.replace("<w:fonts",`<w:fonts xmlns:r="${r}"`));let t=`<w:font w:name="${n}"><w:family w:val="swiss"/><w:embedRegular r:id="portableCjkFont" w:fontKey="{${k.toUpperCase()}}"/></w:font>`;s=s.replace(RegExp(`<w:font w:name="${n}"[\\s\\S]*?</w:font>`,"gu"),""),s=/<\/w:fonts>/u.test(s)?s.replace("</w:fonts>",`${t}</w:fonts>`):s.replace("/>",`>${t}</w:fonts>`),a.file("word/fontTable.xml",s);let u="word/_rels/fontTable.xml.rels",v=await a.file(u)?.async("string")??'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';v=v.replace(/<Relationship\b[^>]*Id="portableCjkFont"[^>]*\/>/gu,""),a.file(u,v.replace("</Relationships>",`<Relationship Id="portableCjkFont" Type="${r}/font" Target="fonts/NotoSansCJKsc-Regular.odttf"/></Relationships>`));let w=await a.file("[Content_Types].xml").async("string");w.includes('Extension="odttf"')||(w=w.replace("</Types>",'<Default Extension="odttf" ContentType="application/vnd.openxmlformats-officedocument.obfuscatedFont"/></Types>')),a.file("[Content_Types].xml",w);let x=await a.file("word/settings.xml")?.async("string");return x&&!x.includes("embedTrueTypeFonts")&&a.file("word/settings.xml",x.replace("</w:settings>","<w:embedTrueTypeFonts/></w:settings>")),{embedded:!0,changedFamilies:[...d],sha256:i}}var q=c(96241),r=c(12866),s=c(7942),t=c(57349),u=c(85497),v=c(51342),w=c(12152),x=c(72275),y=c(13571),z=c(48161),A=c.n(z),B=c(88194),C=c.n(B),D=c(70949),E=c(31421);let F=require("node:url"),G=(0,c(57975).promisify)(E.execFile);async function H(a,b=!1,d=!1){let e;if(a.length)try{let[f,g]=await Promise.all([Promise.resolve().then(c.bind(c,17532)),Promise.resolve().then(c.bind(c,97864))]);globalThis.pdfjsWorker??=g,e=f.getDocument({data:Uint8Array.from(a),useWorkerFetch:!1,useSystemFonts:!1});let h=await e.promise;if(!Number.isInteger(h.numPages)||h.numPages<=0)return;let i=[];if(b)for(let a=1;a<=h.numPages;a+=1){let b=await (await h.getPage(a)).getTextContent();i.push(b.items.map(a=>"str"in a?a.str:"").join(""))}let j=new Map,k=async a=>{for(let b of a){let a="string"==typeof b.dest?await h.getDestination(b.dest):b.dest;if(a?.[0]){let c="number"==typeof a[0]?a[0]+1:await h.getPageIndex(a[0])+1;j.set(b.title,[...j.get(b.title)??[],c])}b.items?.length&&await k(b.items)}};return d&&await k(await h.getOutline()??[]),{pages:h.numPages,text:i.join(""),...d?{headingPages:Object.fromEntries([...j].filter(([,a])=>1===a.length).map(([a,b])=>[a,b[0]]))}:{}}}catch{return}finally{await e?.destroy()}}async function I(a){return(await H(a))?.pages}async function J(a){return(await H(a,!1,!0))?.headingPages}async function K(a,b={}){let c,d,e;if(!a||0===a.length)return{unavailableReason:"docx 为空"};try{let b=await C().loadAsync(a),d=await b.file("word/document.xml")?.async("string");if(!d)throw Error("正文缺席");c=[...d.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>a[1]).join("")}catch{return{unavailableReason:"DOCX正文无法解析,不能验证真实渲染页数"}}let f=async a=>{let b=await H(a,!0,!0);if(!b)return;let e=function(a,b){let c=new Map,d=new Map;for(let b of a.match(/\p{Script=Han}/gu)??[])c.set(b,(c.get(b)??0)+1);let e=[...c.values()].reduce((a,b)=>a+b,0);if(e<20)return null;for(let a of b.match(/\p{Script=Han}/gu)??[])d.set(a,(d.get(a)??0)+1);return[...c].reduce((a,[b,c])=>a+Math.min(c,d.get(b)??0),0)/e}(c,b.text);if(null!==e&&e<.98)throw Error(`中文文字渲染未保留(覆盖率${(100*e).toFixed(1)}%),请核查渲染器中文字体;不能将缺字版式计为合格页数`);return d=b.headingPages,b.pages},g=j().mkdtempSync(l().join(A().tmpdir(),"real-pages-")),h={...process.env};if("darwin"===process.platform&&!h.FONTCONFIG_FILE){let a=["/System/Library/Fonts","/System/Library/Fonts/Supplemental","/Library/Fonts"].filter(a=>j().existsSync(a));if(a.length){let b=l().join(g,"fonts.conf"),c=a=>a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">");j().writeFileSync(b,`<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig>${a.map(a=>`<dir>${c(a)}</dir>`).join("")}<cachedir>${c(l().join(g,"font-cache"))}</cachedir><alias><family>SimSun</family><prefer><family>Songti SC</family></prefer></alias><alias><family>宋体</family><prefer><family>Songti SC</family></prefer></alias></fontconfig>`),h.FONTCONFIG_FILE=b}}let i=l().join(g,"document.docx");j().writeFileSync(i,a);try{for(let a of function(){let a=[],b=process.env.CUSTOMIZE_DOCX_RENDERER;if(b){let c=j().existsSync(b.trim())?[b.trim()]:b.trim().split(/\s+/u);a.push({name:`env:${c[0]}`,command:c[0],args:c.slice(1)})}for(let b of["soffice","libreoffice"])a.push({name:b,command:b,args:[]});return a}()){let c,k=l().join(g,`out-${a.name.replace(/[^\w.-]/gu,"_")}`);j().mkdirSync(k,{recursive:!0});let m=a=>a.replace(/\{in\}/gu,i).replace(/\{out\}/gu,k).replace(/\{outfile\}/gu,l().join(k,"document.pdf")),n=a.args.length>0?a.args.map(m):[`-env:UserInstallation=${(0,F.pathToFileURL)(l().join(k,"profile")).href}`,"--headless","--convert-to","pdf","--outdir",k,i];try{await G(a.command,n,{timeout:b.timeoutMs??12e4,env:h})}catch(c){let b=c.code;if("ENOENT"===b)continue;e=`${a.name}:${c instanceof Error?c.message.split("\n")[0]:String(c)}`;continue}let o=l().join(k,"document.pdf");if(!j().existsSync(o)){let b,c=j().readdirSync(k).filter(a=>a.toLowerCase().endsWith(".pdf"));if(0===c.length){e=`${a.name}没有产生PDF`;continue}try{b=1===c.length?await f(j().readFileSync(l().join(k,c[0]))):void 0}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==b)return{pages:b,renderer:a.name,headingPages:d};e=c.length>1?`${a.name}产生多个PDF,无法确认对应文档`:`${a.name}的PDF页树解析失败`;continue}try{c=await f(j().readFileSync(o))}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==c)return{pages:c,renderer:a.name,headingPages:d};e=`${a.name}的PDF页树解析失败`}return{unavailableReason:e?`渲染器失败(${e})`:"未配置外部渲染器(CUSTOMIZE_DOCX_RENDERER 或 PATH 中的 soffice/libreoffice)——真页数待真渲染"}}finally{j().rmSync(g,{recursive:!0,force:!0})}}var L=c(44533),M=c(22157),N=c(52639),O=c(30055),P=c(35091);let Q=a=>(0,m.createHash)("sha256").update(a).digest("hex"),R=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function S(a,b,c){if(!b)return{};let d=(0,s.HM)(a,c,b);if(!j().existsSync(d))return{};try{let a=j().readFileSync(d);return{data:R(JSON.parse(a.toString("utf8"))),sha256:Q(a)}}catch{return{}}}function T(a){return Array.isArray(a)?a.flatMap(a=>{let b=R(a);return"string"==typeof b?.id&&"string"==typeof b.title?[{id:b.id,title:b.title}]:[]}):[]}var U=c(64406),V=c(191),W=c(16006),X=c(89900);let Y={api:{bodyParser:{sizeLimit:"50mb"},responseLimit:!1}},Z={notDeliverable:"X-Export-Not-Deliverable",exportPurpose:"X-Export-Purpose",bodySha256:"X-Export-Body-Sha256",issuesReport:"X-Export-Issues-Report",gatePassed:"X-Export-Gate-Passed",gateBinding:"X-Export-Gate-Binding",gateIssues:"X-Export-Gate-Issues",gateIssueCount:"X-Export-Gate-Issue-Count",contentIssues:"X-Export-Content-Issues",renderAudit:"X-Export-Render-Audit",figureInline:"X-Export-Figure-Inline",templateWarning:"X-Export-Template-Warning",pageLimit:"X-Export-Page-Limit",pdfPageCount:"X-PDF-Page-Count"};function $(){return{mode:"enforce",blockers:[],notices:[],ops:{headerlessTableRendered:0,captionStyled:0}}}function _(a){return{mode:a.mode,blockerCount:a.blockers.length,blockerCodes:[...new Set(a.blockers.map(a=>a.line>0?`${a.code}@L${a.line}`:a.code))].slice(0,20),notices:a.notices.map(a=>a.message).slice(0,10),ops:{...a.ops},opsTotal:Object.values(a.ops).reduce((a,b)=>a+b,0)}}function aa(a){return a.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document"}function ab(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let ac={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function ad(a){return ac[k.extname(a).toLowerCase()]||""}function ae(a,b){let c=k.relative(b,a);return!!c&&!c.startsWith("..")&&!k.isAbsolute(c)}function af(a,b=(0,L.aY)()){if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let c=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?.*)?$/u.exec(a)?.[1];if(c){let a=k.resolve((0,D.Gl)(b),"assets","figures"),d=k.resolve(a,c);return ae(d,a)&&i.existsSync(d)&&i.statSync(d).isFile()?d:null}let d=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!d||k.isAbsolute(d))return null;let e=k.resolve((0,L.NW)(b)),f=k.resolve((0,D.Gl)(b),"assets");return[d.startsWith("generatedDocuments/assets/")?k.resolve(f,d.replace(/^generatedDocuments\/assets\//u,"")):"",k.resolve(e,d)].filter(Boolean).find(a=>{let b=k.resolve(a);return(ae(b,e)||ae(b,f))&&!!ad(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function ag(a){let b=new Map,c=0,d=Math.round(8),e=Math.round(32);return f=>{let g=af(f,a);if(!g)return null;let h=i.statSync(g);if(h.size>8388608)return{reason:`超过单图内联上限 ${d}MB`};if(c+h.size>0x2000000)return{reason:`全篇内联总量超过 ${e}MB 上限`};let j=b.get(g);return j||(j=`data:${ad(g)};base64,${i.readFileSync(g).toString("base64")}`,b.set(g,j),c+=h.size),{dataUrl:j}}}function ah(a,b=(0,L.aY)(),c){let d=ag(b);return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,b,e,f)=>{let g=d(e);return g?"reason"in g?(c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:${g.reason},产物中为断图)`}),a):`<img${b}src="${g.dataUrl}"${f}>`:(/^\//u.test(e.trim())&&c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:未在知识库/生成资产根内找到,产物中为断图)`}),a)})}let ai=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?[^#]*)?$/u;function aj(a){let b=/^data:(image\/(?:png|jpeg|gif|webp|svg\+xml));base64,([A-Za-z0-9+/]+={0,2})$/u.exec(a);if(!b||b[2].length>4*Math.ceil(8388608/3))return null;let c=Buffer.from(b[2],"base64");return!c.length||c.length>8388608||c.toString("base64")!==b[2]||"image/svg+xml"===b[1]&&/<script\b|<foreignObject\b|\son\w+\s*=|(?:href|xlink:href)\s*=\s*["'](?!#)|url\(\s*(?!#)|<!ENTITY/iu.test(c.toString("utf8"))?null:{buffer:c,contentType:b[1]}}let ak=/^[a-z][a-z0-9+.-]*:\/\/[^/]+(\/api\/documents\/generated\/[^/]+\/figure\/[A-Za-z0-9._-]+\.svg(?:\?[^#]*)?)$/iu,al=/!\[([^\]]*)\]\(\s*(?:<([^>\s]+)>|([^()\s]+))(\s+(?:"[^"]*"|'[^']*'))?\s*\)/gu,am=/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu;function an(a,b=(0,L.aY)(),c){let d=ag(b),e={inlined:0,failed:[]},f=new Set,g=function(a){let b,c=[],d=0,e="";for(let f of a.split("\n")){let a=/^\s{0,3}(`{3,}|~{3,})/u.exec(f);a&&(void 0===b?(b=d,e=a[1][0]):a[1][0]===e&&(c.push({start:b,end:d+f.length}),b=void 0)),d+=f.length+1}return void 0!==b&&c.push({start:b,end:a.length}),c}(a),h=a=>g.some(b=>a>=b.start&&a<b.end),i=(a,b,c)=>{f.has(b)||(f.add(b),e.failed.push({name:a,src:b,reason:c}))},j=(a,b)=>a.trim()||ai.exec(b.trim())?.[1]||ak.exec(b.trim())?.[1]?.split("/").pop()||b.trim().split("/").pop()||b.trim(),k=a=>{let b=a.trim();if(!b||/^data:/iu.test(b))return{action:"keep"};let c=ak.exec(b)?.[1]??b;if(c===b&&/^[a-z][a-z0-9+.-]*:/iu.test(b))return/^https?:/iu.test(b)?{action:"keep-report",reason:"外部图源(导出链不联网,无法内联)"}:{action:"keep"};let e=d(c);if(!e){let a=ai.exec(c)?.[1],b=a?`图件文件不在生成资产根内(${a})`:"未在知识库/生成资产根内找到该图";return c.startsWith("/")?{action:"mark",reason:b}:{action:"keep-report",reason:b}}return"reason"in e?{action:"mark",reason:e.reason}:{action:"inline",dataUrl:e.dataUrl}},l=a.replace(al,(a,b,c,d,f,g,l)=>{if(h(g))return a;let m=(c??d??"").trim(),n=k(m);if("keep"===n.action)return a;let o=j(b,m);if("inline"===n.action)return e.inlined+=1,``;if(i(o,m,n.reason),"keep-report"===n.action)return a;let p=`图件未内联:${o}(原因:${n.reason})——请从成稿预览或 HTML/DOCX 交付件取图`;return 0===g||"\n"===l[g-1]?`> ${p}`:`【${p}】`});for(let a of(l=l.replace(am,(a,b,c,d,f)=>{if(h(f))return a;let g=k(c);return"keep"===g.action?a:"inline"===g.action?(e.inlined+=1,`<img${b}src="${g.dataUrl}"${d}>`):(i(j("",c),c,g.reason),"keep-report"===g.action)?a:`【图件未内联:${j("",c)}(原因:${g.reason})】`}),e.inlined>0&&c?.notices.push({code:"figure-inline",message:`MD 图件内联:${e.inlined} 张已内联为 data: URI(与 HTML/PDF 同源解析;MD 交付件不再依赖 /api/... 图件 URL)`}),e.failed.slice(0,10)))c?.notices.push({code:"figure-inline",message:`MD 图件未内联:${a.name}(原因:${a.reason})`});return{markdown:l,report:e}}function ao(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function ap(a){let b=a.trim();return!(!b||/^#{1,6}\s+/u.test(b)||ao(b))&&(b.match(/(?<!\\)\|/gu)||[]).length>=1}function aq(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split(/(?<!\\)\|/u).map(a=>a.replace(/\\\|/gu,"|").trim())}function ar(a){return a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/(\*\*|__)([\s\S]*?)\1/gu,"$2").replace(/(?<![\w\d])([*_])(?=\S)(.+?)\1(?![\w\d])/gu,"$2").replace(/`([^`]+)`/gu,"$1").replace(/~~(.+?)~~/gu,"$1").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function as(a){return a.split(",")[0].replace(/["'“”]/gu,"").trim()}function at(a){let b=as(a);return({宋体:"SimSun",仿宋:"FangSong",仿宋_GB2312:"FangSong_GB2312",黑体:"SimHei",楷体:"KaiTi",楷体_GB2312:"KaiTi_GB2312",微软雅黑:"Microsoft YaHei"})[b]||b}function au(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function av(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function aw(a){let b=a?.page??{},c=(b.paper??"A4").trim(),d=/\blandscape\b/iu.test(c),e=c.replace(/\s+(?:landscape|portrait)\s*$/iu,"").toUpperCase(),f={A3:[16838,23811],A4:[11906,16838],A5:[8391,11906],B5:[9978,14173],LETTER:[12240,15840],LEGAL:[12240,20160],TABLOID:[15840,24480]},g=/^(\d+(?:\.\d+)?(?:mm|cm|in|pt))\s+(\d+(?:\.\d+)?(?:mm|cm|in|pt))$/iu.exec(c);if(!g&&!f[e])throw Error(`DOCX尚未支持指定纸张:${c};不能静默换成A4`);let[h,i]=g?[av(g[1],21),av(g[2],29.7)]:f[e]??f.A4;d&&([h,i]=[i,h]);let j=h-av(b.marginLeft,2)-av(b.marginRight,2)-av(b.gutter,0),k=i-av(b.marginTop,2.5)-av(b.marginBottom,2.5)-560;if(j<=0||k<=0)throw Error("纸张和页边距没有可用正文区域");return{width:h,height:i,landscape:d,bodyWidth:j,maxImageWidthPx:Math.min(620,j/15),maxImageHeightPx:k/15}}function ax(a){let b=function(a){let b=a?.page||{},c=a?.typography||{},d=aM(b.paper,"A4"),e=aM(b.marginTop,"24mm"),f=aM(b.marginRight,"18mm"),g=aM(b.marginBottom,"22mm"),h=aM(b.marginLeft,"18mm"),i=c.fontFamily||"SimSun, 宋体, serif",j=c.bodyFont||c.fontFamily||"SimSun, 宋体, serif",k=c.headingFont||c.fontFamily||"SimSun, 宋体, serif",l=c.lineHeight||"18pt";return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,bodyFontFamily:j,headingFontFamily:k,lineHeight:l,titleSize:c.titleSize||"22pt",bodySize:c.bodySize||"12pt"}}(a),c=a?.typography||{},d=c.bodySize?au(c.bodySize,12):12,e=c.titleSize?au(c.titleSize,22):22,f=c.headingSize?au(c.headingSize,15):15,g=c.headingSize?au(c.headingSize,14):14,h=c.lineHeight?au(c.lineHeight,18):18,i=c.headingFont?c.headingFont:c.fontFamily?c.fontFamily:"黑体",j=c.bodyFont||c.fontFamily||"宋体";return{...b,bodyPt:d,h1Pt:e,h2Pt:f,h3Pt:g,linePt:h,bodyHalfPoints:Math.round(2*d),h1HalfPoints:Math.round(2*e),h2HalfPoints:Math.round(2*f),h3HalfPoints:Math.round(2*g),lineTwips:Math.round(20*h),fontHeading:as(i),fontHeadingAscii:at(i),fontBody:as(j),fontBodyAscii:at(j),bodyCss:`${d}pt`,h1Css:`${e}pt`,h2Css:`${f}pt`,h3Css:`${g}pt`,lineCss:`${h}pt`}}function ay(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${ab(d)}" w:hAnsi="${ab(d)}" w:eastAsia="${ab(c)}" w:cs="${ab(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${ab(a)}</w:t></w:r>`}function az(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:"",b.hanging?`w:hanging="${b.hanging}"`:""].filter(Boolean).join(" "),d=[b.styleId?`<w:pStyle w:val="${ab(b.styleId)}"/>`:"",b.keepNext?"<w:keepNext/>":"",!1===b.wordWrap?'<w:wordWrap w:val="0"/>':"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`,c?`<w:ind ${c}/>`:"",b.align?`<w:jc w:val="${b.align}"/>`:"","number"==typeof b.outlineLevel?`<w:outlineLvl w:val="${b.outlineLevel}"/>`:""].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${ay(a,b)}</w:p>`}function aA(a,b){if("image/png"===b&&a.length>=24&&"PNG"===a.toString("ascii",1,4))return{width:a.readUInt32BE(16),height:a.readUInt32BE(20)};if("image/jpeg"===b){let b=2;for(;b+9<a.length&&255===a[b];){let c=a[b+1],d=a.readUInt16BE(b+2);if(c>=192&&c<=195)return{height:a.readUInt16BE(b+5),width:a.readUInt16BE(b+7)};b+=2+d}}return{width:640,height:360}}async function aB(a,b,d){let e,f,g,h=new Map,j=new Map;for(let c of a.matchAll(/!\[[^\]]*\]\(([^)\s]+)[^)]*\)/gu)){let a=af(c[1].trim(),b);a&&".svg"===k.extname(a).toLowerCase()&&j.set(a,i.readFileSync(a));let d=aj(c[1].trim());d?.contentType==="image/svg+xml"&&j.set(c[1].trim(),d.buffer)}if(0===j.size)return h;try{let a=await Promise.resolve().then(c.t.bind(c,28183,23)),b=[process.env.CUSTOMIZE_CJK_FONT,o(),"/System/Library/Fonts/STHeiti Light.ttc","/System/Library/Fonts/Supplemental/Songti.ttc","/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc","/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf","C:\\Windows\\Fonts\\msyh.ttc"].filter(a=>!!a);if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let c of b)if(i.existsSync(c)&&a.GlobalFonts.registerFromPath(c,"Noto Sans CJK SC"))break}if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let b of["Microsoft YaHei","PingFang SC","Songti SC","Noto Sans CJK JP","Droid Sans Fallback"])if(a.GlobalFonts.has(b)&&a.GlobalFonts.setAlias(b,"Noto Sans CJK SC"))break}g=a.GlobalFonts.has("Noto Sans CJK SC"),e=a.loadImage,f=a.createCanvas}catch(a){return d?.notices.push({code:"docx-stage",message:`SVG 图件光栅化不可用(${a instanceof Error?a.message:String(a)}):${j.size} 张图件在 DOCX 中将缺失`}),h}for(let[a,b]of j)try{if(/\p{Script=Han}/u.test(b.toString("utf8"))&&!g)throw Error("图件包含中文但光栅化器没有可用中文字体;请配置CUSTOMIZE_CJK_FONT,不能把方框字图件当完整交付物");let c=await e(b),d=Math.max(1,Math.round(c.width)),i=Math.max(1,Math.round(c.height)),j=f(2*d,2*i),k=j.getContext("2d");k.scale(2,2),k.drawImage(c,0,0),h.set(a,j.toBuffer("image/png"))}catch(b){d?.notices.push({code:"docx-stage",message:`图件光栅化失败已跳过:${k.basename(a)}(${b instanceof Error?b.message:String(b)})`})}return h.size>0&&d?.notices.push({code:"docx-stage",message:`图件光栅化:${h.size}/${j.size} 张 SVG 已转 2\xd7 PNG 内联进 DOCX(DOCX 不支持内联 SVG)`}),h}function aC(a,b,c,d,e=!1){let f=Math.max(1,...a.map(a=>a.length)),g=a=>[...a].reduce((a,b)=>a+(b.codePointAt(0)>127?2:1),0),h=Array.from({length:f},(b,c)=>{let d=a.map(a=>g(a[c]??"")).sort((a,b)=>a-b);return Math.max(5,Math.min(40,d[Math.ceil((d.length-1)*.85)]??5))}),i=Array.from({length:f},(d,e)=>240+Math.max(2,Math.max(0,...a.slice(+!!c).flatMap(a=>[...(a[e]??"").matchAll(/[+−-]?\d[\d.,~~×*()()%‰µ\p{Script=Latin}\p{Script=Greek}℃°²³/\-+]*/gu)].map(a=>a[0])).filter(a=>a.length<=24).map(g)))*b.bodyHalfPoints*5),j=i.reduce((a,b)=>a+b,0),k=Math.max(0,d-j),l=h.reduce((a,b)=>a+b,0),m=h.map((a,b)=>Math.floor(j>d?d*i[b]/j:i[b]+k*a/l));m[f-1]+=d-m.reduce((a,b)=>a+b,0);let n=`<w:tblGrid>${m.map(a=>`<w:gridCol w:w="${a}"/>`).join("")}</w:tblGrid>`;return`<w:tbl><w:tblPr><w:tblW w:w="${d}" w:type="dxa"/><w:tblLook w:firstRow="${+!!c}" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:left w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:bottom w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:right w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:insideH w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/><w:insideV w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/></w:tblBorders></w:tblPr>${n}${a.map((d,f)=>`<w:tr><w:trPr><w:cantSplit/>${c&&0===f?"<w:tblHeader/>":""}</w:trPr>${m.map((g,h)=>{let i=d[h]||"",j=c&&0===f;return`<w:tc><w:tcPr><w:tcW w:w="${g}" w:type="dxa"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="120" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="120" w:type="dxa"/></w:tcMar>${!j&&/^[+−-]?\d[\d.,~~×*()()%‰μµmMkKgGtTsSVWA℃°²³\s/\-+]*$/u.test(i)&&i.length<=24?"<w:noWrap/>":""}${j&&!e?'<w:shd w:val="clear" w:fill="F3F4F6"/>':""}</w:tcPr>${az(i,{bold:j,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:0,wordWrap:!1,keepNext:j||f===a.length-2,align:j?"center":"left"})}</w:tc>`}).join("")}</w:tr>`).join("")}</w:tbl>`}function aD(a){return!!ar(a)&&!/^#{1,6}\s/u.test(a)&&!ap(a)}let aE="请在 Word 中右键更新目录";function aF(a){return`<w:p><w:pPr><w:spacing w:line="${a.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve">TOC \\o "1-2" \\h \\z \\u</w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r></w:p>`}function aG(a,b){return az(a,{bold:!0,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontHeading,fontAscii:b.fontHeadingAscii,align:"center",firstLine:0,spacingBefore:120,spacingAfter:60,keepNext:!0})}function aH(a,b,c,d){let e=ax(b),f=e.h1HalfPoints,g=e.bodyHalfPoints,h=a.replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),j=[],l=!1,m=!1,n=new Map,o=new Set;aQ(a).forEach((a,b)=>{a.level>3||(o.has(a.title)?n.delete(a.title):(o.add(a.title),n.set(a.title,`_doc_heading_${b+1}`)))});let p=-1,q=()=>{if(p<0)return;let a=j.splice(p);if(p=-1,0===a.length)return void j.push(aF(e).replace("</w:p>",`<w:r><w:t>${aE}</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>`));j.push(aF(e)),a.forEach((b,c)=>j.push(c===a.length-1?b.replace(/<\/w:p>$/u,'<w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>'):b))};for(let a=0;a<h.length;){let o=h[a].trim();if(!o){a+=1;continue}if(l&&("[[PAGE_BREAK]]"===o||/^#{1,4}\s+/u.test(o))&&(q(),l=!1,"[[PAGE_BREAK]]"!==o&&j.push(az("",{pageBreak:!0}))),/<div\s+class=["']document-cover["']\s*>/iu.test(o)){m=!0,a+=1;continue}if(m&&/^<\/div>$/iu.test(o)){m=!1,a+=1;continue}if("[[PAGE_BREAK]]"===o){l=!1,m=!1,q(),j.push(az("",{pageBreak:!0})),a+=1;continue}if(m){let b=ar(o.replace(/^#\s+/u,""));b&&j.push(az(b,{bold:!0,size:Math.max(f+8,44),line:Math.round(1.15*e.lineTwips),fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let r=c?function(a,b){let c=/!\[([^\]]*)\]\(([^)]+)\)/u.exec(a);if(!c)return null;let d=c[2].trim(),e=ai.exec(d)?.[1],f=af(d,b.projectRoot),g=aj(d);if(!f&&!g)return(e||d.startsWith("data:"))&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e??c[1]}(原因:图件不在生成资产根内,或内联格式/体积不合规)`}),null;let h=g?.buffer??i.readFileSync(f),j=g?.contentType??ad(f);if("image/svg+xml"===j){let a=b.rasterizedSvg?.get(f??d);if(!a)return b.audit?.notices.push({code:"figure-inline",message:`DOCX图件未进包:${e??c[1]}(SVG未完成光栅化)`}),null;h=a,j="image/png"}if(!j||h.length>8388608)return e&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e}(原因:超过单图体积上限 ${Math.round(8)}MB)`}),null;let l=b.images.length+1,m="image/png"===j?".png":g?`.${"jpeg"===j.split("/")[1]?"jpg":j.split("/")[1]}`:k.extname(f).toLowerCase()||".png",n=aA(h,j),o=b.pageBox?.maxImageWidthPx??620,p=b.pageBox?.maxImageHeightPx??aw().maxImageHeightPx,q=Math.min(1,o/Math.max(n.width,1),p/Math.max(n.height,1)),r=g?.contentType==="image/svg+xml"?g.buffer:f&&".svg"===k.extname(f).toLowerCase()?i.readFileSync(f):void 0;if(r?.includes(Buffer.from("data-source-node="))){let a=r.toString("utf8"),d=aA(r,"image/svg+xml"),e=[...a.matchAll(/font-size=["'](\d+(?:\.\d+)?)["']/gu)].map(a=>Number(a[1])),f=Math.min(...e)*n.width/Math.max(1,d.width)*q*.75;if(e.length&&f<7.95){let a=`图件${c[1]||l}完整缩放后最小标签约${f.toFixed(1)}pt,须在作者模型拆分或重新排版,不能缩成不可读的正式图件`;(b.imageLayoutIssues??=[]).push(a),b.audit?.notices.push({code:"docx-stage",message:a})}}let s={relationshipId:`rImage${l}`,fileName:`image${l}${m}`,buffer:h,contentType:j,widthEmu:Math.round(n.width*q*9525),heightEmu:Math.round(n.height*q*9525),altText:c[1]||`image${l}`};return b.images.push(s),s}(o,c):null;if(r){j.push(`<w:p><w:pPr><w:jc w:val="center"/><w:spacing w:after="120" w:line="240" w:lineRule="auto"/></w:pPr><w:r><w:drawing><wp:inline xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><wp:extent cx="${r.widthEmu}" cy="${r.heightEmu}"/><wp:docPr id="${r.relationshipId.replace(/\D/gu,"")||"1"}" name="${ab(r.altText||r.fileName)}"/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="${ab(r.fileName)}"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="${r.relationshipId}" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${r.widthEmu}" cy="${r.heightEmu}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p>`),a+=1;continue}let s=/^(`{3,}|~{3,})([^`~]*)$/u.exec(o);if(s){let b=RegExp(`^${s[1][0]}{${s[1].length},}\\s*$`,"u"),c=[h[a++]];for(;a<h.length;){let d=h[a++];if(c.push(d),b.test(d.trim()))break}for(let a of c)j.push(az(a,{size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,spacingAfter:0}));/^mermaid\b/u.test(s[2].trim())&&d?.notices.push({code:"docx-stage",message:"该图源尚未匹配到本轮结构化图件,按原字代码保留供审阅,不当作已渲染施工图。"});continue}let t=function(a,b){let c=a[b+1]?.trim()===""?b+2:b+1;if(c>=a.length||!ap(a[b]||"")||!ao(a[c]||""))return null;let d=aq(a[b]||"").map(a=>ar(a)),e=aq(a[c]||"").length,f=[],g=c+1;for(;g<a.length&&ap(a[g]||"");){var h;if(h=g,ao(((a[h+1]?.trim()===""?a[h+2]:a[h+1])||"").trim()))break;f.push(aq(a[g]||"").map(a=>ar(a))),g+=1}let i=Math.max(2,d.length,e,...f.map(a=>a.length)),j=a=>{let b=a.slice(0,i);for(a.length>i&&i>0&&(b[i-1]=[b[i-1],...a.slice(i)].filter(Boolean).join(" | "));b.length<i;)b.push("");return b};return{rows:[j(d),...f.map(j)],next:g,headerRow:!0}}(h,a);if(t){j.push(aC(t.rows,e,t.headerRow,c?.pageBox?.bodyWidth??aw(b).bodyWidth,c?.monoColor),az("",{spacingAfter:80,line:e.lineTwips})),a=t.next;continue}let u=!l&&ap(o)?function(a,b){let c=[],d=b;for(;d<a.length&&ap(a[d]||"");)c.push(a[d]||""),d+=1;let e=Math.max(...c.map(a=>aq(a).length),0);return c.length<2||e<2?null:{rows:c,columns:e,next:d}}(h,a):null;if(u){j.push(aC(u.rows.map(a=>aq(a).map(a=>ar(a))),e,!1,c?.pageBox?.bodyWidth??aw(b).bodyWidth),az("",{spacingAfter:80,line:e.lineTwips})),d&&(d.ops.headerlessTableRendered+=1,d.notices.push({code:"headerless-table",message:`docx 阶段按数据行渲染无表头表格 ${u.rows.length} 行 \xd7 ${u.columns} 列(首行不冒充表头):该表在源文档缺表头,需回源补齐`})),a=u.next;continue}if(ao(o)){a+=1;continue}let v=/^(#{1,4})\s+(.+)$/u.exec(o);if(v){let b=ar(v[2]);j.push("目录"===b?az(b,{bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):(()=>{var a;let c=(a=v[1].length,2===a?az(b,{styleId:"Heading1",outlineLevel:0,bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===a?az(b,{styleId:"Heading2",outlineLevel:1,bold:!0,size:e.h2HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:180,spacingAfter:100,keepNext:!0}):az(b,{styleId:"Heading3",outlineLevel:2,bold:!0,size:e.h3HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:120,spacingAfter:80,keepNext:!0})),d=n.get(b);if(!d)return c;let f=d.split("_").at(-1);return c.replace("</w:pPr>",`</w:pPr><w:bookmarkStart w:id="${f}" w:name="${d}"/>`).replace("</w:p>",`<w:bookmarkEnd w:id="${f}"/></w:p>`)})()),"目录"===b&&(l=!0,p=j.length),a+=1;continue}let w=ar(o),x=function(a){let b=/^\s*(\d+(?:\.\d+){0,2})([.、])\s+(.+)$/u.exec(a);return b?{level:Math.min(b[1].split(".").length-1,2),marker:`${b[1]}${b[2]}`,text:ar(b[3])}:null}(o),y=function(a){let b=/^\s*[-*+]\s+(.+)$/u.exec(a);return b?ar(b[1]):null}(o);if(!l&&x){let b=0===x.level?720:1===x.level?1080:1440,c=0===x.level?360:1===x.level?420:480;j.push(az(`${x.marker} ${x.text}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:b,hanging:c,spacingAfter:60})),a+=1;continue}if(!l&&y){j.push(az(`• ${y}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:720,hanging:360,spacingAfter:60})),a+=1;continue}let z=h.slice(a+1).find(a=>""!==a.trim()),A=/^!\[([^\]]*)\]\([^)]+\)\s*$/u.exec(z?.trim()??"")?.[1];if(!l&&A&&w===A){j.push(aG(w,e)),a+=1;continue}if(!l&&aD(o)&&z&&ap(z.trim())){j.push(aG(w,e)),d&&(d.ops.captionStyled+=1),a+=1;continue}let B=/^\*\*[^*]+\*\*\s*$/u.test(o)&&w.length<=40,C=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(o)||/^([一二三四五六七八九十]+)/u.test(w)||/^[一二三四五六七八九十]+、/u.test(w);j.push(l?function(a,b,c,d=9e3){let e=/^\s*\d+\.\d+\s+\S/u.test(a),f=az(ar(a),{bold:!e,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:e?30:80,indentLeft:420*!!e,align:"left"});return c?f.replace("</w:pPr>",`<w:tabs><w:tab w:val="right" w:leader="dot" w:pos="${d}"/></w:tabs></w:pPr>`).replace("</w:p>",`<w:r><w:tab/></w:r><w:fldSimple w:instr="PAGEREF ${c} \\h"><w:r><w:t></w:t></w:r></w:fldSimple></w:p>`):f}(o,e,n.get(w),c?.pageBox?.bodyWidth):az(w,{bold:C||B,size:B?Math.max(e.bodyHalfPoints+2,30):g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,align:B?"left":"both",firstLine:C||B?0:560,spacingBefore:B?120:80*!!C,spacingAfter:B?60:void 0})),a+=1}q();let r=j.join("");if(d){let b=aX(a,r);b.conserved||d.blockers.push({code:"content-not-conserved",line:0,message:`docx 渲染阶段存在未声明的正文改动(产物文本去标记比对):第 ${b.position} 字符附近分歧(入口「${b.sourceContext}」→ 产物「${b.productContext}」)`})}return r}async function aI(a,b,c,d=[],e=!0){a.folder("word")?.file("styles.xml",function(a){let b=ax(a),c=`w:ascii="${ab(b.fontBodyAscii)}" w:hAnsi="${ab(b.fontBodyAscii)}" w:eastAsia="${ab(b.fontBody)}" w:cs="${ab(b.fontBodyAscii)}"`,d=(a,d,e,f,g,h,i)=>`<w:style w:type="paragraph" w:styleId="${a}"><w:name w:val="${d}"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:uiPriority w:val="${9+f}"/><w:qFormat/><w:rPr><w:b/><w:rFonts ${c}/><w:sz w:val="${e}"/><w:szCs w:val="${e}"/></w:rPr><w:pPr><w:keepNext/><w:keepLines/><w:outlineLvl w:val="${f}"/><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:before="${g}" w:after="${h}"/>${i?`<w:jc w:val="${i}"/>`:""}</w:pPr></w:style>`;return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style>${d("Heading1","heading 1",Math.max(b.h1HalfPoints,24),0,260,180,"center")}${d("Heading2","heading 2",Math.max(b.h2HalfPoints,24),1,180,100)}${d("Heading3","heading 3",Math.max(b.h3HalfPoints,22),2,120,80)}<w:style w:type="paragraph" w:styleId="ListParagraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:uiPriority w:val="34"/><w:qFormat/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:style></w:styles>`}(c)),a.folder("word")?.file("settings.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:updateFields w:val="true"/><w:compat><w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/></w:compat></w:settings>'),e&&a.folder("word")?.file("footer.xml",`<?xml version="1.0" encoding="UTF-8"?><w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:pPr><w:jc w:val="center"/></w:pPr>${ay("第 ",{size:21})}<w:fldSimple w:instr="PAGE"/>${ay(" 页 / 共 ",{size:21})}<w:fldSimple w:instr="NUMPAGES"/>${ay(" 页",{size:21})}</w:p></w:ftr>`),a.folder("word")?.file("fontTable.xml",function(a){let b=ax(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="${ab(b.fontBody)}"><w:charset w:val="86"/><w:family w:val="roman"/></w:font><w:font w:name="${ab(b.fontBodyAscii)}"><w:family w:val="roman"/></w:font></w:fonts>`}(c)),a.folder("docProps")?.file("core.xml",function(a){let b=new Date().toISOString();return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${ab(a)}</dc:title><dc:creator>Customize Agent</dc:creator><cp:lastModifiedBy>Customize Agent</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">${b}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${b}</dcterms:modified></cp:coreProperties>`}(b)),a.folder("docProps")?.file("app.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Customize Agent</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>1.0</AppVersion></Properties>');let f=a.folder("word")?.folder("media");for(let a of d)f?.file(a.fileName,a.buffer);let g=a.file("word/_rels/document.xml.rels"),h=g?await g.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';for(let[a,b,c]of[["rStyle","http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles","styles.xml"],["rSettings","http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings","settings.xml"],["rFontTable","http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable","fontTable.xml"]])h.includes(b)||(h=h.replace("</Relationships>",`<Relationship Id="${a}" Type="${b}" Target="${c}"/></Relationships>`));for(let a of(e&&!h.includes('Id="rFooter"')&&(h=h.replace("</Relationships>",'<Relationship Id="rFooter" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer.xml"/></Relationships>')),d))h.includes(`Id="${a.relationshipId}"`)||(h=h.replace("</Relationships>",`<Relationship Id="${a.relationshipId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${a.fileName}"/></Relationships>`));a.folder("word")?.folder("_rels")?.file("document.xml.rels",h);let i=a.file("_rels/.rels"),j=i?await i.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>';j.includes("metadata/core-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rCore" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>')),j.includes("extended-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rApp" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>')),a.folder("_rels")?.file(".rels",j);let l=a.file("[Content_Types].xml"),m=l?await l.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/></Types>';for(let a of new Set(d.map(a=>k.extname(a.fileName).slice(1).toLowerCase()).filter(Boolean))){let b="jpg"===a||"jpeg"===a?"image/jpeg":"png"===a?"image/png":"gif"===a?"image/gif":"webp"===a?"image/webp":void 0;b&&!m.includes(`Extension="${a}"`)&&(m=m.replace("</Types>",`<Default Extension="${a}" ContentType="${b}"/></Types>`))}let n=[["/word/styles.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"],["/word/settings.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"],["/word/fontTable.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"],["/docProps/core.xml","application/vnd.openxmlformats-package.core-properties+xml"],["/docProps/app.xml","application/vnd.openxmlformats-officedocument.extended-properties+xml"]];for(let[a,b]of(e&&n.push(["/word/footer.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"]),n))m.includes(`PartName="${a}"`)||(m=m.replace("</Types>",`<Override PartName="${a}" ContentType="${b}"/></Types>`));a.file("[Content_Types].xml",m)}async function aJ(a,b,c,d,e=process.cwd(),f,g,h=!1){let i=async a=>{let b=await C().loadAsync(a),c=await p(b,h);return c.changedFamilies.length&&f?.notices.push({code:"docx-stage",message:`审阅中文显示使用随文档嵌入的Noto Sans CJK SC;替代${c.changedFamilies.join("、")},不宣称满足原指定字体要求。`}),c.embedded?b.generateAsync({type:"nodebuffer"}):a},j=function(a,b){let c=String(a||"").trim();if(!c)return{};let d=(0,X.n7)(c,[k.resolve(b),k.resolve((0,D.Gl)(b),"assets"),k.resolve(z.tmpdir()),k.join((0,v.J0)(),"export-templates")],{mustExist:!0,requireFile:!0});return d.ok?".docx"!==k.extname(d.absolute).toLowerCase()?{rejected:{path:c,reason:"模板必须是 .docx 文件"}}:{resolved:d.absolute}:{rejected:{path:c,reason:(0,X.vZ)(d.reason)}}}(d,e);if(j.rejected){let d=`DOCX 模板路径被拒绝(${j.rejected.reason}):${j.rejected.path}。已回退标准生成路径(正文正确、未套模板样式)。允许的来源:本项目目录 / 生成资产目录 / 导出模板目录。`;console.error(`[export] ${d}`);let h=await aL(a,b,c,void 0,e,f,d,g);return h.buffer=await aK(await i(h.buffer),f),h}let l=await aL(a,b,c,j.resolved,e,f,void 0,g);return l.buffer=await aK(await i(l.buffer),f),l}async function aK(a,b){let c=await C().loadAsync(a),d=c.file("word/document.xml");if(!d)return a;let e=await d.async("string");if(!/PAGEREF _doc_heading_/u.test(e))return a;let f=new Map;for(let a of e.matchAll(/<w:p\b[^>]*>[\s\S]*?<\/w:p>/gu)){let b=/<w:bookmarkStart\b[^>]*w:name="(_doc_heading_\d+)"/u.exec(a[0])?.[1];b&&f.set(b,aV(a[0]).replace(/\n/gu,""))}let g=(a,b)=>a.replace(/(<w:fldSimple w:instr="PAGEREF (_doc_heading_\d+) [^"]*">)[\s\S]*?<\/w:fldSimple>/gu,(a,c,d)=>`${c}<w:r><w:t>${b[f.get(d)??""]??""}</w:t></w:r></w:fldSimple>`);for(let d=0;d<3;d+=1){let d=await K(a);if(!d.headingPages||!Object.keys(d.headingPages).length)return b?.notices.push({code:"toc-reconcile",message:`DOCX目录保留可更新的原生页码域,实际页码缓存未取得:${d.unavailableReason??"渲染器没有输出章节书签"}`}),a;let f=g(e,d.headingPages);if(f===e)return a;e=f,c.file("word/document.xml",e),a=await c.generateAsync({type:"nodebuffer"})}return c.file("word/document.xml",g(e,{})),b?.notices.push({code:"toc-reconcile",message:"DOCX目录页码缓存的实际排版校验未收敛,已清空缓存;原生PAGEREF域保留,须更新后复核"}),c.generateAsync({type:"nodebuffer"})}async function aL(a,b,c,d,e,f,g,h){let j=h?.headersFooters!=="forbidden",k=aw(c),l={projectRoot:e,images:[],pageBox:k,monoColor:h?.monoColor,...f?{audit:f}:{}},m=await aB(b,e,f);m.size>0&&(l.rasterizedSvg=m);let n=aH(b,c,l,f),o={expected:[...b.matchAll(/!\[[^\]]*\]\(([^)]+)\)/gu)].length,embedded:l.images.length,...l.imageLayoutIssues?.length?{layoutIssues:l.imageLayoutIssues}:{}},p=g;if(d&&i.existsSync(d)){let b=await C().loadAsync(i.readFileSync(d)),e=b.file("word/document.xml");if(e){let f=await e.async("string");if(/\{\{content\}\}/u.test(f))return b.file("word/document.xml",function(a,b){let c=b?.page;if(!c)return a;let d=aw(b),e=`<w:pgSz w:w="${d.width}" w:h="${d.height}"${d.landscape?' w:orient="landscape"':""}/>`,f=a=>{let b=a;c.paper&&(b=/<w:pgSz\b[^>]*\/>/u.test(b)?b.replace(/<w:pgSz\b[^>]*\/>/u,e):b.replace("</w:sectPr>",`${e}</w:sectPr>`));let d=/<w:pgMar\b[^>]*\/>/u.exec(b)?.[0]??"<w:pgMar/>";for(let[a,b]of[["marginTop","top"],["marginRight","right"],["marginBottom","bottom"],["marginLeft","left"],["gutter","gutter"]])if(void 0!==c[a]){let e=` w:${b}="${av(c[a],0)}"`,f=RegExp(`\\s+w:${b}="[^"]*"`,"u");d=f.test(d)?d.replace(f,e):d.replace("/>",`${e}/>`)}return/<w:pgMar\b[^>]*\/>/u.test(b)?b.replace(/<w:pgMar\b[^>]*\/>/u,d):b.replace("</w:sectPr>",`${d}</w:sectPr>`)};return/<w:sectPr\b/u.test(a)?a.replace(/<w:sectPr\b[^>]*>[\s\S]*?<\/w:sectPr>/gu,f):a.replace("</w:body>",`${f("<w:sectPr></w:sectPr>")}</w:body>`)}(f.replace(/\{\{title\}\}/gu,ab(a)).replace(/\{\{content\}\}/gu,n),c)),await aI(b,a,c,l.images,j),{buffer:await b.generateAsync({type:"nodebuffer"}),imageReceipt:o};console.error(`[export] 模板缺少 {{content}} 占位符,已回退标准生成路径(正文正确、未套模板样式):${d}`),p=`模板缺少 {{content}} 占位符,已回退标准生成路径(未套模板样式)`}}let q=c?.page||{},r=new(C());return r.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>${n}<w:sectPr>${j?'<w:footerReference w:type="default" r:id="rFooter"/>':""}<w:pgSz w:w="${k.width}" w:h="${k.height}"${k.landscape?' w:orient="landscape"':""}/><w:pgMar w:top="${av(q.marginTop,2.5)}" w:right="${av(q.marginRight,2)}" w:bottom="${av(q.marginBottom,2)}" w:left="${av(q.marginLeft,2)}"${q.gutter?` w:gutter="${av(q.gutter,0)}"`:""}/></w:sectPr></w:body></w:document>`),await aI(r,a,c,l.images,j),{buffer:await r.generateAsync({type:"nodebuffer"}),templateWarning:p,imageReceipt:o}}function aM(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function aN(a){return a.replace(/<[^>]*>/gu,"").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/ | /gu," ").trim()}function aO(a){let b=new Map,c=new Set,d=0;return a.replace(/<(h[23])([^>]*)>([\s\S]*?)<\/\1>/gu,(a,e,f,g)=>{let h=aN(g);if("目录"===h)return a;let i=`document-heading-${++d}`;return b.has(h)?c.add(h):b.set(h,i),`<${e}${f} id="${i}">${g}</${e}>`}).replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>|<h2[^>]*>)/u,(a,d,e,f)=>{let g=e.split(/<br\s*\/?>|<\/p>|<\/li>/gu).flatMap(a=>{let d=aN(a);if(!d)return[];let e=c.has(d)?void 0:b.get(d),f=/^\d+\.\d+\s/u.test(d)?"toc-section":"toc-chapter";return[`<p class="${f}">${e?`<a href="#${e}"><span>${ab(d)}</span><span class="toc-page" data-toc-title="${ab(d)}"></span></a>`:ab(d)}</p>`]});return`<section class="document-toc">${d}${g.join("")}</section>${f}`})}function aP(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function aQ(a){return a.split(/\r?\n/u).map(a=>/^(#{2,4})\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({level:a[1].length,title:ar(a[2])})).filter(a=>a.title&&"目录"!==a.title)}function aR(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a]||"",e=/^(`{3,}|~{3,})/u.exec(d.trim());if(e){let b=RegExp(`^${e[1][0]}{${e[1].length},}\\s*$`,"u");for(a++;a<c.length&&!b.test(c[a].trim());)a++;continue}if(!ap(d))continue;let f=c[a+1]?.trim()===""?a+2:a+1;if(f<c.length&&ao(c[f]||"")){let e=[],g=f+1;for(;g<c.length&&ap(c[g]||"");)e.push(c[g]||""),g+=1;0===e.length&&b.push(`第 ${a+1} 行表格只有表头,没有数据行`);let h=[d,...e].map(a=>aq(a).length);Math.max(...h)-Math.min(...h)>2&&b.push(`第 ${a+1} 行附近表格列数差异较大,导出版式可能异常`),a=g-1;continue}a+1<c.length&&ap(c[a+1]||"")&&b.push(`第 ${a+1} 行附近疑似裸表格(缺少表头或分隔线),导出版式可能异常`)}return(a.match(/```/gu)||[]).length%2==1&&b.push("存在未闭合代码块,可能影响后续内容导出"),[...new Set(b)].slice(0,20)}function aS(a,b){let c=aP(a),d=b?aP(b):void 0,e=[];c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格");let f=aQ(a);0===f.length&&e.push("正文缺少章节标题"),f.some((a,b)=>b>0&&a.level-f[b-1].level>1)&&e.push("标题层级存在跳级,可能影响导出目录和导航");let g=a.split(/\r?\n/u).map(a=>ar(a)).filter(a=>a.length>0&&!/^#+\s/u.test(a));return g.some(a=>a.length<=1)&&e.push("正文存在孤立字或残缺段落"),g.some(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a))&&e.push("正文存在疑似截断句或未完结段落"),g.some(a=>a.length>380)&&e.push("正文存在过长段落,建议拆分以改善导出版式"),e.push(...aR(a)),[...new Set(e)]}function aT(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\r?\n/gu,"\n").split("\n").filter(a=>!ao(a.trim())&&!/^\s*```/u.test(a)).map(a=>ar(a.replace(/^#{1,6}\s+/u,"").replace(/^\s*[-*+]\s+/u,""))).join("").replace(/(?<!\\)\|/gu,"").replace(/\s+/gu,"")}function aU(a,b){if(a===b)return{conserved:!0};let c=0,d=Math.min(a.length,b.length);for(;c<d&&a[c]===b[c];)c+=1;return{conserved:!1,position:c,sourceContext:a.slice(Math.max(0,c-20),c+20),productContext:b.slice(Math.max(0,c-20),c+20)}}function aV(a){return[...a.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>(a[1]||"").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/&/gu,"&")).join("\n")}function aW(a){return aT(a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]*)\]\([^)]*\)/gu,"$1").replace(/\[\[PAGE_BREAK\]\]/gu,"").replace(/[•·]/gu,"").replace(RegExp(aE,"gu"),""))}function aX(a,b){return aU(aW(a),aW(aV(b)))}function aY(a,b){let c=$();for(let b of aR(a))c.blockers.push({code:"content-not-conserved",line:0,message:b});for(let b of(aT((0,U._D)(a).markdown)!==aT(a)&&c.notices.push({code:"toc-reconcile",message:"目录条目与正文章节不一致;审阅文件保留原稿,须在正文模型中修正"}),(0,y.ql)(a)))c.blockers.push({code:"content-not-conserved",line:b.rowLine,message:`表格字段不守恒:${b.actual}/${b.expected},不能在渲染时补造字段`});return{markdown:a,baselineMarkdown:b??"",issues:aS(a,b),audit:c}}async function aZ(a,b,c,d,e=!1,f){return ah(function(a,b,c,d=!1){let e=ax(c),f=aO(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${ab(a)}</title><style>${function(a,b=!1){return`
|
|
1
|
+
"use strict";(()=>{var a={};a.id=8644,a.ids=[8644],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},17532:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.mjs")},19898:a=>{a.exports=require("@customize-agent/knowledge")},26735:(a,b,c)=>{c.r(b),c.d(b,{config:()=>a6,default:()=>a5,handler:()=>a8});var d={};c.r(d),c.d(d,{EXPORT_RECEIPT_HEADERS:()=>Z,__documentExportTest__:()=>a1,config:()=>Y,default:()=>a2});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c.n(i),k=c(76760),l=c.n(k),m=c(77598);let n="Noto Sans CJK SC";function o(){let a=[l().resolve(process.cwd(),"public/fonts"),l().resolve(process.cwd(),"apps/server/public/fonts")].map(a=>l().join(a,"NotoSansCJKsc-Regular.otf")).find(a=>j().existsSync(a));if(!a)throw Error("随服务发布的中文字体资源缺失,不能把缺字产物当作完整导出");return a}async function p(a,b){let c=Object.keys(a.files).filter(a=>/^word\/(?:document|styles|footer\d*|header\d*)\.xml$/u.test(a)),d=new Set,e=!1;for(let f of c){let c=a.file(f);if(!c)continue;let g=await c.async("string"),h=g.replace(/<w:rFonts\b[^>]*\/?>(?:<\/w:rFonts>)?/gu,a=>{let c=/w:eastAsia="([^"]+)"/u.exec(a)?.[1];return c===n?(e=!0,a):b?(e=!0,c&&d.add(c),a.replace(/\s+w:eastAsia(?:Theme)?="[^"]*"/gu,"").replace(/\/?>(?:<\/w:rFonts>)?$/u,` w:eastAsia="${n}"/>`)):a});h!==g&&a.file(f,h)}if(!e)return{embedded:!1,changedFamilies:[]};let f=o(),g=j().readFileSync(f),h=JSON.parse(j().readFileSync(l().join(l().dirname(f),"font-manifest.json"),"utf8")),i=(0,m.createHash)("sha256").update(g).digest("hex");if(i!==h.sha256||0!==h.embeddingFsType)throw Error("中文字体资源与可嵌入的发布清单不一致");let k=(0,m.randomUUID)(),p=Buffer.from(k.replace(/-/gu,""),"hex").reverse(),q=Buffer.from(g);for(let a=0;a<32;a++)q[a]^=p[a%16];a.file("word/fonts/NotoSansCJKsc-Regular.odttf",q);let r="http://schemas.openxmlformats.org/officeDocument/2006/relationships",s=await a.file("word/fontTable.xml")?.async("string")??'<w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>';s.includes("xmlns:r=")||(s=s.replace("<w:fonts",`<w:fonts xmlns:r="${r}"`));let t=`<w:font w:name="${n}"><w:family w:val="swiss"/><w:embedRegular r:id="portableCjkFont" w:fontKey="{${k.toUpperCase()}}"/></w:font>`;s=s.replace(RegExp(`<w:font w:name="${n}"[\\s\\S]*?</w:font>`,"gu"),""),s=/<\/w:fonts>/u.test(s)?s.replace("</w:fonts>",`${t}</w:fonts>`):s.replace("/>",`>${t}</w:fonts>`),a.file("word/fontTable.xml",s);let u="word/_rels/fontTable.xml.rels",v=await a.file(u)?.async("string")??'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';v=v.replace(/<Relationship\b[^>]*Id="portableCjkFont"[^>]*\/>/gu,""),a.file(u,v.replace("</Relationships>",`<Relationship Id="portableCjkFont" Type="${r}/font" Target="fonts/NotoSansCJKsc-Regular.odttf"/></Relationships>`));let w=await a.file("[Content_Types].xml").async("string");w.includes('Extension="odttf"')||(w=w.replace("</Types>",'<Default Extension="odttf" ContentType="application/vnd.openxmlformats-officedocument.obfuscatedFont"/></Types>')),a.file("[Content_Types].xml",w);let x=await a.file("word/settings.xml")?.async("string");return x&&!x.includes("embedTrueTypeFonts")&&a.file("word/settings.xml",x.replace("</w:settings>","<w:embedTrueTypeFonts/></w:settings>")),{embedded:!0,changedFamilies:[...d],sha256:i}}var q=c(96241),r=c(12866),s=c(7942),t=c(57349),u=c(85497),v=c(51342),w=c(12152),x=c(72275),y=c(13571),z=c(48161),A=c.n(z),B=c(88194),C=c.n(B),D=c(70949),E=c(31421);let F=require("node:url"),G=(0,c(57975).promisify)(E.execFile);async function H(a,b=!1,d=!1){let e;if(a.length)try{let[f,g]=await Promise.all([Promise.resolve().then(c.bind(c,17532)),Promise.resolve().then(c.bind(c,97864))]);globalThis.pdfjsWorker??=g,e=f.getDocument({data:Uint8Array.from(a),useWorkerFetch:!1,useSystemFonts:!1});let h=await e.promise;if(!Number.isInteger(h.numPages)||h.numPages<=0)return;let i=[];if(b)for(let a=1;a<=h.numPages;a+=1){let b=await (await h.getPage(a)).getTextContent();i.push(b.items.map(a=>"str"in a?a.str:"").join(""))}let j=new Map,k=async a=>{for(let b of a){let a="string"==typeof b.dest?await h.getDestination(b.dest):b.dest;if(a?.[0]){let c="number"==typeof a[0]?a[0]+1:await h.getPageIndex(a[0])+1;j.set(b.title,[...j.get(b.title)??[],c])}b.items?.length&&await k(b.items)}};return d&&await k(await h.getOutline()??[]),{pages:h.numPages,text:i.join(""),...d?{headingPages:Object.fromEntries([...j].filter(([,a])=>1===a.length).map(([a,b])=>[a,b[0]]))}:{}}}catch{return}finally{await e?.destroy()}}async function I(a){return(await H(a))?.pages}async function J(a){return(await H(a,!1,!0))?.headingPages}async function K(a,b={}){let c,d,e;if(!a||0===a.length)return{unavailableReason:"docx 为空"};try{let b=await C().loadAsync(a),d=await b.file("word/document.xml")?.async("string");if(!d)throw Error("正文缺席");c=[...d.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>a[1]).join("")}catch{return{unavailableReason:"DOCX正文无法解析,不能验证真实渲染页数"}}let f=async a=>{let b=await H(a,!0,!0);if(!b)return;let e=function(a,b){let c=new Map,d=new Map;for(let b of a.match(/\p{Script=Han}/gu)??[])c.set(b,(c.get(b)??0)+1);let e=[...c.values()].reduce((a,b)=>a+b,0);if(e<20)return null;for(let a of b.match(/\p{Script=Han}/gu)??[])d.set(a,(d.get(a)??0)+1);return[...c].reduce((a,[b,c])=>a+Math.min(c,d.get(b)??0),0)/e}(c,b.text);if(null!==e&&e<.98)throw Error(`中文文字渲染未保留(覆盖率${(100*e).toFixed(1)}%),请核查渲染器中文字体;不能将缺字版式计为合格页数`);return d=b.headingPages,b.pages},g=j().mkdtempSync(l().join(A().tmpdir(),"real-pages-")),h={...process.env};if("darwin"===process.platform&&!h.FONTCONFIG_FILE){let a=["/System/Library/Fonts","/System/Library/Fonts/Supplemental","/Library/Fonts"].filter(a=>j().existsSync(a));if(a.length){let b=l().join(g,"fonts.conf"),c=a=>a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">");j().writeFileSync(b,`<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig>${a.map(a=>`<dir>${c(a)}</dir>`).join("")}<cachedir>${c(l().join(g,"font-cache"))}</cachedir><alias><family>SimSun</family><prefer><family>Songti SC</family></prefer></alias><alias><family>宋体</family><prefer><family>Songti SC</family></prefer></alias></fontconfig>`),h.FONTCONFIG_FILE=b}}let i=l().join(g,"document.docx");j().writeFileSync(i,a);try{for(let a of function(){let a=[],b=process.env.CUSTOMIZE_DOCX_RENDERER;if(b){let c=j().existsSync(b.trim())?[b.trim()]:b.trim().split(/\s+/u);a.push({name:`env:${c[0]}`,command:c[0],args:c.slice(1)})}for(let b of["soffice","libreoffice"])a.push({name:b,command:b,args:[]});return a}()){let c,k=l().join(g,`out-${a.name.replace(/[^\w.-]/gu,"_")}`);j().mkdirSync(k,{recursive:!0});let m=a=>a.replace(/\{in\}/gu,i).replace(/\{out\}/gu,k).replace(/\{outfile\}/gu,l().join(k,"document.pdf")),n=a.args.length>0?a.args.map(m):[`-env:UserInstallation=${(0,F.pathToFileURL)(l().join(k,"profile")).href}`,"--headless","--convert-to","pdf","--outdir",k,i];try{await G(a.command,n,{timeout:b.timeoutMs??12e4,env:h})}catch(c){let b=c.code;if("ENOENT"===b)continue;e=`${a.name}:${c instanceof Error?c.message.split("\n")[0]:String(c)}`;continue}let o=l().join(k,"document.pdf");if(!j().existsSync(o)){let b,c=j().readdirSync(k).filter(a=>a.toLowerCase().endsWith(".pdf"));if(0===c.length){e=`${a.name}没有产生PDF`;continue}try{b=1===c.length?await f(j().readFileSync(l().join(k,c[0]))):void 0}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==b)return{pages:b,renderer:a.name,headingPages:d};e=c.length>1?`${a.name}产生多个PDF,无法确认对应文档`:`${a.name}的PDF页树解析失败`;continue}try{c=await f(j().readFileSync(o))}catch(a){e=a instanceof Error?a.message:String(a);continue}if(void 0!==c)return{pages:c,renderer:a.name,headingPages:d};e=`${a.name}的PDF页树解析失败`}return{unavailableReason:e?`渲染器失败(${e})`:"未配置外部渲染器(CUSTOMIZE_DOCX_RENDERER 或 PATH 中的 soffice/libreoffice)——真页数待真渲染"}}finally{j().rmSync(g,{recursive:!0,force:!0})}}var L=c(44533),M=c(22157),N=c(52639),O=c(30055),P=c(35091);let Q=a=>(0,m.createHash)("sha256").update(a).digest("hex"),R=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;function S(a,b,c){if(!b)return{};let d=(0,s.HM)(a,c,b);if(!j().existsSync(d))return{};try{let a=j().readFileSync(d);return{data:R(JSON.parse(a.toString("utf8"))),sha256:Q(a)}}catch{return{}}}function T(a){return Array.isArray(a)?a.flatMap(a=>{let b=R(a);return"string"==typeof b?.id&&"string"==typeof b.title?[{id:b.id,title:b.title}]:[]}):[]}var U=c(64406),V=c(191),W=c(16006),X=c(89900);let Y={api:{bodyParser:{sizeLimit:"50mb"},responseLimit:!1}},Z={notDeliverable:"X-Export-Not-Deliverable",exportPurpose:"X-Export-Purpose",bodySha256:"X-Export-Body-Sha256",issuesReport:"X-Export-Issues-Report",gatePassed:"X-Export-Gate-Passed",gateBinding:"X-Export-Gate-Binding",gateIssues:"X-Export-Gate-Issues",gateIssueCount:"X-Export-Gate-Issue-Count",contentIssues:"X-Export-Content-Issues",renderAudit:"X-Export-Render-Audit",figureInline:"X-Export-Figure-Inline",templateWarning:"X-Export-Template-Warning",pageLimit:"X-Export-Page-Limit",pdfPageCount:"X-PDF-Page-Count"};function $(){return{mode:"enforce",blockers:[],notices:[],ops:{headerlessTableRendered:0,captionStyled:0}}}function _(a){return{mode:a.mode,blockerCount:a.blockers.length,blockerCodes:[...new Set(a.blockers.map(a=>a.line>0?`${a.code}@L${a.line}`:a.code))].slice(0,20),notices:a.notices.map(a=>a.message).slice(0,10),ops:{...a.ops},opsTotal:Object.values(a.ops).reduce((a,b)=>a+b,0)}}function aa(a){return a.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document"}function ab(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let ac={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function ad(a){return ac[k.extname(a).toLowerCase()]||""}function ae(a,b){let c=k.relative(b,a);return!!c&&!c.startsWith("..")&&!k.isAbsolute(c)}function af(a,b=(0,L.aY)()){if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let c=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?.*)?$/u.exec(a)?.[1];if(c){let a=k.resolve((0,D.Gl)(b),"assets","figures"),d=k.resolve(a,c);return ae(d,a)&&i.existsSync(d)&&i.statSync(d).isFile()?d:null}let d=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!d||k.isAbsolute(d))return null;let e=k.resolve((0,L.NW)(b)),f=k.resolve((0,D.Gl)(b),"assets");return[d.startsWith("generatedDocuments/assets/")?k.resolve(f,d.replace(/^generatedDocuments\/assets\//u,"")):"",k.resolve(e,d)].filter(Boolean).find(a=>{let b=k.resolve(a);return(ae(b,e)||ae(b,f))&&!!ad(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function ag(a){let b=new Map,c=0,d=Math.round(8),e=Math.round(32);return f=>{let g=af(f,a);if(!g)return null;let h=i.statSync(g);if(h.size>8388608)return{reason:`超过单图内联上限 ${d}MB`};if(c+h.size>0x2000000)return{reason:`全篇内联总量超过 ${e}MB 上限`};let j=b.get(g);return j||(j=`data:${ad(g)};base64,${i.readFileSync(g).toString("base64")}`,b.set(g,j),c+=h.size),{dataUrl:j}}}function ah(a,b=(0,L.aY)(),c){let d=ag(b);return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,b,e,f)=>{let g=d(e);return g?"reason"in g?(c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:${g.reason},产物中为断图)`}),a):`<img${b}src="${g.dataUrl}"${f}>`:(/^\//u.test(e.trim())&&c?.notices.push({code:"figure-inline",message:`HTML 图件未内联:${e}(原因:未在知识库/生成资产根内找到,产物中为断图)`}),a)})}let ai=/^\/api\/documents\/generated\/[^/]+\/figure\/([A-Za-z0-9._-]+\.svg)(?:\?[^#]*)?$/u;function aj(a){let b=/^data:(image\/(?:png|jpeg|gif|webp|svg\+xml));base64,([A-Za-z0-9+/]+={0,2})$/u.exec(a);if(!b||b[2].length>4*Math.ceil(8388608/3))return null;let c=Buffer.from(b[2],"base64");return!c.length||c.length>8388608||c.toString("base64")!==b[2]||"image/svg+xml"===b[1]&&/<script\b|<foreignObject\b|\son\w+\s*=|(?:href|xlink:href)\s*=\s*["'](?!#)|url\(\s*(?!#)|<!ENTITY/iu.test(c.toString("utf8"))?null:{buffer:c,contentType:b[1]}}let ak=/^[a-z][a-z0-9+.-]*:\/\/[^/]+(\/api\/documents\/generated\/[^/]+\/figure\/[A-Za-z0-9._-]+\.svg(?:\?[^#]*)?)$/iu,al=/!\[([^\]]*)\]\(\s*(?:<([^>\s]+)>|([^()\s]+))(\s+(?:"[^"]*"|'[^']*'))?\s*\)/gu,am=/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu;function an(a,b=(0,L.aY)(),c){let d=ag(b),e={inlined:0,failed:[]},f=new Set,g=function(a){let b,c=[],d=0,e="";for(let f of a.split("\n")){let a=/^\s{0,3}(`{3,}|~{3,})/u.exec(f);a&&(void 0===b?(b=d,e=a[1][0]):a[1][0]===e&&(c.push({start:b,end:d+f.length}),b=void 0)),d+=f.length+1}return void 0!==b&&c.push({start:b,end:a.length}),c}(a),h=a=>g.some(b=>a>=b.start&&a<b.end),i=(a,b,c)=>{f.has(b)||(f.add(b),e.failed.push({name:a,src:b,reason:c}))},j=(a,b)=>a.trim()||ai.exec(b.trim())?.[1]||ak.exec(b.trim())?.[1]?.split("/").pop()||b.trim().split("/").pop()||b.trim(),k=a=>{let b=a.trim();if(!b||/^data:/iu.test(b))return{action:"keep"};let c=ak.exec(b)?.[1]??b;if(c===b&&/^[a-z][a-z0-9+.-]*:/iu.test(b))return/^https?:/iu.test(b)?{action:"keep-report",reason:"外部图源(导出链不联网,无法内联)"}:{action:"keep"};let e=d(c);if(!e){let a=ai.exec(c)?.[1],b=a?`图件文件不在生成资产根内(${a})`:"未在知识库/生成资产根内找到该图";return c.startsWith("/")?{action:"mark",reason:b}:{action:"keep-report",reason:b}}return"reason"in e?{action:"mark",reason:e.reason}:{action:"inline",dataUrl:e.dataUrl}},l=a.replace(al,(a,b,c,d,f,g,l)=>{if(h(g))return a;let m=(c??d??"").trim(),n=k(m);if("keep"===n.action)return a;let o=j(b,m);if("inline"===n.action)return e.inlined+=1,``;if(i(o,m,n.reason),"keep-report"===n.action)return a;let p=`图件未内联:${o}(原因:${n.reason})——请从成稿预览或 HTML/DOCX 交付件取图`;return 0===g||"\n"===l[g-1]?`> ${p}`:`【${p}】`});for(let a of(l=l.replace(am,(a,b,c,d,f)=>{if(h(f))return a;let g=k(c);return"keep"===g.action?a:"inline"===g.action?(e.inlined+=1,`<img${b}src="${g.dataUrl}"${d}>`):(i(j("",c),c,g.reason),"keep-report"===g.action)?a:`【图件未内联:${j("",c)}(原因:${g.reason})】`}),e.inlined>0&&c?.notices.push({code:"figure-inline",message:`MD 图件内联:${e.inlined} 张已内联为 data: URI(与 HTML/PDF 同源解析;MD 交付件不再依赖 /api/... 图件 URL)`}),e.failed.slice(0,10)))c?.notices.push({code:"figure-inline",message:`MD 图件未内联:${a.name}(原因:${a.reason})`});return{markdown:l,report:e}}function ao(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function ap(a){let b=a.trim();return!(!b||/^#{1,6}\s+/u.test(b)||ao(b))&&(b.match(/(?<!\\)\|/gu)||[]).length>=1}function aq(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split(/(?<!\\)\|/u).map(a=>a.replace(/\\\|/gu,"|").trim())}function ar(a){return a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/(\*\*|__)([\s\S]*?)\1/gu,"$2").replace(/(?<![\w\d])([*_])(?=\S)(.+?)\1(?![\w\d])/gu,"$2").replace(/`([^`]+)`/gu,"$1").replace(/~~(.+?)~~/gu,"$1").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function as(a){return a.split(",")[0].replace(/["'“”]/gu,"").trim()}function at(a){let b=as(a);return({宋体:"SimSun",仿宋:"FangSong",仿宋_GB2312:"FangSong_GB2312",黑体:"SimHei",楷体:"KaiTi",楷体_GB2312:"KaiTi_GB2312",微软雅黑:"Microsoft YaHei"})[b]||b}function au(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function av(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function aw(a){let b=a?.page??{},c=(b.paper??"A4").trim(),d=/\blandscape\b/iu.test(c),e=c.replace(/\s+(?:landscape|portrait)\s*$/iu,"").toUpperCase(),f={A3:[16838,23811],A4:[11906,16838],A5:[8391,11906],B5:[9978,14173],LETTER:[12240,15840],LEGAL:[12240,20160],TABLOID:[15840,24480]},g=/^(\d+(?:\.\d+)?(?:mm|cm|in|pt))\s+(\d+(?:\.\d+)?(?:mm|cm|in|pt))$/iu.exec(c);if(!g&&!f[e])throw Error(`DOCX尚未支持指定纸张:${c};不能静默换成A4`);let[h,i]=g?[av(g[1],21),av(g[2],29.7)]:f[e]??f.A4;d&&([h,i]=[i,h]);let j=h-av(b.marginLeft,2)-av(b.marginRight,2)-av(b.gutter,0),k=i-av(b.marginTop,2.5)-av(b.marginBottom,2.5)-560;if(j<=0||k<=0)throw Error("纸张和页边距没有可用正文区域");return{width:h,height:i,landscape:d,bodyWidth:j,maxImageWidthPx:Math.min(620,j/15),maxImageHeightPx:k/15}}function ax(a){let b=function(a){let b=a?.page||{},c=a?.typography||{},d=aM(b.paper,"A4"),e=aM(b.marginTop,"24mm"),f=aM(b.marginRight,"18mm"),g=aM(b.marginBottom,"22mm"),h=aM(b.marginLeft,"18mm"),i=c.fontFamily||"SimSun, 宋体, serif",j=c.bodyFont||c.fontFamily||"SimSun, 宋体, serif",k=c.headingFont||c.fontFamily||"SimSun, 宋体, serif",l=c.lineHeight||"18pt";return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,bodyFontFamily:j,headingFontFamily:k,lineHeight:l,titleSize:c.titleSize||"22pt",bodySize:c.bodySize||"12pt"}}(a),c=a?.typography||{},d=c.bodySize?au(c.bodySize,12):12,e=c.titleSize?au(c.titleSize,22):22,f=c.headingSize?au(c.headingSize,15):15,g=c.headingSize?au(c.headingSize,14):14,h=c.lineHeight?au(c.lineHeight,18):18,i=c.headingFont?c.headingFont:c.fontFamily?c.fontFamily:"黑体",j=c.bodyFont||c.fontFamily||"宋体";return{...b,bodyPt:d,h1Pt:e,h2Pt:f,h3Pt:g,linePt:h,bodyHalfPoints:Math.round(2*d),h1HalfPoints:Math.round(2*e),h2HalfPoints:Math.round(2*f),h3HalfPoints:Math.round(2*g),lineTwips:Math.round(20*h),fontHeading:as(i),fontHeadingAscii:at(i),fontBody:as(j),fontBodyAscii:at(j),bodyCss:`${d}pt`,h1Css:`${e}pt`,h2Css:`${f}pt`,h3Css:`${g}pt`,lineCss:`${h}pt`}}function ay(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${ab(d)}" w:hAnsi="${ab(d)}" w:eastAsia="${ab(c)}" w:cs="${ab(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${ab(a)}</w:t></w:r>`}function az(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:"",b.hanging?`w:hanging="${b.hanging}"`:""].filter(Boolean).join(" "),d=[b.styleId?`<w:pStyle w:val="${ab(b.styleId)}"/>`:"",b.keepNext?"<w:keepNext/>":"",!1===b.wordWrap?'<w:wordWrap w:val="0"/>':"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`,c?`<w:ind ${c}/>`:"",b.align?`<w:jc w:val="${b.align}"/>`:"","number"==typeof b.outlineLevel?`<w:outlineLvl w:val="${b.outlineLevel}"/>`:""].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${ay(a,b)}</w:p>`}function aA(a,b){if("image/png"===b&&a.length>=24&&"PNG"===a.toString("ascii",1,4))return{width:a.readUInt32BE(16),height:a.readUInt32BE(20)};if("image/jpeg"===b){let b=2;for(;b+9<a.length&&255===a[b];){let c=a[b+1],d=a.readUInt16BE(b+2);if(c>=192&&c<=195)return{height:a.readUInt16BE(b+5),width:a.readUInt16BE(b+7)};b+=2+d}}return{width:640,height:360}}async function aB(a,b,d){let e,f,g,h=new Map,j=new Map;for(let c of a.matchAll(/!\[[^\]]*\]\(([^)\s]+)[^)]*\)/gu)){let a=af(c[1].trim(),b);a&&".svg"===k.extname(a).toLowerCase()&&j.set(a,i.readFileSync(a));let d=aj(c[1].trim());d?.contentType==="image/svg+xml"&&j.set(c[1].trim(),d.buffer)}if(0===j.size)return h;try{let a=await Promise.resolve().then(c.t.bind(c,28183,23)),b=[process.env.CUSTOMIZE_CJK_FONT,o(),"/System/Library/Fonts/STHeiti Light.ttc","/System/Library/Fonts/Supplemental/Songti.ttc","/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc","/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf","C:\\Windows\\Fonts\\msyh.ttc"].filter(a=>!!a);if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let c of b)if(i.existsSync(c)&&a.GlobalFonts.registerFromPath(c,"Noto Sans CJK SC"))break}if(!a.GlobalFonts.has("Noto Sans CJK SC")){for(let b of["Microsoft YaHei","PingFang SC","Songti SC","Noto Sans CJK JP","Droid Sans Fallback"])if(a.GlobalFonts.has(b)&&a.GlobalFonts.setAlias(b,"Noto Sans CJK SC"))break}g=a.GlobalFonts.has("Noto Sans CJK SC"),e=a.loadImage,f=a.createCanvas}catch(a){return d?.notices.push({code:"docx-stage",message:`SVG 图件光栅化不可用(${a instanceof Error?a.message:String(a)}):${j.size} 张图件在 DOCX 中将缺失`}),h}for(let[a,b]of j)try{if(/\p{Script=Han}/u.test(b.toString("utf8"))&&!g)throw Error("图件包含中文但光栅化器没有可用中文字体;请配置CUSTOMIZE_CJK_FONT,不能把方框字图件当完整交付物");let c=await e(b),d=Math.max(1,Math.round(c.width)),i=Math.max(1,Math.round(c.height)),j=f(2*d,2*i),k=j.getContext("2d");k.scale(2,2),k.drawImage(c,0,0),h.set(a,j.toBuffer("image/png"))}catch(b){d?.notices.push({code:"docx-stage",message:`图件光栅化失败已跳过:${k.basename(a)}(${b instanceof Error?b.message:String(b)})`})}return h.size>0&&d?.notices.push({code:"docx-stage",message:`图件光栅化:${h.size}/${j.size} 张 SVG 已转 2\xd7 PNG 内联进 DOCX(DOCX 不支持内联 SVG)`}),h}function aC(a,b,c,d,e=!1){let f=Math.max(1,...a.map(a=>a.length)),g=a=>[...a].reduce((a,b)=>a+(b.codePointAt(0)>127?2:1),0),h=Array.from({length:f},(b,c)=>{let d=a.map(a=>g(a[c]??"")).sort((a,b)=>a-b);return Math.max(5,Math.min(40,d[Math.ceil((d.length-1)*.85)]??5))}),i=Array.from({length:f},(d,e)=>240+Math.max(2,Math.max(0,...a.slice(+!!c).flatMap(a=>[...(a[e]??"").matchAll(/[+−-]?\d[\d.,~~×*()()%‰µ\p{Script=Latin}\p{Script=Greek}℃°²³/\-+]*/gu)].map(a=>a[0])).filter(a=>a.length<=24).map(g)))*b.bodyHalfPoints*5),j=i.reduce((a,b)=>a+b,0),k=Math.max(0,d-j),l=h.reduce((a,b)=>a+b,0),m=h.map((a,b)=>Math.floor(j>d?d*i[b]/j:i[b]+k*a/l));m[f-1]+=d-m.reduce((a,b)=>a+b,0);let n=`<w:tblGrid>${m.map(a=>`<w:gridCol w:w="${a}"/>`).join("")}</w:tblGrid>`;return`<w:tbl><w:tblPr><w:tblW w:w="${d}" w:type="dxa"/><w:tblLook w:firstRow="${+!!c}" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:left w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:bottom w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:right w:val="single" w:sz="6" w:color="${e?"000000":"666666"}"/><w:insideH w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/><w:insideV w:val="single" w:sz="4" w:color="${e?"000000":"666666"}"/></w:tblBorders></w:tblPr>${n}${a.map((d,f)=>`<w:tr><w:trPr><w:cantSplit/>${c&&0===f?"<w:tblHeader/>":""}</w:trPr>${m.map((g,h)=>{let i=d[h]||"",j=c&&0===f;return`<w:tc><w:tcPr><w:tcW w:w="${g}" w:type="dxa"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="120" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="120" w:type="dxa"/></w:tcMar>${!j&&/^[+−-]?\d[\d.,~~×*()()%‰μµmMkKgGtTsSVWA℃°²³\s/\-+]*$/u.test(i)&&i.length<=24?"<w:noWrap/>":""}${j&&!e?'<w:shd w:val="clear" w:fill="F3F4F6"/>':""}</w:tcPr>${az(i,{bold:j,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:0,wordWrap:!1,keepNext:j||f===a.length-2,align:j?"center":"left"})}</w:tc>`}).join("")}</w:tr>`).join("")}</w:tbl>`}function aD(a){return!!ar(a)&&!/^#{1,6}\s/u.test(a)&&!ap(a)}let aE="请在 Word 中右键更新目录";function aF(a){return`<w:p><w:pPr><w:spacing w:line="${a.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve">TOC \\o "1-2" \\h \\z \\u</w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r></w:p>`}function aG(a,b){return az(a,{bold:!0,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontHeading,fontAscii:b.fontHeadingAscii,align:"center",firstLine:0,spacingBefore:120,spacingAfter:60,keepNext:!0})}function aH(a,b,c,d){let e=ax(b),f=e.h1HalfPoints,g=e.bodyHalfPoints,h=a.replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),j=[],l=!1,m=!1,n=new Map,o=new Set;aQ(a).forEach((a,b)=>{a.level>3||(o.has(a.title)?n.delete(a.title):(o.add(a.title),n.set(a.title,`_doc_heading_${b+1}`)))});let p=-1,q=()=>{if(p<0)return;let a=j.splice(p);if(p=-1,0===a.length)return void j.push(aF(e).replace("</w:p>",`<w:r><w:t>${aE}</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>`));j.push(aF(e)),a.forEach((b,c)=>j.push(c===a.length-1?b.replace(/<\/w:p>$/u,'<w:r><w:fldChar w:fldCharType="end"/></w:r></w:p>'):b))};for(let a=0;a<h.length;){let o=h[a].trim();if(!o){a+=1;continue}if(l&&("[[PAGE_BREAK]]"===o||/^#{1,4}\s+/u.test(o))&&(q(),l=!1,"[[PAGE_BREAK]]"!==o&&j.push(az("",{pageBreak:!0}))),/<div\s+class=["']document-cover["']\s*>/iu.test(o)){m=!0,a+=1;continue}if(m&&/^<\/div>$/iu.test(o)){m=!1,a+=1;continue}if("[[PAGE_BREAK]]"===o){l=!1,m=!1,q(),j.push(az("",{pageBreak:!0})),a+=1;continue}if(m){let b=ar(o.replace(/^#\s+/u,""));b&&j.push(az(b,{bold:!0,size:Math.max(f+8,44),line:Math.round(1.15*e.lineTwips),fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let r=c?function(a,b){let c=/!\[([^\]]*)\]\(([^)]+)\)/u.exec(a);if(!c)return null;let d=c[2].trim(),e=ai.exec(d)?.[1],f=af(d,b.projectRoot),g=aj(d);if(!f&&!g)return(e||d.startsWith("data:"))&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e??c[1]}(原因:图件不在生成资产根内,或内联格式/体积不合规)`}),null;let h=g?.buffer??i.readFileSync(f),j=g?.contentType??ad(f);if("image/svg+xml"===j){let a=b.rasterizedSvg?.get(f??d);if(!a)return b.audit?.notices.push({code:"figure-inline",message:`DOCX图件未进包:${e??c[1]}(SVG未完成光栅化)`}),null;h=a,j="image/png"}if(!j||h.length>8388608)return e&&b.audit?.notices.push({code:"figure-inline",message:`DOCX 图件未进包:${e}(原因:超过单图体积上限 ${Math.round(8)}MB)`}),null;let l=b.images.length+1,m="image/png"===j?".png":g?`.${"jpeg"===j.split("/")[1]?"jpg":j.split("/")[1]}`:k.extname(f).toLowerCase()||".png",n=aA(h,j),o=b.pageBox?.maxImageWidthPx??620,p=b.pageBox?.maxImageHeightPx??aw().maxImageHeightPx,q=Math.min(1,o/Math.max(n.width,1),p/Math.max(n.height,1)),r=g?.contentType==="image/svg+xml"?g.buffer:f&&".svg"===k.extname(f).toLowerCase()?i.readFileSync(f):void 0;if(r?.includes(Buffer.from("data-source-node="))){let a=r.toString("utf8"),d=aA(r,"image/svg+xml"),e=[...a.matchAll(/font-size=["'](\d+(?:\.\d+)?)["']/gu)].map(a=>Number(a[1])),f=Math.min(...e)*n.width/Math.max(1,d.width)*q*.75;if(e.length&&f<7.95){let a=`图件${c[1]||l}完整缩放后最小标签约${f.toFixed(1)}pt,须在作者模型拆分或重新排版,不能缩成不可读的正式图件`;(b.imageLayoutIssues??=[]).push(a),b.audit?.notices.push({code:"docx-stage",message:a})}}let s={relationshipId:`rImage${l}`,fileName:`image${l}${m}`,buffer:h,contentType:j,widthEmu:Math.round(n.width*q*9525),heightEmu:Math.round(n.height*q*9525),altText:c[1]||`image${l}`};return b.images.push(s),s}(o,c):null;if(r){j.push(`<w:p><w:pPr><w:jc w:val="center"/><w:spacing w:after="120" w:line="240" w:lineRule="auto"/></w:pPr><w:r><w:drawing><wp:inline xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><wp:extent cx="${r.widthEmu}" cy="${r.heightEmu}"/><wp:docPr id="${r.relationshipId.replace(/\D/gu,"")||"1"}" name="${ab(r.altText||r.fileName)}"/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="${ab(r.fileName)}"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="${r.relationshipId}" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${r.widthEmu}" cy="${r.heightEmu}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p>`),a+=1;continue}let s=/^(`{3,}|~{3,})([^`~]*)$/u.exec(o);if(s){let b=RegExp(`^${s[1][0]}{${s[1].length},}\\s*$`,"u"),c=[h[a++]];for(;a<h.length;){let d=h[a++];if(c.push(d),b.test(d.trim()))break}for(let a of c)j.push(az(a,{size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,spacingAfter:0}));/^mermaid\b/u.test(s[2].trim())&&d?.notices.push({code:"docx-stage",message:"该图源尚未匹配到本轮结构化图件,按原字代码保留供审阅,不当作已渲染施工图。"});continue}let t=function(a,b){let c=a[b+1]?.trim()===""?b+2:b+1;if(c>=a.length||!ap(a[b]||"")||!ao(a[c]||""))return null;let d=aq(a[b]||"").map(a=>ar(a)),e=aq(a[c]||"").length,f=[],g=c+1;for(;g<a.length&&ap(a[g]||"");){var h;if(h=g,ao(((a[h+1]?.trim()===""?a[h+2]:a[h+1])||"").trim()))break;f.push(aq(a[g]||"").map(a=>ar(a))),g+=1}let i=Math.max(2,d.length,e,...f.map(a=>a.length)),j=a=>{let b=a.slice(0,i);for(a.length>i&&i>0&&(b[i-1]=[b[i-1],...a.slice(i)].filter(Boolean).join(" | "));b.length<i;)b.push("");return b};return{rows:[j(d),...f.map(j)],next:g,headerRow:!0}}(h,a);if(t){j.push(aC(t.rows,e,t.headerRow,c?.pageBox?.bodyWidth??aw(b).bodyWidth,c?.monoColor),az("",{spacingAfter:80,line:e.lineTwips})),a=t.next;continue}let u=!l&&ap(o)?function(a,b){let c=[],d=b;for(;d<a.length&&ap(a[d]||"");)c.push(a[d]||""),d+=1;let e=Math.max(...c.map(a=>aq(a).length),0);return c.length<2||e<2?null:{rows:c,columns:e,next:d}}(h,a):null;if(u){j.push(aC(u.rows.map(a=>aq(a).map(a=>ar(a))),e,!1,c?.pageBox?.bodyWidth??aw(b).bodyWidth),az("",{spacingAfter:80,line:e.lineTwips})),d&&(d.ops.headerlessTableRendered+=1,d.notices.push({code:"headerless-table",message:`docx 阶段按数据行渲染无表头表格 ${u.rows.length} 行 \xd7 ${u.columns} 列(首行不冒充表头):该表在源文档缺表头,需回源补齐`})),a=u.next;continue}if(ao(o)){a+=1;continue}let v=/^(#{1,4})\s+(.+)$/u.exec(o);if(v){let b=ar(v[2]);j.push("目录"===b?az(b,{bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):(()=>{var a;let c=(a=v[1].length,2===a?az(b,{styleId:"Heading1",outlineLevel:0,bold:!0,size:e.h1HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===a?az(b,{styleId:"Heading2",outlineLevel:1,bold:!0,size:e.h2HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:180,spacingAfter:100,keepNext:!0}):az(b,{styleId:"Heading3",outlineLevel:2,bold:!0,size:e.h3HalfPoints,line:e.lineTwips,fontEastAsia:e.fontHeading,fontAscii:e.fontHeadingAscii,align:"left",spacingBefore:120,spacingAfter:80,keepNext:!0})),d=n.get(b);if(!d)return c;let f=d.split("_").at(-1);return c.replace("</w:pPr>",`</w:pPr><w:bookmarkStart w:id="${f}" w:name="${d}"/>`).replace("</w:p>",`<w:bookmarkEnd w:id="${f}"/></w:p>`)})()),"目录"===b&&(l=!0,p=j.length),a+=1;continue}let w=ar(o),x=function(a){let b=/^\s*(\d+(?:\.\d+){0,2})([.、])\s+(.+)$/u.exec(a);return b?{level:Math.min(b[1].split(".").length-1,2),marker:`${b[1]}${b[2]}`,text:ar(b[3])}:null}(o),y=function(a){let b=/^\s*[-*+]\s+(.+)$/u.exec(a);return b?ar(b[1]):null}(o);if(!l&&x){let b=0===x.level?720:1===x.level?1080:1440,c=0===x.level?360:1===x.level?420:480;j.push(az(`${x.marker} ${x.text}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:b,hanging:c,spacingAfter:60})),a+=1;continue}if(!l&&y){j.push(az(`• ${y}`,{styleId:"ListParagraph",size:g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,indentLeft:720,hanging:360,spacingAfter:60})),a+=1;continue}let z=h.slice(a+1).find(a=>""!==a.trim()),A=/^!\[([^\]]*)\]\([^)]+\)\s*$/u.exec(z?.trim()??"")?.[1];if(!l&&A&&w===A){j.push(aG(w,e)),a+=1;continue}if(!l&&aD(o)&&z&&ap(z.trim())){j.push(aG(w,e)),d&&(d.ops.captionStyled+=1),a+=1;continue}let B=/^\*\*[^*]+\*\*\s*$/u.test(o)&&w.length<=40,C=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(o)||/^([一二三四五六七八九十]+)/u.test(w)||/^[一二三四五六七八九十]+、/u.test(w);j.push(l?function(a,b,c,d=9e3){let e=/^\s*\d+\.\d+\s+\S/u.test(a),f=az(ar(a),{bold:!e,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontBody,fontAscii:b.fontBodyAscii,spacingAfter:e?30:80,indentLeft:420*!!e,align:"left"});return c?f.replace("</w:pPr>",`<w:tabs><w:tab w:val="right" w:leader="dot" w:pos="${d}"/></w:tabs></w:pPr>`).replace("</w:p>",`<w:r><w:tab/></w:r><w:fldSimple w:instr="PAGEREF ${c} \\h"><w:r><w:t></w:t></w:r></w:fldSimple></w:p>`):f}(o,e,n.get(w),c?.pageBox?.bodyWidth):az(w,{bold:C||B,size:B?Math.max(e.bodyHalfPoints+2,30):g,line:e.lineTwips,fontEastAsia:e.fontBody,fontAscii:e.fontBodyAscii,align:B?"left":"both",firstLine:C||B?0:560,spacingBefore:B?120:80*!!C,spacingAfter:B?60:void 0})),a+=1}q();let r=j.join("");if(d){let b=aX(a,r);b.conserved||d.blockers.push({code:"content-not-conserved",line:0,message:`docx 渲染阶段存在未声明的正文改动(产物文本去标记比对):第 ${b.position} 字符附近分歧(入口「${b.sourceContext}」→ 产物「${b.productContext}」)`})}return r}async function aI(a,b,c,d=[],e=!0){a.folder("word")?.file("styles.xml",function(a){let b=ax(a),c=`w:ascii="${ab(b.fontBodyAscii)}" w:hAnsi="${ab(b.fontBodyAscii)}" w:eastAsia="${ab(b.fontBody)}" w:cs="${ab(b.fontBodyAscii)}"`,d=(a,d,e,f,g,h,i)=>`<w:style w:type="paragraph" w:styleId="${a}"><w:name w:val="${d}"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:uiPriority w:val="${9+f}"/><w:qFormat/><w:rPr><w:b/><w:rFonts ${c}/><w:sz w:val="${e}"/><w:szCs w:val="${e}"/></w:rPr><w:pPr><w:keepNext/><w:keepLines/><w:outlineLvl w:val="${f}"/><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:before="${g}" w:after="${h}"/>${i?`<w:jc w:val="${i}"/>`:""}</w:pPr></w:style>`;return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts ${c}/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style>${d("Heading1","heading 1",Math.max(b.h1HalfPoints,24),0,260,180,"center")}${d("Heading2","heading 2",Math.max(b.h2HalfPoints,24),1,180,100)}${d("Heading3","heading 3",Math.max(b.h3HalfPoints,22),2,120,80)}<w:style w:type="paragraph" w:styleId="ListParagraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:uiPriority w:val="34"/><w:qFormat/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:style></w:styles>`}(c)),a.folder("word")?.file("settings.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:updateFields w:val="true"/><w:compat><w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/></w:compat></w:settings>'),e&&a.folder("word")?.file("footer.xml",`<?xml version="1.0" encoding="UTF-8"?><w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:pPr><w:jc w:val="center"/></w:pPr>${ay("第 ",{size:21})}<w:fldSimple w:instr="PAGE"/>${ay(" 页 / 共 ",{size:21})}<w:fldSimple w:instr="NUMPAGES"/>${ay(" 页",{size:21})}</w:p></w:ftr>`),a.folder("word")?.file("fontTable.xml",function(a){let b=ax(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="${ab(b.fontBody)}"><w:charset w:val="86"/><w:family w:val="roman"/></w:font><w:font w:name="${ab(b.fontBodyAscii)}"><w:family w:val="roman"/></w:font></w:fonts>`}(c)),a.folder("docProps")?.file("core.xml",function(a){let b=new Date().toISOString();return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${ab(a)}</dc:title><dc:creator>Customize Agent</dc:creator><cp:lastModifiedBy>Customize Agent</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">${b}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${b}</dcterms:modified></cp:coreProperties>`}(b)),a.folder("docProps")?.file("app.xml",'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Customize Agent</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>1.0</AppVersion></Properties>');let f=a.folder("word")?.folder("media");for(let a of d)f?.file(a.fileName,a.buffer);let g=a.file("word/_rels/document.xml.rels"),h=g?await g.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';for(let[a,b,c]of[["rStyle","http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles","styles.xml"],["rSettings","http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings","settings.xml"],["rFontTable","http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable","fontTable.xml"]])h.includes(b)||(h=h.replace("</Relationships>",`<Relationship Id="${a}" Type="${b}" Target="${c}"/></Relationships>`));for(let a of(e&&!h.includes('Id="rFooter"')&&(h=h.replace("</Relationships>",'<Relationship Id="rFooter" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer.xml"/></Relationships>')),d))h.includes(`Id="${a.relationshipId}"`)||(h=h.replace("</Relationships>",`<Relationship Id="${a.relationshipId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${a.fileName}"/></Relationships>`));a.folder("word")?.folder("_rels")?.file("document.xml.rels",h);let i=a.file("_rels/.rels"),j=i?await i.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>';j.includes("metadata/core-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rCore" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>')),j.includes("extended-properties")||(j=j.replace("</Relationships>",'<Relationship Id="rApp" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>')),a.folder("_rels")?.file(".rels",j);let l=a.file("[Content_Types].xml"),m=l?await l.async("string"):'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/></Types>';for(let a of new Set(d.map(a=>k.extname(a.fileName).slice(1).toLowerCase()).filter(Boolean))){let b="jpg"===a||"jpeg"===a?"image/jpeg":"png"===a?"image/png":"gif"===a?"image/gif":"webp"===a?"image/webp":void 0;b&&!m.includes(`Extension="${a}"`)&&(m=m.replace("</Types>",`<Default Extension="${a}" ContentType="${b}"/></Types>`))}let n=[["/word/styles.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"],["/word/settings.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"],["/word/fontTable.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"],["/docProps/core.xml","application/vnd.openxmlformats-package.core-properties+xml"],["/docProps/app.xml","application/vnd.openxmlformats-officedocument.extended-properties+xml"]];for(let[a,b]of(e&&n.push(["/word/footer.xml","application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"]),n))m.includes(`PartName="${a}"`)||(m=m.replace("</Types>",`<Override PartName="${a}" ContentType="${b}"/></Types>`));a.file("[Content_Types].xml",m)}async function aJ(a,b,c,d,e=process.cwd(),f,g,h=!1){let i=async a=>{let b=await C().loadAsync(a),c=await p(b,h);return c.changedFamilies.length&&f?.notices.push({code:"docx-stage",message:`审阅中文显示使用随文档嵌入的Noto Sans CJK SC;替代${c.changedFamilies.join("、")},不宣称满足原指定字体要求。`}),c.embedded?b.generateAsync({type:"nodebuffer"}):a},j=function(a,b){let c=String(a||"").trim();if(!c)return{};let d=(0,X.n7)(c,[k.resolve(b),k.resolve((0,D.Gl)(b),"assets"),k.resolve(z.tmpdir()),k.join((0,v.J0)(),"export-templates")],{mustExist:!0,requireFile:!0});return d.ok?".docx"!==k.extname(d.absolute).toLowerCase()?{rejected:{path:c,reason:"模板必须是 .docx 文件"}}:{resolved:d.absolute}:{rejected:{path:c,reason:(0,X.vZ)(d.reason)}}}(d,e);if(j.rejected){let d=`DOCX 模板路径被拒绝(${j.rejected.reason}):${j.rejected.path}。已回退标准生成路径(正文正确、未套模板样式)。允许的来源:本项目目录 / 生成资产目录 / 导出模板目录。`;console.error(`[export] ${d}`);let h=await aL(a,b,c,void 0,e,f,d,g);return h.buffer=await aK(await i(h.buffer),f),h}let l=await aL(a,b,c,j.resolved,e,f,void 0,g);return l.buffer=await aK(await i(l.buffer),f),l}async function aK(a,b){let c=await C().loadAsync(a),d=c.file("word/document.xml");if(!d)return a;let e=await d.async("string");if(!/PAGEREF _doc_heading_/u.test(e))return a;let f=new Map;for(let a of e.matchAll(/<w:p\b[^>]*>[\s\S]*?<\/w:p>/gu)){let b=/<w:bookmarkStart\b[^>]*w:name="(_doc_heading_\d+)"/u.exec(a[0])?.[1];b&&f.set(b,aV(a[0]).replace(/\n/gu,""))}let g=(a,b)=>a.replace(/(<w:fldSimple w:instr="PAGEREF (_doc_heading_\d+) [^"]*">)[\s\S]*?<\/w:fldSimple>/gu,(a,c,d)=>`${c}<w:r><w:t>${b[f.get(d)??""]??""}</w:t></w:r></w:fldSimple>`);for(let d=0;d<3;d+=1){let d=await K(a);if(!d.headingPages||!Object.keys(d.headingPages).length)return b?.notices.push({code:"toc-reconcile",message:`DOCX目录保留可更新的原生页码域,实际页码缓存未取得:${d.unavailableReason??"渲染器没有输出章节书签"}`}),a;let f=g(e,d.headingPages);if(f===e)return a;e=f,c.file("word/document.xml",e),a=await c.generateAsync({type:"nodebuffer"})}return c.file("word/document.xml",g(e,{})),b?.notices.push({code:"toc-reconcile",message:"DOCX目录页码缓存的实际排版校验未收敛,已清空缓存;原生PAGEREF域保留,须更新后复核"}),c.generateAsync({type:"nodebuffer"})}async function aL(a,b,c,d,e,f,g,h){let j=h?.headersFooters!=="forbidden",k=aw(c),l={projectRoot:e,images:[],pageBox:k,monoColor:h?.monoColor,...f?{audit:f}:{}},m=await aB(b,e,f);m.size>0&&(l.rasterizedSvg=m);let n=aH(b,c,l,f),o={expected:[...b.matchAll(/!\[[^\]]*\]\(([^)]+)\)/gu)].length,embedded:l.images.length,...l.imageLayoutIssues?.length?{layoutIssues:l.imageLayoutIssues}:{}},p=g;if(d&&i.existsSync(d)){let b=await C().loadAsync(i.readFileSync(d)),e=b.file("word/document.xml");if(e){let f=await e.async("string");if(/\{\{content\}\}/u.test(f))return b.file("word/document.xml",function(a,b){let c=b?.page;if(!c)return a;let d=aw(b),e=`<w:pgSz w:w="${d.width}" w:h="${d.height}"${d.landscape?' w:orient="landscape"':""}/>`,f=a=>{let b=a;c.paper&&(b=/<w:pgSz\b[^>]*\/>/u.test(b)?b.replace(/<w:pgSz\b[^>]*\/>/u,e):b.replace("</w:sectPr>",`${e}</w:sectPr>`));let d=/<w:pgMar\b[^>]*\/>/u.exec(b)?.[0]??"<w:pgMar/>";for(let[a,b]of[["marginTop","top"],["marginRight","right"],["marginBottom","bottom"],["marginLeft","left"],["gutter","gutter"]])if(void 0!==c[a]){let e=` w:${b}="${av(c[a],0)}"`,f=RegExp(`\\s+w:${b}="[^"]*"`,"u");d=f.test(d)?d.replace(f,e):d.replace("/>",`${e}/>`)}return/<w:pgMar\b[^>]*\/>/u.test(b)?b.replace(/<w:pgMar\b[^>]*\/>/u,d):b.replace("</w:sectPr>",`${d}</w:sectPr>`)};return/<w:sectPr\b/u.test(a)?a.replace(/<w:sectPr\b[^>]*>[\s\S]*?<\/w:sectPr>/gu,f):a.replace("</w:body>",`${f("<w:sectPr></w:sectPr>")}</w:body>`)}(f.replace(/\{\{title\}\}/gu,ab(a)).replace(/\{\{content\}\}/gu,n),c)),await aI(b,a,c,l.images,j),{buffer:await b.generateAsync({type:"nodebuffer"}),imageReceipt:o};console.error(`[export] 模板缺少 {{content}} 占位符,已回退标准生成路径(正文正确、未套模板样式):${d}`),p=`模板缺少 {{content}} 占位符,已回退标准生成路径(未套模板样式)`}}let q=c?.page||{},r=new(C());return r.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>${n}<w:sectPr>${j?'<w:footerReference w:type="default" r:id="rFooter"/>':""}<w:pgSz w:w="${k.width}" w:h="${k.height}"${k.landscape?' w:orient="landscape"':""}/><w:pgMar w:top="${av(q.marginTop,2.5)}" w:right="${av(q.marginRight,2)}" w:bottom="${av(q.marginBottom,2)}" w:left="${av(q.marginLeft,2)}"${q.gutter?` w:gutter="${av(q.gutter,0)}"`:""}/></w:sectPr></w:body></w:document>`),await aI(r,a,c,l.images,j),{buffer:await r.generateAsync({type:"nodebuffer"}),templateWarning:p,imageReceipt:o}}function aM(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function aN(a){return a.replace(/<[^>]*>/gu,"").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/ | /gu," ").trim()}function aO(a){let b=new Map,c=new Set,d=0;return a.replace(/<(h[23])([^>]*)>([\s\S]*?)<\/\1>/gu,(a,e,f,g)=>{let h=aN(g);if("目录"===h)return a;let i=`document-heading-${++d}`;return b.has(h)?c.add(h):b.set(h,i),`<${e}${f} id="${i}">${g}</${e}>`}).replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>|<h2[^>]*>)/u,(a,d,e,f)=>{let g=e.split(/<br\s*\/?>|<\/p>|<\/li>/gu).flatMap(a=>{let d=aN(a);if(!d)return[];let e=c.has(d)?void 0:b.get(d),f=/^\d+\.\d+\s/u.test(d)?"toc-section":"toc-chapter";return[`<p class="${f}">${e?`<a href="#${e}"><span>${ab(d)}</span><span class="toc-page" data-toc-title="${ab(d)}"></span></a>`:ab(d)}</p>`]});return`<section class="document-toc">${d}${g.join("")}</section>${f}`})}function aP(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function aQ(a){return a.split(/\r?\n/u).map(a=>/^(#{2,4})\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({level:a[1].length,title:ar(a[2])})).filter(a=>a.title&&"目录"!==a.title)}function aR(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a]||"",e=/^(`{3,}|~{3,})/u.exec(d.trim());if(e){let b=RegExp(`^${e[1][0]}{${e[1].length},}\\s*$`,"u");for(a++;a<c.length&&!b.test(c[a].trim());)a++;continue}if(!ap(d))continue;let f=c[a+1]?.trim()===""?a+2:a+1;if(f<c.length&&ao(c[f]||"")){let e=[],g=f+1;for(;g<c.length&&ap(c[g]||"");)e.push(c[g]||""),g+=1;0===e.length&&b.push(`第 ${a+1} 行表格只有表头,没有数据行`);let h=[d,...e].map(a=>aq(a).length);Math.max(...h)-Math.min(...h)>2&&b.push(`第 ${a+1} 行附近表格列数差异较大,导出版式可能异常`),a=g-1;continue}a+1<c.length&&ap(c[a+1]||"")&&b.push(`第 ${a+1} 行附近疑似裸表格(缺少表头或分隔线),导出版式可能异常`)}return(a.match(/```/gu)||[]).length%2==1&&b.push("存在未闭合代码块,可能影响后续内容导出"),[...new Set(b)].slice(0,20)}function aS(a,b){let c=aP(a),d=b?aP(b):void 0,e=[];c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格");let f=aQ(a);0===f.length&&e.push("正文缺少章节标题"),f.some((a,b)=>b>0&&a.level-f[b-1].level>1)&&e.push("标题层级存在跳级,可能影响导出目录和导航");let g=a.split(/\r?\n/u).map(a=>ar(a)).filter(a=>a.length>0&&!/^#+\s/u.test(a));return g.some(a=>a.length<=1)&&e.push("正文存在孤立字或残缺段落"),g.some(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a))&&e.push("正文存在疑似截断句或未完结段落"),g.some(a=>a.length>380)&&e.push("正文存在过长段落,建议拆分以改善导出版式"),e.push(...aR(a)),[...new Set(e)]}function aT(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\r?\n/gu,"\n").split("\n").filter(a=>!ao(a.trim())&&!/^\s*```/u.test(a)).map(a=>ar(a.replace(/^#{1,6}\s+/u,"").replace(/^\s*[-*+]\s+/u,""))).join("").replace(/(?<!\\)\|/gu,"").replace(/\s+/gu,"")}function aU(a,b){if(a===b)return{conserved:!0};let c=0,d=Math.min(a.length,b.length);for(;c<d&&a[c]===b[c];)c+=1;return{conserved:!1,position:c,sourceContext:a.slice(Math.max(0,c-20),c+20),productContext:b.slice(Math.max(0,c-20),c+20)}}function aV(a){return[...a.matchAll(/<w:t(?:\s[^>]*)?>([\s\S]*?)<\/w:t>/gu)].map(a=>(a[1]||"").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/&/gu,"&")).join("\n")}function aW(a){return aT(a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]*)\]\([^)]*\)/gu,"$1").replace(/\[\[PAGE_BREAK\]\]/gu,"").replace(/[•·]/gu,"").replace(RegExp(aE,"gu"),""))}function aX(a,b){return aU(aW(a),aW(aV(b)))}function aY(a,b){let c=$();for(let b of aR(a))c.blockers.push({code:"content-not-conserved",line:0,message:b});for(let b of(aT((0,U._D)(a).markdown)!==aT(a)&&c.notices.push({code:"toc-reconcile",message:"目录条目与正文章节不一致;审阅文件保留原稿,须在正文模型中修正"}),(0,y.q)(a)))c.blockers.push({code:"content-not-conserved",line:b.rowLine,message:`表格字段不守恒:${b.actual}/${b.expected},不能在渲染时补造字段`});return{markdown:a,baselineMarkdown:b??"",issues:aS(a,b),audit:c}}async function aZ(a,b,c,d,e=!1,f){return ah(function(a,b,c,d=!1){let e=ax(c),f=aO(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${ab(a)}</title><style>${function(a,b=!1){return`
|
|
2
2
|
@page{size:${a.paper};margin:${a.marginTop} ${a.marginRight} ${a.marginBottom} ${a.marginLeft}}
|
|
3
3
|
*{box-sizing:border-box}
|
|
4
4
|
html,body{margin:0;padding:0;background:#fff}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=8202,a.ids=[8202],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83823:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(
|
|
1
|
+
"use strict";(()=>{var a={};a.id=8202,a.ids=[8202],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83823:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(25358),k=c(60939),l=c(70610);async function m(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,projectRoot:h}=a.body;if(!h)return b.status(400).json({error:"projectRoot required"});try{let a=(0,k.iA)({promptIds:c??[],requirement:d,projectRoot:h,title:e,projectName:f}),i=(0,j.ZRt)(h,(0,k.TQ)(a),[...(0,l.Z0)(c??[],{projectRoot:h}).map(a=>a.content),d||""].filter(Boolean).join("\n\n"),g?{materialRoot:g}:{});if(i.ambiguous||!i.locked||0===i.selectedFiles.length)return b.status(422).json({error:`结构预览失败:资料范围未锁定:${i.reason}`,issues:[{level:"error",message:`资料范围未锁定:${i.reason}`,missing:[]}],missing:[]});return b.status(200).json({title:a.title,documentType:a.documentType,chapterCount:a.chapters.length,chapters:a.chapters.map((b,c)=>({title:b.title,sections:a.derivation.perChapter[c].sectionsFromOutline,candidateSections:a.derivation.perChapter[c].sectionsFromSkills})),derivation:a.derivation,materialScope:{root:i.selectedRoots[0],fileCount:i.selectedFiles.length,reason:i.reason}})}catch(c){let a=(0,k.MW)(c);return b.status(422).json({error:`结构预览失败:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}}let n=(0,i.j)("api/documents/generate/preview",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate/preview",pathname:"/api/documents/generate/preview",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/documents/generate/preview"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/documents/generate/preview",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,5746,5304,3806,2434,1243,1001,9666],()=>b(b.s=83823));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=6011,a.ids=[6011],a.modules={13684:(a,b,c)=>{c.r(b),c.d(b,{config:()=>v,default:()=>u,handler:()=>x});var d={};c.r(d),c.d(d,{default:()=>r});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(70949),j=c(16006),k=c(
|
|
1
|
+
"use strict";(()=>{var a={};a.id=6011,a.ids=[6011],a.modules={13684:(a,b,c)=>{c.r(b),c.d(b,{config:()=>v,default:()=>u,handler:()=>x});var d={};c.r(d),c.d(d,{default:()=>r});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(70949),j=c(16006),k=c(25358),l=c(76760),m=c(45462),n=c(60939),o=c(70610),p=c(46026);async function q(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,maxEvidencePerChapter:h,projectRoot:j,resumeDocumentId:q}=a.body;if(!j)return b.status(400).json({error:"projectRoot required"});let r=f??(q?(0,i.getGeneratedDocument)(q,j)?.projectName:void 0),s=function(a){try{return{spec:(0,n.iA)(a),promptTexts:(0,o.Z0)(a.promptIds,{projectRoot:a.projectRoot}).map(a=>a.content)}}catch(a){return{issues:(0,n.MW)(a)}}}({promptIds:c??[],requirement:d,projectRoot:j,title:e,projectName:r});if("issues"in s){let a=s.issues??(0,n.MW)(Error("文档规格派生失败"));return b.status(422).json({error:`生成前检查未通过:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}let{spec:t,promptTexts:u}=s,v=function(a,b,c,d,e){let f=[...c,d||""].filter(Boolean).join("\n\n");return(0,k.ZRt)(a,(0,n.TQ)(b),f,e?{materialRoot:e}:{})}(j,t,u,d,g);if(v.ambiguous||!v.locked||0===v.selectedFiles.length)return b.status(422).json({error:`生成前检查未通过:资料范围未锁定:${v.reason}`,issues:[{level:"error",message:`资料范围未锁定:${v.reason}`,missing:[]}]});let w=[...function(a){if(0===a.length)return[];let b=[],c=new Map,d=new Map;for(let b of a){let{kind:a}=(0,m.O)(b);c.set(a,(c.get(a)??0)+1);let e=d.get(a)??[];e.length<3&&e.push(l.basename(b)),d.set(a,e)}let e=a=>{let b=c.get(a)??0;return b>0?`${b} 份(${(d.get(a)??[]).join("、")}${b>3?" 等":""})`:"**缺失**"},f=`招标 ${e("tender_document")}|清单 ${e("bill_of_quantities")}|图纸 ${e("drawing")}|补疑 ${e("addendum")}`;for(let a of[{kind:"tender_document",label:"招标文件",hint:"缺招标文件则编制规格、评审要求与响应锚点无从提取,要求实体响应(权重 0.30)无判定对象"},{kind:"bill_of_quantities",label:"工程量清单",hint:"缺清单则工程量/规格/资源计划类权威值全部不可推导,蓝图不可用"},{kind:"drawing",label:"图纸/设计资料",hint:"缺图纸则施工方法、专业接口与构造做法无依据,针对性章无法成稿"}].filter(a=>(c.get(a.kind)??0)===0))b.push({level:"error",message:`资料不齐备:未识别到${a.label}。${a.hint}。请补充后重新索引再生成。(当前资料构成:${f})`});return(c.get("addendum")??0)===0&&b.push({level:"warning",message:`未识别到补疑/答疑澄清资料(若本项目确无答疑可忽略)。当前资料构成:${f}`}),b}(v.selectedFiles),...(0,p.$)(j,v.selectedFiles)],x=w.filter(a=>"error"===a.level);if(x.length>0)return b.status(422).json({error:`生成前检查未通过:${x[0].message}`,issues:[...x,...w.filter(a=>"warning"===a.level)]});let y=(0,i.YL)({promptIds:c??[],requirement:d,title:t.title,projectName:r,materialRoot:v.selectedRoots[0],maxEvidencePerChapter:h,resumeDocumentId:q},j);b.status(202).json({...y,documentSpec:{id:t.id,title:t.title,documentType:t.documentType,chapterCount:t.chapters.length},derivation:t.derivation,materialScope:{root:v.selectedRoots[0],fileCount:v.selectedFiles.length,reason:v.reason},warnings:w})}let r=(0,j.j)("api/documents/generate",q);var s=c(68970),t=c(50296);let u=(0,h.M)(d,"default"),v=(0,h.M)(d,"config"),w=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate",pathname:"/api/documents/generate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function x(a,b,c){let d=await w.prepare(a,b,{srcPage:"/api/documents/generate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,s.getTracer)(),e=d.getActiveScopeSpan(),j=w.instrumentationOnRequestError.bind(w),k=async e=>w.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:w.isDev,page:"/api/documents/generate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==t.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(t.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:s.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(w.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,5746,5304,3806,2434,1243,1001,9666],()=>b(b.s=13684));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=5189,a.ids=[5189],a.modules={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":"
|
|
1
|
+
"use strict";(()=>{var a={};a.id=5189,a.ids=[5189],a.modules={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":"279fd5e41d98af82751903f8ea0267af84a75c794a35915a6e294777024190f8","semanticFingerprints":{"projectFacts":"a58bf339cebe80a543693af69b0850a4f0dfbdaf57adc5c341a13bfa5210fc5d","documentGeneration":"3626cda17c6cd921a51e98a76639ef8ce73162947dc97c3dd04da51fd0b3be0e"},"gitCommit":"b61296b7856953809236a27f664ec98451f00893","serverVersion":"4.60.32","sourceFiles":753,"capturedAt":"2026-10-14T15:35:10.245Z"}';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})},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},51195:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(29021),j=c(33873),k=c(12152);let l=[(0,j.join)(process.cwd(),".next","BUILD_ID"),(0,j.join)(process.cwd(),"apps","server",".next","BUILD_ID")].find(i.existsSync),m=process.env.CUSTOMIZE_DASHBOARD_BUILD_ID??null;if(!m&&l)try{m=(0,i.readFileSync)(l,"utf-8").trim()}catch{m=null}function n(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{b.status(200).json({status:"ok",uptime:Math.round(process.uptime()),timestamp:new Date().toISOString(),buildId:m,buildIdentity:(0,k.S)()??null,pid:process.pid})}catch(a){console.error("[api] health",a),b.status(500).json({error:"Internal server error"})}}var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/health",pathname:"/api/health",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/health"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/health",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")}};var b=require("../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=51195));module.exports=c})();
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
"use strict";(()=>{var a={};a.id=1622,a.ids=[1622],a.modules={191:(a,b,c)=>{c.d(b,{cW:()=>p,hH:()=>q,mG:()=>t,wF:()=>o});var d=c(51342),e=c(29021),f=c.n(e),g=c(33873),h=c.n(g),i=c(55511),j=c.n(i);let k=h().join((0,d.J0)(),"logs"),l=h().join(k,"errors.jsonl"),m="errors-";function n(){try{return f().readdirSync(k).filter(a=>a.startsWith(m)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}}function o(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${j().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{f().mkdirSync(k,{recursive:!0}),function(){try{if(f().statSync(l).size<=2097152)return;f().renameSync(l,h().join(k,`${m}${Date.now()}.jsonl`)),function(){for(let a of n().slice(20))try{f().rmSync(h().join(k,a),{force:!0})}catch{}}()}catch{}}(),f().appendFileSync(l,`${JSON.stringify(d)}
|
|
2
|
-
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function p(a=200){let b=[l,...n().map(a=>h().join(k,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return f().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function q(){let a=0;if(f().existsSync(l))try{f().rmSync(l,{force:!0}),a++}catch{}for(let b of n())try{f().rmSync(h().join(k,b),{force:!0}),a++}catch{}return a}let r=!1;function s(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function t(){r||(r=!0,process.on("uncaughtException",s("uncaughtException",a=>o({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",s("unhandledRejection",a=>o({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>f});var d=c(191),e=c(47774);function f(a,b){return async function(c,f){let g=async()=>{try{await b(c,f)}catch(h){if(h instanceof e.Bc){f.headersSent||f.status(503).json({error:h.message});return}let g=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:h,req:c});console.error(`[${a}]`,g.id,h),f.headersSent||f.status(500).json({error:h instanceof Error?h.message:"Internal server error",requestId:g.id})}};if("api/system/reset"===a||a.startsWith("api/health"))return void await g();try{await (0,e.i0)(g)}catch(a){if(a instanceof e.Bc&&!f.headersSent)f.status(503).json({error:a.message});else throw a}}}(0,d.mG)()},29021:a=>{a.exports=require("fs")},29281:(a,b,c)=>{c.d(b,{
|
|
2
|
+
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function p(a=200){let b=[l,...n().map(a=>h().join(k,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return f().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function q(){let a=0;if(f().existsSync(l))try{f().rmSync(l,{force:!0}),a++}catch{}for(let b of n())try{f().rmSync(h().join(k,b),{force:!0}),a++}catch{}return a}let r=!1;function s(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function t(){r||(r=!0,process.on("uncaughtException",s("uncaughtException",a=>o({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",s("unhandledRejection",a=>o({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>f});var d=c(191),e=c(47774);function f(a,b){return async function(c,f){let g=async()=>{try{await b(c,f)}catch(h){if(h instanceof e.Bc){f.headersSent||f.status(503).json({error:h.message});return}let g=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:h,req:c});console.error(`[${a}]`,g.id,h),f.headersSent||f.status(500).json({error:h instanceof Error?h.message:"Internal server error",requestId:g.id})}};if("api/system/reset"===a||a.startsWith("api/health"))return void await g();try{await (0,e.i0)(g)}catch(a){if(a instanceof e.Bc&&!f.headersSent)f.status(503).json({error:a.message});else throw a}}}(0,d.mG)()},29021:a=>{a.exports=require("fs")},29281:(a,b,c)=>{c.d(b,{IS:()=>k,R1:()=>l,jU:()=>m});var d=c(96770),e=c(29021),f=c(33873),g=c(51342),h=c(47774);let i=globalThis,j=i.__customizeConfigStores??=new Map;function k(){(0,h.jF)();let a=(0,g.J0)();return j.has(a)||j.set(a,new d.ConfigStore(a)),j.get(a)}function l(){j.clear()}function m(a={}){let b;(0,h.jF)();let c=f.join((0,g.J0)(),"config.json"),d=e.existsSync(c);if(d&&!e.statSync(c).isFile())throw Error(`配置路径不是普通文件,无法清除:${c}`);let i=null;if(d){b=f.join(f.dirname(c),`config.backup-${new Date().toISOString().replace(/[:.]/gu,"-")}.json`),e.copyFileSync(c,b);try{let a=JSON.parse(e.readFileSync(c,"utf-8"));i=a&&"object"==typeof a&&!Array.isArray(a)?a:null}catch{i=null}}let j="models"==("all"===a.scope?"all":"models")&&null!==i;return j?e.writeFileSync(c,`${JSON.stringify({...i,models:{active:null,list:[]}},null,2)}
|
|
3
|
+
`,{mode:384}):d&&e.rmSync(c,{force:!0}),l(),j||k().load(),{mode:j?"models":"all",backupPath:b,sourceParsed:null!==i}}},33873:a=>{a.exports=require("path")},47774:(a,b,c)=>{c.d(b,{Bc:()=>g,b:()=>h,i0:()=>j,jF:()=>i,jp:()=>k,mh:()=>l,wx:()=>m});let d=globalThis,e=d.__customizeStorageMaintenance??={active:!1},f=d.__customizeStorageApiWriters??=new Set;class g extends Error{constructor(){super("系统清空正在执行,暂不接收新的存储访问"),this.name="StorageMaintenanceError"}}function h(){return e.active}function i(){if(e.active)throw new g}async function j(a){i();let b=Promise.resolve(a());f.add(b);try{return await b}finally{f.delete(b)}}function k(){return[...f]}function l(){if(e.active)throw Error("已有系统清空任务正在执行");e.active=!0;let a=!1;return()=>{a||(a=!0,e.active=!1)}}async function m(a,b=1e4){let c;if(!a.length)return!0;try{return await Promise.race([Promise.allSettled(a).then(()=>!0),new Promise(a=>{c=setTimeout(()=>a(!1),b)})])}finally{c&&clearTimeout(c)}}},48161:a=>{a.exports=require("node:os")},51342:(a,b,c)=>{c.d(b,{Bn:()=>k,J0:()=>h});var d=c(73024),e=c(48161),f=c(96770),g=c(76760);function h(){return(0,f.resolveAgentStorageRoot)(process.env.CUSTOMIZE_AGENT_HOME?.trim()||e.homedir())}function i(){return g.join(h(),"state.json")}function j(){try{let a=JSON.parse(d.readFileSync(i(),"utf8")),b=a?.firstStartedAt;return"number"==typeof b&&Number.isFinite(b)&&b>0?{firstStartedAt:b}:null}catch{return null}}function k(a=Date.now()){return Math.max(0,Math.round((a-function(a=Date.now()){let b=j();if(b)return b.firstStartedAt;try{let b=i();d.mkdirSync(g.dirname(b),{recursive:!0});let c=`${b}.${process.pid}.${Date.now()}.tmp`;return d.writeFileSync(c,JSON.stringify({firstStartedAt:a}),"utf8"),d.renameSync(c,b),a}catch{return j()?.firstStartedAt??a}}(a))/1e3))}},55511:a=>{a.exports=require("crypto")},71880:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(29281);let k=(0,i.j)("api/kb/features",function(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let a=(0,j.IS)().getEmbedding(),c=String(a.provider),d="openai-compatible"===c?`OpenAICompatibleEmbeddingProvider (${a.model||"unconfigured"})`:`LocalTransformersEmbeddingProvider (${a.model||"BAAI/bge-small-zh-v1.5"})`;b.status(200).json({vectorStore:"SQLite + HNSWLib",embeddingProvider:d,builtinExtractors:["PDF/OCR","Office","Spreadsheet","Image OCR","CAD","Diagram","Structured Data"],dedupEngine:"MinHash + SHA-256",chunker:"BGE WordPiece TextChunker"})}catch(a){console.error("[api] kb/features",a),b.status(500).json({error:"Internal server error"})}});var l=c(68970),m=c(50296);let n=(0,h.M)(d,"default"),o=(0,h.M)(d,"config"),p=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/kb/features",pathname:"/api/kb/features",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/features"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,l.getTracer)(),e=d.getActiveScopeSpan(),j=p.instrumentationOnRequestError.bind(p),k=async e=>p.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:p.isDev,page:"/api/kb/features",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=71880));module.exports=c})();
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";(()=>{var a={};a.id=3846,a.ids=[3846],a.modules={191:(a,b,c)=>{c.d(b,{cW:()=>p,hH:()=>q,mG:()=>t,wF:()=>o});var d=c(51342),e=c(29021),f=c.n(e),g=c(33873),h=c.n(g),i=c(55511),j=c.n(i);let k=h().join((0,d.J0)(),"logs"),l=h().join(k,"errors.jsonl"),m="errors-";function n(){try{return f().readdirSync(k).filter(a=>a.startsWith(m)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}}function o(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${j().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{f().mkdirSync(k,{recursive:!0}),function(){try{if(f().statSync(l).size<=2097152)return;f().renameSync(l,h().join(k,`${m}${Date.now()}.jsonl`)),function(){for(let a of n().slice(20))try{f().rmSync(h().join(k,a),{force:!0})}catch{}}()}catch{}}(),f().appendFileSync(l,`${JSON.stringify(d)}
|
|
2
|
-
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function p(a=200){let b=[l,...n().map(a=>h().join(k,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return f().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function q(){let a=0;if(f().existsSync(l))try{f().rmSync(l,{force:!0}),a++}catch{}for(let b of n())try{f().rmSync(h().join(k,b),{force:!0}),a++}catch{}return a}let r=!1;function s(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function t(){r||(r=!0,process.on("uncaughtException",s("uncaughtException",a=>o({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",s("unhandledRejection",a=>o({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>f});var d=c(191),e=c(47774);function f(a,b){return async function(c,f){let g=async()=>{try{await b(c,f)}catch(h){if(h instanceof e.Bc){f.headersSent||f.status(503).json({error:h.message});return}let g=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:h,req:c});console.error(`[${a}]`,g.id,h),f.headersSent||f.status(500).json({error:h instanceof Error?h.message:"Internal server error",requestId:g.id})}};if("api/system/reset"===a||a.startsWith("api/health"))return void await g();try{await (0,e.i0)(g)}catch(a){if(a instanceof e.Bc&&!f.headersSent)f.status(503).json({error:a.message});else throw a}}}(0,d.mG)()},26594:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(95393),k=c(96770),l=c(29281);async function m(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{name:c,content:d,message:e,history:f,references:g}=a.body,h="string"==typeof e?e.trim():"";if(!h)return b.status(400).json({error:"请输入要发送给 AI 的问题"});let i=Array.isArray(g)?g.map(a=>a&&"object"==typeof a&&"string"==typeof a.relativePath&&"string"==typeof a.content&&a.content.trim()?{relativePath:a.relativePath,content:a.content}:null).filter(a=>!!a):[],m=function(){let a=(0,l.
|
|
2
|
+
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function p(a=200){let b=[l,...n().map(a=>h().join(k,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return f().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function q(){let a=0;if(f().existsSync(l))try{f().rmSync(l,{force:!0}),a++}catch{}for(let b of n())try{f().rmSync(h().join(k,b),{force:!0}),a++}catch{}return a}let r=!1;function s(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function t(){r||(r=!0,process.on("uncaughtException",s("uncaughtException",a=>o({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",s("unhandledRejection",a=>o({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>f});var d=c(191),e=c(47774);function f(a,b){return async function(c,f){let g=async()=>{try{await b(c,f)}catch(h){if(h instanceof e.Bc){f.headersSent||f.status(503).json({error:h.message});return}let g=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:h,req:c});console.error(`[${a}]`,g.id,h),f.headersSent||f.status(500).json({error:h instanceof Error?h.message:"Internal server error",requestId:g.id})}};if("api/system/reset"===a||a.startsWith("api/health"))return void await g();try{await (0,e.i0)(g)}catch(a){if(a instanceof e.Bc&&!f.headersSent)f.status(503).json({error:a.message});else throw a}}}(0,d.mG)()},26594:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(95393),k=c(96770),l=c(29281);async function m(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{name:c,content:d,message:e,history:f,references:g}=a.body,h="string"==typeof e?e.trim():"";if(!h)return b.status(400).json({error:"请输入要发送给 AI 的问题"});let i=Array.isArray(g)?g.map(a=>a&&"object"==typeof a&&"string"==typeof a.relativePath&&"string"==typeof a.content&&a.content.trim()?{relativePath:a.relativePath,content:a.content}:null).filter(a=>!!a):[],m=function(){let a=(0,l.IS)().load(),b=a.models.active,c=b&&a.models.list.find(a=>a.name===b.name&&a.provider===b.provider);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}();if(!m)return b.status(400).json({error:"未配置可用模型,请先在模型配置中启用模型"});let n="string"==typeof c&&c.trim()?c.trim():"未命名提示词",o=[{role:"system",content:"你是专业工程文档的用户提示词编辑助手,协助用户改进完整写作需求。\n\n用户选定的提示词、项目资料和文档名称由软件编译成全文规划、固定章节职责、作者任务和独立专业评价。提示词表达需要完成的专业内容、真实结构、适用范围和表达要求;主控与作者如何调用工具、返回JSON或装配目录由各阶段实际协议管理。\n\n始终围绕当前提示词分析、补充、精简或重写。保留用户已经声明的章节、小节、必要业务请求和明确交付要求;合并重复时保留其对象、条件和责任。不能为了适配软件机械删掉用户的实质请求。\n\n用户要求修改或生成提示词时,回复可直接替换编辑框的完整版本;咨询时可解释原因。不要声称已经保存。最终全文输出要求由全套任务共同承接,不要求每个小节重写全文,也不写使当前规划输出变为正文的命令。\n\n专业内容按具体工程对象、规格、工况、工序及必要控制组织。必要控制需要具体数值时要求核明来源和适用条件;管理节可以没有参数。不得设置统一每千字参数数量、每小节固定信息点、每工法固定量化指标数,或让模型按数值多寡自评、刷分或为参数密度返工。\n\n篇幅、表格和图件按真实职责、数据关系与用户实际交付要求安排;不新增分层预算、统一字数配额、固定图表数量或多轮重写流程。参考篇幅与最终页数属于详略及排版参考,不能为达标删改必要技术内容。\n\n项目资料、规范和用户输入中的数值是待核来源;不得预设所有信息已核定、规范版本已有效或每项工作已完成。明确区分项目既定事实、拟定安排、可复核推导和真正未决事项;引用资格与工程采用由真实对象及完整来源核验,不能靠出处序号或位置授予。\n\n软件会冻结原文和结构、分配相关职责、保存每次真实响应并独立评价。用户提示词可以要求具体施工控制和完整来源核验,不能重造来源ID、工具签名、评分分母或绕过缺口的强制通过声明。若输入要求彼此冲突,说明具体原句与影响并给出保留业务意图的调整。"},{role:"user",content:`当前提示词名称:${n}
|
|
3
3
|
|
|
4
4
|
当前提示词内容:
|
|
5
5
|
${("string"==typeof d?d:"")||"(当前为空)"}`},...i.length>0?[{role:"user",content:`用户通过 @ 指令召回了以下本地知识库文件,请结合这些资料优化当前提示词:
|
|
6
6
|
|
|
7
7
|
${i.map(a=>`## ${a.relativePath}
|
|
8
|
-
${a.content}`).join("\n\n---\n\n")}`}]:[],...(!Array.isArray(f)?[]:f.map(a=>a&&"object"==typeof a&&("user"===a.role||"assistant"===a.role)&&"string"==typeof a.content&&a.content.trim()?{role:a.role,content:a.content}:null).filter(a=>!!a)).map(a=>({role:a.role,content:a.content})),{role:"user",content:h}];try{let{model:a,provider:c}=m,d=(0,j.createProvider)(function(a,b){let c=(0,k.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}(a.provider,c),{baseUrl:c.baseUrl,apiKey:c.apiKey,modelName:a.name,directEndpoint:c.directEndpoint}),e=await d.chat(o,{temperature:.3});b.status(200).json({content:e.content.trim()})}catch(a){b.status(500).json({error:a instanceof Error?a.message:"AI 对话失败"})}}let n=(0,i.j)("api/prompt/chat",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/prompt/chat",pathname:"/api/prompt/chat",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/prompt/chat"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/prompt/chat",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},29021:a=>{a.exports=require("fs")},29281:(a,b,c)=>{c.d(b,{
|
|
8
|
+
${a.content}`).join("\n\n---\n\n")}`}]:[],...(!Array.isArray(f)?[]:f.map(a=>a&&"object"==typeof a&&("user"===a.role||"assistant"===a.role)&&"string"==typeof a.content&&a.content.trim()?{role:a.role,content:a.content}:null).filter(a=>!!a)).map(a=>({role:a.role,content:a.content})),{role:"user",content:h}];try{let{model:a,provider:c}=m,d=(0,j.createProvider)(function(a,b){let c=(0,k.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}(a.provider,c),{baseUrl:c.baseUrl,apiKey:c.apiKey,modelName:a.name,directEndpoint:c.directEndpoint}),e=await d.chat(o,{temperature:.3});b.status(200).json({content:e.content.trim()})}catch(a){b.status(500).json({error:a instanceof Error?a.message:"AI 对话失败"})}}let n=(0,i.j)("api/prompt/chat",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/prompt/chat",pathname:"/api/prompt/chat",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/prompt/chat"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/prompt/chat",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},29021:a=>{a.exports=require("fs")},29281:(a,b,c)=>{c.d(b,{IS:()=>k,R1:()=>l,jU:()=>m});var d=c(96770),e=c(29021),f=c(33873),g=c(51342),h=c(47774);let i=globalThis,j=i.__customizeConfigStores??=new Map;function k(){(0,h.jF)();let a=(0,g.J0)();return j.has(a)||j.set(a,new d.ConfigStore(a)),j.get(a)}function l(){j.clear()}function m(a={}){let b;(0,h.jF)();let c=f.join((0,g.J0)(),"config.json"),d=e.existsSync(c);if(d&&!e.statSync(c).isFile())throw Error(`配置路径不是普通文件,无法清除:${c}`);let i=null;if(d){b=f.join(f.dirname(c),`config.backup-${new Date().toISOString().replace(/[:.]/gu,"-")}.json`),e.copyFileSync(c,b);try{let a=JSON.parse(e.readFileSync(c,"utf-8"));i=a&&"object"==typeof a&&!Array.isArray(a)?a:null}catch{i=null}}let j="models"==("all"===a.scope?"all":"models")&&null!==i;return j?e.writeFileSync(c,`${JSON.stringify({...i,models:{active:null,list:[]}},null,2)}
|
|
9
|
+
`,{mode:384}):d&&e.rmSync(c,{force:!0}),l(),j||k().load(),{mode:j?"models":"all",backupPath:b,sourceParsed:null!==i}}},33873:a=>{a.exports=require("path")},47774:(a,b,c)=>{c.d(b,{Bc:()=>g,b:()=>h,i0:()=>j,jF:()=>i,jp:()=>k,mh:()=>l,wx:()=>m});let d=globalThis,e=d.__customizeStorageMaintenance??={active:!1},f=d.__customizeStorageApiWriters??=new Set;class g extends Error{constructor(){super("系统清空正在执行,暂不接收新的存储访问"),this.name="StorageMaintenanceError"}}function h(){return e.active}function i(){if(e.active)throw new g}async function j(a){i();let b=Promise.resolve(a());f.add(b);try{return await b}finally{f.delete(b)}}function k(){return[...f]}function l(){if(e.active)throw Error("已有系统清空任务正在执行");e.active=!0;let a=!1;return()=>{a||(a=!0,e.active=!1)}}async function m(a,b=1e4){let c;if(!a.length)return!0;try{return await Promise.race([Promise.allSettled(a).then(()=>!0),new Promise(a=>{c=setTimeout(()=>a(!1),b)})])}finally{c&&clearTimeout(c)}}},48161:a=>{a.exports=require("node:os")},51342:(a,b,c)=>{c.d(b,{Bn:()=>k,J0:()=>h});var d=c(73024),e=c(48161),f=c(96770),g=c(76760);function h(){return(0,f.resolveAgentStorageRoot)(process.env.CUSTOMIZE_AGENT_HOME?.trim()||e.homedir())}function i(){return g.join(h(),"state.json")}function j(){try{let a=JSON.parse(d.readFileSync(i(),"utf8")),b=a?.firstStartedAt;return"number"==typeof b&&Number.isFinite(b)&&b>0?{firstStartedAt:b}:null}catch{return null}}function k(a=Date.now()){return Math.max(0,Math.round((a-function(a=Date.now()){let b=j();if(b)return b.firstStartedAt;try{let b=i();d.mkdirSync(g.dirname(b),{recursive:!0});let c=`${b}.${process.pid}.${Date.now()}.tmp`;return d.writeFileSync(c,JSON.stringify({firstStartedAt:a}),"utf8"),d.renameSync(c,b),a}catch{return j()?.firstStartedAt??a}}(a))/1e3))}},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=26594));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=839,a.ids=[839],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},48203:(a,b,c)=>{c.d(b,{DA:()=>p,OX:()=>s,P2:()=>q,ls:()=>r});var d=c(48161),e=c(79646),f=c(73024),g=c.n(f),h=c(33873),i=c.n(h),j=c(37095),k=c(47774),l=c(51342);let m=globalThis,n=m.__customizeActiveIndexJobs??=new Map,o=[/^Image too small to scale!!/u,/^Line cannot be recognized!!$/u,/CleanUnusedInitializersAndNodeArgs/u,/should be removed from the model/u];function p(a){!function(a){(0,k.jF)();let b=n.get(a.projectRoot),c=a.uploadOperationId??a.id,f=a.uploadOperationId?"upload":"reindex",h=a.uploadOperationId?`上传 ${a.uploadTitle??"文件"}`:a.relativePath?`重新解析 ${a.relativePath}`:"知识库后台索引",m=()=>((0,k.jF)(),(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"uploading",status:"processing",percent:5,message:"索引任务已进入后台队列",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()}),(function(a,b,c,f){let h=function(){let a=new Set,b=b=>{for(let c=i().resolve(b);a.add(i().join(c,"scripts/kb-index-worker.cjs")),i().dirname(c)!==c;c=i().dirname(c));};for(let c of(b(process.cwd()),b(__dirname),a))if(g().existsSync(c))return c}();if(!h){let d="知识库后台索引脚本缺失,请检查服务安装包中的 scripts/kb-index-worker.cjs";return(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),Promise.resolve({success:!1,error:d})}return new Promise(g=>{let k,m,n;try{k=(0,e.fork)(h,[JSON.stringify({...a,operationId:b})],{cwd:process.cwd(),stdio:["ignore","pipe","pipe","ipc"],env:{...process.env,CUSTOMIZE_KB_OCR_CACHE_DIR:process.env.CUSTOMIZE_KB_OCR_CACHE_DIR?.trim()?process.env.CUSTOMIZE_KB_OCR_CACHE_DIR:i().join((0,l.J0)(),"cache","ocr-pages")},execArgv:[...process.execArgv.filter(a=>!a.startsWith("--max-old-space-size")),`--max-old-space-size=${function(){let a=Number(process.env.KB_INDEX_MAX_OLD_SPACE_MB);return Number.isFinite(a)&&a>0?Math.floor(a):Math.min(12288,Math.max(4096,Math.floor(Math.floor(d.totalmem()/1024/1024)/4)))}()}`]})}catch(e){let d=`知识库后台进程启动失败:${e instanceof Error?e.message:String(e)}`;(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),g({success:!1,error:d});return}let p=!1,q=!1,r=new Map,s=null,t=()=>{for(let[d,e]of(s&&(clearTimeout(s),s=null),r))if(0!==e.length){if(q||m){console.log(`[kb-worker] ${d}${e.join("\n").slice(-1e3)}`);continue}(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"parsing",status:"processing",percent:5,message:`${d}${e.join("\n").slice(-1e3)}`})}r.clear()},u=(a,b)=>{let c=String(a).split(/\r?\n/u).map(a=>a.trim()).filter(a=>a&&!o.some(b=>b.test(a))).join("\n");if(!c)return;let d=r.get(b)??[];d.push(c),r.set(b,d),s||(s=setTimeout(t,500),s.unref?.())};k.stdout?.on("data",a=>u(a,"后台索引输出:")),k.stderr?.on("data",a=>u(a,"后台索引错误输出:")),k.on("error",d=>{if(p)return;p=!0,t();let e=`知识库后台进程启动失败:${d instanceof Error?d.message:String(d)}`;(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:e,error:e}),g({success:!1,error:e})}),k.on("message",b=>{if(b?.type==="log"&&b?.patch){let c="done"===b.patch.stage&&100===b.patch.percent&&("success"===b.patch.status||"warning"===b.patch.status),d="error"===b.patch.stage&&"error"===b.patch.status&&100===b.patch.percent;(c||d)&&t(),c&&!m&&(q=!0),d&&(m=b.patch.error||b.patch.message||"知识库索引失败",q=!1),c&&"warning"===b.patch.status&&(n=b.patch.error||b.patch.message),(!m||d)&&(!q||c)&&(0,j.Qf)(a.projectRoot,b.patch)}}),k.on("exit",(d,e)=>{if(p)return;if(p=!0,t(),m)return void g({success:!1,error:m});if(q)return void g({success:!0,warning:n});let h=0===d?"知识库后台进程退出,未收到索引完成回执":`知识库后台进程退出,退出码 ${d??e??"unknown"}`;console.error("[kb-worker] exit",{operationId:b,code:d,signal:e}),(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:h,error:h}),g({success:!1,error:h})})})})(a,c,f,h).then(b=>(b.success&&(b.warning?(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"warning",percent:100,message:a.relativePath?"重新解析完成(向量索引降级)":"知识库后台索引完成(向量索引降级)",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop(),error:b.warning}):(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"success",percent:100,message:a.relativePath?"重新解析完成":"知识库后台索引完成",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()})),b))),p=b?b.promise.then(m,m):m(),q={operationId:c,promise:p,startedAt:b?.startedAt??Date.now()};n.set(a.projectRoot,q),p.then(()=>{n.get(a.projectRoot)===q&&n.delete(a.projectRoot)},()=>{n.get(a.projectRoot)===q&&n.delete(a.projectRoot)})}(a)}function q(a){return n.has(a)}function r(a){let b=n.get(a);return b?{operationId:b.operationId,startedAt:b.startedAt}:void 0}function s(){return[...n.values()].map(a=>a.promise)}},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},79646:a=>{a.exports=require("child_process")},82445:(a,b,c)=>{c.r(b),c.d(b,{config:()=>z,default:()=>y,handler:()=>B});var d={};c.r(d),c.d(d,{default:()=>v});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c(48161),k=c(76760),l=c(31421),m=c(16006),n=c(44533),o=c(47774),p=c(70949),q=c(48203),r=c(48479),s=c(29281);async function t(a){"win32"===process.platform&&await new Promise((b,c)=>{let d=k.join(j.tmpdir(),`ca-wipe-${Date.now()}-${Math.random().toString(36).slice(2)}`);i.mkdirSync(d,{recursive:!0}),(0,l.execFile)("robocopy",[d,a,"/MIR","/NFL","/NDL","/NJH","/NJS","/NC","/NS"],{windowsHide:!0},a=>{try{i.rmSync(d,{recursive:!0,force:!0})}catch{}if(a&&"string"==typeof a.code)return void c(a);let e="number"==typeof a?.code?a.code:0;e>7?c(a??Error(`robocopy 退出码 ${e}`)):b()})});try{i.rmSync(a,{recursive:!0,force:!0,maxRetries:5,retryDelay:200})}catch(a){throw Error("存储目录未能完整清空,不能报告格式化成功",{cause:a})}}async function u(a,b){let c;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});if(!0!==(a.body??{}).confirm)return b.status(400).json({error:"必须带 confirm=true(格式化不可撤销)"});try{c=(0,o.mh)()}catch{return b.status(409).json({error:"RESET_IN_PROGRESS"})}try{let a=(0,n.a2)(),c=[...(0,p.xZ)(),...(0,q.OX)(),...(0,o.jp)()];if(!await (0,o.wx)(c))return b.status(409).json({error:"RESET_WRITERS_BUSY",message:"已中止生成;后台索引或存储写入尚未退出,存储未被清空。待任务退出后可重试。"});return await (0,n.hy)(),await t(a),(0,s.
|
|
1
|
+
"use strict";(()=>{var a={};a.id=839,a.ids=[839],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},48203:(a,b,c)=>{c.d(b,{DA:()=>p,OX:()=>s,P2:()=>q,ls:()=>r});var d=c(48161),e=c(79646),f=c(73024),g=c.n(f),h=c(33873),i=c.n(h),j=c(37095),k=c(47774),l=c(51342);let m=globalThis,n=m.__customizeActiveIndexJobs??=new Map,o=[/^Image too small to scale!!/u,/^Line cannot be recognized!!$/u,/CleanUnusedInitializersAndNodeArgs/u,/should be removed from the model/u];function p(a){!function(a){(0,k.jF)();let b=n.get(a.projectRoot),c=a.uploadOperationId??a.id,f=a.uploadOperationId?"upload":"reindex",h=a.uploadOperationId?`上传 ${a.uploadTitle??"文件"}`:a.relativePath?`重新解析 ${a.relativePath}`:"知识库后台索引",m=()=>((0,k.jF)(),(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"uploading",status:"processing",percent:5,message:"索引任务已进入后台队列",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()}),(function(a,b,c,f){let h=function(){let a=new Set,b=b=>{for(let c=i().resolve(b);a.add(i().join(c,"scripts/kb-index-worker.cjs")),i().dirname(c)!==c;c=i().dirname(c));};for(let c of(b(process.cwd()),b(__dirname),a))if(g().existsSync(c))return c}();if(!h){let d="知识库后台索引脚本缺失,请检查服务安装包中的 scripts/kb-index-worker.cjs";return(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),Promise.resolve({success:!1,error:d})}return new Promise(g=>{let k,m,n;try{k=(0,e.fork)(h,[JSON.stringify({...a,operationId:b})],{cwd:process.cwd(),stdio:["ignore","pipe","pipe","ipc"],env:{...process.env,CUSTOMIZE_KB_OCR_CACHE_DIR:process.env.CUSTOMIZE_KB_OCR_CACHE_DIR?.trim()?process.env.CUSTOMIZE_KB_OCR_CACHE_DIR:i().join((0,l.J0)(),"cache","ocr-pages")},execArgv:[...process.execArgv.filter(a=>!a.startsWith("--max-old-space-size")),`--max-old-space-size=${function(){let a=Number(process.env.KB_INDEX_MAX_OLD_SPACE_MB);return Number.isFinite(a)&&a>0?Math.floor(a):Math.min(12288,Math.max(4096,Math.floor(Math.floor(d.totalmem()/1024/1024)/4)))}()}`]})}catch(e){let d=`知识库后台进程启动失败:${e instanceof Error?e.message:String(e)}`;(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),g({success:!1,error:d});return}let p=!1,q=!1,r=new Map,s=null,t=()=>{for(let[d,e]of(s&&(clearTimeout(s),s=null),r))if(0!==e.length){if(q||m){console.log(`[kb-worker] ${d}${e.join("\n").slice(-1e3)}`);continue}(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"parsing",status:"processing",percent:5,message:`${d}${e.join("\n").slice(-1e3)}`})}r.clear()},u=(a,b)=>{let c=String(a).split(/\r?\n/u).map(a=>a.trim()).filter(a=>a&&!o.some(b=>b.test(a))).join("\n");if(!c)return;let d=r.get(b)??[];d.push(c),r.set(b,d),s||(s=setTimeout(t,500),s.unref?.())};k.stdout?.on("data",a=>u(a,"后台索引输出:")),k.stderr?.on("data",a=>u(a,"后台索引错误输出:")),k.on("error",d=>{if(p)return;p=!0,t();let e=`知识库后台进程启动失败:${d instanceof Error?d.message:String(d)}`;(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:e,error:e}),g({success:!1,error:e})}),k.on("message",b=>{if(b?.type==="log"&&b?.patch){let c="done"===b.patch.stage&&100===b.patch.percent&&("success"===b.patch.status||"warning"===b.patch.status),d="error"===b.patch.stage&&"error"===b.patch.status&&100===b.patch.percent;(c||d)&&t(),c&&!m&&(q=!0),d&&(m=b.patch.error||b.patch.message||"知识库索引失败",q=!1),c&&"warning"===b.patch.status&&(n=b.patch.error||b.patch.message),(!m||d)&&(!q||c)&&(0,j.Qf)(a.projectRoot,b.patch)}}),k.on("exit",(d,e)=>{if(p)return;if(p=!0,t(),m)return void g({success:!1,error:m});if(q)return void g({success:!0,warning:n});let h=0===d?"知识库后台进程退出,未收到索引完成回执":`知识库后台进程退出,退出码 ${d??e??"unknown"}`;console.error("[kb-worker] exit",{operationId:b,code:d,signal:e}),(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:h,error:h}),g({success:!1,error:h})})})})(a,c,f,h).then(b=>(b.success&&(b.warning?(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"warning",percent:100,message:a.relativePath?"重新解析完成(向量索引降级)":"知识库后台索引完成(向量索引降级)",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop(),error:b.warning}):(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"success",percent:100,message:a.relativePath?"重新解析完成":"知识库后台索引完成",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()})),b))),p=b?b.promise.then(m,m):m(),q={operationId:c,promise:p,startedAt:b?.startedAt??Date.now()};n.set(a.projectRoot,q),p.then(()=>{n.get(a.projectRoot)===q&&n.delete(a.projectRoot)},()=>{n.get(a.projectRoot)===q&&n.delete(a.projectRoot)})}(a)}function q(a){return n.has(a)}function r(a){let b=n.get(a);return b?{operationId:b.operationId,startedAt:b.startedAt}:void 0}function s(){return[...n.values()].map(a=>a.promise)}},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},79646:a=>{a.exports=require("child_process")},82445:(a,b,c)=>{c.r(b),c.d(b,{config:()=>z,default:()=>y,handler:()=>B});var d={};c.r(d),c.d(d,{default:()=>v});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c(48161),k=c(76760),l=c(31421),m=c(16006),n=c(44533),o=c(47774),p=c(70949),q=c(48203),r=c(48479),s=c(29281);async function t(a){"win32"===process.platform&&await new Promise((b,c)=>{let d=k.join(j.tmpdir(),`ca-wipe-${Date.now()}-${Math.random().toString(36).slice(2)}`);i.mkdirSync(d,{recursive:!0}),(0,l.execFile)("robocopy",[d,a,"/MIR","/NFL","/NDL","/NJH","/NJS","/NC","/NS"],{windowsHide:!0},a=>{try{i.rmSync(d,{recursive:!0,force:!0})}catch{}if(a&&"string"==typeof a.code)return void c(a);let e="number"==typeof a?.code?a.code:0;e>7?c(a??Error(`robocopy 退出码 ${e}`)):b()})});try{i.rmSync(a,{recursive:!0,force:!0,maxRetries:5,retryDelay:200})}catch(a){throw Error("存储目录未能完整清空,不能报告格式化成功",{cause:a})}}async function u(a,b){let c;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});if(!0!==(a.body??{}).confirm)return b.status(400).json({error:"必须带 confirm=true(格式化不可撤销)"});try{c=(0,o.mh)()}catch{return b.status(409).json({error:"RESET_IN_PROGRESS"})}try{let a=(0,n.a2)(),c=[...(0,p.xZ)(),...(0,q.OX)(),...(0,o.jp)()];if(!await (0,o.wx)(c))return b.status(409).json({error:"RESET_WRITERS_BUSY",message:"已中止生成;后台索引或存储写入尚未退出,存储未被清空。待任务退出后可重试。"});return await (0,n.hy)(),await t(a),(0,s.R1)(),(0,r.bT)(),b.status(200).json({success:!0})}finally{c()}}let v=(0,m.j)("api/system/reset",u);var w=c(68970),x=c(50296);let y=(0,h.M)(d,"default"),z=(0,h.M)(d,"config"),A=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/system/reset",pathname:"/api/system/reset",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function B(a,b,c){let d=await A.prepare(a,b,{srcPage:"/api/system/reset"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,w.getTracer)(),e=d.getActiveScopeSpan(),j=A.instrumentationOnRequestError.bind(A),k=async e=>A.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:A.isDev,page:"/api/system/reset",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==x.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(x.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:w.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(A.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,5746,5304,3806,2434,1243,1001,9666],()=>b(b.s=82445));module.exports=c})();
|