@customize-agent/server 4.58.0 → 4.59.1
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 +132 -143
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +117 -9
- package/.next/server/chunks/1001.js +56 -0
- package/.next/server/chunks/1928.js +1 -1
- package/.next/server/chunks/1936.js +2 -2
- package/.next/server/chunks/2434.js +4 -0
- package/.next/server/chunks/299.js +50 -0
- package/.next/server/chunks/5547.js +350 -0
- package/.next/server/chunks/6087.js +3 -0
- package/.next/server/chunks/6321.js +3 -0
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/config/healthCheck.js +2 -2
- package/.next/server/pages/api/config/providers.js +2 -2
- package/.next/server/pages/api/documents/canvas/[id].js +2 -0
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -0
- package/.next/server/pages/api/documents/export.js +3 -3
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate/preview.js +2 -0
- package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generate.js +2 -2
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/events.js +10 -0
- package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +1 -0
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/nodes.js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/pause.js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/preview.js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -0
- package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +2 -0
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -0
- package/.next/server/pages/api/documents/generated/[id].js +2 -2
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js +1 -1
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/jobs.js +1 -1
- package/.next/server/pages/api/jobs.js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js +2 -2
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js +2 -2
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/evaluate.js +3 -3
- package/.next/server/pages/api/kb/evaluate.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js +4 -4
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js +3 -3
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/open.js +2 -2
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js +3 -3
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/tree.js +3 -3
- package/.next/server/pages/api/kb/files/tree.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js +4 -4
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js +2 -2
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/intelligence.js +1 -1
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
- package/.next/server/pages/api/kb/material-groups.js +2 -0
- package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -0
- package/.next/server/pages/api/kb/operations.js +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/search.js +2 -2
- package/.next/server/pages/api/kb/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js +2 -2
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/progress.js +2 -2
- package/.next/server/pages/api/kb/upload/progress.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/prompt.js +1 -1
- package/.next/server/pages/api/prompt.js.nft.json +1 -1
- package/.next/server/pages/api/skills/[id].js +1 -0
- package/.next/server/pages/api/skills/[id].js.nft.json +1 -0
- package/.next/server/pages/api/skills/validate.js +1 -0
- package/.next/server/pages/api/skills/validate.js.nft.json +1 -0
- package/.next/server/pages/api/skills.js +1 -0
- package/.next/server/pages/api/skills.js.nft.json +1 -0
- package/.next/server/pages/api/system/logs.js +2 -2
- package/.next/server/pages/api/system/stats.js +1 -1
- package/.next/server/pages/canvas/[id].html +1 -0
- package/.next/server/pages/canvas/[id].js.nft.json +1 -0
- package/.next/server/pages/canvas.html +1 -0
- package/.next/server/pages/canvas.js.nft.json +1 -0
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/documents.js.nft.json +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/files.js.nft.json +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/manage.js.nft.json +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/knowledge.js.nft.json +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/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.html +1 -0
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +41 -28
- package/.next/static/4xQDkixSretJDM503EzIq/_buildManifest.js +1 -0
- package/.next/static/chunks/127-20f09f6ebe1e6c1f.js +1 -0
- package/.next/static/chunks/174-1bc48f295d7dd075.js +10 -0
- package/.next/static/chunks/189-3f4f4e237056adaf.js +4 -0
- package/.next/static/chunks/243-03eba51d5d737e98.js +1 -0
- package/.next/static/chunks/269-7a3502478bf67fff.js +11 -0
- package/.next/static/chunks/289-0cccd8131332e041.js +78 -0
- package/.next/static/chunks/310-6c678cb70e4ba2d6.js +19 -0
- package/.next/static/chunks/422-46f07037c58d2309.js +1 -0
- package/.next/static/chunks/426-22c4cedb04b0d45d.js +21 -0
- package/.next/static/chunks/445-d12731f107978b10.js +6 -0
- package/.next/static/chunks/530-6f3f5848c6f702ae.js +1 -0
- package/.next/static/chunks/569-2bfdde9e402af5b2.js +16 -0
- package/.next/static/chunks/700-5d29b0475311f590.js +1 -0
- package/.next/static/chunks/709-a7c652953ccd3b4b.js +1 -0
- package/.next/static/chunks/787-207289f4bb577708.js +10 -0
- package/.next/static/chunks/795-9e0cb0bb11e8c89f.js +1 -0
- package/.next/static/chunks/914-292edce0ba2a212d.js +1 -0
- package/.next/static/chunks/{framework-161be364fd69a7ce.js → framework-4b565b3ddc94cdac.js} +1 -1
- package/.next/static/chunks/main-0c91f573696223ca.js +1 -0
- package/.next/static/chunks/pages/_app-ebb535779b63fd5d.js +185 -0
- package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +1 -0
- package/.next/static/chunks/pages/canvas-323d44fe56d685a7.js +1 -0
- package/.next/static/chunks/pages/documents-e6a80f2de39c6fd2.js +1 -0
- package/.next/static/chunks/pages/guide-7367305082617e3c.js +1 -0
- package/.next/static/chunks/pages/knowledge/file-detail-aee7c15541d1d130.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +1 -0
- package/.next/static/chunks/pages/knowledge-09dde24cdce1b195.js +1 -0
- package/.next/static/chunks/pages/models-8b96ba85131d5408.js +1 -0
- package/.next/static/chunks/pages/prompt-6a224562d194cb45.js +1 -0
- package/.next/static/chunks/pages/settings-0a7709bf039a2a4d.js +1 -0
- package/.next/static/chunks/pages/skills-3d77213c3e9ef0b5.js +1 -0
- package/.next/static/chunks/pages/system/logs-70790bee46e5a08d.js +1 -0
- package/.next/static/chunks/webpack-6224d37324e372cb.js +1 -0
- package/.next/static/css/85c434f8fd3a17ae.css +1 -0
- package/messages/en-US.json +108 -344
- package/messages/zh-CN.json +109 -345
- package/package.json +6 -5
- package/scripts/capture-baseline.mjs +541 -0
- package/scripts/half-built-scan.mjs +150 -0
- package/.next/server/chunks/208.js +0 -136
- package/.next/server/chunks/4435.js +0 -250
- package/.next/server/chunks/5840.js +0 -1
- package/.next/server/pages/api/documents/drafts.js +0 -1
- package/.next/server/pages/api/documents/drafts.js.nft.json +0 -1
- package/.next/server/pages/api/documents/refine.js +0 -13
- package/.next/server/pages/api/documents/refine.js.nft.json +0 -1
- package/.next/server/pages/api/documents/roles.js +0 -1
- package/.next/server/pages/api/documents/roles.js.nft.json +0 -1
- package/.next/server/pages/api/documents/templates.js +0 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +0 -1
- package/.next/server/pages/asset-library.html +0 -1
- package/.next/server/pages/document-roles.html +0 -1
- package/.next/server/pages/document-roles.js.nft.json +0 -1
- package/.next/static/2vWd2mBe-maL25SFytCur/_buildManifest.js +0 -1
- package/.next/static/chunks/195-2c0168eacab722d2.js +0 -1
- package/.next/static/chunks/289-35ac595388bbd018.js +0 -78
- package/.next/static/chunks/44-d3545eedd5c75ef1.js +0 -4
- package/.next/static/chunks/455-e1b41ac4946d2b6f.js +0 -6
- package/.next/static/chunks/563-b12f299d34bb9e44.js +0 -1
- package/.next/static/chunks/665-88e20299084b9e73.js +0 -1
- package/.next/static/chunks/7-20bcc985742a9ae1.js +0 -10
- package/.next/static/chunks/717-743b697a417dd5ee.js +0 -4
- package/.next/static/chunks/760-f8bb8e969c5e0d57.js +0 -1
- package/.next/static/chunks/787-c18af810af3433f6.js +0 -25
- package/.next/static/chunks/788-3afeb069ed706ac0.js +0 -1
- package/.next/static/chunks/795-cd94e8d4e9768eb9.js +0 -1
- package/.next/static/chunks/81-c3a7f04d96ea3f7d.js +0 -1
- package/.next/static/chunks/827-a6dc09e42833e6a3.js +0 -1
- package/.next/static/chunks/883-506cbca959974997.js +0 -16
- package/.next/static/chunks/986-49b865de7906320a.js +0 -8
- package/.next/static/chunks/994-241f87efc61005b8.js +0 -4
- package/.next/static/chunks/main-91fb767ebd74c9c1.js +0 -1
- package/.next/static/chunks/pages/_app-66149ba52ad1dc26.js +0 -185
- package/.next/static/chunks/pages/asset-library-a1047694e888e655.js +0 -1
- package/.next/static/chunks/pages/document-roles-5620a98d6312f81c.js +0 -1
- package/.next/static/chunks/pages/documents-d60a47643f5bd6b4.js +0 -1
- package/.next/static/chunks/pages/guide-a411c554520b7109.js +0 -1
- package/.next/static/chunks/pages/knowledge/file-detail-fe69eb38d70adea0.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-8e25066889a85834.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-d0d0e0716e9d705b.js +0 -1
- package/.next/static/chunks/pages/knowledge-905248d8dcb15453.js +0 -1
- package/.next/static/chunks/pages/models-6ef838f3e00ba21e.js +0 -1
- package/.next/static/chunks/pages/prompt-5e1fb81efc656866.js +0 -1
- package/.next/static/chunks/pages/settings-810eb1a6cf1a6b02.js +0 -1
- package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +0 -1
- package/.next/static/chunks/webpack-4224e970a97a4a86.js +0 -1
- package/.next/static/css/18018ee565a1deba.css +0 -1
- /package/.next/server/pages/{asset-library.js.nft.json → skills.js.nft.json} +0 -0
- /package/.next/static/{2vWd2mBe-maL25SFytCur → 4xQDkixSretJDM503EzIq}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";exports.id=6087,exports.ids=[6087],exports.modules={191:(a,b,c)=>{c.d(b,{cW:()=>q,hH:()=>r,mG:()=>u,wF:()=>p});var d=c(29021),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(55511),k=c.n(j);let l=i().join(g().homedir(),".customize-agent","logs"),m=i().join(l,"errors.jsonl"),n="errors-";function o(){try{return e().readdirSync(l).filter(a=>a.startsWith(n)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}}function p(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()}_${k().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{e().mkdirSync(l,{recursive:!0}),function(){try{if(e().statSync(m).size<=2097152)return;e().renameSync(m,i().join(l,`${n}${Date.now()}.jsonl`)),function(){for(let a of o().slice(20))try{e().rmSync(i().join(l,a),{force:!0})}catch{}}()}catch{}}(),e().appendFileSync(m,`${JSON.stringify(d)}
|
|
2
|
+
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function q(a=200){let b=[m,...o().map(a=>i().join(l,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return e().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 r(){let a=0;if(e().existsSync(m))try{e().rmSync(m,{force:!0}),a++}catch{}for(let b of o())try{e().rmSync(i().join(l,b),{force:!0}),a++}catch{}return a}let s=!1;function t(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 u(){s||(s=!0,process.on("uncaughtException",t("uncaughtException",a=>p({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",t("unhandledRejection",a=>p({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(191);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},22328:(a,b,c)=>{c.d(b,{Fv:()=>H,Q6:()=>Q,WJ:()=>S,WW:()=>U,mm:()=>R,oy:()=>E,rN:()=>D,xv:()=>F});var d=c(73024),e=c(76760),f=c(48661),g=c(77416),h=c(78217),i=c(6444),j=c(85441),k=c(73859),l=c(32434),m=c(44533),n=c(38032),o=c(70610),p=c(52639),q=c(37126),r=c(76193),s=c(59424),t=c(15997),u=c(37047),v=c(18292),w=c(52890),x=c(45984),y=c(34680),z=c(22157),A=c(68023);class B extends Error{constructor(a,b,c){super(a),this.file=b,this.cause=c,this.name="RepairStoreError"}}function C(a,b){return e.join(b,`${a}.repairs.jsonl`)}function D(a,b,c){let f=C(a,c),g={v:1,t:Date.now(),request:b};try{d.mkdirSync(e.dirname(f),{recursive:!0}),d.appendFileSync(f,`${JSON.stringify(g)}
|
|
3
|
+
`)}catch(b){throw new B(`修复请求落盘失败(节点/修复日志是唯一真相源,不得静默丢):${a}`,f,b)}}function E(a,b){let c,e=C(a,b);try{c=d.readFileSync(e,"utf8")}catch{return[]}let f=new Map;for(let a of c.split("\n"))if(a.trim())try{let b=JSON.parse(a);if(b?.v!==1||!b.request?.id)continue;f.set(b.request.id,b.request)}catch{continue}return[...f.values()].sort((a,b)=>a.id.localeCompare(b.id))}function F(a){return a.targetNodeId||a.localization?.accepted?a.transaction?/资料|证据|材料|知识库/u.test(a.impact?.reason||"")?"material-insufficient":(0,A.Un)(a.transaction.recheck.before,a.transaction.recheck.after)?"unclassified":"writing-capacity":a.execution&&!a.execution.available?"rerun-with-feedback"===a.execution.action?"detector-unwired":/不在本文档节点表内/u.test(a.execution.unavailableReason||"")?"unclassified":"detector-unwired":"unclassified":(a.localization?.candidates?.length??0)===0?"detector-missing":"detector-unwired"}class G extends Error{constructor(a,b,c){super(a),this.documentId=b,this.reason=c,this.name="ArchivedRepairContextError"}}function H(a){let b,c=(0,f.getGeneratedDocument)(a.documentId,a.projectRoot);if(a.projectRoot||(a={...a,projectRoot:c?.projectRoot??(0,m.aY)()}),!c)throw new G(`归档里没有这份文档:${a.documentId}`,a.documentId,"document-missing");let d=c.draft;if(!d)throw new G(`归档里没有 draft(事实模型/章草稿都没落盘):${a.documentId}`,a.documentId,"draft-missing");let e=c.promptIds??[];if(0===e.length)throw new G(`归档里没有提示词 id(promptIds)——复检要按生成时的规格跑,缺它无法复原(宁缺不假)`,a.documentId,"prompt-ids-missing");try{b=(0,n.iA)({promptIds:e,requirement:c.requirement||"",projectRoot:a.projectRoot||c.projectRoot||(0,m.aY)(),title:c.templateName})}catch(b){throw new G(`按归档自己的输入复原文档规格失败:${b instanceof Error?b.message:String(b)}`,a.documentId,"spec-not-rederivable")}let g=(0,n.TQ)(b);if(!d.factsModel)throw new G(`归档里没有事实模型(factsModel)——全量判据复检跑不起来`,a.documentId,"facts-model-missing");let h=[],i=c.requirement||"",j=new Map((g.chapters||[]).map(a=>[a.title,a])),k=(d.chapters||[]).map(a=>{let b=j.get(a.title);return{id:a.id,title:a.title,purpose:b?.purpose??"",queries:b?.queries??[],requiredFacts:b?.requiredFacts??[],sections:a.sections&&a.sections.length>0?a.sections:b?.sections,tablePlans:a.tablePlans??b?.tablePlans}});h.push("生效大纲(effectiveChapters)未归档:已由归档正文章节的 id/标题复原,同标题的再派生规格章补齐 purpose/queries/requiredFacts;大纲期补挂的承诺小节(四新等)若未落进正文章节,缺表/缺节类判据会与生成期不同");let l=void 0!==c.editedMarkdown?"editedMarkdown":"markdown",o=c[l]||c.markdown||"";return{options:a,record:c,template:g,requirement:i,promptIds:e,effectiveChapters:k,deliveredField:l,deliveredText:o,unavailableInputs:h}}async function I(a){let b=H(a),{record:c,template:d,requirement:e,effectiveChapters:f,unavailableInputs:g}=b,m=c.draft,n=a.materialsRoot||c.projectRoot||a.projectRoot,w=function(a){let b=a.record.draft?.agentWorkflow?.materialScope;if(b?.selectedFiles&&b.selectedFiles.length>0)return{selectedFiles:b.selectedFiles};let c=a.options.materialsRoot||a.record.projectRoot||a.options.projectRoot;return{selectedFiles:(0,l.ZR)(c,a.template,a.requirement).selectedFiles,note:"资料范围未随归档落盘(agentWorkflow.materialScope 缺失):已按模板+需求现场重解析——资料集与生成期可能不同"}}(b);w.note&&g.push(w.note);let x=function(a){let b=(0,o.dU)(a.promptIds);if(b.length>0)return{promptTexts:b.map(a=>a.content).join("\n\n")};let c=a.record.draft?.promptRules?.executionSummary;return c&&c.length>0?{promptTexts:c.join("\n"),note:"提示词资产已不可读(被删/改名):篇幅预算的提示词侧输入改用归档的 `promptRules.executionSummary`(生成期同一份规则抽取结果)复原"}:{promptTexts:"",note:"提示词资产已不可读且归档无规则抽取摘要:本次按规格估算篇幅预算"}}(b);x.note&&g.push(x.note);let y=(0,i.x)(d,e),A=(0,j.P)(n,{requirement:e,boundFilePaths:w.selectedFiles}),B=(0,k.$i)(d,e),C={...d,chapters:f},D=(0,h.tF)({requirement:e,promptTexts:x.promptTexts,template:C,chapters:f,spec:y.spec}),[E,F]=await Promise.all([(0,s.h)(),(0,t.e)()]),G=await (0,u.Mv)([],f.map(a=>a.title),a.embedDocuments),I=m.bidComposition;g.push("评分项要求模型(tenderRequirements)与评分细则(evaluationCriteriaItems)未归档:评分项响应/零响应类判据按「无评分项输入」运行,requirementsSimilarity 为恒零函数","一体化蓝图参数桶(blueprintData)未归档:蓝图引用冲突终检与项目类型一致性判据的目标名不可用(附表区不参与复检)","真值层裁决结果(truthValues)与口径冲突(scopeConflicts)未归档:口径一致性自检按「无裁决」运行","清单事实锁(billFactLock)与图纸事实锁(drawingFactLock)未归档:两类锁定的判据按缺省运行(不降级为阻断)","证据池本体(materialEvidence)未归档(归档只留证据与引用计数):日期溯源类判据空跑","答疑澄清修正账本(clarificationAmendments)未归档:修正前形态残留类判据空跑");let J=m.factsModel,K=m.structuredFacts||[],L=b.deliveredText,M=await (0,q.nX)({documentSpec:y.spec,validationIssues:m.validationIssues||[],factsModel:J,finalChapterDrafts:m.chapters||[],finalMarkdown:L,template:d,promptIds:b.promptIds,promptDocumentRules:m.promptRules,projectMaterialSummary:A,domainProfile:B,structuredFacts:K,documentBudget:D,effectiveChapters:f,requirementsSimilarity:G,factTokenScopeClassifier:E,professionalDepthClassifier:F,blueprintData:void 0,bodyTableForbidden:(0,p._C)(I),bodyFigureForbidden:(0,p.kO)(I),identityMarksForbidden:I?.identityMarksForbidden,coverForbidden:I?.formatRules?.cover==="forbidden"});m.promptRules||g.push("提示词文档规则(promptRules)未归档:规则类判据(固定标题/必需表格/禁用词)本次不可用");let N=(0,r.Jq)("full-validation");return{blocking:M.filter(a=>"error"===a.level||"blocker"===a.severity).length,entityPlacement:function(a,b){let c=(0,v.PP)(a||"");if(!c)return 0;let d=new Set,e=0;for(let a of b||[]){if(!a)continue;let b=(0,z.lG)(a.value).trim(),f=(0,v.Le)(b);if(!f||(0,v.rf)(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,b))continue;let g=(0,v.PP)(f);if(g.length<2||d.has(g))continue;d.add(g);let h=0;for(;;){let a=c.indexOf(g,h);if(a<0)break;e+=1,h=a+g.length}}return e}(L,[...K,...J?.preciseFacts||[]]),chars:(0,h.V7)(L),judges:{executed:N.executed,degraded:N.degraded,missing:N.declaredMissing,unavailableInputs:g,mode:"full"}}}let J=/^##(?!#)\s*\S/u;function K(a,b){let c=a.split("\n"),d=[],e=0;for(let a of c)d.push(e),e+=a.length+1;let f=c.map((a,c)=>!function(a,b){if(!/^#{1,3}\s+\S/u.test(a))return!1;let c=a.replace(/^#{1,3}\s*/u,"").replace(/^第[一二三四五六七八九十百零〇\d]{1,4}[章节][、..::]?\s*/u,"").replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return!!d&&(c===d||c.startsWith(d))}(a,b)?-1:c).filter(a=>a>=0);if(0===f.length)throw Error(`交付正文里找不到目标章的标题行(该章可能未进入终稿正文):${b}`);if(f.length>1)throw Error(`交付正文里有 ${f.length} 处标题行都匹配「${b}」,无法确定改哪一处——不做猜测`);let g=f[0],h=-1;for(let a=g+1;a<c.length;a+=1)if(J.test(c[a])){h=a;break}return{start:d[g],end:h>=0?d[h]:a.length}}function L(a,b=40){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}function M(a,b){let c=(0,x.l)(b,a);if(c.length>0)throw Error(`补丁被确定性缺陷预检拒绝(人修通道按 enforce 处置,11.2):${c.join("、")}`)}function N(a){let{text:b,patch:c}=a;if(c.append){let d=(0,y.ZA)({content:b,anchor:c.anchor,replacement:c.replacement,title:a.title,forbidDrawingImages:a.forbidDrawingImages});if(!d.applied)throw Error("追加式补丁未落地:锚点未命中或追加内容被结构守卫拒绝(**不做静默无操作**)");return O(b,d.content),d.content}let d=b.indexOf(c.anchor);if(d<0)throw Error(`补丁锚点在目标正文里找不到(逐字匹配,不做模糊回退):${L(c.anchor)}`);if(c.endText){let a=b.indexOf(c.endText,d+c.anchor.length);if(a<0)throw Error(`区间补丁的结束锚点在起始锚点之后找不到:${L(c.endText)}`);M(b.slice(d,a+c.endText.length),c.replacement);let e=b.slice(0,d)+c.replacement+b.slice(a+c.endText.length);return O(b,e),e}M(c.anchor,c.replacement);let e=b.split(c.anchor).join(c.replacement);return O(b,e),e}function O(a,b){if((0,h.V7)(b)<Math.floor(.65*(0,h.V7)(a)))throw Error("补丁会让目标正文缩短超过 35%(守卫口径同 rolePipeline.ts:355):定点补丁不做整段删除,请拆成多处小改动或改走重写通道")}function P(a){let b,{context:c,targetNodeId:d,patch:e}=a,f=c.record.draft?.chapters||[],g=f.findIndex(a=>a.id===d);if(g<0)throw Error(`目标节点不在本文档节点表内(也不按 id 形态猜一个):${d}`);let h=f[g],i=(0,p.kO)(c.record.draft?.bidComposition),j=K(c.deliveredText,h.title),k=c.deliveredText.slice(j.start,j.end),l=[{kind:"chapter",before:h.content,after:N({text:h.content,title:h.title,patch:e,forbidDrawingImages:i})},{kind:"delivered",before:k,after:N({text:k,title:h.title,patch:e,forbidDrawingImages:i})}],m=c.record.draft?.markdown;if("string"==typeof m&&m.length>0)try{let a=K(m,h.title),c=m.slice(a.start,a.end);c===k?l.push({kind:"draftMarkdown",before:c,after:N({text:c,title:h.title,patch:e,forbidDrawingImages:i})}):b="归档草稿快照(draft.markdown)与交付正文的该章区段不同(用户编辑过或装配改写),未同步改写——它只是降级显示源,不参与判据与交付"}catch(a){b=`归档草稿快照(draft.markdown)里该章标题行不可定位(${a instanceof Error?a.message:String(a)}),未同步改写`}else b="归档里没有 draft.markdown(旧记录),无需同步";return{nodeId:d,chapterIndex:g,chapterTitle:h.title,targets:l,skippedDraftMarkdownBecause:b}}function Q(a){var b;let c=H({documentId:a.documentId,projectRoot:a.projectRoot,materialsRoot:a.materialsRoot,embedDocuments:a.embedDocuments}),d=c.options.projectRoot,e={...c.options,projectRoot:d},g=function(a){let b=a.draft?.agentWorkflow?.nodes,c=Array.isArray(b)?b.filter(a=>/block/i.test(String(a?.type||""))).map(a=>String(a.id)):[];return{chapterIds:(a.draft?.chapters||[]).map(a=>a.id),...c.length>0?{blockIds:c}:{}}}(c.record),i=(b={request:a.request,index:g,patchHandleAvailable:!0},(0,A.bo)({nodeKind:b.request.targetNodeId?(0,A._B)(b.request.targetNodeId,b.index):void 0,explicitPatch:!!b.request.patch,rerunHandleAvailable:!0===b.rerunHandleAvailable,patchHandleAvailable:b.patchHandleAvailable}));return{request:a.request,execution:i,snapshot:async()=>(0,f.BT)(a.documentId,d).hash,apply:async()=>{if(!a.request.patch)throw Error("归档态执行体只实现「用户显式定点补丁」:请求没有 patch 却被判为可执行(execution 契约被破坏)");return function(a){let b=P(a),c=(0,f.getGeneratedDocument)(a.context.options.documentId,a.context.options.projectRoot);if(!c)throw new G(`落盘前文档已不在归档:${a.context.options.documentId}`,a.context.options.documentId,"document-missing");let d=c.draft?.chapters||[],e=d[b.chapterIndex];if(!e||e.id!==b.nodeId)throw new G("落盘前归档已被改动(章序变了)——本次不写,避免把补丁打到别的章上",a.context.options.documentId,"chapter-shifted");let g=b.targets.find(a=>"chapter"===a.kind),i=b.targets.find(a=>"delivered"===a.kind),j=b.targets.find(a=>"draftMarkdown"===a.kind),k=K(a.context.deliveredText,e.title),l=a.context.deliveredText.slice(0,k.start)+i.after+a.context.deliveredText.slice(k.end),m=a.context.deliveredField,n=d.map((a,c)=>c===b.chapterIndex?{...a,content:g.after}:a),o=[`已改:章正文(draft.chapters[${b.chapterIndex}].content)与交付正文(${m})该章区段`,j?"归档草稿快照(draft.markdown)同区段已同步改写":`未改 draft.markdown:${b.skippedDraftMarkdownBecause}`];return(0,f.Yf)({...c,[m]:l,draft:c.draft?{...c.draft,chapters:n,...j?{markdown:function(a,b,c){let d=K(a,b);return a.slice(0,d.start)+c.after+a.slice(d.end)}(c.draft.markdown,e.title,j)}:{}}:c.draft},a.context.options.projectRoot),{nodeId:b.nodeId,beforeChars:(0,h.V7)(e.content),afterChars:(0,h.V7)(g.after),note:o.join(";")}}({context:H(e),targetNodeId:a.request.targetNodeId,patch:a.request.patch})},rollback:async b=>{(0,f.x7)(a.documentId,b,d)},recheckAll:()=>I(e),analyzeImpact:async()=>a.request.patch&&a.request.targetNodeId?function(a){let b=P(a),c=b.targets.find(a=>"delivered"===a.kind),d=[...new Set((0,w.Iu)([...a.context.record.draft?.structuredFacts||[],...a.context.record.draft?.factsModel?.preciseFacts||[]]).filter(a=>["project_name","project_code","owner"].includes(a.key)).map(a=>a.value.replace(/\s+/gu,"")))].filter(a=>a.length>=4),e=(a,b)=>{let c=a.replace(/\s+/gu,""),d=0,e=0;for(;;){let a=c.indexOf(b,e);if(a<0)break;d+=1,e=a+b.length}return d},f=d.filter(a=>e(c.before,a)!==e(c.after,a));if(f.length>0)return{affectedNodeIds:[b.nodeId],class:"pollution",reason:`本次改动增删改了项目身份值(${f.slice(0,3).map(a=>L(a,20)).join("、")})所在处:跨文档的标题指纹池/命名多样性改了就回不去`};let g=(a.context.record.draft?.chapters||[]).filter(a=>a.id!==b.nodeId).map(a=>a.content).join("\n"),h=/\d{2,}(?:\.\d+)?/gu,i=[...new Set(c.before.match(h)||[])],j=new Set(c.after.match(h)||[]),k=i.filter(a=>!j.has(a)&&g.includes(a));return k.length>0?{affectedNodeIds:[b.nodeId],class:"propagating",reason:`改动移除了 ${k.length} 个同时出现在其他章的数值(${k.slice(0,8).join("、")}):跨章数值一致性需要连带核对(本次只改目标节点,复检会重算)`}:{affectedNodeIds:[b.nodeId],class:"local",reason:"改动落在目标章内:未移除跨章共享数值、未触及项目身份值(其余五条 11.1 依赖由复检重算兜底)"}}({context:c,targetNodeId:a.request.targetNodeId,patch:a.request.patch}):{affectedNodeIds:a.request.targetNodeId?[a.request.targetNodeId]:[],class:"local",reason:"无显式补丁:影响面由重跑句柄负责(归档态不提供)"}}}function R(a){let b=function(a){let b=[];for(let c of a.matchAll(/[「『“"《【]([^」』”"》】]{2,})[」』”"》】]/gu))b.push(c[1].trim());for(let c of a.matchAll(/[0-9A-Za-z一-龥][0-9A-Za-z一-龥0-9.-]{2,}/gu))b.push(c[0].trim());return[...new Set(b.filter(a=>a.length>=4))]}(a.userMessage);if(0===b.length)return{method:"literal-search",candidates:[]};let c=a.context.record.draft?.chapters||[],d=[];for(let e of c){let c,f=0,g="",h=!1;try{c=K(a.context.deliveredText,e.title)}catch{c=void 0}let i=c?a.context.deliveredText.slice(c.start,c.end):"";for(let a of b){let b=e.title.includes(a);b&&(h=!0);let c=e.content.split(a).length-1,d=i.split(a).length-1,j=a.length*(c+d+ +!!b);if(j>0&&!g){let b=e.content.indexOf(a)>=0?e.content.indexOf(a):Math.max(0,i.indexOf(a));g=function(a,b,c){let d=Math.max(0,b-20),e=Math.min(a.length,b+c+20);return L(a.slice(d,e),40+c+2)}(e.content.indexOf(a)>=0?e.content:i,b,a.length)}f+=j}f>0&&d.push({nodeId:e.id,score:f,excerpt:g,titleHit:h})}d.sort((a,b)=>b.score-a.score||a.nodeId.localeCompare(b.nodeId));let e=d.slice(0,5);return{method:e[0]?.titleHit?"node-mention":"literal-search",candidates:e.map(({nodeId:a,score:b,excerpt:c})=>({nodeId:a,score:b,excerpt:c}))}}function S(a){let b=a.request.localization?.accepted;if(!a.documentEntry||!b)return;let{candidates:c}=R({context:a.context,userMessage:a.request.userMessage});if(!c.some(a=>a.nodeId===b))throw Error(`定位已漂移:确认的目标节点 ${b} 在当前正文里不再是候选(文档在创建请求与确认之间被改过)。候选已重算为 [${c.map(a=>a.nodeId).join("、")||"空"}]——请重新确认定位后再动手(不得照旧执行到已不存在的落点)。`)}function T(a){let{request:b,at:c}=a,d=b.transaction?.recheck,e={at:c,requestId:b.id,nodeId:b.targetNodeId,nodeKind:b.transaction?.nodeKind,action:b.transaction?.action,actionSource:b.transaction?.actionSource,userMessage:b.userMessage,localization:{method:b.localization?.method,candidateCount:b.localization?.candidates?.length??0,acceptedNodeId:b.localization?.accepted},changes:(b.transaction?.changes||[]).map(a=>({nodeId:a.nodeId,beforeChars:a.beforeChars,afterChars:a.afterChars})),outcome:b.outcome||"unfixable",attribution:F(b),impactClass:b.impact?.class,notExecutedReason:b.notExecutedReason};return d&&(e.netEffect={blocking:[d.before.blocking,d.after.blocking],entityPlacement:[d.before.entityPlacement,d.after.entityPlacement],chars:[d.before.chars,d.after.chars]}),e}function U(a,b){return(0,g.ZS)((function(a,b){let c,e=C(a,b);try{c=d.readFileSync(e,"utf8")}catch{return[]}let f=new Map;for(let a of c.split("\n"))if(a.trim())try{let b=JSON.parse(a);if(b?.v!==1||!b.request?.id)continue;f.set(b.request.id,{at:b.t,request:b.request})}catch{continue}return[...f.values()].sort((a,b)=>a.at-b.at||a.request.id.localeCompare(b.request.id))})(a,b).map(T))}},68023:(a,b,c)=>{function d(a,b){return!(b.blocking>=a.blocking)&&!(b.entityPlacement<a.entityPlacement)&&(!(a.chars>0)||!(b.chars<.9*a.chars))}function e(a,b){return b.chapterIds.includes(a)?"writing-chapter":b.blockIds?.includes(a)?"writing-block":b.detectorIds?.includes(a)?"deterministic":void 0}c.d(b,{Un:()=>d,_B:()=>e,bo:()=>g,de:()=>h});let f={"writing-chapter":{action:"rerun-with-feedback",why:"章写作节点的默认动作是带反馈重跑:补丁只能做局部文本手术——不能改结构、不能重新取证、不能重分配篇幅(4.4 的硬边界)。"},"writing-block":{action:"rerun-with-feedback",why:"块写作节点的默认动作是带反馈重跑:篇幅区间/事实密度/模板化是块级写作约束,补丁改不动它们的成因。"},deterministic:{action:"targeted-patch",why:"确定性处理节点(检测器/修复轮/清洗步骤)本来就是确定性的——定点补丁就是它的执行方式。"}};function g(a){if(!a.nodeKind)return{nodeKind:"deterministic",action:"targeted-patch",actionSource:"default",available:!1,reason:"目标节点不在本文档节点表内",unavailableReason:"目标节点不在本文档节点表内(也不按 id 形态猜一个)——11.4 的第一道闸是定位,不是「找个地方改下去」。"};let b=f[a.nodeKind],c=a.explicitPatch?"explicit-patch":"default",d=a.explicitPatch?"targeted-patch":b.action;return("rerun-with-feedback"===d?!0===a.rerunHandleAvailable:!0===a.patchHandleAvailable)?{nodeKind:a.nodeKind,action:d,actionSource:c,available:!0,reason:"explicit-patch"===c?`用户显式给定定点补丁 → 按定点补丁执行(注意:${b.why})`:b.why}:{nodeKind:a.nodeKind,action:d,actionSource:c,available:!1,reason:b.why,unavailableReason:"rerun-with-feedback"===d?`「带反馈重跑」需要生成会话句柄(工具层的 \`ToolContext.repairRounds\`,运行时接线目标见 services/agent/toolRegistry.ts:231 的 \`RepairRoundCapability\`)——归档态没有会话,故本次不可执行。补丁**不能**顶替它:${b.why}`:"定点补丁句柄不可用:正文不可写或快照不可回滚(无快照即无净效果回滚,宁可不动手)。"}}async function h(a){let b,c,e={...a.request,outcome:"unfixable"};a.execution&&(e.execution=a.execution);let f=a=>(e.outcome="unfixable",e.notExecutedReason=a,e),g=!!(e.targetNodeId||e.localization?.accepted);if(!g)return f("定位未确认:@文档 / 自然语言入口必须先给定位方案并交用户确认(11.4)。");if(a.execution&&!a.execution.available)return f(a.execution.unavailableReason??a.execution.reason);a.analyzeImpact&&(e.impact=await a.analyzeImpact());let h=e.impact?.class;if(e.impact?.class==="pollution")return f(`影响面判为跨文档污染(**不可回滚**):${e.impact.reason} 这类改动须交人裁决(要么重新校准,要么放弃本次改动)——故未拍快照、未改正文。`);let i=await a.snapshot();try{b=await a.recheckAll()}catch(a){return f(`复检基线不可用(应用前复检失败,未做任何正文改动):${a instanceof Error?a.message:String(a)}`)}let j=await a.apply(),k=j?Array.isArray(j)?[...j]:[j]:[];try{c=await a.recheckAll()}catch(c){await a.rollback(i);let b=k.length>0?`实际改动(已回滚):${k.map(a=>`${a.nodeId} ${a.beforeChars}→${a.afterChars} 字`).join("、")}。`:"应用阶段未回报改动凭据。";return f(`应用后复检失败,改动已回滚(无法判定净效果,故不提交):${c instanceof Error?c.message:String(c)} ${b}`)}let l=function(a){if(!a.localized)return{outcome:"unfixable",reason:"定位失败:未找到目标节点。**不得改别处充数**(11.4:定位错会改错地方,且会被记录成成功)。需先给定位方案并交用户确认。"};if(a.contradictoryVerdicts)return{outcome:"unfixable",reason:"判据内部矛盾:两条判据对同一文本结论相反。这不是文本的问题,是判据的问题——须升级到 C 级交人裁决(A5.3)。"};if(a.pollutionUnrollbackable)return{outcome:"unfixable",reason:"跨文档污染且不可回滚(改标题/事实/命名会污染标题指纹池与命名多样性):**要么回滚,要么重新校准**,没有第三条路——须交人决定。"};let b=a.coverageNote?` ⚠️ ${a.coverageNote}`:"";return d(a.before,a.after)?a.after.blocking>0?{outcome:"partial",reason:`净改善但仍有 ${a.after.blocking} 条阻断未清除(已提交本轮修改;残余由终门禁照常复核)${b}`}:{outcome:"fixed",reason:`全量判据复检净改善且阻断清零${b}`}:{outcome:"rolled-back",reason:`未获净改善,已回滚:阻断 ${a.before.blocking}→${a.after.blocking}、实体落位 ${a.before.entityPlacement}→${a.after.entityPlacement}、字数 ${a.before.chars}→${a.after.chars}(三条同时成立才算改善:阻断显著下降 + 实体不下降 + 字数不塌)${b}`}}({before:b,after:c,localized:g,contradictoryVerdicts:!!a.detectContradictoryVerdicts&&await a.detectContradictoryVerdicts(),pollutionUnrollbackable:"pollution"===h,coverageNote:function(a){let b=a.judges;if(!b)return"本次复检**未附判据台账**(复检实现未回报执行了哪些判据)——「全量」无法自证,此结论只在能自证时可信。";let c=[];if(b.degraded.length>0&&c.push(`${b.degraded.length} 条判据执行失败降级(${b.degraded.join("、")})`),b.missing.length>0&&c.push(`${b.missing.length} 条声明的判据本次未执行(${b.missing.join("、")})`),b.unavailableInputs.length>0&&c.push(`以下生成期输入在归档态取不到,对应判据为空跑:${b.unavailableInputs.join(";")}`),0!==c.length)return`复检覆盖不全(执行 ${b.executed.length} 条):${c.join(";")}。`}(c)});return e.transaction={snapshotHash:i,changes:k,recheck:{before:b,after:c},action:a.execution?.action,nodeKind:a.execution?.nodeKind,actionSource:a.execution?.actionSource,notExecutedReason:"rolled-back"===l.outcome?l.reason:void 0},e.outcome=l.outcome,"rolled-back"===l.outcome&&(await a.rollback(i),e.transaction.notExecutedReason=l.reason),e}}};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>F,zT:()=>E,II:()=>D,bJ:()=>K,Jr:()=>B,O0:()=>T,uj:()=>s,GC:()=>r,qj:()=>N,x8:()=>C,Kg:()=>I,a3:()=>R,Qs:()=>z,PI:()=>L,dB:()=>U,Jy:()=>Q,uv:()=>p,vp:()=>u,m_:()=>o,kH:()=>y,z9:()=>w,Aq:()=>P,RV:()=>M,Kq:()=>G});var d=c(82015),e=c(79270);let f=["failed","paused","repairing","blocked","running","pending","completed"],g=["chars","costUsd"];function h(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function i(a){let b=new Map;for(let c of a){if(void 0===c.parentId)continue;let a=b.get(c.parentId);a?a.push(c):b.set(c.parentId,[c])}for(let a of b.values())a.sort(h);return b}function j(a){let b=new Map(a.map(a=>[a.id,a])),c=new Map;for(let d of a){let a=0,e=d,f=new Set([d.id]);for(;e?.parentId!==void 0;){let c=b.get(e.parentId);if(!c||f.has(c.id))break;f.add(c.id),a+=1,e=c}c.set(d.id,a)}return c}let k=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","skill.load"]),l=new Set(["failed","paused","repairing","blocked","running","pending","completed"]),m={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:"进行中",color:"processing"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},paused:{key:"common.statusPaused",text:"已暂停",color:"gold"},repairing:{key:"common.statusRepairing",text:"修复中",color:"warning"},blocked:{key:"common.statusBlocked",text:"已放弃(阻塞)",color:"warning"},failed:{key:"common.statusAbnormal",text:"异常",color:"error"}};function n(a,b,c,d){let e=a[b];if(!e)return`未知${c}(${b||"空"})`;if(e.key&&d){let a=d(e.key);if(a&&a!==e.key)return a}return e.text}function o(a,b){return n(m,a,"状态",b)}function p(a){return m[a]?.color??"default"}let q={queued:{key:"common.statusWaiting",text:"排队中",color:"default"},generating:{key:"common.statusRunning",text:"生成中",color:"processing"},paused:{key:"common.statusPaused",text:"已暂停(节点边界生效)",color:"gold"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},completed_with_issues:{key:"common.statusReview",text:"完成(有需复核项)",color:"warning"},warning:{key:"common.statusReview",text:"需复核",color:"warning"},failed:{key:"common.statusAbnormal",text:"失败",color:"error"},aborted:{key:"common.statusAbnormal",text:"已中止",color:"default"}};function r(a,b){return n(q,a,"记录状态",b)}function s(a){return q[a]?.color??"default"}let t=["failed","paused","repairing","blocked","running","pending","completed"];function u(a){let b=t.indexOf(a);return b>=0?b:t.length}let v={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次",round:"收口轮","round.observe":"收口\xb7观察","round.decide":"收口\xb7判定","round.fix":"收口\xb7修复","repair.request":"修复\xb7请求","repair.localize":"修复\xb7定位","repair.impact":"修复\xb7影响面","repair.transaction":"修复\xb7事务","repair.recheck":"修复\xb7复检","skill.load":"技能命中",supervisor:"调度决策"};function w(a){return a?v[a]??a:"未知节点"}let x={role_binding:(0,d.createElement)(e.LinkOutlined),knowledge_retrieval:(0,d.createElement)(e.SearchOutlined),file_understanding:(0,d.createElement)(e.FileSearchOutlined),fact_extraction:(0,d.createElement)(e.TableOutlined),chapter_generation:(0,d.createElement)(e.EditOutlined),llm_review:(0,d.createElement)(e.AuditOutlined),validation:(0,d.createElement)(e.SafetyCertificateOutlined),reference:(0,d.createElement)(e.BookOutlined),prepare:(0,d.createElement)(e.ToolOutlined),understand:(0,d.createElement)(e.DatabaseOutlined),plan:(0,d.createElement)(e.ApartmentOutlined),blueprint:(0,d.createElement)(e.DeploymentUnitOutlined),write:(0,d.createElement)(e.FormOutlined),chapter:(0,d.createElement)(e.FileTextOutlined),block:(0,d.createElement)(e.BlockOutlined),turn:(0,d.createElement)(e.SyncOutlined),round:(0,d.createElement)(e.RetweetOutlined),close:(0,d.createElement)(e.CompressOutlined),deliver:(0,d.createElement)(e.ExportOutlined),repair:(0,d.createElement)(e.BugOutlined),skill:(0,d.createElement)(e.EyeOutlined),supervisor:(0,d.createElement)(e.ClusterOutlined),default:(0,d.createElement)(e.ToolOutlined)};function y(a){return x[a.split(".")[0]||a]??x.default}function z(a){return x[a]??x.default}function A(a){var b;let c=a.issues;return{id:a.id,...void 0!==a.parentId?{parentId:a.parentId}:{},type:a.type||"block",title:a.title??"",seq:"number"==typeof a.seq&&Number.isFinite(a.seq)?a.seq:0,status:"string"==typeof(b=a.status)&&l.has(b)?a.status:"failed",startedAt:"number"==typeof a.startedAt&&Number.isFinite(a.startedAt)&&a.startedAt>0?a.startedAt:0,...void 0!==a.completedAt?{completedAt:a.completedAt}:{},...a.progress?{progress:a.progress}:{},...a.metrics?{metrics:a.metrics}:{},...Array.isArray(c)&&c.length>0?{issues:c}:{},...void 0!==a.payloadRef?{payloadRef:a.payloadRef}:{}}}function B(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=i(a),c=j(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||h(a,b)),e=new Map(a.map(a=>[a.id,a]));for(let a of d){let c=b.get(a.id);if(!c||0===c.length)continue;let d=c.map(a=>e.get(a.id)??a);e.set(a.id,function(a,b){if(0===b.length)return{...a};let c=[...b].sort(h),d={...a.metrics??{}};for(let a of g){let b=function(a,b){let c=0,d=!1;for(let e of a){let a=e.metrics?.[b];"number"==typeof a&&Number.isFinite(a)&&(c+=a,d=!0)}return d?c:void 0}(c,a);void 0===b?delete d[a]:d[a]=b}let e=a.progress?.label,i={current:c.filter(a=>"completed"===a.status).length,total:c.length,...void 0!==e?{label:e}:{}},j=function(a){let b=new Set,c=[];for(let d of a){let a=d.provenance?.fingerprint;if("string"==typeof a&&a.length>0){if(b.has(a))continue;b.add(a)}c.push(d)}return c}(c.flatMap(a=>a.issues??[])),k=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=f.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(c.map(a=>a.status))??a.status;return{...a,status:k,progress:i,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(h).map(a=>e.get(a.id)??a)}(a),d=i(c),e=new Set(c.map(a=>a.id)),k=1/0,l=(a,b)=>{let c=b+1<k?(d.get(a.id)??[]).filter(b=>b.id!==a.id).map(a=>l(a,b+1)):[];return{...a,children:c}},m=c.filter(a=>void 0===a.parentId||!e.has(a.parentId)).sort(h).map(a=>l(a,0)),n=new Set,o=a=>{for(let b of a)n.add(b.id),o(b.children)};for(let a of(o(m),c))n.has(a.id)||m.push(l(a,0));return m})(function(a,b){if(void 0===b)return[...a];let c=j(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(A),b)).map(a=>(function a(b,c){let d=c.get(b.id),e=d?.type??String(b.type),f=b.issues;return{id:b.id,...void 0!==b.parentId?{parentId:b.parentId}:{},type:e,unknownType:!("string"==typeof e&&k.has(e)),title:b.title||w(e),seq:b.seq,status:b.status,..."number"==typeof b.startedAt&&b.startedAt>0?{startedAt:b.startedAt}:{},...void 0!==b.completedAt?{completedAt:b.completedAt}:{},...b.progress?{progress:b.progress}:{},metrics:b.metrics??{},issues:Array.isArray(f)?f:[],...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},children:b.children.map(b=>a(b,c))}})(a,c))}function C(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(h)}function D(a,b){let c=[],d=(a,e)=>{for(let f of a){if(f.id===b)return c.push(...e),!0;if(d(f.children,[...e,f.id]))return!0}return!1};return d(a,[]),c}let E=236,F=76;function G(a,b){if(!b)return a;let c=new Map(a),d=c.get(b.id)??{dx:0,dy:0};return c.set(b.id,{dx:d.dx+b.dx,dy:d.dy+b.dy}),c}let H=new Set(["running","repairing"]);function I(a){let b=new Set(a.nodes.filter(a=>H.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return J;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let J=new Set;function K(a,b){if(0===b.size)return a;let c=a.nodes.map(a=>{let c=b.get(a.node.id);return c?{...a,x:a.x+c.dx,y:a.y+c.dy}:a}),d=a.edges.map(a=>{let c=b.get(a.fromId),d=b.get(a.toId);return c||d?{...a,x1:a.x1+(c?.dx??0),y1:a.y1+(c?.dy??0),x2:a.x2+(d?.dx??0),y2:a.y2+(d?.dy??0)}:a});return{...a,nodes:c,edges:d}}function L(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(E+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(F+22),d+=1):g=(j[0].y+j[j.length-1].y)/2,b.push({node:a,x:i,y:g,depth:f}),j))c.push({id:`${a.id}->${e.id}`,fromId:a.id,toId:e.id,x1:i+E/2,y1:g+F,x2:e.x+E/2,y2:e.y});return{x:i,y:g}};for(let b of a)e(b,0),d+=1;let f=b.reduce((a,b)=>Math.max(a,b.x+E),0),g=b.reduce((a,b)=>Math.max(a,b.y+F),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function M(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function N(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let O=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function P(a){let{node:b,view:c,box:d,panelWidth:e,panelHeight:f,gap:g=12,margin:h=8,obstacles:i=[]}=a,j=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),k=Math.min(e,Math.max(0,d.width-2*h)),l=b.x*c.k+c.x,m=b.y*c.k+c.y,n=m+F*c.k,o={left:l,top:m,right:l+E*c.k,bottom:n},p=d.width-k-h,q=(a,b)=>{let c=i.filter(c=>c.top>=b&&c.left<a+k&&c.right>a).map(a=>a.top-g);return Math.max(0,Math.min(d.height-h,...c,d.height-h)-b)},r=a=>{let b=d.height-a-h,e=(c,d)=>{if(c<h||d<h||c>p||d>b)return!1;let e={left:c,top:d,right:c+k,bottom:d+a};return!i.some(a=>O(e,a))},f=l+(E+g)*c.k,r=l-k-g*c.k,s=n+g,t=m-a-g;for(let[a,b]of[[f,s],[f,t],[r,s],[r,t]])if(e(a,b))return{left:a,top:b,maxHeight:Math.max(0,Math.min(q(a,b),d.height-b-h))};let u=[f,r,h,p],v=[s,t,h,b,...i.flatMap(b=>[b.bottom+g,b.top-a-g])],w=null,x=1/0;for(let c of u)for(let d of v){let f=j(c,h,p),g=j(d,h,Math.max(h,b));if(!e(f,g))continue;let i={left:f,top:g,right:f+k,bottom:g+a},l=Math.max(Math.max(0,o.left-i.right,i.left-o.right),Math.max(0,o.top-i.bottom,i.top-o.bottom))+1e3*!!O(i,o);l<x&&(x=l,w={left:f,top:g})}return w?{...w,maxHeight:q(w.left,w.top)}:null};if(a.pin){let b=j(a.pin.left,h,p),c=j(a.pin.top,h,Math.max(h,d.height-2*h));return{left:b,top:c,maxHeight:Math.max(0,Math.min(q(b,c),d.height-c-h))}}let s=Math.min(f,Math.max(0,d.height-2*h)),t=r(s);if(t)return t;let u=function(a,b,c=8){let d=a.height-c,e=b.map(a=>({start:Math.max(c,a.top),end:Math.min(d,a.bottom)})).filter(a=>a.end>a.start).sort((a,b)=>a.start-b.start),f=0,g=c;for(let a of e)a.start>g&&(f=Math.max(f,a.start-g)),g=Math.max(g,a.end);return Math.max(f,d-g)}(d,i,h)-g;if(u>0&&u<s){let a=r(Math.max(120,u));if(a)return a}return t??r(Math.max(120,u))??{left:j(l+(E+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function Q(a){if("number"!=typeof a.startedAt||a.metrics?.instantEvent===!0)return;let b=("number"==typeof a.completedAt?a.completedAt:Date.now())-a.startedAt;return b>=0?b:void 0}function R(a){if(void 0===a)return"—";let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`}let S=[{key:"note",format:a=>String(a)},{key:"chars",format:a=>`${Number(a).toLocaleString()} 字`},{key:"targetWords",format:a=>`目标 ${Number(a).toLocaleString()} 字`},{key:"turn",format:a=>`第 ${a} 轮`},{key:"residual",format:a=>`残余 ${a}`},{key:"toolCalls",format:a=>`工具 ${a} 次`},{key:"attempt",format:a=>`第 ${a} 次尝试`},{key:"failureKinds",format:a=>String(a)},{key:"chapters",format:a=>`${a} 章`},{key:"facts",format:a=>`${a} 条事实`}];function T(a,b=2){let c=[];for(let{key:d,format:e}of S){let f=a[d];if(void 0===f||""===f||!1===f)continue;let g=e(f);if(g.trim()&&(c.push(g),c.length>=b))break}return c}function U(a,b=6){return Object.entries(a).slice(0,b).map(([a,b])=>({key:a,text:"number"==typeof b?`${a}: ${Number.isInteger(b)?b:b.toFixed(2)}`:`${a}: ${String(b)}`}))}},14352:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{_:()=>n});var e=c(8732),f=c(82015),g=c(60056),h=c(79270),i=c(94487),j=c(22147),k=c(85104),l=c(89668),m=a([i]);function n({currentDocumentId:a,projectRoot:b,onSelect:c,onCurrentDeleted:d}){let m=(0,i.Vr)(),{message:n}=g.qw.useApp(),p=(0,f.useRef)(null),[q,r]=(0,f.useState)([]),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(1),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)([]),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!0),I=(0,f.useRef)(null),J=(0,f.useCallback)(async()=>{t(!0);try{let a=await (0,j.cQ)(b||void 0);r(a.documents||[])}catch{r([])}finally{t(!1)}},[b]);q.length;let K=(0,f.useMemo)(()=>q.slice((w-1)*8,8*w),[q,w]),L=(0,f.useCallback)(a=>!(0,k.Ce)(a.status),[]),M=K.filter(L).map(a=>a.id),N=()=>{if(!u){let a=p.current?.parentElement?.getBoundingClientRect(),b=p.current?.getBoundingClientRect();H(!a||!b||b.top-a.top>252)}v(a=>!a)},O=async c=>{try{await (0,j.QG)(c.id,c.projectRoot||b||void 0),n.success(m("common.success")),B(a=>a.filter(a=>a!==c.id)),c.id===a&&d(),await J()}catch{n.error(m("common.error"))}},P=async()=>{let c=q.filter(a=>A.includes(a.id)&&L(a));if(0!==c.length){D(!0);try{await Promise.all(c.map(a=>(0,j.QG)(a.id,a.projectRoot||b||void 0))),n.success(m("records.deletedCount").replace("{count}",String(c.length))),a&&c.some(b=>b.id===a)&&d(),B([]),z(!1),await J()}catch{n.error(m("common.error"))}finally{D(!1)}}},Q=E?{left:E.left,top:E.top}:{right:24,bottom:96};return(0,e.jsxs)("div",{className:"canvasRecordsBall",ref:p,style:{position:"absolute",zIndex:3,...Q},children:[u&&(0,e.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...G?{bottom:52}:{top:52}},children:[(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsxs)("span",{className:"text-[13px] font-semibold text-[var(--colorText)]",children:[m("records.title"),(0,e.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:q.length})]}),(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{z(a=>!a),B([])},children:y?m("common.cancel"):m("records.batch")})]}),(0,e.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s&&0===q.length?(0,e.jsx)("div",{className:"py-10 text-center",children:(0,e.jsx)(g.tK,{size:"small"})}):0===q.length?(0,e.jsx)("div",{className:"py-8",children:(0,e.jsx)(g.Sv,{image:g.Sv.PRESENTED_IMAGE_SIMPLE,description:(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:m("records.empty")})})}):K.map(b=>{let d=b.id===a,f=L(b);return(0,e.jsxs)("div",{className:`group flex items-start gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] last:border-b-0 transition-colors ${d?"bg-[var(--colorBgSelected)]":"hover:bg-[var(--colorBgHover)]"}`,children:[y&&(0,e.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!f,checked:A.includes(b.id),onChange:a=>B(c=>a.target.checked?[...c,b.id]:c.filter(a=>a!==b.id))}),(0,e.jsxs)("button",{type:"button",className:"min-w-0 flex-1 text-left bg-transparent border-0 p-0 cursor-pointer",title:b.title,onClick:()=>{c(b),v(!1)},children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,e.jsx)("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full ${o[b.status]??"bg-[var(--colorTextTertiary)]"}`}),(0,e.jsx)("span",{className:`truncate text-[13px] ${d?"font-semibold text-[var(--colorText)]":"text-[var(--colorText)]"}`,children:b.title}),d&&(0,e.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--colorTextTertiary)]",children:m("records.current")})]}),(0,e.jsxs)("div",{className:"mt-0.5 pl-3 text-[11px] text-[var(--colorTextTertiary)]",children:[(0,e.jsx)(h.HistoryOutlined,{className:"mr-1"}),(0,l.fw)(b.updatedAt,"zh-CN")]})]}),!y&&f&&(0,e.jsx)(g.iS,{title:m("records.confirmDelete"),description:m("records.deleteHint"),onConfirm:()=>{O(b)},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:m("common.delete"),children:(0,e.jsx)(h.DeleteOutlined,{})})}),!y&&!f&&(0,e.jsx)(g.m_,{title:m("records.inFlightHint"),children:(0,e.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,e.jsx)(h.DeleteOutlined,{})})})]},b.id)})}),q.length>8&&(0,e.jsx)("div",{className:"flex justify-center px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:(0,e.jsx)(g.dK,{size:"small",simple:!0,current:w,total:q.length,pageSize:8,onChange:x})}),y&&(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextSecondary)]",children:m("records.checkedCount").replace("{count}",String(A.length))}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>B(A.length===M.length?[]:M),children:A.length===M.length&&M.length>0?m("records.clearSelect"):m("records.selectPage")}),(0,e.jsx)(g.iS,{title:m("records.confirmDeleteSelected").replace("{count}",String(A.length)),description:m("records.deleteHint"),disabled:0===A.length,onConfirm:()=>{P()},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===A.length||C,children:[(0,e.jsx)(h.DeleteOutlined,{className:"mr-1"}),m("records.deleteSelected")]})})]})]})]}),(0,e.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":`${m("records.title")}(${q.length})`,style:{width:44,height:44},onPointerDown:a=>{let b=p.current?.parentElement?.getBoundingClientRect(),c=p.current?.getBoundingClientRect();if(b&&c){I.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originLeft:c.left-b.left,originTop:c.top-b.top,moved:!1};try{a.currentTarget.setPointerCapture(a.pointerId)}catch{}}},onPointerMove:a=>{let b=I.current,c=p.current?.parentElement?.getBoundingClientRect();if(!b||b.pointerId!==a.pointerId||!c)return;let d=a.clientX-b.startX,e=a.clientY-b.startY;!b.moved&&5>Math.hypot(d,e)||(b.moved=!0,F({left:Math.min(Math.max(8,b.originLeft+d),Math.max(8,c.width-44-8)),top:Math.min(Math.max(8,b.originTop+e),Math.max(8,c.height-44-8))}))},onPointerUp:a=>{let b=I.current;I.current=null;try{a.currentTarget.releasePointerCapture(a.pointerId)}catch{}if(b){if(b.moved)return void F(a=>{if(a)try{window.localStorage.setItem("canvas:recordsBallPos",JSON.stringify(a))}catch{}return a});N()}},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),N())},children:[(0,e.jsx)(h.HistoryOutlined,{}),(0,e.jsx)("span",{className:`canvasRecordsBallBadge${0===q.length?" isZero":""}`,children:q.length>99?"99+":q.length})]})]})}i=(m.then?(await m)():m)[0];let o={completed:"bg-[var(--colorOk)]",completed_with_issues:"bg-[var(--colorDanger)]",warning:"bg-[var(--colorWarning)]",failed:"bg-[var(--colorDanger)]",aborted:"bg-[var(--colorTextTertiary)]",generating:"bg-[var(--colorAccent)]",queued:"bg-[var(--colorTextTertiary)]",paused:"bg-[var(--colorWarning)]"};d()}catch(a){d(a)}})},15642:(a,b,c)=>{c.d(b,{_:()=>i});var d=c(8732),e=c(82015),f=c(60056),g=c(79270);let{Text:h}=f.o5;function i(a){let{value:b,onChange:c,onSend:i,generating:j,submitting:k,disabled:l,disabledReason:m,selectedNode:n,onMentionSelected:o,resumable:p,onContinue:q,quickActions:r,requireGenerationSetup:s=!1,promptOptions:t=[],projectOptions:u=[],selectedPrompts:v=[],selectedProject:w=null,onSelectPrompts:x,onSelectProject:y,onPreviewStructure:z}=a,[A,B]=(0,e.useState)(!1),C=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],D=C.length>0,E=l?m||"当前不可发起生成":D?`请先用左侧「+」选择${C.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:"canvasInputBar",children:[(0,d.jsxs)(f.$x,{wrap:!0,size:6,style:{marginBottom:6},children:[n&&(0,d.jsx)(f.m_,{title:`把「@${n.title}」插入输入框(可见文本,可自行修改)`,children:(0,d.jsx)(f.vw,{color:"blue",style:{cursor:"pointer"},onClick:o,children:`@ ${n.title}`})}),!n&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),p&&!j&&(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:q,children:"继续生成"}),r?.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:a.onClick,children:a.label},a.key))]}),(0,d.jsxs)(f.$x,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,d.jsx)(f.l6,{mode:"multiple",style:{width:"100%",marginTop:4},value:v.map(a=>a.value),placeholder:0===t.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:t,onChange:a=>x?.(a)})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:w?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===u.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:u,onChange:a=>y?.(a)})]}),(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!s&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,d.jsx)("div",{children:(0,d.jsx)(f.$n,{size:"small",block:!0,disabled:D,onClick:()=>{B(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:D?"primary":"default",children:"提示词 / 项目"})}),v.map(a=>(0,d.jsx)(f.vw,{color:"blue",closable:!0,onClose:b=>{b.preventDefault(),x?.(v.filter(b=>b.value!==a.value).map(a=>a.value))},children:`提示词:${a.label}`},a.value)),w&&(0,d.jsx)(f.vw,{color:"geekblue",closable:!0,onClose:a=>{a.preventDefault(),y?.("")},children:`项目:${w.label}`})]}),(0,d.jsxs)(f.$x.Compact,{style:{width:"100%"},children:[(0,d.jsx)(f.pd.TextArea,{value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(a.preventDefault(),l||k||i())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)",disabled:l}),(0,d.jsx)(f.m_,{title:E,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||D||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]})]})}},16258:(a,b,c)=>{c.d(b,{p:()=>d});function d(a,b){let c=`/canvas/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},62025:(a,b,c)=>{c.d(b,{B:()=>g});var d=c(8732),e=c(60056);let{Paragraph:f}=e.o5;function g(a){let{open:b,title:c,chapters:g,outlineSource:h,materialScope:i,onClose:j}=a,k=g.length>0?`结构预览:${c}(${g.length} 章${h?`,大纲来源:${h}`:""})`:`结构预览:${c}`;return(0,d.jsxs)(e.aF,{open:b,title:k,centered:!0,onCancel:j,width:640,styles:{container:{maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column"},body:{overflowY:"auto",flex:1,minHeight:0}},footer:(0,d.jsx)(e.$n,{type:"primary",onClick:j,children:"知道了"}),children:[(0,d.jsx)(f,{type:"secondary",style:{fontSize:12,marginBottom:8},children:"章清单与小节由提示词的 <OUTLINE> 大纲 + 技能库(按章域 \xd7 工程类型)派生;这份预览与点「生成」时用的是同一个派生函数、同一份输入。 要看提示词会被怎样解读(必含表格 / 禁止项 / 字数下限),去提示词页的规则预览。"}),i&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,style:{marginBottom:8},message:`本次项目资料:${i.root||"(未指定)"}(${i.fileCount} 份文件)`,description:"资料范围已锁定在所选项目资料内:库里其它项目的材料不会进入本篇。"}),0===g.length&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,message:"本次没有派生出章清单",description:"派生的硬约束是提示词(或输入框要求)里要有 ≥2 章的显式大纲;缺大纲时服务端会直接拒绝这次生成,并在提示里说清缺什么。"}),(0,d.jsx)(e.B8,{size:"small",dataSource:g,renderItem:(a,b)=>(0,d.jsx)(e.B8.Item,{children:(0,d.jsx)(e.B8.Item.Meta,{title:`${b+1}. ${a.title}`,description:a.sections.length>0?a.sections.join("、"):"(无预设小节)"})})})]})}},85104:(a,b,c)=>{c.d(b,{Ce:()=>l,tl:()=>n});var d=c(82015),e=c(60056),f=c(79270),g=c(22147);let h=null,i=!1;function j(){h?.listeners.forEach(a=>a())}let k={role_binding:"角色配置绑定",knowledge_retrieval:"知识库检索",file_understanding:"多模态文件理解",fact_extraction:"LLM 事实抽取",chapter_generation:"LLM 章节生成",validation:"规则校验",llm_review:"LLM 审查优化",reference:"参考资源处理"};function l(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function m(a){let b=a.agentWorkflow?.nodes;if(!b||0===b.length)return null;let c=[...b].sort((a,b)=>(a.seq??0)-(b.seq??0)).map(a=>{let b=k[a.type]||a.title||a.type||"节点",c="failed"===a.status||"blocked"===a.status?"error":"paused"===a.status||"repairing"===a.status?"warning":"running"===a.status?"process":"pending"===a.status?"wait":"finish",e=Object.entries(a.metrics||{}).slice(0,4).map(([a,b])=>`${a}:${String(b)}`).join(" ");return{key:a.id,title:b,subtitle:a.progress?`${a.progress.label||"进度"}:${a.progress.current}/${a.progress.total}`:"",description:e,status:c,icon:function(a){let b=a.split(".")[0]||a;return"role_binding"===a||"prepare"===b?(0,d.createElement)(f.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(f.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(f.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(f.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(f.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(f.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(f.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(f.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(f.HistoryOutlined):(0,d.createElement)(f.FileTextOutlined)}(a.type),subSteps:[]}}),e="generating"===a.status||"queued"===a.status?c.find(a=>"process"===a.status)?.key??c.at(-1)?.key??null:"failed"===a.status||"aborted"===a.status?c.find(a=>"error"===a.status)?.key??c.at(-1)?.key??null:null;return{steps:c,activeKey:e}}function n(a={}){let{projectRoot:b,documents:c,onNotice:k,t:o,onGenerated:p}=a,[q,r]=(0,d.useState)([]),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[w,x]=(0,d.useState)(null),[y,z]=(0,d.useState)(""),[A,B]=(0,d.useState)(null),[C,D]=(0,d.useState)(a.documentId??null),[E,F]=(0,d.useState)(null),[G,H]=(0,d.useState)(c??[]),[I,J]=(0,d.useState)(0),[K,L]=(0,d.useState)(null),[M,N]=(0,d.useState)([]),[O,P]=(0,d.useState)(null),Q=(0,d.useRef)(""),R=(0,d.useRef)(new Map),S=(0,d.useRef)(new Map),T=(0,d.useRef)(!1),U=(0,d.useRef)(b),V=(0,d.useRef)(C),W=(0,d.useRef)(q),X=(0,d.useRef)(s),Y=(0,d.useRef)(u),Z=(0,d.useRef)(o),$=(0,d.useRef)(k),_=(0,d.useRef)(p),aa=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ab=(0,d.useCallback)(a=>{$.current?.(a)},[]),ac=(0,d.useCallback)((a,b)=>Z.current?.(a)??b,[]),ad=(0,d.useCallback)(async()=>{try{H((await (0,g.cQ)(U.current||void 0)).documents)}catch{H([])}},[]),ae=(0,d.useCallback)((a,b,c=Y.current)=>{h?.loading&&(h.flowSteps=a,h.activeFlowKey=b,h.loading=c,j())},[]),af=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=R.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&R.current.set(c.key,{...a,endedAt:b}):R.current.set(c.key,{startedAt:b})}},[]),ag=(0,d.useCallback)(a=>{let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`},[]),ah=(0,d.useCallback)(a=>{let b=a.agentWorkflow?.nodes||[],c=`${a.id}|${a.updatedAt}|${a.status}|${a.error||""}|n${b.length}:${b.map(a=>`${a.id}=${a.status}:${a.progress?.current??0}/${a.progress?.total??0}`).join(",")}`;if(Q.current===c)return;Q.current=c,B(a);let{steps:d,activeKey:e}=function(a,b={}){return m(a)??{steps:[],activeKey:null}}(a);af(d);let f=l(a.status);r(d),t(e),v(f),ae(d,e,f),F("failed"===a.status||"aborted"===a.status?a.error||("aborted"===a.status?"生成已中止":"生成失败"):null),("completed"===a.status||"completed_with_issues"===a.status||"warning"===a.status)&&(a.draft&&x(a.draft),z(a.editedMarkdown||a.markdown),N(a.exportReports||[]))},[ae,af]),ai=(0,d.useCallback)(a=>{a.id&&D(a.id),ah(a)},[ah]),aj=(0,d.useCallback)(async(a,b)=>{let c=Date.now(),d=0,e=Date.now(),f=null,h=0;for(;;){let i,j;if(b?.aborted)throw Error("用户中止");let k=new AbortController;b&&(b.pollController=k);try{let b=await (0,g.v7)(a,!0,U.current||void 0,k.signal,d||void 0);i=b.document,j=b.status,h=0}catch(a){if(b?.aborted||a instanceof DOMException&&"AbortError"===a.name)throw Error("用户中止",{cause:a});if((h+=1)>=3)throw a instanceof Error?a:Error("生成进度获取失败");await new Promise(a=>window.setTimeout(a,2e3*h));continue}finally{b?.pollController===k&&(b.pollController=void 0)}let l=i?"queued"===i.status:"queued"===j;if(l&&(e=Date.now(),Date.now()-c>216e5))throw Error("排队等待超时,请稍后刷新列表查看或取消后重新发起");if(!i){if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500));continue}if(ah(i),"generating"===i.status&&null===f&&(f=Date.now()),i.updatedAt!==d&&(d=i.updatedAt,e=Date.now()),("completed"===i.status||"completed_with_issues"===i.status||"warning"===i.status)&&i.draft)return i;if("warning"===i.status&&i.error&&/已中断/u.test(i.error))throw Error(i.error);if("failed"===i.status||"aborted"===i.status)throw Error(i.error||("aborted"===i.status?"生成已中止":"生成失败"));if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500))}},[ah]),ak=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,k=a.projectRoot||U.current;if(h?.aborted&&(h=null),h?.loading){if(T.current)return;if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});T.current=!0;try{let a=await (0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});await ad(),ab({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{T.current=!1}return}if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});v(!0);let l=W.current,n=l.length>0?l:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(f.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],o=X.current||"prepare";r(n),t(o);let p=(0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});h={id:Date.now(),specId:a.specId,loading:!0,flowSteps:n,activeFlowKey:o,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(aa,b.documentId),D(b.documentId),h?.promise===p&&(h.documentId=b.documentId)),await ad(),b.queuePosition&&ab({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await aj(b.documentId,h?.promise===p?h:void 0):void 0,d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&D(b.documentId||c.id),x(d),z(c?.editedMarkdown||c?.markdown||d.markdown),h?.promise===p&&(h.draft=d,h.content=c?.editedMarkdown||c?.markdown||d.markdown);let e=c||{id:b.documentId||`draft-${Date.now()}`,templateId:b.record?.templateId||b.documentSpec?.id||a.specId,templateName:b.record?.templateName||b.documentSpec?.title,title:d.title,requirement:d.requirement,projectRoot:d.projectRoot||U.current,projectId:d.projectId,markdown:d.markdown,status:d.validationIssues.some(a=>"error"===a.level||"warning"===a.level)||!d.exportGate.passed?"completed_with_issues":"completed",draft:d,executionStages:d.executionStages,assets:d.assets||[],createdAt:d.generatedAt,updatedAt:Date.now()},{steps:f}=m(e)??{steps:[],activeKey:null};r(f),ae(f,"done",!1),t("done"),h?.promise===p&&(h.activeFlowKey="done",h.loading=!1,j(),h=null),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"操作成功",key:"common.success"}),(b.documentId||c?.id)&&_.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(aa);let a=d instanceof Error?d.message:ac("common.error","出错了"),b=i;i=!1;let c=!b&&"用户中止"===a;F(a),b||r(b=>{let c=b.map(b=>"process"===b.status?{...b,status:"error",description:a,subSteps:b.subSteps.map((a,b)=>({...a,status:0===b?"error":a.status}))}:b);return ae(c,X.current,!1),c}),h?.promise===p&&(h.loading=!1,h.error=a,j(),h=null),await ad(),c?ab({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ab({kind:"error",text:a})}finally{v(!1),i=!1,h?.promise===p&&(h.loading=!1,j())}},[ab,ad,ae,aa,ac,aj]),al=(0,d.useCallback)(a=>{let b=S.current.get(a);b&&(clearInterval(b),S.current.delete(a))},[]),am=(0,d.useCallback)((a,b)=>{al(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,g.v7)(a,!0,b||U.current||void 0);if(!c)return;ah(c),await ad(),l(c.status)||(al(a),localStorage.removeItem(aa))}catch{}})()},2e3);S.current.set(a,c)},[ah,ad,al,aa]),an=(0,d.useCallback)(a=>{let b=R.current.get(a);if(!b)return null;let c=ag((b.endedAt??Date.now())-b.startedAt);return b.endedAt?c:`${c}(运行中)`},[I,ag]),ao=(0,d.useCallback)(async a=>{h&&(i=!0);let b=V.current;for(let c of(b&&await (0,g.r)(b,a||U.current||void 0).catch(()=>void 0),h&&(h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null),localStorage.removeItem(aa),S.current.values()))clearInterval(c);S.current.clear(),v(!1),r([]),t(null),F("用户中止"),await ad(),ab({kind:"info",text:"已中止生成任务"})},[ab,ad,aa]),ap=(0,d.useCallback)(async a=>{h?.loading&&h.documentId===a.id&&(i=!0,h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null,v(!1)),localStorage.removeItem(aa),al(a.id);try{await (0,g.r)(a.id,a.projectRoot||U.current||void 0),ab({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ab({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ad(),V.current===a.id&&(D(null),B(null),x(null),z(""))}},[ab,ad,al,aa]),aq=(0,d.useCallback)(async a=>{try{D(a.id),v(!0);let b=await (0,g.UQ)(a.id,a.projectRoot||U.current||void 0);localStorage.setItem(aa,b.documentId),await ad();let c=await aj(b.documentId);c.draft&&(x(c.draft),z(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"已继续生成并完成"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{v(!1)}},[ab,ad,aa,aj]),ar=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ab({kind:"info",text:d.message||"已请求暂停:将在当前节点边界停住并落盘"}),await ad(),am(a,b),d},[ab,ad,am]),as=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/resume-generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);ab({kind:"info",text:"已请求继续:将从暂停的节点边界接着跑"}),await ad()},[ab,ad]),at=(0,d.useCallback)((a,b,c)=>{let d=new Blob([a],{type:c}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=b,f.target="_self",f.rel="noopener",f.style.display="none",document.body.appendChild(f),f.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),f.remove(),window.setTimeout(()=>URL.revokeObjectURL(e),1e3)},[]),au=(0,d.useCallback)(async(a,b,c)=>{let{blob:d,filename:e,notDeliverable:f,gateIssues:h}=await (0,g.UE)(a);at(d,e||b,c),P(f?{at:Date.now(),count:h.length,issues:h}:null)},[at]),av=(0,d.useCallback)(a=>/导出门禁未通过|EXPORT_GATE_BLOCKED/u.test(a),[]),aw=(0,d.useCallback)(a=>new Promise(b=>{e.aF.confirm({title:ac("documents.exportGateBlockedTitle","导出门禁未通过"),content:`${a}
|
|
2
|
+
|
|
3
|
+
${ac("documents.nonDeliverableExportConfirm","仍要导出将产出「非交付物」文件(文件名带后缀且界面显著标注),是否继续?")}`,okText:ac("documents.exportAnywayNonDeliverable","仍要导出(非交付物)"),okButtonProps:{danger:!0},cancelText:ac("common.cancel","取消"),onOk:()=>b(!0),onCancel:()=>b(!1)})}),[ac]),ax=(0,d.useCallback)(async(a,b)=>{let c=a instanceof Error?a.message:ac("common.error","出错了");if(!av(c))return void ab({kind:"error",text:c});if(await aw(c))try{await b()}catch(a){ab({kind:"error",text:a instanceof Error?a.message:ac("common.error","出错了")})}},[aw,av,ab,ac]),ay=(0,d.useMemo)(()=>({markdown:"text/markdown;charset=utf-8",html:"text/html;charset=utf-8",pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}),[]),az=(0,d.useCallback)(async(a,b)=>{let c=a.editedMarkdown||a.markdown||a.draft?.markdown||"";if(!c.trim())return void ab({kind:"warning",text:"该记录暂无可导出的正文内容"});L(b);let d="markdown"===b?"md":b,e={documentId:a.id,title:a.title,markdown:c,format:b,useClientMarkdown:!0,projectRoot:a.projectRoot||U.current||void 0};try{await au(e,`${a.title}.${d}`,ay[b])}catch(c){await ax(c,async()=>{await au({...e,allowNonDeliverable:!0},`${a.title}.${d}`,ay[b])})}finally{L(null)}},[au,ay,ax,ab]),aA=(0,d.useCallback)(async a=>{if(!w)return;L(a);let b="markdown"===a?"md":a,c={documentId:V.current||void 0,title:w.title,markdown:y,format:a,exportGate:w.exportGate,useClientMarkdown:!0,projectRoot:w.projectRoot||U.current||void 0};try{if(await au(c,`${w.title}.${b}`,ay[a]),V.current)try{let{document:a}=await (0,g.v7)(V.current,!1,w.projectRoot||U.current||void 0);a&&N(a.exportReports||[])}catch{}}catch(d){await ax(d,async()=>{await au({...c,allowNonDeliverable:!0},`${w.title}.${b}`,ay[a])})}finally{L(null)}},[y,au,w,ay,ax]),aB=C?G.find(a=>a.id===C)??A:A,aC=function(a,b){if(!a)return b?"running":"idle";switch(a){case"queued":return"queued";case"generating":return"running";case"paused":return"paused";case"failed":case"aborted":return"stopped";case"completed_with_issues":case"warning":return"issues";case"completed":return"done";default:return"idle"}}(aB?.status,u);return{flowSteps:q,activeFlowKey:s,loading:u,draft:w,content:y,workflowRecord:A,documentId:C,documents:G,error:E,phase:aC,flowTick:I,boundRecord:aB,canResume:function(a){let b=!!a&&l(a.status);return!!a&&("paused"===a.status||"failed"===a.status||"aborted"===a.status||"completed_with_issues"===a.status||"warning"===a.status&&!!a.checkpointChapters?.length&&/继续生成|重新生成|中断|卡住|未完成|门禁|阻断/u.test(a.error||a.warningIssues?.join(";")||a.draft?.exportGate?.blockingIssues?.map(a=>a.message).join(";")||"")||!b&&!!(a.draft?.exportGate&&!1===a.draft.exportGate.passed))}(aB),startGeneration:ak,abortGeneration:ao,abortDocument:ap,resumeDocument:aq,pauseDocument:ar,resumePausedDocument:as,applyRecord:ai,refreshDocuments:ad,waitForDoc:aj,stepDurationText:an,setDraft:x,setContent:z,setExportReports:N,export:{exporting:K,nonDeliverableExport:O,exportRecord:az,exportEditor:aA,downloadExport:au,handleExportError:ax,confirmNonDeliverableExport:aw,exportReports:M}}}},85202:(a,b,c)=>{c.d(b,{B:()=>h,VF:()=>f,ff:()=>g,s_:()=>i});var d=c(82015),e=c(1168);let f=24;function g(a,b,c,d=80){let e=a.x*b.k+b.x,f=a.y*b.k+b.y,h=e+a.width*b.k,i=f+a.height*b.k;return!(h>=-d&&i>=-d&&e<=c.width+d&&f<=c.height+d)}function h(a,b,c,d=24){let e=b.x,f=b.y,g=b.x+a.width*b.k,i=b.y+a.height*b.k,j=Math.min(g,c.right)-Math.max(e,c.left),k=Math.min(i,c.bottom)-Math.max(f,c.top);return j>=d&&k>=d?{dx:0,dy:0}:{dx:c.left+d-e,dy:c.top+d-f}}function i(){let[a,b]=(0,d.useState)({x:0,y:0,k:1}),c=(0,d.useRef)(null),f=(0,d.useRef)(null),g=(0,d.useRef)(a),h=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=Math.min(2,Math.max(.1,b.k*a)),g=c.current?.getBoundingClientRect();if(!g||void 0===d||void 0===e)return{...b,k:f};let h=(d-g.left-b.x)/b.k,i=(e-g.top-b.y)/b.k;return{k:f,x:d-g.left-h*f,y:e-g.top-i*f}})},[]),[i,j]=(0,d.useState)(null),k=(0,d.useCallback)(a=>{if(0!==a.button)return;a.currentTarget.setPointerCapture(a.pointerId);let b=g.current;f.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originX:b.x,originY:b.y}},[]),l=(0,d.useCallback)(a=>{let c=f.current;c&&c.pointerId===a.pointerId&&b(b=>({...b,x:c.originX+(a.clientX-c.startX),y:c.originY+(a.clientY-c.startY)}))},[]),m=(0,d.useCallback)(()=>{f.current=null},[]),n=(0,d.useCallback)(()=>b({x:0,y:0,k:1}),[]),o=(a,b)=>b??{left:0,top:0,right:a.width,bottom:a.height},p=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=c.current?.getBoundingClientRect();if(!f||a<=0||d<=0)return{...b,x:0,y:0};let g=o(f,e),h=Math.max(1,g.right-g.left),i=Math.max(1,g.bottom-g.top),j=Math.min(2,Math.max(.1,Math.min(h/a,i/d)));return{k:j,x:g.left+(h-a*j)/2,y:g.top+(i-d*j)/2}})},[]),q=(0,d.useCallback)((a,d,f,g)=>{b(b=>{let h=c.current?.getBoundingClientRect();if(!h)return b;let i=o(h,g),j=f??b.k,k=(i.left+i.right)/2,l=(i.top+i.bottom)/2;return{k:j,x:k-(a+e.zT/2)*j,y:l-(d+e.EL/2)*j}})},[]);return{view:a,containerRef:c,zoomAt:h,onPointerDown:k,onPointerMove:l,endDrag:m,reset:n,fit:p,centerOn:q,panBy:(0,d.useCallback)((a,c)=>{(0!==a||0!==c)&&b(b=>({...b,x:b.x+a,y:b.y+c}))},[])}}},89668:(a,b,c)=>{function d(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024)),c=a/Math.pow(1024,b);return`${c.toFixed(+(0!==b))} ${["B","KB","MB","GB","TB"][b]}`}function e(a,b="zh-CN"){let c=Math.max(0,Math.floor(a)),d=Math.floor(c/86400),f=Math.floor(c%86400/3600),g=Math.floor(c%3600/60),h="en-US"===b;return d>0?h?`${d}d ${f}h`:`${d} 天 ${f} 小时`:f>0?h?`${f}h ${g}m`:`${f} 小时 ${g} 分`:g>0?h?`${g}m`:`${g} 分`:h?"Just now":"刚刚"}function f(a,b="zh-CN"){if(!a||a<=0)return"en-US"===b?"Never":"从未";let c=Math.floor(Math.floor((Date.now()-a)/1e3)/60),d=Math.floor(c/60),e=Math.floor(d/24);return e>30?new Date(a).toLocaleDateString(b):"en-US"===b?e>0?`${e}d ago`:d>0?`${d}h ago`:c>0?`${c}m ago`:"Just now":e>0?`${e} 天前`:d>0?`${d} 小时前`:c>0?`${c} 分钟前`:"刚刚"}c.d(b,{Jm:()=>i,a3:()=>e,fw:()=>f,mc:()=>j,z3:()=>d});let g={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},h={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function i(a,b="zh-CN"){return("en-US"===b?h:g)[a]??a}let j={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}}};
|