@customize-agent/server 4.59.2 → 4.60.0

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 (235) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +52 -31
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +5 -2
  5. package/.next/routes-manifest.json +22 -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/7848.js +141 -0
  18. package/.next/server/chunks/8204.js +1 -1
  19. package/.next/server/chunks/9666.js +141 -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/source-preview.js +1 -0
  101. package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -0
  102. package/.next/server/pages/api/kb/files.js +2 -6
  103. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  104. package/.next/server/pages/api/kb/ignore.js +1 -4
  105. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  106. package/.next/server/pages/api/kb/material-groups.js +1 -2
  107. package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
  108. package/.next/server/pages/api/kb/operations.js +2 -5
  109. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  110. package/.next/server/pages/api/kb/reindex.js +2 -1
  111. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  112. package/.next/server/pages/api/kb/stats.js +1 -4
  113. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  114. package/.next/server/pages/api/kb/tags.js +1 -4
  115. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  116. package/.next/server/pages/api/kb/upload/complete.js +2 -1
  117. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  118. package/.next/server/pages/api/kb/upload.js +2 -1
  119. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  120. package/.next/server/pages/api/prompt/chat.js +5 -11
  121. package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
  122. package/.next/server/pages/api/prompt.js +2 -1
  123. package/.next/server/pages/api/prompt.js.nft.json +1 -1
  124. package/.next/server/pages/api/skills/[id].js +1 -1
  125. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  126. package/.next/server/pages/api/skills/validate.js +1 -1
  127. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  128. package/.next/server/pages/api/skills.js +1 -1
  129. package/.next/server/pages/api/skills.js.nft.json +1 -1
  130. package/.next/server/pages/api/system/data-health.js +2 -2
  131. package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
  132. package/.next/server/pages/api/system/logs.js +2 -2
  133. package/.next/server/pages/api/system/logs.js.nft.json +1 -1
  134. package/.next/server/pages/api/system/reset.js +1 -0
  135. package/.next/server/pages/api/{kb/intelligence.js.nft.json → system/reset.js.nft.json} +1 -1
  136. package/.next/server/pages/api/system/stats.js +2 -1
  137. package/.next/server/pages/api/system/stats.js.nft.json +1 -1
  138. package/.next/server/pages/canvas/[id].html +1 -1
  139. package/.next/server/pages/canvas.html +1 -1
  140. package/.next/server/pages/documents.html +1 -1
  141. package/.next/server/pages/guide.html +1 -1
  142. package/.next/server/pages/index.html +1 -1
  143. package/.next/server/pages/knowledge/file-detail.html +1 -1
  144. package/.next/server/pages/knowledge/files.html +1 -1
  145. package/.next/server/pages/knowledge/manage.html +1 -1
  146. package/.next/server/pages/knowledge/source-preview.html +1 -0
  147. package/.next/server/pages/knowledge/source-preview.js.nft.json +1 -0
  148. package/.next/server/pages/knowledge.html +1 -1
  149. package/.next/server/pages/models.html +1 -1
  150. package/.next/server/pages/overview.html +1 -1
  151. package/.next/server/pages/prompt.html +1 -1
  152. package/.next/server/pages/settings.html +1 -1
  153. package/.next/server/pages/skills.html +1 -1
  154. package/.next/server/pages/system/logs.html +1 -1
  155. package/.next/server/pages-manifest.json +36 -37
  156. package/.next/static/77d815e00c04639e13f00085615df788b0e214c81a14c8f0ba89cbbe491ff7c3/_buildManifest.js +1 -0
  157. package/.next/static/chunks/278-31fbe7e1b733a9b7.js +1 -0
  158. package/.next/static/chunks/{426-90638907336adcb8.js → 426-22c4cedb04b0d45d.js} +1 -1
  159. package/.next/static/chunks/511-75b881093a3e908b.js +1 -0
  160. package/.next/static/chunks/530-d9f0418ec7ab040f.js +1 -0
  161. package/.next/static/chunks/665-9607db8f8b43e52e.js +1 -0
  162. package/.next/static/chunks/795-48065c56c3b80339.js +1 -0
  163. package/.next/static/chunks/823-ff35afb174f7998b.js +1 -0
  164. package/.next/static/chunks/835-d29f4cc7a3679606.js +1 -0
  165. package/.next/static/chunks/864-b06700e1a4e573f2.js +6 -0
  166. package/.next/static/chunks/873-16d052cdd3768758.js +1 -0
  167. package/.next/static/chunks/964-7e9fe2d80a53aeee.js +78 -0
  168. package/.next/static/chunks/992-8032f477230baaaf.js +1 -0
  169. package/.next/static/chunks/pages/{_app-c560816f0a8a0815.js → _app-c11b5e8072f49bcc.js} +20 -20
  170. package/.next/static/chunks/pages/canvas/[id]-37bee3f7b816ed18.js +1 -0
  171. package/.next/static/chunks/pages/canvas-97971ae159337676.js +1 -0
  172. package/.next/static/chunks/pages/guide-a8eecc6c02b5bb9c.js +1 -0
  173. package/.next/static/chunks/pages/knowledge/file-detail-f89e6044f752277c.js +1 -0
  174. package/.next/static/chunks/pages/knowledge/source-preview-4a303fadb123430a.js +1 -0
  175. package/.next/static/chunks/pages/knowledge-a65ec687334ffed0.js +1 -0
  176. package/.next/static/chunks/pages/models-3e486e49cca91e5a.js +1 -0
  177. package/.next/static/chunks/pages/prompt-b8af2cef904e3e19.js +1 -0
  178. package/.next/static/chunks/pages/settings-81dffd92939c1d36.js +1 -0
  179. package/.next/static/chunks/pages/skills-77ba363270239bbf.js +1 -0
  180. package/.next/static/chunks/pages/system/logs-1f54b6c8791daa77.js +1 -0
  181. package/.next/static/css/1a59bfb0aa677e69.css +1 -0
  182. package/README.md +48 -45
  183. package/messages/en-US.json +76 -65
  184. package/messages/zh-CN.json +76 -65
  185. package/next.config.ts +5 -0
  186. package/package.json +7 -9
  187. package/public/fonts/NotoSansCJKsc-Regular.otf +0 -0
  188. package/public/fonts/OFL-Noto-CJK.txt +142 -0
  189. package/public/fonts/font-manifest.json +8 -0
  190. package/scripts/build-identity.cjs +67 -0
  191. package/scripts/capture-baseline.mjs +100 -290
  192. package/scripts/check-workspace-deps.cjs +141 -0
  193. package/scripts/half-built-scan.allow.json +142 -0
  194. package/scripts/half-built-scan.baseline.json +206 -0
  195. package/scripts/half-built-scan.mjs +275 -55
  196. package/scripts/kb-fingerprint-worker.cjs +28 -0
  197. package/scripts/kb-index-worker.cjs +27 -20
  198. package/scripts/kb-worker-ipc.cjs +34 -0
  199. package/scripts/purge-next-artifacts.cjs +70 -0
  200. package/scripts/verify-next-static.js +2 -2
  201. package/.next/server/chunks/299.js +0 -50
  202. package/.next/server/chunks/4435.js +0 -350
  203. package/.next/server/chunks/6087.js +0 -3
  204. package/.next/server/pages/api/jobs.js +0 -5
  205. package/.next/server/pages/api/jobs.js.nft.json +0 -1
  206. package/.next/server/pages/api/kb/evaluate.js +0 -10
  207. package/.next/server/pages/api/kb/evaluate.js.nft.json +0 -1
  208. package/.next/server/pages/api/kb/files/tree.js +0 -5
  209. package/.next/server/pages/api/kb/files/tree.js.nft.json +0 -1
  210. package/.next/server/pages/api/kb/intelligence.js +0 -1
  211. package/.next/server/pages/api/kb/search.js +0 -4
  212. package/.next/server/pages/api/kb/search.js.nft.json +0 -1
  213. package/.next/server/pages/api/kb/upload/progress.js +0 -5
  214. package/.next/server/pages/api/kb/upload/progress.js.nft.json +0 -1
  215. package/.next/static/2MjosIoMmZUcFnY_P02ZD/_buildManifest.js +0 -1
  216. package/.next/static/chunks/243-03eba51d5d737e98.js +0 -1
  217. package/.next/static/chunks/289-136ebb30e0f6723a.js +0 -78
  218. package/.next/static/chunks/422-46f07037c58d2309.js +0 -1
  219. package/.next/static/chunks/445-d12731f107978b10.js +0 -6
  220. package/.next/static/chunks/506-93f730bc149d0dce.js +0 -1
  221. package/.next/static/chunks/530-df2ce692cf0fa512.js +0 -1
  222. package/.next/static/chunks/795-81a3e3973fc43791.js +0 -1
  223. package/.next/static/chunks/850-0f48354694fc6b3e.js +0 -1
  224. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +0 -1
  225. package/.next/static/chunks/pages/canvas-323d44fe56d685a7.js +0 -1
  226. package/.next/static/chunks/pages/guide-7367305082617e3c.js +0 -1
  227. package/.next/static/chunks/pages/knowledge/file-detail-aee7c15541d1d130.js +0 -1
  228. package/.next/static/chunks/pages/knowledge-ca8ad5501faed486.js +0 -1
  229. package/.next/static/chunks/pages/models-8b96ba85131d5408.js +0 -1
  230. package/.next/static/chunks/pages/prompt-dd9a9f9105216e2b.js +0 -1
  231. package/.next/static/chunks/pages/settings-0a7709bf039a2a4d.js +0 -1
  232. package/.next/static/chunks/pages/skills-3d77213c3e9ef0b5.js +0 -1
  233. package/.next/static/chunks/pages/system/logs-9deb1217739490af.js +0 -1
  234. package/.next/static/css/85c434f8fd3a17ae.css +0 -1
  235. /package/.next/static/{2MjosIoMmZUcFnY_P02ZD → 77d815e00c04639e13f00085615df788b0e214c81a14c8f0ba89cbbe491ff7c3}/_ssgManifest.js +0 -0
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 工作区依赖产物新鲜度闸(挂在 apps/server 的 `prebuild`)。
4
+ *
5
+ * ## 为什么需要
6
+ * `apps/server` 的 build 只跑 `next build`,**不会**重建 `packages/*`;而 `next.config.ts`
7
+ * 把 `@customize-agent/{knowledge,llm,runtime}` 列为 `serverExternalPackages` —— 运行时直接
8
+ * require 各包的 `dist`(各包 package.json 的 main/exports 都指向 dist)。于是「在 apps/server
9
+ * 里 build」会把旧 dist 静默编进产物:改了 packages 源码却看不到效果,且不报错。
10
+ * 依赖包先建只由仓库根目录 `pnpm build` 的 turbo `^build` 保证。
11
+ *
12
+ * ## 口径
13
+ * 逐包比较 `src/**` 与 `tsconfig.json` 的最新 mtime 和 `dist/**` 的最新 mtime:
14
+ * src 侧更新 ⇒ 落后;`dist/` 不存在 ⇒ 未构建。两种情况直接放行:
15
+ * - turbo 任务内(`TURBO_HASH` / `TURBO_INVOCATION_DIR` 存在):`^build` 已保证依赖先建;
16
+ * - 非 monorepo 布局(同级没有 packages/,如已发布的 npm 包)。
17
+ * mtime 是粗口径:`git checkout` 触碰过源码也会判落后——代价只是提示去根目录 build
18
+ * (turbo 有缓存,通常几秒),比「静默用旧 dist」安全。
19
+ *
20
+ * 用法:node scripts/check-workspace-deps.cjs [packagesDir]
21
+ * 退出码:0=新鲜/放行;1=落后。
22
+ */
23
+ const fs = require('fs');
24
+ const path = require('path');
25
+
26
+ const serverRoot = path.resolve(__dirname, '..');
27
+ const defaultPackagesDir = path.resolve(serverRoot, '..', '..', 'packages');
28
+
29
+ /** 依赖闭包(含编译期依赖 types):其中任何一个包改动,server 产物都可能过期 */
30
+ const WORKSPACE_DEPS = [
31
+ '@customize-agent/types',
32
+ '@customize-agent/llm',
33
+ '@customize-agent/runtime',
34
+ '@customize-agent/knowledge',
35
+ ];
36
+
37
+ function newestFileMtime(dir, found = { mtime: 0, file: '' }) {
38
+ let entries;
39
+ try {
40
+ entries = fs.readdirSync(dir, { withFileTypes: true });
41
+ } catch {
42
+ return found;
43
+ }
44
+ for (const entry of entries) {
45
+ const full = path.join(dir, entry.name);
46
+ if (entry.isDirectory()) newestFileMtime(full, found);
47
+ else if (entry.isFile()) {
48
+ const mtime = fs.statSync(full).mtimeMs;
49
+ if (mtime > found.mtime) {
50
+ found.mtime = mtime;
51
+ found.file = full;
52
+ }
53
+ }
54
+ }
55
+ return found;
56
+ }
57
+
58
+ function inspectPackage(packagesDir, name) {
59
+ const dir = path.join(packagesDir, name.slice('@customize-agent/'.length));
60
+ if (!fs.existsSync(path.join(dir, 'package.json'))) return null; // 非工作区成员 → 跳过
61
+
62
+ const src = newestFileMtime(path.join(dir, 'src'));
63
+ const tsconfig = path.join(dir, 'tsconfig.json');
64
+ if (fs.existsSync(tsconfig)) {
65
+ const mtime = fs.statSync(tsconfig).mtimeMs;
66
+ if (mtime > src.mtime) {
67
+ src.mtime = mtime;
68
+ src.file = tsconfig;
69
+ }
70
+ }
71
+
72
+ const distDir = path.join(dir, 'dist');
73
+ if (!fs.existsSync(distDir)) return { name, dir, reason: 'missing-dist', src };
74
+ const dist = newestFileMtime(distDir);
75
+ if (src.mtime > dist.mtime) return { name, dir, reason: 'stale', src, dist };
76
+ return { name, dir, reason: null };
77
+ }
78
+
79
+ /** 手工格式化本地时间:不依赖 locale/ICU(跨平台口径一致),也不用 shell 的 date */
80
+ function formatTime(ms) {
81
+ if (!ms) return '(none)';
82
+ const date = new Date(ms);
83
+ const pad = value => String(value).padStart(2, '0');
84
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} `
85
+ + `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
86
+ }
87
+
88
+ /** 优先显示仓库根目录相对路径,越界(测试夹具在 tmp 里)则显示绝对路径 */
89
+ function displayPath(file) {
90
+ const rel = path.relative(path.resolve(serverRoot, '..', '..'), file);
91
+ return rel.startsWith('..') ? file : rel;
92
+ }
93
+
94
+ function usage() {
95
+ console.log(`Usage: node scripts/check-workspace-deps.cjs [packagesDir]
96
+
97
+ Verifies that the workspace packages consumed by the server (types / llm / runtime /
98
+ knowledge) have dist/ artifacts newer than their src/. Wired as \`prebuild\` so a build
99
+ run inside apps/server cannot silently embed stale package code.
100
+
101
+ Exit 0 when fresh, when running under turbo (^build already ordered the deps),
102
+ or when packagesDir does not exist (published package layout).
103
+ Exit 1 with a remedy when stale.`);
104
+ }
105
+
106
+ function main() {
107
+ const args = process.argv.slice(2);
108
+ if (args.includes('--help') || args.includes('-h')) {
109
+ usage();
110
+ return 0;
111
+ }
112
+ // turbo 任务内:依赖已按 ^build 先建(或从缓存恢复)→ 不阻塞根目录构建
113
+ if (process.env.TURBO_HASH || process.env.TURBO_INVOCATION_DIR) return 0;
114
+
115
+ const packagesDir = path.resolve(
116
+ args[0] || process.env.CUSTOMIZE_WORKSPACE_PACKAGES_DIR || defaultPackagesDir,
117
+ );
118
+ if (!fs.existsSync(packagesDir)) return 0; // 发布包布局:没有 packages/ 同级目录
119
+
120
+ const problems = [];
121
+ for (const name of WORKSPACE_DEPS) {
122
+ const result = inspectPackage(packagesDir, name);
123
+ if (result && result.reason) problems.push(result);
124
+ }
125
+ if (problems.length === 0) return 0;
126
+
127
+ console.error('[server] Stale workspace dependency artifacts — the build would embed old dist code:');
128
+ for (const problem of problems) {
129
+ if (problem.reason === 'missing-dist') {
130
+ console.error(`[server] ${problem.name}: dist/ not built yet`);
131
+ } else {
132
+ console.error(
133
+ `[server] ${problem.name}: src ${formatTime(problem.src.mtime)} (${displayPath(problem.src.file)}) is newer than dist ${formatTime(problem.dist.mtime)}`,
134
+ );
135
+ }
136
+ }
137
+ console.error('[server] Run `pnpm build` at the monorepo root first (turbo rebuilds packages/* in dependency order), then build the server again.');
138
+ return 1;
139
+ }
140
+
141
+ if (require.main === module) process.exit(main());
@@ -0,0 +1,142 @@
1
+ {
2
+ "version": 1,
3
+ "note": "半成品扫描的**登记表**:这些导出在生产里零引用是**设计如此**(测试钩子/观察面/登记自证面/零命中不接入)。新增未登记项会在扫描里单列 ⇒ 由人/智能体当场判,不再堆成待办。 ★ 2026-09-30 追加:不可判(星号再导出)也纳入同一登记表——本文件内自用/测试面的符号不再进待判。",
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/artifacts.ts",
32
+ "symbol": "hasArtifact",
33
+ "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
34
+ },
35
+ {
36
+ "file": "apps/server/src/services/agent/eventBus.ts",
37
+ "symbol": "resetEventBusForTest",
38
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
39
+ },
40
+ {
41
+ "file": "apps/server/src/services/agent/eventBus.ts",
42
+ "symbol": "flushSubscriptions",
43
+ "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
44
+ },
45
+ {
46
+ "file": "apps/server/src/services/agent/eventBus.ts",
47
+ "symbol": "subscriberCount",
48
+ "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
49
+ },
50
+ {
51
+ "file": "apps/server/src/services/agent/loopBudget.ts",
52
+ "symbol": "resetBudgetMeters",
53
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
54
+ },
55
+ {
56
+ "file": "apps/server/src/services/agent/toolRegistry.ts",
57
+ "symbol": "getTool",
58
+ "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
59
+ },
60
+ {
61
+ "file": "apps/server/src/services/agent/toolRegistry.ts",
62
+ "symbol": "TOOL_GROUP_COUNTS",
63
+ "reason": "登记表/账本的机械自证面:用例据此核对登记与实现一致;生产不需要调用"
64
+ },
65
+ {
66
+ "file": "apps/server/src/services/document-core/documentDomainProfileService.ts",
67
+ "symbol": "fieldMatchesCategory",
68
+ "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
69
+ },
70
+ {
71
+ "file": "apps/server/src/services/document-core/generatedDocumentService.ts",
72
+ "symbol": "setProcessAliveProbeForTest",
73
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
74
+ },
75
+ {
76
+ "file": "apps/server/src/services/document-core/generatedDocumentService.ts",
77
+ "symbol": "getGenerateTask",
78
+ "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
79
+ },
80
+ {
81
+ "file": "apps/server/src/services/document-workflow/costModel.ts",
82
+ "symbol": "resetCostModelCaches",
83
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
84
+ },
85
+ {
86
+ "file": "apps/server/src/services/document-workflow/envRegistry.ts",
87
+ "symbol": "unregisteredAppEnvVars",
88
+ "reason": "登记表/账本的机械自证面:用例据此核对登记与实现一致;生产不需要调用"
89
+ },
90
+ {
91
+ "file": "apps/server/src/services/document-workflow/generationStages/generationSession.ts",
92
+ "symbol": "createEmptyGenerationSession",
93
+ "reason": "测试钩子:构造空会话的最小骨架(生产总是由真实输入建会话)"
94
+ },
95
+ {
96
+ "file": "apps/server/src/services/document-workflow/integratedBlueprint.ts",
97
+ "symbol": "loadBlueprintAsset",
98
+ "reason": "测试/审计读面:用例据此读工具表/任务表/蓝图/事件总线"
99
+ },
100
+ {
101
+ "file": "apps/server/src/services/document-workflow/llmClient.ts",
102
+ "symbol": "resetEmptyStormStreak",
103
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
104
+ },
105
+ {
106
+ "file": "apps/server/src/services/document-workflow/llmClient.ts",
107
+ "symbol": "activeLlmCallCount",
108
+ "reason": "观察面/查询面(口径可穷举):供用例与审计读,生产路径不直接调用"
109
+ },
110
+ {
111
+ "file": "apps/server/src/services/document-workflow/llmClient.ts",
112
+ "symbol": "resetLlmSlotStateForTest",
113
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
114
+ },
115
+ {
116
+ "file": "apps/server/src/services/document-workflow/semanticSimilarity.ts",
117
+ "symbol": "clearEmbedCacheForTest",
118
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
119
+ },
120
+ {
121
+ "file": "apps/server/src/services/knowledge/kbService.ts",
122
+ "symbol": "shutdownKbService",
123
+ "reason": "测试钩子(重置/探针):只有用例需要,生产不该调用"
124
+ },
125
+ {
126
+ "file": "apps/server/src/services/agent/emitNode.ts",
127
+ "symbol": "resetEmitNodeState",
128
+ "reason": "实际节点生产器emitNode的进程状态重置测试面,隔离轮次/幂等状态;非未接入业务函数。"
129
+ },
130
+ {
131
+ "file": "apps/server/src/services/document-workflow/semanticSimilarity.ts",
132
+ "symbol": "snapshotEmbedCacheStats",
133
+ "reason": "实际事实检索、agentPlanner/evidence/Native阶段共用的embedding缓存统计只读测试观察面;不承担正文雷同删除或写作评分。"
134
+ },
135
+ {
136
+ "file": "apps/server/src/services/document-workflow/sourceVersionPolicy.ts",
137
+ "symbol": "isAuthenticatedSourceVersionPolicy",
138
+ "reason": "实际SourceVersionPolicy WeakSet认证状态只读测试面,验证伪造/恢复前后的真实来源权限;非模型声明或验收通过资格。"
139
+ }
140
+ ],
141
+ "retirementUpdatedAt": "2026-10-10T18:16:44.738Z"
142
+ }
@@ -0,0 +1,206 @@
1
+ {
2
+ "note": "半成品扫描门禁基线(棘轮:数不许变多)。重新生成:node apps/server/scripts/half-built-scan.mjs --write-baseline",
3
+ "generatedAt": "2026-09-29",
4
+ "scope": [
5
+ "apps/server/src",
6
+ "packages"
7
+ ],
8
+ "counts": {
9
+ "谁都不用": 0,
10
+ "半成品嫌疑": 22,
11
+ "封装暴露(只导出给测试)": 158,
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/safePath.ts::resolveInsideOrNull",
101
+ "apps/server/src/services/common/serviceState.ts::getFirstStartedAt",
102
+ "apps/server/src/services/common/serviceState.ts::serviceStatePath",
103
+ "apps/server/src/services/document-core/generatedDocumentService.ts::buildResumeInitialRecord",
104
+ "apps/server/src/services/document-core/generatedDocumentService.ts::hasActiveTaskForProject",
105
+ "apps/server/src/services/document-core/generatedDocumentService.ts::upsertGeneratedAssets",
106
+ "apps/server/src/services/document-core/generatedDocumentService.ts::upsertGeneratedDocumentAsset",
107
+ "apps/server/src/services/document-workflow/agentWorkflow.ts::scopedMaterialRootsOf",
108
+ "apps/server/src/services/document-workflow/authoritativeValues.ts::attributeValueShapeMismatch",
109
+ "apps/server/src/services/document-workflow/authoritativeValues.ts::cleanValueForm",
110
+ "apps/server/src/services/document-workflow/authoritativeValues.ts::stripTrailingOcrGarbage",
111
+ "apps/server/src/services/document-workflow/constructionBidStructure.ts::representativeTitleForPattern",
112
+ "apps/server/src/services/document-workflow/constructionProcessKnowledge.ts::CARD_TYPE_REPLACEMENTS",
113
+ "apps/server/src/services/document-workflow/constructionProcessKnowledge.ts::PROCESS_CARD_TYPE_BINDING_DEFERRED",
114
+ "apps/server/src/services/document-workflow/constructionProcessKnowledge.ts::STANDARDS_PENDING_CALIBRATION",
115
+ "apps/server/src/services/document-workflow/costModel.ts::DEFAULT_PRICE_PROVENANCE",
116
+ "apps/server/src/services/document-workflow/costModel.ts::DEFAULT_PRICE_TABLE",
117
+ "apps/server/src/services/document-workflow/costModel.ts::DETERIORATION_THRESHOLDS",
118
+ "apps/server/src/services/document-workflow/costModel.ts::applyDeteriorationActions",
119
+ "apps/server/src/services/document-workflow/costModel.ts::parsePriceOverride",
120
+ "apps/server/src/services/document-workflow/costModel.ts::priceEntryFor",
121
+ "apps/server/src/services/document-workflow/costModel.ts::priceKeyOf",
122
+ "apps/server/src/services/document-workflow/costModel.ts::priceTable",
123
+ "apps/server/src/services/document-workflow/defectHeatmap.ts::REPAIR_ATTRIBUTION_LABELS",
124
+ "apps/server/src/services/document-workflow/defectHeatmap.ts::REPAIR_FEEDBACK_STUBBORN_THRESHOLD",
125
+ "apps/server/src/services/document-workflow/documentInstruction.ts::INSTRUCTION_KINDS",
126
+ "apps/server/src/services/document-workflow/documentInstruction.ts::INSTRUCTION_KIND_LABELS",
127
+ "apps/server/src/services/document-workflow/documentInstruction.ts::classifyInstructionByRules",
128
+ "apps/server/src/services/document-workflow/documentInstruction.ts::extractInstructionTarget",
129
+ "apps/server/src/services/document-workflow/envRegistry.ts::AGENT_ENV_REGISTRY",
130
+ "apps/server/src/services/document-workflow/envRegistry.ts::APP_ENV_PREFIXES",
131
+ "apps/server/src/services/document-workflow/envRegistry.ts::APP_ENV_REGISTRY",
132
+ "apps/server/src/services/document-workflow/envRegistry.ts::CUSTOMIZE_ENV_REGISTRY",
133
+ "apps/server/src/services/document-workflow/factGovernance.ts::SUPPORT_FORM_LEXICON",
134
+ "apps/server/src/services/document-workflow/factGovernance.ts::applyScopeOverridesToText",
135
+ "apps/server/src/services/document-workflow/factGovernance.ts::collectMarkdownTableCandidates",
136
+ "apps/server/src/services/document-workflow/factGovernance.ts::collectStructuredFactCandidates",
137
+ "apps/server/src/services/document-workflow/factGovernance.ts::numericScopeResolutions",
138
+ "apps/server/src/services/document-workflow/factGovernance.ts::resolveCanonicalFacts",
139
+ "apps/server/src/services/document-workflow/factGovernance.ts::unitReForKind",
140
+ "apps/server/src/services/document-workflow/factsModel.ts::sanitizeFactPool",
141
+ "apps/server/src/services/document-workflow/hazardBinding.ts::billOfQuantitiesCorpus",
142
+ "apps/server/src/services/document-workflow/hazardBinding.ts::extractHazardParameters",
143
+ "apps/server/src/services/document-workflow/hazardBinding.ts::normalizeParameterValue",
144
+ "apps/server/src/services/document-workflow/integratedBlueprint/parse.ts::isStructuralOnlyBillFile",
145
+ "apps/server/src/services/document-workflow/integratedBlueprint/render.ts::AUTHORITY_DOMAIN_REGISTRY",
146
+ "apps/server/src/services/document-workflow/integratedBlueprint/render.ts::alignmentAnchorsForChapter",
147
+ "apps/server/src/services/document-workflow/integratedBlueprint/render.ts::assertAuthorityDomainChannels",
148
+ "apps/server/src/services/document-workflow/integratedBlueprint/render.ts::authorityDomainChannelReport",
149
+ "apps/server/src/services/document-workflow/llmCassette.ts::CASSETTE_PROMPT_VERSION",
150
+ "apps/server/src/services/document-workflow/llmCassette.ts::CassetteMissError",
151
+ "apps/server/src/services/document-workflow/llmCassette.ts::cassetteDir",
152
+ "apps/server/src/services/document-workflow/llmCassette.ts::cassetteMode",
153
+ "apps/server/src/services/document-workflow/llmClient.ts::flushScheduledLaunches",
154
+ "apps/server/src/services/document-workflow/llmClient.ts::judgeThinkingEnabled",
155
+ "apps/server/src/services/document-workflow/materialResidue.ts::drawingPointerPhraseHits",
156
+ "apps/server/src/services/document-workflow/planningArtifactCache.ts::PLANNING_ARTIFACT_CACHE_VERSION",
157
+ "apps/server/src/services/document-workflow/poolNoise.ts::penaltyTableHitCount",
158
+ "apps/server/src/services/document-workflow/promptRuleExtraction.ts::dedupePlannedSections",
159
+ "apps/server/src/services/document-workflow/promptRuleExtraction.ts::extractOutlineHeadings",
160
+ "apps/server/src/services/document-workflow/resumeLedger.ts::isManualIssue",
161
+ "apps/server/src/services/document-workflow/structureIntegrityRules.ts::tailOrphanBlockIssues",
162
+ "apps/server/src/services/document-workflow/textMatch.ts::chineseTokenMatchScore",
163
+ "apps/server/src/services/document-workflow/textMatch.ts::chineseTokens",
164
+ "apps/server/src/services/knowledge/kbExportService.ts::stripCadMetadataLines",
165
+ "apps/server/src/services/knowledge/kbExportService.ts::trimChunkOverlap",
166
+ "apps/server/src/services/knowledge/kbExportService.ts::txtEntryNameFor",
167
+ "apps/server/src/services/knowledge/kbIndexWorkerService.ts::enqueueKnowledgeIndex",
168
+ "apps/server/src/services/knowledge/kbService.ts::getKnownProjectRoots",
169
+ "apps/server/src/services/skills/blockKnowledge.ts::selectBlockCards",
170
+ "apps/server/src/services/skills/match.ts::assertFocusRuleMapping",
171
+ "apps/server/src/services/skills/match.ts::chapterDomainPatterns",
172
+ "apps/server/src/services/skills/schema.ts::MAX_SECTION_REGEX_LENGTH",
173
+ "apps/server/src/services/skills/store.ts::applySkillOverride",
174
+ "apps/server/src/services/skills/store.ts::skillFilePath",
175
+ "apps/server/src/services/skills/store.ts::skillsDir",
176
+ "packages/knowledge/src/core/knowledge-base-manager.ts::diversifiedRerankCandidates",
177
+ "packages/knowledge/src/extraction/content-extractor.ts::collapseAdjacentRepeatedLines",
178
+ "packages/knowledge/src/extraction/content-extractor.ts::extractTopLevelOoxmlElements",
179
+ "packages/knowledge/src/extraction/content-extractor.ts::isPdfWrappedClauseLike",
180
+ "packages/knowledge/src/extraction/content-extractor.ts::ocrPageCacheKeyOf",
181
+ "packages/knowledge/src/extraction/content-extractor.ts::reorderPdfRowsAroundWrappedParagraphs",
182
+ "packages/knowledge/src/extraction/ocr-providers.ts::OCR_NEIGHBOR_CONFUSION_LOW_CONFIDENCE",
183
+ "packages/knowledge/src/extraction/ocr-providers.ts::PaddleOcrJsProvider",
184
+ "packages/knowledge/src/extraction/ocr-providers.ts::TesseractJsProvider",
185
+ "packages/knowledge/src/extraction/ocr-providers.ts::gateOcrNeighborClassConfusions",
186
+ "packages/knowledge/src/extraction/ocr-providers.ts::resolveOcrSessionThreads",
187
+ "packages/knowledge/src/extraction/ocr-providers.ts::withOcrSessionThreads",
188
+ "packages/knowledge/src/extraction/ocr-tiling.ts::assembleTiledText",
189
+ "packages/knowledge/src/extraction/ocr-tiling.ts::cropRgbTile",
190
+ "packages/knowledge/src/extraction/ocr-tiling.ts::filterTiledRegions",
191
+ "packages/knowledge/src/extraction/ocr-tiling.ts::mergeTileRegions",
192
+ "packages/knowledge/src/extraction/office-embedded-images.ts::MIN_EMBEDDED_IMAGE_BYTES",
193
+ "packages/knowledge/src/extraction/office-embedded-images.ts::carveImageCandidates",
194
+ "packages/knowledge/src/extraction/office-embedded-images.ts::carveJpeg",
195
+ "packages/knowledge/src/extraction/office-embedded-images.ts::carvePng",
196
+ "packages/knowledge/src/extraction/paddle-model-select.ts::MIN_ONNX_BYTES",
197
+ "packages/knowledge/src/extraction/paddle-model-select.ts::PADDLE_MODEL_FILES",
198
+ "packages/knowledge/src/extraction/paddle-model-select.ts::PADDLE_MODEL_PRESET"
199
+ ],
200
+ "不可判(星号再导出)": []
201
+ },
202
+ "retirementUpdatedAt": "2026-10-10T18:16:44.719Z",
203
+ "retirementUpdate": "Only remove actually absent export declarations; reconcile counts to retained roster lengths. No baseline regeneration, added allowances or swallowed new dead declarations.",
204
+ "retirementCountReconciledAt": "2026-10-10T01:23:32.058Z",
205
+ "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."
206
+ }