@arizeai/phoenix-client 6.10.0 → 6.11.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 (244) hide show
  1. package/README.md +62 -0
  2. package/dist/esm/__generated__/api/v1.d.ts +452 -28
  3. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  4. package/dist/esm/experiments/helpers/getExampleGlobalId.d.ts +8 -0
  5. package/dist/esm/experiments/helpers/getExampleGlobalId.d.ts.map +1 -0
  6. package/dist/esm/experiments/helpers/getExampleGlobalId.js +9 -0
  7. package/dist/esm/experiments/helpers/getExampleGlobalId.js.map +1 -0
  8. package/dist/esm/experiments/resumeEvaluation.d.ts.map +1 -1
  9. package/dist/esm/experiments/resumeEvaluation.js +2 -1
  10. package/dist/esm/experiments/resumeEvaluation.js.map +1 -1
  11. package/dist/esm/experiments/resumeExperiment.d.ts.map +1 -1
  12. package/dist/esm/experiments/resumeExperiment.js +3 -2
  13. package/dist/esm/experiments/resumeExperiment.js.map +1 -1
  14. package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
  15. package/dist/esm/experiments/runExperiment.js +6 -3
  16. package/dist/esm/experiments/runExperiment.js.map +1 -1
  17. package/dist/esm/jest/index.d.ts +5 -0
  18. package/dist/esm/jest/index.d.ts.map +1 -0
  19. package/dist/esm/jest/index.js +49 -0
  20. package/dist/esm/jest/index.js.map +1 -0
  21. package/dist/esm/jest/reporter.d.ts +13 -0
  22. package/dist/esm/jest/reporter.d.ts.map +1 -0
  23. package/dist/esm/jest/reporter.js +19 -0
  24. package/dist/esm/jest/reporter.js.map +1 -0
  25. package/dist/esm/prompts/sdks/toAI.d.ts +2 -2
  26. package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -1
  27. package/dist/esm/prompts/sdks/toAI.js.map +1 -1
  28. package/dist/esm/prompts/sdks/toAnthropic.d.ts +2 -2
  29. package/dist/esm/prompts/sdks/toAnthropic.d.ts.map +1 -1
  30. package/dist/esm/prompts/sdks/toAnthropic.js.map +1 -1
  31. package/dist/esm/prompts/sdks/toOpenAI.d.ts +2 -2
  32. package/dist/esm/prompts/sdks/toOpenAI.d.ts.map +1 -1
  33. package/dist/esm/prompts/sdks/toOpenAI.js.map +1 -1
  34. package/dist/esm/prompts/sdks/toSDK.d.ts +8 -8
  35. package/dist/esm/prompts/sdks/toSDK.d.ts.map +1 -1
  36. package/dist/esm/prompts/sdks/toSDK.js.map +1 -1
  37. package/dist/esm/prompts/sdks/types.d.ts +2 -2
  38. package/dist/esm/prompts/sdks/types.d.ts.map +1 -1
  39. package/dist/esm/schemas/llm/anthropic/converters.d.ts +8 -8
  40. package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts +4 -4
  41. package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts +6 -6
  42. package/dist/esm/schemas/llm/constants.d.ts +3 -3
  43. package/dist/esm/schemas/llm/converters.d.ts +12 -12
  44. package/dist/esm/schemas/llm/openai/converters.d.ts +3 -3
  45. package/dist/esm/schemas/llm/schemas.d.ts +2 -2
  46. package/dist/esm/testing/acceptance.d.ts +20 -0
  47. package/dist/esm/testing/acceptance.d.ts.map +1 -0
  48. package/dist/esm/testing/acceptance.js +129 -0
  49. package/dist/esm/testing/acceptance.js.map +1 -0
  50. package/dist/esm/testing/define-api.d.ts +157 -0
  51. package/dist/esm/testing/define-api.d.ts.map +1 -0
  52. package/dist/esm/testing/define-api.js +78 -0
  53. package/dist/esm/testing/define-api.js.map +1 -0
  54. package/dist/esm/testing/helpers.d.ts +55 -0
  55. package/dist/esm/testing/helpers.d.ts.map +1 -0
  56. package/dist/esm/testing/helpers.js +179 -0
  57. package/dist/esm/testing/helpers.js.map +1 -0
  58. package/dist/esm/testing/phoenix-test-tracking.d.ts +68 -0
  59. package/dist/esm/testing/phoenix-test-tracking.d.ts.map +1 -0
  60. package/dist/esm/testing/phoenix-test-tracking.js +521 -0
  61. package/dist/esm/testing/phoenix-test-tracking.js.map +1 -0
  62. package/dist/esm/testing/report-artifacts.d.ts +45 -0
  63. package/dist/esm/testing/report-artifacts.d.ts.map +1 -0
  64. package/dist/esm/testing/report-artifacts.js +218 -0
  65. package/dist/esm/testing/report-artifacts.js.map +1 -0
  66. package/dist/esm/testing/report-run.d.ts +22 -0
  67. package/dist/esm/testing/report-run.d.ts.map +1 -0
  68. package/dist/esm/testing/report-run.js +41 -0
  69. package/dist/esm/testing/report-run.js.map +1 -0
  70. package/dist/esm/testing/reporter-format.d.ts +83 -0
  71. package/dist/esm/testing/reporter-format.d.ts.map +1 -0
  72. package/dist/esm/testing/reporter-format.js +852 -0
  73. package/dist/esm/testing/reporter-format.js.map +1 -0
  74. package/dist/esm/testing/runner.d.ts +31 -0
  75. package/dist/esm/testing/runner.d.ts.map +1 -0
  76. package/dist/esm/testing/runner.js +238 -0
  77. package/dist/esm/testing/runner.js.map +1 -0
  78. package/dist/esm/testing/state.d.ts +138 -0
  79. package/dist/esm/testing/state.d.ts.map +1 -0
  80. package/dist/esm/testing/state.js +31 -0
  81. package/dist/esm/testing/state.js.map +1 -0
  82. package/dist/esm/testing/types.d.ts +319 -0
  83. package/dist/esm/testing/types.d.ts.map +1 -0
  84. package/dist/esm/testing/types.js +9 -0
  85. package/dist/esm/testing/types.js.map +1 -0
  86. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  87. package/dist/esm/utils/channel.d.ts +7 -7
  88. package/dist/esm/utils/channel.d.ts.map +1 -1
  89. package/dist/esm/utils/channel.js +1 -1
  90. package/dist/esm/utils/channel.js.map +1 -1
  91. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
  92. package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
  93. package/dist/esm/utils/promisifyResult.d.ts +1 -1
  94. package/dist/esm/utils/promisifyResult.d.ts.map +1 -1
  95. package/dist/esm/utils/promisifyResult.js.map +1 -1
  96. package/dist/esm/utils/schemaMatches.d.ts +5 -5
  97. package/dist/esm/utils/schemaMatches.d.ts.map +1 -1
  98. package/dist/esm/utils/schemaMatches.js.map +1 -1
  99. package/dist/esm/vitest/index.d.ts +5 -0
  100. package/dist/esm/vitest/index.d.ts.map +1 -0
  101. package/dist/esm/vitest/index.js +15 -0
  102. package/dist/esm/vitest/index.js.map +1 -0
  103. package/dist/esm/vitest/reporter.d.ts +19 -0
  104. package/dist/esm/vitest/reporter.d.ts.map +1 -0
  105. package/dist/esm/vitest/reporter.js +27 -0
  106. package/dist/esm/vitest/reporter.js.map +1 -0
  107. package/dist/src/__generated__/api/v1.d.ts +452 -28
  108. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  109. package/dist/src/experiments/helpers/getExampleGlobalId.d.ts +8 -0
  110. package/dist/src/experiments/helpers/getExampleGlobalId.d.ts.map +1 -0
  111. package/dist/src/experiments/helpers/getExampleGlobalId.js +13 -0
  112. package/dist/src/experiments/helpers/getExampleGlobalId.js.map +1 -0
  113. package/dist/src/experiments/resumeEvaluation.d.ts.map +1 -1
  114. package/dist/src/experiments/resumeEvaluation.js +2 -1
  115. package/dist/src/experiments/resumeEvaluation.js.map +1 -1
  116. package/dist/src/experiments/resumeExperiment.d.ts.map +1 -1
  117. package/dist/src/experiments/resumeExperiment.js +3 -2
  118. package/dist/src/experiments/resumeExperiment.js.map +1 -1
  119. package/dist/src/experiments/runExperiment.d.ts.map +1 -1
  120. package/dist/src/experiments/runExperiment.js +6 -3
  121. package/dist/src/experiments/runExperiment.js.map +1 -1
  122. package/dist/src/jest/index.d.ts +5 -0
  123. package/dist/src/jest/index.d.ts.map +1 -0
  124. package/dist/src/jest/index.js +58 -0
  125. package/dist/src/jest/index.js.map +1 -0
  126. package/dist/src/jest/reporter.d.ts +13 -0
  127. package/dist/src/jest/reporter.d.ts.map +1 -0
  128. package/dist/src/jest/reporter.js +23 -0
  129. package/dist/src/jest/reporter.js.map +1 -0
  130. package/dist/src/prompts/sdks/toAI.d.ts +2 -2
  131. package/dist/src/prompts/sdks/toAI.d.ts.map +1 -1
  132. package/dist/src/prompts/sdks/toAI.js.map +1 -1
  133. package/dist/src/prompts/sdks/toAnthropic.d.ts +2 -2
  134. package/dist/src/prompts/sdks/toAnthropic.d.ts.map +1 -1
  135. package/dist/src/prompts/sdks/toAnthropic.js.map +1 -1
  136. package/dist/src/prompts/sdks/toOpenAI.d.ts +2 -2
  137. package/dist/src/prompts/sdks/toOpenAI.d.ts.map +1 -1
  138. package/dist/src/prompts/sdks/toOpenAI.js.map +1 -1
  139. package/dist/src/prompts/sdks/toSDK.d.ts +8 -8
  140. package/dist/src/prompts/sdks/toSDK.d.ts.map +1 -1
  141. package/dist/src/prompts/sdks/toSDK.js.map +1 -1
  142. package/dist/src/prompts/sdks/types.d.ts +2 -2
  143. package/dist/src/prompts/sdks/types.d.ts.map +1 -1
  144. package/dist/src/schemas/llm/anthropic/converters.d.ts +8 -8
  145. package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts +4 -4
  146. package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts +6 -6
  147. package/dist/src/schemas/llm/constants.d.ts +3 -3
  148. package/dist/src/schemas/llm/converters.d.ts +12 -12
  149. package/dist/src/schemas/llm/openai/converters.d.ts +3 -3
  150. package/dist/src/schemas/llm/schemas.d.ts +2 -2
  151. package/dist/src/testing/acceptance.d.ts +20 -0
  152. package/dist/src/testing/acceptance.d.ts.map +1 -0
  153. package/dist/src/testing/acceptance.js +114 -0
  154. package/dist/src/testing/acceptance.js.map +1 -0
  155. package/dist/src/testing/define-api.d.ts +157 -0
  156. package/dist/src/testing/define-api.d.ts.map +1 -0
  157. package/dist/src/testing/define-api.js +81 -0
  158. package/dist/src/testing/define-api.js.map +1 -0
  159. package/dist/src/testing/helpers.d.ts +55 -0
  160. package/dist/src/testing/helpers.d.ts.map +1 -0
  161. package/dist/src/testing/helpers.js +182 -0
  162. package/dist/src/testing/helpers.js.map +1 -0
  163. package/dist/src/testing/phoenix-test-tracking.d.ts +68 -0
  164. package/dist/src/testing/phoenix-test-tracking.d.ts.map +1 -0
  165. package/dist/src/testing/phoenix-test-tracking.js +530 -0
  166. package/dist/src/testing/phoenix-test-tracking.js.map +1 -0
  167. package/dist/src/testing/report-artifacts.d.ts +45 -0
  168. package/dist/src/testing/report-artifacts.d.ts.map +1 -0
  169. package/dist/src/testing/report-artifacts.js +225 -0
  170. package/dist/src/testing/report-artifacts.js.map +1 -0
  171. package/dist/src/testing/report-run.d.ts +22 -0
  172. package/dist/src/testing/report-run.d.ts.map +1 -0
  173. package/dist/src/testing/report-run.js +47 -0
  174. package/dist/src/testing/report-run.js.map +1 -0
  175. package/dist/src/testing/reporter-format.d.ts +83 -0
  176. package/dist/src/testing/reporter-format.d.ts.map +1 -0
  177. package/dist/src/testing/reporter-format.js +870 -0
  178. package/dist/src/testing/reporter-format.js.map +1 -0
  179. package/dist/src/testing/runner.d.ts +31 -0
  180. package/dist/src/testing/runner.d.ts.map +1 -0
  181. package/dist/src/testing/runner.js +258 -0
  182. package/dist/src/testing/runner.js.map +1 -0
  183. package/dist/src/testing/state.d.ts +138 -0
  184. package/dist/src/testing/state.d.ts.map +1 -0
  185. package/dist/src/testing/state.js +38 -0
  186. package/dist/src/testing/state.js.map +1 -0
  187. package/dist/src/testing/types.d.ts +319 -0
  188. package/dist/src/testing/types.d.ts.map +1 -0
  189. package/dist/src/testing/types.js +13 -0
  190. package/dist/src/testing/types.js.map +1 -0
  191. package/dist/src/utils/channel.d.ts +7 -7
  192. package/dist/src/utils/channel.d.ts.map +1 -1
  193. package/dist/src/utils/channel.js +1 -1
  194. package/dist/src/utils/channel.js.map +1 -1
  195. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
  196. package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
  197. package/dist/src/utils/promisifyResult.d.ts +1 -1
  198. package/dist/src/utils/promisifyResult.d.ts.map +1 -1
  199. package/dist/src/utils/promisifyResult.js.map +1 -1
  200. package/dist/src/utils/schemaMatches.d.ts +5 -5
  201. package/dist/src/utils/schemaMatches.d.ts.map +1 -1
  202. package/dist/src/utils/schemaMatches.js.map +1 -1
  203. package/dist/src/vitest/index.d.ts +5 -0
  204. package/dist/src/vitest/index.d.ts.map +1 -0
  205. package/dist/src/vitest/index.js +23 -0
  206. package/dist/src/vitest/index.js.map +1 -0
  207. package/dist/src/vitest/reporter.d.ts +19 -0
  208. package/dist/src/vitest/reporter.d.ts.map +1 -0
  209. package/dist/src/vitest/reporter.js +34 -0
  210. package/dist/src/vitest/reporter.js.map +1 -0
  211. package/dist/tsconfig.tsbuildinfo +1 -1
  212. package/docs/ci-evals-annotations.mdx +190 -0
  213. package/docs/ci-evals-jest.mdx +78 -0
  214. package/docs/ci-evals-vitest.mdx +240 -0
  215. package/docs/ci-evals.mdx +263 -0
  216. package/docs/overview.mdx +9 -1
  217. package/package.json +49 -17
  218. package/src/__generated__/api/v1.ts +452 -28
  219. package/src/experiments/helpers/getExampleGlobalId.ts +12 -0
  220. package/src/experiments/resumeEvaluation.ts +2 -1
  221. package/src/experiments/resumeExperiment.ts +3 -2
  222. package/src/experiments/runExperiment.ts +6 -3
  223. package/src/jest/index.ts +124 -0
  224. package/src/jest/reporter.ts +22 -0
  225. package/src/prompts/sdks/toAI.ts +4 -3
  226. package/src/prompts/sdks/toAnthropic.ts +4 -3
  227. package/src/prompts/sdks/toOpenAI.ts +4 -3
  228. package/src/prompts/sdks/toSDK.ts +16 -11
  229. package/src/prompts/sdks/types.ts +2 -2
  230. package/src/testing/acceptance.ts +190 -0
  231. package/src/testing/define-api.ts +279 -0
  232. package/src/testing/helpers.ts +251 -0
  233. package/src/testing/phoenix-test-tracking.ts +637 -0
  234. package/src/testing/report-artifacts.ts +272 -0
  235. package/src/testing/report-run.ts +44 -0
  236. package/src/testing/reporter-format.ts +1072 -0
  237. package/src/testing/runner.ts +350 -0
  238. package/src/testing/state.ts +165 -0
  239. package/src/testing/types.ts +366 -0
  240. package/src/utils/channel.ts +17 -15
  241. package/src/utils/promisifyResult.ts +6 -4
  242. package/src/utils/schemaMatches.ts +12 -10
  243. package/src/vitest/index.ts +57 -0
  244. package/src/vitest/reporter.ts +32 -0
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Cross-process bridge for the end-of-run Phoenix summary.
3
+ *
4
+ * Both Vitest and Jest run test files in separate worker processes, so a
5
+ * suite's results live in a different process than the reporter that prints
6
+ * the final summary. To bridge that gap, each worker writes a small JSON
7
+ * artifact describing its suite to a shared temp directory when the suite
8
+ * finishes (see {@link writeSuiteSummaryArtifact}). At the end of the run the
9
+ * reporter — back in the main process — reads every artifact written since the
10
+ * run began (see {@link readSuiteSummaryArtifacts}) and prints them together.
11
+ *
12
+ * Everything here is best-effort: a failure to write or read an artifact must
13
+ * never fail a user's test, so the file system calls swallow their errors.
14
+ */
15
+ import { createHash } from "node:crypto";
16
+ import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
17
+ import { tmpdir } from "node:os";
18
+ import { join } from "node:path";
19
+ /**
20
+ * Env var that overrides where suite summary artifacts are written. When unset,
21
+ * a stable per-project subdirectory of the OS temp dir is used (see
22
+ * {@link getSuiteSummaryReportDir}).
23
+ */
24
+ export const PHOENIX_TEST_REPORT_DIR_ENV_VAR = "PHOENIX_TEST_REPORT_DIR";
25
+ const ARTIFACT_VERSION = 1;
26
+ const ARTIFACT_FILE_PREFIX = "suite-";
27
+ let artifactCounter = 0;
28
+ /**
29
+ * Resolve the directory where suite summary artifacts are written and read.
30
+ *
31
+ * Honors {@link PHOENIX_TEST_REPORT_DIR_ENV_VAR} when set. Otherwise it derives
32
+ * a directory under the OS temp dir, namespaced by a hash of the current
33
+ * working directory so that concurrent test runs in different projects don't
34
+ * read each other's artifacts.
35
+ */
36
+ export function getSuiteSummaryReportDir() {
37
+ const configuredReportDir = process.env[PHOENIX_TEST_REPORT_DIR_ENV_VAR];
38
+ if (configuredReportDir && configuredReportDir.trim().length > 0) {
39
+ return configuredReportDir;
40
+ }
41
+ const cwdHash = createHash("sha256")
42
+ .update(process.cwd())
43
+ .digest("hex")
44
+ .slice(0, 16);
45
+ return join(tmpdir(), "phoenix-client-test-reports", cwdHash);
46
+ }
47
+ /**
48
+ * Delete any artifacts left over from a previous run. The reporter calls this
49
+ * at the start of every run so summaries from an earlier watch-mode invocation
50
+ * don't bleed into the next one.
51
+ */
52
+ export function clearSuiteSummaryArtifacts() {
53
+ const reportDir = getSuiteSummaryReportDir();
54
+ mkdirSync(reportDir, { recursive: true });
55
+ for (const fileName of readdirSync(reportDir)) {
56
+ if (!isArtifactFileName(fileName)) {
57
+ continue;
58
+ }
59
+ try {
60
+ rmSync(join(reportDir, fileName), { force: true });
61
+ }
62
+ catch {
63
+ continue;
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Write one suite's summary to the report directory. Called from each worker
69
+ * when a suite finishes.
70
+ *
71
+ * The file is written to a `.tmp` path first and then atomically renamed into
72
+ * place, so the reader never observes a half-written artifact. Failures are
73
+ * intentionally swallowed — reporting must not break the user's tests.
74
+ */
75
+ export function writeSuiteSummaryArtifact(suite) {
76
+ try {
77
+ const reportDir = getSuiteSummaryReportDir();
78
+ mkdirSync(reportDir, { recursive: true });
79
+ const artifact = {
80
+ version: ARTIFACT_VERSION,
81
+ createdAtMs: Date.now(),
82
+ suite: createSuiteSummary(suite),
83
+ };
84
+ const fileName = `${ARTIFACT_FILE_PREFIX}${process.pid}-${Date.now()}-${artifactCounter++}.json`;
85
+ const artifactPath = join(reportDir, fileName);
86
+ const temporaryPath = `${artifactPath}.tmp`;
87
+ writeFileSync(temporaryPath, JSON.stringify(artifact), "utf8");
88
+ renameSync(temporaryPath, artifactPath);
89
+ }
90
+ catch {
91
+ // Reporting artifacts are best-effort and should not fail user tests.
92
+ }
93
+ }
94
+ /**
95
+ * Read back all suite summaries the workers wrote during this run, sorted by
96
+ * suite name for stable output.
97
+ *
98
+ * @param sinceMs - When provided, only artifacts created at or after this
99
+ * timestamp are returned, so summaries from a previous run that share the
100
+ * report directory are ignored. A one-second slack is allowed to absorb
101
+ * small clock differences between worker processes.
102
+ */
103
+ export function readSuiteSummaryArtifacts({ sinceMs, } = {}) {
104
+ const reportDir = getSuiteSummaryReportDir();
105
+ if (!existsSync(reportDir)) {
106
+ return [];
107
+ }
108
+ const suites = [];
109
+ for (const fileName of readdirSync(reportDir)) {
110
+ if (!fileName.startsWith(ARTIFACT_FILE_PREFIX) ||
111
+ !fileName.endsWith(".json")) {
112
+ continue;
113
+ }
114
+ const artifactPath = join(reportDir, fileName);
115
+ try {
116
+ const stats = statSync(artifactPath);
117
+ if (sinceMs !== undefined && stats.mtimeMs < sinceMs - 1000) {
118
+ continue;
119
+ }
120
+ const artifact = JSON.parse(readFileSync(artifactPath, "utf8"));
121
+ if (!isSuiteSummaryArtifact(artifact)) {
122
+ continue;
123
+ }
124
+ if (sinceMs !== undefined && artifact.createdAtMs < sinceMs - 1000) {
125
+ continue;
126
+ }
127
+ suites.push(artifact.suite);
128
+ }
129
+ catch {
130
+ continue;
131
+ }
132
+ }
133
+ return suites.sort((leftSuite, rightSuite) => leftSuite.name.localeCompare(rightSuite.name));
134
+ }
135
+ /**
136
+ * Project the live in-memory {@link SuiteState} down to the serializable
137
+ * {@link SuiteSummary} that gets written to disk. Drops anything that can't or
138
+ * shouldn't cross the process boundary (clients, tracers, raw Error objects).
139
+ */
140
+ function createSuiteSummary(suite) {
141
+ return {
142
+ name: suite.name,
143
+ trackingDisabled: suite.trackingDisabled,
144
+ trackingDisabledReason: suite.trackingDisabledReason,
145
+ setupError: suite.setupError
146
+ ? { message: suite.setupError.message }
147
+ : undefined,
148
+ uploadFailureCount: suite.uploadFailureCount,
149
+ results: suite.results.map(createTestResultSummary),
150
+ acceptanceResults: suite.acceptanceResults,
151
+ links: suite.links.map(({ label, url }) => ({ label, url })),
152
+ };
153
+ }
154
+ function createTestResultSummary(result) {
155
+ return {
156
+ suiteName: result.suiteName,
157
+ testName: result.testName,
158
+ status: result.status,
159
+ output: toJsonSafeValue(result.output),
160
+ annotations: result.annotations.map(({ name, score, label, explanation, annotatorKind, metadata, traceId, }) => ({
161
+ name,
162
+ score,
163
+ label,
164
+ explanation,
165
+ annotatorKind,
166
+ metadata,
167
+ traceId,
168
+ })),
169
+ error: result.error,
170
+ durationMs: result.durationMs,
171
+ repetitionNumber: result.repetitionNumber,
172
+ repetitions: result.repetitions,
173
+ dryRun: result.dryRun,
174
+ traceId: result.traceId,
175
+ runId: result.runId,
176
+ exampleId: result.exampleId,
177
+ };
178
+ }
179
+ /**
180
+ * Make a recorded test output safe to JSON-serialize: `bigint` values are
181
+ * stringified, and anything that still can't be serialized (cycles, etc.)
182
+ * falls back to its `String()` form rather than throwing.
183
+ */
184
+ function toJsonSafeValue(value) {
185
+ if (value === undefined) {
186
+ return undefined;
187
+ }
188
+ try {
189
+ return JSON.parse(JSON.stringify(value, (_key, nestedValue) => typeof nestedValue === "bigint" ? nestedValue.toString() : nestedValue));
190
+ }
191
+ catch {
192
+ return String(value);
193
+ }
194
+ }
195
+ /**
196
+ * Validate a parsed artifact before trusting it. Guards against version skew
197
+ * and partially-written or unrelated JSON files in the report directory.
198
+ */
199
+ function isSuiteSummaryArtifact(value) {
200
+ if (!isRecord(value)) {
201
+ return false;
202
+ }
203
+ const suite = value.suite;
204
+ return (value.version === ARTIFACT_VERSION &&
205
+ typeof value.createdAtMs === "number" &&
206
+ isRecord(suite) &&
207
+ typeof suite.name === "string" &&
208
+ Array.isArray(suite.results) &&
209
+ Array.isArray(suite.links));
210
+ }
211
+ function isArtifactFileName(fileName) {
212
+ return (fileName.startsWith(ARTIFACT_FILE_PREFIX) &&
213
+ (fileName.endsWith(".json") || fileName.endsWith(".json.tmp")));
214
+ }
215
+ function isRecord(value) {
216
+ return typeof value === "object" && value !== null;
217
+ }
218
+ //# sourceMappingURL=report-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-artifacts.js","sourceRoot":"","sources":["../../../src/testing/report-artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared "print the Phoenix summary once per run" policy for the jest and
3
+ * vitest reporters. The two frameworks differ only in which lifecycle methods
4
+ * they call; both delegate to {@link begin} on run start and {@link finish}
5
+ * on run end.
6
+ */
7
+ export declare class SuiteSummaryReportRun {
8
+ private hasPrinted;
9
+ private runStartedAtMs;
10
+ /**
11
+ * Reset state at the start of a run so suites/artifacts from a previous
12
+ * watch-mode invocation don't leak forward.
13
+ */
14
+ begin(): void;
15
+ /**
16
+ * Print the Phoenix summary once. Prefers the on-disk artifacts written by
17
+ * suite workers, falling back to the in-process registry. A no-op once the
18
+ * summary has already been printed for this run.
19
+ */
20
+ finish(): void;
21
+ }
22
+ //# sourceMappingURL=report-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-run.d.ts","sourceRoot":"","sources":["../../../src/testing/report-run.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAOb;;;;OAIG;IACH,MAAM,IAAI,IAAI;CAUf"}
@@ -0,0 +1,41 @@
1
+ import { clearSuiteSummaryArtifacts, readSuiteSummaryArtifacts, } from "./report-artifacts.js";
2
+ import { printSuiteSummaries } from "./reporter-format.js";
3
+ import { clearAllSuites, getAllSuites } from "./runner.js";
4
+ /**
5
+ * Shared "print the Phoenix summary once per run" policy for the jest and
6
+ * vitest reporters. The two frameworks differ only in which lifecycle methods
7
+ * they call; both delegate to {@link begin} on run start and {@link finish}
8
+ * on run end.
9
+ */
10
+ export class SuiteSummaryReportRun {
11
+ hasPrinted = false;
12
+ runStartedAtMs = 0;
13
+ /**
14
+ * Reset state at the start of a run so suites/artifacts from a previous
15
+ * watch-mode invocation don't leak forward.
16
+ */
17
+ begin() {
18
+ this.hasPrinted = false;
19
+ this.runStartedAtMs = Date.now();
20
+ clearAllSuites();
21
+ clearSuiteSummaryArtifacts();
22
+ }
23
+ /**
24
+ * Print the Phoenix summary once. Prefers the on-disk artifacts written by
25
+ * suite workers, falling back to the in-process registry. A no-op once the
26
+ * summary has already been printed for this run.
27
+ */
28
+ finish() {
29
+ if (this.hasPrinted)
30
+ return;
31
+ const artifactSuites = readSuiteSummaryArtifacts({
32
+ sinceMs: this.runStartedAtMs,
33
+ });
34
+ const suites = artifactSuites.length > 0 ? artifactSuites : getAllSuites();
35
+ if (suites.length === 0)
36
+ return;
37
+ this.hasPrinted = true;
38
+ printSuiteSummaries(suites);
39
+ }
40
+ }
41
+ //# sourceMappingURL=report-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-run.js","sourceRoot":"","sources":["../../../src/testing/report-run.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IACxB,UAAU,GAAG,KAAK,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IAE3B;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,cAAc,EAAE,CAAC;QACjB,0BAA0B,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,MAAM,cAAc,GAAG,yBAAyB,CAAC;YAC/C,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,83 @@
1
+ import type { TestResult } from "./state.js";
2
+ import type { AcceptanceResult } from "./types.js";
3
+ /**
4
+ * The serializable summary of one suite that the reporter renders. This is the
5
+ * payload written to and read from the artifact files in `report-artifacts.ts`,
6
+ * so it holds only plain data — no clients, tracers, or live state.
7
+ */
8
+ export interface SuiteSummary {
9
+ /** Suite name (also the dataset / experiment name in Phoenix). */
10
+ name: string;
11
+ /** True when the suite did not sync to Phoenix (dry run, disabled, or error). */
12
+ trackingDisabled?: boolean;
13
+ /** Human-readable reason tracking was disabled, when known. */
14
+ trackingDisabledReason?: string;
15
+ /** Setup failure that disabled tracking, reduced to its message for printing. */
16
+ setupError?: {
17
+ message: string;
18
+ };
19
+ /** Number of best-effort uploads (runs + annotations) that failed. */
20
+ uploadFailureCount?: number;
21
+ /** Per-test outcomes shown in the summary. */
22
+ results: TestResult[];
23
+ /** Aggregate acceptance results shown in the summary. */
24
+ acceptanceResults?: AcceptanceResult[];
25
+ /** Phoenix UI links (dataset / experiment) printed at the end of the block. */
26
+ links: Array<{
27
+ label: string;
28
+ url: string;
29
+ }>;
30
+ }
31
+ /**
32
+ * Options that control how the reporter renders. Resolved once per run from the
33
+ * environment and the output stream (see {@link resolveRenderOptions}) and then
34
+ * threaded through every formatting function so jest and vitest behave
35
+ * identically without either reporter class needing options of its own.
36
+ */
37
+ export interface RenderOptions {
38
+ /** Show every test row plus the legacy per-test `output:` detail block. */
39
+ verbose: boolean;
40
+ /** Emit ANSI color escapes. */
41
+ color: boolean;
42
+ /** Max test rows shown per suite in compact mode (failures are never hidden). */
43
+ maxRows: number;
44
+ /** Terminal width budget used to size tables. */
45
+ maxWidth: number;
46
+ }
47
+ /**
48
+ * Resolve {@link RenderOptions} from the environment and output stream.
49
+ *
50
+ * Verbosity: `PHOENIX_TEST_REPORTER=verbose` (or the `PHOENIX_TEST_VERBOSE=1`
51
+ * alias) restores the full per-test dump; the default is the compact view.
52
+ * `PHOENIX_TEST_REPORTER_MAX_ROWS` caps the per-suite rows (default 10).
53
+ *
54
+ * Color follows the common ecosystem rules: off when `NO_COLOR` is set, in CI,
55
+ * on a non-TTY, or a "dumb" terminal; `PHOENIX_TEST_COLOR` / `FORCE_COLOR`
56
+ * force it on or off.
57
+ */
58
+ export declare function resolveRenderOptions(env?: NodeJS.ProcessEnv, stream?: {
59
+ isTTY?: boolean;
60
+ columns?: number;
61
+ }): RenderOptions;
62
+ /**
63
+ * Render a single suite. A clean suite collapses to one line; a suite with
64
+ * failures or misses expands into a per-row diagnosis (scores, rationale,
65
+ * output, and the Phoenix ids needed to pull the trace). Pass a verbose
66
+ * {@link RenderOptions} to restore the full per-test dump.
67
+ */
68
+ export declare function formatSuiteSummary(suite: SuiteSummary, o?: RenderOptions): string;
69
+ /**
70
+ * Render the run header (totals + tracking note) and, for multi-suite runs, an
71
+ * aligned overview table: one row per suite with its pass count, primary metric,
72
+ * acceptance verdict, mean latency, and a miss/fail note. This is the index;
73
+ * only suites with problems are expanded into a detail block below it.
74
+ */
75
+ export declare function formatScoreboard(suites: readonly SuiteSummary[], o?: RenderOptions): string;
76
+ /**
77
+ * Print the run summary: the overview header (and, for multi-suite runs, the
78
+ * index table), then an expanded detail block for every suite that failed or
79
+ * had misses. Clean suites are fully described by their overview row. A
80
+ * single-suite run always prints its block; verbose prints every block.
81
+ */
82
+ export declare function printSuiteSummaries(suites: readonly SuiteSummary[]): void;
83
+ //# sourceMappingURL=reporter-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter-format.d.ts","sourceRoot":"","sources":["../../../src/testing/reporter-format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,+EAA+E;IAC/E,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,MAAM,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAmB,GAC7D,aAAa,CAuBf;AAgYD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,CAAC,GAAE,aAAsC,GACxC,MAAM,CAIR;AA6MD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,CAAC,GAAE,aAAsC,GACxC,MAAM,CA8FR;AAoBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAezE"}