oh-my-knowledge 0.0.1 → 0.18.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +537 -332
  3. package/dist/src/analysis/coverage-analyzer.d.ts +57 -0
  4. package/dist/src/analysis/coverage-analyzer.d.ts.map +1 -0
  5. package/dist/src/analysis/coverage-analyzer.js +262 -0
  6. package/dist/src/analysis/coverage-analyzer.js.map +1 -0
  7. package/dist/src/analysis/gap-analyzer.d.ts +114 -0
  8. package/dist/src/analysis/gap-analyzer.d.ts.map +1 -0
  9. package/dist/src/analysis/gap-analyzer.js +439 -0
  10. package/dist/src/analysis/gap-analyzer.js.map +1 -0
  11. package/dist/src/analysis/hedging-classifier.d.ts +34 -0
  12. package/dist/src/analysis/hedging-classifier.d.ts.map +1 -0
  13. package/dist/src/analysis/hedging-classifier.js +144 -0
  14. package/dist/src/analysis/hedging-classifier.js.map +1 -0
  15. package/dist/src/analysis/report-diagnostics.d.ts +9 -0
  16. package/dist/src/analysis/report-diagnostics.d.ts.map +1 -0
  17. package/dist/src/analysis/report-diagnostics.js +631 -0
  18. package/dist/src/analysis/report-diagnostics.js.map +1 -0
  19. package/dist/src/authoring/evolver.d.ts +64 -0
  20. package/dist/src/authoring/evolver.d.ts.map +1 -0
  21. package/dist/src/authoring/evolver.js +275 -0
  22. package/dist/src/authoring/evolver.js.map +1 -0
  23. package/dist/src/authoring/generator.d.ts +13 -0
  24. package/dist/src/authoring/generator.d.ts.map +1 -0
  25. package/dist/src/authoring/generator.js +60 -0
  26. package/dist/src/authoring/generator.js.map +1 -0
  27. package/dist/src/cli.d.ts +3 -0
  28. package/dist/src/cli.d.ts.map +1 -0
  29. package/dist/src/cli.js +1004 -0
  30. package/dist/src/cli.js.map +1 -0
  31. package/dist/src/eval-core/cache.d.ts +11 -0
  32. package/dist/src/eval-core/cache.d.ts.map +1 -0
  33. package/dist/src/eval-core/cache.js +53 -0
  34. package/dist/src/eval-core/cache.js.map +1 -0
  35. package/dist/src/eval-core/ci-gates.d.ts +17 -0
  36. package/dist/src/eval-core/ci-gates.d.ts.map +1 -0
  37. package/dist/src/eval-core/ci-gates.js +42 -0
  38. package/dist/src/eval-core/ci-gates.js.map +1 -0
  39. package/dist/src/eval-core/dependency-checker.d.ts +37 -0
  40. package/dist/src/eval-core/dependency-checker.d.ts.map +1 -0
  41. package/dist/src/eval-core/dependency-checker.js +280 -0
  42. package/dist/src/eval-core/dependency-checker.js.map +1 -0
  43. package/dist/src/eval-core/evaluation-execution.d.ts +26 -0
  44. package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -0
  45. package/dist/src/eval-core/evaluation-execution.js +196 -0
  46. package/dist/src/eval-core/evaluation-execution.js.map +1 -0
  47. package/dist/src/eval-core/evaluation-job.d.ts +48 -0
  48. package/dist/src/eval-core/evaluation-job.d.ts.map +1 -0
  49. package/dist/src/eval-core/evaluation-job.js +112 -0
  50. package/dist/src/eval-core/evaluation-job.js.map +1 -0
  51. package/dist/src/eval-core/evaluation-reporting.d.ts +28 -0
  52. package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -0
  53. package/dist/src/eval-core/evaluation-reporting.js +123 -0
  54. package/dist/src/eval-core/evaluation-reporting.js.map +1 -0
  55. package/dist/src/eval-core/execution-strategy.d.ts +11 -0
  56. package/dist/src/eval-core/execution-strategy.d.ts.map +1 -0
  57. package/dist/src/eval-core/execution-strategy.js +121 -0
  58. package/dist/src/eval-core/execution-strategy.js.map +1 -0
  59. package/dist/src/eval-core/fact-checker.d.ts +25 -0
  60. package/dist/src/eval-core/fact-checker.d.ts.map +1 -0
  61. package/dist/src/eval-core/fact-checker.js +66 -0
  62. package/dist/src/eval-core/fact-checker.js.map +1 -0
  63. package/dist/src/eval-core/schema.d.ts +30 -0
  64. package/dist/src/eval-core/schema.d.ts.map +1 -0
  65. package/dist/src/eval-core/schema.js +195 -0
  66. package/dist/src/eval-core/schema.js.map +1 -0
  67. package/dist/src/eval-core/statistics.d.ts +86 -0
  68. package/dist/src/eval-core/statistics.d.ts.map +1 -0
  69. package/dist/src/eval-core/statistics.js +210 -0
  70. package/dist/src/eval-core/statistics.js.map +1 -0
  71. package/dist/src/eval-core/task-planner.d.ts +4 -0
  72. package/dist/src/eval-core/task-planner.d.ts.map +1 -0
  73. package/dist/src/eval-core/task-planner.js +33 -0
  74. package/dist/src/eval-core/task-planner.js.map +1 -0
  75. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +133 -0
  76. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +1 -0
  77. package/dist/src/eval-workflows/each-evaluation-workflow.js +169 -0
  78. package/dist/src/eval-workflows/each-evaluation-workflow.js.map +1 -0
  79. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +38 -0
  80. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -0
  81. package/dist/src/eval-workflows/evaluation-pipeline.js +214 -0
  82. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -0
  83. package/dist/src/eval-workflows/evaluation-preparation.d.ts +64 -0
  84. package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -0
  85. package/dist/src/eval-workflows/evaluation-preparation.js +90 -0
  86. package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -0
  87. package/dist/src/eval-workflows/run-evaluation.d.ts +105 -0
  88. package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -0
  89. package/dist/src/eval-workflows/run-evaluation.js +264 -0
  90. package/dist/src/eval-workflows/run-evaluation.js.map +1 -0
  91. package/dist/src/executors/anthropic-api.d.ts +3 -0
  92. package/dist/src/executors/anthropic-api.d.ts.map +1 -0
  93. package/dist/src/executors/anthropic-api.js +43 -0
  94. package/dist/src/executors/anthropic-api.js.map +1 -0
  95. package/dist/src/executors/claude-cli.d.ts +3 -0
  96. package/dist/src/executors/claude-cli.d.ts.map +1 -0
  97. package/dist/src/executors/claude-cli.js +103 -0
  98. package/dist/src/executors/claude-cli.js.map +1 -0
  99. package/dist/src/executors/claude-sdk-trace.d.ts +10 -0
  100. package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -0
  101. package/dist/src/executors/claude-sdk-trace.js +100 -0
  102. package/dist/src/executors/claude-sdk-trace.js.map +1 -0
  103. package/dist/src/executors/claude-sdk.d.ts +3 -0
  104. package/dist/src/executors/claude-sdk.d.ts.map +1 -0
  105. package/dist/src/executors/claude-sdk.js +160 -0
  106. package/dist/src/executors/claude-sdk.js.map +1 -0
  107. package/dist/src/executors/gemini.d.ts +3 -0
  108. package/dist/src/executors/gemini.d.ts.map +1 -0
  109. package/dist/src/executors/gemini.js +78 -0
  110. package/dist/src/executors/gemini.js.map +1 -0
  111. package/dist/src/executors/index.d.ts +7 -0
  112. package/dist/src/executors/index.d.ts.map +1 -0
  113. package/dist/src/executors/index.js +22 -0
  114. package/dist/src/executors/index.js.map +1 -0
  115. package/dist/src/executors/openai-api.d.ts +3 -0
  116. package/dist/src/executors/openai-api.d.ts.map +1 -0
  117. package/dist/src/executors/openai-api.js +40 -0
  118. package/dist/src/executors/openai-api.js.map +1 -0
  119. package/dist/src/executors/openai-cli.d.ts +3 -0
  120. package/dist/src/executors/openai-cli.d.ts.map +1 -0
  121. package/dist/src/executors/openai-cli.js +60 -0
  122. package/dist/src/executors/openai-cli.js.map +1 -0
  123. package/dist/src/executors/script.d.ts +3 -0
  124. package/dist/src/executors/script.d.ts.map +1 -0
  125. package/dist/src/executors/script.js +63 -0
  126. package/dist/src/executors/script.js.map +1 -0
  127. package/dist/src/executors/shared.d.ts +117 -0
  128. package/dist/src/executors/shared.d.ts.map +1 -0
  129. package/dist/src/executors/shared.js +49 -0
  130. package/dist/src/executors/shared.js.map +1 -0
  131. package/dist/src/grading/assertions.d.ts +18 -0
  132. package/dist/src/grading/assertions.d.ts.map +1 -0
  133. package/dist/src/grading/assertions.js +239 -0
  134. package/dist/src/grading/assertions.js.map +1 -0
  135. package/dist/src/grading/index.d.ts +26 -0
  136. package/dist/src/grading/index.d.ts.map +1 -0
  137. package/dist/src/grading/index.js +98 -0
  138. package/dist/src/grading/index.js.map +1 -0
  139. package/dist/src/grading/judge.d.ts +13 -0
  140. package/dist/src/grading/judge.d.ts.map +1 -0
  141. package/dist/src/grading/judge.js +98 -0
  142. package/dist/src/grading/judge.js.map +1 -0
  143. package/dist/src/grading/layered-scores.d.ts +13 -0
  144. package/dist/src/grading/layered-scores.d.ts.map +1 -0
  145. package/dist/src/grading/layered-scores.js +62 -0
  146. package/dist/src/grading/layered-scores.js.map +1 -0
  147. package/dist/src/inputs/eval-config.d.ts +13 -0
  148. package/dist/src/inputs/eval-config.d.ts.map +1 -0
  149. package/dist/src/inputs/eval-config.js +136 -0
  150. package/dist/src/inputs/eval-config.js.map +1 -0
  151. package/dist/src/inputs/load-samples.d.ts +16 -0
  152. package/dist/src/inputs/load-samples.d.ts.map +1 -0
  153. package/dist/src/inputs/load-samples.js +51 -0
  154. package/dist/src/inputs/load-samples.js.map +1 -0
  155. package/dist/src/inputs/mcp-resolver.d.ts +50 -0
  156. package/dist/src/inputs/mcp-resolver.d.ts.map +1 -0
  157. package/dist/src/inputs/mcp-resolver.js +307 -0
  158. package/dist/src/inputs/mcp-resolver.js.map +1 -0
  159. package/dist/src/inputs/skill-loader.d.ts +18 -0
  160. package/dist/src/inputs/skill-loader.d.ts.map +1 -0
  161. package/dist/src/inputs/skill-loader.js +222 -0
  162. package/dist/src/inputs/skill-loader.js.map +1 -0
  163. package/dist/src/inputs/url-fetcher.d.ts +19 -0
  164. package/dist/src/inputs/url-fetcher.d.ts.map +1 -0
  165. package/dist/src/inputs/url-fetcher.js +241 -0
  166. package/dist/src/inputs/url-fetcher.js.map +1 -0
  167. package/dist/src/observability/production-analyzer.d.ts +61 -0
  168. package/dist/src/observability/production-analyzer.d.ts.map +1 -0
  169. package/dist/src/observability/production-analyzer.js +183 -0
  170. package/dist/src/observability/production-analyzer.js.map +1 -0
  171. package/dist/src/observability/trace-adapter.d.ts +75 -0
  172. package/dist/src/observability/trace-adapter.d.ts.map +1 -0
  173. package/dist/src/observability/trace-adapter.js +341 -0
  174. package/dist/src/observability/trace-adapter.js.map +1 -0
  175. package/dist/src/renderer/html-renderer.d.ts +9 -0
  176. package/dist/src/renderer/html-renderer.d.ts.map +1 -0
  177. package/dist/src/renderer/html-renderer.js +338 -0
  178. package/dist/src/renderer/html-renderer.js.map +1 -0
  179. package/dist/src/renderer/layout.d.ts +13 -0
  180. package/dist/src/renderer/layout.d.ts.map +1 -0
  181. package/dist/src/renderer/layout.js +476 -0
  182. package/dist/src/renderer/layout.js.map +1 -0
  183. package/dist/src/renderer/skill-health-renderer.d.ts +20 -0
  184. package/dist/src/renderer/skill-health-renderer.d.ts.map +1 -0
  185. package/dist/src/renderer/skill-health-renderer.js +218 -0
  186. package/dist/src/renderer/skill-health-renderer.js.map +1 -0
  187. package/dist/src/renderer/summary.d.ts +21 -0
  188. package/dist/src/renderer/summary.d.ts.map +1 -0
  189. package/dist/src/renderer/summary.js +1072 -0
  190. package/dist/src/renderer/summary.js.map +1 -0
  191. package/dist/src/renderer/table.d.ts +3 -0
  192. package/dist/src/renderer/table.d.ts.map +1 -0
  193. package/dist/src/renderer/table.js +134 -0
  194. package/dist/src/renderer/table.js.map +1 -0
  195. package/dist/src/renderer/trends.d.ts +6 -0
  196. package/dist/src/renderer/trends.d.ts.map +1 -0
  197. package/dist/src/renderer/trends.js +127 -0
  198. package/dist/src/renderer/trends.js.map +1 -0
  199. package/dist/src/server/job-store.d.ts +4 -0
  200. package/dist/src/server/job-store.d.ts.map +1 -0
  201. package/dist/src/server/job-store.js +68 -0
  202. package/dist/src/server/job-store.js.map +1 -0
  203. package/dist/src/server/report-server.d.ts +16 -0
  204. package/dist/src/server/report-server.d.ts.map +1 -0
  205. package/dist/src/server/report-server.js +196 -0
  206. package/dist/src/server/report-server.js.map +1 -0
  207. package/dist/src/server/report-store.d.ts +44 -0
  208. package/dist/src/server/report-store.d.ts.map +1 -0
  209. package/dist/src/server/report-store.js +190 -0
  210. package/dist/src/server/report-store.js.map +1 -0
  211. package/dist/src/types.d.ts +553 -0
  212. package/dist/src/types.d.ts.map +1 -0
  213. package/dist/src/types.js +2 -0
  214. package/dist/src/types.js.map +1 -0
  215. package/package.json +44 -3
@@ -0,0 +1,121 @@
1
+ import { dirname } from 'node:path';
2
+ function combineUserPrompt(prefix, prompt) {
3
+ if (!prefix)
4
+ return prompt;
5
+ return `${prefix}\n\n${prompt}`;
6
+ }
7
+ export function resolveArtifactExecutionStrategy(artifact) {
8
+ switch (artifact.kind) {
9
+ case 'baseline':
10
+ return 'baseline';
11
+ case 'prompt':
12
+ return 'user-prompt';
13
+ case 'agent':
14
+ return 'agent-session';
15
+ case 'workflow':
16
+ return 'workflow-session';
17
+ case 'skill':
18
+ default:
19
+ return 'system-prompt';
20
+ }
21
+ }
22
+ export function resolveExperimentType(artifact) {
23
+ if (artifact.kind === 'baseline' && !artifact.cwd)
24
+ return 'baseline';
25
+ if (artifact.kind === 'baseline' && artifact.cwd)
26
+ return 'runtime-context-only';
27
+ return 'artifact-injection';
28
+ }
29
+ export function buildVariantConfig(artifact) {
30
+ // experimentRole 是 variant 的 run-time 属性,必须由上游显式注入:
31
+ // - CLI:`--control` / `--treatment` 在 evaluation-preparation.ts 按 spec.name 匹配填
32
+ // - each-workflow:显式标 baseline=control / skill=treatment
33
+ // - config:configVariantsToSpecs 从 EvalConfig.variants.role 带入
34
+ // 静默从 artifactKind 反推会违反 terminology-spec 三-4"experimentRole 是唯一来源",
35
+ // 因此缺失时直接 throw,强迫调用者修配置,不走默认值掩盖。
36
+ if (!artifact.experimentRole) {
37
+ throw new Error(`artifact "${artifact.name}" 缺少 experimentRole:应该由 CLI --control/--treatment、`
38
+ + `--config eval.yaml 或 each-workflow 显式注入。参见 docs/terminology-spec.md 三-4。`);
39
+ }
40
+ return {
41
+ variant: artifact.name,
42
+ artifactKind: artifact.kind,
43
+ artifactSource: artifact.source,
44
+ executionStrategy: resolveArtifactExecutionStrategy(artifact),
45
+ experimentType: resolveExperimentType(artifact),
46
+ experimentRole: artifact.experimentRole,
47
+ hasArtifactContent: Boolean(artifact.content),
48
+ cwd: artifact.cwd || null,
49
+ locator: artifact.locator,
50
+ ref: artifact.ref,
51
+ };
52
+ }
53
+ function extractSkillDir(artifact) {
54
+ if (!artifact.locator)
55
+ return null;
56
+ return dirname(artifact.locator);
57
+ }
58
+ export function resolveExecutionStrategy(task, model, timeoutMs, verbose) {
59
+ const skillDir = extractSkillDir(task.artifact);
60
+ const baseInput = {
61
+ model,
62
+ cwd: task.cwd,
63
+ skillDir,
64
+ timeoutMs,
65
+ verbose,
66
+ };
67
+ switch (task.artifact.kind) {
68
+ case 'baseline':
69
+ return {
70
+ strategy: resolveArtifactExecutionStrategy(task.artifact),
71
+ cacheSystem: '',
72
+ input: {
73
+ ...baseInput,
74
+ system: null,
75
+ prompt: task.prompt,
76
+ },
77
+ };
78
+ case 'prompt':
79
+ return {
80
+ strategy: resolveArtifactExecutionStrategy(task.artifact),
81
+ cacheSystem: '',
82
+ input: {
83
+ ...baseInput,
84
+ system: null,
85
+ prompt: combineUserPrompt(task.artifact.content, task.prompt),
86
+ },
87
+ };
88
+ case 'agent':
89
+ return {
90
+ strategy: resolveArtifactExecutionStrategy(task.artifact),
91
+ cacheSystem: task.artifact.content ?? '',
92
+ input: {
93
+ ...baseInput,
94
+ system: task.artifact.content,
95
+ prompt: task.prompt,
96
+ },
97
+ };
98
+ case 'workflow':
99
+ return {
100
+ strategy: resolveArtifactExecutionStrategy(task.artifact),
101
+ cacheSystem: task.artifact.content ?? '',
102
+ input: {
103
+ ...baseInput,
104
+ system: task.artifact.content,
105
+ prompt: task.prompt,
106
+ },
107
+ };
108
+ case 'skill':
109
+ default:
110
+ return {
111
+ strategy: resolveArtifactExecutionStrategy(task.artifact),
112
+ cacheSystem: task.artifact.content ?? '',
113
+ input: {
114
+ ...baseInput,
115
+ system: task.artifact.content,
116
+ prompt: task.prompt,
117
+ },
118
+ };
119
+ }
120
+ }
121
+ //# sourceMappingURL=execution-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-strategy.js","sourceRoot":"","sources":["../../../src/eval-core/execution-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Fact checker — extracts verifiable claims from agent output and validates them.
3
+ * Currently supports file/directory path verification via fs.existsSync.
4
+ */
5
+ export interface FactClaim {
6
+ type: 'file-path';
7
+ value: string;
8
+ verified: boolean;
9
+ evidence?: string;
10
+ }
11
+ export interface FactCheckResult {
12
+ claims: FactClaim[];
13
+ verifiedCount: number;
14
+ totalCount: number;
15
+ verifiedRate: number;
16
+ }
17
+ /**
18
+ * Extract file path claims from agent output text.
19
+ */
20
+ export declare function extractPathClaims(output: string): string[];
21
+ /**
22
+ * Check facts in agent output by verifying file paths exist in cwd.
23
+ */
24
+ export declare function checkFacts(output: string, cwd: string): FactCheckResult;
25
+ //# sourceMappingURL=fact-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-checker.d.ts","sourceRoot":"","sources":["../../../src/eval-core/fact-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAsBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAmBvE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Fact checker — extracts verifiable claims from agent output and validates them.
3
+ * Currently supports file/directory path verification via fs.existsSync.
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { resolve } from 'node:path';
7
+ // Patterns that look like file/directory paths in agent output
8
+ const PATH_PATTERNS = [
9
+ // Explicit code paths: repos/xxx, src/xxx, lib/xxx, packages/xxx
10
+ /(?:repos|src|lib|packages|dist|test|components)\/[a-zA-Z0-9_/.@-]+/g,
11
+ // .claude paths
12
+ /\.claude\/[a-zA-Z0-9_/.@-]+/g,
13
+ // Paths with file extensions mentioned in text
14
+ /[a-zA-Z0-9_/-]+\.(?:ts|js|tsx|jsx|md|json|yaml|yml|sh)\b/g,
15
+ ];
16
+ // Paths to ignore (too generic or always present)
17
+ const IGNORE_PATTERNS = [
18
+ /^package\.json$/,
19
+ /^tsconfig\.json$/,
20
+ /^node_modules\//,
21
+ /^dist\//,
22
+ /^\.git\//,
23
+ /^index\.\w+$/,
24
+ ];
25
+ /**
26
+ * Extract file path claims from agent output text.
27
+ */
28
+ export function extractPathClaims(output) {
29
+ const paths = new Set();
30
+ for (const pattern of PATH_PATTERNS) {
31
+ // Reset lastIndex for global regex
32
+ pattern.lastIndex = 0;
33
+ for (const match of output.matchAll(pattern)) {
34
+ let path = match[0];
35
+ // Clean trailing punctuation
36
+ path = path.replace(/[.,;:!?))]+$/, '');
37
+ // Clean trailing backtick/quote
38
+ path = path.replace(/[`'"]+$/, '');
39
+ if (path.length > 3 && !IGNORE_PATTERNS.some((p) => p.test(path))) {
40
+ paths.add(path);
41
+ }
42
+ }
43
+ }
44
+ return [...paths];
45
+ }
46
+ /**
47
+ * Check facts in agent output by verifying file paths exist in cwd.
48
+ */
49
+ export function checkFacts(output, cwd) {
50
+ const pathClaims = extractPathClaims(output);
51
+ const claims = pathClaims.map((path) => {
52
+ const fullPath = resolve(cwd, path);
53
+ const exists = existsSync(fullPath);
54
+ return {
55
+ type: 'file-path',
56
+ value: path,
57
+ verified: exists,
58
+ ...(!exists && { evidence: `${fullPath} not found` }),
59
+ };
60
+ });
61
+ const verifiedCount = claims.filter((c) => c.verified).length;
62
+ const totalCount = claims.length;
63
+ const verifiedRate = totalCount > 0 ? Number((verifiedCount / totalCount).toFixed(2)) : 1;
64
+ return { claims, verifiedCount, totalCount, verifiedRate };
65
+ }
66
+ //# sourceMappingURL=fact-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-checker.js","sourceRoot":"","sources":["../../../src/eval-core/fact-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,+DAA+D;AAC/D,MAAM,aAAa,GAAG;IACpB,iEAAiE;IACjE,qEAAqE;IACrE,gBAAgB;IAChB,8BAA8B;IAC9B,+CAA+C;IAC/C,2DAA2D;CAC5D,CAAC;AAEF,kDAAkD;AAClD,MAAM,eAAe,GAAG;IACtB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,SAAS;IACT,UAAU;IACV,cAAc;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,mCAAmC;QACnC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,6BAA6B;YAC7B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACxC,gCAAgC;YAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,GAAW;IACpD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAgB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,MAAM;YAChB,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,YAAY,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Domain model definitions for oh-my-knowledge.
3
+ * Single source of truth for object structures used across runner, renderer, and server.
4
+ */
5
+ import type { ExecResult, GradeResult, VariantResult, VariantSummary } from '../types.js';
6
+ /**
7
+ * Build a VariantResult from execution and grading results.
8
+ */
9
+ interface BuildVariantOptions {
10
+ execMs?: number;
11
+ gradeMs?: number;
12
+ factCheck?: {
13
+ verifiedCount: number;
14
+ totalCount: number;
15
+ verifiedRate: number;
16
+ claims: Array<{
17
+ type: string;
18
+ value: string;
19
+ verified: boolean;
20
+ evidence?: string;
21
+ }>;
22
+ };
23
+ }
24
+ export declare function buildVariantResult(execResult: ExecResult, gradeResult: GradeResult | null, options?: BuildVariantOptions): VariantResult;
25
+ /**
26
+ * Build a VariantSummary from an array of VariantResults.
27
+ */
28
+ export declare function buildVariantSummary(entries: VariantResult[]): VariantSummary;
29
+ export {};
30
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/eval-core/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAA0B,MAAM,aAAa,CAAC;AA0BlH;;GAEG;AACH,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CACvK;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,CA0ExI;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,cAAc,CA6F5E"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Domain model definitions for oh-my-knowledge.
3
+ * Single source of truth for object structures used across runner, renderer, and server.
4
+ */
5
+ function ratioToScore(ratio) {
6
+ return Number((1 + ratio * 4).toFixed(2));
7
+ }
8
+ const MAX_TURN_CONTENT = 2000;
9
+ const MAX_TOOL_OUTPUT = 1000;
10
+ function truncateTurns(turns) {
11
+ return turns.map((t) => ({
12
+ ...t,
13
+ content: t.content.length > MAX_TURN_CONTENT ? t.content.slice(0, MAX_TURN_CONTENT) + '…' : t.content,
14
+ ...(t.toolCalls && { toolCalls: truncateToolCalls(t.toolCalls) }),
15
+ }));
16
+ }
17
+ function truncateToolCalls(toolCalls) {
18
+ return toolCalls.map((tc) => ({
19
+ ...tc,
20
+ output: typeof tc.output === 'string' && tc.output.length > MAX_TOOL_OUTPUT
21
+ ? tc.output.slice(0, MAX_TOOL_OUTPUT) + '…'
22
+ : tc.output,
23
+ }));
24
+ }
25
+ export function buildVariantResult(execResult, gradeResult, options) {
26
+ const execCostUSD = execResult.costUSD || 0;
27
+ const judgeCostUSD = gradeResult?.judgeCostUSD || 0;
28
+ const execMs = options?.execMs || execResult.durationMs;
29
+ const gradeMs = options?.gradeMs || 0;
30
+ const assistantTurns = execResult.turns?.filter((turn) => turn.role === 'assistant').length;
31
+ const toolTurns = execResult.turns?.filter((turn) => turn.role === 'tool').length;
32
+ const numToolFailures = execResult.toolCalls?.filter((tc) => !tc.success).length;
33
+ const traceSignals = [
34
+ execResult.turns && execResult.turns.length > 0,
35
+ execResult.toolCalls && execResult.toolCalls.length > 0,
36
+ Boolean(execResult.output),
37
+ Boolean(execMs > 0),
38
+ ];
39
+ const traceCoverage = Number((traceSignals.filter(Boolean).length / traceSignals.length).toFixed(2));
40
+ return {
41
+ ok: execResult.ok,
42
+ durationMs: execResult.durationMs,
43
+ durationApiMs: execResult.durationApiMs,
44
+ inputTokens: execResult.inputTokens,
45
+ outputTokens: execResult.outputTokens,
46
+ totalTokens: execResult.inputTokens + execResult.outputTokens,
47
+ cacheReadTokens: execResult.cacheReadTokens,
48
+ cacheCreationTokens: execResult.cacheCreationTokens,
49
+ execCostUSD,
50
+ judgeCostUSD,
51
+ costUSD: execCostUSD + judgeCostUSD, // Total = execution + grading
52
+ numTurns: execResult.numTurns,
53
+ ...(execResult.fullNumTurns != null && { fullNumTurns: execResult.fullNumTurns }),
54
+ ...(execResult.numSubAgents != null && { numSubAgents: execResult.numSubAgents }),
55
+ ...(assistantTurns != null && { assistantTurns }),
56
+ ...(toolTurns != null && { toolTurns }),
57
+ ...(execResult.toolCalls && execResult.toolCalls.length > 0 && {
58
+ numToolCalls: execResult.toolCalls.length,
59
+ numToolFailures,
60
+ toolSuccessRate: Number((execResult.toolCalls.filter((tc) => tc.success).length / execResult.toolCalls.length).toFixed(2)),
61
+ toolNames: [...new Set(execResult.toolCalls.map((tc) => tc.tool))],
62
+ }),
63
+ traceCoverage,
64
+ ...(execResult.error && { error: execResult.error }),
65
+ ...(gradeResult && (() => {
66
+ // Integrate fact check into layered scores
67
+ const layeredScores = gradeResult.layeredScores ? { ...gradeResult.layeredScores } : undefined;
68
+ let compositeScore = gradeResult.compositeScore;
69
+ if (options?.factCheck && options.factCheck.totalCount > 0 && layeredScores) {
70
+ const hardScore = ratioToScore(options.factCheck.verifiedRate);
71
+ const assertionFact = layeredScores.factScore;
72
+ // Combine: assertion fact + hard verification
73
+ layeredScores.factScore = assertionFact != null
74
+ ? Number(((assertionFact + hardScore) / 2).toFixed(2))
75
+ : hardScore;
76
+ // Recompute composite from updated layers (保留 0 分,仅过滤真正缺失)
77
+ const scores = [layeredScores.factScore, layeredScores.behaviorScore, layeredScores.judgeScore].filter((s) => s != null);
78
+ compositeScore = scores.length > 0 ? Number((scores.reduce((a, b) => a + b, 0) / scores.length).toFixed(2)) : compositeScore;
79
+ }
80
+ return {
81
+ compositeScore,
82
+ ...(layeredScores && { layeredScores }),
83
+ ...(gradeResult.assertions && { assertions: gradeResult.assertions }),
84
+ ...(gradeResult.llmScore != null && { llmScore: gradeResult.llmScore }),
85
+ ...(gradeResult.llmReason && { llmReason: gradeResult.llmReason }),
86
+ ...(gradeResult.dimensions && { dimensions: gradeResult.dimensions }),
87
+ };
88
+ })()),
89
+ ...(options?.factCheck && options.factCheck.totalCount > 0 && { factCheck: options.factCheck }),
90
+ outputPreview: execResult.output ? execResult.output.slice(0, 200) : null,
91
+ ...(execResult.output && { fullOutput: execResult.output }),
92
+ ...(execResult.turns && execResult.turns.length > 0 && { turns: truncateTurns(execResult.turns) }),
93
+ ...(execResult.toolCalls && execResult.toolCalls.length > 0 && { toolCalls: truncateToolCalls(execResult.toolCalls) }),
94
+ timing: { execMs, gradeMs, totalMs: execMs + gradeMs },
95
+ };
96
+ }
97
+ /**
98
+ * Build a VariantSummary from an array of VariantResults.
99
+ */
100
+ export function buildVariantSummary(entries) {
101
+ const ok = entries.filter((e) => e.ok);
102
+ const compositeScores = entries.filter((e) => typeof e.compositeScore === 'number' && e.compositeScore > 0).map((e) => e.compositeScore);
103
+ const assertionScores = entries.filter((e) => e.assertions?.score != null && e.assertions.score > 0).map((e) => e.assertions.score);
104
+ const llmScores = entries.filter((e) => typeof e.llmScore === 'number' && e.llmScore > 0).map((e) => e.llmScore);
105
+ const errorCount = entries.length - ok.length;
106
+ return {
107
+ totalSamples: entries.length,
108
+ successCount: ok.length,
109
+ errorCount,
110
+ errorRate: entries.length > 0 ? Number((errorCount / entries.length * 100).toFixed(1)) : 0,
111
+ avgDurationMs: ok.length > 0 ? Math.round(ok.reduce((s, e) => s + (e.timing?.totalMs || e.durationMs), 0) / ok.length) : 0,
112
+ avgInputTokens: ok.length > 0 ? Math.round(ok.reduce((s, e) => s + e.inputTokens, 0) / ok.length) : 0,
113
+ avgOutputTokens: ok.length > 0 ? Math.round(ok.reduce((s, e) => s + e.outputTokens, 0) / ok.length) : 0,
114
+ avgTotalTokens: ok.length > 0 ? Math.round(ok.reduce((s, e) => s + e.totalTokens, 0) / ok.length) : 0,
115
+ totalCostUSD: ok.reduce((s, e) => s + (e.costUSD || 0), 0),
116
+ totalExecCostUSD: ok.reduce((s, e) => s + (e.execCostUSD || 0), 0),
117
+ totalJudgeCostUSD: ok.reduce((s, e) => s + (e.judgeCostUSD || 0), 0),
118
+ avgCostPerSample: ok.length > 0 ? Number((ok.reduce((s, e) => s + (e.costUSD || 0), 0) / ok.length).toFixed(6)) : 0,
119
+ avgNumTurns: ok.length > 0 ? Number((ok.reduce((s, e) => s + (e.numTurns || 0), 0) / ok.length).toFixed(1)) : 0,
120
+ ...(() => {
121
+ const withFullTurns = ok.filter((e) => e.fullNumTurns != null);
122
+ if (withFullTurns.length > 0) {
123
+ return {
124
+ avgFullNumTurns: Number((withFullTurns.reduce((s, e) => s + (e.fullNumTurns || 0), 0) / withFullTurns.length).toFixed(1)),
125
+ avgNumSubAgents: Number((withFullTurns.reduce((s, e) => s + (e.numSubAgents || 0), 0) / withFullTurns.length).toFixed(1)),
126
+ };
127
+ }
128
+ return {};
129
+ })(),
130
+ ...(() => {
131
+ const withTrace = ok.filter((e) => e.traceCoverage != null);
132
+ if (withTrace.length === 0)
133
+ return {};
134
+ return {
135
+ avgAssistantTurns: Number((withTrace.reduce((s, e) => s + (e.assistantTurns || 0), 0) / withTrace.length).toFixed(1)),
136
+ avgToolTurns: Number((withTrace.reduce((s, e) => s + (e.toolTurns || 0), 0) / withTrace.length).toFixed(1)),
137
+ traceCoverageRate: Number((withTrace.reduce((s, e) => s + (e.traceCoverage || 0), 0) / withTrace.length).toFixed(2)),
138
+ };
139
+ })(),
140
+ ...(() => {
141
+ const withTools = ok.filter((e) => typeof e.numToolCalls === 'number' && e.numToolCalls > 0);
142
+ if (withTools.length === 0)
143
+ return {};
144
+ const totalToolCalls = withTools.reduce((s, e) => s + (e.numToolCalls || 0), 0);
145
+ const avgSuccessRate = withTools.reduce((s, e) => s + (e.toolSuccessRate || 0), 0) / withTools.length;
146
+ const dist = {};
147
+ for (const e of withTools) {
148
+ for (const name of (e.toolNames || [])) {
149
+ dist[name] = (dist[name] || 0) + 1;
150
+ }
151
+ }
152
+ return {
153
+ avgToolCalls: Number((totalToolCalls / withTools.length).toFixed(1)),
154
+ avgToolFailures: Number((withTools.reduce((s, e) => s + (e.numToolFailures || 0), 0) / withTools.length).toFixed(1)),
155
+ toolSuccessRate: Number(avgSuccessRate.toFixed(2)),
156
+ toolDistribution: dist,
157
+ };
158
+ })(),
159
+ ...(() => {
160
+ // 保留 0 分样本(评委打"完全不合格"是合法低分,不是缺失)。
161
+ // 仅 filter null / undefined(真正缺数据,如该 sample 无对应断言或未配 judge)。
162
+ const factScores = ok.map((e) => e.layeredScores?.factScore).filter((s) => s != null);
163
+ const behaviorScores = ok.map((e) => e.layeredScores?.behaviorScore).filter((s) => s != null);
164
+ const judgeScores = ok.map((e) => e.layeredScores?.judgeScore).filter((s) => s != null);
165
+ const factVerifiedRates = ok.map((e) => e.factCheck?.verifiedRate).filter((r) => r != null);
166
+ return {
167
+ ...(factScores.length > 0 && { avgFactScore: Number((factScores.reduce((a, b) => a + b, 0) / factScores.length).toFixed(2)) }),
168
+ ...(behaviorScores.length > 0 && { avgBehaviorScore: Number((behaviorScores.reduce((a, b) => a + b, 0) / behaviorScores.length).toFixed(2)) }),
169
+ ...(judgeScores.length > 0 && { avgJudgeScore: Number((judgeScores.reduce((a, b) => a + b, 0) / judgeScores.length).toFixed(2)) }),
170
+ ...(factVerifiedRates.length > 0 && { avgFactVerifiedRate: Number((factVerifiedRates.reduce((a, b) => a + b, 0) / factVerifiedRates.length).toFixed(2)) }),
171
+ };
172
+ })(),
173
+ ...(compositeScores.length > 0 && {
174
+ avgCompositeScore: Number((compositeScores.reduce((s, v) => s + v, 0) / compositeScores.length).toFixed(2)),
175
+ minCompositeScore: Number(Math.min(...compositeScores).toFixed(2)),
176
+ maxCompositeScore: Number(Math.max(...compositeScores).toFixed(2)),
177
+ ...(compositeScores.length >= 2 && (() => {
178
+ const mean = compositeScores.reduce((s, v) => s + v, 0) / compositeScores.length;
179
+ const variance = compositeScores.reduce((s, v) => s + (v - mean) ** 2, 0) / compositeScores.length;
180
+ const stddev = Math.sqrt(variance);
181
+ const cv = mean > 0 ? stddev / mean : 0;
182
+ return { scoreStddev: Number(stddev.toFixed(2)), scoreCV: Number(cv.toFixed(3)) };
183
+ })()),
184
+ }),
185
+ ...(assertionScores.length > 0 && {
186
+ avgAssertionScore: Number((assertionScores.reduce((s, v) => s + v, 0) / assertionScores.length).toFixed(2)),
187
+ }),
188
+ ...(llmScores.length > 0 && {
189
+ avgLlmScore: Number((llmScores.reduce((s, v) => s + v, 0) / llmScores.length).toFixed(2)),
190
+ minLlmScore: Math.min(...llmScores),
191
+ maxLlmScore: Math.max(...llmScores),
192
+ }),
193
+ };
194
+ }
195
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/eval-core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Statistical functions for evaluation analysis.
3
+ *
4
+ * Assumptions:
5
+ * - All inputs are independent observations from normally distributed populations
6
+ * - Welch's t-test is used (does NOT assume equal variances)
7
+ * - Confidence intervals use the t-distribution for small samples (df ≤ 30)
8
+ * and normal approximation (z = 1.96) for larger samples
9
+ *
10
+ * Dependencies: simple-statistics (for mean, sampleStandardDeviation, sampleVariance)
11
+ */
12
+ /**
13
+ * Arithmetic mean. Returns 0 for empty/null input.
14
+ */
15
+ export declare function mean(arr: number[]): number;
16
+ /**
17
+ * Sample standard deviation (Bessel's correction: n-1 denominator).
18
+ * Returns 0 for arrays with fewer than 2 elements.
19
+ */
20
+ export declare function stddev(arr: number[]): number;
21
+ export type PValueCategory = '<0.001' | '<0.01' | '<0.05' | '≥0.05';
22
+ /**
23
+ * Bucket a t-statistic into a p-value category by comparing |t| to standard
24
+ * critical-value tables at α = 0.001 / 0.01 / 0.05 (two-tailed).
25
+ *
26
+ * Returns one of four buckets instead of a continuous p value. This avoids
27
+ * implementing the regularized incomplete beta function for an exact CDF
28
+ * while still giving readers enough resolution to distinguish
29
+ * "barely significant" from "strongly significant".
30
+ *
31
+ * For df > 30 falls back to the normal-approximation critical values.
32
+ */
33
+ export declare function pValueCategory(tStatistic: number, df: number): PValueCategory;
34
+ /**
35
+ * Compute 95% confidence interval for the population mean.
36
+ *
37
+ * Method: t-interval (appropriate for small samples from normal populations)
38
+ * Formula: mean ± t(α/2, n-1) × (s / √n)
39
+ */
40
+ export declare function confidenceInterval(arr: number[]): {
41
+ mean: number;
42
+ lower: number;
43
+ upper: number;
44
+ stddev: number;
45
+ };
46
+ /**
47
+ * Welch's t-test for two independent samples with unequal variances.
48
+ *
49
+ * Tests H₀: μ₁ = μ₂ (no difference in population means)
50
+ * Uses Welch-Satterthwaite approximation for degrees of freedom.
51
+ *
52
+ * Requires at least 2 observations per group. Returns non-significant
53
+ * result for insufficient data or zero variance in both groups.
54
+ */
55
+ export interface EffectSizeResult {
56
+ cohensD: number;
57
+ hedgesG: number;
58
+ primary: 'd' | 'g' | 'none';
59
+ magnitude: 'negligible' | 'small' | 'medium' | 'large' | 'none';
60
+ pooledStddev: number;
61
+ n1: number;
62
+ n2: number;
63
+ }
64
+ /**
65
+ * Effect size for two independent samples.
66
+ *
67
+ * Cohen's d: (mean_a - mean_b) / pooled_stddev
68
+ * Hedges' g: J * d, where J = 1 - 3 / (4 * (n1 + n2) - 9)
69
+ *
70
+ * Hedges' g corrects Cohen's d's small-sample bias (Hedges 1981) and is
71
+ * preferred when n1 + n2 < 20. For n1 + n2 >= 20 the correction is < 5%
72
+ * and Cohen's d is the conventional choice.
73
+ *
74
+ * `primary` indicates which to emphasize in UI based on total sample size.
75
+ * `magnitude` uses standard thresholds (|effect| 0.2 / 0.5 / 0.8) applied
76
+ * to the primary metric.
77
+ *
78
+ * Returns effect 0 with primary 'none' for insufficient data or zero variance.
79
+ */
80
+ export declare function effectSize(a: number[], b: number[]): EffectSizeResult;
81
+ export declare function tTest(a: number[], b: number[]): {
82
+ tStatistic: number;
83
+ df: number;
84
+ significant: boolean;
85
+ };
86
+ //# sourceMappingURL=statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../../src/eval-core/statistics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAG1C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAG5C;AAgCD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAW7E;AAYD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAoBhH;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA+CrE;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CA0CxG"}