@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,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PHOENIX_TEST_REPORT_DIR_ENV_VAR = void 0;
4
+ exports.getSuiteSummaryReportDir = getSuiteSummaryReportDir;
5
+ exports.clearSuiteSummaryArtifacts = clearSuiteSummaryArtifacts;
6
+ exports.writeSuiteSummaryArtifact = writeSuiteSummaryArtifact;
7
+ exports.readSuiteSummaryArtifacts = readSuiteSummaryArtifacts;
8
+ /**
9
+ * Cross-process bridge for the end-of-run Phoenix summary.
10
+ *
11
+ * Both Vitest and Jest run test files in separate worker processes, so a
12
+ * suite's results live in a different process than the reporter that prints
13
+ * the final summary. To bridge that gap, each worker writes a small JSON
14
+ * artifact describing its suite to a shared temp directory when the suite
15
+ * finishes (see {@link writeSuiteSummaryArtifact}). At the end of the run the
16
+ * reporter — back in the main process — reads every artifact written since the
17
+ * run began (see {@link readSuiteSummaryArtifacts}) and prints them together.
18
+ *
19
+ * Everything here is best-effort: a failure to write or read an artifact must
20
+ * never fail a user's test, so the file system calls swallow their errors.
21
+ */
22
+ const node_crypto_1 = require("node:crypto");
23
+ const node_fs_1 = require("node:fs");
24
+ const node_os_1 = require("node:os");
25
+ const node_path_1 = require("node:path");
26
+ /**
27
+ * Env var that overrides where suite summary artifacts are written. When unset,
28
+ * a stable per-project subdirectory of the OS temp dir is used (see
29
+ * {@link getSuiteSummaryReportDir}).
30
+ */
31
+ exports.PHOENIX_TEST_REPORT_DIR_ENV_VAR = "PHOENIX_TEST_REPORT_DIR";
32
+ const ARTIFACT_VERSION = 1;
33
+ const ARTIFACT_FILE_PREFIX = "suite-";
34
+ let artifactCounter = 0;
35
+ /**
36
+ * Resolve the directory where suite summary artifacts are written and read.
37
+ *
38
+ * Honors {@link PHOENIX_TEST_REPORT_DIR_ENV_VAR} when set. Otherwise it derives
39
+ * a directory under the OS temp dir, namespaced by a hash of the current
40
+ * working directory so that concurrent test runs in different projects don't
41
+ * read each other's artifacts.
42
+ */
43
+ function getSuiteSummaryReportDir() {
44
+ const configuredReportDir = process.env[exports.PHOENIX_TEST_REPORT_DIR_ENV_VAR];
45
+ if (configuredReportDir && configuredReportDir.trim().length > 0) {
46
+ return configuredReportDir;
47
+ }
48
+ const cwdHash = (0, node_crypto_1.createHash)("sha256")
49
+ .update(process.cwd())
50
+ .digest("hex")
51
+ .slice(0, 16);
52
+ return (0, node_path_1.join)((0, node_os_1.tmpdir)(), "phoenix-client-test-reports", cwdHash);
53
+ }
54
+ /**
55
+ * Delete any artifacts left over from a previous run. The reporter calls this
56
+ * at the start of every run so summaries from an earlier watch-mode invocation
57
+ * don't bleed into the next one.
58
+ */
59
+ function clearSuiteSummaryArtifacts() {
60
+ const reportDir = getSuiteSummaryReportDir();
61
+ (0, node_fs_1.mkdirSync)(reportDir, { recursive: true });
62
+ for (const fileName of (0, node_fs_1.readdirSync)(reportDir)) {
63
+ if (!isArtifactFileName(fileName)) {
64
+ continue;
65
+ }
66
+ try {
67
+ (0, node_fs_1.rmSync)((0, node_path_1.join)(reportDir, fileName), { force: true });
68
+ }
69
+ catch (_a) {
70
+ continue;
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Write one suite's summary to the report directory. Called from each worker
76
+ * when a suite finishes.
77
+ *
78
+ * The file is written to a `.tmp` path first and then atomically renamed into
79
+ * place, so the reader never observes a half-written artifact. Failures are
80
+ * intentionally swallowed — reporting must not break the user's tests.
81
+ */
82
+ function writeSuiteSummaryArtifact(suite) {
83
+ try {
84
+ const reportDir = getSuiteSummaryReportDir();
85
+ (0, node_fs_1.mkdirSync)(reportDir, { recursive: true });
86
+ const artifact = {
87
+ version: ARTIFACT_VERSION,
88
+ createdAtMs: Date.now(),
89
+ suite: createSuiteSummary(suite),
90
+ };
91
+ const fileName = `${ARTIFACT_FILE_PREFIX}${process.pid}-${Date.now()}-${artifactCounter++}.json`;
92
+ const artifactPath = (0, node_path_1.join)(reportDir, fileName);
93
+ const temporaryPath = `${artifactPath}.tmp`;
94
+ (0, node_fs_1.writeFileSync)(temporaryPath, JSON.stringify(artifact), "utf8");
95
+ (0, node_fs_1.renameSync)(temporaryPath, artifactPath);
96
+ }
97
+ catch (_a) {
98
+ // Reporting artifacts are best-effort and should not fail user tests.
99
+ }
100
+ }
101
+ /**
102
+ * Read back all suite summaries the workers wrote during this run, sorted by
103
+ * suite name for stable output.
104
+ *
105
+ * @param sinceMs - When provided, only artifacts created at or after this
106
+ * timestamp are returned, so summaries from a previous run that share the
107
+ * report directory are ignored. A one-second slack is allowed to absorb
108
+ * small clock differences between worker processes.
109
+ */
110
+ function readSuiteSummaryArtifacts({ sinceMs, } = {}) {
111
+ const reportDir = getSuiteSummaryReportDir();
112
+ if (!(0, node_fs_1.existsSync)(reportDir)) {
113
+ return [];
114
+ }
115
+ const suites = [];
116
+ for (const fileName of (0, node_fs_1.readdirSync)(reportDir)) {
117
+ if (!fileName.startsWith(ARTIFACT_FILE_PREFIX) ||
118
+ !fileName.endsWith(".json")) {
119
+ continue;
120
+ }
121
+ const artifactPath = (0, node_path_1.join)(reportDir, fileName);
122
+ try {
123
+ const stats = (0, node_fs_1.statSync)(artifactPath);
124
+ if (sinceMs !== undefined && stats.mtimeMs < sinceMs - 1000) {
125
+ continue;
126
+ }
127
+ const artifact = JSON.parse((0, node_fs_1.readFileSync)(artifactPath, "utf8"));
128
+ if (!isSuiteSummaryArtifact(artifact)) {
129
+ continue;
130
+ }
131
+ if (sinceMs !== undefined && artifact.createdAtMs < sinceMs - 1000) {
132
+ continue;
133
+ }
134
+ suites.push(artifact.suite);
135
+ }
136
+ catch (_a) {
137
+ continue;
138
+ }
139
+ }
140
+ return suites.sort((leftSuite, rightSuite) => leftSuite.name.localeCompare(rightSuite.name));
141
+ }
142
+ /**
143
+ * Project the live in-memory {@link SuiteState} down to the serializable
144
+ * {@link SuiteSummary} that gets written to disk. Drops anything that can't or
145
+ * shouldn't cross the process boundary (clients, tracers, raw Error objects).
146
+ */
147
+ function createSuiteSummary(suite) {
148
+ return {
149
+ name: suite.name,
150
+ trackingDisabled: suite.trackingDisabled,
151
+ trackingDisabledReason: suite.trackingDisabledReason,
152
+ setupError: suite.setupError
153
+ ? { message: suite.setupError.message }
154
+ : undefined,
155
+ uploadFailureCount: suite.uploadFailureCount,
156
+ results: suite.results.map(createTestResultSummary),
157
+ acceptanceResults: suite.acceptanceResults,
158
+ links: suite.links.map(({ label, url }) => ({ label, url })),
159
+ };
160
+ }
161
+ function createTestResultSummary(result) {
162
+ return {
163
+ suiteName: result.suiteName,
164
+ testName: result.testName,
165
+ status: result.status,
166
+ output: toJsonSafeValue(result.output),
167
+ annotations: result.annotations.map(({ name, score, label, explanation, annotatorKind, metadata, traceId, }) => ({
168
+ name,
169
+ score,
170
+ label,
171
+ explanation,
172
+ annotatorKind,
173
+ metadata,
174
+ traceId,
175
+ })),
176
+ error: result.error,
177
+ durationMs: result.durationMs,
178
+ repetitionNumber: result.repetitionNumber,
179
+ repetitions: result.repetitions,
180
+ dryRun: result.dryRun,
181
+ traceId: result.traceId,
182
+ runId: result.runId,
183
+ exampleId: result.exampleId,
184
+ };
185
+ }
186
+ /**
187
+ * Make a recorded test output safe to JSON-serialize: `bigint` values are
188
+ * stringified, and anything that still can't be serialized (cycles, etc.)
189
+ * falls back to its `String()` form rather than throwing.
190
+ */
191
+ function toJsonSafeValue(value) {
192
+ if (value === undefined) {
193
+ return undefined;
194
+ }
195
+ try {
196
+ return JSON.parse(JSON.stringify(value, (_key, nestedValue) => typeof nestedValue === "bigint" ? nestedValue.toString() : nestedValue));
197
+ }
198
+ catch (_a) {
199
+ return String(value);
200
+ }
201
+ }
202
+ /**
203
+ * Validate a parsed artifact before trusting it. Guards against version skew
204
+ * and partially-written or unrelated JSON files in the report directory.
205
+ */
206
+ function isSuiteSummaryArtifact(value) {
207
+ if (!isRecord(value)) {
208
+ return false;
209
+ }
210
+ const suite = value.suite;
211
+ return (value.version === ARTIFACT_VERSION &&
212
+ typeof value.createdAtMs === "number" &&
213
+ isRecord(suite) &&
214
+ typeof suite.name === "string" &&
215
+ Array.isArray(suite.results) &&
216
+ Array.isArray(suite.links));
217
+ }
218
+ function isArtifactFileName(fileName) {
219
+ return (fileName.startsWith(ARTIFACT_FILE_PREFIX) &&
220
+ (fileName.endsWith(".json") || fileName.endsWith(".json.tmp")));
221
+ }
222
+ function isRecord(value) {
223
+ return typeof value === "object" && value !== null;
224
+ }
225
+ //# 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,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuiteSummaryReportRun = void 0;
4
+ const report_artifacts_1 = require("./report-artifacts");
5
+ const reporter_format_1 = require("./reporter-format");
6
+ const runner_1 = require("./runner");
7
+ /**
8
+ * Shared "print the Phoenix summary once per run" policy for the jest and
9
+ * vitest reporters. The two frameworks differ only in which lifecycle methods
10
+ * they call; both delegate to {@link begin} on run start and {@link finish}
11
+ * on run end.
12
+ */
13
+ class SuiteSummaryReportRun {
14
+ constructor() {
15
+ this.hasPrinted = false;
16
+ this.runStartedAtMs = 0;
17
+ }
18
+ /**
19
+ * Reset state at the start of a run so suites/artifacts from a previous
20
+ * watch-mode invocation don't leak forward.
21
+ */
22
+ begin() {
23
+ this.hasPrinted = false;
24
+ this.runStartedAtMs = Date.now();
25
+ (0, runner_1.clearAllSuites)();
26
+ (0, report_artifacts_1.clearSuiteSummaryArtifacts)();
27
+ }
28
+ /**
29
+ * Print the Phoenix summary once. Prefers the on-disk artifacts written by
30
+ * suite workers, falling back to the in-process registry. A no-op once the
31
+ * summary has already been printed for this run.
32
+ */
33
+ finish() {
34
+ if (this.hasPrinted)
35
+ return;
36
+ const artifactSuites = (0, report_artifacts_1.readSuiteSummaryArtifacts)({
37
+ sinceMs: this.runStartedAtMs,
38
+ });
39
+ const suites = artifactSuites.length > 0 ? artifactSuites : (0, runner_1.getAllSuites)();
40
+ if (suites.length === 0)
41
+ return;
42
+ this.hasPrinted = true;
43
+ (0, reporter_format_1.printSuiteSummaries)(suites);
44
+ }
45
+ }
46
+ exports.SuiteSummaryReportRun = SuiteSummaryReportRun;
47
+ //# 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,yDAG4B;AAC5B,uDAAwD;AACxD,qCAAwD;AAExD;;;;;GAKG;AACH,MAAa,qBAAqB;IAAlC;QACU,eAAU,GAAG,KAAK,CAAC;QACnB,mBAAc,GAAG,CAAC,CAAC;IA4B7B,CAAC;IA1BC;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,IAAA,uBAAc,GAAE,CAAC;QACjB,IAAA,6CAA0B,GAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,MAAM,cAAc,GAAG,IAAA,4CAAyB,EAAC;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,IAAA,qBAAY,GAAE,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAA,qCAAmB,EAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF;AA9BD,sDA8BC"}
@@ -0,0 +1,83 @@
1
+ import type { TestResult } from "./state";
2
+ import type { AcceptanceResult } from "./types";
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"}