@customize-agent/server 4.59.1 → 4.59.3

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.
Files changed (225) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +33 -28
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +5 -2
  5. package/.next/routes-manifest.json +16 -0
  6. package/.next/server/chunks/1001.js +2 -56
  7. package/.next/server/chunks/1243.js +3 -0
  8. package/.next/server/chunks/1928.js +1 -1
  9. package/.next/server/chunks/1936.js +2 -2
  10. package/.next/server/chunks/2328.js +6 -0
  11. package/.next/server/chunks/2434.js +4 -4
  12. package/.next/server/chunks/3806.js +1 -0
  13. package/.next/server/chunks/4974.js +2 -0
  14. package/.next/server/chunks/5304.js +2 -0
  15. package/.next/server/chunks/5746.js +5 -0
  16. package/.next/server/chunks/6321.js +1 -3
  17. package/.next/server/chunks/7931.js +142 -0
  18. package/.next/server/chunks/8204.js +1 -1
  19. package/.next/server/chunks/9666.js +142 -0
  20. package/.next/server/instrumentation.js +1 -0
  21. package/.next/server/instrumentation.js.nft.json +1 -0
  22. package/.next/server/middleware-build-manifest.js +1 -1
  23. package/.next/server/pages/404.html +1 -1
  24. package/.next/server/pages/500.html +1 -1
  25. package/.next/server/pages/api/assets/generated/preview.js +1 -1
  26. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  27. package/.next/server/pages/api/assets/generated.js +1 -1
  28. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  29. package/.next/server/pages/api/config/embedding/healthCheck.js +2 -1
  30. package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
  31. package/.next/server/pages/api/config/embedding.js +2 -1
  32. package/.next/server/pages/api/config/embedding.js.nft.json +1 -1
  33. package/.next/server/pages/api/config/healthCheck.js +2 -2
  34. package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
  35. package/.next/server/pages/api/config/models.js +2 -1
  36. package/.next/server/pages/api/config/models.js.nft.json +1 -1
  37. package/.next/server/pages/api/config/providers/[provider].js +2 -1
  38. package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
  39. package/.next/server/pages/api/config/providers.js +2 -2
  40. package/.next/server/pages/api/config/providers.js.nft.json +1 -1
  41. package/.next/server/pages/api/config/web-access.js +2 -1
  42. package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
  43. package/.next/server/pages/api/documents/canvas/[id].js +1 -2
  44. package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
  45. package/.next/server/pages/api/documents/export.js +11 -9
  46. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  47. package/.next/server/pages/api/documents/generate/preview.js +1 -2
  48. package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
  49. package/.next/server/pages/api/documents/generate.js +1 -2
  50. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  51. package/.next/server/pages/api/documents/generated/[id]/events.js +2 -3
  52. package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
  53. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +1 -1
  54. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
  55. package/.next/server/pages/api/documents/generated/[id]/instruction.js +2 -0
  56. package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -0
  57. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +1 -2
  58. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
  59. package/.next/server/pages/api/documents/generated/[id]/nodes.js +1 -2
  60. package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
  61. package/.next/server/pages/api/documents/generated/[id]/pause.js +1 -2
  62. package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
  63. package/.next/server/pages/api/documents/generated/[id]/preview.js +1 -2
  64. package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
  65. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
  66. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
  67. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +1 -1
  68. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
  69. package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
  70. package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
  71. package/.next/server/pages/api/documents/generated/[id]/report.js +1 -0
  72. package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +1 -0
  73. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +1 -2
  74. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
  75. package/.next/server/pages/api/documents/generated/[id].js +1 -2
  76. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  77. package/.next/server/pages/api/documents/generated.js +1 -1
  78. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  79. package/.next/server/pages/api/health.js +1 -1
  80. package/.next/server/pages/api/jobs/[id].js +2 -5
  81. package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
  82. package/.next/server/pages/api/kb/categories.js +1 -4
  83. package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
  84. package/.next/server/pages/api/kb/duplicates.js +1 -4
  85. package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
  86. package/.next/server/pages/api/kb/features.js +2 -1
  87. package/.next/server/pages/api/kb/features.js.nft.json +1 -1
  88. package/.next/server/pages/api/kb/files/detail.js +1 -6
  89. package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
  90. package/.next/server/pages/api/kb/files/export.js +1 -5
  91. package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
  92. package/.next/server/pages/api/kb/files/open.js +1 -4
  93. package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
  94. package/.next/server/pages/api/kb/files/preview-pdf-page.js +1 -4
  95. package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
  96. package/.next/server/pages/api/kb/files/reindex.js +2 -1
  97. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  98. package/.next/server/pages/api/kb/files/search.js +1 -5
  99. package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
  100. package/.next/server/pages/api/kb/files.js +2 -6
  101. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  102. package/.next/server/pages/api/kb/ignore.js +1 -4
  103. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  104. package/.next/server/pages/api/kb/material-groups.js +1 -2
  105. package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
  106. package/.next/server/pages/api/kb/operations.js +2 -5
  107. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  108. package/.next/server/pages/api/kb/reindex.js +2 -1
  109. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  110. package/.next/server/pages/api/kb/stats.js +1 -4
  111. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  112. package/.next/server/pages/api/kb/tags.js +1 -4
  113. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  114. package/.next/server/pages/api/kb/upload/complete.js +2 -1
  115. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  116. package/.next/server/pages/api/kb/upload.js +2 -1
  117. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  118. package/.next/server/pages/api/prompt/chat.js +5 -11
  119. package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
  120. package/.next/server/pages/api/prompt.js +2 -1
  121. package/.next/server/pages/api/prompt.js.nft.json +1 -1
  122. package/.next/server/pages/api/skills/[id].js +1 -1
  123. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  124. package/.next/server/pages/api/skills/validate.js +1 -1
  125. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  126. package/.next/server/pages/api/skills.js +1 -1
  127. package/.next/server/pages/api/skills.js.nft.json +1 -1
  128. package/.next/server/pages/api/system/data-health.js +2 -0
  129. package/.next/server/pages/api/system/data-health.js.nft.json +1 -0
  130. package/.next/server/pages/api/system/logs.js +2 -2
  131. package/.next/server/pages/api/system/logs.js.nft.json +1 -1
  132. package/.next/server/pages/api/system/reset.js +1 -0
  133. package/.next/server/pages/api/{kb/intelligence.js.nft.json → system/reset.js.nft.json} +1 -1
  134. package/.next/server/pages/api/system/stats.js +2 -1
  135. package/.next/server/pages/api/system/stats.js.nft.json +1 -1
  136. package/.next/server/pages/canvas/[id].html +1 -1
  137. package/.next/server/pages/canvas.html +1 -1
  138. package/.next/server/pages/documents.html +1 -1
  139. package/.next/server/pages/guide.html +1 -1
  140. package/.next/server/pages/index.html +1 -1
  141. package/.next/server/pages/knowledge/file-detail.html +1 -1
  142. package/.next/server/pages/knowledge/files.html +1 -1
  143. package/.next/server/pages/knowledge/manage.html +1 -1
  144. package/.next/server/pages/knowledge.html +1 -1
  145. package/.next/server/pages/models.html +1 -1
  146. package/.next/server/pages/overview.html +1 -1
  147. package/.next/server/pages/prompt.html +1 -1
  148. package/.next/server/pages/settings.html +1 -1
  149. package/.next/server/pages/skills.html +1 -1
  150. package/.next/server/pages/system/logs.html +1 -1
  151. package/.next/server/pages-manifest.json +36 -38
  152. package/.next/server/webpack-runtime.js +1 -1
  153. package/.next/static/7819131dbd58574b80d0784549af250fc9b202d0e2317de83fe25857af834b79/_buildManifest.js +1 -0
  154. package/.next/static/chunks/278-31fbe7e1b733a9b7.js +1 -0
  155. package/.next/static/chunks/530-d9f0418ec7ab040f.js +1 -0
  156. package/.next/static/chunks/709-14ed28f1f6d4b25e.js +1 -0
  157. package/.next/static/chunks/713-b1ce7a4a4ef015f4.js +1 -0
  158. package/.next/static/chunks/795-48065c56c3b80339.js +1 -0
  159. package/.next/static/chunks/864-b06700e1a4e573f2.js +6 -0
  160. package/.next/static/chunks/90-3a5ea00990b4e72b.js +1 -0
  161. package/.next/static/chunks/964-7e9fe2d80a53aeee.js +78 -0
  162. package/.next/static/chunks/pages/{_app-ebb535779b63fd5d.js → _app-591ac7a50d506b05.js} +20 -20
  163. package/.next/static/chunks/pages/canvas/[id]-3c2b950c135f6699.js +1 -0
  164. package/.next/static/chunks/pages/{canvas-323d44fe56d685a7.js → canvas-9086d8d3a7d32776.js} +1 -1
  165. package/.next/static/chunks/pages/guide-a8eecc6c02b5bb9c.js +1 -0
  166. package/.next/static/chunks/pages/knowledge/file-detail-bd4b6e4264e812ff.js +1 -0
  167. package/.next/static/chunks/pages/knowledge-a65ec687334ffed0.js +1 -0
  168. package/.next/static/chunks/pages/models-baf1d15d79cb366b.js +1 -0
  169. package/.next/static/chunks/pages/prompt-b8af2cef904e3e19.js +1 -0
  170. package/.next/static/chunks/pages/settings-81dffd92939c1d36.js +1 -0
  171. package/.next/static/chunks/pages/skills-648c64f8cb37ef5d.js +1 -0
  172. package/.next/static/chunks/pages/system/logs-1f54b6c8791daa77.js +1 -0
  173. package/.next/static/css/f35b901a72bb3ade.css +1 -0
  174. package/README.md +48 -45
  175. package/messages/en-US.json +76 -65
  176. package/messages/zh-CN.json +76 -65
  177. package/next.config.ts +5 -0
  178. package/package.json +7 -9
  179. package/public/fonts/NotoSansCJKsc-Regular.otf +0 -0
  180. package/public/fonts/OFL-Noto-CJK.txt +142 -0
  181. package/public/fonts/font-manifest.json +8 -0
  182. package/scripts/build-identity.cjs +67 -0
  183. package/scripts/capture-baseline.mjs +100 -290
  184. package/scripts/check-workspace-deps.cjs +141 -0
  185. package/scripts/half-built-scan.allow.json +142 -0
  186. package/scripts/half-built-scan.baseline.json +206 -0
  187. package/scripts/half-built-scan.mjs +275 -55
  188. package/scripts/kb-fingerprint-worker.cjs +28 -0
  189. package/scripts/kb-index-worker.cjs +27 -20
  190. package/scripts/kb-worker-ipc.cjs +34 -0
  191. package/scripts/purge-next-artifacts.cjs +70 -0
  192. package/scripts/verify-next-static.js +2 -2
  193. package/.next/server/chunks/299.js +0 -50
  194. package/.next/server/chunks/5547.js +0 -350
  195. package/.next/server/chunks/6087.js +0 -3
  196. package/.next/server/pages/api/jobs.js +0 -5
  197. package/.next/server/pages/api/jobs.js.nft.json +0 -1
  198. package/.next/server/pages/api/kb/evaluate.js +0 -10
  199. package/.next/server/pages/api/kb/evaluate.js.nft.json +0 -1
  200. package/.next/server/pages/api/kb/files/tree.js +0 -5
  201. package/.next/server/pages/api/kb/files/tree.js.nft.json +0 -1
  202. package/.next/server/pages/api/kb/intelligence.js +0 -1
  203. package/.next/server/pages/api/kb/search.js +0 -4
  204. package/.next/server/pages/api/kb/search.js.nft.json +0 -1
  205. package/.next/server/pages/api/kb/upload/progress.js +0 -5
  206. package/.next/server/pages/api/kb/upload/progress.js.nft.json +0 -1
  207. package/.next/static/4xQDkixSretJDM503EzIq/_buildManifest.js +0 -1
  208. package/.next/static/chunks/243-03eba51d5d737e98.js +0 -1
  209. package/.next/static/chunks/289-0cccd8131332e041.js +0 -78
  210. package/.next/static/chunks/422-46f07037c58d2309.js +0 -1
  211. package/.next/static/chunks/445-d12731f107978b10.js +0 -6
  212. package/.next/static/chunks/530-6f3f5848c6f702ae.js +0 -1
  213. package/.next/static/chunks/709-a7c652953ccd3b4b.js +0 -1
  214. package/.next/static/chunks/795-9e0cb0bb11e8c89f.js +0 -1
  215. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +0 -1
  216. package/.next/static/chunks/pages/guide-7367305082617e3c.js +0 -1
  217. package/.next/static/chunks/pages/knowledge/file-detail-aee7c15541d1d130.js +0 -1
  218. package/.next/static/chunks/pages/knowledge-09dde24cdce1b195.js +0 -1
  219. package/.next/static/chunks/pages/models-8b96ba85131d5408.js +0 -1
  220. package/.next/static/chunks/pages/prompt-6a224562d194cb45.js +0 -1
  221. package/.next/static/chunks/pages/settings-0a7709bf039a2a4d.js +0 -1
  222. package/.next/static/chunks/pages/skills-3d77213c3e9ef0b5.js +0 -1
  223. package/.next/static/chunks/pages/system/logs-70790bee46e5a08d.js +0 -1
  224. package/.next/static/css/85c434f8fd3a17ae.css +0 -1
  225. /package/.next/static/{4xQDkixSretJDM503EzIq → 7819131dbd58574b80d0784549af250fc9b202d0e2317de83fe25857af834b79}/_ssgManifest.js +0 -0
@@ -0,0 +1,6 @@
1
+ "use strict";exports.id=2328,exports.ids=[2328],exports.modules={22328:(a,b,c)=>{c.d(b,{I4:()=>r,Q6:()=>q,WW:()=>t,oO:()=>p,oy:()=>n,rN:()=>m,xv:()=>o});var d=c(73024),e=c(76760),f=c(70949),g=c(77416),h=c(44533),i=c(58543),j=c(68023);class k extends Error{constructor(a,b,c){super(a),this.file=b,this.cause=c,this.name="RepairStoreError"}}function l(a,b){return e.join(b,`${a}.repairs.jsonl`)}function m(a,b,c){let f=l(a,c),g={v:1,t:Date.now(),request:b};try{d.mkdirSync(e.dirname(f),{recursive:!0}),d.appendFileSync(f,`${JSON.stringify(g)}
2
+ `)}catch(b){throw new k(`修复请求落盘失败(节点/修复日志是唯一真相源,不得静默丢):${a}`,f,b)}}function n(a,b){let c,e=l(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 o(a){return a.targetNodeId||a.localization?.accepted?a.transaction?(0,j.Ui)(a.transaction.recheck.before,a.transaction.recheck.after)||a.transaction.recheck.after.contractQuality?.requestedChangeVerified!==!0?"unclassified":/资料|证据|材料|知识库/u.test(a.impact?.reason||"")?"material-insufficient":(0,j.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 p extends Error{constructor(){super("该历史文档没有冻结合同和统一文档模型,不能按新体系自动补写;历史正文与报告仍可读取"),this.code="NATIVE_REPAIR_CONTRACT_REQUIRED",this.name="NativeRepairContractRequiredError"}}function q(a){let b=(0,f.getGeneratedDocument)(a.documentId,a.projectRoot);if(!b)throw Error("待修订文档不存在");if(!(0,i.Jd)(b))throw new p;return(0,i.fC)({request:a.request,documentId:a.documentId,projectRoot:a.projectRoot??b.projectRoot??(0,h.aY)()})}function r(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))]}function s(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:o(b),impactClass:b.impact?.class,notExecutedReason:b.notExecutedReason};if(d){let a=(0,j.Ui)(d.before,d.after)??("fixed"!==b.outcome&&"partial"!==b.outcome||(0,j.Un)(d.before,d.after)?void 0:"回执未证明请求修改已核验且同合同复验未退步");a&&(e.notExecutedReason=[e.notExecutedReason,`历史修复结果无法按当前固定合同验证:${a};原始 outcome 仅为历史记录,观察计数不代表七维验收。`].filter(Boolean).join(" ")),e.netEffect={blocking:[d.before.blocking,d.after.blocking],entityPlacement:[d.before.entityPlacement,d.after.entityPlacement],chars:[d.before.chars,d.after.chars]}}return e}function t(a,b){return(0,g.ZS)((function(a,b){let c,e=l(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(s))}},58543:(a,b,c)=>{c.d(b,{fC:()=>J,Du:()=>I,pA:()=>L,Jd:()=>G});var d=c(73024),e=c.n(d),f=c(77598),g=c(32460),h=c(70949),i=c(7942),j=c(35091),k=c(31698),l=c(21123),m=c(94173),n=c(19444),o=c(80408),p=c(12866),q=c(22157),r=c(59948),s=c(30839),t=c(72275),u=c(34680),v=c(68115),w=c(43800),x=c(41791),y=c(62065),z=c(51326),A=c(7661),B=c(51750),C=c(48479),D=c(94776);let E=a=>(0,f.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),F=a=>Object.fromEntries(Object.entries(a.tasks).map(([a,b])=>[a,b.current.output]));function G(a){return!!(a.nativeRevision||a.reviewMetadata?.contractQuality||a.draft?.reviewMetadata?.contractQuality)}function H(a,b){if(!a.runId||!a.draft||["generating","queued"].includes(a.status))throw Error("结构化修复需要已经停止写入的文档运行及完整草稿资产");let c=(0,h.Gl)(b),d=(b,d)=>{let g=e().readFileSync((0,i.HM)(c,b,a.runId));if(d&&(0,f.createHash)("sha256").update(g).digest("hex")!==d)throw Error("结构化修订资产哈希不一致");return JSON.parse(g.toString("utf8"))},g=d("author-resume-state.json");(0,j.oH)(g.contract),(0,k.oG)(b,g.projectModel);let p=g.writerContext.sharedConstructionPlan;if(!p)throw Error("当前结构化文档缺少同版共享施工计划,不能恢复来源适用性校验");(0,l.wB)(p,g.contract,g.projectModel),(0,m.tD)(g.projectModel,g.contract.sections.map(a=>(0,l.G6)(p,g.projectModel,a.id))),(0,n.R)(g.projectModel,c,a.runId),(0,n.u)(g.projectModel,c,a.runId);let q=d(a.nativeRevision?.modelFile??"document-model-final.json",a.nativeRevision?.modelSha256),A=(0,u.Zk)();(0,o.cv)(A,g.contract,g.projectModel,{restore:q}),(0,j.qK)(A,g.contract);let B=a.nativeRevision?.accountingFile??"author-accounting-final.json";(a.nativeRevision?.accountingFile||e().existsSync((0,i.HM)(c,B,a.runId)))&&(0,r.zh)(A,d(B,a.nativeRevision?.accountingSha256)),(0,s.C)({directory:c,runId:a.runId,contractId:g.contract.id,diagnostics:A});let C={};(0,z.ST)(C),(0,z.er)(A,C);let D=(0,z.c9)(A),G=D.models.active,H=G&&D.models.list.find(a=>a.name===G.name&&a.provider===G.provider),I={origin:"current-user-selection-at-repair-start",active:G,selected:H?{provider:H.provider,name:H.name,thinking:H.thinking??"follow-task"}:null,configurationFingerprint:(0,z.Q6)(C)},J=(0,v.rZ)({generatedDir:c,projectRoot:b,documentId:a.id}),K=b=>(0,o.BO)(g.contract,b,a.title,a.draft.chapters,J.renderer),L=K(q);if((a.editedMarkdown??a.markdown)!==L.markdown||a.draft.markdown!==L.markdown)throw Error("当前正文已脱离统一模型;须先重建并复验,不能通过字符串修复覆盖原结构化资产");let M=a.nativeRevision?d(a.nativeRevision.qualityFile,a.nativeRevision.qualitySha256):a.reviewMetadata?.contractQuality??a.draft.reviewMetadata?.contractQuality;if(!M||M.version!==t.Ly||M.contractId!==g.contract.id||M.projectSnapshotId!==g.projectModel.snapshotId||M.documentHash!==(0,t.Sl)(L.chapters,L.markdown)||M.authorModelHash!==(0,t.Np)(F(q))||E(M.score)!==E((0,j._n)(g.contract,M.findings)))throw Error("当前七维回执与统一模型不一致,需要完整复验");if(!g.writerContext.resumeContext)throw Error("缺少写作及机械终检的冻结上下文,不能空跑后宣称修复通过");let N=function(a){let b=new w.h(a.signal);return{global:{input:{...a,signal:b.signal},preparationWork:b,emitProgress:()=>void 0,withProgressHeartbeat:async a=>a(),...void 0!==a.nodeLogBaseDir?{nodeLogBaseDir:a.nodeLogBaseDir}:{},chapterDrafts:[],checkpointChapterOrderIds:[]},prepare:{},understanding:{},planning:{},blueprint:{},chapterLoop:{}}}({});return(0,x.k)(N,g.writerContext.resumeContext),{base:g,model:q,quality:M,diagnostics:A,render:K,rendered:L,mechanical:a=>(0,y.u)({documentContract:g.contract,generationDiagnostics:A,projectMaterialSummary:N.prepare.projectMaterialSummary,bidComposition:N.understanding.bidComposition,hazardBindings:N.understanding.hazardResolution?.bindings},K(a),a),figures:J,directory:c,modelSelection:I}}function I(a,b,c){return Object.entries(H(a,b).model.tasks).flatMap(([a,b])=>{let d=c.filter(a=>b.current.markdown.includes(a));if(!d.length)return[];let e=b.current.markdown.indexOf(d[0]);return[{nodeId:a,score:d.reduce((a,b)=>a+b.length,0),excerpt:b.current.markdown.slice(Math.max(0,e-20),e+d[0].length+20)}]}).sort((a,b)=>b.score-a.score||a.nodeId.localeCompare(b.nodeId)).slice(0,5)}function J(a){let b,c,d=(0,h.CX)(a.documentId,a.projectRoot);if(!d)throw Error("待修复文档不存在");let e=H(d,a.projectRoot),j=E(d),k=`repair-${(0,f.randomUUID)()}`;(0,g.yY)(e.diagnostics,{generatedDir:e.directory,runId:k,contract:e.base.contract}),(0,i.tv)(e.directory,"repair-inputs.json",{repairRunId:k,originRunId:d.runId,documentId:d.id,request:a.request,modelSelection:e.modelSelection,originalRecordHash:j,contractId:e.base.contract.id,projectSnapshotId:e.base.projectModel.snapshotId,firstCandidateHashes:e.model.c0TaskHashes},k);let l=function(a,b,c){if(a.base.contract.sections.some(a=>a.id===c))return[c];let d=a.base.contract.chapters.find(a=>a.id===c||(0,C.Ts)(a.id)===c);if(d)return d.sectionIds;let e=(0,B.g0)(b.id,a.directory).find(a=>a.id===c),f=e?.metrics?.taskId;if("string"==typeof f&&a.base.contract.sections.some(a=>a.id===f))return[f];throw Error("目标节点没有固定作者任务身份,不能猜测修改范围")}(e,d,a.request.targetNodeId),m=(a,b,c)=>({blocking:e.mechanical(a).filter(a=>"error"===a.level||"blocker"===a.severity).length+b.score.blocking.length+(0,t.ie)(b).length,entityPlacement:Object.values(a.tasks).reduce((a,b)=>a+b.current.output.factBindings.length,0),chars:e.render(a).markdown.length,contractQuality:{contractId:b.contractId,unresolvedCount:b.findings.filter(a=>"met"!==a.status).length,requestedChangeVerified:c,findings:b.findings.map(({criterionId:a,status:b})=>({criterionId:a,status:b}))},judges:{mode:"full",executed:b.findings.filter(a=>"unmeasured"!==a.status).map(a=>a.criterionId),degraded:b.findings.filter(a=>"unmeasured"===a.status).map(a=>a.criterionId),missing:[],unavailableInputs:[]}});return{request:a.request,execution:{nodeKind:"writing-block",action:a.request.patch?"targeted-patch":"rerun-with-feedback",actionSource:a.request.patch?"explicit-patch":"default",available:!0,reason:"通过固定任务的统一模型执行,在全文累计轻修预算内复验后提交"},snapshot:async()=>{let a=E({model:e.model,quality:e.quality});return(0,i.tv)(e.directory,`native-snapshot-${a}.json`,{model:e.model,quality:e.quality},d.runId),`native:${a}`},apply:async()=>(0,s.e)({directory:e.directory,runId:d.runId,contractId:e.base.contract.id,diagnostics:e.diagnostics},async()=>{let c=a.request.patch;if(c){if(c.append||c.endText)throw Error("结构化定点修改须使用单一单元的逐字锚点;跨单元区间或追加须由作者提交完整结构化任务");let d=l.flatMap(a=>e.model.tasks[a]?.current.output.units.flatMap(b=>"paragraph"===b.kind&&b.text.includes(c.anchor)?[{taskId:a,unitId:b.id}]:"table"===b.kind?b.rows.flatMap(d=>b.columns.filter(a=>d.cells[a.key].includes(c.anchor)).map(c=>({taskId:a,unitId:b.id,rowId:d.id,columnKey:c.key}))):[])??[]);if(1!==d.length)throw Error("锚点必须唯一定位一个实际段落或表格字段,不能修改多个对象");let f=d[0];b=function(a){let{change:b}=a,c=a.model.tasks[b.taskId];if(!c||c.current.contentHash!==b.expectedContentHash)throw Error("待修改的任务不存在或内容已变更,原定位不能继续执行");if(!b.anchor.trim()||!b.reason.trim())throw Error("结构化修改须有逐字锚点和明确原因");let d=structuredClone(c.current.output),e=d.units.find(a=>a.id===b.unitId);if(!e)throw Error("目标单元不属于已定位的作者任务");let f=a=>{let c=a.indexOf(b.anchor);if(c<0||a.indexOf(b.anchor,c+b.anchor.length)>=0)throw Error("逐字锚点不存在或不唯一,不能模糊匹配修改");return a.slice(0,c)+b.replacement+a.slice(c+b.anchor.length)};if("paragraph"===e.kind){if(void 0!==b.rowId||void 0!==b.columnKey)throw Error("段落修改不能携带表格记录定位");e.text=f(e.text)}else if("table"===e.kind){let a=e.rows.find(a=>a.id===b.rowId);if(!a||!b.columnKey||!e.columns.some(a=>a.key===b.columnKey))throw Error("表格修改须明确定位真实记录与字段");a.cells[b.columnKey]=f(a.cells[b.columnKey])}else throw Error("流程图修改须提交完整节点与边的结构化事务,不能把图件字符串替换当成关系修改");let g=(0,u.Zk)();(0,o.cv)(g,a.contract,a.project,{restore:a.model});let h=(0,o.wI)(g,b.taskId,d,b.reason),i=a.contract.sections.find(a=>a.id===b.taskId).chapterId,j=a.contract.criteria.filter(a=>a.applicable&&(!a.chapterId||a.chapterId===i)).map(a=>a.id);return{...h,affectedCriterionIds:j}}({contract:e.base.contract,project:e.base.projectModel,model:e.model,change:{...f,expectedContentHash:e.model.tasks[f.taskId].current.contentHash,anchor:c.anchor,replacement:c.replacement,reason:a.request.userMessage}}).model}else{if(1!==l.length)throw Error("自然语言轻修须先定位一个固定作者任务;不能以整章重写替代局部修正");let c=e.base.contract.sections.find(a=>a.id===l[0]),f=e.model.tasks[c.id]?.current;if(!f)throw Error("本任务没有完整首候选,须继续生成,不能作为轻修处理");try{await (0,D.X4)({chapterId:c.chapterId,blockTitle:c.title,contractScoped:!0,maxAuthorSubmissions:1,maxTokens:Math.max(6e3,Math.ceil(1.8*f.markdown.length)),diagnostics:e.diagnostics,system:`你是专业文档作者智能体。按用户已定位的局部问题轻修,不改变其他信息单元、事实来源和方案决定。
3
+ ${e.base.writerContext.promptTexts}`,prompt:`用户原话:${a.request.userMessage}
4
+ 当前固定任务:${JSON.stringify(c)}
5
+ 当前完整结构化产物:${JSON.stringify(f.output)}
6
+ 完整返回同一任务;revisionReason说明改动。不能增删单元或改变事实、数值来源、未决事项。`,toolContext:(0,D.Vw)({projectRoot:a.projectRoot,projectModel:e.base.projectModel,contractScoped:!0,scopeRootNames:d.materialRoot?[d.materialRoot]:[]}),beforeAuthorSubmit:async a=>{let b=(0,p.validateAuthorTaskOutput)(a,{contract:e.base.contract,projectModel:e.base.projectModel,taskId:c.id},{deferSourceParaphrases:!0}).output;if(E(b.units.map(a=>[a.id,a.kind,a.criterionIds]))!==E(f.output.units.map(a=>[a.id,a.kind,a.criterionIds]))||E(b.factBindings)!==E(f.output.factBindings)||E(b.numericBindings??[])!==E(f.output.numericBindings??[])||E(b.decisionRequests)!==E(f.output.decisionRequests))throw Error("局部修复不能改变固定单元、职责、来源或方案决定")}})}finally{(0,g.MZ)(e.diagnostics),(0,i.tv)(e.directory,"repair-author-diagnostics.json",{diagnostics:e.diagnostics},k)}b=(0,o.l0)(e.diagnostics)}if(E(b)===E(e.model))throw Error("作者未提交实际变更,不能记为修复完成");return l.map(a=>({nodeId:a,beforeChars:e.model.tasks[a]?.current.markdown.length??0,afterChars:b.tasks[a]?.current.markdown.length??0,note:"统一模型候选尚未落盘;原C0及累计返工账保留"}))}),recheckAll:async()=>(0,s.e)({directory:e.directory,runId:d.runId,contractId:e.base.contract.id,diagnostics:e.diagnostics},async()=>{if(!b)return m(e.model,e.quality,!1);let a=new Set(e.mechanical(e.model).map(a=>E([a.provenance?.detectorId,a.message])));if(e.mechanical(b).some(b=>("error"===b.level||"blocker"===b.severity)&&!a.has(E([b.provenance?.detectorId,b.message]))))throw Error("候选引入新的结构、数据或明确禁令问题");let d=new Set(l.map(a=>e.base.contract.sections.find(b=>b.id===a).chapterId)),g=e.base.contract.criteria.filter(a=>a.applicable&&(!a.chapterId||d.has(a.chapterId))).map(a=>a.id);return c=await (0,t.u3)({contract:e.base.contract,projectModel:e.base.projectModel,...e.render(b),authorTasks:F(b),figureUrlFor:e.figures.renderer,diagnostics:e.diagnostics,previousReceipt:e.quality,affectedCriterionIds:g,onReviewAttempt:a=>(0,i.tv)(e.directory,`review-response-${(0,f.randomUUID)()}.json`,a,k)}),m(b,c,!0)}),commit:async()=>{if(!b||!c)throw Error("没有已复验的统一模型候选");if(E((0,h.CX)(d.id,a.projectRoot))!==j)throw Error("复验期间文档状态已经变更,旧候选不能覆盖并发修订");let f=E({requestId:a.request.id,model:b,quality:c}),g=`native-model-${f}.json`,k=`native-quality-${f}.json`;(0,i.tv)(e.directory,`native-commit-${E(a.request.id)}.json`,{requestId:a.request.id,revisionId:f,modelFile:g,qualityFile:k,beforeModelHash:E(e.model),afterTaskHashes:Object.fromEntries(l.map(a=>[a,b.tasks[a].current.contentHash]))},d.runId),K(e,d,b,c,a.projectRoot,f)},rollback:async()=>{throw Error("已提交的结构化修复撤销须作为新语义事务累计计账,不能恢复旧账抵消返工")},analyzeImpact:async()=>({class:"propagating",affectedNodeIds:l,reason:"复验完整变更章及全文共同约束;其他章结论只在内容与来源指纹一致时复用"})}}function K(a,b,c,d,f,g){let j=`native-model-${g}.json`,k=`native-quality-${g}.json`,l=(0,i.tv)(a.directory,j,c,b.runId),m=(0,i.tv)(a.directory,k,d,b.runId),n=`native-accounting-${g}.json`,o=(0,i.tv)(a.directory,n,(0,r.pE)(a.diagnostics),b.runId),p=a.render(c),s=a.mechanical(c),u=d.score.blocking.map(b=>({level:"error",severity:"blocker",category:"structure",message:`合同评价未满足或未判定:${a.base.contract.criteria.find(a=>a.id===b).description}`,provenance:{detectorId:"document-contract-quality",fingerprint:E(b)}})),v=new Set(a.mechanical(a.model).map(a=>E([a.provenance?.detectorId,a.message]))),w=b.draft.validationIssues.filter(a=>!["document-contract-quality","document-contract-professional-quality"].includes(a.provenance?.detectorId??"")&&!v.has(E([a.provenance?.detectorId,a.message]))),x=[...s,...u,...(0,t.vD)(a.base.contract,d),...(0,t.ie)(d),...w],y=x.filter(a=>"error"===a.level||"blocker"===a.severity),z=a.base.contract.sections.every(a=>c.tasks[a.id]&&!c.tasks[a.id].current.pendingCriterionIds.length),B=0===y.length&&(0,t.R3)(d)&&z&&"paused"!==b.status,C=JSON.parse(e().readFileSync((0,i.HM)(a.directory,"contract-quality-c0.json",b.runId),"utf8")),D={...b.draft.reviewMetadata,contractQuality:d,contractQualityStale:void 0,writingMetrics:(0,A.s)(a.base.contract,c,C,a.diagnostics)};(0,h.Yf)({...b,...p,editedMarkdown:void 0,nativeRevision:{modelFile:j,modelSha256:l.sha256,qualityFile:k,qualitySha256:m.sha256,revisionId:g,accountingFile:n,accountingSha256:o.sha256},wordCount:p.markdown.length,status:B?"completed":"paused"===b.status?"paused":"completed_with_issues",reviewMetadata:D,draft:{...b.draft,...p,reviewMetadata:D,validationIssues:x,validation:{passed:B,errors:y.map(a=>a.message),warnings:x.filter(a=>"warning"===a.level).map(a=>a.message)},exportGate:{...b.draft.exportGate,passed:B,blockingIssues:y,textFingerprint:(0,q.c6)(p.markdown),deliveryFingerprint:(0,q.c6)(p.markdown),checklist:b.draft.exportGate.checklist.map(a=>({...a,..."document-contract-quality"===a.key?{passed:d.score.deliveryReady}:"document-model-conservation"===a.key?{passed:!s.some(a=>"error"===a.level||"blocker"===a.severity)}:"generation-complete"===a.key?{passed:z&&"paused"!==b.status}:{}}))}}},f)}async function L(a,b,c){let d=(0,h.CX)(a.id,c);if(!d||d.runId!==a.runId||d.updatedAt!==a.updatedAt||E(d.nativeRevision??null)!==E(a.nativeRevision??null))throw Error("撤销输入已与当前持久记录身份不同,须重新读取文档");if(!/^native:[a-f0-9]{64}$/u.test(b.transaction?.snapshotHash??"")||!d.runId)throw Error("没有可核验的结构化修复快照");let f=H(d,c),g=E(d),j=JSON.parse(e().readFileSync((0,i.HM)(f.directory,`native-snapshot-${b.transaction.snapshotHash.slice(7)}.json`,d.runId),"utf8"));if(`native:${E(j)}`!==b.transaction.snapshotHash)throw Error("结构化修复快照哈希不一致");let k=JSON.parse(e().readFileSync((0,i.HM)(f.directory,`native-commit-${E(b.id)}.json`,d.runId),"utf8"));if(k.requestId!==b.id||k.beforeModelHash!==E(j.model))throw Error("撤销凭据不属于本次结构化修复");let l=new Set;for(let[a,c]of Object.entries(k.afterTaskHashes)){if(f.model.tasks[a]?.current.contentHash!==c)throw Error("该任务已有后续修订,旧修复不能覆盖新的内容;须重新定位");let d=j.model.tasks[a]?.current;if(!d)throw Error("快照缺少修复前的实际作者任务");(0,o.Y1)(f.diagnostics,a,d.output,`用户主动撤销修复${b.id},已发生的修改仍累计计账`),l.add(f.base.contract.sections.find(b=>b.id===a).chapterId)}let m=(0,o.l0)(f.diagnostics),n=await (0,s.e)({directory:f.directory,runId:d.runId,contractId:f.base.contract.id,diagnostics:f.diagnostics},()=>(0,t.u3)({contract:f.base.contract,projectModel:f.base.projectModel,...f.render(m),authorTasks:F(m),figureUrlFor:f.figures.renderer,diagnostics:f.diagnostics,previousReceipt:f.quality,affectedCriterionIds:f.base.contract.criteria.filter(a=>a.applicable&&(!a.chapterId||l.has(a.chapterId))).map(a=>a.id)}));if(E((0,h.CX)(d.id,c))!==g)throw Error("撤销复验期间文档状态已经改变,候选未提交");let p=E({undo:b.id,model:m,quality:n});return K(f,d,m,n,c,p),{beforeChars:f.rendered.markdown.length,afterChars:f.render(m).markdown.length}}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=2434,exports.ids=[2434],exports.modules={32434:(a,b,c)=>{c.d(b,{IA:()=>z,PZ:()=>l,Qu:()=>w,SU:()=>y,UL:()=>n,US:()=>o,ZR:()=>q,cN:()=>x,hw:()=>r,rj:()=>v});var d=c(76760),e=c(19898),f=c(44533),g=c(40299),h=c(80439),i=c(22157);function j(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function k(a){let b=j(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}function l(a){return"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0&&Number(a.chunkCount||0)>0}function m(a){let b=new Map;for(let c of a){let a=k(c.relativePath);b.set(a,[...b.get(a)||[],c])}return b}function n(a){let b=(0,f.Yy)(a),c=b.filter(l);return{groups:[...m(c).entries()].filter(([,a])=>a.some(a=>j(a.relativePath).includes("/"))).map(([a,b])=>{let c=o(b);return{root:a,fileCount:b.length,projectNos:c,mixedProjectNos:c.length>=2}}).sort((a,b)=>b.fileCount-a.fileCount||a.root.localeCompare(b.root,"zh-CN")),totalFiles:b.length,usableFiles:c.length}}function o(a){let b=new Set;for(let c of a)for(let a of c.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[])b.add(a);return[...b]}function p(a,b,c="chosen"){let d=m(a),f=d.has(b)?b:[...d.keys()].find(a=>j(a)===j(b)),g=f?d.get(f):[],h=[...d.keys()].filter(a=>a!==f);if(!f||0===g.length)return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:a.length,ambiguous:!1,locked:!1,reason:`选定的项目资料「${b}」在本项目知识库里没有可用文件(不存在、未建索引或没有切片):请在知识库页确认这份资料已入库,或重新选择。`,rejectedRoots:h,scopeHash:(0,i.c6)({chosenRoot:b,empty:!0})};let k=o(g);if(k.length>=2)return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:a.length,ambiguous:!0,locked:!1,reason:`项目资料「${f}」内检测到 ${k.length} 个不同项目编号(${k.join("、")}),疑似多份项目资料混放,已阻断生成避免跨项目污染;请把资料拆到各自的资料组后再生成`,rejectedRoots:h,scopeHash:(0,i.c6)({ambiguous:!0,mixedProjectNos:k})};let l=g.map(a=>a.relativePath);return{selectedRoots:[f],selectedMaterialRoots:function(a,b){let c=new Set((0,e.materialRootsOfFiles)(b));return(0,e.materialRootsOfScopeRoots)(a).filter(a=>c.has(a))}([f],l),selectedFiles:l,totalAvailableFiles:a.length,ambiguous:!1,locked:!0,reason:"sole-candidate"===c?`本次使用库里唯一的项目资料「${f}」(${l.length} 份文件)`:`本次使用选定的项目资料「${f}」(${l.length} 份文件)`,rejectedRoots:h,scopeHash:(0,i.c6)({selectedRoots:[f],selectedFiles:l})}}function q(a,b,c="",d={}){let e=(0,f.Yy)(a).filter(l),g=String(d.materialRoot||"").trim();if(g)return p(e,g);let h=[...m(e).entries()].filter(([,a])=>a.some(a=>j(a.relativePath).includes("/"))).map(([a])=>a);if(1===h.length)return p(e,h[0],"sole-candidate");let k=[...m(e).keys()];return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:e.length,ambiguous:!0,locked:!1,reason:h.length>1?`未选择项目资料:本项目知识库里有 ${h.length} 个资料组(${h.slice(0,6).join("、")}${h.length>6?" 等":""}),请在生成入口选定本次要用哪一组。`:e.length>0?`知识库里只有 ${e.length} 份根目录散文件,没有项目资料组:请把资料放进以项目命名的目录(一个目录 = 一份项目资料)后再生成。`:"本项目知识库里没有可用资料:请先在知识库上传资料并完成索引。",rejectedRoots:k,scopeHash:(0,i.c6)({ambiguous:!0,reason:"material-root-required",rejectedRoots:k})}}function r(a,b){let c=new Map((0,f.Yy)(a).map(a=>[a.relativePath,a])),e=b.selectedFiles.map(a=>{let b=c.get(a),e=Number(b?.chunkCount||0);return{path:a,root:k(a),fileName:d.basename(a),chunkCount:e,indexedAt:b?.indexedAt,status:b?.status,hash:(0,i.c6)({filePath:a,chunkCount:e,indexedAt:b?.indexedAt,status:b?.status})}});return{files:e,totalFiles:e.length,totalChunks:e.reduce((a,b)=>a+b.chunkCount,0),roots:[...new Set(e.map(a=>a.root))],createdAt:Date.now(),snapshotHash:(0,i.c6)(e.map(a=>({path:a.path,hash:a.hash})))}}function s(a,b){return a.filter(a=>b.test(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,i.lG)(a.value)}`))}function t(a){return(0,i.lG)(a.value).replace(/\s+/gu," ").trim()}let u=new Set(["资料文件","资料组","资料角色","章节意图候选","项目名称候选"]);function v(a){let b=a.facts.filter(a=>!u.has(a.key)&&t(a)),c=s(b,/项目名称|工程名称|招标项目名称|建设地点|建设规模|招标范围|施工范围|建设内容/u),d=s(b,/工期|日历天|进度|开工|竣工/u),e=s(b,/质量|验收|合格|标准|规范/u),f=s(b,/清单|工程量|材料|设备|机械|劳动力|资源/u),g=s(b,/安全|文明|环保|危大|风险/u),h=c.slice(0,8).map(a=>`${a.key}:${t(a)}`).join(";");return{works:h?[{name:a.materialSnapshot.roots[0]||"当前项目",scope:h,sourceFiles:[...new Set(c.map(a=>a.sourceFile).filter(Boolean))],relatedItems:f.slice(0,8).map(a=>t(a))}]:[],methods:[],resources:f.slice(0,30).map(a=>({name:a.key,type:"material",spec:t(a),quantity:"",unit:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),schedule:d.slice(0,10).map(a=>({milestone:a.key,duration:t(a),startDate:"",endDate:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),standards:e.slice(0,16).map(a=>({code:a.key,description:t(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),risks:g.slice(0,16).map(a=>({risk:t(a),level:"medium",mitigation:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),requirements:s(b,/招标|投标|合同|承包|响应|要求|补疑|澄清|答疑/u).slice(0,20).map(a=>({category:a.key,detail:t(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),siteConditions:s(b,/现场|周边|交通|既有|保护|场地/u).slice(0,12).map(a=>({condition:t(a),impact:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),addendumChanges:[],gaps:[],generatedAt:Date.now()}}function w(a){let b=a.materialScope||q(a.projectRoot,a.template,a.requirement||"");if(b.ambiguous||!b.locked||0===b.selectedFiles.length)throw Error(`资料范围未锁定:${b.reason}`);let c=r(a.projectRoot,b),d=a.projectGraph||v({facts:a.facts,materialSnapshot:c,requirement:a.requirement}),e=a.projectGraph?"project-graph":"project-graph-runtime",f=a.projectGraph?"预处理完整项目图谱":"运行期项目图谱草案",g=Date.now();return{runId:`run-${g}-${(0,i.c6)({templateId:a.template.id,requirement:a.requirement||"",scopeHash:b.scopeHash}).slice(0,8)}`,templateId:a.template.id,requirement:a.requirement||"",projectRoot:a.projectRoot,materialScope:b,materialSnapshot:c,nodes:[{id:"material-scope",type:"material_scope",status:"completed",startedAt:g,completedAt:g,outputSummary:b.reason,metrics:{selectedFiles:b.selectedFiles.length,rejectedRoots:b.rejectedRoots.length}},{id:"material-snapshot",type:"material_snapshot",status:"completed",startedAt:g,completedAt:g,outputSummary:`${c.totalFiles} 份资料,${c.totalChunks} 个切片`,metrics:{totalFiles:c.totalFiles,totalChunks:c.totalChunks}},{id:e,type:"project_graph",status:"completed",startedAt:g,completedAt:g,outputSummary:`${f}:${d.works.length}工程 ${d.resources.length}资源 ${d.schedule.length}工期 ${d.standards.length}标准`,metrics:{facts:a.facts.length,precomputed:!!a.projectGraph,source:a.projectGraphSource||"runtime"}}],facts:a.facts,baseProjectGraph:d,issues:[],createdAt:g}}function x(a,b=200,c=50){if(a.nodes.length<=b)return;let d=a.nodes.slice(-c),e=a.nodes.slice(0,a.nodes.length-c),f=e.filter(a=>"project_graph"!==a.type&&("completed"===a.status||"failed"===a.status||"skipped"===a.status)),g=e.filter(a=>!f.includes(a));if(0===f.length)return;let h={id:`nodes-archive-${Date.now()}`,type:"summary",status:"completed",startedAt:f[0].startedAt,completedAt:f[f.length-1].completedAt||Date.now(),outputSummary:`已归档 ${f.length} 个历史节点(${[...new Set(f.map(a=>a.type))].join("、")})`,metrics:{archivedNodes:f.length}};a.nodes.splice(0,a.nodes.length,...g,h,...d)}function y(a){let b=a.nodes.find(a=>"project_graph"===a.type),c=!!b?.metrics?.precomputed,d=[(0,h.X5)({type:"validation",roleId:"agent-material-scope",status:"success",message:`资料范围已锁定:${a.materialScope.selectedRoots.join("、")}`,details:[`${a.materialScope.reason}`,`入选资料:${a.materialScope.selectedFiles.length}/${a.materialScope.totalAvailableFiles}`,`已排除资料组:${a.materialScope.rejectedRoots.slice(0,8).join("、")||"无"}`]},{subtitle:"Agent 资料范围锁定"}),(0,h.X5)({type:"knowledge_retrieval",roleId:"agent-material-snapshot",status:"success",message:`资料快照已固定:${a.materialSnapshot.totalFiles} 份资料、${a.materialSnapshot.totalChunks} 个切片`,details:a.materialSnapshot.files.slice(0,10).map(a=>`${a.root}|${a.fileName}|${a.chunkCount}切片`)},{subtitle:"Agent 资料快照"})];return c||d.push((0,h.X5)({type:"file_understanding",roleId:"agent-project-graph-runtime",status:"success",message:`运行期项目图谱草案已建立:${a.baseProjectGraph.works.length}工程 ${a.baseProjectGraph.resources.length}资源 ${a.baseProjectGraph.schedule.length}工期 ${a.baseProjectGraph.standards.length}标准`,details:["缓存缺失时用于资料范围和 Planner 预备分析;正式完整项目图谱会随后由 LLM 构建",`事实数:${a.facts.length}`]},{subtitle:"Agent 项目图谱预备分析"})),d}function z(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,b)=>{g.Rg.test(a)&&c.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`正式正文不得出现后台或兜底话术:第 ${b+1} 行`,suggestion:"必须改为有事实依据的正式表达;非必填缺失字段应删除,必填事实缺失应阻断生成。"})}),[...c,...(0,g.bx)(a),...(0,g.uv)(a),...(0,g.nP)(a)].slice(0,20)}},44533:(a,b,c)=>{c.d(b,{K_:()=>n,NW:()=>j,VS:()=>p,Yy:()=>o,a2:()=>i,aY:()=>m,getMultiProjectManager:()=>k});var d=c(19898),e=c(33873),f=c(21820),g=c(29021);let h=null;function i(){return e.join(f.homedir(),".customize-agent")}function j(a){return(0,d.getProjectKbPath)(e.resolve(a))}function k(){return h||(h=new d.MultiProjectManager(i())),h}function l(a){let b=e.resolve(a),c=e.resolve(e.join(f.homedir(),".customize-agent"));return!(g.existsSync(e.join(b,"pnpm-workspace.yaml"))&&g.existsSync(e.join(b,"apps","server")))&&(b===c||b.includes(`${e.sep}.customize-agent${e.sep}`)||b.endsWith(`${e.sep}apps${e.sep}server`)||b.endsWith(`${e.sep}apps${e.sep}cli`))}function m(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&g.existsSync(a)&&!l(a))return e.resolve(a);let b=function(){let a=e.join(i(),"projects","registry.db");if(!g.existsSync(a))return[];let b=new((0,d.loadBetterSqlite3)())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>e.resolve(a.project_root)).filter(a=>!l(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!l(process.env.INIT_CWD)?process.env.INIT_CWD:e.resolve(process.cwd(),"../..")}function n(a){if(a){let b=e.resolve(a);return g.existsSync(b)&&!l(b)?b:null}return m()}function o(a,b={}){let c=new Map;for(let b of function(a){let b=e.join(f.homedir(),".customize-agent","projects",(0,d.computeProjectId)(e.resolve(a)),"kb.db");if(!g.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=j(a);if(!g.existsSync(b))return[];let c=[],d=a=>{for(let f of g.readdirSync(a,{withFileTypes:!0})){let h=e.join(a,f.name);if(f.isDirectory()){d(h);continue}if(f.name.endsWith(".source.txt"))continue;let i=g.statSync(h),j=e.relative(b,h).split(e.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:e.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:i.size,mtime:i.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
2
- ${a.category}
3
- ${a.format}
4
- ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await k().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},80439:(a,b,c)=>{function d(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","llm-json":"LLM 事实抽取"})[a]:void 0}function e(a,b={}){let c={executionVersion:2,group:a.type,...a,...b},f=c.roleName||d(c.roleId),g=c.subtitle||f||d(c.roleId);return{...c,roleName:f,subtitle:g,title:function(a){let b={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",reference:"资料增强"}[a.type],c=a.subtitle||a.roleName||d(a.roleId),e=c&&!b.includes(c)?`${b} \xb7 ${c}`:b,f="string"==typeof a.title&&a.title.length>0?a.title:void 0;return f&&f!==b?f:e}({...c,roleName:f,subtitle:g})}}c.d(b,{AQ:()=>h,BI:()=>f,X5:()=>e,d3:()=>g});let f="stage-details";function g(a){return a.source===f}function h(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}}};
1
+ "use strict";exports.id=2434,exports.ids=[2434],exports.modules={15762:(a,b,c)=>{c.d(b,{BI:()=>h,X5:()=>g,d3:()=>i});let d={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},e={"knowledge-base":"知识库","document-readiness":"生成准备度检查","llm-json":"LLM 事实抽取"};function f(a){return a?e[a]:void 0}function g(a,b={}){let c={executionVersion:2,group:a.type,...a,...b},e=c.roleName||f(c.roleId),h=c.subtitle||e||f(c.roleId);return{...c,roleName:e,subtitle:h,title:function(a){var b;let c=d[b=a.type]??b,e=a.subtitle||a.roleName||f(a.roleId),g=e&&!c.includes(e)?`${c} \xb7 ${e}`:c,h="string"==typeof a.title&&a.title.length>0?a.title:void 0;return h&&h!==c?h:g}({...c,roleName:e,subtitle:h})}}let h="stage-details";function i(a){return a.source===h}},22157:(a,b,c)=>{c.d(b,{H1:()=>e,Kd:()=>k,Om:()=>h,TP:()=>j,Te:()=>i,c6:()=>f,lG:()=>g,lX:()=>l});var d=c(77598);function e(a){let b=new Set,c=[];for(let d of a){if(!b.has(d.id)){b.add(d.id),c.push(d);continue}let a=2,e=`${d.id}-dup${a}`;for(;b.has(e);)a+=1,e=`${d.id}-dup${a}`;b.add(e),c.push({...d,id:e})}return c}function f(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function g(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}}function h(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}function i(a){if(a?.aborted)throw Error("用户中止")}function j(a){return`【系统约束——仅指导写作,禁止写入正文,禁止复述本句】${a}`}let k=["评标纪律","投标纪律","行贿","打招呼","递条子","廉洁承诺","廉洁自律","串标","围标","弄虚作假","干扰评标","异常低价","评标基准价"];function l(a){return a.filter(a=>{var b;return b=`${a.key||""} ${String(a.value)}`,!(k.some(a=>b.includes(a))||b.includes("廉洁从业")||/纪律|廉洁/u.test(b)&&/投标|评标|行贿|串标|围标|弄虚作假/u.test(b))})}},32434:(a,b,c)=>{c.d(b,{IA:()=>w,Qu:()=>u,SU:()=>v,UL:()=>n,ZR:()=>q});var d=c(76760),e=c(19898),f=c(44533),g=c(62576),h=c(15762),i=c(22157);function j(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function k(a){let b=j(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}function l(a){return"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0&&Number(a.chunkCount||0)>0}function m(a){let b=new Map;for(let c of a){let a=k(c.relativePath);b.set(a,[...b.get(a)||[],c])}return b}function n(a){let b=(0,f.Yy)(a),c=b.filter(l);return{groups:[...m(b).entries()].filter(([,a])=>a.some(a=>j(a.relativePath).includes("/"))).map(([a,b])=>{let c=o(b);return{root:a,fileCount:b.length,projectNos:c,mixedProjectNos:c.length>=2}}).sort((a,b)=>b.fileCount-a.fileCount||a.root.localeCompare(b.root,"zh-CN")),totalFiles:b.length,usableFiles:c.length}}function o(a){let b=new Set;for(let c of a)for(let a of c.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[])b.add(a);return[...b]}function p(a,b,c="chosen"){let d=m(a),f=d.has(b)?b:[...d.keys()].find(a=>j(a)===j(b)),g=f?d.get(f):[],h=[...d.keys()].filter(a=>a!==f);if(!f||0===g.length)return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:a.length,ambiguous:!1,locked:!1,reason:`选定的项目资料「${b}」在本项目知识库里没有文件:请在知识库页确认资料目录存在,或重新选择。`,rejectedRoots:h,scopeHash:(0,i.c6)({chosenRoot:b,empty:!0})};let k=o(g);if(k.length>=2)return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:a.length,ambiguous:!0,locked:!1,reason:`项目资料「${f}」内检测到 ${k.length} 个不同项目编号(${k.join("、")}),疑似多份项目资料混放,已阻断生成避免跨项目污染;请把资料拆到各自的资料组后再生成`,rejectedRoots:h,scopeHash:(0,i.c6)({ambiguous:!0,mixedProjectNos:k})};let l=g.map(a=>a.relativePath);return{selectedRoots:[f],selectedMaterialRoots:function(a,b){let c=new Set((0,e.materialRootsOfFiles)(b));return(0,e.materialRootsOfScopeRoots)(a).filter(a=>c.has(a))}([f],l),selectedFiles:l,totalAvailableFiles:a.length,ambiguous:!1,locked:!0,reason:"sole-candidate"===c?`本次使用库里唯一的项目资料「${f}」(${l.length} 份文件)`:`本次使用选定的项目资料「${f}」(${l.length} 份文件)`,rejectedRoots:h,scopeHash:(0,i.c6)({selectedRoots:[f],selectedFiles:l})}}function q(a,b,c="",d={}){let e=(0,f.Yy)(a),g=String(d.materialRoot||"").trim();if(g)return p(e,g);let h=[...m(e).entries()].filter(([,a])=>a.some(a=>j(a.relativePath).includes("/"))).map(([a])=>a);if(1===h.length)return p(e,h[0],"sole-candidate");let k=[...m(e).keys()];return{selectedRoots:[],selectedMaterialRoots:[],selectedFiles:[],totalAvailableFiles:e.length,ambiguous:!0,locked:!1,reason:h.length>1?`未选择项目资料:本项目知识库里有 ${h.length} 个资料组(${h.slice(0,6).join("、")}${h.length>6?" 等":""}),请在生成入口选定本次要用哪一组。`:e.length>0?`知识库里只有 ${e.length} 份根目录散文件,没有项目资料组:请把资料放进以项目命名的目录(一个目录 = 一份项目资料)后再生成。`:"本项目知识库里没有可用资料:请先在知识库上传资料并完成索引。",rejectedRoots:k,scopeHash:(0,i.c6)({ambiguous:!0,reason:"material-root-required",rejectedRoots:k})}}function r(a,b){return a.filter(a=>b.test(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,i.lG)(a.value)}`))}function s(a){return(0,i.lG)(a.value).replace(/\s+/gu," ").trim()}let t=new Set(["资料文件","资料组","资料角色","章节意图候选","项目名称候选"]);function u(a){let b=a.materialScope||q(a.projectRoot,a.template,a.requirement||"");if(b.ambiguous||!b.locked||0===b.selectedFiles.length)throw Error(`资料范围未锁定:${b.reason}`);let c=function(a,b){let c=new Map((0,f.Yy)(a).map(a=>[a.relativePath,a])),e=b.selectedFiles.map(a=>{let b=c.get(a),e=Number(b?.chunkCount||0);return{path:a,root:k(a),fileName:d.basename(a),chunkCount:e,indexedAt:b?.indexedAt,status:b?.status,hash:(0,i.c6)({filePath:a,chunkCount:e,indexedAt:b?.indexedAt,status:b?.status})}});return{files:e,totalFiles:e.length,totalChunks:e.reduce((a,b)=>a+b.chunkCount,0),roots:[...new Set(e.map(a=>a.root))],createdAt:Date.now(),snapshotHash:(0,i.c6)(e.map(a=>({path:a.path,hash:a.hash})))}}(a.projectRoot,b),e=function(a){let b=a.facts.filter(a=>!t.has(a.key)&&s(a)),c=r(b,/项目名称|工程名称|招标项目名称|建设地点|建设规模|招标范围|施工范围|建设内容/u),d=r(b,/工期|日历天|进度|开工|竣工/u),e=r(b,/质量|验收|合格|标准|规范/u),f=r(b,/清单|工程量|材料|设备|机械|劳动力|资源/u),g=r(b,/安全|文明|环保|危大|风险/u),h=c.slice(0,8).map(a=>`${a.key}:${s(a)}`).join(";");return{works:h?[{name:a.materialSnapshot.roots[0]||"当前项目",scope:h,sourceFiles:[...new Set(c.map(a=>a.sourceFile).filter(Boolean))],relatedItems:f.slice(0,8).map(a=>s(a))}]:[],methods:[],resources:f.slice(0,30).map(a=>({name:a.key,type:"material",spec:s(a),quantity:"",unit:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),schedule:d.slice(0,10).map(a=>({milestone:a.key,duration:s(a),startDate:"",endDate:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),standards:e.slice(0,16).map(a=>({code:a.key,description:s(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),risks:g.slice(0,16).map(a=>({risk:s(a),level:"medium",mitigation:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),requirements:r(b,/招标|投标|合同|承包|响应|要求|补疑|澄清|答疑/u).slice(0,20).map(a=>({category:a.key,detail:s(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),siteConditions:r(b,/现场|周边|交通|既有|保护|场地/u).slice(0,12).map(a=>({condition:s(a),impact:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),addendumChanges:[],gaps:[],generatedAt:Date.now()}}({facts:a.facts,materialSnapshot:c,requirement:a.requirement}),g=Date.now();return{runId:`run-${g}-${(0,i.c6)({templateId:a.template.id,requirement:a.requirement||"",scopeHash:b.scopeHash}).slice(0,8)}`,templateId:a.template.id,requirement:a.requirement||"",projectRoot:a.projectRoot,materialScope:b,materialSnapshot:c,nodes:[{id:"material-scope",type:"material_scope",status:"completed",startedAt:g,completedAt:g,outputSummary:b.reason,metrics:{selectedFiles:b.selectedFiles.length,rejectedRoots:b.rejectedRoots.length}},{id:"material-snapshot",type:"material_snapshot",status:"completed",startedAt:g,completedAt:g,outputSummary:`${c.totalFiles} 份资料,${c.totalChunks} 个切片`,metrics:{totalFiles:c.totalFiles,totalChunks:c.totalChunks}},{id:"project-graph-runtime",type:"project_graph",status:"completed",startedAt:g,completedAt:g,outputSummary:`当前来源事实摘要:${e.works.length}工程 ${e.resources.length}资源 ${e.schedule.length}工期 ${e.standards.length}标准`,metrics:{facts:a.facts.length,source:"current-source-facts"}}],facts:a.facts,baseProjectGraph:e,issues:[],createdAt:g}}function v(a){let b=[(0,h.X5)({type:"validation",roleId:"agent-material-scope",status:"success",message:`资料范围已锁定:${a.materialScope.selectedRoots.join("、")}`,details:[`${a.materialScope.reason}`,`入选资料:${a.materialScope.selectedFiles.length}/${a.materialScope.totalAvailableFiles}`,`已排除资料组:${a.materialScope.rejectedRoots.slice(0,8).join("、")||"无"}`]},{subtitle:"Agent 资料范围锁定"}),(0,h.X5)({type:"knowledge_retrieval",roleId:"agent-material-snapshot",status:"success",message:`资料快照已固定:${a.materialSnapshot.totalFiles} 份资料、${a.materialSnapshot.totalChunks} 个切片`,details:a.materialSnapshot.files.slice(0,10).map(a=>`${a.root}|${a.fileName}|${a.chunkCount}切片`)},{subtitle:"Agent 资料快照"})];return b.push((0,h.X5)({type:"file_understanding",roleId:"agent-project-graph-runtime",status:"success",message:`当前来源事实摘要已建立:${a.baseProjectGraph.works.length}工程 ${a.baseProjectGraph.resources.length}资源 ${a.baseProjectGraph.schedule.length}工期 ${a.baseProjectGraph.standards.length}标准`,details:["使用本轮锁定资料的裁决事实进行预备分析;施工选型与来源适用性由主智能体及独立复核核定",`事实数:${a.facts.length}`]},{subtitle:"Agent 项目图谱预备分析"})),b}function w(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,b)=>{g.Rg.test(a)&&c.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`正式正文不得出现后台或兜底话术:第 ${b+1} 行`,suggestion:"必须改为有事实依据的正式表达;非必填缺失字段应删除,必填事实缺失应阻断生成。"})}),[...c,...(0,g.bx)(a),...(0,g.uv)(a),...(0,g.nP)(a)].slice(0,20)}},41991:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(22157),e=c(76228);async function f(a){if(0===a.prototypes.length)return async a=>a.map(()=>!1);let b=a.threshold??e.Eh,c=a.negativePrototypes??[],f=[...a.prototypes,...c],g=a.prototypes.length,h=a.embedDocuments?null:(0,e.VN)(),i=a.embedDocuments?await a.embedDocuments(f):await h.embedDocuments(f);if(i.length!==f.length)throw Error(`本地语义模型嵌入数量不一致:期望 ${f.length} 条,实际 ${i.length} 条`);return async e=>{if(0===e.length)return[];let f=e.map(()=>!1),j=e.map((b,c)=>a.lexicalHints&&!a.lexicalHints.test(b)?-1:c).filter(a=>a>=0);if(0===j.length)return f;let k=j.map(a=>e[a]),l=a.embedDocuments?await a.embedDocuments(k):await h.embedDocuments(k);return j.forEach((a,e)=>{let h=l[e];if(!h)return;let j=Math.max(...i.slice(0,g).map(a=>(0,d.Om)(h,a))),k=c.length?Math.max(...i.slice(g).map(a=>(0,d.Om)(h,a))):0;j>=b&&(0===c.length||j>k)&&(f[a]=!0)}),f}}},43378:(a,b,c)=>{function d(a){return a.replace(/\s+/gu,"").toLowerCase()}function e(a){return[...new Set(a)]}function f(a){if("forbidden"===a.bodyTablePolicy)return{chapters:a.chapters,unattachedRequiredTables:[]};let b=new Map,c=(a,c)=>{let f=c.title.trim();if(!f)return;let g=b.get(a)||[],h=e(c.fields.map(a=>a.trim()).filter(Boolean)),i=g.find(a=>d(a.title)===d(f));if(i){i.fields=e([...i.fields.map(a=>a.name),...h]).map(a=>({name:a})),i.required||=c.required,i.reason=e([i.reason,c.reason].filter(Boolean)).join(";");return}g.push({id:`planned-table-${a}-${g.length+1}`,title:f,chapterTitle:"",section:c.section||"",required:c.required,reason:c.reason,fields:h.map(a=>({name:a}))}),b.set(a,g)};for(let b of a.chapters)for(let d of a.plannedTables.get(b.id)||[])c(b.id,{title:d.title,fields:d.fields,required:!1,reason:"本章小节规划产出的表格需求(按章按节规划)。"});let f=[];for(let b of a.requiredTables||[]){let e,g=b.trim();if(!g)continue;let h=0;for(let b of a.chapters){let a=function(a,b){let c=d(a).replace(/表$/u,"");if(!c)return 0;let e=0;for(let a of[b.title,...b.sections||[]]){let b=d(a);if(b){if(b.includes(c)||c.includes(b)){e=Math.max(e,1);continue}e=Math.max(e,function(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},e=c(d(b)),f=[...c(d(a))];return 0===f.length?0:f.filter(a=>e.has(a)).length/f.length}(c,b))}}return e}(g,b);a>h&&(h=a,e=b)}if(!e||h<.3){f.push(g);continue}c(e.id,{title:g,fields:[],required:!0,reason:"用户提示词声明的必需表格。"})}return{chapters:a.chapters.map(a=>{let c=b.get(a.id);return c?.length?{...a,tableSections:e([...a.tableSections||[],...c.map(a=>a.title)]),tableRequirements:e([...a.tableRequirements||[],...c.filter(a=>a.required).map(a=>`${a.title}:用户提示词声明的必需表格,必须真实输出为 markdown 表格,表头与行数据必须与本章内容一致。`)]),tablePlans:c.map(b=>({...b,chapterTitle:a.title}))}:a}),unattachedRequiredTables:f}}c.d(b,{K9:()=>i,c$:()=>j,cR:()=>l,lR:()=>f}),RegExp(`^.{2,36}?表`,"u");let g="[\\d一二三四五六七八九十]+";RegExp(`^表\\s*${g}(?:[--..—]\\s*${g})?\\s*[::、..]?\\s`,"u");let h=[{pattern:/横道图|甘特图/u,instruction:"以表格式时间轴呈现(阶段与节点、起止时间、与工期目标的关系);表中时间节点必须与总工期及开工竣工日期一致"},{pattern:/网络图|关键线路/u,instruction:"以文字框图呈现(工作节点、先后衔接关系、关键线路标注),节点划分必须与本工程施工组织一致"},{pattern:/组织机构图|组织框图|机构框图|机构图/u,instruction:"以文字框图呈现组织机构层级(部门或岗位、隶属关系)"},{pattern:/平面布置图|布置图/u,instruction:"以分区布置的文字框图或布置要点表呈现(分区、布置内容、管控要求)"},{pattern:/流程图|工艺流程图/u,instruction:"以文字框图呈现流程步骤与衔接关系"}];function i(a){let b=[],c=new Set;for(let d of a){let a=`${d.text}
2
+ ${d.coreTerms.join(" ")}`;for(let e of h){let f=e.pattern.exec(a);!f||c.has(f[0])||(c.add(f[0]),b.push({name:f[0],instruction:e.instruction,source:d.text}))}}return b}function j(a,b,c,d=.45){if(0===b.length||0===a.length)return{chapters:a,unattached:[]};let f=new Map,g=[];for(let e of b){let b=-1,h=0;if(a.forEach((a,d)=>{let f=c(e.source,a.title);f>h&&(h=f,b=d)}),b<0||h<d){g.push(e);continue}let i=f.get(b)||[];i.push(`「${e.name}」${e.instruction}(招标要求原文:「${e.source.length>80?`${e.source.slice(0,80)}…`:e.source}」)`),f.set(b,i)}return{chapters:a.map((a,b)=>{let c=f.get(b);return c?.length?{...a,diagramRequirements:e([...a.diagramRequirements||[],...c])}:a}),unattached:g}}function k(a){return d(a).replace(/[((][^))]*[))]/gu,"").replace(/[图表]+$/u,"")}function l(a,b){let c=[...a];for(let a of b){if("diagram"!==a.form&&"org_chart"!==a.form)continue;let b=(a.element||"").trim();b&&(c.some(a=>(function(a,b){let c=k(a),d=k(b);return!(c.length<2)&&!(d.length<2)&&(c.includes(d)||d.includes(c))})(a.name,b))||c.push({name:b,instruction:"org_chart"===a.form?"以文字框图呈现组织机构层级(部门或岗位、隶属关系)":"以文字框图或表格式时间轴呈现(内容要点完整)",source:a.sourceText}))}return c}},62576:(a,b,c)=>{c.d(b,{Rg:()=>d,kt:()=>f,CK:()=>n,nP:()=>m,uv:()=>l,bx:()=>i}),c(22157),c(73806),c(81024),c(41991),c(43378);let d=/知识库|系统暂未|项目资料暂未|暂未明确|待确认|待资料复核|待系统|通用兜底(?:段落|模板)?|兜底(?:占位|模板|内容)|未检索到|资料不足|无法确认|建议补充|COL\d+|可核验信息|以本项目招标文件明确内容为准/u,e=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;RegExp(String.raw`\S.+(?:\s|[。;;])${e}\S.+(?:\s|[。;;])${e}\S`,"u"),RegExp(`\r?
3
+ `,"u"),RegExp(`
4
+ {3,}`,"gu");let f=/(?<=^|[。;;\n])(?:本方案|本施工组织设计|本工程|本项目|项目部|我方|我公司|投标人)?(?:根据|依据|结合|按照)?(?:本项目|项目)?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单)(?:[、,,及和与\s]*(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单|现行规范|规范)){1,}(?:[^。;;\n]{0,40})?[,,]/gmu,g=RegExp(f.source,"mu"),h=/编制依据|编制说明|法律法规|规范标准|标准依据/u;function i(a){let b=[],c=!1;return a.split(/\r?\n/u).forEach((a,d)=>{let e=a.trim();if(/^#{2,4}\s+/u.test(e)){c=h.test(e.replace(/^#{2,4}\s+/u,""));return}!/^\s*\|/u.test(e)&&(g.test(a)&&!c&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`正式正文不得出现资料来源罗列话术:第 ${d+1} 行`,suggestion:"删除“根据/依据招标文件、清单、图纸”等来源罗列,直接保留项目事实、施工内容和控制措施;编制依据类小节可集中罗列依据文件。"}),/^\s*\*\*[^*]{2,40}表\*\*\s*$/u.test(a)&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",message:`正式正文不得用粗体段落充当表名:第 ${d+1} 行`,suggestion:"表名必须转换为 #### 四级标题,避免导出后混入正文段落。"}))}),b.slice(0,20)}let j=/(?:安全|管理|施工|质量|工期|进度|保障|体系|措施|控制|工程|项目|技术|方案|计划|组织|标准|规范|验收|方法|工艺|文明|绿色)/u,k=/(?:工程施工方案|安装工程施工方案|专业工程施工方案|专项施工方案)$/u;function l(a){let b=a.split(/\r?\n/u),c=[],{chapterOfLine:d,titleSets:e}=function(a){let b=[],c=[new Set],d=0;return a.forEach((a,e)=>{let f=a.trim();/^##\s+/u.test(f)&&(d+=1,c.push(new Set)),b[e]=d;let g=/^###\s+(.+)$/u.exec(f);g&&c[d].add(g[1].trim().replace(/^\d+(?:\.\d+)*\s*/u,""))}),{chapterOfLine:b,titleSets:c}}(b);return b.forEach((a,b)=>{let f=/^####\s+(.+)$/u.exec(a.trim());if(!f)return;let g=f[1].trim(),h=g.replace(/^\d+(?:\.\d+)*\s*/u,"").trim();if(!h)return;let i=e[d[b]]||new Set;if(i.has(h)||i.has(g))return void c.push({level:"warning",severity:"warning",category:"structure",owner:"system",repairability:"llm_repairable",message:`H4 标题与本章三级小节同名:${g}(第 ${b+1} 行)`,suggestion:`删除该 H4 块或改为三级小节「${h}」下的独立子主题标题,禁止与三级小节同名造成结构重复。`});let l=h.slice(-2);if(h.length>2&&!j.test(l)&&h.slice(0,-2).includes(l)){let a=new Map;for(let b=0;b<h.length-1;b+=1){let c=h.slice(b,b+2);j.test(c)||a.set(c,(a.get(c)||0)+1)}let d=[...a.entries()].filter(([,a])=>a>=2).map(([a])=>a);c.push({level:"warning",severity:"warning",category:"structure",owner:"system",repairability:"llm_repairable",message:`H4 标题疑似词尾粘连或多主题拼接:${g}(重复词:${d.join("、")},第 ${b+1} 行)`,suggestion:"重写为单一主题的短标题,去掉粘连重复的尾部词语。"});return}h.length>16&&!k.test(h)&&c.push({level:"warning",severity:"warning",category:"structure",owner:"system",repairability:"llm_repairable",message:`H4 标题过长疑似多主题拼接:${g}(${h.length} 字,第 ${b+1} 行)`,suggestion:"拆分为多个独立 H4 或压缩为单一主题短标题。"})}),c.slice(0,20)}function m(a){let b=a.split(/\r?\n/u),c=[],d=[],e=null,f=null,g=a=>{if(f)for(let b of a.replace(/^#{1,6}\s+/u,"").replace(/^\|.*\|$/u,"").trim().split(/[。;;]/u)){let a=b.trim();a.length>=24&&f.sentences.push(a.replace(/[\s\p{P}]+/gu,"").toLowerCase())}};for(let a of b){let b=/^##\s+(.+)$/u.exec(a.trim());if(b){e&&d.push(e),e={title:b[1].trim(),sections:[]},f=null;continue}let c=/^###\s+(.+)$/u.exec(a.trim());if(c&&e){f={title:c[1].trim(),sentences:[]},e.sections.push(f);continue}/^####\s+/u.test(a.trim())||g(a)}for(let a of(e&&d.push(e),d))for(let b=0;b<a.sections.length;b+=1)for(let d=b+1;d<a.sections.length;d+=1){let e=new Set(a.sections[b].sentences),f=new Set(a.sections[d].sentences);if(0===e.size||0===f.size)continue;let g=0;for(let a of e)f.has(a)&&(g+=1);let h=g/Math.min(e.size,f.size);h>=.3&&g>=3&&c.push({level:"warning",severity:"warning",category:"structure",owner:"system",repairability:"llm_repairable",message:`${a.title} 内「${a.sections[b].title}」与「${a.sections[d].title}」正文重复(${g} 句重合,占 ${Math.round(100*h)}%)`,suggestion:"两个小节正文出现大量重复句子:后写的小节必须围绕本小节主题差异化重写,删除复制自另一小节的内容,只保留本小节专属做法与参数。"})}return c.slice(0,20)}function n(a){return a.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 规划小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:"",a.tablePlans?.length?` 结构化表格规划:${a.tablePlans.map(a=>`${a.title}(${a.fields.map(a=>a.name).join("/")})`).join(";")}`:""].filter(Boolean).join("\n")).join("\n")}},76228:(a,b,c)=>{c.d(b,{Eh:()=>f,Mv:()=>o,VN:()=>h,Iu:()=>i});var d=c(19898),e=c(22157);let f=.6,g=null;function h(){return g||(g=new d.LocalTransformersEmbeddingProvider({})),g}async function i(){if("1"!==process.env.DOCUMENT_SKIP_EMBED_PREFLIGHT)try{await h().embedQuery("生成前置检查")}catch(b){let a=b instanceof Error?b.message:String(b);throw Error(`本地语义模型预热失败(生成前置检查,可用 DOCUMENT_SKIP_EMBED_PREFLIGHT=1 跳过):${a}`,{cause:b})}}let j=new Map,k=0,l=0;async function m(a,b){let c=b?await b(a):await h().embedDocuments(a);if(c.length!==a.length)throw Error(`本地语义模型嵌入数量不一致:期望 ${a.length} 条,实际 ${c.length} 条`);return c}async function n(a,b){if("0"===process.env.DOCUMENT_EMBED_CACHE)return m(a,b);let c=Array(a.length),d=[],e=new Map;for(let b=0;b<a.length;b+=1){let f=a[b];if(f.length<=2e3){let a=j.get(f);if(a){c[b]=a,k+=1,j.delete(f),j.set(f,a);continue}}let g=e.get(f);g?g.push(b):(e.set(f,[b]),d.push(f))}if(0===d.length)return c;let f=await m(d,b),g=function(){let a=Number(process.env.DOCUMENT_EMBED_CACHE_SIZE||4e4);return Number.isFinite(a)&&a>0?a:4e4}();for(let a=0;a<d.length;a+=1){let b=d[a],h=f[a],i=e.get(b);for(let a of i)c[a]=h;if(b.length<=2e3&&(l+=i.length,j.set(b,h),j.size>g)){let a=j.keys().next().value;void 0!==a&&j.delete(a)}}return c}async function o(a,b,c){if(0===a.length||0===b.length)return()=>0;let d=[...a,...b],f=await n(d,c),g=new Map;for(let a=0;a<d.length;a++)g.has(d[a])||g.set(d[a],f[a]);return(a,b)=>{let c=g.get(a),d=g.get(b);return c&&d?(0,e.Om)(c,d):0}}},81024:(a,b,c)=>{}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=3806,exports.ids=[3806],exports.modules={8753:(a,b,c)=>{c.d(b,{V:()=>h});var d=c(51342),e=c(73024),f=c(76760);let g={reviewStandardQueries:[],reviewChapterTemplateMatchers:[],reviewChapterSectionDefaults:{firstChapterSections:[],chapterSections:[],firstChapterTableSections:[],firstChapterTableRequirements:[]},qualityBenchmarks:[],autoSpecGates:[],chapterTitleFilters:[]};function h(){try{var a;let b=function(){let a=(0,d.J0)();return e.mkdirSync(a,{recursive:!0}),f.join(a,"engineering-document-config.json")}();if(!e.existsSync(b))return g;return a=JSON.parse(e.readFileSync(b,"utf-8")),{reviewStandardQueries:Array.isArray(a.reviewStandardQueries)?a.reviewStandardQueries.filter(Boolean):[],reviewChapterTemplateMatchers:Array.isArray(a.reviewChapterTemplateMatchers)?a.reviewChapterTemplateMatchers.filter(Boolean):[],reviewChapterSectionDefaults:{firstChapterSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterSections)?a.reviewChapterSectionDefaults.firstChapterSections.filter(Boolean):[],chapterSections:Array.isArray(a.reviewChapterSectionDefaults?.chapterSections)?a.reviewChapterSectionDefaults.chapterSections.filter(Boolean):[],firstChapterTableSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableSections)?a.reviewChapterSectionDefaults.firstChapterTableSections.filter(Boolean):[],firstChapterTableRequirements:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableRequirements)?a.reviewChapterSectionDefaults.firstChapterTableRequirements.filter(Boolean):[]},qualityBenchmarks:Array.isArray(a.qualityBenchmarks)?a.qualityBenchmarks:[],technicalDetailGate:a.technicalDetailGate,autoSpecGates:Array.isArray(a.autoSpecGates)?a.autoSpecGates:[],chapterTitleFilters:Array.isArray(a.chapterTitleFilters)?a.chapterTitleFilters:[]}}catch{return g}}},73806:(a,b,c)=>{c.d(b,{GQ:()=>v,_9:()=>y,cs:()=>u,eI:()=>r,Ui:()=>t,bl:()=>s,Fe:()=>j,ob:()=>h,YZ:()=>w,nz:()=>i});let d="[零〇一二三四五六七八九十百千万两]+";var e=c(77327);function f(a){return a.replace(/[☑✓✔☐□☒○●◉◇◆]/gu,"")}function g(a){let b=f(a.trim()),c="";for(;b!==c;)c=b,b=b.replace(RegExp(`^\\s*第(?:\\d{1,3}|${d})[章节]\\s*`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${d})(?:[..]\\d{1,3})+(?:[..、))]\\s*|\\s+)`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${d})[))、..]\\s*`,"u"),"").replace(RegExp("^\\s*[-*+]\\s+","u"),"").trim();return b.replace(/\s+/gu," ")}function h(a){let b=g(a).replace(/\s+/gu,"");if(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b)||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)||/[::]$|[,、;。]$/u.test(b))return!0;let c=g(b).replace(/\s+/gu,"");if(!c||/^(?:如|若|如果|倘若|假如|当)[^,,。;]{0,24}[,,]/u.test(c)||/^(?:我(?:方|公司)|本(?:单位|公司|工程|项目)|投标人|承包人|中标人|发包人|供应商)[^,,。;]{0,14}(?:承诺|保证|响应|满足|确保|应|须|将|会)/u.test(c)||/(?:评标)?委员会[^,,。;]{0,10}(?:确定|认定|评审|判断|推荐)/u.test(c)||/^(?:不(?:得|应|宜|少于|超过|大于|小于|低于|高于)|超过|低于|高于|达到|不少于|不大于|不超过|偏差率|误差)\s*\d/u.test(c)||/^[^,,。;]{0,10}\d+(?:%|%)/u.test(c)||/^\d+\s*项/u.test(c)||/^\d+(?:[((]\d+[))])?\s*目/u.test(c)||/^\d+\s*对(?:与|于)/u.test(c)||/^\d{1,4}[a-zA-Z]{0,3}\d{0,4}\s*[::]/u.test(c)||/^\d{1,4}\s*(?:个)?(?:日历天|天|日|月|年)[,,、]/u.test(c)||/^\d{1,4}[^,,。;\s]{1,6}[,,、]/u.test(c)||/^\d{1,2}[一-龥]{2,10}$/u.test(c)&&!/^\d{1,2}(?:个|名|台|套|辆|份|种|类|层|栋|座|米|吨|年|月|天|日|周|次|项)/u.test(c)||/[((【[《]$/u.test(c)||/[((【[《][^))】]》]*$/u.test(c)||/以下简/u.test(c)||/^\d{1,4}\s*[a-zA-Z]/u.test(c)||/^(?:确定|计算|比较|推荐|审查|否决)(?:有效)?评标(?:基准)?价/u.test(c)||/^(?:其他要求|需要补充的其他内容|相当于或不低于|补充条款|建议编制要求|投标须知|评标办法)/u.test(c))return!0;let d=c.replace(/^\d{1,3}(?:[..]\d{1,3})*\s*/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(d)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(d)||/^(?:本(?:招标)?(?:项目|工程)|投标人|承包人|中标人|发包人|供应商|项目经理|技术负责人|施工单位)[^,,。;]{0,24}(?:不得|禁止|严禁|必须|应当)/u.test(d)||/(?:见|详见|参见|详见第)[^,,。;]{0,12}(?:招标公告|招标文件|投标人须知|补疑|澄清|工程量清单|图纸|合同条款|前附表)/u.test(d)||/^\d{1,3}\s*款/u.test(c)||/第\d+(?:\.\d+)?款[^,,。;]{0,20}(?:向(?:招标人|发包人|监理人?|承包人)|提出|告知|通知|送达|发出)/u.test(c)||/\d+(?:元|万元|㎡|m[²3]?|km|m|cm|mm|kg|t|L|㎡|立方米|平方米|公顷|亩|度|kPa|MPa)[((](?:保留|计算|填写|详见|见|按|不得|应|须)/u.test(c)||/[::].{0,30}(?:必须由|应由|须由)/u.test(c)||/(?:必须|应|须|需).{0,30}(?:由|按|须)$/.test(c)||/(?:\d+(?:\.\d+)*|第\d+(?:\.\d+)*)条(?:款)?的?(?:规定|约定)/u.test(c)||/另行(?:交纳|缴纳|支付|提交|办理|承担|履行)/u.test(c)||/^未(?:分部|分类|分组|归类|划分|分配)/u.test(c))||function(a){let b=a.replace(/\s+/gu,"").replace(/^\*+|\*+$/gu,"");if(!b)return!1;if((b.match(/[爀椀猟礀氀漀挀渀捁扄潓瑲湥獴慔汢]/gu)||[]).length>=2||/[\u2046-\u205F\u2070-\u209F\u2100-\u2102\u2104-\u214F\u21B0-\u21FF\u2270-\u22FF\u2400-\u243F\u249C-\u24FF\u2640-\u26FF\u27C0-\u27EF\u2900-\u297F\u2A00-\u2AFF\u2B00-\u2BFF\u2E00-\u2FFF\u3200-\u33FF]/u.test(b)||/[\u00A0-\u00AF\u00B4\u00B6\u00B8\u00BA-\u00FF]/u.test(b)||/[\u4e00-\u9fa5][A-Za-z][\u4e00-\u9fa5]/u.test(b)&&!/[\u4e00-\u9fa5][A-Za-z](?:值|级|类|区|型|构|段|座|轴|向|楼|层|栋|点|位)/u.test(b))return!0;let c=[...b];return c.filter(a=>/[\u4e00-\u9fa5A-Za-z0-9()()【】《》、,。;;::,.\-/㎡%°·±×÷≤≥—–]/u.test(a)).length/c.length<.6}(c)}function i(a){return v(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function j(a){let b=i(a).replace(/\s+/gu,"");if(!b||/^\d+[^\d..、]/u.test(b)||/^(?:发包人代表|任何批准|计量与支付|变更与索赔|缺陷责任|竣工验收程序|违约责任|争议解决|合同价格)/u.test(b)||/^(?:我(?:方|公司|单位)|本单位|本公司).{0,20}(?:承诺|保证|均属实|均真实|均有效|承担)/u.test(b)||/独立制表|单独制表|分别编制|逐一编制|另行编制|单位工程独立|分单位工程/u.test(b))return!0;if(/[、,,]/u.test(b)&&b.length>=10&&/^[\u4e00-\u9fa5]$/u.test(b.slice(-1))){let a=b.split(/[、,,]/u);if(a.length>=3&&1===a[a.length-1].length)return!0}if(/\d+(?:元|万元|㎡|m[²3]?|km|m|cm|mm|kg|t|L|立方米|平方米|公顷|亩|度|kPa|MPa)[((](?:保留|计算|填写|详见|见|按|不得|应|须)/u.test(b)||/(?:必须由|应由|须由)/u.test(b)||/(?:必须|应|须|需).{0,30}(?:由|按|须)$/.test(b)||/(?:\d+(?:\.\d+)*|第\d+(?:\.\d+)*)条(?:款)?的?(?:规定|约定)/u.test(b)||/另行(?:交纳|缴纳|支付|提交|办理|承担|履行)/u.test(b)||/^未(?:分部|分类|分组|归类|划分|分配)/u.test(b))return!0;let c=b.split(/[、,,]/u).filter(Boolean);return!!(c.length>=2&&c.some(a=>a.length>=7))}function k(a){return 0===a.trim().length||h(a)}let l=/^[((]?\d{1,3}(?:[..]\d{1,3})+(?:[..、))]|\s+|[一-龥])/u,m=/^[((]\d{1,3}[))]/u,n=/^(?: {2,}|\t)/u,o=RegExp(`^(?:第(?:\\d{1,3}|${d})[章节]|\\d{1,3}[、))]|\\d{1,3}[..]\\s|(?:${d})[、..))])`,"u"),p="(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)",q=RegExp(`<\\s*${p}(?:\\s[^>]*)?>([\\s\\S]*?)<\\/\\s*${p}\\s*>`,"giu");function r(a){return q.lastIndex=0,q.test(a)}function s(a){return RegExp(`^\\s*<\\s*${p}(?:\\s[^>]*)?>`,"iu").test(a)}function t(a){return RegExp(`^\\s*<\\/\\s*${p}\\s*>`,"iu").test(a)}function u(a){for(let b of a){let a=function(a,b,c){let e=[],f=null,h=a=>a.replace(/\s+/gu,"");for(let i of function(a,b){q.lastIndex=0;let c=[...a.matchAll(q)].map(a=>a[1]||"");if(c.length>0||b?.strict)return c;let d=/(?:<\s*)?(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>?\s*[::]?\s*([\s\S]*?)(?:<\/\s*(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>|END\s+(?:OUTLINE|CHAPTERS?)|$)/iu.exec(a);return d?.[1]?[d[1]]:[]}(a,c))for(let a of function(a){let b=`${d}`,c=[`第(?:\\d{1,3}|${b})[章节]\\s*`,`(?:\\d{1,3}[..]){1,2}\\d{1,3}[..、))]?(?=\\s|[一-龥])`,`(?:\\d{1,3})[、))]\\s*`,`(?:\\d{1,3})[..]\\s+(?!\\d)`,`(?:${b})[、..))]\\s*`,`[((](?:\\d{1,3}|${b})[))]\\s*`,"[-*+]\\s+"],e=a.replace(/\r?\n/gu,"\n");for(let a of c)e=(e=(e=e.replace(RegExp(`([;;。!?!?])\\s*(?=${a})`,"gu"),"$1\n")).replace(RegExp(`(?<=\\n)\\s+(?=${a})`,"gu"),"")).replace(RegExp(`(?<![\\d..])\\s+(?=${a})`,"gu"),"\n");return e.split(/\n|;|;/u).map(a=>(function(a){let b=a.replace(/\u3000/gu," "),c=b.replace(/^[-*+]\s+/u,"").trim();if(!c)return null;let d=g(a);return!d||k(d)?null:l.test(c)?{title:d,sectionCandidate:!0,kind:"dotted"}:m.test(c)?{title:d,sectionCandidate:!0,kind:"paren"}:o.test(c)?{title:d,sectionCandidate:!1,kind:"numbered"}:n.test(b)?{title:d,sectionCandidate:!0,kind:"indent"}:{title:d,sectionCandidate:!1,kind:"plain"}})(a)).filter(a=>!!a)}(i)){let c=e[e.length-1];if(c&&a.sectionCandidate&&f&&f!==a.kind){h(a.title)===h(c.title)||(c.sections||[]).some(b=>h(b)===h(a.title))||(c.sections=[...c.sections||[],a.title]);continue}e.push({id:`explicit-${b}-${e.length+1}`,title:a.title,purpose:`根据显式大纲章节生成正式正文:${a.title}`,requiredFacts:[],sections:[],queries:[a.title]}),f=a.kind}return e.filter(a=>!k(a.title))}(b.text||"",b.source,{strict:b.strict});if(a.length>=2)return a}return[]}function v(a){let b=f(a.replace(/^#+\s*/u,"").trim()),c="";for(;b&&b!==c;)c=b,b=b.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:[..]\d+)+(?![万亿千百十米㎡吨元A-Za-z\d])\s*[、..]?\s*/u,"").replace(/^\d+(?:[、,,]\s*|\s+|\.\s*(?![0-9])|.\s*(?![0-9]))(?![##号]|栋|幢|楼|区|期|馆|站|院|座|厂房)/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").trim();return b}function w(a){return v(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function x(a,b){let c=new Set;return a.filter(a=>{let d=w(a.title);if(!d)return!1;if(!b?.preserveExplicitOutline&&(c.has(d)||/见(?:公告|文件|资料|附件)|按(?:资料|文件|相关要求)|质量标准[::]|范围[::].*依据/u.test(d)||b?.template&&(0,e.C)(d,b.template)))return!1;return c.add(d),a.title=d,!0})}function y(a,b,c){return!b||c?.preserveExplicitOutline?x([...a.chapters],{...c,template:a}):x([...a.chapters].map(a=>{let c=v(a.title),d=b.chapterRules.find(b=>b.id===a.id||v(b.title)===c);return{...a,title:c,purpose:a.purpose,requiredFacts:a.requiredFacts||[],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}}),{...c,template:a})}},77327:(a,b,c)=>{c.d(b,{C:()=>f});var d=c(8753);function e(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}}function f(a,b){return(function(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,d.V)().chapterTitleFilters.filter(a=>a.templateMatchers.some(a=>e(b,a)))})(b).some(b=>!!b.minLength&&a.length<b.minLength||!!b.maxLength&&a.length>b.maxLength||b.forbiddenPatterns.some(b=>e(a,b)))}}};
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=4974,exports.ids=[4974],exports.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)()},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)}}},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))}},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>m,default:()=>w,isReservedSkillId:()=>l,listSkillCollection:()=>p,normalizeSkillForWrite:()=>t,persistSkill:()=>v,readBodyId:()=>s,respondMethodNotAllowed:()=>n,skillEditorOptions:()=>q,unsupportedFieldIssues:()=>u,withBuiltInFlag:()=>o});var d=c(16006),e=c(32374),f=c(13424),g=c(45304),h=c(89759);let i=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"}],j=[{value:"llmChecklist",label:"专业写作核对提示",note:"按具体对象选用;不评分,也不作为验收通过证明"}],k=["validate"];function l(a){return k.includes(a)}function m(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function n(a){a.status(405).json({error:"Method not allowed"})}function o(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,f.zg)(a)}}function p(){let{skills:a,invalid:b}=(0,g.LU)();return{skills:a.map(o),invalid:b}}function q(){return{contractVersion:f.SV,chapterDomains:f.ii.map(a=>({value:a,label:f.aq[a],note:f.tv[a]})),projectTypes:f.Av.map(a=>({value:a,label:f.zK[a]})),factSources:f.C3.map(a=>({value:a.id,label:a.label})),processCards:[...e.pw.values()].map(a=>({value:a.id,label:a.name})),knowledgeKinds:[...i],acceptanceKinds:[...j],isolationRules:f.TF,absentCarriers:f.uZ}}function r(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function s(a){let b=r(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function t(a,b){let c=r(a)??{};return{id:b,version:"number"==typeof c.version?c.version:f.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function u(a){return(0,h.GO)(a)}function v(a){return(0,g.T$)({v:g.t1,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}let w=(0,d.j)("api/skills",function(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=p();return b.status(200).json({skills:a,options:q(),invalid:c})}if("POST"===a.method){let c=s(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(l(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,e.LB)(c))return b.status(403).json({error:m(c,"create")});let d=u(a.body);if(d.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:d,warnings:[]});let f=t(a.body,c),g=(0,h.Yb)(f);if(!g.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:g.errors,warnings:g.warnings});let i=v(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:o(f),skills:p().skills,warnings:g.warnings})}return n(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}})}};