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.
- package/ADVANCED_CONFIG_ZH.md +97 -0
- package/AGENT_INSTALL.md +173 -0
- package/AGENT_INSTALL_EN.md +173 -0
- package/INSTALL.md +256 -0
- package/SKILL.md +63 -0
- package/docs/COMMAND_REFERENCE.md +76 -0
- package/docs/COMMAND_REFERENCE_EN.md +79 -0
- package/esbuild.config.js +75 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +13 -15
- package/scripts/build-web.mjs +46 -0
- package/scripts/install-dependencies.cjs +47 -0
- package/scripts/sync-plugin.mjs +802 -0
- package/scripts/verify-build.mjs +109 -0
- package/src/agents/nocturnal-dreamer.md +152 -0
- package/src/agents/nocturnal-philosopher.md +138 -0
- package/src/agents/nocturnal-reflector.md +126 -0
- package/src/agents/nocturnal-scribe.md +164 -0
- package/src/commands/capabilities.ts +85 -0
- package/{dist/commands/context.js → src/commands/context.ts} +78 -38
- package/src/commands/evolution-status.ts +146 -0
- package/src/commands/export.ts +111 -0
- package/src/commands/focus.ts +533 -0
- package/src/commands/nocturnal-review.ts +311 -0
- package/src/commands/nocturnal-rollout.ts +763 -0
- package/src/commands/nocturnal-train.ts +1002 -0
- package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
- package/src/commands/principle-rollback.ts +27 -0
- package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
- package/src/commands/samples.ts +60 -0
- package/src/commands/strategy.ts +38 -0
- package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
- package/src/commands/workflow-debug.ts +128 -0
- package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
- package/src/config/errors.ts +163 -0
- package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
- package/src/constants/diagnostician.ts +66 -0
- package/src/constants/tools.ts +62 -0
- package/src/core/adaptive-thresholds.ts +476 -0
- package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
- package/{dist/core/config.js → src/core/config.ts} +158 -46
- package/src/core/control-ui-db.ts +435 -0
- package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
- package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
- package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
- package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
- package/src/core/empathy-keyword-matcher.ts +327 -0
- package/src/core/empathy-types.ts +218 -0
- package/src/core/event-log.ts +544 -0
- package/src/core/evolution-engine.ts +612 -0
- package/src/core/evolution-logger.ts +353 -0
- package/src/core/evolution-migration.ts +77 -0
- package/src/core/evolution-reducer.ts +731 -0
- package/src/core/evolution-types.ts +456 -0
- package/src/core/external-training-contract.ts +527 -0
- package/src/core/focus-history.ts +1458 -0
- package/src/core/hygiene/tracker.ts +117 -0
- package/{dist/core/init.js → src/core/init.ts} +39 -26
- package/src/core/local-worker-routing.ts +617 -0
- package/{dist/core/migration.js → src/core/migration.ts} +18 -11
- package/src/core/model-deployment-registry.ts +722 -0
- package/src/core/model-training-registry.ts +813 -0
- package/src/core/nocturnal-arbiter.ts +706 -0
- package/src/core/nocturnal-candidate-scoring.ts +392 -0
- package/src/core/nocturnal-compliance.ts +1075 -0
- package/src/core/nocturnal-dataset.ts +668 -0
- package/src/core/nocturnal-executability.ts +428 -0
- package/src/core/nocturnal-export.ts +390 -0
- package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
- package/src/core/nocturnal-trajectory-extractor.ts +484 -0
- package/src/core/nocturnal-trinity.ts +1384 -0
- package/src/core/pain.ts +122 -0
- package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
- package/{dist/core/paths.js → src/core/paths.ts} +13 -4
- package/src/core/principle-training-state.ts +450 -0
- package/src/core/profile.ts +226 -0
- package/src/core/promotion-gate.ts +822 -0
- package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
- package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +185 -63
- package/src/core/shadow-observation-registry.ts +534 -0
- package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
- package/src/core/thinking-models.ts +217 -0
- package/src/core/training-program.ts +630 -0
- package/src/core/trajectory-types.ts +243 -0
- package/src/core/trajectory.ts +1673 -0
- package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
- package/src/hooks/bash-risk.ts +171 -0
- package/src/hooks/edit-verification.ts +295 -0
- package/src/hooks/gate-block-helper.ts +160 -0
- package/src/hooks/gate.ts +210 -0
- package/src/hooks/gfi-gate.ts +177 -0
- package/src/hooks/lifecycle.ts +326 -0
- package/{dist/hooks/llm.js → src/hooks/llm.ts} +166 -139
- package/src/hooks/message-sanitize.ts +45 -0
- package/src/hooks/pain.ts +384 -0
- package/src/hooks/progressive-trust-gate.ts +174 -0
- package/src/hooks/prompt.ts +920 -0
- package/src/hooks/subagent.ts +207 -0
- package/src/hooks/thinking-checkpoint.ts +73 -0
- package/src/hooks/trajectory-collector.ts +290 -0
- package/src/http/principles-console-route.ts +716 -0
- package/src/i18n/commands.ts +117 -0
- package/src/index.ts +694 -0
- package/src/service/central-database.ts +831 -0
- package/src/service/control-ui-query-service.ts +888 -0
- package/src/service/evolution-query-service.ts +405 -0
- package/src/service/evolution-worker.ts +1646 -0
- package/src/service/health-query-service.ts +836 -0
- package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +263 -36
- package/src/service/nocturnal-service.ts +1015 -0
- package/src/service/nocturnal-target-selector.ts +532 -0
- package/src/service/phase3-input-filter.ts +237 -0
- package/src/service/runtime-summary-service.ts +757 -0
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
- package/src/service/subagent-workflow/index.ts +51 -0
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
- package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
- package/src/service/subagent-workflow/types.ts +378 -0
- package/src/service/subagent-workflow/workflow-store.ts +328 -0
- package/src/service/trajectory-service.ts +15 -0
- package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
- package/src/tools/deep-reflect.ts +349 -0
- package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
- package/src/types/event-types.ts +453 -0
- package/src/types/hygiene-types.ts +31 -0
- package/src/types/principle-tree-schema.ts +244 -0
- package/src/types/runtime-summary.ts +49 -0
- package/src/types.ts +74 -0
- package/src/utils/file-lock.ts +391 -0
- package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
- package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
- package/src/utils/io.ts +110 -0
- package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
- package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
- package/src/utils/subagent-probe.ts +94 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
- package/templates/pain_settings.json +2 -1
- package/tests/README.md +120 -0
- package/tests/build-artifacts.test.ts +111 -0
- package/tests/commands/evolution-status.test.ts +222 -0
- package/tests/commands/evolver.test.ts +22 -0
- package/tests/commands/export.test.ts +78 -0
- package/tests/commands/nocturnal-review.test.ts +448 -0
- package/tests/commands/nocturnal-train.test.ts +97 -0
- package/tests/commands/pain.test.ts +108 -0
- package/tests/commands/samples.test.ts +65 -0
- package/tests/commands/strategy.test.ts +34 -0
- package/tests/commands/thinking-os.test.ts +88 -0
- package/tests/core/adaptive-thresholds.test.ts +261 -0
- package/tests/core/config-service.test.ts +89 -0
- package/tests/core/config.test.ts +90 -0
- package/tests/core/control-ui-db.test.ts +75 -0
- package/tests/core/core-template-guidance.test.ts +21 -0
- package/tests/core/detection-funnel.test.ts +63 -0
- package/tests/core/detection-service.test.ts +50 -0
- package/tests/core/dictionary-service.test.ts +116 -0
- package/tests/core/dictionary.test.ts +168 -0
- package/tests/core/empathy-keyword-matcher.test.ts +209 -0
- package/tests/core/event-log.test.ts +181 -0
- package/tests/core/evolution-e2e.test.ts +58 -0
- package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
- package/tests/core/evolution-engine.test.ts +562 -0
- package/tests/core/evolution-logger.test.ts +148 -0
- package/tests/core/evolution-migration.test.ts +50 -0
- package/tests/core/evolution-paths.test.ts +21 -0
- package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
- package/tests/core/evolution-reducer.test.ts +180 -0
- package/tests/core/evolution-types-loop.test.ts +48 -0
- package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
- package/tests/core/external-training-contract.test.ts +463 -0
- package/tests/core/focus-history.test.ts +682 -0
- package/tests/core/init-flatten.test.ts +69 -0
- package/tests/core/init-refactor.test.ts +87 -0
- package/tests/core/init-v1.3.test.ts +46 -0
- package/tests/core/init.test.ts +190 -0
- package/tests/core/local-worker-routing.test.ts +757 -0
- package/tests/core/migration.test.ts +84 -0
- package/tests/core/model-deployment-registry.test.ts +845 -0
- package/tests/core/model-training-registry.test.ts +889 -0
- package/tests/core/nocturnal-arbiter.test.ts +494 -0
- package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
- package/tests/core/nocturnal-compliance.test.ts +646 -0
- package/tests/core/nocturnal-dataset.test.ts +892 -0
- package/tests/core/nocturnal-executability.test.ts +357 -0
- package/tests/core/nocturnal-export.test.ts +462 -0
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
- package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
- package/tests/core/nocturnal-trinity.test.ts +953 -0
- package/tests/core/pain.test.ts +33 -0
- package/tests/core/path-resolver.test.ts +57 -0
- package/tests/core/paths-refactor.test.ts +42 -0
- package/tests/core/phase7-rollout-integration.test.ts +477 -0
- package/tests/core/principle-training-state.test.ts +712 -0
- package/tests/core/profile.test.ts +56 -0
- package/tests/core/promotion-gate.test.ts +556 -0
- package/tests/core/risk-calculator.test.ts +168 -0
- package/tests/core/session-tracker.test.ts +191 -0
- package/tests/core/training-program.test.ts +472 -0
- package/tests/core/trajectory.test.ts +265 -0
- package/tests/core/workspace-context-factory.test.ts +18 -0
- package/tests/core/workspace-context.test.ts +134 -0
- package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
- package/tests/fixtures/production-compatibility.test.ts +147 -0
- package/tests/fixtures/production-mock-generator.ts +282 -0
- package/tests/hooks/bash-risk-integration.test.ts +137 -0
- package/tests/hooks/bash-risk.test.ts +81 -0
- package/tests/hooks/edit-verification.test.ts +678 -0
- package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
- package/tests/hooks/gate-edit-verification.test.ts +435 -0
- package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
- package/tests/hooks/gate.test.ts +271 -0
- package/tests/hooks/gfi-gate-unit.test.ts +422 -0
- package/tests/hooks/gfi-gate.test.ts +669 -0
- package/tests/hooks/lifecycle.test.ts +248 -0
- package/tests/hooks/llm.test.ts +308 -0
- package/tests/hooks/message-sanitize.test.ts +36 -0
- package/tests/hooks/pain.test.ts +141 -0
- package/tests/hooks/progressive-trust-gate.test.ts +277 -0
- package/tests/hooks/prompt.test.ts +1411 -0
- package/tests/hooks/subagent.test.ts +467 -0
- package/tests/hooks/thinking-gate.test.ts +313 -0
- package/tests/http/principles-console-route.test.ts +140 -0
- package/tests/hygiene-tracker.test.ts +77 -0
- package/tests/index.integration.test.ts +179 -0
- package/tests/index.shadow-routing.integration.test.ts +140 -0
- package/tests/index.test.ts +9 -0
- package/tests/integration/empathy-workflow-integration.test.ts +627 -0
- package/tests/service/control-ui-query-service.test.ts +121 -0
- package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
- package/tests/service/evolution-worker.test.ts +585 -0
- package/tests/service/nocturnal-runtime.test.ts +470 -0
- package/tests/service/nocturnal-service.test.ts +577 -0
- package/tests/service/nocturnal-target-selector.test.ts +615 -0
- package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
- package/tests/service/phase3-input-filter.test.ts +289 -0
- package/tests/service/runtime-summary-service.test.ts +919 -0
- package/tests/task-compliance.test.ts +166 -0
- package/tests/test-utils.ts +48 -0
- package/tests/tools/critique-prompt.test.ts +260 -0
- package/tests/tools/deep-reflect.test.ts +232 -0
- package/tests/tools/model-index.test.ts +246 -0
- package/tests/ui/app.test.tsx +114 -0
- package/tests/utils/file-lock.test.ts +407 -0
- package/tests/utils/hashing.test.ts +32 -0
- package/tests/utils/io.test.ts +39 -0
- package/tests/utils/nlp.test.ts +53 -0
- package/tests/utils/plugin-logger.test.ts +156 -0
- package/tsconfig.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/ui/src/App.tsx +45 -0
- package/ui/src/api.ts +216 -0
- package/ui/src/charts.tsx +586 -0
- package/ui/src/components/ErrorState.tsx +6 -0
- package/ui/src/components/Loading.tsx +13 -0
- package/ui/src/components/ProtectedRoute.tsx +12 -0
- package/ui/src/components/Shell.tsx +91 -0
- package/ui/src/components/WorkspaceConfig.tsx +146 -0
- package/ui/src/components/index.ts +5 -0
- package/ui/src/context/auth.tsx +80 -0
- package/ui/src/context/theme.tsx +66 -0
- package/ui/src/hooks/useAutoRefresh.ts +39 -0
- package/ui/src/i18n/ui.ts +363 -0
- package/ui/src/main.tsx +16 -0
- package/ui/src/pages/EvolutionPage.tsx +352 -0
- package/ui/src/pages/FeedbackPage.tsx +140 -0
- package/ui/src/pages/GateMonitorPage.tsx +136 -0
- package/ui/src/pages/LoginPage.tsx +88 -0
- package/ui/src/pages/OverviewPage.tsx +238 -0
- package/ui/src/pages/SamplesPage.tsx +174 -0
- package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
- package/ui/src/styles.css +1661 -0
- package/ui/src/types.ts +368 -0
- package/ui/src/utils/format.ts +15 -0
- package/vitest.config.ts +23 -0
- package/dist/commands/capabilities.d.ts +0 -3
- package/dist/commands/capabilities.js +0 -73
- package/dist/commands/context.d.ts +0 -5
- package/dist/commands/evolution-status.d.ts +0 -4
- package/dist/commands/evolution-status.js +0 -117
- package/dist/commands/evolver.d.ts +0 -9
- package/dist/commands/evolver.js +0 -26
- package/dist/commands/export.d.ts +0 -2
- package/dist/commands/export.js +0 -98
- package/dist/commands/focus.d.ts +0 -14
- package/dist/commands/focus.js +0 -457
- package/dist/commands/nocturnal-review.d.ts +0 -24
- package/dist/commands/nocturnal-review.js +0 -265
- package/dist/commands/nocturnal-rollout.d.ts +0 -27
- package/dist/commands/nocturnal-rollout.js +0 -671
- package/dist/commands/nocturnal-train.d.ts +0 -25
- package/dist/commands/nocturnal-train.js +0 -919
- package/dist/commands/pain.d.ts +0 -5
- package/dist/commands/principle-rollback.d.ts +0 -4
- package/dist/commands/principle-rollback.js +0 -22
- package/dist/commands/rollback.d.ts +0 -19
- package/dist/commands/samples.d.ts +0 -2
- package/dist/commands/samples.js +0 -55
- package/dist/commands/strategy.d.ts +0 -3
- package/dist/commands/strategy.js +0 -29
- package/dist/commands/thinking-os.d.ts +0 -2
- package/dist/config/defaults/runtime.d.ts +0 -40
- package/dist/config/errors.d.ts +0 -84
- package/dist/config/errors.js +0 -94
- package/dist/config/index.js +0 -7
- package/dist/constants/diagnostician.d.ts +0 -12
- package/dist/constants/diagnostician.js +0 -56
- package/dist/constants/tools.d.ts +0 -17
- package/dist/constants/tools.js +0 -54
- package/dist/core/adaptive-thresholds.d.ts +0 -186
- package/dist/core/adaptive-thresholds.js +0 -300
- package/dist/core/config-service.d.ts +0 -15
- package/dist/core/config.d.ts +0 -127
- package/dist/core/control-ui-db.d.ts +0 -95
- package/dist/core/control-ui-db.js +0 -292
- package/dist/core/detection-funnel.d.ts +0 -33
- package/dist/core/detection-service.d.ts +0 -15
- package/dist/core/dictionary-service.d.ts +0 -15
- package/dist/core/dictionary.d.ts +0 -38
- package/dist/core/event-log.d.ts +0 -82
- package/dist/core/event-log.js +0 -463
- package/dist/core/evolution-engine.d.ts +0 -118
- package/dist/core/evolution-engine.js +0 -464
- package/dist/core/evolution-logger.d.ts +0 -137
- package/dist/core/evolution-logger.js +0 -256
- package/dist/core/evolution-migration.d.ts +0 -5
- package/dist/core/evolution-migration.js +0 -65
- package/dist/core/evolution-reducer.d.ts +0 -98
- package/dist/core/evolution-reducer.js +0 -465
- package/dist/core/evolution-types.d.ts +0 -287
- package/dist/core/evolution-types.js +0 -78
- package/dist/core/external-training-contract.d.ts +0 -276
- package/dist/core/external-training-contract.js +0 -269
- package/dist/core/focus-history.d.ts +0 -210
- package/dist/core/focus-history.js +0 -1185
- package/dist/core/hygiene/tracker.d.ts +0 -22
- package/dist/core/hygiene/tracker.js +0 -106
- package/dist/core/init.d.ts +0 -12
- package/dist/core/local-worker-routing.d.ts +0 -175
- package/dist/core/local-worker-routing.js +0 -525
- package/dist/core/migration.d.ts +0 -6
- package/dist/core/model-deployment-registry.d.ts +0 -218
- package/dist/core/model-deployment-registry.js +0 -503
- package/dist/core/model-training-registry.d.ts +0 -295
- package/dist/core/model-training-registry.js +0 -475
- package/dist/core/nocturnal-arbiter.d.ts +0 -159
- package/dist/core/nocturnal-arbiter.js +0 -534
- package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
- package/dist/core/nocturnal-candidate-scoring.js +0 -266
- package/dist/core/nocturnal-compliance.d.ts +0 -175
- package/dist/core/nocturnal-compliance.js +0 -824
- package/dist/core/nocturnal-dataset.d.ts +0 -224
- package/dist/core/nocturnal-dataset.js +0 -443
- package/dist/core/nocturnal-executability.d.ts +0 -85
- package/dist/core/nocturnal-executability.js +0 -331
- package/dist/core/nocturnal-export.d.ts +0 -124
- package/dist/core/nocturnal-export.js +0 -275
- package/dist/core/nocturnal-paths.d.ts +0 -124
- package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
- package/dist/core/nocturnal-trajectory-extractor.js +0 -307
- package/dist/core/nocturnal-trinity.d.ts +0 -311
- package/dist/core/nocturnal-trinity.js +0 -880
- package/dist/core/pain.d.ts +0 -4
- package/dist/core/pain.js +0 -70
- package/dist/core/path-resolver.d.ts +0 -46
- package/dist/core/paths.d.ts +0 -65
- package/dist/core/principle-training-state.d.ts +0 -121
- package/dist/core/principle-training-state.js +0 -321
- package/dist/core/profile.d.ts +0 -62
- package/dist/core/profile.js +0 -210
- package/dist/core/promotion-gate.d.ts +0 -238
- package/dist/core/promotion-gate.js +0 -529
- package/dist/core/risk-calculator.d.ts +0 -22
- package/dist/core/session-tracker.d.ts +0 -99
- package/dist/core/shadow-observation-registry.d.ts +0 -217
- package/dist/core/shadow-observation-registry.js +0 -308
- package/dist/core/system-logger.d.ts +0 -8
- package/dist/core/thinking-models.d.ts +0 -38
- package/dist/core/thinking-models.js +0 -170
- package/dist/core/training-program.d.ts +0 -233
- package/dist/core/training-program.js +0 -433
- package/dist/core/trajectory.d.ts +0 -411
- package/dist/core/trajectory.js +0 -1307
- package/dist/core/workspace-context.d.ts +0 -71
- package/dist/hooks/bash-risk.d.ts +0 -57
- package/dist/hooks/bash-risk.js +0 -137
- package/dist/hooks/edit-verification.d.ts +0 -62
- package/dist/hooks/edit-verification.js +0 -256
- package/dist/hooks/gate-block-helper.d.ts +0 -44
- package/dist/hooks/gate-block-helper.js +0 -119
- package/dist/hooks/gate.d.ts +0 -24
- package/dist/hooks/gate.js +0 -173
- package/dist/hooks/gfi-gate.d.ts +0 -40
- package/dist/hooks/gfi-gate.js +0 -113
- package/dist/hooks/lifecycle.d.ts +0 -5
- package/dist/hooks/lifecycle.js +0 -284
- package/dist/hooks/llm.d.ts +0 -12
- package/dist/hooks/message-sanitize.d.ts +0 -3
- package/dist/hooks/message-sanitize.js +0 -37
- package/dist/hooks/pain.d.ts +0 -5
- package/dist/hooks/pain.js +0 -301
- package/dist/hooks/progressive-trust-gate.d.ts +0 -51
- package/dist/hooks/progressive-trust-gate.js +0 -89
- package/dist/hooks/prompt.d.ts +0 -47
- package/dist/hooks/prompt.js +0 -884
- package/dist/hooks/subagent.d.ts +0 -10
- package/dist/hooks/subagent.js +0 -387
- package/dist/hooks/thinking-checkpoint.d.ts +0 -37
- package/dist/hooks/thinking-checkpoint.js +0 -51
- package/dist/hooks/trajectory-collector.d.ts +0 -32
- package/dist/hooks/trajectory-collector.js +0 -256
- package/dist/http/principles-console-route.d.ts +0 -9
- package/dist/http/principles-console-route.js +0 -567
- package/dist/i18n/commands.d.ts +0 -26
- package/dist/i18n/commands.js +0 -116
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -581
- package/dist/service/central-database.d.ts +0 -104
- package/dist/service/central-database.js +0 -649
- package/dist/service/control-ui-query-service.d.ts +0 -221
- package/dist/service/control-ui-query-service.js +0 -543
- package/dist/service/empathy-observer-manager.d.ts +0 -52
- package/dist/service/empathy-observer-manager.js +0 -229
- package/dist/service/evolution-query-service.d.ts +0 -155
- package/dist/service/evolution-query-service.js +0 -258
- package/dist/service/evolution-worker.d.ts +0 -101
- package/dist/service/evolution-worker.js +0 -974
- package/dist/service/nocturnal-runtime.d.ts +0 -183
- package/dist/service/nocturnal-service.d.ts +0 -163
- package/dist/service/nocturnal-service.js +0 -787
- package/dist/service/nocturnal-target-selector.d.ts +0 -145
- package/dist/service/nocturnal-target-selector.js +0 -315
- package/dist/service/phase3-input-filter.d.ts +0 -73
- package/dist/service/phase3-input-filter.js +0 -172
- package/dist/service/runtime-summary-service.d.ts +0 -122
- package/dist/service/runtime-summary-service.js +0 -485
- package/dist/service/trajectory-service.d.ts +0 -2
- package/dist/service/trajectory-service.js +0 -15
- package/dist/tools/critique-prompt.d.ts +0 -14
- package/dist/tools/deep-reflect.d.ts +0 -39
- package/dist/tools/deep-reflect.js +0 -350
- package/dist/tools/model-index.d.ts +0 -9
- package/dist/types/event-types.d.ts +0 -306
- package/dist/types/event-types.js +0 -106
- package/dist/types/hygiene-types.d.ts +0 -20
- package/dist/types/hygiene-types.js +0 -12
- package/dist/types/runtime-summary.d.ts +0 -47
- package/dist/types/runtime-summary.js +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.js +0 -22
- package/dist/utils/file-lock.d.ts +0 -71
- package/dist/utils/file-lock.js +0 -309
- package/dist/utils/glob-match.d.ts +0 -28
- package/dist/utils/hashing.d.ts +0 -9
- package/dist/utils/io.d.ts +0 -6
- package/dist/utils/io.js +0 -106
- package/dist/utils/nlp.d.ts +0 -9
- package/dist/utils/plugin-logger.d.ts +0 -39
- package/dist/utils/subagent-probe.d.ts +0 -34
- 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
|
+
}
|
package/ui/src/main.tsx
ADDED
|
@@ -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
|
+
);
|