oh-my-knowledge 0.32.0 → 0.33.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 (119) hide show
  1. package/README.md +11 -9
  2. package/README.zh.md +11 -9
  3. package/dist/analysis/saturation.d.ts +8 -0
  4. package/dist/analysis/saturation.d.ts.map +1 -1
  5. package/dist/analysis/saturation.js +12 -4
  6. package/dist/analysis/saturation.js.map +1 -1
  7. package/dist/authoring/evolver.d.ts +43 -2
  8. package/dist/authoring/evolver.d.ts.map +1 -1
  9. package/dist/authoring/evolver.js +91 -8
  10. package/dist/authoring/evolver.js.map +1 -1
  11. package/dist/authoring/generator.d.ts +29 -1
  12. package/dist/authoring/generator.d.ts.map +1 -1
  13. package/dist/authoring/generator.js +113 -0
  14. package/dist/authoring/generator.js.map +1 -1
  15. package/dist/cli/commands/doctor.d.ts +2 -0
  16. package/dist/cli/commands/doctor.d.ts.map +1 -1
  17. package/dist/cli/commands/doctor.js +22 -3
  18. package/dist/cli/commands/doctor.js.map +1 -1
  19. package/dist/cli/commands/eval/index.d.ts.map +1 -1
  20. package/dist/cli/commands/eval/index.js +3 -2
  21. package/dist/cli/commands/eval/index.js.map +1 -1
  22. package/dist/cli/commands/evolve.d.ts +1 -0
  23. package/dist/cli/commands/evolve.d.ts.map +1 -1
  24. package/dist/cli/commands/evolve.js +16 -0
  25. package/dist/cli/commands/evolve.js.map +1 -1
  26. package/dist/cli/commands/observe/index.d.ts.map +1 -1
  27. package/dist/cli/commands/observe/index.js +6 -2
  28. package/dist/cli/commands/observe/index.js.map +1 -1
  29. package/dist/cli/commands/sample.d.ts +2 -0
  30. package/dist/cli/commands/sample.d.ts.map +1 -1
  31. package/dist/cli/commands/sample.js +98 -6
  32. package/dist/cli/commands/sample.js.map +1 -1
  33. package/dist/cli/lib/cmd-flags.d.ts +5 -0
  34. package/dist/cli/lib/cmd-flags.d.ts.map +1 -1
  35. package/dist/cli/lib/i18n-dict/common.d.ts +1 -1
  36. package/dist/cli/lib/i18n-dict/common.d.ts.map +1 -1
  37. package/dist/cli/lib/i18n-dict/common.js +18 -2
  38. package/dist/cli/lib/i18n-dict/common.js.map +1 -1
  39. package/dist/cli/lib/i18n-dict/evolve.d.ts +1 -1
  40. package/dist/cli/lib/i18n-dict/evolve.d.ts.map +1 -1
  41. package/dist/cli/lib/i18n-dict/evolve.js +8 -0
  42. package/dist/cli/lib/i18n-dict/evolve.js.map +1 -1
  43. package/dist/cli/lib/parse-run-config/variant-resolution.d.ts +8 -3
  44. package/dist/cli/lib/parse-run-config/variant-resolution.d.ts.map +1 -1
  45. package/dist/cli/lib/parse-run-config/variant-resolution.js +16 -10
  46. package/dist/cli/lib/parse-run-config/variant-resolution.js.map +1 -1
  47. package/dist/cli/lib/resolve-skill-input.d.ts.map +1 -1
  48. package/dist/cli/lib/resolve-skill-input.js +7 -5
  49. package/dist/cli/lib/resolve-skill-input.js.map +1 -1
  50. package/dist/cli/lib/update-check.d.ts +65 -0
  51. package/dist/cli/lib/update-check.d.ts.map +1 -1
  52. package/dist/cli/lib/update-check.js +220 -31
  53. package/dist/cli/lib/update-check.js.map +1 -1
  54. package/dist/cli/lib/update-fetch-worker.d.ts +2 -0
  55. package/dist/cli/lib/update-fetch-worker.d.ts.map +1 -0
  56. package/dist/cli/lib/update-fetch-worker.js +35 -0
  57. package/dist/cli/lib/update-fetch-worker.js.map +1 -0
  58. package/dist/doctor/health/load-custom-dimensions.d.ts +2 -0
  59. package/dist/doctor/health/load-custom-dimensions.d.ts.map +1 -0
  60. package/dist/doctor/health/load-custom-dimensions.js +31 -0
  61. package/dist/doctor/health/load-custom-dimensions.js.map +1 -0
  62. package/dist/eval-core/bootstrap.d.ts +8 -0
  63. package/dist/eval-core/bootstrap.d.ts.map +1 -1
  64. package/dist/eval-core/bootstrap.js +11 -3
  65. package/dist/eval-core/bootstrap.js.map +1 -1
  66. package/dist/eval-core/evaluation-reporting.d.ts.map +1 -1
  67. package/dist/eval-core/evaluation-reporting.js +4 -4
  68. package/dist/eval-core/evaluation-reporting.js.map +1 -1
  69. package/dist/eval-core/verdict.d.ts +21 -3
  70. package/dist/eval-core/verdict.d.ts.map +1 -1
  71. package/dist/eval-core/verdict.js +54 -4
  72. package/dist/eval-core/verdict.js.map +1 -1
  73. package/dist/eval-workflows/evaluation-preparation.d.ts.map +1 -1
  74. package/dist/eval-workflows/evaluation-preparation.js +39 -11
  75. package/dist/eval-workflows/evaluation-preparation.js.map +1 -1
  76. package/dist/eval-workflows/run-evaluation.d.ts +1 -1
  77. package/dist/eval-workflows/run-evaluation.d.ts.map +1 -1
  78. package/dist/eval-workflows/run-evaluation.js +7 -7
  79. package/dist/eval-workflows/run-evaluation.js.map +1 -1
  80. package/dist/inputs/eval-config.d.ts.map +1 -1
  81. package/dist/inputs/eval-config.js +1 -0
  82. package/dist/inputs/eval-config.js.map +1 -1
  83. package/dist/inputs/skill-loader.d.ts +22 -0
  84. package/dist/inputs/skill-loader.d.ts.map +1 -1
  85. package/dist/inputs/skill-loader.js +171 -12
  86. package/dist/inputs/skill-loader.js.map +1 -1
  87. package/dist/observability/skill-health-analyzer.d.ts +13 -0
  88. package/dist/observability/skill-health-analyzer.d.ts.map +1 -1
  89. package/dist/observability/skill-health-analyzer.js +17 -2
  90. package/dist/observability/skill-health-analyzer.js.map +1 -1
  91. package/dist/renderer/layout.d.ts.map +1 -1
  92. package/dist/renderer/layout.js +2 -0
  93. package/dist/renderer/layout.js.map +1 -1
  94. package/dist/renderer/skill-detail-renderer.d.ts.map +1 -1
  95. package/dist/renderer/skill-detail-renderer.js +98 -19
  96. package/dist/renderer/skill-detail-renderer.js.map +1 -1
  97. package/dist/renderer/skill-health-renderer.d.ts.map +1 -1
  98. package/dist/renderer/skill-health-renderer.js +33 -4
  99. package/dist/renderer/skill-health-renderer.js.map +1 -1
  100. package/dist/renderer/skill-list-renderer.d.ts.map +1 -1
  101. package/dist/renderer/skill-list-renderer.js +18 -6
  102. package/dist/renderer/skill-list-renderer.js.map +1 -1
  103. package/dist/renderer/summary.d.ts.map +1 -1
  104. package/dist/renderer/summary.js +20 -8
  105. package/dist/renderer/summary.js.map +1 -1
  106. package/dist/server/report-server.d.ts.map +1 -1
  107. package/dist/server/report-server.js +9 -2
  108. package/dist/server/report-server.js.map +1 -1
  109. package/dist/server/skill-index.d.ts.map +1 -1
  110. package/dist/server/skill-index.js +3 -0
  111. package/dist/server/skill-index.js.map +1 -1
  112. package/dist/server/skill-insights.d.ts.map +1 -1
  113. package/dist/server/skill-insights.js +33 -5
  114. package/dist/server/skill-insights.js.map +1 -1
  115. package/dist/types/eval.d.ts +1 -0
  116. package/dist/types/eval.d.ts.map +1 -1
  117. package/dist/types/skill-index.d.ts +3 -0
  118. package/dist/types/skill-index.d.ts.map +1 -1
  119. package/package.json +4 -4
@@ -36,8 +36,24 @@ export const commonDict = {
36
36
  en: '⚠ Failed to load samples file ({path}): {message}\n',
37
37
  },
38
38
  'cli.update.new_version_available': {
39
- zh: '\n💡 新版本可用: {old} → {new}, 运行 npm update {pkg} -g 升级\n\n',
40
- en: '\n💡 New version available: {old} → {new}, run npm update {pkg} -g to upgrade\n\n',
39
+ zh: '\n💡 新版本可用:{old} → {new},运行 npm i -g oh-my-knowledge@latest 升级\n\n',
40
+ en: '\n💡 New version available: {old} → {new}, run npm i -g oh-my-knowledge@latest to upgrade\n\n',
41
+ },
42
+ 'cli.update.box_title': {
43
+ zh: '↑ omk 有新版本',
44
+ en: '↑ omk update available',
45
+ },
46
+ 'cli.update.box_version_line': {
47
+ zh: '当前 {old} → 最新 {new}',
48
+ en: 'current {old} → latest {new}',
49
+ },
50
+ 'cli.update.box_upgrade_line': {
51
+ zh: '升级:{cmd}',
52
+ en: 'Upgrade: {cmd}',
53
+ },
54
+ 'cli.update.box_silence_line': {
55
+ zh: '静默:设 {env} 关闭提醒',
56
+ en: 'Silence: set {env} to disable',
41
57
  },
42
58
  'cli.observe.view_hint': {
43
59
  zh: '分析 JSON 已写入 output-dir;后续可用 omk observe 持续生成日报。',
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/common.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,2BAA2B,EAAE;QAC3B,EAAE,EAAE,uCAAuC;QAC3C,EAAE,EAAE,wEAAwE;KAC7E;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,iBAAiB;QACrB,EAAE,EAAE,oBAAoB;KACzB;IACD,gCAAgC,EAAE;QAChC,EAAE,EAAE,sBAAsB;QAC1B,EAAE,EAAE,mCAAmC;KACxC;IACD,iCAAiC,EAAE;QACjC,EAAE,EAAE,sBAAsB;QAC1B,EAAE,EAAE,8BAA8B;KACnC;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,yBAAyB;QAC7B,EAAE,EAAE,yCAAyC;KAC9C;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,kBAAkB;QACtB,EAAE,EAAE,wBAAwB;KAC7B;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,2EAA2E;QAC/E,EAAE,EAAE,sGAAsG;KAC3G;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,yDAAyD;QAC7D,EAAE,EAAE,8FAA8F;KACnG;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,yCAAyC;QAC7C,EAAE,EAAE,qDAAqD;KAC1D;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,0DAA0D;QAC9D,EAAE,EAAE,mFAAmF;KACxF;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,iDAAiD;QACrD,EAAE,EAAE,wFAAwF;KAC7F;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,kBAAkB;QACtB,EAAE,EAAE,yBAAyB;KAC9B;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,sBAAsB;KAC3B;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,oCAAoC;QACxC,EAAE,EAAE,iEAAiE;KACtE;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,wFAAwF;QAC5F,EAAE,EAAE,0HAA0H;KAC/H;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,mBAAmB;QACvB,EAAE,EAAE,mCAAmC;KACxC;CACF,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/common.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,2BAA2B,EAAE;QAC3B,EAAE,EAAE,uCAAuC;QAC3C,EAAE,EAAE,wEAAwE;KAC7E;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,iBAAiB;QACrB,EAAE,EAAE,oBAAoB;KACzB;IACD,gCAAgC,EAAE;QAChC,EAAE,EAAE,sBAAsB;QAC1B,EAAE,EAAE,mCAAmC;KACxC;IACD,iCAAiC,EAAE;QACjC,EAAE,EAAE,sBAAsB;QAC1B,EAAE,EAAE,8BAA8B;KACnC;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,yBAAyB;QAC7B,EAAE,EAAE,yCAAyC;KAC9C;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,kBAAkB;QACtB,EAAE,EAAE,wBAAwB;KAC7B;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,2EAA2E;QAC/E,EAAE,EAAE,sGAAsG;KAC3G;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,yDAAyD;QAC7D,EAAE,EAAE,8FAA8F;KACnG;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,yCAAyC;QAC7C,EAAE,EAAE,qDAAqD;KAC1D;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,oEAAoE;QACxE,EAAE,EAAE,+FAA+F;KACpG;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,wBAAwB;KAC7B;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,qBAAqB;QACzB,EAAE,EAAE,8BAA8B;KACnC;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,UAAU;QACd,EAAE,EAAE,gBAAgB;KACrB;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,iBAAiB;QACrB,EAAE,EAAE,+BAA+B;KACpC;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,iDAAiD;QACrD,EAAE,EAAE,wFAAwF;KAC7F;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,kBAAkB;QACtB,EAAE,EAAE,yBAAyB;KAC9B;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,sBAAsB;KAC3B;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,oCAAoC;QACxC,EAAE,EAAE,iEAAiE;KACtE;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,wFAAwF;QAC5F,EAAE,EAAE,0HAA0H;KAC/H;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,mBAAmB;QACvB,EAAE,EAAE,mCAAmC;KACxC;CACF,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { CliMessage } from './types.js';
2
- export type EvolveMessageKey = 'cli.evolve.specify_skill_path' | 'cli.evolve.section_header' | 'cli.evolve.round_baseline' | 'cli.evolve.round_baseline_reused' | 'cli.evolve.round_error' | 'cli.evolve.round_done' | 'cli.evolve.summary' | 'cli.evolve.best_path' | 'cli.evolve.versions_saved' | 'cli.evolve.report_link';
2
+ export type EvolveMessageKey = 'cli.evolve.specify_skill_path' | 'cli.evolve.section_header' | 'cli.evolve.round_baseline' | 'cli.evolve.round_baseline_reused' | 'cli.evolve.round_error' | 'cli.evolve.round_done' | 'cli.evolve.summary' | 'cli.evolve.best_path' | 'cli.evolve.versions_saved' | 'cli.evolve.report_link' | 'cli.evolve.holdout_active' | 'cli.evolve.holdout_disabled';
3
3
  export declare const evolveDict: Record<EvolveMessageKey, CliMessage>;
4
4
  //# sourceMappingURL=evolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/evolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GACxB,+BAA+B,GAC/B,2BAA2B,GAC3B,2BAA2B,GAC3B,kCAAkC,GAClC,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,2BAA2B,GAC3B,wBAAwB,CAAC;AAE7B,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAyC3D,CAAC"}
1
+ {"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/evolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GACxB,+BAA+B,GAC/B,2BAA2B,GAC3B,2BAA2B,GAC3B,kCAAkC,GAClC,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,2BAA2B,GAC3B,wBAAwB,GACxB,2BAA2B,GAC3B,6BAA6B,CAAC;AAElC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAiD3D,CAAC"}
@@ -39,5 +39,13 @@ export const evolveDict = {
39
39
  zh: '📊 查看报告:omk studio(报告 ID:{id})\n',
40
40
  en: '📊 View report: omk studio (report id: {id})\n',
41
41
  },
42
+ 'cli.evolve.holdout_active': {
43
+ zh: '🔀 holdout 切分:训练 {train} / 验收 {holdout},accept 看 holdout 分(防 train-on-test)\n',
44
+ en: '🔀 Holdout split: {train} train / {holdout} holdout; accepted on holdout score (guards train-on-test)\n',
45
+ },
46
+ 'cli.evolve.holdout_disabled': {
47
+ zh: '⚠️ holdout-ratio={ratio} 样本太少无法切分,已回退全集打分\n',
48
+ en: '⚠️ holdout-ratio={ratio} too few samples to split; using full-set scoring\n',
49
+ },
42
50
  };
43
51
  //# sourceMappingURL=evolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/evolve.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,+BAA+B,EAAE;QAC/B,EAAE,EAAE,mDAAmD;QACvD,EAAE,EAAE,uEAAuE;KAC5E;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,mCAAmC;QACvC,EAAE,EAAE,mCAAmC;KACxC;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,mCAAmC;QACvC,EAAE,EAAE,8CAA8C;KACnD;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,yCAAyC;QAC7C,EAAE,EAAE,iEAAiE;KACtE;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,kCAAkC;QACtC,EAAE,EAAE,2DAA2D;KAChE;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,0DAA0D;QAC9D,EAAE,EAAE,4DAA4D;KACjE;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,+DAA+D;QACnE,EAAE,EAAE,kEAAkE;KACvE;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,2BAA2B;QAC/B,EAAE,EAAE,2BAA2B;KAChC;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,oBAAoB;QACxB,EAAE,EAAE,iCAAiC;KACtC;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,kCAAkC;QACtC,EAAE,EAAE,gDAAgD;KACrD;CACF,CAAC"}
1
+ {"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../../src/cli/lib/i18n-dict/evolve.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,+BAA+B,EAAE;QAC/B,EAAE,EAAE,mDAAmD;QACvD,EAAE,EAAE,uEAAuE;KAC5E;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,mCAAmC;QACvC,EAAE,EAAE,mCAAmC;KACxC;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,mCAAmC;QACvC,EAAE,EAAE,8CAA8C;KACnD;IACD,kCAAkC,EAAE;QAClC,EAAE,EAAE,yCAAyC;QAC7C,EAAE,EAAE,iEAAiE;KACtE;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,kCAAkC;QACtC,EAAE,EAAE,2DAA2D;KAChE;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,0DAA0D;QAC9D,EAAE,EAAE,4DAA4D;KACjE;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,+DAA+D;QACnE,EAAE,EAAE,kEAAkE;KACvE;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,2BAA2B;QAC/B,EAAE,EAAE,2BAA2B;KAChC;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,oBAAoB;QACxB,EAAE,EAAE,iCAAiC;KACtC;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,kCAAkC;QACtC,EAAE,EAAE,gDAAgD;KACrD;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,+EAA+E;QACnF,EAAE,EAAE,yGAAyG;KAC9G;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6CAA6C;QACjD,EAAE,EAAE,6EAA6E;KAClF;CACF,CAAC"}
@@ -9,9 +9,14 @@
9
9
  * - 仅 batch 模式 → 留空,batch workflow 自己生成(baseline vs 每个 skill)
10
10
  * - 都没有 → throw,附带 skill-dir 下候选 variant 提示,引导显式声明
11
11
  *
12
- * 之后做 variant name 唯一性检查 —— 同名 variant 不能同时在 --control 和
13
- * --treatment,也不能 --treatment 内重复。否则 ensemble agreement / report 字段
14
- * 都会按 name 去重,跑了但聚不到。
12
+ * 之后做 variant 唯一性检查 —— 同一个物理 variant 不能同时在 --control 和
13
+ * --treatment,也不能 --treatment 内重复。按 `variantIdentity`(规范化后的物理身份,
14
+ * 路径 resolve、目录与 SKILL.md 折叠、cwd 纳入)判重,而非派生短名,也不是裸 expr 字面量:
15
+ * - `v1/greeter.md` 与 `v2/greeter.md` 短名都是 greeter 却是两个 variant —— 不该误判重复,
16
+ * 最终唯一名由 resolveArtifacts 的 ensureUniqueVariantNames 消歧。
17
+ * - `./x.md` 与 `x.md`、`dir` 与 `dir/SKILL.md` 是同一份 skill —— 必须判为重复,
18
+ * 否则会被解析成两个 artifact 后用 `x` / `x#2` 消歧,变成同一份 skill 自比,
19
+ * 悄悄废掉「control 不能等于 treatment」的测量保护。
15
20
  */
16
21
  import type { EvalConfig, VariantSpec } from '../../../types/index.js';
17
22
  export declare function resolveVariantSpecs(values: Record<string, unknown>, evalConfig: EvalConfig | null, skillDir: string): VariantSpec[];
@@ -1 +1 @@
1
- {"version":3,"file":"variant-resolution.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/parse-run-config/variant-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEvE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CA4Cf"}
1
+ {"version":3,"file":"variant-resolution.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/parse-run-config/variant-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEvE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CA6Cf"}
@@ -9,11 +9,16 @@
9
9
  * - 仅 batch 模式 → 留空,batch workflow 自己生成(baseline vs 每个 skill)
10
10
  * - 都没有 → throw,附带 skill-dir 下候选 variant 提示,引导显式声明
11
11
  *
12
- * 之后做 variant name 唯一性检查 —— 同名 variant 不能同时在 --control 和
13
- * --treatment,也不能 --treatment 内重复。否则 ensemble agreement / report 字段
14
- * 都会按 name 去重,跑了但聚不到。
12
+ * 之后做 variant 唯一性检查 —— 同一个物理 variant 不能同时在 --control 和
13
+ * --treatment,也不能 --treatment 内重复。按 `variantIdentity`(规范化后的物理身份,
14
+ * 路径 resolve、目录与 SKILL.md 折叠、cwd 纳入)判重,而非派生短名,也不是裸 expr 字面量:
15
+ * - `v1/greeter.md` 与 `v2/greeter.md` 短名都是 greeter 却是两个 variant —— 不该误判重复,
16
+ * 最终唯一名由 resolveArtifacts 的 ensureUniqueVariantNames 消歧。
17
+ * - `./x.md` 与 `x.md`、`dir` 与 `dir/SKILL.md` 是同一份 skill —— 必须判为重复,
18
+ * 否则会被解析成两个 artifact 后用 `x` / `x#2` 消歧,变成同一份 skill 自比,
19
+ * 悄悄废掉「control 不能等于 treatment」的测量保护。
15
20
  */
16
- import { discoverVariants, parseVariantCwd } from '../../../inputs/skill-loader.js';
21
+ import { discoverVariants, variantExprToSkillName, variantIdentity } from '../../../inputs/skill-loader.js';
17
22
  import { configVariantsToSpecs } from '../../../inputs/eval-config.js';
18
23
  export function resolveVariantSpecs(values, evalConfig, skillDir) {
19
24
  const controlExpr = values.control;
@@ -25,10 +30,10 @@ export function resolveVariantSpecs(values, evalConfig, skillDir) {
25
30
  // CLI roles present → CLI entirely replaces config.variants (no merging).
26
31
  variantSpecs = [];
27
32
  if (controlExpr) {
28
- variantSpecs.push({ name: parseVariantCwd(controlExpr).name, role: 'control', expr: controlExpr });
33
+ variantSpecs.push({ name: variantExprToSkillName(controlExpr), role: 'control', expr: controlExpr });
29
34
  }
30
35
  for (const expr of treatmentExprs) {
31
- variantSpecs.push({ name: parseVariantCwd(expr).name, role: 'treatment', expr });
36
+ variantSpecs.push({ name: variantExprToSkillName(expr), role: 'treatment', expr });
32
37
  }
33
38
  }
34
39
  else if (evalConfig) {
@@ -47,12 +52,13 @@ export function resolveVariantSpecs(values, evalConfig, skillDir) {
47
52
  + ` --batch 模式下自动用 baseline vs 每个 skill,无需显式声明\n`
48
53
  + ` 术语见 docs/specs/terminology-spec.md(v0.16 起废除 --variants,改用 experiment role 显式声明)`);
49
54
  }
50
- const seenNames = new Set();
55
+ const seenIdentities = new Set();
51
56
  for (const spec of variantSpecs) {
52
- if (seenNames.has(spec.name)) {
53
- throw new Error(`variant "${spec.name}" 重复出现——同一 variant 不能同时属于 --control 与 --treatment,也不能在 --treatment 中重复。`);
57
+ const key = variantIdentity(spec.expr, skillDir);
58
+ if (seenIdentities.has(key)) {
59
+ throw new Error(`variant "${spec.expr}" 重复出现——同一 variant 不能同时属于 --control 与 --treatment,也不能在 --treatment 中重复。`);
54
60
  }
55
- seenNames.add(spec.name);
61
+ seenIdentities.add(key);
56
62
  }
57
63
  return variantSpecs;
58
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"variant-resolution.js","sourceRoot":"","sources":["../../../../src/cli/lib/parse-run-config/variant-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,UAA6B,EAC7B,QAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,CAAC,OAA6B,CAAC;IACzD,MAAM,cAAc,GAAa,MAAM,CAAC,SAAS;QAC/C,CAAC,CAAE,MAAM,CAAC,SAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACtF,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,YAA2B,CAAC;IAChC,IAAI,WAAW,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,0EAA0E;QAC1E,YAAY,GAAG,EAAE,CAAC;QAClB,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,YAAY,GAAG,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,4DAA4D;QAC5D,yCAAyC;QACzC,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,QAAQ,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,KAAK,CACb,mEAAmE;cACjE,wDAAwD,IAAI,IAAI;cAChE,gDAAgD;cAChD,oFAAoF,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,IAAI,yEAAyE,CAC/F,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"variant-resolution.js","sourceRoot":"","sources":["../../../../src/cli/lib/parse-run-config/variant-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,UAA6B,EAC7B,QAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,CAAC,OAA6B,CAAC;IACzD,MAAM,cAAc,GAAa,MAAM,CAAC,SAAS;QAC/C,CAAC,CAAE,MAAM,CAAC,SAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACtF,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,YAA2B,CAAC;IAChC,IAAI,WAAW,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,0EAA0E;QAC1E,YAAY,GAAG,EAAE,CAAC;QAClB,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,YAAY,GAAG,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,4DAA4D;QAC5D,yCAAyC;QACzC,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,QAAQ,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,KAAK,CACb,mEAAmE;cACjE,wDAAwD,IAAI,IAAI;cAChE,gDAAgD;cAChD,oFAAoF,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,IAAI,yEAAyE,CAC/F,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-skill-input.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/resolve-skill-input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,kBAAkB,CA8BlF"}
1
+ {"version":3,"file":"resolve-skill-input.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/resolve-skill-input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAgClF"}
@@ -2,9 +2,9 @@ import { resolve, join, dirname } from 'node:path';
2
2
  import { existsSync, statSync } from 'node:fs';
3
3
  import { tCli } from './i18n.js';
4
4
  // 统一 skill 入参解析:既接受 SKILL.md 文件(老式 + flat skill),也接受 directory-skill
5
- // 目录(skills/foo/ 自动找 foo/SKILL.md)。samples 发现优先级:.omk/samples.json >
6
- // eval-samples.json > .yaml > .yml,fallback 是第一个候选(给上游 "samples 不存在"
7
- // 的提示一个稳定路径)。
5
+ // 目录(skills/foo/ 自动找 foo/SKILL.md)。samples 发现优先级:.omk/ 目录(loadSamples
6
+ // 支持目录模式,自动 glob 多文件) > eval-samples.json > .yaml > .yml,fallback 是
7
+ // .omk/ 目录路径(给上游 "samples 不存在" 的提示一个稳定路径)。
8
8
  //
9
9
  // 错误用 tCli 走 i18n,调用方直接 console.error err.message 给用户看,zh/en 都要正确。
10
10
  export function resolveSkillInput(input, lang) {
@@ -26,13 +26,15 @@ export function resolveSkillInput(input, lang) {
26
26
  skillPath = resolved;
27
27
  skillDir = dirname(resolved);
28
28
  }
29
+ const omkDir = join(skillDir, '.omk');
29
30
  const candidates = [
30
- join(skillDir, '.omk', 'samples.json'),
31
+ ...(existsSync(omkDir) ? [omkDir] : []),
31
32
  join(skillDir, 'eval-samples.json'),
32
33
  join(skillDir, 'eval-samples.yaml'),
33
34
  join(skillDir, 'eval-samples.yml'),
34
35
  ];
35
- const samplesPath = candidates.find(existsSync) ?? candidates[0];
36
+ // fallback 到 .omk/ 目录:上游会报 "no sample files found in directory" 引导用户创建
37
+ const samplesPath = candidates.find(existsSync) ?? omkDir;
36
38
  return { skillPath, skillDir, samplesPath };
37
39
  }
38
40
  //# sourceMappingURL=resolve-skill-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-skill-input.js","sourceRoot":"","sources":["../../../src/cli/lib/resolve-skill-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAgB,MAAM,WAAW,CAAC;AAQ/C,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,cAAc;AACd,EAAE;AACF,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAa;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,QAAgB,CAAC;IAErB,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,SAAS,GAAG,OAAO,CAAC;QACpB,QAAQ,GAAG,QAAQ,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,QAAQ,CAAC;QACrB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACnC,CAAC;IACF,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"resolve-skill-input.js","sourceRoot":"","sources":["../../../src/cli/lib/resolve-skill-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAgB,MAAM,WAAW,CAAC;AAQ/C,qEAAqE;AACrE,sEAAsE;AACtE,oEAAoE;AACpE,2CAA2C;AAC3C,EAAE;AACF,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAa;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,QAAgB,CAAC;IAErB,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,SAAS,GAAG,OAAO,CAAC;QACpB,QAAQ,GAAG,QAAQ,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,QAAQ,CAAC;QACrB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACnC,CAAC;IACF,uEAAuE;IACvE,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;IAE1D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC"}
@@ -5,5 +5,70 @@ import { type CliLang } from './i18n.js';
5
5
  * - release > prerelease(同 MAJOR.MINOR.PATCH)
6
6
  * - prerelease 之间按 dot-separated identifier 比较(数字段当数字,字母段当字符串) */
7
7
  export declare function isSemverGt(a: string, b: string): boolean;
8
+ /** 落盘缓存。展示只读它(热路径零网络);registry 抓取在后台写它,供下次运行用。 */
9
+ export interface UpdateCache {
10
+ /** 上次抓到的 registry latest 版本。后台抓取成功才有;只发起过、还没成功时缺位。 */
11
+ latestVersion?: string;
12
+ /** 上次「发起检查」的时间(ISO)—— 成功失败都更新,是 20h 重抓节流的锚点。
13
+ * 父进程在 spawn 刷新前就写它,这样 registry 不通时也不会每条命令都重新拉起后台检查。 */
14
+ lastCheckedAt: string;
15
+ /** 上次提示过的版本,用于「同版本 20h 内不重复提示」。 */
16
+ lastNotifiedVersion?: string;
17
+ /** 上次提示时间(ISO)。 */
18
+ lastNotifiedAt?: string;
19
+ }
20
+ interface BoxParts {
21
+ current: string;
22
+ latest: string;
23
+ upgradeCmd: string;
24
+ silenceHint: string;
25
+ }
26
+ /** 缓存落盘走仓库既有约定 `~/.oh-my-knowledge/<...>`(见 src/eval-core/cache.ts、
27
+ * src/server/job-store.ts)。home 可注入,方便测试传 tmp 目录。 */
28
+ export declare function defaultCachePath(home?: string): string;
29
+ /** 读缓存。缺失 / 损坏 / 非对象 / 缺时间锚点一律返回 null,调用方按「无缓存」处理。
30
+ * lastCheckedAt(节流锚点)必须有;latestVersion 可缺(只发起过、还没抓成功的记录)。 */
31
+ export declare function readCache(path: string): UpdateCache | null;
32
+ /** 原子写(temp + rename),避免两个 omk 进程并发写出半截 JSON。homedir 不可写时
33
+ * 整体静默失败 — 退化为「每次后台重抓」,不崩。 */
34
+ export declare function writeCache(path: string, data: UpdateCache): void;
35
+ /** 是否该提示:有缓存的 latest 严格高于当前版本,且(没提示过这个版本 / 距上次提示超 20h)。
36
+ * 纯函数,now 外部注入,便于确定性测试。 */
37
+ export declare function shouldNotify(cache: UpdateCache | null, currentVersion: string, now: Date, throttleMs?: number): boolean;
38
+ /** 缓存是否过期(需后台重抓):无缓存 / 时间戳缺失或不可解析 / 超 ttl。 */
39
+ export declare function isStale(cache: UpdateCache | null, now: Date, ttlMs?: number): boolean;
40
+ /** 一次运行该做什么(纯函数,now 注入,便于确定性测试):
41
+ * - notify:是否展示提示(仅凭缓存,无网络)。
42
+ * - refresh:是否发起后台刷新。
43
+ * - nextCache:需要落盘的新缓存,null 表示无需写。
44
+ *
45
+ * 关键:refresh 为真时,nextCache 一定带上 `lastCheckedAt = now` —— 即「发起检查」这件事本身
46
+ * 会立即落盘,所以 registry 持续不通时,下一次运行看到新鲜的 lastCheckedAt 就不再重复 spawn,
47
+ * 20h 节流对离线/失败同样生效(不退化成每条命令拉起后台检查)。 */
48
+ export declare function planUpdateActions(cache: UpdateCache | null, currentVersion: string, now: Date): {
49
+ notify: boolean;
50
+ refresh: boolean;
51
+ nextCache: UpdateCache | null;
52
+ };
53
+ /** 终端可视宽度:全角 / CJK codepoint 计 2,其余计 1。用 [...str] 逐 codepoint
54
+ * 迭代以正确处理代理对。框内只用 width-1 的 ↑(U+2191)/→(U+2192),不放 emoji,
55
+ * 避免 emoji 宽度歧义破坏右边框对齐。 */
56
+ export declare function visualWidth(str: string): number;
57
+ /** 右补空格到目标可视宽度(已超宽则原样返回)。 */
58
+ export declare function padToWidth(str: string, target: number): string;
59
+ /** 渲染多行高亮边框(纯函数,可快照测试)。内宽取各行最大可视宽度,逐行用
60
+ * padToWidth 对齐后画 ┌┐└┘─│ 框,返回前后留白、以 \n 结尾的整串。 */
61
+ export declare function renderUpdateBox(parts: BoxParts, lang: CliLang): string;
62
+ /** 选染提示文案:TTY 下多行高亮框,管道 / 非 TTY 退回单行(不污染输出)。纯函数,
63
+ * isTty 注入便于测试两条分支。 */
64
+ export declare function renderNotice(parts: BoxParts, pkgName: string, lang: CliLang, isTty: boolean): string;
65
+ /** spawn 一个 detached + unref 的子进程跑 worker。子进程启动失败(ENOENT / EACCES /
66
+ * EAGAIN)是异步 `error` 事件 —— 不挂 listener 的话 Node 会当 uncaught exception 抛出、
67
+ * 反过来拖垮主命令,所以必须挂个空 handler 吞掉,维持升级检查全程 fail-silent。 */
68
+ export declare function spawnDetached(scriptPath: string, args: string[]): void;
69
+ /** 升级提示:展示与抓取解耦。本次运行只读缓存即时决定是否提示(热路径零网络);
70
+ * 缓存过期时后台抓一次写回,供下次用。首次运行(无缓存)不提示。全程 fail-silent,
71
+ * 由 index.ts 在非短路径下 fire-and-forget 调用。 */
8
72
  export declare function checkUpdate(lang: CliLang): Promise<void>;
73
+ export {};
9
74
  //# sourceMappingURL=update-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;mEAImE;AACnE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAsCxD;AAcD,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9D"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/update-check.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;mEAImE;AACnE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAsCxD;AAkBD,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;6DACyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;sDACsD;AACtD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAEjE;AAED;8DAC8D;AAC9D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgB1D;AAED;+BAC+B;AAC/B,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAShE;AAED;4BAC4B;AAC5B,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,IAAI,EACT,UAAU,GAAE,MAAyB,GACpC,OAAO,CAOT;AAED,8CAA8C;AAC9C,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAE,MAAyB,GAAG,OAAO,CAKvG;AAED;;;;;;;wCAOwC;AACxC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG;IAC/F,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;CAC/B,CAYA;AAED;;4BAE4B;AAC5B,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO/C;AAcD,6BAA6B;AAC7B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;kDACkD;AAClD,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAYtE;AAED;wBACwB;AACxB,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAOpG;AA2CD;;wDAEwD;AACxD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAMtE;AAED;;4CAE4C;AAC5C,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B9D"}
@@ -1,3 +1,8 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
1
6
  import { tCli } from './i18n.js';
2
7
  /** 严格按 SemVer 2.0 precedence 判断 `a > b`(只覆盖本仓库实际使用的形态:
3
8
  * MAJOR.MINOR.PATCH 可选 `-prerelease`)。非法字符串直接返回 false,update-check
@@ -71,43 +76,227 @@ function shouldSkipUpdateCheck() {
71
76
  return true;
72
77
  return false;
73
78
  }
74
- export async function checkUpdate(lang) {
75
- if (shouldSkipUpdateCheck())
76
- return;
79
+ /** 统一的 20h 时间窗,两处共用:同一新版本最多提示一次的节流窗口、registry 重抓的过期窗口。
80
+ * 够长,高频命令下既不反复打网络也不反复 nag;又短于一天,用户隔天能再被提醒一次。 */
81
+ const UPDATE_WINDOW_MS = 20 * 3600_000;
82
+ /** 缓存落盘走仓库既有约定 `~/.oh-my-knowledge/<...>`(见 src/eval-core/cache.ts、
83
+ * src/server/job-store.ts)。home 可注入,方便测试传 tmp 目录。 */
84
+ export function defaultCachePath(home = homedir()) {
85
+ return join(home, '.oh-my-knowledge', 'update-check.json');
86
+ }
87
+ /** 读缓存。缺失 / 损坏 / 非对象 / 缺时间锚点一律返回 null,调用方按「无缓存」处理。
88
+ * lastCheckedAt(节流锚点)必须有;latestVersion 可缺(只发起过、还没抓成功的记录)。 */
89
+ export function readCache(path) {
77
90
  try {
78
- const { readFileSync, existsSync } = await import('node:fs');
79
- const { fileURLToPath } = await import('node:url');
80
- const { dirname, join } = await import('node:path');
81
- const __dirname = dirname(fileURLToPath(import.meta.url));
82
- // 从当前文件位置向上找 package.json:dev 跑 src/cli/lib/ 时 3 层到根,
83
- // 装到 npm 跑 dist/cli/lib/ 时 3 层到 oh-my-knowledge/。5 次给点 buffer。
84
- const findPackageJson = (startDir) => {
85
- let dir = startDir;
86
- for (let i = 0; i < 5; i++) {
87
- const candidate = join(dir, 'package.json');
88
- if (existsSync(candidate))
89
- return candidate;
90
- dir = dirname(dir);
91
- }
91
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
92
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
93
+ return null;
94
+ const obj = parsed;
95
+ if (typeof obj.lastCheckedAt !== 'string')
92
96
  return null;
97
+ const str = (v) => (typeof v === 'string' ? v : undefined);
98
+ return {
99
+ latestVersion: str(obj.latestVersion),
100
+ lastCheckedAt: obj.lastCheckedAt,
101
+ lastNotifiedVersion: str(obj.lastNotifiedVersion),
102
+ lastNotifiedAt: str(obj.lastNotifiedAt),
93
103
  };
94
- const pkgPath = findPackageJson(__dirname);
95
- if (!pkgPath)
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ /** 原子写(temp + rename),避免两个 omk 进程并发写出半截 JSON。homedir 不可写时
110
+ * 整体静默失败 — 退化为「每次后台重抓」,不崩。 */
111
+ export function writeCache(path, data) {
112
+ try {
113
+ mkdirSync(dirname(path), { recursive: true });
114
+ const tmp = `${path}.tmp.${process.pid}`;
115
+ writeFileSync(tmp, JSON.stringify(data, null, 2));
116
+ renameSync(tmp, path);
117
+ }
118
+ catch {
119
+ /* 静默:缓存是装饰性状态,写不进去不影响功能 */
120
+ }
121
+ }
122
+ /** 是否该提示:有缓存的 latest 严格高于当前版本,且(没提示过这个版本 / 距上次提示超 20h)。
123
+ * 纯函数,now 外部注入,便于确定性测试。 */
124
+ export function shouldNotify(cache, currentVersion, now, throttleMs = UPDATE_WINDOW_MS) {
125
+ if (!cache?.latestVersion || !isSemverGt(cache.latestVersion, currentVersion))
126
+ return false;
127
+ if (cache.lastNotifiedVersion !== cache.latestVersion)
128
+ return true;
129
+ if (!cache.lastNotifiedAt)
130
+ return true;
131
+ const last = Date.parse(cache.lastNotifiedAt);
132
+ if (Number.isNaN(last))
133
+ return true;
134
+ return now.getTime() - last > throttleMs;
135
+ }
136
+ /** 缓存是否过期(需后台重抓):无缓存 / 时间戳缺失或不可解析 / 超 ttl。 */
137
+ export function isStale(cache, now, ttlMs = UPDATE_WINDOW_MS) {
138
+ if (!cache?.lastCheckedAt)
139
+ return true;
140
+ const last = Date.parse(cache.lastCheckedAt);
141
+ if (Number.isNaN(last))
142
+ return true;
143
+ return now.getTime() - last > ttlMs;
144
+ }
145
+ /** 一次运行该做什么(纯函数,now 注入,便于确定性测试):
146
+ * - notify:是否展示提示(仅凭缓存,无网络)。
147
+ * - refresh:是否发起后台刷新。
148
+ * - nextCache:需要落盘的新缓存,null 表示无需写。
149
+ *
150
+ * 关键:refresh 为真时,nextCache 一定带上 `lastCheckedAt = now` —— 即「发起检查」这件事本身
151
+ * 会立即落盘,所以 registry 持续不通时,下一次运行看到新鲜的 lastCheckedAt 就不再重复 spawn,
152
+ * 20h 节流对离线/失败同样生效(不退化成每条命令拉起后台检查)。 */
153
+ export function planUpdateActions(cache, currentVersion, now) {
154
+ const nowIso = now.toISOString();
155
+ const notify = shouldNotify(cache, currentVersion, now);
156
+ const refresh = isStale(cache, now);
157
+ let nextCache = null;
158
+ if (notify && cache) {
159
+ nextCache = { ...cache, lastNotifiedVersion: cache.latestVersion, lastNotifiedAt: nowIso };
160
+ }
161
+ if (refresh) {
162
+ nextCache = { ...(nextCache ?? cache ?? {}), lastCheckedAt: nowIso };
163
+ }
164
+ return { notify, refresh, nextCache };
165
+ }
166
+ /** 终端可视宽度:全角 / CJK codepoint 计 2,其余计 1。用 [...str] 逐 codepoint
167
+ * 迭代以正确处理代理对。框内只用 width-1 的 ↑(U+2191)/→(U+2192),不放 emoji,
168
+ * 避免 emoji 宽度歧义破坏右边框对齐。 */
169
+ export function visualWidth(str) {
170
+ let width = 0;
171
+ for (const ch of str) {
172
+ const cp = ch.codePointAt(0) ?? 0;
173
+ width += isWideCodePoint(cp) ? 2 : 1;
174
+ }
175
+ return width;
176
+ }
177
+ function isWideCodePoint(cp) {
178
+ return ((cp >= 0x1100 && cp <= 0x115f) || // Hangul Jamo
179
+ (cp >= 0x2e80 && cp <= 0xa4cf) || // CJK 部首 … 彝文;含 CJK 标点(3000-303F「。、」)与统一表意(4E00-9FFF)
180
+ (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul 音节
181
+ (cp >= 0xf900 && cp <= 0xfaff) || // CJK 兼容表意
182
+ (cp >= 0xfe30 && cp <= 0xfe4f) || // CJK 兼容形式
183
+ (cp >= 0xff00 && cp <= 0xff60) || // 全角 ASCII / 标点
184
+ (cp >= 0xffe0 && cp <= 0xffe6) // 全角符号
185
+ );
186
+ }
187
+ /** 右补空格到目标可视宽度(已超宽则原样返回)。 */
188
+ export function padToWidth(str, target) {
189
+ const pad = target - visualWidth(str);
190
+ return pad > 0 ? str + ' '.repeat(pad) : str;
191
+ }
192
+ /** 渲染多行高亮边框(纯函数,可快照测试)。内宽取各行最大可视宽度,逐行用
193
+ * padToWidth 对齐后画 ┌┐└┘─│ 框,返回前后留白、以 \n 结尾的整串。 */
194
+ export function renderUpdateBox(parts, lang) {
195
+ const lines = [
196
+ tCli('cli.update.box_title', lang),
197
+ tCli('cli.update.box_version_line', lang, { old: parts.current, new: parts.latest }),
198
+ tCli('cli.update.box_upgrade_line', lang, { cmd: parts.upgradeCmd }),
199
+ tCli('cli.update.box_silence_line', lang, { env: parts.silenceHint }),
200
+ ];
201
+ const inner = Math.max(...lines.map(visualWidth));
202
+ const top = `┌${'─'.repeat(inner + 2)}┐`;
203
+ const bottom = `└${'─'.repeat(inner + 2)}┘`;
204
+ const body = lines.map((l) => `│ ${padToWidth(l, inner)} │`);
205
+ return `\n${[top, ...body, bottom].join('\n')}\n\n`;
206
+ }
207
+ /** 选染提示文案:TTY 下多行高亮框,管道 / 非 TTY 退回单行(不污染输出)。纯函数,
208
+ * isTty 注入便于测试两条分支。 */
209
+ export function renderNotice(parts, pkgName, lang, isTty) {
210
+ if (isTty)
211
+ return renderUpdateBox(parts, lang);
212
+ return tCli('cli.update.new_version_available', lang, {
213
+ old: parts.current,
214
+ new: parts.latest,
215
+ pkg: pkgName,
216
+ });
217
+ }
218
+ /** 从当前文件位置向上找 package.json:dev 跑 src/cli/lib/ 时 3 层到根,
219
+ * 装到 npm 跑 dist/cli/lib/ 时 3 层到 oh-my-knowledge/。5 次给点 buffer。 */
220
+ function readLocalPkg() {
221
+ try {
222
+ let dir = dirname(fileURLToPath(import.meta.url));
223
+ for (let i = 0; i < 5; i++) {
224
+ const candidate = join(dir, 'package.json');
225
+ if (existsSync(candidate)) {
226
+ const pkg = JSON.parse(readFileSync(candidate, 'utf-8'));
227
+ if (!pkg.name || !pkg.version)
228
+ return null;
229
+ return {
230
+ name: pkg.name,
231
+ version: pkg.version,
232
+ // 优先用用户实际安装源(npm 从 .npmrc 注入 npm_config_registry),再退 publish 目标,最后兜底官方源
233
+ registry: process.env.npm_config_registry || pkg.publishConfig?.registry || 'https://registry.npmjs.org',
234
+ };
235
+ }
236
+ dir = dirname(dir);
237
+ }
238
+ }
239
+ catch {
240
+ /* fall through */
241
+ }
242
+ return null;
243
+ }
244
+ /** 后台刷新:spawn 一个 detached + unref 的子进程去抓 registry latest 写回缓存,跟父进程
245
+ * 生命周期解耦 —— native fetch 的网络 handle 会让进程存活到请求完成 / 3s abort,留在父进程里
246
+ * 会拖住快命令的退出;丢给独立子进程后,父进程发完 spawn 立即返回、可正常退出,热路径零网络。
247
+ * worker 只在编译产物(dist/cli/lib/)里有 `.js`;dev 直接跑源码时不存在,existsSync 兜底跳过。 */
248
+ function fetchAndStore(path, pkg) {
249
+ try {
250
+ const worker = join(dirname(fileURLToPath(import.meta.url)), 'update-fetch-worker.js');
251
+ if (!existsSync(worker))
96
252
  return;
97
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
98
- const registry = pkg.publishConfig?.registry || 'https://registry.npmjs.org';
99
- const res = await fetch(`${registry}/${pkg.name}/latest`, { signal: AbortSignal.timeout(3000) });
100
- if (!res.ok)
253
+ spawnDetached(worker, [path, pkg.registry, pkg.name]);
254
+ }
255
+ catch {
256
+ /* 静默:spawn 同步抛错(罕见)不影响正常使用 */
257
+ }
258
+ }
259
+ /** spawn 一个 detached + unref 的子进程跑 worker。子进程启动失败(ENOENT / EACCES /
260
+ * EAGAIN)是异步 `error` 事件 —— 不挂 listener 的话 Node 会当 uncaught exception 抛出、
261
+ * 反过来拖垮主命令,所以必须挂个空 handler 吞掉,维持升级检查全程 fail-silent。 */
262
+ export function spawnDetached(scriptPath, args) {
263
+ const child = spawn(process.execPath, [scriptPath, ...args], { detached: true, stdio: 'ignore' });
264
+ child.on('error', () => {
265
+ /* 静默:子进程起不来不影响主命令 */
266
+ });
267
+ child.unref();
268
+ }
269
+ /** 升级提示:展示与抓取解耦。本次运行只读缓存即时决定是否提示(热路径零网络);
270
+ * 缓存过期时后台抓一次写回,供下次用。首次运行(无缓存)不提示。全程 fail-silent,
271
+ * 由 index.ts 在非短路径下 fire-and-forget 调用。 */
272
+ export async function checkUpdate(lang) {
273
+ if (shouldSkipUpdateCheck())
274
+ return;
275
+ try {
276
+ const pkg = readLocalPkg();
277
+ if (!pkg)
101
278
  return;
102
- const data = await res.json();
103
- // 只在 registry 版本 SemVer 严格大于本地版本时提示。早先版本用 `!==`
104
- // 比较,本地 dev 跑出 0.32.0-rc 时会被 registry 的 0.31.0「提示降级」。
105
- if (data.version && isSemverGt(data.version, pkg.version)) {
106
- process.stderr.write(tCli('cli.update.new_version_available', lang, {
107
- old: pkg.version, new: data.version, pkg: pkg.name,
108
- }));
279
+ const path = defaultCachePath();
280
+ const cache = readCache(path);
281
+ const plan = planUpdateActions(cache, pkg.version, new Date());
282
+ // 展示:仅凭缓存,无网络
283
+ if (plan.notify && cache?.latestVersion) {
284
+ const parts = {
285
+ current: pkg.version,
286
+ latest: cache.latestVersion,
287
+ upgradeCmd: 'npm i -g oh-my-knowledge@latest',
288
+ silenceHint: 'OMK_SKIP_UPDATE_CHECK=1',
289
+ };
290
+ process.stderr.write(renderNotice(parts, pkg.name, lang, process.stderr.isTTY === true));
109
291
  }
292
+ // 先把「发起检查」落盘(节流锚点),再 spawn 后台刷新 —— 失败/离线也不会每条命令重来
293
+ if (plan.nextCache)
294
+ writeCache(path, plan.nextCache);
295
+ if (plan.refresh)
296
+ fetchAndStore(path, pkg);
297
+ }
298
+ catch {
299
+ /* 静默失败,不影响正常使用 */
110
300
  }
111
- catch { /* 静默失败,不影响正常使用 */ }
112
301
  }
113
302
  //# sourceMappingURL=update-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../../src/cli/lib/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../../src/cli/lib/update-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-fetch-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-fetch-worker.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/update-fetch-worker.ts"],"names":[],"mappings":""}