elasticdash-test 0.1.26 → 0.1.27

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 (85) hide show
  1. package/README.md +100 -0
  2. package/dist/cli.js +175 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.cjs +62 -1
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/tool-registry.d.ts +31 -0
  10. package/dist/tool-registry.d.ts.map +1 -0
  11. package/dist/tool-registry.js +73 -0
  12. package/dist/tool-registry.js.map +1 -0
  13. package/dist/tool-runner-worker.js +19 -2
  14. package/dist/tool-runner-worker.js.map +1 -1
  15. package/dist/utils/debug.d.ts +1 -1
  16. package/dist/utils/debug.d.ts.map +1 -1
  17. package/dist/utils/debug.js +2 -2
  18. package/dist/utils/debug.js.map +1 -1
  19. package/docs/observability_contract.md +192 -0
  20. package/package.json +2 -2
  21. package/src/cli.ts +184 -0
  22. package/src/index.ts +4 -0
  23. package/src/tool-registry.ts +94 -0
  24. package/src/tool-runner-worker.ts +17 -2
  25. package/src/utils/debug.ts +2 -2
  26. package/dist/cloud-client.d.ts +0 -34
  27. package/dist/cloud-client.d.ts.map +0 -1
  28. package/dist/cloud-client.js +0 -103
  29. package/dist/cloud-client.js.map +0 -1
  30. package/dist/evaluators/determinism.d.ts +0 -3
  31. package/dist/evaluators/determinism.d.ts.map +0 -1
  32. package/dist/evaluators/determinism.js +0 -116
  33. package/dist/evaluators/determinism.js.map +0 -1
  34. package/dist/evaluators/index.d.ts +0 -4
  35. package/dist/evaluators/index.d.ts.map +0 -1
  36. package/dist/evaluators/index.js +0 -61
  37. package/dist/evaluators/index.js.map +0 -1
  38. package/dist/evaluators/latency-budget.d.ts +0 -3
  39. package/dist/evaluators/latency-budget.d.ts.map +0 -1
  40. package/dist/evaluators/latency-budget.js +0 -45
  41. package/dist/evaluators/latency-budget.js.map +0 -1
  42. package/dist/evaluators/llm-judge.d.ts +0 -3
  43. package/dist/evaluators/llm-judge.d.ts.map +0 -1
  44. package/dist/evaluators/llm-judge.js +0 -125
  45. package/dist/evaluators/llm-judge.js.map +0 -1
  46. package/dist/evaluators/output-contains.d.ts +0 -3
  47. package/dist/evaluators/output-contains.d.ts.map +0 -1
  48. package/dist/evaluators/output-contains.js +0 -52
  49. package/dist/evaluators/output-contains.js.map +0 -1
  50. package/dist/evaluators/output-schema.d.ts +0 -3
  51. package/dist/evaluators/output-schema.d.ts.map +0 -1
  52. package/dist/evaluators/output-schema.js +0 -58
  53. package/dist/evaluators/output-schema.js.map +0 -1
  54. package/dist/evaluators/token-budget.d.ts +0 -3
  55. package/dist/evaluators/token-budget.d.ts.map +0 -1
  56. package/dist/evaluators/token-budget.js +0 -45
  57. package/dist/evaluators/token-budget.js.map +0 -1
  58. package/dist/evaluators/types.d.ts +0 -104
  59. package/dist/evaluators/types.d.ts.map +0 -1
  60. package/dist/evaluators/types.js +0 -6
  61. package/dist/evaluators/types.js.map +0 -1
  62. package/dist/test-group/cli.d.ts +0 -8
  63. package/dist/test-group/cli.d.ts.map +0 -1
  64. package/dist/test-group/cli.js +0 -162
  65. package/dist/test-group/cli.js.map +0 -1
  66. package/dist/test-group/git-context.d.ts +0 -3
  67. package/dist/test-group/git-context.d.ts.map +0 -1
  68. package/dist/test-group/git-context.js +0 -59
  69. package/dist/test-group/git-context.js.map +0 -1
  70. package/dist/test-group/reporter.d.ts +0 -4
  71. package/dist/test-group/reporter.d.ts.map +0 -1
  72. package/dist/test-group/reporter.js +0 -54
  73. package/dist/test-group/reporter.js.map +0 -1
  74. package/dist/test-group/runner.d.ts +0 -18
  75. package/dist/test-group/runner.d.ts.map +0 -1
  76. package/dist/test-group/runner.js +0 -234
  77. package/dist/test-group/runner.js.map +0 -1
  78. package/dist/tracing-universal.d.ts +0 -13
  79. package/dist/tracing-universal.d.ts.map +0 -1
  80. package/dist/tracing-universal.js +0 -33
  81. package/dist/tracing-universal.js.map +0 -1
  82. package/docs/backend_rerun_alignment.md +0 -291
  83. package/docs/backend_traceid_update.md +0 -141
  84. package/docs/observability_backend_contract.md +0 -577
  85. package/docs/observability_rerun_backend_plan.md +0 -596
@@ -1,3 +0,0 @@
1
- import type { GitContext } from '../evaluators/types.js';
2
- export declare function collectGitContext(): GitContext | undefined;
3
- //# sourceMappingURL=git-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-context.d.ts","sourceRoot":"","sources":["../../src/test-group/git-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,SAAS,CAqD1D"}
@@ -1,59 +0,0 @@
1
- import { execFileSync } from 'node:child_process';
2
- export function collectGitContext() {
3
- try {
4
- // GitHub Actions — use CI-provided env vars for richer context
5
- if (process.env.GITHUB_ACTIONS) {
6
- const branch = process.env.GITHUB_HEAD_REF || // PR source branch
7
- process.env.GITHUB_REF_NAME || // push branch
8
- process.env.GITHUB_REF?.replace('refs/heads/', '') ||
9
- '';
10
- const commit = process.env.GITHUB_SHA || '';
11
- const commitMessage = gitExec('log', '-1', '--format=%s');
12
- const prNumber = process.env.GITHUB_REF?.match(/refs\/pull\/(\d+)/)?.[1];
13
- const prUrl = prNumber && process.env.GITHUB_SERVER_URL && process.env.GITHUB_REPOSITORY
14
- ? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/pull/${prNumber}`
15
- : undefined;
16
- return {
17
- branch,
18
- commit,
19
- commitMessage: commitMessage || undefined,
20
- prNumber: prNumber ? parseInt(prNumber) : undefined,
21
- prUrl,
22
- };
23
- }
24
- // GitLab CI
25
- if (process.env.GITLAB_CI) {
26
- return {
27
- branch: process.env.CI_COMMIT_BRANCH || process.env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME || '',
28
- commit: process.env.CI_COMMIT_SHA || '',
29
- commitMessage: process.env.CI_COMMIT_MESSAGE || undefined,
30
- prNumber: process.env.CI_MERGE_REQUEST_IID ? parseInt(process.env.CI_MERGE_REQUEST_IID) : undefined,
31
- prUrl: process.env.CI_MERGE_REQUEST_URL || undefined,
32
- };
33
- }
34
- // Local or generic CI — try git commands
35
- const branch = gitExec('rev-parse', '--abbrev-ref', 'HEAD');
36
- const commit = gitExec('rev-parse', 'HEAD');
37
- const commitMessage = gitExec('log', '-1', '--format=%s');
38
- if (branch || commit) {
39
- return {
40
- branch: branch || '',
41
- commit: commit || '',
42
- commitMessage: commitMessage || undefined,
43
- };
44
- }
45
- }
46
- catch {
47
- // Not in a git repo or git not available
48
- }
49
- return undefined;
50
- }
51
- function gitExec(...args) {
52
- try {
53
- return execFileSync('git', args, { encoding: 'utf-8', timeout: 5000 }).trim();
54
- }
55
- catch {
56
- return '';
57
- }
58
- }
59
- //# sourceMappingURL=git-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-context.js","sourceRoot":"","sources":["../../src/test-group/git-context.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { TestGroupRunResult, BatchResult } from '../evaluators/types.js';
2
- export declare function reportTestGroupRun(result: TestGroupRunResult): void;
3
- export declare function reportBatchResult(batch: BatchResult, cloudUrl?: string): void;
4
- //# sourceMappingURL=reporter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/test-group/reporter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAA;AAchG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAmBnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAkC7E"}
@@ -1,54 +0,0 @@
1
- import chalk from 'chalk';
2
- function formatMs(ms) {
3
- return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${ms}ms`;
4
- }
5
- function formatTokens(n) {
6
- return n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n);
7
- }
8
- function expectationIcon(result) {
9
- return result.passed ? chalk.green(' ✓') : chalk.red(' ✗');
10
- }
11
- export function reportTestGroupRun(result) {
12
- const icon = result.passed ? chalk.green('✓') : chalk.red('✗');
13
- const totalTokens = result.singleRuns.reduce((s, r) => s + r.tokenUsage.totalTokens, 0);
14
- const totalDuration = result.singleRuns.reduce((s, r) => s + r.durationMs, 0);
15
- const avgDuration = result.singleRuns.length > 0 ? Math.round(totalDuration / result.singleRuns.length) : 0;
16
- const runCount = result.singleRuns.length;
17
- console.log(`${icon} ${result.summary} (${runCount} runs, avg ${formatMs(avgDuration)}, ${formatTokens(totalTokens)} tokens)`);
18
- // Show expectation results
19
- for (const er of result.expectationResults) {
20
- console.log(`${expectationIcon(er)} ${er.type}: ${er.detail}`);
21
- }
22
- // Show errors for failed runs
23
- const failedRuns = result.singleRuns.filter((r) => r.error);
24
- for (const run of failedRuns) {
25
- console.log(chalk.red(` Run #${run.runIndex}: ${run.error}`));
26
- }
27
- }
28
- export function reportBatchResult(batch, cloudUrl) {
29
- console.log('');
30
- console.log(chalk.bold('Test Group Results'));
31
- console.log(chalk.dim('─'.repeat(60)));
32
- for (const result of batch.results) {
33
- reportTestGroupRun(result);
34
- console.log('');
35
- }
36
- console.log(chalk.dim('─'.repeat(60)));
37
- const passedCount = batch.results.filter((r) => r.passed).length;
38
- const totalCount = batch.results.length;
39
- if (batch.passed) {
40
- console.log(chalk.green.bold(`${passedCount}/${totalCount} test groups passed`));
41
- }
42
- else {
43
- console.log(chalk.red.bold(`${passedCount}/${totalCount} test groups passed`));
44
- const failed = batch.results.filter((r) => !r.passed);
45
- console.log(chalk.red(`Failed: ${failed.map((r) => r.summary.split(':')[0]).join(', ')}`));
46
- }
47
- const totalDuration = batch.results.reduce((s, r) => s + r.singleRuns.reduce((ss, sr) => ss + sr.durationMs, 0), 0);
48
- console.log(chalk.dim(`Total duration: ${formatMs(totalDuration)}`));
49
- if (cloudUrl) {
50
- console.log(chalk.dim(`View results: ${cloudUrl}`));
51
- }
52
- console.log('');
53
- }
54
- //# sourceMappingURL=reporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/test-group/reporter.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Test group runner — executes test groups locally via subprocess,
3
- * evaluates expectations, and returns results for pushing to the cloud.
4
- *
5
- * This module is fully independent from the dashboard server.
6
- * It reuses the same workflow-runner-worker subprocess pattern.
7
- */
8
- import type { TestGroup, SingleRunData, TestGroupRunResult, BatchResult } from '../evaluators/types.js';
9
- export declare function executeSingleRun(testGroup: TestGroup, runIndex: number, cwd: string): Promise<SingleRunData>;
10
- export declare function runTestGroupNTimes(testGroup: TestGroup, cwd: string, options?: {
11
- overrideRunCount?: number;
12
- triggeredBy?: TestGroupRunResult['triggeredBy'];
13
- }): Promise<TestGroupRunResult>;
14
- export declare function runAllTestGroups(testGroups: TestGroup[], cwd: string, options?: {
15
- overrideRunCount?: number;
16
- triggeredBy?: TestGroupRunResult['triggeredBy'];
17
- }): Promise<BatchResult>;
18
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/test-group/runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAc,MAAM,wBAAwB,CAAA;AAoKnH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,CAAC,CAsDxB;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;CAAE,GACvF,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,SAAS,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;CAAE,GACvF,OAAO,CAAC,WAAW,CAAC,CA0BtB"}
@@ -1,234 +0,0 @@
1
- /**
2
- * Test group runner — executes test groups locally via subprocess,
3
- * evaluates expectations, and returns results for pushing to the cloud.
4
- *
5
- * This module is fully independent from the dashboard server.
6
- * It reuses the same workflow-runner-worker subprocess pattern.
7
- */
8
- import { spawn } from 'node:child_process';
9
- import path from 'node:path';
10
- import { pathToFileURL, fileURLToPath } from 'node:url';
11
- import { existsSync } from 'node:fs';
12
- import { evaluateExpectations } from '../evaluators/index.js';
13
- function findWorkflowsModule(cwd) {
14
- for (const name of ['ed_workflows.ts', 'ed_workflows.js']) {
15
- const p = path.join(cwd, name);
16
- if (existsSync(p))
17
- return p;
18
- }
19
- return null;
20
- }
21
- function findToolsModule(cwd) {
22
- for (const name of ['ed_tools.ts', 'ed_tools.js']) {
23
- const p = path.join(cwd, name);
24
- if (existsSync(p))
25
- return p;
26
- }
27
- return null;
28
- }
29
- function isDenoProject(dir) {
30
- return existsSync(path.join(dir, 'deno.json')) || existsSync(path.join(dir, 'deno.jsonc'));
31
- }
32
- function runInSubprocess(workflowsModulePath, toolsModulePath, workflowName, args, input, options) {
33
- return new Promise((resolve) => {
34
- const workerScript = fileURLToPath(new URL('../workflow-runner-worker.js', import.meta.url));
35
- const projectDir = path.dirname(workflowsModulePath);
36
- const denoProject = isDenoProject(projectDir);
37
- const nodeOptions = process.env.NODE_OPTIONS ?? '';
38
- const tsxFlag = '--import tsx';
39
- const childNodeOptions = nodeOptions.includes('tsx') ? nodeOptions : `${nodeOptions} ${tsxFlag}`.trim();
40
- const childEnv = { ...process.env, NODE_OPTIONS: denoProject ? nodeOptions : childNodeOptions };
41
- const runtime = denoProject ? 'deno' : process.execPath;
42
- const runtimeArgs = denoProject ? ['run', '--allow-all', workerScript] : [workerScript];
43
- const child = spawn(runtime, runtimeArgs, {
44
- env: childEnv,
45
- cwd: projectDir,
46
- stdio: ['pipe', 'pipe', 'pipe', 'pipe'],
47
- });
48
- // Timeout handling
49
- let timedOut = false;
50
- let timeoutHandle;
51
- if (options?.timeoutMs) {
52
- timeoutHandle = setTimeout(() => {
53
- timedOut = true;
54
- child.kill('SIGKILL');
55
- }, options.timeoutMs);
56
- }
57
- let fd3Data = '';
58
- let stderr = '';
59
- const WORKFLOW_RESULT_PREFIX = '__ELASTICDASH_RESULT__:';
60
- let stdoutBuf = '';
61
- child.stdout.on('data', (chunk) => {
62
- stdoutBuf += chunk.toString();
63
- const lines = stdoutBuf.split('\n');
64
- stdoutBuf = lines.pop() ?? '';
65
- for (const line of lines) {
66
- if (line.startsWith(WORKFLOW_RESULT_PREFIX)) {
67
- fd3Data += line.slice(WORKFLOW_RESULT_PREFIX.length);
68
- }
69
- // Suppress stdout from subprocesses in test-group mode
70
- }
71
- });
72
- child.stderr.on('data', (chunk) => {
73
- stderr += chunk.toString();
74
- });
75
- const fd3 = child.stdio[3];
76
- fd3?.on('data', (chunk) => {
77
- fd3Data += chunk.toString();
78
- });
79
- child.on('close', () => {
80
- if (timeoutHandle)
81
- clearTimeout(timeoutHandle);
82
- if (stdoutBuf.startsWith(WORKFLOW_RESULT_PREFIX)) {
83
- fd3Data += stdoutBuf.slice(WORKFLOW_RESULT_PREFIX.length);
84
- }
85
- if (timedOut) {
86
- resolve({ ok: false, error: `Timed out after ${options?.timeoutMs}ms` });
87
- return;
88
- }
89
- if (fd3Data) {
90
- try {
91
- const parsed = JSON.parse(fd3Data);
92
- if (parsed && typeof parsed === 'object' && 'ok' in parsed) {
93
- resolve(parsed);
94
- return;
95
- }
96
- }
97
- catch { /* fall through */ }
98
- }
99
- resolve({ ok: false, error: stderr.trim() || 'Workflow subprocess produced no output.' });
100
- });
101
- child.on('error', (err) => {
102
- if (timeoutHandle)
103
- clearTimeout(timeoutHandle);
104
- resolve({ ok: false, error: `Failed to spawn subprocess: ${err.message}` });
105
- });
106
- const payload = JSON.stringify({
107
- workflowsModulePath: pathToFileURL(workflowsModulePath).pathname,
108
- toolsModulePath: toolsModulePath ? pathToFileURL(toolsModulePath).pathname : undefined,
109
- workflowName,
110
- args,
111
- input,
112
- ...(options?.replayMode !== undefined ? { replayMode: options.replayMode } : {}),
113
- ...(options?.checkpoint !== undefined ? { checkpoint: options.checkpoint } : {}),
114
- ...(options?.history !== undefined ? { history: options.history } : {}),
115
- ...(options?.toolMockConfig !== undefined ? { toolMockConfig: options.toolMockConfig } : {}),
116
- ...(options?.aiMockConfig !== undefined ? { aiMockConfig: options.aiMockConfig } : {}),
117
- ...(options?.promptMockConfig !== undefined ? { promptMockConfig: options.promptMockConfig } : {}),
118
- });
119
- child.stdin.write(payload);
120
- child.stdin.end();
121
- });
122
- }
123
- function extractTokenUsage(events) {
124
- let inputTokens = 0;
125
- let outputTokens = 0;
126
- let totalTokens = 0;
127
- for (const event of events) {
128
- if (event.usage) {
129
- inputTokens += event.usage.inputTokens ?? 0;
130
- outputTokens += event.usage.outputTokens ?? 0;
131
- totalTokens += event.usage.totalTokens ?? 0;
132
- }
133
- }
134
- // If totalTokens wasn't reported but individual counts were, compute it
135
- if (totalTokens === 0 && (inputTokens > 0 || outputTokens > 0)) {
136
- totalTokens = inputTokens + outputTokens;
137
- }
138
- return { inputTokens, outputTokens, totalTokens };
139
- }
140
- export async function executeSingleRun(testGroup, runIndex, cwd) {
141
- const workflowsModule = findWorkflowsModule(cwd);
142
- if (!workflowsModule) {
143
- return {
144
- runIndex,
145
- passed: false,
146
- durationMs: 0,
147
- tokenUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
148
- output: null,
149
- error: 'No ed_workflows.ts or ed_workflows.js found in project directory',
150
- };
151
- }
152
- const toolsModule = findToolsModule(cwd);
153
- const frozenEvents = (testGroup.frozenEvents ?? []);
154
- const checkpoint = frozenEvents.length > 0
155
- ? Math.max(...frozenEvents.map((e) => e.id))
156
- : 0;
157
- const startedAt = new Date().toISOString();
158
- const startMs = Date.now();
159
- const result = await runInSubprocess(workflowsModule, toolsModule, testGroup.workflowName, testGroup.mockInput ? [testGroup.mockInput] : [], testGroup.mockInput, {
160
- replayMode: frozenEvents.length > 0,
161
- checkpoint,
162
- history: frozenEvents,
163
- toolMockConfig: testGroup.toolMocks,
164
- promptMockConfig: testGroup.promptMocks,
165
- timeoutMs: testGroup.timeoutMs,
166
- });
167
- const durationMs = Date.now() - startMs;
168
- const completedAt = new Date().toISOString();
169
- const events = result.workflowTrace?.events ?? [];
170
- const tokenUsage = extractTokenUsage(events);
171
- return {
172
- runIndex,
173
- passed: result.ok,
174
- durationMs,
175
- tokenUsage,
176
- output: result.currentOutput ?? null,
177
- trace: result.workflowTrace,
178
- error: result.ok ? undefined : result.error,
179
- startedAt,
180
- completedAt,
181
- };
182
- }
183
- export async function runTestGroupNTimes(testGroup, cwd, options) {
184
- const runCount = options?.overrideRunCount ?? testGroup.runCount;
185
- const startedAt = new Date().toISOString();
186
- const singleRuns = [];
187
- for (let i = 0; i < runCount; i++) {
188
- const run = await executeSingleRun(testGroup, i, cwd);
189
- singleRuns.push(run);
190
- }
191
- const evaluation = await evaluateExpectations(testGroup.expectations, singleRuns, testGroup.passThreshold);
192
- // Mark individual runs as passed/failed based on expectation results
193
- // A run is "passed" if it didn't error AND expectations passed for it
194
- for (const run of singleRuns) {
195
- if (run.error) {
196
- run.passed = false;
197
- }
198
- }
199
- const completedAt = new Date().toISOString();
200
- return {
201
- testGroupId: testGroup.id,
202
- triggeredBy: options?.triggeredBy ?? (process.env.CI ? 'ci' : 'local'),
203
- passed: evaluation.passed,
204
- summary: `${testGroup.name}: ${evaluation.summary}`,
205
- singleRuns,
206
- expectationResults: evaluation.results,
207
- startedAt,
208
- completedAt,
209
- };
210
- }
211
- export async function runAllTestGroups(testGroups, cwd, options) {
212
- const startedAt = new Date().toISOString();
213
- const results = [];
214
- const testGroupRunIds = [];
215
- for (const group of testGroups) {
216
- const result = await runTestGroupNTimes(group, cwd, options);
217
- results.push(result);
218
- // RunIds will be assigned by the backend after push
219
- testGroupRunIds.push(group.id);
220
- }
221
- const passedCount = results.filter((r) => r.passed).length;
222
- const totalCount = results.length;
223
- const allPassed = passedCount === totalCount;
224
- const completedAt = new Date().toISOString();
225
- return {
226
- passed: allPassed,
227
- summary: `${passedCount}/${totalCount} test groups passed`,
228
- testGroupRunIds,
229
- results,
230
- startedAt,
231
- completedAt,
232
- };
233
- }
234
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/test-group/runner.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Records a tool call for workflow tracing. Safe to import and call in any environment.
3
- * - Server-side (Node.js/SSR): records the tool call if running inside ElasticDash runner
4
- * - Client-side (browser): silently does nothing
5
- *
6
- * This is safe to use in Next.js components, API routes, Server Actions, and Client Components.
7
- *
8
- * @param name - The tool name
9
- * @param args - The tool arguments (object or array)
10
- * @param result - The tool result (or error)
11
- */
12
- export declare function recordToolCall(name: string, args: any, result: any): void;
13
- //# sourceMappingURL=tracing-universal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracing-universal.d.ts","sourceRoot":"","sources":["../src/tracing-universal.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAkBzE"}
@@ -1,33 +0,0 @@
1
- // src/tracing-universal.ts
2
- // Browser-safe tracing utility for universal (SSR + CSR) environments like Next.js
3
- /**
4
- * Records a tool call for workflow tracing. Safe to import and call in any environment.
5
- * - Server-side (Node.js/SSR): records the tool call if running inside ElasticDash runner
6
- * - Client-side (browser): silently does nothing
7
- *
8
- * This is safe to use in Next.js components, API routes, Server Actions, and Client Components.
9
- *
10
- * @param name - The tool name
11
- * @param args - The tool arguments (object or array)
12
- * @param result - The tool result (or error)
13
- */
14
- export function recordToolCall(name, args, result) {
15
- // Detect browser environment using safe type checks
16
- const g = globalThis;
17
- if (typeof g.window !== 'undefined' && typeof g.document !== 'undefined') {
18
- // Browser environment — completely silent no-op
19
- return;
20
- }
21
- // Server environment — safe to import the Node.js version
22
- try {
23
- // Dynamic import to avoid bundling in browser
24
- const tracingModule = require('./tracing.js');
25
- if (tracingModule?.recordToolCall) {
26
- tracingModule.recordToolCall(name, args, result);
27
- }
28
- }
29
- catch {
30
- // Silently fail if module can't be loaded (e.g., during build or in edge runtime)
31
- }
32
- }
33
- //# sourceMappingURL=tracing-universal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracing-universal.js","sourceRoot":"","sources":["../src/tracing-universal.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,mFAAmF;AAEnF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAS,EAAE,MAAW;IACjE,oDAAoD;IACpD,MAAM,CAAC,GAAG,UAAiB,CAAA;IAC3B,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACzE,gDAAgD;QAChD,OAAM;IACR,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QAC7C,IAAI,aAAa,EAAE,cAAc,EAAE,CAAC;YAClC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;AACH,CAAC"}