oh-my-knowledge 0.20.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +10 -4
  2. package/README.zh.md +9 -4
  3. package/dist/src/analysis/coverage-analyzer.d.ts +1 -1
  4. package/dist/src/analysis/coverage-analyzer.d.ts.map +1 -1
  5. package/dist/src/analysis/failure-clusterer.d.ts +1 -1
  6. package/dist/src/analysis/failure-clusterer.d.ts.map +1 -1
  7. package/dist/src/analysis/gap-analyzer.d.ts +2 -2
  8. package/dist/src/analysis/gap-analyzer.d.ts.map +1 -1
  9. package/dist/src/analysis/gap-analyzer.js +4 -4
  10. package/dist/src/analysis/hedging-classifier.d.ts +1 -1
  11. package/dist/src/analysis/hedging-classifier.d.ts.map +1 -1
  12. package/dist/src/analysis/report-diagnostics.d.ts +1 -1
  13. package/dist/src/analysis/report-diagnostics.d.ts.map +1 -1
  14. package/dist/src/analysis/report-diagnostics.js +7 -7
  15. package/dist/src/analysis/sample-diagnostics.d.ts +1 -1
  16. package/dist/src/analysis/sample-diagnostics.d.ts.map +1 -1
  17. package/dist/src/analysis/sample-diagnostics.js +15 -15
  18. package/dist/src/authoring/evolver.d.ts +1 -1
  19. package/dist/src/authoring/evolver.d.ts.map +1 -1
  20. package/dist/src/authoring/evolver.js +5 -5
  21. package/dist/src/authoring/evolver.js.map +1 -1
  22. package/dist/src/authoring/generator.d.ts +1 -1
  23. package/dist/src/authoring/generator.d.ts.map +1 -1
  24. package/dist/src/authoring/generator.js +8 -8
  25. package/dist/src/authoring/generator.js.map +1 -1
  26. package/dist/src/cli/i18n-dict.d.ts +56 -0
  27. package/dist/src/cli/i18n-dict.d.ts.map +1 -0
  28. package/dist/src/cli/i18n-dict.js +934 -0
  29. package/dist/src/cli/i18n-dict.js.map +1 -0
  30. package/dist/src/cli/i18n.d.ts +24 -0
  31. package/dist/src/cli/i18n.d.ts.map +1 -0
  32. package/dist/src/cli/i18n.js +53 -0
  33. package/dist/src/cli/i18n.js.map +1 -0
  34. package/dist/src/cli.js +320 -413
  35. package/dist/src/cli.js.map +1 -1
  36. package/dist/src/eval-core/cache.d.ts +7 -3
  37. package/dist/src/eval-core/cache.d.ts.map +1 -1
  38. package/dist/src/eval-core/cache.js +14 -4
  39. package/dist/src/eval-core/cache.js.map +1 -1
  40. package/dist/src/eval-core/dependency-checker.d.ts +16 -1
  41. package/dist/src/eval-core/dependency-checker.d.ts.map +1 -1
  42. package/dist/src/eval-core/dependency-checker.js +79 -4
  43. package/dist/src/eval-core/dependency-checker.js.map +1 -1
  44. package/dist/src/eval-core/evaluation-execution.d.ts +3 -3
  45. package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -1
  46. package/dist/src/eval-core/evaluation-execution.js +4 -2
  47. package/dist/src/eval-core/evaluation-execution.js.map +1 -1
  48. package/dist/src/eval-core/evaluation-job.d.ts +2 -2
  49. package/dist/src/eval-core/evaluation-job.d.ts.map +1 -1
  50. package/dist/src/eval-core/evaluation-reporting.d.ts +1 -1
  51. package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -1
  52. package/dist/src/eval-core/evaluation-reporting.js +4 -0
  53. package/dist/src/eval-core/evaluation-reporting.js.map +1 -1
  54. package/dist/src/eval-core/execution-strategy.d.ts +1 -1
  55. package/dist/src/eval-core/execution-strategy.d.ts.map +1 -1
  56. package/dist/src/eval-core/execution-strategy.js +35 -2
  57. package/dist/src/eval-core/execution-strategy.js.map +1 -1
  58. package/dist/src/eval-core/layer-gates.d.ts +17 -0
  59. package/dist/src/eval-core/layer-gates.d.ts.map +1 -0
  60. package/dist/src/eval-core/{ci-gates.js → layer-gates.js} +5 -5
  61. package/dist/src/eval-core/layer-gates.js.map +1 -0
  62. package/dist/src/eval-core/schema.d.ts +1 -1
  63. package/dist/src/eval-core/schema.d.ts.map +1 -1
  64. package/dist/src/eval-core/schema.js +17 -3
  65. package/dist/src/eval-core/schema.js.map +1 -1
  66. package/dist/src/eval-core/task-planner.d.ts +1 -1
  67. package/dist/src/eval-core/task-planner.d.ts.map +1 -1
  68. package/dist/src/eval-core/task-planner.js +1 -1
  69. package/dist/src/eval-core/task-planner.js.map +1 -1
  70. package/dist/src/eval-core/verdict.d.ts +5 -2
  71. package/dist/src/eval-core/verdict.d.ts.map +1 -1
  72. package/dist/src/eval-core/verdict.js +47 -8
  73. package/dist/src/eval-core/verdict.js.map +1 -1
  74. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +15 -8
  75. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +1 -1
  76. package/dist/src/eval-workflows/each-evaluation-workflow.js +3 -2
  77. package/dist/src/eval-workflows/each-evaluation-workflow.js.map +1 -1
  78. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +33 -4
  79. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
  80. package/dist/src/eval-workflows/evaluation-pipeline.js +81 -2
  81. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
  82. package/dist/src/eval-workflows/evaluation-preparation.d.ts +10 -6
  83. package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -1
  84. package/dist/src/eval-workflows/evaluation-preparation.js +2 -2
  85. package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -1
  86. package/dist/src/eval-workflows/run-evaluation.d.ts +16 -5
  87. package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
  88. package/dist/src/eval-workflows/run-evaluation.js +34 -5
  89. package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
  90. package/dist/src/executors/anthropic-api.d.ts +1 -1
  91. package/dist/src/executors/anthropic-api.d.ts.map +1 -1
  92. package/dist/src/executors/anthropic-api.js +1 -1
  93. package/dist/src/executors/anthropic-api.js.map +1 -1
  94. package/dist/src/executors/claude-cli.d.ts +2 -2
  95. package/dist/src/executors/claude-cli.d.ts.map +1 -1
  96. package/dist/src/executors/claude-cli.js +21 -1
  97. package/dist/src/executors/claude-cli.js.map +1 -1
  98. package/dist/src/executors/claude-sdk-trace.d.ts +1 -1
  99. package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -1
  100. package/dist/src/executors/claude-sdk.d.ts +15 -2
  101. package/dist/src/executors/claude-sdk.d.ts.map +1 -1
  102. package/dist/src/executors/claude-sdk.js +19 -1
  103. package/dist/src/executors/claude-sdk.js.map +1 -1
  104. package/dist/src/executors/gemini.d.ts +1 -1
  105. package/dist/src/executors/gemini.d.ts.map +1 -1
  106. package/dist/src/executors/index.d.ts +1 -1
  107. package/dist/src/executors/index.d.ts.map +1 -1
  108. package/dist/src/executors/openai-api.d.ts +1 -1
  109. package/dist/src/executors/openai-api.d.ts.map +1 -1
  110. package/dist/src/executors/openai-api.js +1 -1
  111. package/dist/src/executors/openai-api.js.map +1 -1
  112. package/dist/src/executors/openai-cli.d.ts +1 -1
  113. package/dist/src/executors/openai-cli.d.ts.map +1 -1
  114. package/dist/src/executors/script.d.ts +1 -1
  115. package/dist/src/executors/script.d.ts.map +1 -1
  116. package/dist/src/executors/script.js +10 -1
  117. package/dist/src/executors/script.js.map +1 -1
  118. package/dist/src/executors/shared.d.ts +1 -1
  119. package/dist/src/executors/shared.d.ts.map +1 -1
  120. package/dist/src/grading/assertions.d.ts +1 -1
  121. package/dist/src/grading/assertions.d.ts.map +1 -1
  122. package/dist/src/grading/debias-validate.d.ts +1 -1
  123. package/dist/src/grading/debias-validate.d.ts.map +1 -1
  124. package/dist/src/grading/debias-validate.js +3 -3
  125. package/dist/src/grading/gold-cli.d.ts +1 -1
  126. package/dist/src/grading/gold-cli.d.ts.map +1 -1
  127. package/dist/src/grading/gold-cli.js +3 -3
  128. package/dist/src/grading/gold-cli.js.map +1 -1
  129. package/dist/src/grading/index.d.ts +1 -1
  130. package/dist/src/grading/index.d.ts.map +1 -1
  131. package/dist/src/grading/judge.d.ts +1 -1
  132. package/dist/src/grading/judge.d.ts.map +1 -1
  133. package/dist/src/grading/layered-scores.d.ts +1 -1
  134. package/dist/src/grading/layered-scores.d.ts.map +1 -1
  135. package/dist/src/inputs/eval-config.d.ts +1 -1
  136. package/dist/src/inputs/eval-config.d.ts.map +1 -1
  137. package/dist/src/inputs/eval-config.js +37 -18
  138. package/dist/src/inputs/eval-config.js.map +1 -1
  139. package/dist/src/inputs/load-samples.d.ts +1 -1
  140. package/dist/src/inputs/load-samples.d.ts.map +1 -1
  141. package/dist/src/inputs/load-samples.js +4 -4
  142. package/dist/src/inputs/load-samples.js.map +1 -1
  143. package/dist/src/inputs/mcp-resolver.d.ts +1 -1
  144. package/dist/src/inputs/mcp-resolver.d.ts.map +1 -1
  145. package/dist/src/inputs/mcp-resolver.js +4 -4
  146. package/dist/src/inputs/mcp-resolver.js.map +1 -1
  147. package/dist/src/inputs/skill-loader.d.ts +11 -2
  148. package/dist/src/inputs/skill-loader.d.ts.map +1 -1
  149. package/dist/src/inputs/skill-loader.js +30 -7
  150. package/dist/src/inputs/skill-loader.js.map +1 -1
  151. package/dist/src/inputs/url-fetcher.d.ts +1 -1
  152. package/dist/src/inputs/url-fetcher.d.ts.map +1 -1
  153. package/dist/src/inputs/url-fetcher.js +2 -2
  154. package/dist/src/inputs/url-fetcher.js.map +1 -1
  155. package/dist/src/observability/skill-health-analyzer.d.ts +1 -1
  156. package/dist/src/observability/skill-health-analyzer.d.ts.map +1 -1
  157. package/dist/src/observability/trace-adapter.d.ts +1 -1
  158. package/dist/src/observability/trace-adapter.d.ts.map +1 -1
  159. package/dist/src/renderer/html-renderer.d.ts +1 -1
  160. package/dist/src/renderer/html-renderer.d.ts.map +1 -1
  161. package/dist/src/renderer/html-renderer.js +3 -3
  162. package/dist/src/renderer/html-renderer.js.map +1 -1
  163. package/dist/src/renderer/layout.d.ts +1 -1
  164. package/dist/src/renderer/layout.d.ts.map +1 -1
  165. package/dist/src/renderer/layout.js +1 -1
  166. package/dist/src/renderer/layout.js.map +1 -1
  167. package/dist/src/renderer/skill-health-renderer.d.ts +1 -1
  168. package/dist/src/renderer/skill-health-renderer.d.ts.map +1 -1
  169. package/dist/src/renderer/summary.d.ts +1 -1
  170. package/dist/src/renderer/summary.d.ts.map +1 -1
  171. package/dist/src/renderer/summary.js +22 -20
  172. package/dist/src/renderer/summary.js.map +1 -1
  173. package/dist/src/renderer/table.d.ts +1 -1
  174. package/dist/src/renderer/table.d.ts.map +1 -1
  175. package/dist/src/renderer/trends.d.ts +1 -1
  176. package/dist/src/renderer/trends.d.ts.map +1 -1
  177. package/dist/src/renderer/trends.js +1 -1
  178. package/dist/src/renderer/trends.js.map +1 -1
  179. package/dist/src/server/job-store.d.ts +1 -1
  180. package/dist/src/server/job-store.d.ts.map +1 -1
  181. package/dist/src/server/report-server.d.ts +1 -1
  182. package/dist/src/server/report-server.d.ts.map +1 -1
  183. package/dist/src/server/report-server.js +20 -20
  184. package/dist/src/server/report-server.js.map +1 -1
  185. package/dist/src/server/report-store.d.ts +1 -1
  186. package/dist/src/server/report-store.d.ts.map +1 -1
  187. package/dist/src/types/eval.d.ts +9 -0
  188. package/dist/src/types/eval.d.ts.map +1 -1
  189. package/dist/src/types/executor.d.ts +1 -0
  190. package/dist/src/types/executor.d.ts.map +1 -1
  191. package/dist/src/types/report.d.ts +10 -0
  192. package/dist/src/types/report.d.ts.map +1 -1
  193. package/package.json +2 -2
  194. package/dist/src/eval-core/ci-gates.d.ts +0 -17
  195. package/dist/src/eval-core/ci-gates.d.ts.map +0 -1
  196. package/dist/src/eval-core/ci-gates.js.map +0 -1
  197. package/dist/src/types.d.ts +0 -2
  198. package/dist/src/types.d.ts.map +0 -1
  199. package/dist/src/types.js +0 -6
  200. package/dist/src/types.js.map +0 -1
@@ -0,0 +1,56 @@
1
+ /**
2
+ * CLI 文案字典。
3
+ *
4
+ * 命名约定: `cli.<command>.<event>` 或 `cli.common.<event>`。
5
+ * 占位符用 `{name}` 形式,在 tCli(params) 处替换。
6
+ *
7
+ * ============================================================================
8
+ * 翻译守则 (受 cc-viewer i18n 方案启发)
9
+ * ============================================================================
10
+ *
11
+ * 1. **彻底本地化, 不接受中英混搭**
12
+ * "中文用户读到的中文"和"英文用户读到的英文"必须是各自语言里自然的表达,
13
+ * 不能机械翻译, 不能在中文里塞英文短语解释术语。如果某个英文短语没有
14
+ * 自然的中文译法, 重新组织句子结构, 而不是混着写。
15
+ *
16
+ * 2. **保留原文的白名单 (产品术语 / 命令 / 文件名)**
17
+ * 以下 token 在两种语言里都保留原文, 不翻译:
18
+ * - 产品名: omk, oh-my-knowledge, Claude, npm
19
+ * - 子命令空间和命令名: bench, analyze, run, report, init, evolve, gold,
20
+ * diff, ci, gen-samples, debias-validate, saturation, verdict,
21
+ * diagnose, failures
22
+ * - omk 核心业务术语: skill, variant, sample, judge, executor (出现在产品
23
+ * UI 里时首字母可大写如 "Skill 评测", 描述句中保持小写)
24
+ * - 技术参数: --lang, --control, --treatment, --bootstrap, --judge-repeat,
25
+ * OMK_LANG, JUDGE_PROMPT_VERSION_*
26
+ * - 文件名 / 路径: eval-samples.json, skills/v1.md, ~/.oh-my-knowledge/...
27
+ * - 数学概念缩写: CI, α, RAG (其译法可在配套描述里说明, 但术语本身留原文)
28
+ *
29
+ * 3. **必须翻译的内容**
30
+ * 动作 (run / edit / scaffold / generate), 状态 (success / failed /
31
+ * invalid), 引导文案 (next steps / try this / see also), 解释性描述。
32
+ *
33
+ * 4. **不要机械直译**
34
+ * "Next steps:" 译 "下一步:" 而不是 "下一步骤:"。
35
+ * "Run: ..." 译 "运行: ..." 而不是 "跑: ..."。
36
+ * 选用 omk 项目长期使用的中文措辞 (LLM judge 译"评委" 不译"判官", 见
37
+ * feedback_ui_translation.md)。
38
+ *
39
+ * 5. **新增 key 流程**
40
+ * a. 加到 CliMessageKey union 类型里
41
+ * b. 在 CLI_DICT 里同时给出 zh / en (Record 类型强制 zh/en 双写, 漏写
42
+ * tsc 直接报错)
43
+ * c. 自查: 中文里有没有非白名单的英文? 英文里有没有中文?
44
+ * d. 自查: 措辞自然度 — 把中文版念出来, 像不像中文项目的命令行输出?
45
+ * e. test/cli-i18n.test.ts 会跑 runtime parity 检查
46
+ *
47
+ * 未来扩 Lang (zh-TW / ja / ko ...): 改 src/types/shared.ts 的 Lang union,
48
+ * Record 类型自动强制每 key 加新语言版本。
49
+ */
50
+ export type CliMessageKey = 'cli.common.lang_invalid_silent' | 'cli.common.help_hint' | 'cli.common.unknown_domain' | 'cli.common.unknown_bench_command' | 'cli.init.scaffolded' | 'cli.init.next_steps_title' | 'cli.init.next_step_edit_samples' | 'cli.init.next_step_edit_skills' | 'cli.init.next_step_run' | 'cli.update.new_version_available' | 'cli.progress.preflight_starting' | 'cli.progress.sample_retry' | 'cli.progress.sample_error' | 'cli.progress.sample_executing' | 'cli.progress.sample_exec_done' | 'cli.progress.output_preview' | 'cli.progress.judging' | 'cli.progress.judged' | 'cli.progress.skipped' | 'cli.progress.sample_done' | 'cli.run.invalid_repeat' | 'cli.run.invalid_judge_repeat' | 'cli.run.invalid_judge_models_format' | 'cli.run.judge_models_single_warning' | 'cli.run.no_debias_length_active' | 'cli.run.invalid_bootstrap_samples' | 'cli.run.bootstrap_samples_too_large' | 'cli.run.skill_section' | 'cli.run.run_section' | 'cli.run.batch_complete' | 'cli.run.eval_complete' | 'cli.run.report_saved' | 'cli.run.report_server_running' | 'cli.run.report_server_view' | 'cli.run.report_server_stop' | 'cli.run.no_serve_in_non_tty' | 'cli.run.no_serve_view_hint' | 'cli.run.gold_load_failed' | 'cli.run.gold_load_issue' | 'cli.run.contamination_warning' | 'cli.common.error_prefix' | 'cli.analyze.view_in_browser' | 'cli.common.skill_dir_not_found' | 'cli.common.skill_file_not_found' | 'cli.common.report_not_found' | 'cli.common.no_judge_model' | 'cli.common.usage_gold_validate' | 'cli.common.warn_load_samples_failed' | 'cli.gen.skill_skipped_existing' | 'cli.gen.skill_generating' | 'cli.gen.skill_done' | 'cli.gen.skill_failed' | 'cli.gen.batch_none_needed' | 'cli.gen.batch_summary' | 'cli.gen.specify_skill_path' | 'cli.gen.samples_already_exists' | 'cli.gen.single_generating' | 'cli.gen.single_done' | 'cli.gen.review_hint' | 'cli.gen.failed' | 'cli.evolve.specify_skill_path' | 'cli.evolve.section_header' | 'cli.evolve.round_baseline' | 'cli.evolve.round_error' | 'cli.evolve.round_done' | 'cli.evolve.summary' | 'cli.evolve.best_path' | 'cli.evolve.versions_saved' | 'cli.evolve.report_link' | 'cli.gold.created_files' | 'cli.gold.next_step_edit_annotations' | 'cli.gold.validate_ok' | 'cli.debias.warn_cost_doubles' | 'cli.saturation.no_data' | 'cli.saturation.verdict_header' | 'cli.saturation.variant_no_trace' | 'cli.saturation.variant_label' | 'cli.saturation.checkpoints' | 'cli.saturation.last_point' | 'cli.saturation.persisted_verdict' | 'cli.saturation.persisted_verdict_saturated' | 'cli.saturation.persisted_verdict_unsaturated' | 'cli.saturation.skipped_too_few_points' | 'cli.help.main' | 'cli.help.diff_usage' | 'cli.help.analyze_usage' | 'cli.help.gold' | 'cli.help.debias_validate' | 'cli.help.saturation' | 'cli.help.verdict' | 'cli.help.diagnose' | 'cli.help.failures';
51
+ export interface CliMessage {
52
+ zh: string;
53
+ en: string;
54
+ }
55
+ export declare const CLI_DICT: Record<CliMessageKey, CliMessage>;
56
+ //# sourceMappingURL=i18n-dict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-dict.d.ts","sourceRoot":"","sources":["../../../src/cli/i18n-dict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,MAAM,MAAM,aAAa,GAErB,gCAAgC,GAChC,sBAAsB,GACtB,2BAA2B,GAC3B,kCAAkC,GAElC,qBAAqB,GACrB,2BAA2B,GAC3B,iCAAiC,GACjC,gCAAgC,GAChC,wBAAwB,GAExB,kCAAkC,GAElC,iCAAiC,GACjC,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,GAC/B,+BAA+B,GAC/B,6BAA6B,GAC7B,sBAAsB,GACtB,qBAAqB,GACrB,sBAAsB,GACtB,0BAA0B,GAE1B,wBAAwB,GACxB,8BAA8B,GAC9B,qCAAqC,GACrC,qCAAqC,GACrC,iCAAiC,GACjC,mCAAmC,GACnC,qCAAqC,GAErC,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,+BAA+B,GAC/B,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,GAC5B,0BAA0B,GAC1B,yBAAyB,GACzB,+BAA+B,GAC/B,yBAAyB,GAEzB,6BAA6B,GAE7B,gCAAgC,GAChC,iCAAiC,GACjC,6BAA6B,GAC7B,2BAA2B,GAC3B,gCAAgC,GAChC,qCAAqC,GAErC,gCAAgC,GAChC,0BAA0B,GAC1B,oBAAoB,GACpB,sBAAsB,GACtB,2BAA2B,GAC3B,uBAAuB,GACvB,4BAA4B,GAC5B,gCAAgC,GAChC,2BAA2B,GAC3B,qBAAqB,GACrB,qBAAqB,GACrB,gBAAgB,GAEhB,+BAA+B,GAC/B,2BAA2B,GAC3B,2BAA2B,GAC3B,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,2BAA2B,GAC3B,wBAAwB,GAExB,wBAAwB,GACxB,qCAAqC,GACrC,sBAAsB,GAEtB,8BAA8B,GAE9B,wBAAwB,GACxB,+BAA+B,GAC/B,iCAAiC,GACjC,8BAA8B,GAC9B,4BAA4B,GAC5B,2BAA2B,GAC3B,kCAAkC,GAClC,4CAA4C,GAC5C,8CAA8C,GAC9C,uCAAuC,GAEvC,eAAe,GACf,qBAAqB,GACrB,wBAAwB,GACxB,eAAe,GACf,0BAA0B,GAC1B,qBAAqB,GACrB,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,CAAC;AAExB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,UAAU,CAm3BtD,CAAC"}