@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
@@ -5,9 +5,6 @@
5
5
  "nav": {
6
6
  "overview": "Overview",
7
7
  "knowledge": "Knowledge Base",
8
- "knowledgeManage": "KB Management",
9
- "fileManagement": "File Management",
10
- "documents": "Generation Records",
11
8
  "canvas": "Generation Canvas",
12
9
  "skills": "Skills",
13
10
  "guide": "Guide",
@@ -70,7 +67,7 @@
70
67
  "categories": "File Categories",
71
68
  "fileCount": "File Count",
72
69
  "search": "Search Files",
73
- "searchPlaceholder": "Search by filename or content...",
70
+ "searchPlaceholder": "Search by filename or content",
74
71
  "filterCategory": "Filter Category",
75
72
  "allCategories": "All Types",
76
73
  "upload": "Upload File",
@@ -212,32 +209,38 @@
212
209
  "project": "Current Project",
213
210
  "global": "Global"
214
211
  },
215
- "topLevelCount": "{count} top-level item(s)"
212
+ "topLevelCount": "{count} top-level item(s)",
213
+ "ignoreRules": "Ignore rules",
214
+ "ignoreRulesHint": "Ignore rules narrow the retrieval scope: files matching them are excluded from generation retrieval (changing this changes which materials feed the writing).",
215
+ "ignoreRulesEmpty": "No ignore rules yet.",
216
+ "ignoreRulesAdd": "Add rule",
217
+ "ignoreRulesPlaceholder": "e.g. **/drafts/** or *.bak",
218
+ "ignoreRulesDelete": "Delete",
219
+ "ignoreRulesDeleted": "Rule deleted",
220
+ "ignoreRulesAdded": "Rule added",
221
+ "ignoreRulesLoadFailed": "Failed to load ignore rules",
222
+ "ignoreRulesSaveFailed": "Failed to save ignore rules",
223
+ "pdfCoverage_complete": "Every page in this extraction has been verified as read",
224
+ "pdfCoverage_incomplete": "Page coverage is incomplete. Parse this file again",
225
+ "pdfCoverage_unmeasured": "Full page coverage has not been verified. Parse again before generation",
226
+ "pdfProcessedPages": "Processed pages / verified total pages",
227
+ "pdfMissingPages": "Unprocessed page numbers",
228
+ "latestParseFailed": "The latest parsing attempt failed",
229
+ "previousParseRetained": "The previous extraction is retained for reference, not as a successful current attempt",
230
+ "currentParseInProgress": "This file is being parsed again. Wait for completion"
216
231
  },
217
232
  "models": {
218
233
  "title": "Model Configuration",
219
- "description": "Manage LLM models and tier assignments",
220
- "modelList": "Model List",
221
- "addModel": "Add Model",
222
- "editModel": "Edit Model",
223
- "modelName": "Model Name",
234
+ "description": "Manage providers and choose one model for the entire generation workflow",
235
+ "modelList": "Model Services",
224
236
  "apiKey": "API Key",
225
237
  "baseUrl": "Base URL",
226
238
  "protocol": "Protocol",
227
239
  "connected": "Connected",
228
240
  "connectionFailed": "Connection Failed",
229
- "noProviders": "No models yet. Add one to get started.",
230
- "modelTiers": "Model Tier Assignment",
231
- "tierReader": "Reader (Read-only)",
232
- "tierReaderDesc": "Handles low-risk, read-only, and cost-sensitive work such as reading files, searching the knowledge base, text search, and context organization. Prefer fast, inexpensive models with stable long-context support.",
233
- "tierReasoning": "Reasoning (Analysis)",
234
- "tierReasoningDesc": "Handles deeper analysis, planning, code understanding, and multi-step reasoning. Prefer models with stronger reasoning quality and reliability.",
235
- "tierAction": "Action (Write/Execute)",
236
- "tierActionDesc": "Handles side-effect operations such as writing files, changing code, running commands, and calling external tools. Prefer reliable models with strong instruction-following and verified behavior.",
241
+ "noProviders": "No providers yet. Add a provider first.",
237
242
  "deleteProvider": "Delete",
238
243
  "deleteProviderConfirm": "Are you sure you want to delete this model and all its configs?",
239
- "modelNamePlaceholder": "e.g. gpt-4o / deepseek-chat",
240
- "selectModelPlaceholder": "No model selected",
241
244
  "apiKeyEditHint": "Configured keys are shown as a masked value. Focus the field to enter a new key; the mask cannot be copied. Leave empty or keep the mask to avoid changes.",
242
245
  "apiKeyEditPlaceholder": "Enter a new API key, or leave empty to keep current",
243
246
  "embeddingConfig": "Embedding Configuration",
@@ -245,7 +248,6 @@
245
248
  "model": "Model",
246
249
  "dimensions": "Dimensions",
247
250
  "none": "None",
248
- "active": "Active",
249
251
  "localRecommended": "Local (Recommended)",
250
252
  "externalAdvanced": "External (Advanced)",
251
253
  "status": "Status",
@@ -270,21 +272,39 @@
270
272
  "audioCapability": "Audio",
271
273
  "videoCapability": "Video",
272
274
  "localEmbedding": "Local Embedding",
273
- "thinkingMode": "Thinking Mode",
274
- "thinkingFollowTask": "Follow Task Strategy (Recommended)",
275
- "thinkingEnabled": "Force On",
276
- "thinkingDisabled": "Force Off",
277
- "modelListDesc": "One connection per provider: protocol, base URL, API key and multimodal capabilities. Model tiers pick from these providers.",
275
+ "modelListDesc": "Select a service with its radio button. The entire generation uses that service’s model.",
278
276
  "embeddingConfigDesc": "The vector model behind knowledge base retrieval. Verify the endpoint is reachable before switching to an external embedding provider.",
279
- "modelTiersDesc": "Assign one model to each task class. The same provider may appear in more than one tier.",
280
- "testConnection": "Test connection"
277
+ "testConnection": "Test connection",
278
+ "addProvider": "Add Provider",
279
+ "editProvider": "Edit Provider",
280
+ "providerName": "Model Service Name",
281
+ "providerNamePlaceholder": "For example, deepseek-v4-pro",
282
+ "modelIdentifier": "Model Identifier",
283
+ "modelIdentifierPlaceholder": "For example, deepseek-v4-pro",
284
+ "modelIdentifierHint": "Leave blank to use the service name as the model identifier, or enter the actual identifier accepted by the service."
281
285
  },
282
286
  "prompt": {
283
287
  "title": "Prompt Management",
284
- "description": "Manage CUSTOMIZE.md system prompt files per project",
288
+ "description": "Manage and improve document writing and material extraction prompts",
285
289
  "filePath": "File Path",
286
290
  "hasFile": "Configured",
287
291
  "promptName": "Prompt Name",
292
+ "writingGuideTitle": "What to write and how",
293
+ "writingGuideIntro": "Describe the document purpose, chapter structure, engineering priorities, tone and level of detail.",
294
+ "writingGuideParameters": "Include parameters when the object, method or control needs them. Management content does not need numbers for their own sake.",
295
+ "writingGuideDetails": "Writing guidance and an outline example",
296
+ "writingGuideNeedsTitle": "Describe these requirements",
297
+ "writingGuidePurpose": "The document purpose, audience and use, such as bid preparation, site briefing or professional review.",
298
+ "writingGuideStructure": "Complete chapter and section titles in order, including the structure that must be retained. Wrap the outline in the OUTLINE tags shown below.",
299
+ "writingGuideEngineering": "Engineering objects, renovation or construction conditions, discipline interfaces and key controls. Do not present unverified source values as known conditions.",
300
+ "writingGuideStyle": "Tone, detail priorities and required tables, process diagrams or other formats. Explain conditions, steps and checks for technical methods.",
301
+ "writingGuideManagedTitle": "What the software handles",
302
+ "writingGuideManaged": "The software handles source verification, lead and chapter author coordination, the selected model, numbering and contents, tools, quality review and export. Check results reflect actual findings; a prompt cannot guarantee a pass.",
303
+ "writingGuideAvoid": "You do not need to repeat model routing, call budgets, stage timeouts or tool protocols. Avoid demands for numeric density, self-declared passes or repeated score chasing, which can conflict with the workflow.",
304
+ "writingGuideExampleTitle": "A supported two-chapter example",
305
+ "writingGuideExampleHint": "This shows the format only. Add every chapter and section needed for the actual project; the example does not replace tender, design or site requirements.",
306
+ "writingGuideExample": "Prepare a construction organization document for professional review of this project.\nFocus on renovation conditions, protection of existing facilities, construction interfaces and acceptance.\nUse specific, concise language. Explain working conditions, steps and checks.\n<OUTLINE>\n1. Project overview and construction deployment\n1.1 Scope and site conditions\n1.2 Interfaces and organization\n2. Main construction methods\n2.1 Operations and working conditions\n2.2 Key controls and acceptance\n</OUTLINE>\nUse clear tables for configuration comparisons or sequencing.",
307
+ "writingGuideOneOutline": "Use one selected prompt for the complete outline. Let other prompts add priorities and style so that outlines do not repeat or conflict.",
288
308
  "customPrompt": "My Prompts",
289
309
  "currentProject": "Current Project",
290
310
  "otherProjects": "Other Projects",
@@ -305,7 +325,10 @@
305
325
  "exportFiltered": "Export Filtered",
306
326
  "createPrompt": "Create Prompt",
307
327
  "exportSelected": "Export Selected",
328
+ "selectAll": "Select All",
329
+ "cancelSelectAll": "Cancel Select All",
308
330
  "batchSelect": "Batch Select",
331
+ "cancelBatchSelect": "Cancel Batch Select",
309
332
  "cancelSelect": "Cancel Select",
310
333
  "clearSelect": "Clear Selection",
311
334
  "aiPromptAssistant": "AI Prompt Assistant",
@@ -343,24 +366,18 @@
343
366
  "importedCount": "Imported {count} prompt(s)",
344
367
  "importFailed": "Import failed — make sure the JSON file is well-formed",
345
368
  "exportOne": "Export",
369
+ "exportNoneSelected": "Please select the prompts to export first",
346
370
  "deleteCustomConfirm": "Delete this custom prompt?",
347
371
  "deleteProjectConfirm": "Delete this project record and its file?",
348
372
  "localPrompt": "Local prompt",
349
373
  "selectedCount": "{count} selected"
350
374
  },
351
375
  "assets": {
352
- "description": "Manage documents, images, and attachments generated by template runs. Generated results are stored only in generated assets and are not added to the knowledge base.",
353
- "deleteSelected": "Delete Selected {count}",
354
- "deleteAll": "Delete All",
355
- "empty": "No generated assets",
356
- "resource": "Resource",
357
- "path": "Path",
358
- "source": "Source",
359
376
  "openFile": "Open File",
360
- "openDirectory": "Open Directory",
361
- "deleted": "Deleted {count} assets"
377
+ "openDirectory": "Open Directory"
362
378
  },
363
379
  "logs": {
380
+ "backToSettings": "Back to Settings",
364
381
  "monitorSystem": "Monitor system exceptions, API errors, and runtime issues",
365
382
  "searchLogs": "Search logs...",
366
383
  "refresh": "Refresh",
@@ -429,19 +446,6 @@
429
446
  "nonDeliverableExportTitle": "This export is a non-deliverable",
430
447
  "nonDeliverableExportHint": "The export gate did not pass, so the file is force-marked as a non-deliverable (file-name suffix). It must not be submitted as a formal deliverable."
431
448
  },
432
- "specs": {
433
- "title": "Document Spec Packages",
434
- "description": "Configure fact fields, chapter rules, and executable gate rules. Both system and custom gate types participate in validation.",
435
- "list": "Spec List",
436
- "name": "Spec Name",
437
- "facts": "Fact Fields",
438
- "chapters": "Chapter Rules",
439
- "required": "Required",
440
- "chapterTitle": "Chapter Title",
441
- "order": "Order",
442
- "minWords": "Min Words",
443
- "requiredFacts": "Required Facts"
444
- },
445
449
  "common": {
446
450
  "save": "Save",
447
451
  "cancel": "Cancel",
@@ -475,19 +479,6 @@
475
479
  "levelInfo": "Info",
476
480
  "totalRows": "{count} rows"
477
481
  },
478
- "refs": {
479
- "title": "Template Reference Library",
480
- "description": "Upload outstanding winning bids as quality benchmarks. The system parses quality profiles (parameter density, process chains, structure) and benchmarks generated documents by project type. References are used ONLY for quality benchmarking and structure guidance, never as project facts.",
481
- "uploading": "Uploading and parsing…",
482
- "uploaded": "Reference added and profile parsed",
483
- "projectType": "Project type",
484
- "delete": "Delete",
485
- "deleteConfirm": "Delete this reference? The original file will also be removed",
486
- "paramDensity": "Param density",
487
- "duplication": "Duplication rate",
488
- "tables": "Tables",
489
- "sections": "Sections"
490
- },
491
482
  "jobs": {
492
483
  "title": "Background tasks",
493
484
  "refresh": "Refresh",
@@ -545,6 +536,26 @@
545
536
  "reportHealthAlerts": "Health alerts",
546
537
  "reportGateBlocked": "Not deliverable",
547
538
  "reportChecklistTitle": "Unresolved items from the latest non-deliverable export",
548
- "reportChecklistTotal": "{count} item(s)"
539
+ "reportChecklistTotal": "{count} item(s)",
540
+ "netCharsLabel": "Repair-chain net added chars",
541
+ "netCharsOver": " (over the 5% target)",
542
+ "netCharsRatio": "{ratio}% of the text at chain start",
543
+ "netCharsWarn": "Repair-chain net added chars exceed the 5% target: the score is being repaired rather than written",
544
+ "receiptBadge": "{count} notice(s) from this export",
545
+ "receiptBindingAbsent": "The gate is not bound to a body fingerprint: whether this body is the one that passed cannot be checked",
546
+ "receiptBindingMismatch": "Body and gate fingerprint differ: the export was approved for a different body (edited or replaced after close-out)",
547
+ "receiptContentIssues": "{count} content issue(s): {first}",
548
+ "receiptFigureFailures": "{count} figure(s) not inlined: {first}",
549
+ "receiptGateIssues": "Gate blocking list: {count} item(s): {first}",
550
+ "receiptNonDeliverable": "This export is a NON-DELIVERABLE: the filename was suffixed by the server; do not submit it as a formal deliverable",
551
+ "receiptPdfPages": "PDF has {count} page(s)",
552
+ "receiptRenderBlockers": "Render audit: {count} source-level structural defect(s)",
553
+ "receiptRenderNotices": "Render audit: {count} notice(s): {first}",
554
+ "receiptTemplateWarning": "Template placeholder missing, fell back to: {detail}",
555
+ "receiptTitle": "Latest export receipt",
556
+ "reviewReportDownload": "Download .md",
557
+ "reviewReportHint": "The report is rendered from the repair-round ledger and the gate result at close-out",
558
+ "reviewReportLabel": "Delivery review report",
559
+ "reviewReportView": "View online"
549
560
  }
550
561
  }
@@ -5,9 +5,6 @@
5
5
  "nav": {
6
6
  "overview": "总览",
7
7
  "knowledge": "知识库",
8
- "knowledgeManage": "知识库管理",
9
- "fileManagement": "文件管理",
10
- "documents": "生成记录",
11
8
  "canvas": "生成画布",
12
9
  "skills": "技能库",
13
10
  "guide": "指引",
@@ -70,7 +67,7 @@
70
67
  "categories": "文件分类",
71
68
  "fileCount": "文件数量",
72
69
  "search": "搜索文件",
73
- "searchPlaceholder": "输入文件名或内容关键词...",
70
+ "searchPlaceholder": "输入文件名或内容关键词",
74
71
  "filterCategory": "筛选分类",
75
72
  "allCategories": "全部类型",
76
73
  "upload": "上传文件",
@@ -212,32 +209,38 @@
212
209
  "project": "当前项目",
213
210
  "global": "全局"
214
211
  },
215
- "topLevelCount": "共 {count} 个顶层项目"
212
+ "topLevelCount": "共 {count} 个顶层项目",
213
+ "ignoreRules": "忽略规则",
214
+ "ignoreRulesHint": "忽略规则影响检索范围:命中这些规则的文件不参与生成检索(改这里等于改“哪些资料参与写作”)。",
215
+ "ignoreRulesEmpty": "当前没有忽略规则。",
216
+ "ignoreRulesAdd": "添加规则",
217
+ "ignoreRulesPlaceholder": "例如:**/草稿/** 或 *.bak",
218
+ "ignoreRulesDelete": "删除",
219
+ "ignoreRulesDeleted": "已删除规则",
220
+ "ignoreRulesAdded": "已添加规则",
221
+ "ignoreRulesLoadFailed": "忽略规则读取失败",
222
+ "ignoreRulesSaveFailed": "忽略规则写入失败",
223
+ "pdfCoverage_complete": "该解析结果已完成全页读取核验",
224
+ "pdfCoverage_incomplete": "该解析结果尚未完成全页读取核验,请重新解析",
225
+ "pdfCoverage_unmeasured": "尚无全页读取核验结果,请重新解析后用于生成",
226
+ "pdfProcessedPages": "已处理页数 / 核验总页数",
227
+ "pdfMissingPages": "尚未处理页号",
228
+ "latestParseFailed": "最近一次解析失败",
229
+ "previousParseRetained": "旧解析已保留供追溯,不能作为本次解析成功",
230
+ "currentParseInProgress": "当前资料正在重新解析,请等待完成"
216
231
  },
217
232
  "models": {
218
233
  "title": "模型配置",
219
- "description": "管理 LLM 模型与层级分配",
220
- "modelList": "Model 列表",
221
- "addModel": "添加模型",
222
- "editModel": "编辑模型",
223
- "modelName": "模型名称",
234
+ "description": "管理供应商和生成模型,整个流程统一使用当前选中的模型",
235
+ "modelList": "模型服务",
224
236
  "apiKey": "API Key",
225
237
  "baseUrl": "Base URL",
226
238
  "protocol": "请求协议",
227
239
  "connected": "已连接",
228
240
  "connectionFailed": "连接失败",
229
- "noProviders": "暂无模型,请添加一个",
230
- "modelTiers": "模型层级分配",
231
- "tierReader": "Reader(只读)",
232
- "tierReaderDesc": "处理低风险、只读和成本敏感任务,例如读取文件、检索知识库、搜索文本、整理上下文。建议选择速度快、价格低、长上下文能力稳定的模型。",
233
- "tierReasoning": "Reasoning(推理)",
234
- "tierReasoningDesc": "处理需要深入分析、规划、代码理解和多步骤推理的任务。建议选择推理能力强、稳定性高的模型,必要时可使用更高阶模型。",
235
- "tierAction": "Action(操作)",
236
- "tierActionDesc": "处理会产生副作用的任务,例如写文件、修改代码、执行命令、调用外部工具。建议选择可靠、遵循指令能力强且经过验证的模型。",
241
+ "noProviders": "暂无供应商,请先添加供应商。",
237
242
  "deleteProvider": "删除",
238
243
  "deleteProviderConfirm": "确定要删除此模型及其所有配置吗?",
239
- "modelNamePlaceholder": "例如: gpt-4o / deepseek-chat",
240
- "selectModelPlaceholder": "暂不配置",
241
244
  "apiKeyEditHint": "已配置的 Key 会以掩码回显,聚焦后可输入新 Key;掩码不可复制,留空或保持掩码则不修改。",
242
245
  "apiKeyEditPlaceholder": "输入新的 API Key,留空保持不变",
243
246
  "embeddingConfig": "Embedding 配置",
@@ -245,7 +248,6 @@
245
248
  "model": "模型",
246
249
  "dimensions": "维度",
247
250
  "none": "无",
248
- "active": "已启用",
249
251
  "localRecommended": "本地(推荐)",
250
252
  "externalAdvanced": "外部(高级)",
251
253
  "status": "状态",
@@ -270,21 +272,39 @@
270
272
  "audioCapability": "音频能力",
271
273
  "videoCapability": "视频能力",
272
274
  "localEmbedding": "本地 Embedding",
273
- "thinkingMode": "思考模式",
274
- "thinkingFollowTask": "跟随任务策略(推荐)",
275
- "thinkingEnabled": "强制开启",
276
- "thinkingDisabled": "强制关闭",
277
- "modelListDesc": "每个供应商一条连接配置:协议、Base URL、API Key 与多模态能力。模型层级从这些供应商里取。",
275
+ "modelListDesc": "点选服务卡片上的单选框,整次生成使用该服务对应的模型。",
278
276
  "embeddingConfigDesc": "知识库检索用的向量模型。切换外部 Embedding 前先确认服务可达——语义检索、切片召回都走它。",
279
- "modelTiersDesc": "三类任务各指派一个模型。同一份供应商可以重复出现在不同层级。",
280
- "testConnection": "测试连接"
277
+ "testConnection": "测试连接",
278
+ "addProvider": "添加供应商",
279
+ "editProvider": "编辑供应商",
280
+ "providerName": "模型服务名称",
281
+ "providerNamePlaceholder": "例如 deepseek-v4-pro",
282
+ "modelIdentifier": "模型标识",
283
+ "modelIdentifierPlaceholder": "例如 deepseek-v4-pro",
284
+ "modelIdentifierHint": "不填时使用服务名称作为模型标识;需要时填写服务实际接受的标识。"
281
285
  },
282
286
  "prompt": {
283
287
  "title": "提示词管理",
284
- "description": "管理各项目的 CUSTOMIZE.md 系统提示词文件",
288
+ "description": "管理和优化文档编制、资料提取提示词",
285
289
  "filePath": "文件路径",
286
290
  "hasFile": "已配置",
287
291
  "promptName": "提示词名称",
292
+ "writingGuideTitle": "怎么写、写什么",
293
+ "writingGuideIntro": "写清文档目的、章节结构、工程关注点与文风详略。",
294
+ "writingGuideParameters": "参数按具体对象、工法和控制需求写;管理内容无须凑参数。",
295
+ "writingGuideDetails": "查看撰写要点与结构示例",
296
+ "writingGuideNeedsTitle": "建议写清这些要求",
297
+ "writingGuidePurpose": "文档用途、使用场景和读者,例如投标编制、实施交底或专业审阅。",
298
+ "writingGuideStructure": "完整章、节名称及顺序,说明必须保留的结构;用下方示例中的 OUTLINE 标签包住大纲。",
299
+ "writingGuideEngineering": "工程对象、改造或施工工况、专业接口和重点控制事项;未核实的资料数值不要写成已知条件。",
300
+ "writingGuideStyle": "文字风格、详略侧重,以及需要的表格、流程图或其他输出形式;技术方法写清条件、步骤和检查方式。",
301
+ "writingGuideManagedTitle": "软件统一处理的事项",
302
+ "writingGuideManaged": "资料核验、主控与各章作者调度、使用已选模型、章编号与目录、工具调用、质量审查和导出由软件统一处理。检查结论按实际结果呈现,不由提示词保证达标。",
303
+ "writingGuideAvoid": "不必重复指定模型路由、调用预算、阶段超时或工具协议,也不要要求堆参数、自评达标或反复刷分;这些要求可能与软件流程冲突。",
304
+ "writingGuideExampleTitle": "可识别的两章格式示例",
305
+ "writingGuideExampleHint": "仅示范写法。请按本工程完整职责补齐所需章、节,不用示例代替招标、设计或现场要求。",
306
+ "writingGuideExample": "用于本工程施工组织设计的专业审阅。\n重点说明改造工况、既有设施保护、施工接口与验收安排。\n文风具体、简洁,施工方法写清作业条件、步骤及检查方式。\n<OUTLINE>\n第一章 工程概况与施工部署\n1.1 工程范围与现场条件\n1.2 施工界面与组织安排\n第二章 主要施工方法\n2.1 工序与作业条件\n2.2 关键控制与验收\n</OUTLINE>\n涉及配置比较或排程时使用清晰表格。",
307
+ "writingGuideOneOutline": "同次选用的提示词中,只由一份提供完整大纲,其他提示词补充关注点和文风,避免重复或冲突的目录。",
288
308
  "customPrompt": "我的提示词",
289
309
  "currentProject": "当前项目",
290
310
  "otherProjects": "其他项目",
@@ -305,7 +325,10 @@
305
325
  "exportFiltered": "导出筛选",
306
326
  "createPrompt": "创建提示词",
307
327
  "exportSelected": "导出选中",
328
+ "selectAll": "全选",
329
+ "cancelSelectAll": "取消全选",
308
330
  "batchSelect": "批量选中",
331
+ "cancelBatchSelect": "取消批量选中",
309
332
  "cancelSelect": "取消选中",
310
333
  "clearSelect": "清空选择",
311
334
  "aiPromptAssistant": "AI 提示词助手",
@@ -343,24 +366,18 @@
343
366
  "importedCount": "已导入 {count} 条提示词",
344
367
  "importFailed": "导入失败,请确认 JSON 文件格式正确",
345
368
  "exportOne": "导出",
369
+ "exportNoneSelected": "请先勾选要导出的提示词",
346
370
  "deleteCustomConfirm": "删除自定义提示词?",
347
371
  "deleteProjectConfirm": "删除项目记录及文件?",
348
372
  "localPrompt": "本地提示词",
349
373
  "selectedCount": "已选择 {count} 项"
350
374
  },
351
375
  "assets": {
352
- "description": "管理模板运行生成的文档、图片和附件。生成结果仅保存在生成资源中,不进入知识库。",
353
- "deleteSelected": "删除已选 {count}",
354
- "deleteAll": "删除全部",
355
- "empty": "暂无生成资源",
356
- "resource": "资源",
357
- "path": "路径",
358
- "source": "来源",
359
376
  "openFile": "打开文件",
360
- "openDirectory": "打开目录",
361
- "deleted": "已删除 {count} 个资源"
377
+ "openDirectory": "打开目录"
362
378
  },
363
379
  "logs": {
380
+ "backToSettings": "返回设置",
364
381
  "monitorSystem": "监控系统异常、API 错误和运行时问题",
365
382
  "searchLogs": "搜索日志...",
366
383
  "refresh": "刷新",
@@ -429,19 +446,6 @@
429
446
  "nonDeliverableExportTitle": "本次导出为非交付物",
430
447
  "nonDeliverableExportHint": "导出门禁未通过,文件已强制标注「非交付物」(文件名后缀);该文件不得作为正式成果提交。"
431
448
  },
432
- "specs": {
433
- "title": "文档规范包",
434
- "description": "配置事实字段、章节要求和可执行门禁规则。系统门禁和自定义门禁都会参与生成校验。",
435
- "list": "规范包列表",
436
- "name": "规范包名称",
437
- "facts": "事实字段",
438
- "chapters": "章节规则",
439
- "required": "必填/必需",
440
- "chapterTitle": "章节标题",
441
- "order": "顺序",
442
- "minWords": "最低字数",
443
- "requiredFacts": "必需事实"
444
- },
445
449
  "common": {
446
450
  "save": "保存",
447
451
  "cancel": "取消",
@@ -475,19 +479,6 @@
475
479
  "levelInfo": "提示",
476
480
  "totalRows": "共 {count} 条"
477
481
  },
478
- "refs": {
479
- "title": "模板参考库",
480
- "description": "上传优秀入围施组文件作为质量对标基准。系统自动解析质量画像(参数密度、工序链、结构等),生成文档后按工程类型对标。参考文件仅用于质量对标与结构参考,绝不作为项目事实材料参与生成。",
481
- "uploading": "正在上传并解析…",
482
- "uploaded": "参考文件已入库并完成画像解析",
483
- "projectType": "工程类型",
484
- "delete": "删除",
485
- "deleteConfirm": "删除该参考文件?原文将一并移除",
486
- "paramDensity": "参数密度",
487
- "duplication": "段落重复率",
488
- "tables": "表格数",
489
- "sections": "章节数"
490
- },
491
482
  "jobs": {
492
483
  "title": "后台任务",
493
484
  "refresh": "刷新",
@@ -545,6 +536,26 @@
545
536
  "reportHealthAlerts": "健康告警",
546
537
  "reportGateBlocked": "非交付物",
547
538
  "reportChecklistTitle": "最近一次非交付物导出的未收敛项",
548
- "reportChecklistTotal": "共 {count} 项"
539
+ "reportChecklistTotal": "共 {count} 项",
540
+ "netCharsLabel": "修复链净增字数",
541
+ "netCharsOver": "超目标",
542
+ "netCharsRatio": "占原稿",
543
+ "netCharsWarn": "目标 ≤5%:净增越大,\"分是修出来的\"成分越高——首过写作的缺口被修复链补上了",
544
+ "receiptBadge": "本次导出 {count} 项提醒",
545
+ "receiptBindingAbsent": "门禁未绑定正文指纹:无法核对放行依据是否就是这份正文",
546
+ "receiptBindingMismatch": "正文与门禁指纹不匹配:放行依据不是这份正文(收口后被编辑/替换过)",
547
+ "receiptContentIssues": "内容问题 {count} 条",
548
+ "receiptFigureFailures": "图件未内联 {count} 张",
549
+ "receiptGateIssues": "门禁阻断清单 {count} 项",
550
+ "receiptNonDeliverable": "本次导出为「非交付物」:文件名已由服务端强制加后缀,不得作为正式成果提交",
551
+ "receiptPdfPages": "PDF 共 {count} 页",
552
+ "receiptRenderBlockers": "渲染审计:源层结构缺陷 {count} 项",
553
+ "receiptRenderNotices": "渲染审计告警 {count} 条",
554
+ "receiptTemplateWarning": "模板占位符缺失,已回退:",
555
+ "receiptTitle": "最近一次导出回执",
556
+ "reviewReportDownload": "下载 .md",
557
+ "reviewReportHint": "未跑到终门禁的记录没有报告(打开会说明原因)",
558
+ "reviewReportLabel": "交付三件套报告",
559
+ "reviewReportView": "在线查看"
549
560
  }
550
561
  }
package/next.config.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { NextConfig } from 'next';
2
+ import { captureBuildIdentity } from './scripts/build-identity.cjs';
3
+
4
+ const buildIdentity = captureBuildIdentity();
2
5
 
3
6
  /** 需要在服务端而非客户端打包的外部依赖(原生模块/大型库) */
4
7
  const serverExternalPackages = [
@@ -17,6 +20,8 @@ const serverExternalPackages = [
17
20
  ];
18
21
 
19
22
  const nextConfig: NextConfig = {
23
+ env: { CUSTOMIZE_COMPILED_BUILD_IDENTITY: JSON.stringify(buildIdentity) },
24
+ generateBuildId: async () => buildIdentity.sourceFingerprint,
20
25
  eslint: {
21
26
  ignoreDuringBuilds: true,
22
27
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@customize-agent/server",
3
- "version": "4.59.2",
3
+ "version": "4.60.0",
4
4
  "description": "Customize Agent Web 管理控制台",
5
5
  "exports": {
6
6
  "./package.json": "./package.json"
@@ -32,11 +32,11 @@
32
32
  "access": "public"
33
33
  },
34
34
  "engines": {
35
- "node": ">=20.19.0"
35
+ "node": ">=22.19.0"
36
36
  },
37
37
  "dependencies": {
38
38
  "@ant-design/icons": "^6.3.2",
39
- "@customize-agent/knowledge": "^4.16.0",
39
+ "@customize-agent/knowledge": "^5.1.0",
40
40
  "@customize-agent/llm": "^3.1.3",
41
41
  "@customize-agent/runtime": "^3.1.2",
42
42
  "@napi-rs/canvas": "^0.1.82",
@@ -46,17 +46,14 @@
46
46
  "formidable": "^3.5.4",
47
47
  "jszip": "^3.10.1",
48
48
  "lucide-react": "^0.400.0",
49
- "mammoth": "^1.12.0",
50
49
  "marked": "^15.0.12",
51
50
  "next": "15.5.19",
52
51
  "next-themes": "^0.4.0",
53
52
  "nprogress": "^0.2.0",
54
- "pdf-parse": "^2.4.5",
55
53
  "pdfjs-dist": "^5.4.394",
56
54
  "playwright": "^1.57.0",
57
55
  "react": "19.2.7",
58
56
  "react-dom": "19.2.7",
59
- "tesseract.js": "^7.0.0",
60
57
  "typescript": "^6.0.3",
61
58
  "xlsx": "^0.18.5"
62
59
  },
@@ -72,11 +69,12 @@
72
69
  "tailwindcss": "^4.3.2"
73
70
  },
74
71
  "scripts": {
75
- "dev": "node -e \"require('fs').rmSync('.next', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\" && next dev -p 17321",
76
- "build": "node -e \"require('fs').rmSync('.next', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\" && next build && node -e \"const fs=require('fs'); for (const p of ['.next/cache','.next/static/development','.next/static/webpack']) fs.rmSync(p, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\" && node scripts/verify-next-static.js",
72
+ "dev": "node scripts/purge-next-artifacts.cjs full && next dev -p 17321",
73
+ "build": "node scripts/purge-next-artifacts.cjs full && next build && node scripts/purge-next-artifacts.cjs publish && node scripts/verify-next-static.js",
74
+ "prebuild": "node scripts/check-workspace-deps.cjs",
77
75
  "prestart": "node scripts/verify-next-static.js",
78
76
  "start": "next start -p 17321",
79
77
  "lint": "eslint src/",
80
- "typecheck": "tsc --noEmit"
78
+ "typecheck": "tsc --noEmit && tsc --project tsconfig.production.json"
81
79
  }
82
80
  }