principles-disciple 1.8.1 → 1.8.2

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 (470) hide show
  1. package/ADVANCED_CONFIG_ZH.md +97 -0
  2. package/AGENT_INSTALL.md +173 -0
  3. package/AGENT_INSTALL_EN.md +173 -0
  4. package/INSTALL.md +256 -0
  5. package/SKILL.md +63 -0
  6. package/docs/COMMAND_REFERENCE.md +76 -0
  7. package/docs/COMMAND_REFERENCE_EN.md +79 -0
  8. package/esbuild.config.js +75 -0
  9. package/openclaw.plugin.json +4 -4
  10. package/package.json +11 -13
  11. package/scripts/build-web.mjs +46 -0
  12. package/scripts/install-dependencies.cjs +47 -0
  13. package/scripts/sync-plugin.mjs +802 -0
  14. package/scripts/verify-build.mjs +109 -0
  15. package/src/agents/nocturnal-dreamer.md +152 -0
  16. package/src/agents/nocturnal-philosopher.md +138 -0
  17. package/src/agents/nocturnal-reflector.md +126 -0
  18. package/src/agents/nocturnal-scribe.md +164 -0
  19. package/src/commands/capabilities.ts +85 -0
  20. package/{dist/commands/context.js → src/commands/context.ts} +78 -38
  21. package/src/commands/evolution-status.ts +146 -0
  22. package/src/commands/export.ts +111 -0
  23. package/src/commands/focus.ts +533 -0
  24. package/src/commands/nocturnal-review.ts +311 -0
  25. package/src/commands/nocturnal-rollout.ts +763 -0
  26. package/src/commands/nocturnal-train.ts +1002 -0
  27. package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
  28. package/src/commands/principle-rollback.ts +27 -0
  29. package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
  30. package/src/commands/samples.ts +60 -0
  31. package/src/commands/strategy.ts +38 -0
  32. package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
  33. package/src/commands/workflow-debug.ts +128 -0
  34. package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
  35. package/src/config/errors.ts +163 -0
  36. package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
  37. package/src/constants/diagnostician.ts +66 -0
  38. package/src/constants/tools.ts +62 -0
  39. package/src/core/adaptive-thresholds.ts +476 -0
  40. package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
  41. package/{dist/core/config.js → src/core/config.ts} +158 -46
  42. package/src/core/control-ui-db.ts +435 -0
  43. package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
  44. package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
  45. package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
  46. package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
  47. package/src/core/empathy-keyword-matcher.ts +327 -0
  48. package/src/core/empathy-types.ts +218 -0
  49. package/src/core/event-log.ts +544 -0
  50. package/src/core/evolution-engine.ts +612 -0
  51. package/src/core/evolution-logger.ts +353 -0
  52. package/src/core/evolution-migration.ts +77 -0
  53. package/src/core/evolution-reducer.ts +731 -0
  54. package/src/core/evolution-types.ts +456 -0
  55. package/src/core/external-training-contract.ts +527 -0
  56. package/src/core/focus-history.ts +1458 -0
  57. package/src/core/hygiene/tracker.ts +117 -0
  58. package/{dist/core/init.js → src/core/init.ts} +39 -26
  59. package/src/core/local-worker-routing.ts +617 -0
  60. package/{dist/core/migration.js → src/core/migration.ts} +18 -11
  61. package/src/core/model-deployment-registry.ts +722 -0
  62. package/src/core/model-training-registry.ts +813 -0
  63. package/src/core/nocturnal-arbiter.ts +706 -0
  64. package/src/core/nocturnal-candidate-scoring.ts +392 -0
  65. package/src/core/nocturnal-compliance.ts +1075 -0
  66. package/src/core/nocturnal-dataset.ts +668 -0
  67. package/src/core/nocturnal-executability.ts +428 -0
  68. package/src/core/nocturnal-export.ts +390 -0
  69. package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
  70. package/src/core/nocturnal-trajectory-extractor.ts +484 -0
  71. package/src/core/nocturnal-trinity.ts +1384 -0
  72. package/src/core/pain.ts +122 -0
  73. package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
  74. package/{dist/core/paths.js → src/core/paths.ts} +13 -4
  75. package/src/core/principle-training-state.ts +450 -0
  76. package/src/core/profile.ts +226 -0
  77. package/src/core/promotion-gate.ts +822 -0
  78. package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
  79. package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +175 -62
  80. package/src/core/shadow-observation-registry.ts +534 -0
  81. package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
  82. package/src/core/thinking-models.ts +217 -0
  83. package/src/core/training-program.ts +630 -0
  84. package/src/core/trajectory-types.ts +243 -0
  85. package/src/core/trajectory.ts +1673 -0
  86. package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
  87. package/src/hooks/bash-risk.ts +171 -0
  88. package/src/hooks/edit-verification.ts +295 -0
  89. package/src/hooks/gate-block-helper.ts +160 -0
  90. package/src/hooks/gate.ts +210 -0
  91. package/src/hooks/gfi-gate.ts +177 -0
  92. package/src/hooks/lifecycle.ts +326 -0
  93. package/{dist/hooks/llm.js → src/hooks/llm.ts} +160 -80
  94. package/src/hooks/message-sanitize.ts +45 -0
  95. package/src/hooks/pain.ts +384 -0
  96. package/src/hooks/progressive-trust-gate.ts +174 -0
  97. package/src/hooks/prompt.ts +920 -0
  98. package/src/hooks/subagent.ts +207 -0
  99. package/src/hooks/thinking-checkpoint.ts +73 -0
  100. package/src/hooks/trajectory-collector.ts +290 -0
  101. package/src/http/principles-console-route.ts +716 -0
  102. package/src/i18n/commands.ts +117 -0
  103. package/src/index.ts +694 -0
  104. package/src/service/central-database.ts +831 -0
  105. package/src/service/control-ui-query-service.ts +888 -0
  106. package/src/service/evolution-query-service.ts +405 -0
  107. package/src/service/evolution-worker.ts +1646 -0
  108. package/src/service/health-query-service.ts +836 -0
  109. package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +235 -79
  110. package/src/service/nocturnal-service.ts +1015 -0
  111. package/src/service/nocturnal-target-selector.ts +532 -0
  112. package/src/service/phase3-input-filter.ts +237 -0
  113. package/src/service/runtime-summary-service.ts +757 -0
  114. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
  115. package/{dist/service/subagent-workflow/empathy-observer-workflow-manager.js → src/service/subagent-workflow/empathy-observer-workflow-manager.ts} +240 -117
  116. package/src/service/subagent-workflow/index.ts +51 -0
  117. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
  118. package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
  119. package/{dist/service/subagent-workflow/types.d.ts → src/service/subagent-workflow/types.ts} +137 -18
  120. package/src/service/subagent-workflow/workflow-store.ts +328 -0
  121. package/src/service/trajectory-service.ts +15 -0
  122. package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
  123. package/src/tools/deep-reflect.ts +349 -0
  124. package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
  125. package/src/types/event-types.ts +453 -0
  126. package/src/types/hygiene-types.ts +31 -0
  127. package/src/types/principle-tree-schema.ts +244 -0
  128. package/src/types/runtime-summary.ts +49 -0
  129. package/src/types.ts +74 -0
  130. package/src/utils/file-lock.ts +391 -0
  131. package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
  132. package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
  133. package/src/utils/io.ts +110 -0
  134. package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
  135. package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
  136. package/src/utils/subagent-probe.ts +94 -0
  137. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
  138. package/templates/pain_settings.json +2 -1
  139. package/tests/README.md +120 -0
  140. package/tests/build-artifacts.test.ts +111 -0
  141. package/tests/commands/evolution-status.test.ts +222 -0
  142. package/tests/commands/evolver.test.ts +22 -0
  143. package/tests/commands/export.test.ts +78 -0
  144. package/tests/commands/nocturnal-review.test.ts +448 -0
  145. package/tests/commands/nocturnal-train.test.ts +97 -0
  146. package/tests/commands/pain.test.ts +108 -0
  147. package/tests/commands/samples.test.ts +65 -0
  148. package/tests/commands/strategy.test.ts +34 -0
  149. package/tests/commands/thinking-os.test.ts +88 -0
  150. package/tests/core/adaptive-thresholds.test.ts +261 -0
  151. package/tests/core/config-service.test.ts +89 -0
  152. package/tests/core/config.test.ts +90 -0
  153. package/tests/core/control-ui-db.test.ts +75 -0
  154. package/tests/core/core-template-guidance.test.ts +21 -0
  155. package/tests/core/detection-funnel.test.ts +63 -0
  156. package/tests/core/detection-service.test.ts +50 -0
  157. package/tests/core/dictionary-service.test.ts +116 -0
  158. package/tests/core/dictionary.test.ts +168 -0
  159. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  160. package/tests/core/event-log.test.ts +181 -0
  161. package/tests/core/evolution-e2e.test.ts +58 -0
  162. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  163. package/tests/core/evolution-engine.test.ts +562 -0
  164. package/tests/core/evolution-logger.test.ts +148 -0
  165. package/tests/core/evolution-migration.test.ts +50 -0
  166. package/tests/core/evolution-paths.test.ts +21 -0
  167. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  168. package/tests/core/evolution-reducer.test.ts +180 -0
  169. package/tests/core/evolution-types-loop.test.ts +48 -0
  170. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  171. package/tests/core/external-training-contract.test.ts +463 -0
  172. package/tests/core/focus-history.test.ts +682 -0
  173. package/tests/core/init-flatten.test.ts +69 -0
  174. package/tests/core/init-refactor.test.ts +87 -0
  175. package/tests/core/init-v1.3.test.ts +46 -0
  176. package/tests/core/init.test.ts +190 -0
  177. package/tests/core/local-worker-routing.test.ts +757 -0
  178. package/tests/core/migration.test.ts +84 -0
  179. package/tests/core/model-deployment-registry.test.ts +845 -0
  180. package/tests/core/model-training-registry.test.ts +889 -0
  181. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  182. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  183. package/tests/core/nocturnal-compliance.test.ts +646 -0
  184. package/tests/core/nocturnal-dataset.test.ts +892 -0
  185. package/tests/core/nocturnal-executability.test.ts +357 -0
  186. package/tests/core/nocturnal-export.test.ts +462 -0
  187. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  188. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  189. package/tests/core/nocturnal-trinity.test.ts +953 -0
  190. package/tests/core/pain.test.ts +33 -0
  191. package/tests/core/path-resolver.test.ts +57 -0
  192. package/tests/core/paths-refactor.test.ts +42 -0
  193. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  194. package/tests/core/principle-training-state.test.ts +712 -0
  195. package/tests/core/profile.test.ts +56 -0
  196. package/tests/core/promotion-gate.test.ts +556 -0
  197. package/tests/core/risk-calculator.test.ts +168 -0
  198. package/tests/core/session-tracker.test.ts +191 -0
  199. package/tests/core/training-program.test.ts +472 -0
  200. package/tests/core/trajectory.test.ts +265 -0
  201. package/tests/core/workspace-context-factory.test.ts +18 -0
  202. package/tests/core/workspace-context.test.ts +134 -0
  203. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  204. package/tests/fixtures/production-compatibility.test.ts +147 -0
  205. package/tests/fixtures/production-mock-generator.ts +282 -0
  206. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  207. package/tests/hooks/bash-risk.test.ts +81 -0
  208. package/tests/hooks/edit-verification.test.ts +678 -0
  209. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  210. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  211. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  212. package/tests/hooks/gate.test.ts +271 -0
  213. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  214. package/tests/hooks/gfi-gate.test.ts +669 -0
  215. package/tests/hooks/lifecycle.test.ts +248 -0
  216. package/tests/hooks/llm.test.ts +308 -0
  217. package/tests/hooks/message-sanitize.test.ts +36 -0
  218. package/tests/hooks/pain.test.ts +141 -0
  219. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  220. package/tests/hooks/prompt.test.ts +1411 -0
  221. package/tests/hooks/subagent.test.ts +467 -0
  222. package/tests/hooks/thinking-gate.test.ts +313 -0
  223. package/tests/http/principles-console-route.test.ts +140 -0
  224. package/tests/hygiene-tracker.test.ts +77 -0
  225. package/tests/index.integration.test.ts +179 -0
  226. package/tests/index.shadow-routing.integration.test.ts +140 -0
  227. package/tests/index.test.ts +9 -0
  228. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  229. package/tests/service/control-ui-query-service.test.ts +121 -0
  230. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  231. package/tests/service/evolution-worker.test.ts +585 -0
  232. package/tests/service/nocturnal-runtime.test.ts +470 -0
  233. package/tests/service/nocturnal-service.test.ts +577 -0
  234. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  235. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  236. package/tests/service/phase3-input-filter.test.ts +289 -0
  237. package/tests/service/runtime-summary-service.test.ts +919 -0
  238. package/tests/task-compliance.test.ts +166 -0
  239. package/tests/test-utils.ts +48 -0
  240. package/tests/tools/critique-prompt.test.ts +260 -0
  241. package/tests/tools/deep-reflect.test.ts +232 -0
  242. package/tests/tools/model-index.test.ts +246 -0
  243. package/tests/ui/app.test.tsx +114 -0
  244. package/tests/utils/file-lock.test.ts +407 -0
  245. package/tests/utils/hashing.test.ts +32 -0
  246. package/tests/utils/io.test.ts +39 -0
  247. package/tests/utils/nlp.test.ts +53 -0
  248. package/tests/utils/plugin-logger.test.ts +156 -0
  249. package/tsconfig.json +16 -0
  250. package/tsconfig.tsbuildinfo +1 -0
  251. package/ui/src/App.tsx +45 -0
  252. package/ui/src/api.ts +216 -0
  253. package/ui/src/charts.tsx +586 -0
  254. package/ui/src/components/ErrorState.tsx +6 -0
  255. package/ui/src/components/Loading.tsx +13 -0
  256. package/ui/src/components/ProtectedRoute.tsx +12 -0
  257. package/ui/src/components/Shell.tsx +91 -0
  258. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  259. package/ui/src/components/index.ts +5 -0
  260. package/ui/src/context/auth.tsx +80 -0
  261. package/ui/src/context/theme.tsx +66 -0
  262. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  263. package/ui/src/i18n/ui.ts +363 -0
  264. package/ui/src/main.tsx +16 -0
  265. package/ui/src/pages/EvolutionPage.tsx +352 -0
  266. package/ui/src/pages/FeedbackPage.tsx +140 -0
  267. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  268. package/ui/src/pages/LoginPage.tsx +88 -0
  269. package/ui/src/pages/OverviewPage.tsx +238 -0
  270. package/ui/src/pages/SamplesPage.tsx +174 -0
  271. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  272. package/ui/src/styles.css +1661 -0
  273. package/ui/src/types.ts +368 -0
  274. package/ui/src/utils/format.ts +15 -0
  275. package/vitest.config.ts +23 -0
  276. package/dist/commands/capabilities.d.ts +0 -3
  277. package/dist/commands/capabilities.js +0 -73
  278. package/dist/commands/context.d.ts +0 -5
  279. package/dist/commands/evolution-status.d.ts +0 -4
  280. package/dist/commands/evolution-status.js +0 -117
  281. package/dist/commands/evolver.d.ts +0 -9
  282. package/dist/commands/evolver.js +0 -26
  283. package/dist/commands/export.d.ts +0 -2
  284. package/dist/commands/export.js +0 -98
  285. package/dist/commands/focus.d.ts +0 -14
  286. package/dist/commands/focus.js +0 -457
  287. package/dist/commands/nocturnal-review.d.ts +0 -24
  288. package/dist/commands/nocturnal-review.js +0 -265
  289. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  290. package/dist/commands/nocturnal-rollout.js +0 -671
  291. package/dist/commands/nocturnal-train.d.ts +0 -25
  292. package/dist/commands/nocturnal-train.js +0 -919
  293. package/dist/commands/pain.d.ts +0 -5
  294. package/dist/commands/principle-rollback.d.ts +0 -4
  295. package/dist/commands/principle-rollback.js +0 -22
  296. package/dist/commands/rollback.d.ts +0 -19
  297. package/dist/commands/samples.d.ts +0 -2
  298. package/dist/commands/samples.js +0 -55
  299. package/dist/commands/strategy.d.ts +0 -3
  300. package/dist/commands/strategy.js +0 -29
  301. package/dist/commands/thinking-os.d.ts +0 -2
  302. package/dist/config/defaults/runtime.d.ts +0 -40
  303. package/dist/config/errors.d.ts +0 -84
  304. package/dist/config/errors.js +0 -94
  305. package/dist/config/index.js +0 -7
  306. package/dist/constants/diagnostician.d.ts +0 -12
  307. package/dist/constants/diagnostician.js +0 -56
  308. package/dist/constants/tools.d.ts +0 -17
  309. package/dist/constants/tools.js +0 -54
  310. package/dist/core/adaptive-thresholds.d.ts +0 -186
  311. package/dist/core/adaptive-thresholds.js +0 -300
  312. package/dist/core/config-service.d.ts +0 -15
  313. package/dist/core/config.d.ts +0 -129
  314. package/dist/core/control-ui-db.d.ts +0 -95
  315. package/dist/core/control-ui-db.js +0 -292
  316. package/dist/core/detection-funnel.d.ts +0 -33
  317. package/dist/core/detection-service.d.ts +0 -15
  318. package/dist/core/dictionary-service.d.ts +0 -15
  319. package/dist/core/dictionary.d.ts +0 -38
  320. package/dist/core/event-log.d.ts +0 -82
  321. package/dist/core/event-log.js +0 -463
  322. package/dist/core/evolution-engine.d.ts +0 -118
  323. package/dist/core/evolution-engine.js +0 -464
  324. package/dist/core/evolution-logger.d.ts +0 -137
  325. package/dist/core/evolution-logger.js +0 -256
  326. package/dist/core/evolution-migration.d.ts +0 -5
  327. package/dist/core/evolution-migration.js +0 -65
  328. package/dist/core/evolution-reducer.d.ts +0 -98
  329. package/dist/core/evolution-reducer.js +0 -465
  330. package/dist/core/evolution-types.d.ts +0 -287
  331. package/dist/core/evolution-types.js +0 -78
  332. package/dist/core/external-training-contract.d.ts +0 -276
  333. package/dist/core/external-training-contract.js +0 -269
  334. package/dist/core/focus-history.d.ts +0 -210
  335. package/dist/core/focus-history.js +0 -1185
  336. package/dist/core/hygiene/tracker.d.ts +0 -22
  337. package/dist/core/hygiene/tracker.js +0 -106
  338. package/dist/core/init.d.ts +0 -12
  339. package/dist/core/local-worker-routing.d.ts +0 -175
  340. package/dist/core/local-worker-routing.js +0 -525
  341. package/dist/core/migration.d.ts +0 -6
  342. package/dist/core/model-deployment-registry.d.ts +0 -218
  343. package/dist/core/model-deployment-registry.js +0 -503
  344. package/dist/core/model-training-registry.d.ts +0 -295
  345. package/dist/core/model-training-registry.js +0 -475
  346. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  347. package/dist/core/nocturnal-arbiter.js +0 -534
  348. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  349. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  350. package/dist/core/nocturnal-compliance.d.ts +0 -175
  351. package/dist/core/nocturnal-compliance.js +0 -824
  352. package/dist/core/nocturnal-dataset.d.ts +0 -224
  353. package/dist/core/nocturnal-dataset.js +0 -443
  354. package/dist/core/nocturnal-executability.d.ts +0 -85
  355. package/dist/core/nocturnal-executability.js +0 -331
  356. package/dist/core/nocturnal-export.d.ts +0 -124
  357. package/dist/core/nocturnal-export.js +0 -275
  358. package/dist/core/nocturnal-paths.d.ts +0 -124
  359. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  360. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  361. package/dist/core/nocturnal-trinity.d.ts +0 -311
  362. package/dist/core/nocturnal-trinity.js +0 -880
  363. package/dist/core/pain.d.ts +0 -4
  364. package/dist/core/pain.js +0 -70
  365. package/dist/core/path-resolver.d.ts +0 -46
  366. package/dist/core/paths.d.ts +0 -65
  367. package/dist/core/principle-training-state.d.ts +0 -121
  368. package/dist/core/principle-training-state.js +0 -321
  369. package/dist/core/profile.d.ts +0 -62
  370. package/dist/core/profile.js +0 -210
  371. package/dist/core/promotion-gate.d.ts +0 -238
  372. package/dist/core/promotion-gate.js +0 -529
  373. package/dist/core/risk-calculator.d.ts +0 -22
  374. package/dist/core/session-tracker.d.ts +0 -101
  375. package/dist/core/shadow-observation-registry.d.ts +0 -217
  376. package/dist/core/shadow-observation-registry.js +0 -308
  377. package/dist/core/system-logger.d.ts +0 -8
  378. package/dist/core/thinking-models.d.ts +0 -38
  379. package/dist/core/thinking-models.js +0 -170
  380. package/dist/core/training-program.d.ts +0 -233
  381. package/dist/core/training-program.js +0 -433
  382. package/dist/core/trajectory.d.ts +0 -411
  383. package/dist/core/trajectory.js +0 -1307
  384. package/dist/core/workspace-context.d.ts +0 -71
  385. package/dist/hooks/bash-risk.d.ts +0 -57
  386. package/dist/hooks/bash-risk.js +0 -137
  387. package/dist/hooks/edit-verification.d.ts +0 -62
  388. package/dist/hooks/edit-verification.js +0 -256
  389. package/dist/hooks/gate-block-helper.d.ts +0 -44
  390. package/dist/hooks/gate-block-helper.js +0 -119
  391. package/dist/hooks/gate.d.ts +0 -24
  392. package/dist/hooks/gate.js +0 -173
  393. package/dist/hooks/gfi-gate.d.ts +0 -40
  394. package/dist/hooks/gfi-gate.js +0 -113
  395. package/dist/hooks/lifecycle.d.ts +0 -5
  396. package/dist/hooks/lifecycle.js +0 -284
  397. package/dist/hooks/llm.d.ts +0 -13
  398. package/dist/hooks/message-sanitize.d.ts +0 -3
  399. package/dist/hooks/message-sanitize.js +0 -37
  400. package/dist/hooks/pain.d.ts +0 -5
  401. package/dist/hooks/pain.js +0 -301
  402. package/dist/hooks/progressive-trust-gate.d.ts +0 -52
  403. package/dist/hooks/progressive-trust-gate.js +0 -134
  404. package/dist/hooks/prompt.d.ts +0 -49
  405. package/dist/hooks/prompt.js +0 -905
  406. package/dist/hooks/subagent.d.ts +0 -10
  407. package/dist/hooks/subagent.js +0 -387
  408. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  409. package/dist/hooks/thinking-checkpoint.js +0 -51
  410. package/dist/hooks/trajectory-collector.d.ts +0 -32
  411. package/dist/hooks/trajectory-collector.js +0 -256
  412. package/dist/http/principles-console-route.d.ts +0 -9
  413. package/dist/http/principles-console-route.js +0 -681
  414. package/dist/i18n/commands.d.ts +0 -26
  415. package/dist/i18n/commands.js +0 -116
  416. package/dist/index.d.ts +0 -7
  417. package/dist/index.js +0 -581
  418. package/dist/service/central-database.d.ts +0 -104
  419. package/dist/service/central-database.js +0 -649
  420. package/dist/service/control-ui-query-service.d.ts +0 -221
  421. package/dist/service/control-ui-query-service.js +0 -543
  422. package/dist/service/empathy-observer-manager.d.ts +0 -88
  423. package/dist/service/empathy-observer-manager.js +0 -414
  424. package/dist/service/evolution-query-service.d.ts +0 -155
  425. package/dist/service/evolution-query-service.js +0 -258
  426. package/dist/service/evolution-worker.d.ts +0 -101
  427. package/dist/service/evolution-worker.js +0 -975
  428. package/dist/service/health-query-service.d.ts +0 -170
  429. package/dist/service/health-query-service.js +0 -662
  430. package/dist/service/nocturnal-runtime.d.ts +0 -183
  431. package/dist/service/nocturnal-service.d.ts +0 -163
  432. package/dist/service/nocturnal-service.js +0 -787
  433. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  434. package/dist/service/nocturnal-target-selector.js +0 -315
  435. package/dist/service/phase3-input-filter.d.ts +0 -73
  436. package/dist/service/phase3-input-filter.js +0 -172
  437. package/dist/service/runtime-summary-service.d.ts +0 -122
  438. package/dist/service/runtime-summary-service.js +0 -485
  439. package/dist/service/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
  440. package/dist/service/subagent-workflow/index.d.ts +0 -4
  441. package/dist/service/subagent-workflow/index.js +0 -3
  442. package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
  443. package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
  444. package/dist/service/subagent-workflow/types.js +0 -11
  445. package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
  446. package/dist/service/subagent-workflow/workflow-store.js +0 -165
  447. package/dist/service/trajectory-service.d.ts +0 -2
  448. package/dist/service/trajectory-service.js +0 -15
  449. package/dist/tools/critique-prompt.d.ts +0 -14
  450. package/dist/tools/deep-reflect.d.ts +0 -39
  451. package/dist/tools/deep-reflect.js +0 -350
  452. package/dist/tools/model-index.d.ts +0 -9
  453. package/dist/types/event-types.d.ts +0 -306
  454. package/dist/types/event-types.js +0 -106
  455. package/dist/types/hygiene-types.d.ts +0 -20
  456. package/dist/types/hygiene-types.js +0 -12
  457. package/dist/types/runtime-summary.d.ts +0 -47
  458. package/dist/types/runtime-summary.js +0 -1
  459. package/dist/types.d.ts +0 -50
  460. package/dist/types.js +0 -22
  461. package/dist/utils/file-lock.d.ts +0 -71
  462. package/dist/utils/file-lock.js +0 -309
  463. package/dist/utils/glob-match.d.ts +0 -28
  464. package/dist/utils/hashing.d.ts +0 -9
  465. package/dist/utils/io.d.ts +0 -6
  466. package/dist/utils/io.js +0 -106
  467. package/dist/utils/nlp.d.ts +0 -9
  468. package/dist/utils/plugin-logger.d.ts +0 -39
  469. package/dist/utils/subagent-probe.d.ts +0 -34
  470. package/dist/utils/subagent-probe.js +0 -81
@@ -0,0 +1,349 @@
1
+ import type { OpenClawPluginApi } from '../openclaw-sdk.js';
2
+ import { Type } from '@sinclair/typebox';
3
+ import * as fs from 'fs';
4
+ import * as path from 'node:path';
5
+ import { EventLogService } from '../core/event-log.js';
6
+ import { buildCritiquePromptV2 } from './critique-prompt.js';
7
+ import { resolvePdPath } from '../core/paths.js';
8
+ import { resolveWorkspaceDirFromApi } from '../core/path-resolver.js';
9
+ import { reflectionLogRetentionDays } from '../types.js';
10
+ import {
11
+ DeepReflectWorkflowManager,
12
+ deepReflectWorkflowSpec,
13
+ type DeepReflectTaskInput,
14
+ } from '../service/subagent-workflow/index.js';
15
+
16
+ function writeToReflectionLog(
17
+ workspaceDir: string,
18
+ context: string,
19
+ insights: string,
20
+ modelId?: string,
21
+ depth?: number
22
+ ): void {
23
+ const reflectionLogPath = resolvePdPath(workspaceDir, 'REFLECTION_LOG');
24
+ const memoryDir = path.dirname(reflectionLogPath);
25
+ if (!fs.existsSync(memoryDir)) {
26
+ fs.mkdirSync(memoryDir, { recursive: true });
27
+ }
28
+
29
+ const timestamp = new Date().toISOString();
30
+ const entry = `
31
+ ---
32
+ ## Reflection at ${timestamp}
33
+ **Model**: ${modelId || 'auto-select'}
34
+ **Depth**: ${depth || 2}
35
+
36
+ ### Context
37
+ ${context.substring(0, 500)}${context.length > 500 ? '...' : ''}
38
+
39
+ ### Insights
40
+ ${insights}
41
+
42
+ `;
43
+
44
+ const header = `# Reflection Log\n\n> Auto-generated by Deep Reflection Tool\n> Retention: ${reflectionLogRetentionDays} days\n`;
45
+
46
+ let existingContent = '';
47
+ if (fs.existsSync(reflectionLogPath)) {
48
+ existingContent = fs.readFileSync(reflectionLogPath, 'utf8');
49
+ }
50
+
51
+ const newContent = header + entry + existingContent.replace(header, '');
52
+
53
+ const tempPath = `${reflectionLogPath}.tmp`;
54
+ fs.writeFileSync(tempPath, newContent, 'utf8');
55
+ fs.renameSync(tempPath, reflectionLogPath);
56
+ }
57
+
58
+ function cleanupReflectionLog(workspaceDir: string): void {
59
+ const reflectionLogPath = resolvePdPath(workspaceDir, 'REFLECTION_LOG');
60
+
61
+ if (!fs.existsSync(reflectionLogPath)) return;
62
+
63
+ const content = fs.readFileSync(reflectionLogPath, 'utf8');
64
+ const cutoffDate = new Date();
65
+ cutoffDate.setDate(cutoffDate.getDate() - reflectionLogRetentionDays);
66
+
67
+ const entryPattern = /---\n## Reflection at (\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})/g;
68
+ const parts = content.split(entryPattern);
69
+
70
+ const header = parts[0];
71
+ const validEntries: string[] = [];
72
+
73
+ for (let i = 1; i < parts.length; i += 2) {
74
+ const timestamp = parts[i];
75
+ const entryContent = parts[i + 1] || '';
76
+
77
+ const entryDate = new Date(timestamp);
78
+ if (entryDate >= cutoffDate) {
79
+ validEntries.push(`---\n## Reflection at ${timestamp}${entryContent}`);
80
+ }
81
+ }
82
+
83
+ if (validEntries.length < (parts.length - 1) / 2) {
84
+ const newContent = header + validEntries.join('');
85
+
86
+ const tempPath = `${reflectionLogPath}.tmp`;
87
+ fs.writeFileSync(tempPath, newContent, 'utf8');
88
+ fs.renameSync(tempPath, reflectionLogPath);
89
+ }
90
+ }
91
+
92
+ interface DeepReflectionConfig {
93
+ enabled: boolean;
94
+ mode: 'auto' | 'forced' | 'disabled';
95
+ auto_trigger_conditions: {
96
+ min_tool_calls: number;
97
+ error_rate_threshold: number;
98
+ high_gfi_threshold: number;
99
+ };
100
+ modelsDir?: string;
101
+ timeout_ms?: number;
102
+ }
103
+
104
+ const DEFAULT_CONFIG: DeepReflectionConfig = {
105
+ enabled: true,
106
+ mode: 'auto',
107
+ auto_trigger_conditions: {
108
+ min_tool_calls: 5,
109
+ error_rate_threshold: 0.3,
110
+ high_gfi_threshold: 70
111
+ },
112
+ timeout_ms: 60000
113
+ };
114
+
115
+ function safeLog(
116
+ api: OpenClawPluginApi | undefined,
117
+ level: 'info' | 'debug' | 'warn' | 'error',
118
+ message: string
119
+ ): void {
120
+ try {
121
+ if (api?.logger && typeof api.logger[level] === 'function') {
122
+ api.logger[level](message);
123
+ }
124
+ } catch {
125
+ // Never recurse on logger failures
126
+ }
127
+ }
128
+
129
+ function loadConfig(workspaceDir: string | undefined, api: OpenClawPluginApi): DeepReflectionConfig {
130
+ if (!workspaceDir) return DEFAULT_CONFIG;
131
+ const configPath = resolvePdPath(workspaceDir, 'PAIN_SETTINGS');
132
+ try {
133
+ if (fs.existsSync(configPath)) {
134
+ const raw = fs.readFileSync(configPath, 'utf-8');
135
+ const settings = JSON.parse(raw);
136
+ return { ...DEFAULT_CONFIG, ...settings.deep_reflection };
137
+ }
138
+ } catch (err) {
139
+ safeLog(api, 'warn', `[DeepReflect] Failed to load config: ${String(err)}`);
140
+ }
141
+ return DEFAULT_CONFIG;
142
+ }
143
+
144
+ function readStringParam(rawParams: Record<string, unknown>, key: string): string | undefined {
145
+ const value = rawParams[key];
146
+ if (typeof value === 'string') return value.trim() || undefined;
147
+
148
+ const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();
149
+ const snakeValue = rawParams[snakeKey];
150
+ if (typeof snakeValue === 'string') return snakeValue.trim() || undefined;
151
+
152
+ return undefined;
153
+ }
154
+
155
+ function readNumberParam(rawParams: Record<string, unknown>, key: string): number | undefined {
156
+ const value = rawParams[key];
157
+ if (typeof value === 'number') return value;
158
+
159
+ const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();
160
+ const snakeValue = rawParams[snakeKey];
161
+ if (typeof snakeValue === 'number') return snakeValue;
162
+
163
+ return undefined;
164
+ }
165
+
166
+ export function createDeepReflectTool(api: OpenClawPluginApi) {
167
+ return {
168
+ name: 'deep_reflect',
169
+ description: '执行深层次的元认知反思,分析当前任务的潜在风险、逻辑漏洞或架构改进点。',
170
+ parameters: Type.Object({
171
+ context: Type.String({ description: '需要反思的任务上下文、代码片段或当前遇到的困难。' }),
172
+ depth: Type.Optional(Type.Number({ description: '反思深度 (1-3)。1: 快速扫描, 2: 均衡分析, 3: 彻底解构。默认为 2。', minimum: 1, maximum: 3 })),
173
+ model_id: Type.Optional(Type.String({ description: '可选:强制指定使用的思维模型 ID。' }))
174
+ }),
175
+
176
+ async execute(
177
+ _toolCallId: string,
178
+ rawParams: Record<string, unknown>
179
+ ): Promise<{ content: Array<{ type: string; text: string }> }> {
180
+ const context = readStringParam(rawParams, 'context') || '';
181
+ const depth = readNumberParam(rawParams, 'depth') ?? 2;
182
+ const model_id = readStringParam(rawParams, 'model_id');
183
+
184
+ if (!context) {
185
+ return {
186
+ content: [{
187
+ type: 'text',
188
+ text: '❌ 错误: 必须提供反思上下文 (context)。'
189
+ }]
190
+ };
191
+ }
192
+
193
+ const effectiveWorkspaceDir =
194
+ (api.config?.workspaceDir as string)
195
+ || resolveWorkspaceDirFromApi(api)
196
+ || api.resolvePath?.('.');
197
+
198
+ if (!effectiveWorkspaceDir) {
199
+ return {
200
+ content: [{
201
+ type: 'text',
202
+ text: '❌ 反思执行失败: Workspace directory is required for deep reflection。请检查 API 配置或网络连接。'
203
+ }]
204
+ };
205
+ }
206
+
207
+ const config = loadConfig(effectiveWorkspaceDir, api);
208
+ if (config.mode === 'disabled' || !config.enabled) {
209
+ return {
210
+ content: [{
211
+ type: 'text',
212
+ text: '⏭️ Deep Reflection 已禁用。'
213
+ }]
214
+ };
215
+ }
216
+
217
+ if (model_id) {
218
+ safeLog(api, 'warn', `[DeepReflect] The 'model_id' parameter is deprecated. The agent will now auto-select models based on the context index.`);
219
+ }
220
+
221
+ const stateDir = resolvePdPath(effectiveWorkspaceDir, 'STATE_DIR');
222
+ const eventLog = EventLogService.get(stateDir, api.logger);
223
+
224
+ try {
225
+ // Use workspaceDir as parentSessionId proxy (OpenClaw does not expose sessionId to tools)
226
+ const parentSessionId = effectiveWorkspaceDir.replace(/[^a-zA-Z0-9_-]/g, '_').substring(0, 64);
227
+
228
+ const manager = new DeepReflectWorkflowManager({
229
+ workspaceDir: effectiveWorkspaceDir,
230
+ logger: api.logger,
231
+ subagent: api.runtime.subagent as any,
232
+ });
233
+
234
+ const taskInput: DeepReflectTaskInput = { context, depth, model_id };
235
+
236
+ const handle = await manager.startWorkflow(deepReflectWorkflowSpec, {
237
+ parentSessionId,
238
+ workspaceDir: effectiveWorkspaceDir,
239
+ taskInput,
240
+ });
241
+
242
+ // Wait for workflow completion via polling
243
+ const startTime = Date.now();
244
+ const timeoutMs = config.timeout_ms ?? 60000;
245
+ const pollInterval = 500;
246
+
247
+ while (Date.now() - startTime < timeoutMs) {
248
+ await new Promise(resolve => setTimeout(resolve, pollInterval));
249
+ const workflow = (manager as any).store.getWorkflow(handle.workflowId);
250
+ if (!workflow) break;
251
+
252
+ if (workflow.state === 'completed') {
253
+ // Extract insights from reflection log (written by persistResult)
254
+ const reflectionLogPath = resolvePdPath(effectiveWorkspaceDir, 'REFLECTION_LOG');
255
+ let insights = '';
256
+ if (fs.existsSync(reflectionLogPath)) {
257
+ const content = fs.readFileSync(reflectionLogPath, 'utf8');
258
+ // Extract most recent entry
259
+ const match = content.match(/### Insights\n([\s\S]*?)(?=---|$)/);
260
+ if (match) {
261
+ insights = match[1].trim();
262
+ }
263
+ }
264
+
265
+ if (eventLog) {
266
+ eventLog.recordDeepReflection(handle.childSessionKey, {
267
+ modelId: model_id || 'auto-select',
268
+ modelSelectionMode: model_id ? 'manual' : 'auto',
269
+ depth,
270
+ contextPreview: context.substring(0, 200),
271
+ resultPreview: insights.substring(0, 300),
272
+ durationMs: Date.now() - startTime,
273
+ passed: true,
274
+ timeout: false
275
+ });
276
+ }
277
+
278
+ manager.dispose();
279
+
280
+ return {
281
+ content: [{
282
+ type: 'text',
283
+ text: `
284
+ # 💎 Deep Reflection Insights
285
+ ---
286
+ **Selected Model(s)**: ${model_id || 'auto-select'}
287
+ **Reflection Depth**: ${depth}
288
+ **Analysis Duration**: ${((Date.now() - startTime) / 1000).toFixed(1)}s
289
+
290
+ ${insights || '反思完成,详见 REFLECTION_LOG。'}
291
+
292
+ ---
293
+ *Generated by Principles Disciple Meta-Cognitive Engine*
294
+ `.trim()
295
+ }]
296
+ };
297
+ }
298
+
299
+ if (workflow.state === 'terminal_error' || workflow.state === 'expired') {
300
+ manager.dispose();
301
+ throw new Error(`Deep-reflect workflow failed: ${workflow.state}`);
302
+ }
303
+ }
304
+
305
+ manager.dispose();
306
+ return {
307
+ content: [{
308
+ type: 'text',
309
+ text: '⚠️ 反思任务执行超时。你可以尝试减少上下文长度或增加深度。'
310
+ }]
311
+ };
312
+
313
+ } catch (err) {
314
+ const errorMsg = err instanceof Error ? err.message : String(err);
315
+ safeLog(api, 'error', `[DeepReflect] Reflection failed: ${errorMsg}`);
316
+
317
+ if (eventLog) {
318
+ eventLog.recordDeepReflection('deep-reflect-error', {
319
+ modelId: model_id || 'auto-select',
320
+ modelSelectionMode: model_id ? 'manual' : 'auto',
321
+ depth,
322
+ contextPreview: context.substring(0, 200),
323
+ durationMs: 0,
324
+ passed: false,
325
+ timeout: errorMsg.toLowerCase().includes('timeout'),
326
+ error: errorMsg
327
+ });
328
+ }
329
+
330
+ return {
331
+ content: [{
332
+ type: 'text',
333
+ text: `❌ 反思执行失败: ${errorMsg}。请检查 API 配置或网络连接。`
334
+ }]
335
+ };
336
+ }
337
+ }
338
+ };
339
+ }
340
+
341
+ export const deepReflectTool = {
342
+ name: 'deep_reflect',
343
+ description: '执行深层次的元认知反思,分析当前任务的潜在风险、逻辑漏洞或架构改进点。',
344
+ parameters: Type.Object({
345
+ context: Type.String({ description: '需要反思的任务上下文、代码片段或当前遇到的困难。' }),
346
+ depth: Type.Optional(Type.Number({ description: '反思深度 (1-3)。1: 快速扫描, 2: 均衡分析, 3: 彻底解构。默认为 2。', minimum: 1, maximum: 3 })),
347
+ model_id: Type.Optional(Type.String({ description: '可选:强制指定使用的思维模型 ID。' }))
348
+ }),
349
+ };
@@ -1,81 +1,97 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import type { OpenClawPluginApi } from '../openclaw-sdk.js';
3
4
  import { WorkspaceContext } from '../core/workspace-context.js';
5
+
4
6
  // 安全日志函数
5
- function safeLog(api, level, message) {
7
+ function safeLog(
8
+ api: OpenClawPluginApi | undefined,
9
+ level: 'info' | 'debug' | 'warn' | 'error',
10
+ message: string
11
+ ): void {
6
12
  try {
7
13
  if (api?.logger && typeof api.logger[level] === 'function') {
8
14
  api.logger[level](message);
9
15
  }
10
- }
11
- catch {
16
+ } catch {
12
17
  // Ignore logging errors
13
18
  }
14
19
  }
20
+
15
21
  /**
16
22
  * 默认消息
17
23
  */
18
24
  const DEFAULT_MESSAGE = '(暂无扩展思维模型)';
25
+
19
26
  /**
20
27
  * 索引文件最大大小(字节)
21
28
  */
22
29
  const MAX_INDEX_SIZE = 50 * 1024; // 50KB
30
+
23
31
  /**
24
32
  * 加载自定义配置
25
33
  */
26
- function loadCustomConfig(wctx) {
34
+ function loadCustomConfig(wctx: WorkspaceContext): { modelsDir?: string } | undefined {
27
35
  try {
28
36
  const config = wctx.config;
29
37
  const modelsDir = config.get('deep_reflection.modelsDir');
30
38
  if (typeof modelsDir === 'string' && modelsDir.trim()) {
31
39
  return { modelsDir: modelsDir.trim() };
32
40
  }
33
- }
34
- catch {
41
+ } catch {
35
42
  // Ignore config errors
36
43
  }
37
44
  return undefined;
38
45
  }
46
+
39
47
  /**
40
48
  * 加载模型索引并返回格式化后的字符串
41
- *
49
+ *
42
50
  * @param workspaceDir 工作区目录
43
51
  * @param api OpenClaw 插件 API
44
52
  * @returns 格式化后的模型索引内容或默认消息
45
53
  */
46
- export function loadModelIndex(workspaceDir, api) {
47
- if (!workspaceDir)
48
- return DEFAULT_MESSAGE;
54
+ export function loadModelIndex(
55
+ workspaceDir: string,
56
+ api?: OpenClawPluginApi
57
+ ): string {
58
+ if (!workspaceDir) return DEFAULT_MESSAGE;
59
+
49
60
  try {
50
61
  const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
51
62
  const customConfig = loadCustomConfig(wctx);
52
- let modelsDir;
63
+
64
+ let modelsDir: string;
53
65
  if (customConfig?.modelsDir) {
54
- modelsDir = path.isAbsolute(customConfig.modelsDir)
55
- ? customConfig.modelsDir
66
+ modelsDir = path.isAbsolute(customConfig.modelsDir)
67
+ ? customConfig.modelsDir
56
68
  : path.join(workspaceDir, customConfig.modelsDir);
69
+
57
70
  // 👈 关键修复:显式输出测试用例期待的 debug 日志
58
71
  safeLog(api, 'debug', `[DeepReflect] Using custom models dir: ${modelsDir}`);
59
- }
60
- else {
72
+ } else {
61
73
  modelsDir = wctx.resolve('MODELS_DIR');
62
74
  }
75
+
63
76
  const indexPath = path.join(modelsDir, '_INDEX.md');
77
+
64
78
  if (!fs.existsSync(indexPath)) {
65
79
  if (fs.existsSync(modelsDir)) {
66
80
  safeLog(api, 'warn', `[DeepReflect] _INDEX.md not found but ${modelsDir.replace(workspaceDir, '')} exists. Please create an index file.`);
67
81
  }
68
82
  return DEFAULT_MESSAGE;
69
83
  }
84
+
70
85
  const stats = fs.statSync(indexPath);
71
86
  if (stats.size > MAX_INDEX_SIZE) {
72
87
  safeLog(api, 'warn', `[DeepReflect] Index file too large (${stats.size} bytes). Max is ${MAX_INDEX_SIZE}.`);
73
88
  return DEFAULT_MESSAGE;
74
89
  }
90
+
75
91
  const content = fs.readFileSync(indexPath, 'utf-8');
76
92
  return content.trim() || DEFAULT_MESSAGE;
77
- }
78
- catch (err) {
93
+
94
+ } catch (err) {
79
95
  safeLog(api, 'warn', `[DeepReflect] Failed to load model index: ${String(err)}`);
80
96
  return DEFAULT_MESSAGE;
81
97
  }