principles-disciple 1.8.0 → 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 (460) 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 +6 -1
  10. package/package.json +13 -15
  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} +185 -63
  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} +166 -139
  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} +263 -36
  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/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
  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/src/service/subagent-workflow/types.ts +378 -0
  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 -127
  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 -99
  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 -12
  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 -51
  403. package/dist/hooks/progressive-trust-gate.js +0 -89
  404. package/dist/hooks/prompt.d.ts +0 -47
  405. package/dist/hooks/prompt.js +0 -884
  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 -567
  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 -52
  423. package/dist/service/empathy-observer-manager.js +0 -229
  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 -974
  428. package/dist/service/nocturnal-runtime.d.ts +0 -183
  429. package/dist/service/nocturnal-service.d.ts +0 -163
  430. package/dist/service/nocturnal-service.js +0 -787
  431. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  432. package/dist/service/nocturnal-target-selector.js +0 -315
  433. package/dist/service/phase3-input-filter.d.ts +0 -73
  434. package/dist/service/phase3-input-filter.js +0 -172
  435. package/dist/service/runtime-summary-service.d.ts +0 -122
  436. package/dist/service/runtime-summary-service.js +0 -485
  437. package/dist/service/trajectory-service.d.ts +0 -2
  438. package/dist/service/trajectory-service.js +0 -15
  439. package/dist/tools/critique-prompt.d.ts +0 -14
  440. package/dist/tools/deep-reflect.d.ts +0 -39
  441. package/dist/tools/deep-reflect.js +0 -350
  442. package/dist/tools/model-index.d.ts +0 -9
  443. package/dist/types/event-types.d.ts +0 -306
  444. package/dist/types/event-types.js +0 -106
  445. package/dist/types/hygiene-types.d.ts +0 -20
  446. package/dist/types/hygiene-types.js +0 -12
  447. package/dist/types/runtime-summary.d.ts +0 -47
  448. package/dist/types/runtime-summary.js +0 -1
  449. package/dist/types.d.ts +0 -50
  450. package/dist/types.js +0 -22
  451. package/dist/utils/file-lock.d.ts +0 -71
  452. package/dist/utils/file-lock.js +0 -309
  453. package/dist/utils/glob-match.d.ts +0 -28
  454. package/dist/utils/hashing.d.ts +0 -9
  455. package/dist/utils/io.d.ts +0 -6
  456. package/dist/utils/io.js +0 -106
  457. package/dist/utils/nlp.d.ts +0 -9
  458. package/dist/utils/plugin-logger.d.ts +0 -39
  459. package/dist/utils/subagent-probe.d.ts +0 -34
  460. package/dist/utils/subagent-probe.js +0 -81
@@ -0,0 +1,363 @@
1
+ /**
2
+ * UI internationalization module.
3
+ * Provides bilingual strings for the Principles Console WebUI.
4
+ * Uses the same pattern as packages/openclaw-plugin/src/i18n/commands.ts
5
+ */
6
+
7
+ export type SupportedLanguage = 'zh' | 'en';
8
+
9
+ export function normalizeLanguage(lang: string): SupportedLanguage {
10
+ if (lang.toLowerCase().startsWith('zh')) return 'zh';
11
+ return 'en';
12
+ }
13
+
14
+ export function getLanguage(): SupportedLanguage {
15
+ if (typeof navigator !== 'undefined') {
16
+ return normalizeLanguage(navigator.language);
17
+ }
18
+ return 'en';
19
+ }
20
+
21
+ export const i18n = {
22
+ // ========================================================================
23
+ // Shell / Navigation
24
+ // ========================================================================
25
+ nav: {
26
+ overview: { zh: '工作区健康度', en: 'Workspace Health' },
27
+ evolution: { zh: '进化追踪', en: 'Evolution' },
28
+ samples: { zh: '样本审核', en: 'Samples' },
29
+ thinkingModels: { zh: '思维模型', en: 'Thinking Models' },
30
+ feedback: { zh: '反馈回路', en: 'Feedback Loop' },
31
+ gateMonitor: { zh: 'Gate 监控', en: 'Gate Monitor' },
32
+ exportSamples: { zh: '导出样本', en: 'Export Samples' },
33
+ logout: { zh: '退出登录', en: 'Logout' },
34
+ },
35
+ brand: {
36
+ title: { zh: '进化控制台', en: 'Principles Console' },
37
+ subtitle: { zh: 'AI Agent 自主进化监控平台', en: 'AI Agent Evolution Monitoring Platform' },
38
+ },
39
+
40
+ // ========================================================================
41
+ // Common / Shared
42
+ // ========================================================================
43
+ common: {
44
+ loading: { zh: '加载中...', en: 'Loading...' },
45
+ noData: { zh: '暂无数据', en: 'No data' },
46
+ actions: { zh: '操作', en: 'Actions' },
47
+ cancel: { zh: '取消', en: 'Cancel' },
48
+ confirm: { zh: '确认', en: 'Confirm' },
49
+ refresh: { zh: '刷新', en: 'Refresh' },
50
+ back: { zh: '返回', en: 'Back' },
51
+ lastUpdated: { zh: '最后更新', en: 'Last updated' },
52
+ timeRange: { zh: '时间范围', en: 'Time Range' },
53
+ total: { zh: '共', en: 'Total' },
54
+ items: { zh: '条', en: 'items' },
55
+ },
56
+
57
+ // ========================================================================
58
+ // Time Range Selector
59
+ // ========================================================================
60
+ timeRange: {
61
+ days7: { zh: '7天', en: '7 days' },
62
+ days14: { zh: '14天', en: '14 days' },
63
+ days30: { zh: '30天', en: '30 days' },
64
+ },
65
+
66
+ // ========================================================================
67
+ // Auth / Login
68
+ // ========================================================================
69
+ auth: {
70
+ checking: { zh: '正在验证身份...', en: 'Verifying identity...' },
71
+ loginTitle: { zh: 'Principles Console', en: 'Principles Console' },
72
+ loginSubtitle: { zh: 'AI Agent 进化流程监控平台', en: 'AI Agent Evolution Monitoring Platform' },
73
+ tokenPlaceholder: { zh: '请输入您的 Gateway Token', en: 'Enter your Gateway Token' },
74
+ tokenHint: { zh: '在服务器上运行 openclaw config get gateway.auth.token 获取 Token', en: 'Run openclaw config get gateway.auth.token on your server to get the Token' },
75
+ loginButton: { zh: '登 录', en: 'Sign In' },
76
+ validatingButton: { zh: '正在验证...', en: 'Validating...' },
77
+ errorEmpty: { zh: '请输入 Gateway Token', en: 'Please enter a Gateway Token' },
78
+ errorInvalid: { zh: 'Token 无效或已过期,请检查后重试', en: 'Token is invalid or expired, please try again' },
79
+ howToGetToken: { zh: '如何获取 Token?', en: 'How to get your Token?' },
80
+ step1: { zh: 'SSH 登录到运行 OpenClaw Gateway 的服务器', en: 'SSH into your server running OpenClaw Gateway' },
81
+ step2: { zh: '运行命令查看配置:cat ~/.openclaw/openclaw.json', en: 'Run: cat ~/.openclaw/openclaw.json to view config' },
82
+ step3: { zh: '复制 gateway.auth.token 的值', en: 'Copy the value of gateway.auth.token' },
83
+ },
84
+
85
+ // ========================================================================
86
+ // Overview Page
87
+ // ========================================================================
88
+ overview: {
89
+ pageTitle: { zh: '工作区健康度', en: 'Workspace Health' },
90
+ freshness: { zh: '数据新鲜度', en: 'Freshness' },
91
+ syncAll: { zh: '同步全部', en: 'Sync All' },
92
+ syncing: { zh: '同步中...', en: 'Syncing...' },
93
+ workspacesEnabled: { zh: '个工作区已启用', en: 'workspaces enabled' },
94
+
95
+ // Health Cards (Phase 5)
96
+ health: {
97
+ gfi: { zh: 'GFI 疲劳指数', en: 'GFI Fatigue Index' },
98
+ threshold: { zh: '阈值', en: 'Threshold' },
99
+ peakToday: { zh: '今日峰值', en: 'Peak Today' },
100
+ painFlag: { zh: 'PainFlag', en: 'PainFlag' },
101
+ active: { zh: '活跃', en: 'Active' },
102
+ normal: { zh: '正常', en: 'Normal' },
103
+ noActivePain: { zh: '无活跃痛点', en: 'No active pain' },
104
+ source: { zh: '来源', en: 'Source' },
105
+ trustStage: { zh: 'Trust Stage', en: 'Trust Stage' },
106
+ stage: { zh: 'Stage', en: 'Stage' },
107
+ score: { zh: '分数', en: 'Score' },
108
+ epTier: { zh: 'EP Tier', en: 'EP Tier' },
109
+ points: { zh: '积分', en: 'Points' },
110
+ principlesTotal: { zh: '原则总数', en: 'Total Principles' },
111
+ candidate: { zh: '候', en: 'Cand' },
112
+ probation: { zh: '试', en: 'Prob' },
113
+ active2: { zh: '活', en: 'Act' },
114
+ deprecated: { zh: '废', en: 'Dep' },
115
+ queueBacklog: { zh: '队列积压', en: 'Queue Backlog' },
116
+ pending: { zh: '待处理', en: 'Pending' },
117
+ inProgress: { zh: '处理中', en: 'In Progress' },
118
+ completed: { zh: '已完成', en: 'Completed' },
119
+ },
120
+
121
+ // KPI labels
122
+ repeatErrorRate: { zh: '重复错误率', en: 'Repeat Error Rate' },
123
+ userCorrectionRate: { zh: '用户纠正率', en: 'User Correction Rate' },
124
+ pendingSamples: { zh: '待审样本', en: 'Pending Samples' },
125
+ approvedSamples: { zh: '已批准样本', en: 'Approved Samples' },
126
+ thinkingCoverage: { zh: '思维覆盖率', en: 'Thinking Coverage' },
127
+ painEvents: { zh: '痛点事件', en: 'Pain Events' },
128
+
129
+ // Section headers
130
+ recentTrend: { zh: '近期趋势', en: 'Recent Trend' },
131
+ topRegressions: { zh: '高频退化', en: 'Top Regressions' },
132
+ sampleQueue: { zh: '样本队列', en: 'Sample Queue' },
133
+ thinkingSummary: { zh: '思维摘要', en: 'Thinking Summary' },
134
+
135
+ // Thinking summary fields
136
+ activeModels: { zh: '活跃模型', en: 'Active Models' },
137
+ dormantModels: { zh: '休眠模型', en: 'Dormant Models' },
138
+ effectiveModels: { zh: '有效模型', en: 'Effective Models' },
139
+ coverage: { zh: '覆盖率', en: 'Coverage' },
140
+ principleEvents: { zh: '原则事件', en: 'Principle Events' },
141
+
142
+ // Trend row suffixes
143
+ calls: { zh: '次调用', en: 'calls' },
144
+ failures: { zh: '次失败', en: 'failures' },
145
+ corrections: { zh: '次纠正', en: 'corrections' },
146
+ thinkingTurns: { zh: '思维轮次', en: 'thinking turns' },
147
+
148
+ // Table column headers
149
+ qualityScore: { zh: '质量分', en: 'Score' },
150
+ reviewStatus: { zh: '状态', en: 'Status' },
151
+ createdAt: { zh: '创建时间', en: 'Created At' },
152
+ failureMode: { zh: '失败模式', en: 'Failure Mode' },
153
+ relatedThinking: { zh: '相关思维', en: 'Thinking Hits' },
154
+ },
155
+
156
+ // ========================================================================
157
+ // Samples Page
158
+ // ========================================================================
159
+ samples: {
160
+ pageTitle: { zh: '样本审核', en: 'Sample Review' },
161
+ statusFilter: { zh: '状态', en: 'Status' },
162
+ statusAll: { zh: '全部', en: 'All' },
163
+ statusPending: { zh: '待审', en: 'Pending' },
164
+ statusApproved: { zh: '已批准', en: 'Approved' },
165
+ statusRejected: { zh: '已拒绝', en: 'Rejected' },
166
+
167
+ // Empty state
168
+ emptyTitle: { zh: '选择一条样本', en: 'Select a sample' },
169
+ emptyDesc: { zh: '点击左侧列表中的样本,查看bad attempt、纠正内容和相关思维命中', en: 'Click a sample from the list to inspect the bad attempt, correction, and related thinking hits' },
170
+
171
+ // Detail sections
172
+ badAttempt: { zh: '错误尝试', en: 'Bad Attempt' },
173
+ userCorrection: { zh: '用户纠正', en: 'User Correction' },
174
+ recoveryToolSpan: { zh: '恢复工具链', en: 'Recovery Tool Span' },
175
+ relatedThinkingHits: { zh: '相关思维命中', en: 'Related Thinking Hits' },
176
+ reviewHistory: { zh: '审核历史', en: 'Review History' },
177
+ noNote: { zh: '无备注', en: 'No note' },
178
+ noScenarios: { zh: '无场景', en: 'No scenarios' },
179
+
180
+ // Actions
181
+ approve: { zh: '批准', en: 'Approve' },
182
+ reject: { zh: '拒绝', en: 'Reject' },
183
+ },
184
+
185
+ // ========================================================================
186
+ // Thinking Models Page
187
+ // ========================================================================
188
+ thinkingModels: {
189
+ pageTitle: { zh: '思维模型', en: 'Thinking Models' },
190
+ coverage: { zh: '覆盖率', en: 'Coverage' },
191
+ active: { zh: '活跃', en: 'Active' },
192
+ dormant: { zh: '休眠', en: 'Dormant' },
193
+ effective: { zh: '有效', en: 'Effective' },
194
+
195
+ // Empty state
196
+ emptyTitle: { zh: '选择一个思维模型', en: 'Select a thinking model' },
197
+ emptyDesc: { zh: '点击左侧列表中的模型,查看场景分布和最近事件', en: 'Click a model from the list to inspect scenario coverage and recent events' },
198
+
199
+ // Detail sections
200
+ outcomeStats: { zh: '结果统计', en: 'Outcome Stats' },
201
+ scenarioDistribution: { zh: '场景分布', en: 'Scenario Distribution' },
202
+ recentEvents: { zh: '最近事件', en: 'Recent Events' },
203
+ noScenariosYet: { zh: '暂无场景', en: 'No scenarios yet' },
204
+
205
+ // Outcome stats
206
+ success: { zh: '成功', en: 'Success' },
207
+ failure: { zh: '失败', en: 'Failure' },
208
+ pain: { zh: '痛点', en: 'Pain' },
209
+ correction: { zh: '纠正', en: 'Correction' },
210
+
211
+ // Table
212
+ hits: { zh: '命中', en: 'Hits' },
213
+ successRate: { zh: '成功率', en: 'Success Rate' },
214
+ failureRate: { zh: '失败率', en: 'Failure Rate' },
215
+ },
216
+
217
+ // ========================================================================
218
+ // Evolution Page
219
+ // ========================================================================
220
+ evolution: {
221
+ pageTitle: { zh: '进化流程追踪', en: 'Evolution Tracking' },
222
+
223
+ // Status badges
224
+ pending: { zh: '待处理', en: 'Pending' },
225
+ inProgress: { zh: '处理中', en: 'In Progress' },
226
+ completed: { zh: '已完成', en: 'Completed' },
227
+ failed: { zh: '失败', en: 'Failed' },
228
+
229
+ // Active stage labels
230
+ activeStage: {
231
+ pending: { zh: '等待中', en: 'Pending' },
232
+ in_progress: { zh: '进行中', en: 'In Progress' },
233
+ completed: { zh: '已完成', en: 'Completed' },
234
+ idle: { zh: '空闲', en: 'Idle' },
235
+ },
236
+ enhancementLoopStatus: { zh: '增强回路当前状态', en: 'Enhancement Loop Status' },
237
+
238
+ // Stage labels (used in STAGE_LABELS)
239
+ stageLabels: {
240
+ pain_detected: { zh: '痛点检测', en: 'Pain Detected' },
241
+ queued: { zh: '已入队', en: 'Queued' },
242
+ started: { zh: '开始处理', en: 'Started' },
243
+ analyzing: { zh: '分析中', en: 'Analyzing' },
244
+ principle_generated: { zh: '原则生成', en: 'Principle Generated' },
245
+ completed: { zh: '已完成', en: 'Completed' },
246
+ },
247
+
248
+ // Status filter
249
+ filterAll: { zh: '全部', en: 'All' },
250
+ statusFilter: { zh: '状态筛选', en: 'Status Filter' },
251
+ taskLabel: { zh: '任务', en: 'Task' },
252
+
253
+ // Section headers
254
+ statusDistribution: { zh: '状态分布', en: 'Status Distribution' },
255
+ recentActivity: { zh: '近期活动', en: 'Recent Activity' },
256
+ stageDistribution: { zh: '阶段分布', en: 'Stage Distribution' },
257
+
258
+ // Activity
259
+ created: { zh: '新增', en: 'Created' },
260
+ finished: { zh: '完成', en: 'Finished' },
261
+
262
+ // Table
263
+ score: { zh: '分数', en: 'Score' },
264
+ source: { zh: '来源', en: 'Source' },
265
+ duration: { zh: '耗时', en: 'Duration' },
266
+ events: { zh: '事件', en: 'Events' },
267
+
268
+ // Empty state
269
+ emptyTitle: { zh: '选择一个任务', en: 'Select a task' },
270
+ emptyDesc: { zh: '点击左侧列表中的任务,查看进化时间线和详细事件', en: 'Click a task from the list to view its evolution timeline and detailed events' },
271
+
272
+ // Detail
273
+ evolutionTimeline: { zh: '进化时间线', en: 'Evolution Timeline' },
274
+ detailedEvents: { zh: '详细事件', en: 'Detailed Events' },
275
+ reason: { zh: '原因', en: 'Reason' },
276
+ },
277
+
278
+ // ========================================================================
279
+ // Workspace Config
280
+ // ========================================================================
281
+ workspace: {
282
+ title: { zh: '工作区配置', en: 'Workspace Configuration' },
283
+ addWorkspace: { zh: '添加', en: 'Add' },
284
+ cancel: { zh: '取消', en: 'Cancel' },
285
+ adding: { zh: '添加中...', en: 'Adding...' },
286
+ workspaceName: { zh: '工作区名称', en: 'Workspace Name' },
287
+ path: { zh: '路径', en: 'Path' },
288
+ include: { zh: '纳入', en: 'Include' },
289
+ sync: { zh: '同步', en: 'Sync' },
290
+ placeholder: {
291
+ name: { zh: 'workspace-custom', en: 'workspace-custom' },
292
+ path: { zh: '/home/user/.openclaw/workspace-custom', en: '/home/user/.openclaw/workspace-custom' },
293
+ },
294
+ },
295
+
296
+ // ========================================================================
297
+ // Feedback / Gate Monitor
298
+ // ========================================================================
299
+ feedback: {
300
+ pageTitle: { zh: '反馈回路', en: 'Feedback Loop' },
301
+ pageSubtitle: { zh: 'GFI 监控与同理心检测', en: 'GFI Monitoring & Empathy Detection' },
302
+ gfiDashboard: { zh: 'GFI 实时仪表盘', en: 'GFI Real-time Dashboard' },
303
+ threshold: { zh: '阈值', en: 'Threshold' },
304
+ peakToday: { zh: '今日峰值', en: 'Peak Today' },
305
+ hourlyTrend: { zh: '小时趋势', en: 'Hourly Trend' },
306
+ empathyEvents: { zh: '同理心检测事件', en: 'Empathy Events' },
307
+ gateBlocks: { zh: 'GFI 拦截关联', en: 'GFI Gate Blocks' },
308
+ noEmpathyEvents: { zh: '暂无同理心事件', en: 'No Empathy Events' },
309
+ noEmpathyEventsDesc: { zh: '尚未检测到同理心偏移事件', en: 'No empathy deviation events detected yet' },
310
+ noGateBlocks: { zh: '暂无拦截记录', en: 'No Gate Blocks' },
311
+ noGateBlocksDesc: { zh: '尚未有 GFI 拦截记录', en: 'No GFI gate blocks recorded yet' },
312
+ },
313
+
314
+ gate: {
315
+ pageTitle: { zh: 'Gate 监控', en: 'Gate Monitor' },
316
+ pageSubtitle: { zh: '拦截统计与 Trust/EP 双轨', en: 'Block Statistics & Trust/EP Dual Track' },
317
+ todayStats: { zh: '今日拦截统计', en: "Today's Block Statistics" },
318
+ gfiBlocks: { zh: 'GFI 拦截', en: 'GFI Blocks' },
319
+ stageBlocks: { zh: 'Stage 限制', en: 'Stage Limits' },
320
+ p03Blocks: { zh: 'P-03 不匹配', en: 'P-03 Mismatch' },
321
+ bypassAttempts: { zh: '绕过尝试', en: 'Bypass Attempts' },
322
+ p16Exemptions: { zh: 'P-16 豁免', en: 'P-16 Exemptions' },
323
+ trustEngine: { zh: 'Trust Engine', en: 'Trust Engine' },
324
+ evolutionEngine: { zh: 'Evolution Engine', en: 'Evolution Engine' },
325
+ blockHistory: { zh: '拦截历史', en: 'Block History' },
326
+ score: { zh: '分数', en: 'Score' },
327
+ points: { zh: '积分', en: 'Points' },
328
+ noGateBlocks: { zh: '暂无拦截记录', en: 'No Gate Blocks' },
329
+ noGateBlocksDesc: { zh: '尚未有 GFI 拦截记录', en: 'No GFI gate blocks recorded yet' },
330
+ },
331
+ } as const;
332
+
333
+ export type I18nKey = keyof typeof i18n;
334
+ export type I18n = typeof i18n;
335
+
336
+ /**
337
+ * Get a translated string by dot-path key.
338
+ * Usage: t('overview.pageTitle')
339
+ */
340
+ export function t<K extends string>(
341
+ path: K
342
+ ): string {
343
+ const keys = path.split('.');
344
+ let value: unknown = i18n;
345
+ for (const key of keys) {
346
+ if (value == null || typeof value !== 'object') return path;
347
+ value = (value as Record<string, unknown>)[key];
348
+ }
349
+ if (typeof value === 'object' && value !== null) {
350
+ const lang = getLanguage();
351
+ return String((value as Record<string, unknown>)[lang] ?? (value as Record<string, unknown>).en ?? path);
352
+ }
353
+ return typeof value === 'string' ? value : path;
354
+ }
355
+
356
+ /**
357
+ * useI18n hook for React components.
358
+ * Returns a t function that uses the detected language.
359
+ */
360
+ export function useI18n() {
361
+ const lang = getLanguage();
362
+ return { t, lang };
363
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import App from './App';
4
+ import './styles.css';
5
+
6
+ const container = document.getElementById('root');
7
+
8
+ if (!container) {
9
+ throw new Error('Missing root container');
10
+ }
11
+
12
+ createRoot(container).render(
13
+ <React.StrictMode>
14
+ <App />
15
+ </React.StrictMode>,
16
+ );