elasticdash-test 0.1.18 → 0.1.19-alpha-2

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 (53) hide show
  1. package/README.md +167 -0
  2. package/dist/ci/api-client.d.ts +23 -0
  3. package/dist/ci/api-client.d.ts.map +1 -0
  4. package/dist/ci/api-client.js +64 -0
  5. package/dist/ci/api-client.js.map +1 -0
  6. package/dist/ci/executor.d.ts +13 -0
  7. package/dist/ci/executor.d.ts.map +1 -0
  8. package/dist/ci/executor.js +539 -0
  9. package/dist/ci/executor.js.map +1 -0
  10. package/dist/ci/git-info.d.ts +13 -0
  11. package/dist/ci/git-info.d.ts.map +1 -0
  12. package/dist/ci/git-info.js +52 -0
  13. package/dist/ci/git-info.js.map +1 -0
  14. package/dist/ci/index.d.ts +6 -0
  15. package/dist/ci/index.d.ts.map +1 -0
  16. package/dist/ci/index.js +4 -0
  17. package/dist/ci/index.js.map +1 -0
  18. package/dist/ci/runner.d.ts +3 -0
  19. package/dist/ci/runner.d.ts.map +1 -0
  20. package/dist/ci/runner.js +178 -0
  21. package/dist/ci/runner.js.map +1 -0
  22. package/dist/ci/types.d.ts +108 -0
  23. package/dist/ci/types.d.ts.map +1 -0
  24. package/dist/ci/types.js +3 -0
  25. package/dist/ci/types.js.map +1 -0
  26. package/dist/cli.js +40 -0
  27. package/dist/cli.js.map +1 -1
  28. package/dist/dashboard-server.d.ts.map +1 -1
  29. package/dist/dashboard-server.js +37 -3
  30. package/dist/dashboard-server.js.map +1 -1
  31. package/dist/index.cjs +951 -123
  32. package/dist/index.d.ts +5 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/portal-server.d.ts.map +1 -1
  37. package/dist/portal-server.js +15 -1
  38. package/dist/portal-server.js.map +1 -1
  39. package/dist/telemetry-batcher.d.ts.map +1 -1
  40. package/dist/telemetry-batcher.js +5 -1
  41. package/dist/telemetry-batcher.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/ci/api-client.ts +87 -0
  44. package/src/ci/executor.ts +668 -0
  45. package/src/ci/git-info.ts +66 -0
  46. package/src/ci/index.ts +5 -0
  47. package/src/ci/runner.ts +198 -0
  48. package/src/ci/types.ts +115 -0
  49. package/src/cli.ts +55 -0
  50. package/src/dashboard-server.ts +37 -3
  51. package/src/index.ts +7 -0
  52. package/src/portal-server.ts +15 -1
  53. package/src/telemetry-batcher.ts +5 -1
@@ -0,0 +1,539 @@
1
+ import { executePortalTask, checkToolAvailability, checkAIAvailability } from '../portal-executor.js';
2
+ import { scanTools } from '../execution/tool-runner.js';
3
+ import { callProviderLLM } from '../matchers/index.js';
4
+ /**
5
+ * Execute a test (single-step or full-flow) according to its configuration.
6
+ */
7
+ export async function executeTest(test, cwd) {
8
+ const tools = scanTools(cwd);
9
+ const runCount = test.run_count || 1;
10
+ const timeoutMs = test.timeout_ms || 30000;
11
+ const startTime = Date.now();
12
+ const singleRuns = [];
13
+ for (let i = 0; i < runCount; i++) {
14
+ const runStart = Date.now();
15
+ let result;
16
+ try {
17
+ const runPromise = executeSingleRun(test, cwd, tools, i);
18
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Test timed out after ${timeoutMs}ms`)), timeoutMs));
19
+ result = await Promise.race([runPromise, timeoutPromise]);
20
+ }
21
+ catch (err) {
22
+ result = {
23
+ runIndex: i + 1,
24
+ passed: false,
25
+ durationMs: Date.now() - runStart,
26
+ inputTokens: 0,
27
+ outputTokens: 0,
28
+ totalTokens: 0,
29
+ output: null,
30
+ trace: null,
31
+ error: err instanceof Error ? err.message : String(err),
32
+ };
33
+ }
34
+ singleRuns.push(result);
35
+ }
36
+ // Evaluate expectations against the single runs
37
+ const expectationResults = await evaluateExpectations(test.expectations, singleRuns);
38
+ // Determine overall pass/fail
39
+ const passed = determinePassFail(test.pass_threshold, singleRuns, expectationResults);
40
+ return {
41
+ passed,
42
+ singleRuns,
43
+ expectationResults,
44
+ durationMs: Date.now() - startTime,
45
+ };
46
+ }
47
+ // ─── Single Run Execution ────────────────────────────────────
48
+ async function executeSingleRun(test, cwd, tools, runIndex) {
49
+ const start = Date.now();
50
+ if (test.test_type === 'single-step') {
51
+ return executeSingleStep(test, cwd, tools, runIndex, start);
52
+ }
53
+ return executeFullFlow(test, cwd, tools, runIndex, start);
54
+ }
55
+ async function executeSingleStep(test, cwd, tools, runIndex, start) {
56
+ const stepType = test.target_step_type; // 'ai' or 'tool'
57
+ const stepName = test.target_step_name;
58
+ if (!stepType || !stepName) {
59
+ return {
60
+ runIndex: runIndex + 1,
61
+ passed: false,
62
+ durationMs: Date.now() - start,
63
+ inputTokens: 0, outputTokens: 0, totalTokens: 0,
64
+ output: null, trace: null,
65
+ error: 'Single-step test requires target_step_type and target_step_name.',
66
+ };
67
+ }
68
+ // Pre-validate availability
69
+ const availability = stepType === 'ai'
70
+ ? checkAIAvailability(undefined, stepName)
71
+ : checkToolAvailability(stepName, cwd, tools);
72
+ if (!availability.available) {
73
+ return {
74
+ runIndex: runIndex + 1,
75
+ passed: false,
76
+ durationMs: Date.now() - start,
77
+ inputTokens: 0, outputTokens: 0, totalTokens: 0,
78
+ output: null, trace: null,
79
+ error: `Step unavailable: ${availability.reason}`,
80
+ };
81
+ }
82
+ // Execute via portal executor (reuses existing infrastructure)
83
+ const result = await executePortalTask({
84
+ taskId: `ci-${test.id}-run-${runIndex}`,
85
+ type: stepType === 'ai' ? 'ai' : 'tool',
86
+ name: stepName,
87
+ input: test.mock_input,
88
+ frozenEvents: test.frozen_events,
89
+ }, cwd, tools);
90
+ return {
91
+ runIndex: runIndex + 1,
92
+ passed: result.ok,
93
+ durationMs: result.durationMs,
94
+ inputTokens: result.usage?.inputTokens ?? 0,
95
+ outputTokens: result.usage?.outputTokens ?? 0,
96
+ totalTokens: result.usage?.totalTokens ?? 0,
97
+ output: result.output,
98
+ trace: null,
99
+ error: result.error,
100
+ };
101
+ }
102
+ async function executeFullFlow(test, cwd, tools, runIndex, start) {
103
+ // Full-flow tests require running the entire workflow.
104
+ // We leverage the existing workflow runner infrastructure.
105
+ // The workflow is loaded from ed_workflows.ts and executed with workflow_input.
106
+ try {
107
+ const { runWorkflow } = await import('../workflow-runner.js');
108
+ const { resolveRuntimeModule } = await import('../execution/tool-runner.js');
109
+ const { pathToFileURL } = await import('node:url');
110
+ const workflowModulePath = resolveRuntimeModule(cwd, 'ed_workflows');
111
+ if (!workflowModulePath) {
112
+ return {
113
+ runIndex: runIndex + 1,
114
+ passed: false,
115
+ durationMs: Date.now() - start,
116
+ inputTokens: 0, outputTokens: 0, totalTokens: 0,
117
+ output: null, trace: null,
118
+ error: 'Cannot find ed_workflows.ts/js in workspace root.',
119
+ };
120
+ }
121
+ // Import the workflow module dynamically
122
+ const workflowModule = await import(pathToFileURL(workflowModulePath).href);
123
+ // Find a suitable workflow function to execute
124
+ // Convention: use the first exported async function, or match by test group's workflow name
125
+ const workflowFns = Object.entries(workflowModule).filter(([, val]) => typeof val === 'function');
126
+ if (workflowFns.length === 0) {
127
+ return {
128
+ runIndex: runIndex + 1,
129
+ passed: false,
130
+ durationMs: Date.now() - start,
131
+ inputTokens: 0, outputTokens: 0, totalTokens: 0,
132
+ output: null, trace: null,
133
+ error: 'No workflow functions found in ed_workflows.',
134
+ };
135
+ }
136
+ // Prefer matching by name if the test has a target_step_name
137
+ const targetFn = test.target_step_name
138
+ ? workflowFns.find(([name]) => name === test.target_step_name)?.[1]
139
+ : workflowFns[0][1];
140
+ const fn = targetFn ?? workflowFns[0][1];
141
+ const frozenEvents = Array.isArray(test.frozen_events) ? test.frozen_events : [];
142
+ const { result, trace } = await runWorkflow(() => {
143
+ const input = test.workflow_input;
144
+ return fn(input);
145
+ }, {
146
+ replayMode: frozenEvents.length > 0,
147
+ history: frozenEvents,
148
+ interceptHttp: true,
149
+ interceptSideEffects: true,
150
+ });
151
+ // Extract usage from trace events
152
+ let inputTokens = 0, outputTokens = 0, totalTokens = 0;
153
+ if (trace?.events) {
154
+ for (const evt of trace.events) {
155
+ if (evt.type === 'ai' && evt.usage) {
156
+ inputTokens += evt.usage.inputTokens ?? evt.usage.input ?? 0;
157
+ outputTokens += evt.usage.outputTokens ?? evt.usage.output ?? 0;
158
+ totalTokens += evt.usage.totalTokens ?? evt.usage.total ?? 0;
159
+ }
160
+ }
161
+ }
162
+ return {
163
+ runIndex: runIndex + 1,
164
+ passed: true,
165
+ durationMs: Date.now() - start,
166
+ inputTokens, outputTokens, totalTokens,
167
+ output: result,
168
+ trace: trace ?? null,
169
+ };
170
+ }
171
+ catch (err) {
172
+ return {
173
+ runIndex: runIndex + 1,
174
+ passed: false,
175
+ durationMs: Date.now() - start,
176
+ inputTokens: 0, outputTokens: 0, totalTokens: 0,
177
+ output: null, trace: null,
178
+ error: err instanceof Error ? err.message : String(err),
179
+ };
180
+ }
181
+ }
182
+ // ─── Expectation Evaluation ──────────────────────────────────
183
+ async function evaluateExpectations(expectations, singleRuns) {
184
+ const results = [];
185
+ for (const exp of expectations) {
186
+ const result = await evaluateExpectation(exp, singleRuns);
187
+ results.push(result);
188
+ }
189
+ return results;
190
+ }
191
+ async function evaluateExpectation(exp, singleRuns) {
192
+ switch (exp.type) {
193
+ case 'token-budget':
194
+ return evaluateTokenBudget(exp, singleRuns);
195
+ case 'latency-budget':
196
+ return evaluateLatencyBudget(exp, singleRuns);
197
+ case 'output-contains':
198
+ return evaluateOutputContains(exp, singleRuns);
199
+ case 'output-schema':
200
+ return evaluateOutputSchema(exp, singleRuns);
201
+ case 'tool-called':
202
+ return evaluateToolCalled(exp, singleRuns);
203
+ case 'determinism':
204
+ return evaluateDeterminism(exp, singleRuns);
205
+ case 'llm-judge':
206
+ return evaluateLLMJudge(exp, singleRuns);
207
+ default:
208
+ return {
209
+ expectationId: exp.id,
210
+ type: exp.type,
211
+ passed: false,
212
+ detail: `Unknown expectation type: ${exp.type}`,
213
+ };
214
+ }
215
+ }
216
+ function evaluateTokenBudget(exp, runs) {
217
+ const perRun = {};
218
+ let allPassed = true;
219
+ for (const run of runs) {
220
+ let passed = true;
221
+ const details = [];
222
+ if (exp.max_tokens_per_run != null && run.totalTokens > exp.max_tokens_per_run) {
223
+ passed = false;
224
+ details.push(`total ${run.totalTokens} > max ${exp.max_tokens_per_run}`);
225
+ }
226
+ perRun[run.runIndex] = { passed, detail: details.join('; ') || undefined };
227
+ if (!passed)
228
+ allPassed = false;
229
+ }
230
+ if (exp.max_total_tokens != null) {
231
+ const total = runs.reduce((sum, r) => sum + r.totalTokens, 0);
232
+ if (total > exp.max_total_tokens) {
233
+ allPassed = false;
234
+ }
235
+ }
236
+ return {
237
+ expectationId: exp.id,
238
+ type: 'token-budget',
239
+ passed: allPassed,
240
+ detail: allPassed ? undefined : 'Token budget exceeded.',
241
+ perRun,
242
+ };
243
+ }
244
+ function evaluateLatencyBudget(exp, runs) {
245
+ const perRun = {};
246
+ let allPassed = true;
247
+ for (const run of runs) {
248
+ let passed = true;
249
+ if (exp.max_duration_ms != null && run.durationMs > exp.max_duration_ms) {
250
+ passed = false;
251
+ }
252
+ perRun[run.runIndex] = { passed, detail: passed ? undefined : `${run.durationMs}ms > ${exp.max_duration_ms}ms` };
253
+ if (!passed)
254
+ allPassed = false;
255
+ }
256
+ if (exp.max_total_duration_ms != null) {
257
+ const total = runs.reduce((sum, r) => sum + r.durationMs, 0);
258
+ if (total > exp.max_total_duration_ms) {
259
+ allPassed = false;
260
+ }
261
+ }
262
+ return {
263
+ expectationId: exp.id,
264
+ type: 'latency-budget',
265
+ passed: allPassed,
266
+ detail: allPassed ? undefined : 'Latency budget exceeded.',
267
+ perRun,
268
+ };
269
+ }
270
+ function evaluateOutputContains(exp, runs) {
271
+ const perRun = {};
272
+ let allPassed = true;
273
+ for (const run of runs) {
274
+ const outputStr = typeof run.output === 'string'
275
+ ? run.output
276
+ : JSON.stringify(run.output ?? '');
277
+ const haystack = exp.case_insensitive ? outputStr.toLowerCase() : outputStr;
278
+ let passed = true;
279
+ if (exp.contains_text) {
280
+ const needle = exp.case_insensitive ? exp.contains_text.toLowerCase() : exp.contains_text;
281
+ if (!haystack.includes(needle))
282
+ passed = false;
283
+ }
284
+ if (exp.not_contains_text) {
285
+ const needle = exp.case_insensitive ? exp.not_contains_text.toLowerCase() : exp.not_contains_text;
286
+ if (haystack.includes(needle))
287
+ passed = false;
288
+ }
289
+ perRun[run.runIndex] = { passed, detail: passed ? undefined : 'Output text check failed.' };
290
+ if (!passed)
291
+ allPassed = false;
292
+ }
293
+ return {
294
+ expectationId: exp.id,
295
+ type: 'output-contains',
296
+ passed: allPassed,
297
+ detail: allPassed ? undefined : 'Output contains check failed.',
298
+ perRun,
299
+ };
300
+ }
301
+ function evaluateOutputSchema(exp, runs) {
302
+ // Basic JSON schema validation: check that output is valid JSON matching the schema's type/required fields
303
+ const perRun = {};
304
+ let allPassed = true;
305
+ const schema = exp.json_schema;
306
+ for (const run of runs) {
307
+ if (!schema) {
308
+ perRun[run.runIndex] = { passed: true };
309
+ continue;
310
+ }
311
+ let output = run.output;
312
+ if (typeof output === 'string') {
313
+ try {
314
+ output = JSON.parse(output);
315
+ }
316
+ catch {
317
+ perRun[run.runIndex] = { passed: false, detail: 'Output is not valid JSON.' };
318
+ allPassed = false;
319
+ continue;
320
+ }
321
+ }
322
+ // Check type
323
+ const schemaType = schema.type;
324
+ let passed = true;
325
+ if (schemaType === 'object' && (typeof output !== 'object' || output === null || Array.isArray(output))) {
326
+ passed = false;
327
+ }
328
+ else if (schemaType === 'array' && !Array.isArray(output)) {
329
+ passed = false;
330
+ }
331
+ else if (schemaType === 'string' && typeof output !== 'string') {
332
+ passed = false;
333
+ }
334
+ // Check required fields
335
+ if (passed && schemaType === 'object' && Array.isArray(schema.required)) {
336
+ for (const key of schema.required) {
337
+ if (!(key in output)) {
338
+ passed = false;
339
+ break;
340
+ }
341
+ }
342
+ }
343
+ perRun[run.runIndex] = { passed, detail: passed ? undefined : 'Output does not match schema.' };
344
+ if (!passed)
345
+ allPassed = false;
346
+ }
347
+ return {
348
+ expectationId: exp.id,
349
+ type: 'output-schema',
350
+ passed: allPassed,
351
+ detail: allPassed ? undefined : 'Output schema check failed.',
352
+ perRun,
353
+ };
354
+ }
355
+ function evaluateToolCalled(exp, runs) {
356
+ const perRun = {};
357
+ let allPassed = true;
358
+ for (const run of runs) {
359
+ // Extract tool calls from trace
360
+ const trace = run.trace;
361
+ const toolNames = trace?.events
362
+ ?.filter((e) => e.type === 'tool')
363
+ .map((e) => e.name) ?? [];
364
+ let passed = true;
365
+ // Check required tools
366
+ if (exp.required_tools?.length) {
367
+ for (const required of exp.required_tools) {
368
+ if (!toolNames.includes(required)) {
369
+ passed = false;
370
+ break;
371
+ }
372
+ }
373
+ }
374
+ // Check forbidden tools
375
+ if (exp.forbidden_tools?.length) {
376
+ for (const forbidden of exp.forbidden_tools) {
377
+ if (toolNames.includes(forbidden)) {
378
+ passed = false;
379
+ break;
380
+ }
381
+ }
382
+ }
383
+ perRun[run.runIndex] = { passed, detail: passed ? undefined : `Tools called: [${toolNames.join(', ')}]` };
384
+ if (!passed)
385
+ allPassed = false;
386
+ }
387
+ return {
388
+ expectationId: exp.id,
389
+ type: 'tool-called',
390
+ passed: allPassed,
391
+ detail: allPassed ? undefined : 'Tool call check failed.',
392
+ perRun,
393
+ };
394
+ }
395
+ function evaluateDeterminism(exp, runs) {
396
+ if (runs.length < 2) {
397
+ return {
398
+ expectationId: exp.id,
399
+ type: 'determinism',
400
+ passed: true,
401
+ detail: 'Only one run — determinism check skipped.',
402
+ };
403
+ }
404
+ // Compare outputs pairwise
405
+ const outputs = runs.map((r) => typeof r.output === 'string' ? r.output : JSON.stringify(r.output ?? ''));
406
+ const reference = outputs[0];
407
+ let allSame = true;
408
+ const perRun = {};
409
+ for (let i = 0; i < runs.length; i++) {
410
+ const same = outputs[i] === reference;
411
+ perRun[runs[i].runIndex] = { passed: same, detail: same ? undefined : 'Output differs from run 1.' };
412
+ if (!same)
413
+ allSame = false;
414
+ }
415
+ // If similarity_threshold is set, do a basic character-level similarity check
416
+ if (!allSame && exp.similarity_threshold != null) {
417
+ const threshold = exp.similarity_threshold;
418
+ let allAboveThreshold = true;
419
+ for (let i = 1; i < outputs.length; i++) {
420
+ const similarity = computeStringSimilarity(reference, outputs[i]);
421
+ if (similarity < threshold) {
422
+ allAboveThreshold = false;
423
+ perRun[runs[i].runIndex] = {
424
+ passed: false,
425
+ detail: `Similarity ${(similarity * 100).toFixed(1)}% < ${(threshold * 100).toFixed(1)}%`,
426
+ };
427
+ }
428
+ else {
429
+ perRun[runs[i].runIndex] = { passed: true };
430
+ }
431
+ }
432
+ return {
433
+ expectationId: exp.id,
434
+ type: 'determinism',
435
+ passed: allAboveThreshold,
436
+ detail: allAboveThreshold ? undefined : 'Outputs are not sufficiently similar.',
437
+ perRun,
438
+ };
439
+ }
440
+ return {
441
+ expectationId: exp.id,
442
+ type: 'determinism',
443
+ passed: allSame,
444
+ detail: allSame ? undefined : 'Outputs are not identical across runs.',
445
+ perRun,
446
+ };
447
+ }
448
+ function computeStringSimilarity(a, b) {
449
+ if (a === b)
450
+ return 1;
451
+ if (!a.length || !b.length)
452
+ return 0;
453
+ // Simple character overlap ratio
454
+ const longer = a.length >= b.length ? a : b;
455
+ const shorter = a.length < b.length ? a : b;
456
+ let matches = 0;
457
+ for (let i = 0; i < shorter.length; i++) {
458
+ if (shorter[i] === longer[i])
459
+ matches++;
460
+ }
461
+ return matches / longer.length;
462
+ }
463
+ async function evaluateLLMJudge(exp, runs) {
464
+ if (!exp.judge_prompt) {
465
+ return {
466
+ expectationId: exp.id,
467
+ type: 'llm-judge',
468
+ passed: false,
469
+ detail: 'LLM judge expectation requires judge_prompt.',
470
+ };
471
+ }
472
+ const perRun = {};
473
+ let allPassed = true;
474
+ const threshold = exp.judge_score_threshold ?? 7;
475
+ for (const run of runs) {
476
+ const outputStr = typeof run.output === 'string'
477
+ ? run.output
478
+ : JSON.stringify(run.output ?? '');
479
+ const evalPrompt = `${exp.judge_prompt}
480
+
481
+ Output to evaluate:
482
+ ${outputStr}
483
+
484
+ Score this output on a scale of 0-10. Respond with only the number.`;
485
+ try {
486
+ const provider = exp.judge_provider || 'openai';
487
+ const result = await callProviderLLM(evalPrompt, { provider, model: exp.judge_model ?? undefined }, 'You are an expert test judge. Return only a number between 0 and 10.', 16, 0);
488
+ const score = parseFloat(result.content.match(/-?\d+(?:\.\d+)?/)?.[0] ?? '');
489
+ if (isNaN(score)) {
490
+ perRun[run.runIndex] = { passed: false, detail: `Could not parse score from: "${result.content}"` };
491
+ allPassed = false;
492
+ }
493
+ else {
494
+ const passed = score >= threshold;
495
+ perRun[run.runIndex] = { passed, detail: `Score: ${score}/${threshold}` };
496
+ if (!passed)
497
+ allPassed = false;
498
+ }
499
+ }
500
+ catch (err) {
501
+ perRun[run.runIndex] = {
502
+ passed: false,
503
+ detail: `LLM judge error: ${err instanceof Error ? err.message : String(err)}`,
504
+ };
505
+ allPassed = false;
506
+ }
507
+ }
508
+ return {
509
+ expectationId: exp.id,
510
+ type: 'llm-judge',
511
+ passed: allPassed,
512
+ detail: allPassed ? undefined : 'LLM judge check failed.',
513
+ perRun,
514
+ };
515
+ }
516
+ // ─── Pass/Fail Threshold ─────────────────────────────────────
517
+ function determinePassFail(passThreshold, singleRuns, expectationResults) {
518
+ // Check single run pass/fail
519
+ const runsPassed = singleRuns.filter((r) => r.passed).length;
520
+ const totalRuns = singleRuns.length;
521
+ let runsPass;
522
+ switch (passThreshold) {
523
+ case 'all':
524
+ runsPass = runsPassed === totalRuns;
525
+ break;
526
+ case 'majority':
527
+ runsPass = runsPassed > totalRuns / 2;
528
+ break;
529
+ case 'any':
530
+ runsPass = runsPassed > 0;
531
+ break;
532
+ default:
533
+ runsPass = runsPassed === totalRuns;
534
+ }
535
+ // All expectations must pass regardless of threshold
536
+ const expectationsPass = expectationResults.every((e) => e.passed);
537
+ return runsPass && expectationsPass;
538
+ }
539
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/ci/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface GitInfo {
2
+ branch?: string;
3
+ commit?: string;
4
+ commitMessage?: string;
5
+ prNumber?: number;
6
+ prUrl?: string;
7
+ }
8
+ /**
9
+ * Auto-detect git info from CI environment variables.
10
+ * Supports GitHub Actions, GitLab CI, and generic CI.
11
+ */
12
+ export declare function detectGitInfo(): GitInfo;
13
+ //# sourceMappingURL=git-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-info.d.ts","sourceRoot":"","sources":["../../src/ci/git-info.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAmDvC"}
@@ -0,0 +1,52 @@
1
+ // ─── CI Environment Auto-Detection ──────────────────────────
2
+ /**
3
+ * Auto-detect git info from CI environment variables.
4
+ * Supports GitHub Actions, GitLab CI, and generic CI.
5
+ */
6
+ export function detectGitInfo() {
7
+ const env = process.env;
8
+ // GitHub Actions
9
+ if (env.GITHUB_ACTIONS === 'true') {
10
+ const prNumber = env.GITHUB_EVENT_NAME === 'pull_request'
11
+ ? parseInt(env.GITHUB_REF?.match(/refs\/pull\/(\d+)/)?.[1] ?? '', 10) || undefined
12
+ : undefined;
13
+ const repo = env.GITHUB_REPOSITORY; // e.g. "owner/repo"
14
+ const prUrl = prNumber && repo
15
+ ? `https://github.com/${repo}/pull/${prNumber}`
16
+ : undefined;
17
+ return {
18
+ branch: env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME,
19
+ commit: env.GITHUB_SHA,
20
+ commitMessage: env.GITHUB_COMMIT_MESSAGE,
21
+ prNumber,
22
+ prUrl,
23
+ };
24
+ }
25
+ // GitLab CI
26
+ if (env.GITLAB_CI === 'true') {
27
+ const prNumber = env.CI_MERGE_REQUEST_IID
28
+ ? parseInt(env.CI_MERGE_REQUEST_IID, 10) || undefined
29
+ : undefined;
30
+ return {
31
+ branch: env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME || env.CI_COMMIT_BRANCH,
32
+ commit: env.CI_COMMIT_SHA,
33
+ commitMessage: env.CI_COMMIT_MESSAGE,
34
+ prNumber,
35
+ prUrl: env.CI_MERGE_REQUEST_PROJECT_URL && prNumber
36
+ ? `${env.CI_MERGE_REQUEST_PROJECT_URL}/-/merge_requests/${prNumber}`
37
+ : undefined,
38
+ };
39
+ }
40
+ // Generic CI (CircleCI, Travis, Bitbucket Pipelines, etc.)
41
+ return {
42
+ branch: env.CIRCLE_BRANCH || env.TRAVIS_BRANCH || env.BITBUCKET_BRANCH || env.CI_BRANCH,
43
+ commit: env.CIRCLE_SHA1 || env.TRAVIS_COMMIT || env.BITBUCKET_COMMIT || env.CI_COMMIT_SHA,
44
+ commitMessage: env.CI_COMMIT_MESSAGE,
45
+ prNumber: env.CIRCLE_PULL_REQUEST
46
+ ? parseInt(env.CIRCLE_PULL_REQUEST.split('/').pop() ?? '', 10) || undefined
47
+ : env.TRAVIS_PULL_REQUEST && env.TRAVIS_PULL_REQUEST !== 'false'
48
+ ? parseInt(env.TRAVIS_PULL_REQUEST, 10) || undefined
49
+ : undefined,
50
+ };
51
+ }
52
+ //# sourceMappingURL=git-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-info.js","sourceRoot":"","sources":["../../src/ci/git-info.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAU/D;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;IAEvB,iBAAiB;IACjB,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,KAAK,cAAc;YACvD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS;YAClF,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAA,CAAC,oBAAoB;QACvD,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI;YAC5B,CAAC,CAAC,sBAAsB,IAAI,SAAS,QAAQ,EAAE;YAC/C,CAAC,CAAC,SAAS,CAAA;QAEb,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe;YAClD,MAAM,EAAE,GAAG,CAAC,UAAU;YACtB,aAAa,EAAE,GAAG,CAAC,qBAAqB;YACxC,QAAQ;YACR,KAAK;SACN,CAAA;IACH,CAAC;IAED,YAAY;IACZ,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB;YACvC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,IAAI,SAAS;YACrD,CAAC,CAAC,SAAS,CAAA;QAEb,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,mCAAmC,IAAI,GAAG,CAAC,gBAAgB;YACvE,MAAM,EAAE,GAAG,CAAC,aAAa;YACzB,aAAa,EAAE,GAAG,CAAC,iBAAiB;YACpC,QAAQ;YACR,KAAK,EAAE,GAAG,CAAC,4BAA4B,IAAI,QAAQ;gBACjD,CAAC,CAAC,GAAG,GAAG,CAAC,4BAA4B,qBAAqB,QAAQ,EAAE;gBACpE,CAAC,CAAC,SAAS;SACd,CAAA;IACH,CAAC;IAED,2DAA2D;IAC3D,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,SAAS;QACvF,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,aAAa;QACzF,aAAa,EAAE,GAAG,CAAC,iBAAiB;QACpC,QAAQ,EAAE,GAAG,CAAC,mBAAmB;YAC/B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS;YAC3E,CAAC,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,mBAAmB,KAAK,OAAO;gBAC9D,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,IAAI,SAAS;gBACpD,CAAC,CAAC,SAAS;KAChB,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { runCI } from './runner.js';
2
+ export { fetchTestGroups, submitTestRun, createBatch } from './api-client.js';
3
+ export { detectGitInfo } from './git-info.js';
4
+ export type { CIRunConfig, CIRunSummary, CITestResult, CISingleRunResult, CIExpectationResult } from './types.js';
5
+ export type { GitInfo } from './git-info.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ci/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACjH,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { runCI } from './runner.js';
2
+ export { fetchTestGroups, submitTestRun, createBatch } from './api-client.js';
3
+ export { detectGitInfo } from './git-info.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ci/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}