@customize-agent/server 4.60.35 → 4.60.36

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 (342) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +197 -297
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +3 -7
  5. package/.next/routes-manifest.json +19 -30
  6. package/.next/server/chunks/{8645.js → 1026.js} +1 -1
  7. package/.next/server/chunks/1146.js +1 -0
  8. package/.next/server/chunks/1547.js +385 -0
  9. package/.next/server/chunks/3074.js +1 -0
  10. package/.next/server/chunks/3750.js +2 -0
  11. package/.next/server/chunks/407.js +1 -0
  12. package/.next/server/chunks/5037.js +46 -0
  13. package/.next/server/chunks/5304.js +2 -2
  14. package/.next/server/chunks/5599.js +1 -0
  15. package/.next/server/chunks/5763.js +159 -0
  16. package/.next/server/chunks/6138.js +5 -0
  17. package/.next/server/chunks/6355.js +1 -0
  18. package/.next/server/chunks/6822.js +1 -1
  19. package/.next/server/chunks/702.js +3 -0
  20. package/.next/server/chunks/7296.js +1 -0
  21. package/.next/server/chunks/8176.js +1 -0
  22. package/.next/server/chunks/8204.js +1 -1
  23. package/.next/server/chunks/8459.js +11 -0
  24. package/.next/server/chunks/8570.js +1 -0
  25. package/.next/server/chunks/9270.js +1 -0
  26. package/.next/server/chunks/9283.js +7 -0
  27. package/.next/server/chunks/9301.js +2 -2
  28. package/.next/server/chunks/9522.js +5 -0
  29. package/.next/server/chunks/9559.js +1 -0
  30. package/.next/server/chunks/9688.js +10 -0
  31. package/.next/server/middleware-build-manifest.js +1 -1
  32. package/.next/server/pages/404.html +1 -1
  33. package/.next/server/pages/500.html +1 -1
  34. package/.next/server/pages/_app.js +1 -1
  35. package/.next/server/pages/_app.js.nft.json +1 -1
  36. package/.next/server/pages/_document.js +1 -1
  37. package/.next/server/pages/_document.js.nft.json +1 -1
  38. package/.next/server/pages/_error.js +1 -1
  39. package/.next/server/pages/_error.js.nft.json +1 -1
  40. package/.next/server/pages/api/assets/generated/preview.js +2 -1
  41. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  42. package/.next/server/pages/api/assets/generated.js +2 -1
  43. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  44. package/.next/server/pages/api/config/embedding/healthCheck.js +2 -3
  45. package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
  46. package/.next/server/pages/api/config/embedding.js +2 -3
  47. package/.next/server/pages/api/config/embedding.js.nft.json +1 -1
  48. package/.next/server/pages/api/config/healthCheck.js +2 -3
  49. package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
  50. package/.next/server/pages/api/config/models.js +2 -3
  51. package/.next/server/pages/api/config/models.js.nft.json +1 -1
  52. package/.next/server/pages/api/config/providers/[provider].js +2 -3
  53. package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
  54. package/.next/server/pages/api/config/providers.js +2 -3
  55. package/.next/server/pages/api/config/providers.js.nft.json +1 -1
  56. package/.next/server/pages/api/config/reset.js +2 -3
  57. package/.next/server/pages/api/config/reset.js.nft.json +1 -1
  58. package/.next/server/pages/api/config/web-access.js +2 -3
  59. package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
  60. package/.next/server/pages/api/documents/canvas/[id].js +2 -1
  61. package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
  62. package/.next/server/pages/api/documents/delivery-review.js +2 -0
  63. package/.next/server/pages/api/documents/delivery-review.js.nft.json +1 -0
  64. package/.next/server/pages/api/documents/export.js +5 -2
  65. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  66. package/.next/server/pages/api/documents/generate/preview.js +6 -1
  67. package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
  68. package/.next/server/pages/api/documents/generate.js +2 -1
  69. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  70. package/.next/server/pages/api/documents/generated/[id]/events.js +4 -3
  71. package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
  72. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +2 -1
  73. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
  74. package/.next/server/pages/api/documents/generated/[id]/instruction.js +4 -2
  75. package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -1
  76. package/.next/server/pages/api/documents/generated/[id]/messages.js +2 -0
  77. package/.next/server/pages/api/documents/generated/[id]/messages.js.nft.json +1 -0
  78. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +2 -1
  79. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
  80. package/.next/server/pages/api/documents/generated/[id]/nodes.js +2 -1
  81. package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
  82. package/.next/server/pages/api/documents/generated/[id]/pause.js +2 -1
  83. package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
  84. package/.next/server/pages/api/documents/generated/[id]/preview.js +2 -1
  85. package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
  86. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +2 -1
  87. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
  88. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +2 -1
  89. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
  90. package/.next/server/pages/api/documents/generated/[id]/repair.js +2 -1
  91. package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
  92. package/.next/server/pages/api/documents/generated/[id]/report.js +2 -1
  93. package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +1 -1
  94. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +2 -1
  95. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
  96. package/.next/server/pages/api/documents/generated/[id].js +2 -1
  97. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  98. package/.next/server/pages/api/documents/generated.js +2 -1
  99. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  100. package/.next/server/pages/api/health.js +1 -1
  101. package/.next/server/pages/api/health.js.nft.json +1 -1
  102. package/.next/server/pages/api/jobs/[id].js +2 -2
  103. package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
  104. package/.next/server/pages/api/kb/categories.js +2 -1
  105. package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
  106. package/.next/server/pages/api/kb/duplicates.js +2 -1
  107. package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
  108. package/.next/server/pages/api/kb/features.js +2 -3
  109. package/.next/server/pages/api/kb/features.js.nft.json +1 -1
  110. package/.next/server/pages/api/kb/files/detail.js +2 -1
  111. package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
  112. package/.next/server/pages/api/kb/files/export.js +2 -1
  113. package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
  114. package/.next/server/pages/api/kb/files/open.js +2 -1
  115. package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
  116. package/.next/server/pages/api/kb/files/preview-pdf-page.js +2 -1
  117. package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
  118. package/.next/server/pages/api/kb/files/reindex.js +1 -2
  119. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  120. package/.next/server/pages/api/kb/files/search.js +2 -1
  121. package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
  122. package/.next/server/pages/api/kb/files/source-preview.js +2 -1
  123. package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -1
  124. package/.next/server/pages/api/kb/files.js +2 -2
  125. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  126. package/.next/server/pages/api/kb/ignore.js +2 -1
  127. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  128. package/.next/server/pages/api/kb/material-groups.js +2 -1
  129. package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
  130. package/.next/server/pages/api/kb/operations.js +2 -2
  131. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  132. package/.next/server/pages/api/kb/reindex.js +1 -2
  133. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  134. package/.next/server/pages/api/kb/stats.js +2 -1
  135. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  136. package/.next/server/pages/api/kb/tags.js +2 -1
  137. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  138. package/.next/server/pages/api/kb/upload/complete.js +1 -2
  139. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  140. package/.next/server/pages/api/kb/upload.js +1 -2
  141. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  142. package/.next/server/pages/api/prompt/chat.js +3 -4
  143. package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
  144. package/.next/server/pages/api/skills/[id].js +2 -1
  145. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  146. package/.next/server/pages/api/skills/validate.js +2 -1
  147. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  148. package/.next/server/pages/api/skills.js +2 -1
  149. package/.next/server/pages/api/skills.js.nft.json +1 -1
  150. package/.next/server/pages/api/system/data-health.js +2 -2
  151. package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
  152. package/.next/server/pages/api/system/reset.js +1 -1
  153. package/.next/server/pages/api/system/reset.js.nft.json +1 -1
  154. package/.next/server/pages/documents.html +1 -1
  155. package/.next/server/pages/documents.js.nft.json +1 -1
  156. package/.next/server/pages/generation/[id].html +1 -0
  157. package/.next/server/pages/generation/[id].js.nft.json +1 -0
  158. package/.next/server/pages/generation.html +1 -0
  159. package/.next/server/pages/generation.js.nft.json +1 -0
  160. package/.next/server/pages/index.js +1 -0
  161. package/.next/server/pages/index.js.nft.json +1 -1
  162. package/.next/server/pages/jobs.html +1 -1
  163. package/.next/server/pages/jobs.js.nft.json +1 -1
  164. package/.next/server/pages/knowledge/file-detail.html +1 -1
  165. package/.next/server/pages/knowledge/file-detail.js.nft.json +1 -1
  166. package/.next/server/pages/knowledge/files.html +1 -1
  167. package/.next/server/pages/knowledge/files.js.nft.json +1 -1
  168. package/.next/server/pages/knowledge/manage.html +1 -1
  169. package/.next/server/pages/knowledge/manage.js.nft.json +1 -1
  170. package/.next/server/pages/knowledge/source-preview.html +1 -1
  171. package/.next/server/pages/knowledge/source-preview.js.nft.json +1 -1
  172. package/.next/server/pages/knowledge.html +1 -1
  173. package/.next/server/pages/knowledge.js.nft.json +1 -1
  174. package/.next/server/pages/models.html +1 -1
  175. package/.next/server/pages/models.js.nft.json +1 -1
  176. package/.next/server/pages/settings.html +1 -1
  177. package/.next/server/pages/settings.js.nft.json +1 -1
  178. package/.next/server/pages/skills/[id]/edit.html +1 -1
  179. package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
  180. package/.next/server/pages/skills/[id].html +1 -1
  181. package/.next/server/pages/skills/[id].js.nft.json +1 -1
  182. package/.next/server/pages/skills/new.html +1 -1
  183. package/.next/server/pages/skills/new.js.nft.json +1 -1
  184. package/.next/server/pages/skills.html +1 -1
  185. package/.next/server/pages/skills.js.nft.json +1 -1
  186. package/.next/server/pages-manifest.json +31 -36
  187. package/.next/static/chunks/112-9eacc7c0686813d6.js +1 -0
  188. package/.next/static/chunks/127-5ee1899eef559281.js +1 -0
  189. package/.next/static/chunks/{1210-703ad87eaeee1e4e.js → 210-71eaf9de9aa92051.js} +1 -1
  190. package/.next/static/chunks/325-45106bb003a2c5ce.js +4 -0
  191. package/.next/static/chunks/326-a3915e61888b0dbf.js +1 -0
  192. package/.next/static/chunks/333-7642e65bff6b8465.js +1 -0
  193. package/.next/static/chunks/338-19ccbaec57a7bf9c.js +4 -0
  194. package/.next/static/chunks/350-87b9c900a356d9b9.js +1 -0
  195. package/.next/static/chunks/359-f87c659236e0e0fe.js +1 -0
  196. package/.next/static/chunks/{8399-a001bb2a0cb1640b.js → 399-aa8a45d80e989621.js} +1 -1
  197. package/.next/static/chunks/430-f288e16301b9aea5.js +1 -0
  198. package/.next/static/chunks/465-80fbb245d43232c8.js +6 -0
  199. package/.next/static/chunks/499-2233cadc6d4da647.js +10 -0
  200. package/.next/static/chunks/551-fd86e95935b0957f.js +16 -0
  201. package/.next/static/chunks/576-6699fed6c88502fe.js +1 -0
  202. package/.next/static/chunks/61-de1dd9c104680470.js +1 -0
  203. package/.next/static/chunks/665-0634aa49137defc4.js +1 -0
  204. package/.next/static/chunks/681-e31b13114497e058.js +1 -0
  205. package/.next/static/chunks/687-644a12a5b584e19f.js +1 -0
  206. package/.next/static/chunks/702-4d9cc8d4d7775ea9.js +1 -0
  207. package/.next/static/chunks/748-9e5bf4181d7482f3.js +1 -0
  208. package/.next/static/chunks/759-280cf4040fae83af.js +25 -0
  209. package/.next/static/chunks/855-cbf7cd1db33198f0.js +17 -0
  210. package/.next/static/chunks/862-13d1c84d0938b824.js +1 -0
  211. package/.next/static/chunks/937-ccd3ceb1b3739535.js +1 -0
  212. package/.next/static/chunks/{8964-e959915ecfae86b2.js → 964-82cc4701f08f7351.js} +1 -1
  213. package/.next/static/chunks/992-8032f477230baaaf.js +1 -0
  214. package/.next/static/chunks/framework-4b565b3ddc94cdac.js +1 -0
  215. package/.next/static/chunks/main-0c91f573696223ca.js +1 -0
  216. package/.next/static/chunks/pages/_app-a70de062f1be1c59.js +140 -0
  217. package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +1 -0
  218. package/.next/static/chunks/pages/documents-2d99ae9287f9739b.js +1 -0
  219. package/.next/static/chunks/pages/generation/[id]-1f97e47ce545bd11.js +1 -0
  220. package/.next/static/chunks/pages/generation-043e325d635c96af.js +1 -0
  221. package/.next/static/chunks/pages/index-24d1f8f39ae0beb0.js +1 -0
  222. package/.next/static/chunks/pages/jobs-ff2f899a081b616e.js +1 -0
  223. package/.next/static/chunks/pages/knowledge/file-detail-9a9a89e4fa33c0d9.js +1 -0
  224. package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +1 -0
  225. package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +1 -0
  226. package/.next/static/chunks/pages/knowledge/{source-preview-24936b9a746ed07f.js → source-preview-f000b4d63cd65a54.js} +1 -1
  227. package/.next/static/chunks/pages/knowledge-8fa842d21892e2c3.js +1 -0
  228. package/.next/static/chunks/pages/models-6d9b301009f82395.js +1 -0
  229. package/.next/static/chunks/pages/settings-08893ba8afa1a486.js +1 -0
  230. package/.next/static/chunks/pages/skills/[id]/edit-378249e662ebf31f.js +1 -0
  231. package/.next/static/chunks/pages/skills/[id]-0ca4cde22e4a518b.js +1 -0
  232. package/.next/static/chunks/pages/skills/new-c1eb16d98fad4e02.js +1 -0
  233. package/.next/static/chunks/pages/skills-9fb1fa2b669ad4e3.js +1 -0
  234. package/.next/static/chunks/{webpack-2da1769ff35eb1ed.js → webpack-6224d37324e372cb.js} +1 -1
  235. package/.next/static/css/1f6d2a1bf5e15e0f.css +1 -0
  236. package/.next/static/css/b420c193e0e99857.css +1 -0
  237. package/.next/static/e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2/_buildManifest.js +1 -0
  238. package/README.md +14 -4
  239. package/messages/en-US.json +46 -100
  240. package/messages/zh-CN.json +44 -98
  241. package/next.config.ts +6 -5
  242. package/package.json +14 -16
  243. package/scripts/build-identity.cjs +16 -5
  244. package/scripts/check-workspace-deps.cjs +3 -3
  245. package/scripts/purge-next-artifacts.cjs +8 -5
  246. package/scripts/upload-matrix.cjs +1 -2
  247. package/scripts/verify-next-static.js +1 -1
  248. package/.next/package.json +0 -1
  249. package/.next/server/chunks/1001.js +0 -2
  250. package/.next/server/chunks/1243.js +0 -3
  251. package/.next/server/chunks/1928.js +0 -1
  252. package/.next/server/chunks/1936.js +0 -385
  253. package/.next/server/chunks/2328.js +0 -6
  254. package/.next/server/chunks/2434.js +0 -3
  255. package/.next/server/chunks/3806.js +0 -1
  256. package/.next/server/chunks/4974.js +0 -2
  257. package/.next/server/chunks/5746.js +0 -5
  258. package/.next/server/chunks/6321.js +0 -1
  259. package/.next/server/chunks/7848.js +0 -144
  260. package/.next/server/chunks/9666.js +0 -146
  261. package/.next/server/instrumentation.js +0 -1
  262. package/.next/server/instrumentation.js.nft.json +0 -1
  263. package/.next/server/pages/api/prompt.js +0 -2
  264. package/.next/server/pages/api/prompt.js.nft.json +0 -1
  265. package/.next/server/pages/api/system/logs.js +0 -2
  266. package/.next/server/pages/api/system/logs.js.nft.json +0 -1
  267. package/.next/server/pages/api/system/stats.js +0 -2
  268. package/.next/server/pages/api/system/stats.js.nft.json +0 -1
  269. package/.next/server/pages/canvas/[id].html +0 -1
  270. package/.next/server/pages/canvas/[id].js.nft.json +0 -1
  271. package/.next/server/pages/canvas.html +0 -1
  272. package/.next/server/pages/canvas.js.nft.json +0 -1
  273. package/.next/server/pages/guide.html +0 -1
  274. package/.next/server/pages/guide.js.nft.json +0 -1
  275. package/.next/server/pages/index.html +0 -1
  276. package/.next/server/pages/overview.html +0 -1
  277. package/.next/server/pages/overview.js.nft.json +0 -1
  278. package/.next/server/pages/prompt.html +0 -1
  279. package/.next/server/pages/prompt.js.nft.json +0 -1
  280. package/.next/server/pages/system/logs.html +0 -1
  281. package/.next/server/pages/system/logs.js.nft.json +0 -1
  282. package/.next/static/chunks/1141-d420a7685bc3623c.js +0 -1
  283. package/.next/static/chunks/1499-ff8f02f6bb6f3d45.js +0 -10
  284. package/.next/static/chunks/1702-f5e99af7aface475.js +0 -1
  285. package/.next/static/chunks/2864-b040f2bffa08c139.js +0 -6
  286. package/.next/static/chunks/3456-70bb03a39473f693.js +0 -1
  287. package/.next/static/chunks/3980-73841c40d55ddfa1.js +0 -1
  288. package/.next/static/chunks/4052-199e61ca9e6a33e7.js +0 -1
  289. package/.next/static/chunks/4337-a670a1a94ab505d9.js +0 -1
  290. package/.next/static/chunks/4530-8b9788da40548ec6.js +0 -1
  291. package/.next/static/chunks/4565-3c5ff667062ccec9.js +0 -21
  292. package/.next/static/chunks/4665-1984a3d8b0573fa1.js +0 -1
  293. package/.next/static/chunks/5061-80765d4a612286e0.js +0 -1
  294. package/.next/static/chunks/5544-d77b8289662b4c28.js +0 -4
  295. package/.next/static/chunks/5760-f4191aac081b12d4.js +0 -11
  296. package/.next/static/chunks/6409-5a3bb0fbad4f64b1.js +0 -14
  297. package/.next/static/chunks/6506-ac0ba7338cc84b7d.js +0 -1
  298. package/.next/static/chunks/6748-07b0b05bf03c72f0.js +0 -1
  299. package/.next/static/chunks/7217-416b8488e0d2d498.js +0 -1
  300. package/.next/static/chunks/7576-ba6fc03060415b0e.js +0 -1
  301. package/.next/static/chunks/7646-159733564c7eb8dc.js +0 -1
  302. package/.next/static/chunks/7795-c11ff1a81c67c5aa.js +0 -1
  303. package/.next/static/chunks/8318-cb3a94de1617f983.js +0 -1
  304. package/.next/static/chunks/8338-b2ea00050048ba9f.js +0 -4
  305. package/.next/static/chunks/8564-ac3e2f1bf87765b3.js +0 -1
  306. package/.next/static/chunks/8569-1d5c61a3f4fa0e26.js +0 -16
  307. package/.next/static/chunks/8715-ee013bd7f5ba38e8.js +0 -1
  308. package/.next/static/chunks/8750-a3c55a576effb3a6.js +0 -1
  309. package/.next/static/chunks/8787-49b1f35eb4acfac9.js +0 -10
  310. package/.next/static/chunks/9551-f4b09bf2213ad571.js +0 -16
  311. package/.next/static/chunks/9605-3dee531f8a7ecbe0.js +0 -4
  312. package/.next/static/chunks/9937-e4b2deadd24e3962.js +0 -1
  313. package/.next/static/chunks/framework-9cde5013cd555765.js +0 -1
  314. package/.next/static/chunks/main-b313efde54fa6d2e.js +0 -1
  315. package/.next/static/chunks/pages/_app-51c48c5efcf5c721.js +0 -140
  316. package/.next/static/chunks/pages/_error-c01b6fb772028676.js +0 -1
  317. package/.next/static/chunks/pages/canvas/[id]-18865f1b7e3a4696.js +0 -1
  318. package/.next/static/chunks/pages/canvas-1d3589790493e955.js +0 -1
  319. package/.next/static/chunks/pages/documents-a1af5c6be26daed2.js +0 -1
  320. package/.next/static/chunks/pages/guide-fdf0822dc1d28813.js +0 -1
  321. package/.next/static/chunks/pages/index-c572e9caa60cb278.js +0 -1
  322. package/.next/static/chunks/pages/jobs-ebd1877dbf788a83.js +0 -1
  323. package/.next/static/chunks/pages/knowledge/file-detail-3d1ffd43f4f0e47b.js +0 -1
  324. package/.next/static/chunks/pages/knowledge/files-b796702bb5f8ac50.js +0 -1
  325. package/.next/static/chunks/pages/knowledge/manage-6d7b21cdca1255f2.js +0 -1
  326. package/.next/static/chunks/pages/knowledge-2a776c1740386874.js +0 -1
  327. package/.next/static/chunks/pages/models-8a89dd5bf0f81242.js +0 -1
  328. package/.next/static/chunks/pages/overview-7e8018014009682e.js +0 -1
  329. package/.next/static/chunks/pages/prompt-11f87694feb6514c.js +0 -1
  330. package/.next/static/chunks/pages/settings-e8dcaba1551a0b2b.js +0 -1
  331. package/.next/static/chunks/pages/skills/[id]/edit-99e616d5019e80b1.js +0 -1
  332. package/.next/static/chunks/pages/skills/[id]-71f696be252bbf0d.js +0 -1
  333. package/.next/static/chunks/pages/skills/new-00886ea4c676f927.js +0 -1
  334. package/.next/static/chunks/pages/skills-8ad2577b4aa17f3b.js +0 -1
  335. package/.next/static/chunks/pages/system/logs-0856f7c65432befb.js +0 -1
  336. package/.next/static/css/2da1c822e3bdb4bb.css +0 -1
  337. package/.next/static/css/9eb02c1a401fd278.css +0 -1
  338. package/.next/static/e598c2bda8274fb1bb8f7e00f0f36fd4deae91b11929c9f04f17e1ae36b34697/_buildManifest.js +0 -1
  339. package/scripts/half-built-scan.allow.json +0 -152
  340. package/scripts/half-built-scan.baseline.json +0 -190
  341. package/scripts/half-built-scan.mjs +0 -287
  342. /package/.next/static/{e598c2bda8274fb1bb8f7e00f0f36fd4deae91b11929c9f04f17e1ae36b34697 → e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2}/_ssgManifest.js +0 -0
@@ -1,152 +0,0 @@
1
- {
2
- "version": 1,
3
- "note": "引用扫描登记:每项须有具体的测试、观察或内部用途;新增零引用或仅测试候选须独立核查,不能用登记掩盖未接入业务。",
4
- "entries": [
5
- {
6
- "file": "apps/server/src/lib/api.ts",
7
- "symbol": "__resetExportReceiptForTest",
8
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
9
- },
10
- {
11
- "file": "apps/server/src/lib/i18n.ts",
12
- "symbol": "resetMissingTranslationKeys",
13
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
14
- },
15
- {
16
- "file": "apps/server/src/lib/i18n.ts",
17
- "symbol": "catalogKeyParity",
18
- "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
19
- },
20
- {
21
- "file": "apps/server/src/pages/api/documents/canvas/[id].ts",
22
- "symbol": "isAggregateFoldSummary",
23
- "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
24
- },
25
- {
26
- "file": "apps/server/src/pages/api/documents/export.ts",
27
- "symbol": "__documentExportTest__",
28
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
29
- },
30
- {
31
- "file": "apps/server/src/services/agent/eventBus.ts",
32
- "symbol": "resetEventBusForTest",
33
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
34
- },
35
- {
36
- "file": "apps/server/src/services/agent/eventBus.ts",
37
- "symbol": "flushSubscriptions",
38
- "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
39
- },
40
- {
41
- "file": "apps/server/src/services/agent/eventBus.ts",
42
- "symbol": "subscriberCount",
43
- "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
44
- },
45
- {
46
- "file": "apps/server/src/services/agent/loopBudget.ts",
47
- "symbol": "resetBudgetMeters",
48
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
49
- },
50
- {
51
- "file": "apps/server/src/services/agent/toolRegistry.ts",
52
- "symbol": "getTool",
53
- "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
54
- },
55
- {
56
- "file": "apps/server/src/services/agent/toolRegistry.ts",
57
- "symbol": "TOOL_GROUP_COUNTS",
58
- "reason": "登记表/账本的机械自证面:用例据此核对登记与实现一致;生产不需要调用"
59
- },
60
- {
61
- "file": "apps/server/src/services/document-core/documentDomainProfileService.ts",
62
- "symbol": "fieldMatchesCategory",
63
- "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
64
- },
65
- {
66
- "file": "apps/server/src/services/document-core/generatedDocumentService.ts",
67
- "symbol": "setProcessAliveProbeForTest",
68
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
69
- },
70
- {
71
- "file": "apps/server/src/services/document-core/generatedDocumentService.ts",
72
- "symbol": "getGenerateTask",
73
- "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
74
- },
75
- {
76
- "file": "apps/server/src/services/document-workflow/costModel.ts",
77
- "symbol": "resetCostModelCaches",
78
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
79
- },
80
- {
81
- "file": "apps/server/src/services/document-workflow/envRegistry.ts",
82
- "symbol": "unregisteredAppEnvVars",
83
- "reason": "登记表/账本的机械自证面:用例据此核对登记与实现一致;生产不需要调用"
84
- },
85
- {
86
- "file": "apps/server/src/services/document-workflow/generationStages/generationSession.ts",
87
- "symbol": "createEmptyGenerationSession",
88
- "reason": "测试钩子:构造空会话的最小骨架(生产总是由真实输入建会话)"
89
- },
90
- {
91
- "file": "apps/server/src/services/document-workflow/integratedBlueprint.ts",
92
- "symbol": "loadBlueprintAsset",
93
- "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
94
- },
95
- {
96
- "file": "apps/server/src/services/document-workflow/llmClient.ts",
97
- "symbol": "resetEmptyStormStreak",
98
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
99
- },
100
- {
101
- "file": "apps/server/src/services/document-workflow/llmClient.ts",
102
- "symbol": "activeLlmCallCount",
103
- "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
104
- },
105
- {
106
- "file": "apps/server/src/services/document-workflow/llmClient.ts",
107
- "symbol": "resetLlmSlotStateForTest",
108
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
109
- },
110
- {
111
- "file": "apps/server/src/services/document-workflow/semanticSimilarity.ts",
112
- "symbol": "clearEmbedCacheForTest",
113
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
114
- },
115
- {
116
- "file": "apps/server/src/services/knowledge/kbService.ts",
117
- "symbol": "shutdownKbService",
118
- "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
119
- },
120
- {
121
- "file": "apps/server/src/services/agent/emitNode.ts",
122
- "symbol": "resetEmitNodeState",
123
- "reason": "实际节点生产器emitNode的进程状态重置测试面,隔离轮次/幂等状态;非未接入业务函数。"
124
- },
125
- {
126
- "file": "apps/server/src/services/document-workflow/semanticSimilarity.ts",
127
- "symbol": "snapshotEmbedCacheStats",
128
- "reason": "实际事实检索、evidence/Native阶段共用的embedding缓存统计只读测试观察面;不承担正文雷同删除或写作评分。"
129
- },
130
- {
131
- "file": "apps/server/src/services/document-workflow/sourceVersionPolicy.ts",
132
- "symbol": "isAuthenticatedSourceVersionPolicy",
133
- "reason": "实际SourceVersionPolicy WeakSet认证状态只读测试面,验证伪造/恢复前后的真实来源权限;非模型声明或验收通过资格。"
134
- },
135
- {
136
- "file": "apps/server/src/lib/i18n.ts",
137
- "symbol": "getMissingTranslationKeys",
138
- "reason": "读取真实翻译缺失缓存,供测试验证去重与告警;不写配置或授予产品能力。"
139
- },
140
- {
141
- "file": "apps/server/src/services/agent/nodeLog.ts",
142
- "symbol": "readNode",
143
- "reason": "读取真实追加日志中单个节点,供持久化、更新投影与截断恢复回归核查。"
144
- },
145
- {
146
- "file": "apps/server/src/services/document-workflow/detectorFixerRegistry.ts",
147
- "symbol": "manualDispositionIssues",
148
- "reason": "只读筛选现有检测器登记的人工核查项,验证危大分级等实际错误的处置属性;不自动授予修复或通过。"
149
- }
150
- ],
151
- "retirementUpdatedAt": "2026-10-10T18:16:44.738Z"
152
- }
@@ -1,190 +0,0 @@
1
- {
2
- "note": "引用扫描基线:已移除不存在的声明,零引用导出不允许新增;实际入口、公开接口及测试观察面分别核查。",
3
- "generatedAt": "2026-09-29",
4
- "scope": [
5
- "apps/server/src",
6
- "packages"
7
- ],
8
- "counts": {
9
- "谁都不用": 0,
10
- "半成品嫌疑": 22,
11
- "封装暴露(只导出给测试)": 142,
12
- "不可判(星号再导出)": 0
13
- },
14
- "roster": {
15
- "谁都不用": [],
16
- "半成品嫌疑": [
17
- "apps/server/src/lib/i18n.ts::catalogKeyParity",
18
- "apps/server/src/lib/i18n.ts::resetMissingTranslationKeys",
19
- "apps/server/src/pages/api/documents/canvas/[id].ts::isAggregateFoldSummary",
20
- "apps/server/src/pages/api/documents/export.ts::__documentExportTest__",
21
- "apps/server/src/services/agent/eventBus.ts::flushSubscriptions",
22
- "apps/server/src/services/agent/eventBus.ts::resetEventBusForTest",
23
- "apps/server/src/services/agent/eventBus.ts::subscriberCount",
24
- "apps/server/src/services/agent/loopBudget.ts::resetBudgetMeters",
25
- "apps/server/src/services/agent/toolRegistry.ts::TOOL_GROUP_COUNTS",
26
- "apps/server/src/services/agent/toolRegistry.ts::getTool",
27
- "apps/server/src/services/document-core/documentDomainProfileService.ts::fieldMatchesCategory",
28
- "apps/server/src/services/document-core/generatedDocumentService.ts::getGenerateTask",
29
- "apps/server/src/services/document-core/generatedDocumentService.ts::setProcessAliveProbeForTest",
30
- "apps/server/src/services/document-workflow/costModel.ts::resetCostModelCaches",
31
- "apps/server/src/services/document-workflow/envRegistry.ts::unregisteredAppEnvVars",
32
- "apps/server/src/services/document-workflow/generationStages/generationSession.ts::createEmptyGenerationSession",
33
- "apps/server/src/services/document-workflow/integratedBlueprint.ts::loadBlueprintAsset",
34
- "apps/server/src/services/document-workflow/llmClient.ts::activeLlmCallCount",
35
- "apps/server/src/services/document-workflow/llmClient.ts::resetEmptyStormStreak",
36
- "apps/server/src/services/document-workflow/llmClient.ts::resetLlmSlotStateForTest",
37
- "apps/server/src/services/document-workflow/semanticSimilarity.ts::clearEmbedCacheForTest",
38
- "apps/server/src/services/knowledge/kbService.ts::shutdownKbService"
39
- ],
40
- "封装暴露(只导出给测试)": [
41
- "apps/server/src/components/Canvas/DeliverablePreview.tsx::bodySourceText",
42
- "apps/server/src/components/Canvas/activeAgents.ts::ACTIVE_AGENT_LIMIT",
43
- "apps/server/src/components/Canvas/activeAgents.ts::RECENT_DONE_MS",
44
- "apps/server/src/components/Canvas/activeAgents.ts::agentKindLabel",
45
- "apps/server/src/components/Canvas/handoff.ts::HANDOFF_FRESH_MS",
46
- "apps/server/src/components/Canvas/handoff.ts::HANDOFF_MAX",
47
- "apps/server/src/components/Canvas/handoff.ts::clipLabel",
48
- "apps/server/src/components/Canvas/handoff.ts::handoffLabel",
49
- "apps/server/src/components/Canvas/handoff.ts::metricsLabel",
50
- "apps/server/src/components/Canvas/handoff.ts::reversedEdgePath",
51
- "apps/server/src/components/Canvas/nodeView.ts::DOC_STATUS_TEXT",
52
- "apps/server/src/components/Canvas/nodeView.ts::NODE_STATUS_TEXT",
53
- "apps/server/src/components/Canvas/nodeView.ts::NODE_TYPE_LABELS",
54
- "apps/server/src/components/Canvas/useCanvasViewport.ts::FOLLOW_EDGE_RATIO",
55
- "apps/server/src/hooks/useGenerationState.ts::buildFlowStepsFromNodes",
56
- "apps/server/src/hooks/useGenerationState.ts::stageIconFor",
57
- "apps/server/src/lib/i18n.ts::flattenCatalogKeys",
58
- "apps/server/src/lib/i18n.ts::getMissingTranslationKeys",
59
- "apps/server/src/lib/markdownPreview.ts::createPreviewStats",
60
- "apps/server/src/lib/markdownPreview.ts::decodePreviewEntities",
61
- "apps/server/src/lib/markdownPreview.ts::escapePreviewText",
62
- "apps/server/src/lib/markdownPreview.ts::isSafePreviewUrl",
63
- "apps/server/src/lib/markdownPreview.ts::sanitizePreviewHtml",
64
- "apps/server/src/pages/api/documents/canvas/[id].ts::FOLD_SUMMARY_MARK",
65
- "apps/server/src/pages/api/documents/canvas/[id].ts::foldAggregateStageDetails",
66
- "apps/server/src/pages/api/skills/index.ts::skillEditorOptions",
67
- "apps/server/src/services/agent/auditCapability.ts::normalizeClarificationQuestion",
68
- "apps/server/src/services/agent/capabilityGaps.ts::CAPABILITY_GAPS",
69
- "apps/server/src/services/agent/emitNode.ts::PHASE_ROOTS",
70
- "apps/server/src/services/agent/emitNode.ts::stageIdentity",
71
- "apps/server/src/services/agent/eventBus.ts::BoundedEventBuffer",
72
- "apps/server/src/services/agent/eventBus.ts::EVENT_BUS_GLOBAL_KEY",
73
- "apps/server/src/services/agent/eventBus.ts::eventBusState",
74
- "apps/server/src/services/agent/eventBus.ts::publishGenerationEvent",
75
- "apps/server/src/services/agent/loopBudget.ts::cacheShareText",
76
- "apps/server/src/services/agent/loopBudget.ts::configureBudgetMeter",
77
- "apps/server/src/services/agent/loopBudget.ts::isFallbackMeter",
78
- "apps/server/src/services/agent/nodeImpact.ts::IMPACT_ESCALATION_THRESHOLD",
79
- "apps/server/src/services/agent/nodeLog.ts::appendNodeEvent",
80
- "apps/server/src/services/agent/nodeLog.ts::assertNodeShape",
81
- "apps/server/src/services/agent/nodeRollup.ts::NODE_STATUS_PRECEDENCE",
82
- "apps/server/src/services/agent/nodeRollup.ts::nodeChildrenIndex",
83
- "apps/server/src/services/agent/nodeRollup.ts::nodeDepths",
84
- "apps/server/src/services/agent/nodeTypes.ts::AGENT_NODE_TYPES",
85
- "apps/server/src/services/agent/nodeTypes.ts::NODE_STATUSES",
86
- "apps/server/src/services/agent/repairStore.ts::RepairStoreError",
87
- "apps/server/src/services/agent/repairStore.ts::collectRepairFeedback",
88
- "apps/server/src/services/agent/repairStore.ts::readRepairHistory",
89
- "apps/server/src/services/agent/repairStore.ts::repairLocalizationProbes",
90
- "apps/server/src/services/agent/repairStore.ts::repairLogPath",
91
- "apps/server/src/services/agent/repairStore.ts::toRepairFeedbackEntry",
92
- "apps/server/src/services/agent/repairTransaction.ts::decideRepairOutcome",
93
- "apps/server/src/services/agent/toolEnvelope.ts::INJECTION_PATTERNS",
94
- "apps/server/src/services/agent/toolEnvelope.ts::detectInjection",
95
- "apps/server/src/services/agent/toolRegistry.ts::ALL_TOOLS",
96
- "apps/server/src/services/agent/toolRegistry.ts::toolNames",
97
- "apps/server/src/services/agent/writerLoopBlock.ts::unfixableDeclarationOf",
98
- "apps/server/src/services/common/errorLogService.ts::createProcessErrorHandler",
99
- "apps/server/src/services/common/safePath.ts::rejectRelativePath",
100
- "apps/server/src/services/common/serviceState.ts::getFirstStartedAt",
101
- "apps/server/src/services/common/serviceState.ts::serviceStatePath",
102
- "apps/server/src/services/document-core/generatedDocumentService.ts::buildResumeInitialRecord",
103
- "apps/server/src/services/document-core/generatedDocumentService.ts::hasActiveTaskForProject",
104
- "apps/server/src/services/document-core/generatedDocumentService.ts::upsertGeneratedAssets",
105
- "apps/server/src/services/document-core/generatedDocumentService.ts::upsertGeneratedDocumentAsset",
106
- "apps/server/src/services/document-workflow/agentWorkflow.ts::scopedMaterialRootsOf",
107
- "apps/server/src/services/document-workflow/authoritativeValues.ts::attributeValueShapeMismatch",
108
- "apps/server/src/services/document-workflow/authoritativeValues.ts::cleanValueForm",
109
- "apps/server/src/services/document-workflow/authoritativeValues.ts::stripTrailingOcrGarbage",
110
- "apps/server/src/services/document-workflow/constructionBidStructure.ts::representativeTitleForPattern",
111
- "apps/server/src/services/document-workflow/constructionProcessKnowledge.ts::STANDARDS_PENDING_CALIBRATION",
112
- "apps/server/src/services/document-workflow/costModel.ts::parsePriceOverride",
113
- "apps/server/src/services/document-workflow/costModel.ts::priceEntryFor",
114
- "apps/server/src/services/document-workflow/costModel.ts::priceKeyOf",
115
- "apps/server/src/services/document-workflow/costModel.ts::priceTable",
116
- "apps/server/src/services/document-workflow/defectHeatmap.ts::REPAIR_ATTRIBUTION_LABELS",
117
- "apps/server/src/services/document-workflow/defectHeatmap.ts::REPAIR_FEEDBACK_STUBBORN_THRESHOLD",
118
- "apps/server/src/services/document-workflow/documentInstruction.ts::INSTRUCTION_KINDS",
119
- "apps/server/src/services/document-workflow/documentInstruction.ts::INSTRUCTION_KIND_LABELS",
120
- "apps/server/src/services/document-workflow/documentInstruction.ts::classifyInstructionByRules",
121
- "apps/server/src/services/document-workflow/documentInstruction.ts::extractInstructionTarget",
122
- "apps/server/src/services/document-workflow/envRegistry.ts::AGENT_ENV_REGISTRY",
123
- "apps/server/src/services/document-workflow/envRegistry.ts::APP_ENV_PREFIXES",
124
- "apps/server/src/services/document-workflow/envRegistry.ts::APP_ENV_REGISTRY",
125
- "apps/server/src/services/document-workflow/envRegistry.ts::CUSTOMIZE_ENV_REGISTRY",
126
- "apps/server/src/services/document-workflow/factGovernance.ts::SUPPORT_FORM_LEXICON",
127
- "apps/server/src/services/document-workflow/factGovernance.ts::applyScopeOverridesToText",
128
- "apps/server/src/services/document-workflow/factGovernance.ts::collectMarkdownTableCandidates",
129
- "apps/server/src/services/document-workflow/factGovernance.ts::collectStructuredFactCandidates",
130
- "apps/server/src/services/document-workflow/factGovernance.ts::numericScopeResolutions",
131
- "apps/server/src/services/document-workflow/factGovernance.ts::resolveCanonicalFacts",
132
- "apps/server/src/services/document-workflow/factGovernance.ts::unitReForKind",
133
- "apps/server/src/services/document-workflow/factsModel.ts::sanitizeFactPool",
134
- "apps/server/src/services/document-workflow/hazardBinding.ts::billOfQuantitiesCorpus",
135
- "apps/server/src/services/document-workflow/hazardBinding.ts::extractHazardParameters",
136
- "apps/server/src/services/document-workflow/hazardBinding.ts::normalizeParameterValue",
137
- "apps/server/src/services/document-workflow/integratedBlueprint/parse.ts::isStructuralOnlyBillFile",
138
- "apps/server/src/services/document-workflow/llmCassette.ts::CASSETTE_PROMPT_VERSION",
139
- "apps/server/src/services/document-workflow/llmCassette.ts::CassetteMissError",
140
- "apps/server/src/services/document-workflow/llmCassette.ts::cassetteDir",
141
- "apps/server/src/services/document-workflow/llmCassette.ts::cassetteMode",
142
- "apps/server/src/services/document-workflow/llmClient.ts::judgeThinkingEnabled",
143
- "apps/server/src/services/document-workflow/planningArtifactCache.ts::PLANNING_ARTIFACT_CACHE_VERSION",
144
- "apps/server/src/services/document-workflow/poolNoise.ts::penaltyTableHitCount",
145
- "apps/server/src/services/document-workflow/promptRuleExtraction.ts::dedupePlannedSections",
146
- "apps/server/src/services/document-workflow/promptRuleExtraction.ts::extractOutlineHeadings",
147
- "apps/server/src/services/document-workflow/resumeLedger.ts::isManualIssue",
148
- "apps/server/src/services/document-workflow/structureIntegrityRules.ts::tailOrphanBlockIssues",
149
- "apps/server/src/services/document-workflow/textMatch.ts::chineseTokenMatchScore",
150
- "apps/server/src/services/document-workflow/textMatch.ts::chineseTokens",
151
- "apps/server/src/services/knowledge/kbExportService.ts::txtEntryNameFor",
152
- "apps/server/src/services/knowledge/kbIndexWorkerService.ts::enqueueKnowledgeIndex",
153
- "apps/server/src/services/knowledge/kbService.ts::getKnownProjectRoots",
154
- "apps/server/src/services/skills/blockKnowledge.ts::selectBlockCards",
155
- "apps/server/src/services/skills/match.ts::assertFocusRuleMapping",
156
- "apps/server/src/services/skills/match.ts::chapterDomainPatterns",
157
- "apps/server/src/services/skills/schema.ts::MAX_SECTION_REGEX_LENGTH",
158
- "apps/server/src/services/skills/store.ts::applySkillOverride",
159
- "apps/server/src/services/skills/store.ts::skillFilePath",
160
- "apps/server/src/services/skills/store.ts::skillsDir",
161
- "packages/knowledge/src/core/knowledge-base-manager.ts::diversifiedRerankCandidates",
162
- "packages/knowledge/src/extraction/content-extractor.ts::extractTopLevelOoxmlElements",
163
- "packages/knowledge/src/extraction/content-extractor.ts::isPdfWrappedClauseLike",
164
- "packages/knowledge/src/extraction/content-extractor.ts::ocrPageCacheKeyOf",
165
- "packages/knowledge/src/extraction/content-extractor.ts::reorderPdfRowsAroundWrappedParagraphs",
166
- "packages/knowledge/src/extraction/ocr-providers.ts::OCR_NEIGHBOR_CONFUSION_LOW_CONFIDENCE",
167
- "packages/knowledge/src/extraction/ocr-providers.ts::PaddleOcrJsProvider",
168
- "packages/knowledge/src/extraction/ocr-providers.ts::TesseractJsProvider",
169
- "packages/knowledge/src/extraction/ocr-providers.ts::gateOcrNeighborClassConfusions",
170
- "packages/knowledge/src/extraction/ocr-providers.ts::resolveOcrSessionThreads",
171
- "packages/knowledge/src/extraction/ocr-providers.ts::withOcrSessionThreads",
172
- "packages/knowledge/src/extraction/ocr-tiling.ts::assembleTiledText",
173
- "packages/knowledge/src/extraction/ocr-tiling.ts::cropRgbTile",
174
- "packages/knowledge/src/extraction/ocr-tiling.ts::filterTiledRegions",
175
- "packages/knowledge/src/extraction/ocr-tiling.ts::mergeTileRegions",
176
- "packages/knowledge/src/extraction/office-embedded-images.ts::MIN_EMBEDDED_IMAGE_BYTES",
177
- "packages/knowledge/src/extraction/office-embedded-images.ts::carveImageCandidates",
178
- "packages/knowledge/src/extraction/office-embedded-images.ts::carveJpeg",
179
- "packages/knowledge/src/extraction/office-embedded-images.ts::carvePng",
180
- "packages/knowledge/src/extraction/paddle-model-select.ts::MIN_ONNX_BYTES",
181
- "packages/knowledge/src/extraction/paddle-model-select.ts::PADDLE_MODEL_FILES",
182
- "packages/knowledge/src/extraction/paddle-model-select.ts::PADDLE_MODEL_PRESET"
183
- ],
184
- "不可判(星号再导出)": []
185
- },
186
- "retirementUpdatedAt": "2026-10-13",
187
- "retirementUpdate": "Removed only the actually deleted CAD collapseAdjacentRepeatedLines export; removed count matches retained roster. No new allowances, baseline regeneration, or relaxation of zero-dead-symbol cap.",
188
- "retirementCountReconciledAt": "2026-10-10T01:23:32.058Z",
189
- "retirementCountReconciliation": "Reconciles 296 count to exact existing 294-row test-only export roster after prior two retirements; no rows/allowances added and zero-dead-symbol hard cap retained."
190
- }
@@ -1,287 +0,0 @@
1
- #!/usr/bin/env node
2
- /** 文本引用候选扫描,覆盖源码、测试和脚本,供实际调用闭包审查使用。
3
- * 新增零引用导出、未处置的仅测试引用与星号转导出候选均阻断;其他增量显式报告。
4
- * 转导出、动态派发、类型引用与副作用需独立核查,不能据文本数量删除实际入口。
5
- * 基线只收紧已退休条目;登记仅允许有具体用途的观察/测试面,不能掩盖未接入业务。
6
- * 用法:node apps/server/scripts/half-built-scan.mjs --full --gate --baseline <file>
7
- */
8
- import fs from 'node:fs';
9
- import path from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
-
12
- const HERE = path.dirname(fileURLToPath(import.meta.url));
13
- const ROOT = path.resolve(HERE, '../../..'); // 仓库根
14
- const DEFAULT_DIRS = ['apps/server/src', 'packages'];
15
- const ARGS = process.argv.slice(2);
16
- const FULL = ARGS.includes('--full');
17
- const VALUE_FLAGS = new Set(['--baseline', '--write-baseline']);
18
- const POSITIONAL = [];
19
- for (let i = 0; i < ARGS.length; i++) {
20
- if (VALUE_FLAGS.has(ARGS[i])) {
21
- if (ARGS[i + 1] !== undefined && !ARGS[i + 1].startsWith('--')) i++;
22
- continue;
23
- }
24
- if (ARGS[i].startsWith('--')) continue;
25
- POSITIONAL.push(ARGS[i]);
26
- }
27
- const DIRS = POSITIONAL.length > 0 ? POSITIONAL : DEFAULT_DIRS;
28
-
29
- const GATE = ARGS.includes('--gate');
30
- const flagValue = name => {
31
- const i = ARGS.indexOf(name);
32
- return i >= 0 ? ARGS[i + 1] : undefined;
33
- };
34
- const BASELINE_ARG = flagValue('--baseline');
35
- const WRITE_BASELINE_ARG = flagValue('--write-baseline');
36
- /** 默认基线路径:与脚本同目录(CI 与本地同一条路径) */
37
- const DEFAULT_BASELINE = path.join(HERE, 'half-built-scan.baseline.json');
38
-
39
- const TEST_HINT = /(^|\/)(test|tests|__tests__|__mocks__)\//;
40
- /** 报告范围:只报 `.ts`/`.tsx` 的导出符号 */
41
- const isSource = file => /\.(ts|tsx)$/.test(file) && !/\.d\.ts$/.test(file);
42
- const isPoolFile = file => /\.(ts|tsx|cjs|mjs|js)$/.test(file) && !/\.d\.ts$/.test(file);
43
- const SKIP_DIRS = new Set(['node_modules', 'dist', '.next', 'coverage']);
44
-
45
- function walk(dir, out = []) {
46
- if (!fs.existsSync(dir)) return out;
47
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
48
- const full = path.join(dir, entry.name);
49
- if (entry.isDirectory()) {
50
- if (SKIP_DIRS.has(entry.name)) continue;
51
- walk(full, out);
52
- } else if (isPoolFile(full)) out.push(full);
53
- }
54
- return out;
55
- }
56
-
57
- const REFERENCE_DIRS = ['apps/server/src', 'apps/server/test', 'apps/server/scripts', 'packages', 'scripts'];
58
-
59
- function starReExportTargets() {
60
- const targets = new Set();
61
- for (const file of allFiles) {
62
- const text = texts.get(file) ?? '';
63
- for (const m of text.matchAll(/^\s*export \*\s*(?:as\s+\w+\s*)?from\s*'(\.[^']+)'/gm)) {
64
- const base = path.resolve(path.dirname(file), m[1]);
65
- for (const cand of [`${base}.ts`, `${base}.tsx`, path.join(base, 'index.ts')]) {
66
- if (fs.existsSync(cand)) { targets.add(cand); break; }
67
- }
68
- }
69
- }
70
- return targets;
71
- }
72
- /**
73
- * ⚠️ **不把 `docs/` 放进引用池**:文档是散文,而且本仓的文档里大量是**缺口清单**
74
- * ("这条写好没接线")——把清单算成"有引用",会让真死代码因为它被记过一笔而永远不被清理。
75
- * 文档命中的符号由**人**处置(要么接上、要么连同条目一起删),不交给扫描器自动判。
76
- * 另一个已知盲区:`.cjs`/`.mjs`/`.js` 消费者(`isSource` 只认 .ts/.tsx)——
77
- * 实测 `searchKb` 只被 `scripts/upload-matrix.cjs` 用着,曾因此被误判为死代码。
78
- */
79
- const ALL_DIRS = REFERENCE_DIRS;
80
- const SELF = fileURLToPath(import.meta.url);
81
- const allFiles = ALL_DIRS.flatMap(dir => walk(path.resolve(ROOT, dir)))
82
- .filter(file => path.resolve(file) !== path.resolve(SELF));
83
- const texts = new Map(allFiles.map(f => [f, fs.readFileSync(f, 'utf8')]));
84
- const prod = allFiles.filter(f => !TEST_HINT.test(f));
85
- const tests = allFiles.filter(f => TEST_HINT.test(f));
86
- const scopeRoots = DIRS.map(dir => path.resolve(ROOT, dir));
87
- const inScope = file => scopeRoots.some(root => file.startsWith(root + path.sep) || file === root);
88
- /** 被 `export *` 再导出的文件(其符号名不会被任何地方提到 ⇒ 不可判,见上文说明) */
89
- const STAR_REEXPORTED = starReExportTargets();
90
-
91
- const EXPORT_PATTERNS = [
92
- [/^export\s+(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/gm, 'fn'],
93
- [/^export\s+class\s+([A-Za-z_$][\w$]*)/gm, 'class'],
94
- [/^export\s+(?:const|let|var)\s+([A-Za-z_$][\w$]*)/gm, 'const'],
95
- ];
96
-
97
- function countRefs(name, pool, selfFile, subtractDeclaration) {
98
- const re = new RegExp(`\\b${name.replace(/\$/g, '\\$')}\\b`, 'g');
99
- let total = 0;
100
- for (const file of pool) {
101
- let hits = (texts.get(file).match(re) || []).length;
102
- if (subtractDeclaration && file === selfFile) {
103
- const decl = new RegExp(`^export\\s+(async\\s+)?(function|class|const|let|var)\\s+${name.replace(/\$/g, '\\$')}\\b`, 'gm');
104
- hits -= (texts.get(file).match(decl) || []).length;
105
- }
106
- total += Math.max(0, hits);
107
- }
108
- return total;
109
- }
110
-
111
- const rows = [];
112
- for (const file of prod) {
113
- if (!inScope(file)) continue; // 报告范围 = 参数;引用池 = 全仓
114
- const rel = path.relative(ROOT, file);
115
- const text = texts.get(file);
116
- for (const [pattern, kind] of EXPORT_PATTERNS) {
117
- for (const match of text.matchAll(pattern)) {
118
- const name = match[1];
119
- if (name.length < 4) continue;
120
- const inFile = countRefs(name, [file], file, true);
121
- const otherProd = countRefs(name, prod.filter(f => f !== file), file, false);
122
- const testRefs = countRefs(name, tests, file, false);
123
- if (otherProd > 0) continue;
124
- rows.push({
125
- rel, name, kind, inFile, testRefs,
126
- verdict: STAR_REEXPORTED.has(file) ? '不可判(星号再导出)'
127
- : inFile === 0 && testRefs === 0 ? '谁都不用'
128
- : inFile === 0 && testRefs > 0 ? '半成品嫌疑'
129
- : '封装暴露(只导出给测试)',
130
- });
131
- }
132
- }
133
- }
134
-
135
- const byVerdict = verdict => rows.filter(r => r.verdict === verdict);
136
- const suspect = byVerdict('半成品嫌疑');
137
- const unused = byVerdict('谁都不用');
138
- const undecidable = byVerdict('不可判(星号再导出)');
139
-
140
- const ALLOW_PATH = path.join(HERE, 'half-built-scan.allow.json');
141
- const allowed = (() => {
142
- try {
143
- const file = JSON.parse(fs.readFileSync(ALLOW_PATH, 'utf8'));
144
- const map = new Map();
145
- for (const entry of file.entries || []) map.set(`${entry.file}::${entry.symbol}`, entry.reason);
146
- return map;
147
- } catch {
148
- return new Map();
149
- }
150
- })();
151
- const registered = suspect.filter(row => allowed.has(`${row.rel}::${row.name}`));
152
- const unregistered = suspect.filter(row => !allowed.has(`${row.rel}::${row.name}`));
153
- const undecidableRegistered = undecidable.filter(row => allowed.has(`${row.rel}::${row.name}`));
154
- const undecidableUnregistered = undecidable.filter(row => !allowed.has(`${row.rel}::${row.name}`));
155
-
156
- console.log('════════ 半成品扫描 ════════');
157
- console.log(`扫描范围:${DIRS.join(', ')}(引用池 = 全仓 ${prod.length} 个生产文件 / ${tests.length} 个测试文件)`);
158
- console.log(`导出符号在他处生产零引用:${rows.length}`);
159
- console.log(` · 半成品嫌疑(仅测试引用) ${suspect.length}(**未登记 ${unregistered.length}** / 已登记 ${registered.length})`);
160
- console.log(` · 谁都不用(含自身文件) ${unused.length}`);
161
- console.log(` · 封装暴露(本文件内自用) ${byVerdict('封装暴露(只导出给测试)').length}`);
162
- console.log(` · 不可判(星号再导出) ${undecidable.length}(**未登记 ${undecidableUnregistered.length}** / 已登记 ${undecidableRegistered.length})`);
163
-
164
- if (ARGS.includes('--csv')) {
165
- console.log('file,name,kind,inFile,testRefs,verdict');
166
- for (const row of rows) {
167
- console.log([row.rel, row.name, row.kind, row.inFile, row.testRefs, row.verdict].join(','));
168
- }
169
- process.exit(0);
170
- }
171
-
172
- const print = (title, list, limit = 40) => {
173
- if (list.length === 0) return;
174
- console.log(`\n── ${title}(${list.length} 条${FULL ? '' : `,列前 ${Math.min(limit, list.length)}`})`);
175
- for (const row of (FULL ? list : list.slice(0, limit))) {
176
- console.log(` ${row.rel} :: ${row.name}${row.testRefs ? ` (测试引用 ${row.testRefs})` : ''}`);
177
- }
178
- };
179
- print('半成品嫌疑 未登记(**要当场判**:接线 / 删除 / 写进登记表并给理由)', unregistered);
180
- print('半成品嫌疑 已登记(测试/观察/登记面,理由见 half-built-scan.allow.json)', registered);
181
- if (registered.length > 0 && FULL) {
182
- for (const row of registered) console.log(` · ${row.rel} :: ${row.name} —— ${allowed.get(`${row.rel}::${row.name}`)}`);
183
- }
184
- print('谁都不用', unused, 30);
185
- print('不可判(星号再导出:符号可达但没有名字被提到,本脚本判不了)', undecidable, 10);
186
-
187
- console.log('\n当前方案见 docs/project-improvements/README.md;实际入口、动态注册和公开接口须独立核查。');
188
- console.log('本扫描仅提供文本引用候选;转导出、动态入口、内部可达依赖和副作用需按实际调用另行核查。');
189
-
190
- /**
191
- * 口径全文在文件头「## 门禁口径(G2)」一节。这里只写实现锚点:
192
- * - **四类计数 + 四类名录**都进基线(名录让"新增了什么"可以逐条打出来,而不是只给一个差值);
193
- * - **只有「谁都不用」红**;其余三类超基线只 `⚠`(理由:366 条"封装暴露"是刻意形态,
194
- * 判红 = 每加一个测试用导出就挂 CI = 门禁当天就该被绕过);
195
- * - 基线文件缺失时「谁都不用」按 **0** 判(零容忍),其余三类不做棘轮比较(没有基线就没有差值)。
196
- */
197
- const VERDICT_KEYS = ['谁都不用', '半成品嫌疑', '封装暴露(只导出给测试)', '不可判(星号再导出)'];
198
- const GATED_KEY = '谁都不用';
199
- const counts = Object.fromEntries(VERDICT_KEYS.map(key => [key, rows.filter(row => row.verdict === key).length]));
200
- const roster = Object.fromEntries(VERDICT_KEYS.map(key => [
201
- key,
202
- rows.filter(row => row.verdict === key).map(row => `${row.rel}::${row.name}`).sort(),
203
- ]));
204
-
205
- /** 基线文件路径:`--baseline <file>` 显式给的优先;`--write-baseline [file]` 同理 */
206
- const writeBaselineTarget = WRITE_BASELINE_ARG !== undefined && !WRITE_BASELINE_ARG.startsWith('--')
207
- ? WRITE_BASELINE_ARG
208
- : DEFAULT_BASELINE;
209
- const baselinePath = BASELINE_ARG ? path.resolve(process.cwd(), BASELINE_ARG) : DEFAULT_BASELINE;
210
-
211
- if (ARGS.includes('--write-baseline')) {
212
- const target = path.resolve(process.cwd(), writeBaselineTarget);
213
- fs.writeFileSync(target, `${JSON.stringify({
214
- note: '半成品扫描门禁基线(棘轮:数不许变多)。重新生成:node apps/server/scripts/half-built-scan.mjs --write-baseline',
215
- generatedAt: new Date().toISOString().slice(0, 10),
216
- scope: DIRS,
217
- counts,
218
- roster,
219
- }, null, 2)}\n`, 'utf8');
220
- console.log(`\n★ 已写入基线:${path.relative(ROOT, target)}(谁都不用 ${counts[GATED_KEY]} 条)`);
221
- process.exit(0);
222
- }
223
-
224
- if (GATE) {
225
- let baseline = { counts: {}, roster: {} };
226
- let baselineNote = '未提供(「谁都不用」按 0 零容忍判;其余三类不做棘轮比较)';
227
- if (fs.existsSync(baselinePath)) {
228
- baseline = JSON.parse(fs.readFileSync(baselinePath, 'utf8'));
229
- baselineNote = `${path.relative(ROOT, baselinePath)}(生成于 ${baseline.generatedAt ?? '未知'})`;
230
- } else if (BASELINE_ARG) {
231
- // 显式给了路径却不存在 = 大概率是路径写错。**不静默降级**:报出来,免得基线悄悄失效。
232
- console.log(`\n⚠ 基线文件不存在:${baselinePath}(按「谁都不用 = 0」零容忍口径继续)`);
233
- }
234
-
235
- const baselineRoster = key => new Set(Array.isArray(baseline.roster?.[key]) ? baseline.roster[key] : []);
236
- const currentRoster = key => new Set(roster[key]);
237
- const grew = key => [...currentRoster(key)].filter(id => !baselineRoster(key).has(id));
238
- const shrank = key => [...baselineRoster(key)].filter(id => !currentRoster(key).has(id));
239
-
240
- console.log('\n════════ 门禁判定(--gate)════════');
241
- console.log(`基线:${baselineNote}`);
242
- const gatedBaseline = typeof baseline.counts?.[GATED_KEY] === 'number' ? baseline.counts[GATED_KEY] : 0;
243
- console.log(`【硬红】${GATED_KEY}:${counts[GATED_KEY]} 条(基线允许 ≤ ${gatedBaseline})`);
244
- for (const key of VERDICT_KEYS) {
245
- if (key === GATED_KEY) continue;
246
- const base = baseline.counts?.[key];
247
- console.log(`【只报】${key}:${counts[key]} 条${typeof base === 'number' ? `(基线 ${base})` : ''}`);
248
- }
249
-
250
- const newDead = grew(GATED_KEY);
251
- const vanishedDead = shrank(GATED_KEY);
252
- const baselineScope = Array.isArray(baseline.scope) ? baseline.scope.join(',') : '';
253
- const scopeMismatch = baselineScope !== '' && baselineScope !== DIRS.join(',');
254
- let failed = scopeMismatch || counts[GATED_KEY] > gatedBaseline || newDead.length > 0 || unregistered.length > 0 || undecidableUnregistered.length > 0;
255
- if (scopeMismatch) {
256
- console.log(`\n❌ 门禁红:扫描范围与基线不一致,计数不可比`);
257
- console.log(` 基线:${baselineScope}`);
258
- console.log(` 本次:${DIRS.join(',')}`);
259
- console.log(' 要门禁局部范围,请先用同一范围重跑 --write-baseline 另存一份基线。');
260
- }
261
-
262
- for (const key of VERDICT_KEYS) {
263
- if (key === GATED_KEY) continue;
264
- const delta = grew(key);
265
- if (delta.length > 0) {
266
- console.log(`⚠ 棘轮超基线(不红):${key} 比基线多 ${delta.length} 条 —— 新增项:`);
267
- for (const id of delta) console.log(` ${id}`);
268
- console.log(' (这一类**刻意不红**:它含大量"只导出给测试"的合法形态,判红等于焊死门禁。见文件头「门禁口径」)');
269
- }
270
- }
271
-
272
- if (newDead.length > 0) {
273
- console.log(`\n❌ 门禁红:新增 ${newDead.length} 个「谁都不用」的**真死符号**(生产零调用 ∧ 测试零引用 ∧ 本文件零自用)`);
274
- for (const id of newDead) console.log(` ${id}`);
275
- console.log(' 处置二选一(不许留着):接到生产调用点,或按 P5 纪律连同它的路径一起删除。');
276
- } else if (counts[GATED_KEY] > gatedBaseline) {
277
- console.log(`\n❌ 门禁红:${GATED_KEY} ${counts[GATED_KEY]} 条 > 基线允许的 ${gatedBaseline} 条(名单与基线一致,是基线本身过宽)`);
278
- }
279
- if (vanishedDead.length > 0) {
280
- console.log(`\n★ 棘轮可收紧:${GATED_KEY} 比基线少 ${vanishedDead.length} 条 —— 请重跑 --write-baseline 把它固化(棘轮只许往下走)`);
281
- for (const id of vanishedDead) console.log(` ${id}`);
282
- }
283
- if (!failed && newDead.length === 0) {
284
- console.log(`\n✅ 门禁通过:${GATED_KEY} ${counts[GATED_KEY]} 条,无新增真死符号。`);
285
- }
286
- process.exit(failed ? 1 : 0);
287
- }