@ekairos/testing 1.21.90-beta.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.
@@ -0,0 +1,36 @@
1
+ export type WorkflowTraceEntry = {
2
+ workflowRunId: string;
3
+ source?: string;
4
+ caseId?: string;
5
+ projectId?: string;
6
+ createdAt?: string;
7
+ runPath?: string;
8
+ eventsPath?: string;
9
+ stepsPath?: string;
10
+ hooksPath?: string;
11
+ streamsPath?: string;
12
+ summary?: Record<string, unknown>;
13
+ };
14
+ export declare function resolveWorkflowDataDir(input?: string): string;
15
+ export declare function recordWorkflowRun(entry: WorkflowTraceEntry, outputDir?: string, runId?: string): void;
16
+ export type CaptureStoryTraceInput = {
17
+ workflowRunId: string;
18
+ apiBaseUrl: string;
19
+ apiKey: string;
20
+ projectId: string;
21
+ outputDir?: string;
22
+ runId?: string;
23
+ caseId?: string;
24
+ source?: string;
25
+ };
26
+ export declare function captureStoryTrace(input: CaptureStoryTraceInput): Promise<void>;
27
+ export type CaptureLocalWorkflowTraceInput = {
28
+ workflowRunId: string;
29
+ dataDir?: string;
30
+ outputDir?: string;
31
+ runId?: string;
32
+ caseId?: string;
33
+ source?: string;
34
+ };
35
+ export declare function captureLocalWorkflowTrace(input: CaptureLocalWorkflowTraceInput): void;
36
+ //# sourceMappingURL=story.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../src/story.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAkDF,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,QAkB9F;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDpF;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,GAAG,IAAI,CAmFrF"}
package/dist/story.js ADDED
@@ -0,0 +1,181 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveRunDir, writeRunIndex } from "./core.js";
4
+ function loadWorkflowIndex(filePath) {
5
+ try {
6
+ const raw = fs.readFileSync(filePath, "utf-8");
7
+ const parsed = JSON.parse(raw);
8
+ if (!parsed || !Array.isArray(parsed.runs))
9
+ throw new Error("invalid");
10
+ return parsed;
11
+ }
12
+ catch {
13
+ return { schemaVersion: "1.0", runs: [] };
14
+ }
15
+ }
16
+ function writeWorkflowIndex(filePath, index) {
17
+ writeRunIndex(filePath, index);
18
+ }
19
+ function ensureDir(dir) {
20
+ fs.mkdirSync(dir, { recursive: true });
21
+ }
22
+ function readJsonFile(filePath) {
23
+ try {
24
+ const raw = fs.readFileSync(filePath, "utf-8");
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ function listJsonFiles(dir, prefix) {
32
+ if (!fs.existsSync(dir))
33
+ return [];
34
+ return fs
35
+ .readdirSync(dir)
36
+ .filter((file) => file.endsWith(".json"))
37
+ .filter((file) => (prefix ? file.startsWith(prefix) : true))
38
+ .sort();
39
+ }
40
+ function writeJsonl(filePath, items) {
41
+ const lines = items.map((item) => JSON.stringify(item));
42
+ const body = lines.length ? `${lines.join("\n")}\n` : "";
43
+ fs.writeFileSync(filePath, body);
44
+ }
45
+ export function resolveWorkflowDataDir(input) {
46
+ const dir = input || process.env.WORKFLOW_LOCAL_DATA_DIR || ".next/workflow-data";
47
+ return path.resolve(process.cwd(), dir);
48
+ }
49
+ export function recordWorkflowRun(entry, outputDir, runId) {
50
+ const resolved = resolveRunDir(outputDir, runId);
51
+ const runDir = resolved.runDir;
52
+ const workflowsDir = path.join(runDir, "workflows");
53
+ ensureDir(workflowsDir);
54
+ const indexPath = path.join(workflowsDir, "index.json");
55
+ const index = loadWorkflowIndex(indexPath);
56
+ const exists = index.runs.some((r) => r.workflowRunId === entry.workflowRunId);
57
+ if (!exists) {
58
+ index.runs.push({
59
+ ...entry,
60
+ createdAt: entry.createdAt || new Date().toISOString(),
61
+ });
62
+ }
63
+ writeWorkflowIndex(indexPath, index);
64
+ }
65
+ export async function captureStoryTrace(input) {
66
+ if (!input.apiBaseUrl)
67
+ throw new Error("apiBaseUrl_required");
68
+ if (!input.apiKey)
69
+ throw new Error("apiKey_required");
70
+ if (!input.projectId)
71
+ throw new Error("projectId_required");
72
+ const resolved = resolveRunDir(input.outputDir, input.runId);
73
+ const runDir = resolved.runDir;
74
+ const workflowsDir = path.join(runDir, "workflows");
75
+ const eventsDir = path.join(workflowsDir, "events");
76
+ ensureDir(eventsDir);
77
+ const url = new URL("/api/story/traces/machine/events", input.apiBaseUrl);
78
+ url.searchParams.set("workflowRunId", input.workflowRunId);
79
+ url.searchParams.set("projectId", input.projectId);
80
+ url.searchParams.set("limit", "20000");
81
+ const res = await fetch(url.toString(), {
82
+ headers: { authorization: `Bearer ${input.apiKey}` },
83
+ });
84
+ if (!res.ok) {
85
+ const text = await res.text();
86
+ throw new Error(`trace_fetch_failed: ${res.status} ${text}`);
87
+ }
88
+ const json = (await res.json());
89
+ if (!json || json.ok !== true) {
90
+ throw new Error(`trace_fetch_failed: ${JSON.stringify(json)}`);
91
+ }
92
+ const events = Array.isArray(json.events) ? json.events : [];
93
+ const eventsPath = path.join(eventsDir, `${input.workflowRunId}.jsonl`);
94
+ const stream = fs.createWriteStream(eventsPath, { flags: "w" });
95
+ for (const ev of events) {
96
+ stream.write(`${JSON.stringify(ev)}\n`);
97
+ }
98
+ stream.end();
99
+ recordWorkflowRun({
100
+ workflowRunId: input.workflowRunId,
101
+ source: input.source || "story",
102
+ caseId: input.caseId,
103
+ projectId: input.projectId,
104
+ eventsPath: path.relative(runDir, eventsPath),
105
+ summary: json.summary || undefined,
106
+ }, input.outputDir, input.runId);
107
+ }
108
+ export function captureLocalWorkflowTrace(input) {
109
+ const resolved = resolveRunDir(input.outputDir, input.runId);
110
+ const runDir = resolved.runDir;
111
+ const workflowsRoot = path.join(runDir, "workflows");
112
+ const workflowDir = path.join(workflowsRoot, input.workflowRunId);
113
+ ensureDir(workflowDir);
114
+ const dataDir = resolveWorkflowDataDir(input.dataDir);
115
+ if (!fs.existsSync(dataDir)) {
116
+ throw new Error(`workflow_data_dir_not_found:${dataDir}`);
117
+ }
118
+ let runRecord;
119
+ const runPath = path.join(dataDir, "runs", `${input.workflowRunId}.json`);
120
+ if (fs.existsSync(runPath)) {
121
+ runRecord = readJsonFile(runPath);
122
+ if (runRecord) {
123
+ fs.writeFileSync(path.join(workflowDir, "run.json"), JSON.stringify(runRecord, null, 2));
124
+ }
125
+ }
126
+ const eventsDir = path.join(dataDir, "events");
127
+ const eventFiles = listJsonFiles(eventsDir, `${input.workflowRunId}-`);
128
+ const events = eventFiles
129
+ .map((file) => readJsonFile(path.join(eventsDir, file)))
130
+ .filter((entry) => Boolean(entry));
131
+ const eventsPath = path.join(workflowDir, "events.jsonl");
132
+ writeJsonl(eventsPath, events);
133
+ const stepsDir = path.join(dataDir, "steps");
134
+ const stepFiles = listJsonFiles(stepsDir, `${input.workflowRunId}-`);
135
+ const steps = stepFiles
136
+ .map((file) => readJsonFile(path.join(stepsDir, file)))
137
+ .filter((entry) => Boolean(entry));
138
+ const stepsPath = path.join(workflowDir, "steps.jsonl");
139
+ writeJsonl(stepsPath, steps);
140
+ const hooksDir = path.join(dataDir, "hooks");
141
+ const hookFiles = listJsonFiles(hooksDir);
142
+ const hooks = hookFiles
143
+ .map((file) => readJsonFile(path.join(hooksDir, file)))
144
+ .filter((entry) => Boolean(entry))
145
+ .filter((entry) => entry.runId === input.workflowRunId);
146
+ const hooksPath = path.join(workflowDir, "hooks.jsonl");
147
+ writeJsonl(hooksPath, hooks);
148
+ const streamsRoot = path.join(dataDir, "streams");
149
+ const streamsRunPath = path.join(streamsRoot, "runs", `${input.workflowRunId}.json`);
150
+ let streamsPath;
151
+ if (fs.existsSync(streamsRunPath)) {
152
+ const streamsDir = path.join(workflowDir, "streams");
153
+ ensureDir(streamsDir);
154
+ const streamIndex = readJsonFile(streamsRunPath);
155
+ const indexPath = path.join(streamsDir, "streams.json");
156
+ if (streamIndex) {
157
+ fs.writeFileSync(indexPath, JSON.stringify(streamIndex, null, 2));
158
+ streamsPath = indexPath;
159
+ }
160
+ }
161
+ recordWorkflowRun({
162
+ workflowRunId: input.workflowRunId,
163
+ source: input.source || "local",
164
+ caseId: input.caseId,
165
+ createdAt: runRecord?.createdAt || undefined,
166
+ runPath: runRecord ? path.relative(runDir, path.join(workflowDir, "run.json")) : undefined,
167
+ eventsPath: path.relative(runDir, eventsPath),
168
+ stepsPath: path.relative(runDir, stepsPath),
169
+ hooksPath: path.relative(runDir, hooksPath),
170
+ streamsPath: streamsPath ? path.relative(runDir, streamsPath) : undefined,
171
+ summary: runRecord
172
+ ? {
173
+ workflowName: runRecord.workflowName,
174
+ status: runRecord.status,
175
+ startedAt: runRecord.startedAt,
176
+ completedAt: runRecord.completedAt,
177
+ }
178
+ : undefined,
179
+ }, input.outputDir, input.runId);
180
+ }
181
+ //# sourceMappingURL=story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story.js","sourceRoot":"","sources":["../src/story.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Reporter } from "vitest";
2
+ import { EkairosRunOptions } from "./core.js";
3
+ export declare function ekairosVitestReporter(options?: EkairosRunOptions): Reporter;
4
+ //# sourceMappingURL=vitest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAc9D,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,iBAAsB,GAAG,QAAQ,CAqC/E"}
package/dist/vitest.js ADDED
@@ -0,0 +1,53 @@
1
+ import { initRunContext } from "./core.js";
2
+ function statusFromVitest(state) {
3
+ if (state === "pass")
4
+ return "passed";
5
+ if (state === "skip" || state === "todo")
6
+ return "skipped";
7
+ return "failed";
8
+ }
9
+ function caseIdFrom(test) {
10
+ const file = test?.file?.filepath || "unknown";
11
+ const name = test?.name || "unnamed";
12
+ return `vitest::${file}::${name}`;
13
+ }
14
+ export function ekairosVitestReporter(options = {}) {
15
+ const ctx = initRunContext("vitest", options);
16
+ return {
17
+ onInit(vitest) {
18
+ const tests = vitest?.state?.getFiles?.() || [];
19
+ let total = 0;
20
+ for (const file of tests) {
21
+ total += file.tasks?.length || 0;
22
+ }
23
+ ctx.summary.total = total;
24
+ },
25
+ onTestEnd(test) {
26
+ const state = test?.result?.state || "fail";
27
+ const status = statusFromVitest(state);
28
+ if (status === "passed")
29
+ ctx.summary.passed += 1;
30
+ if (status === "failed")
31
+ ctx.summary.failed += 1;
32
+ if (status === "skipped")
33
+ ctx.summary.skipped += 1;
34
+ ctx.writeResult({
35
+ schemaVersion: "1.0",
36
+ runId: ctx.runId,
37
+ caseId: caseIdFrom(test),
38
+ title: test?.name,
39
+ file: test?.file?.filepath,
40
+ status,
41
+ durationMs: test?.result?.duration,
42
+ retry: test?.result?.retryCount || 0,
43
+ startAt: test?.result?.startTime ? new Date(test.result.startTime).toISOString() : undefined,
44
+ endAt: new Date().toISOString(),
45
+ });
46
+ },
47
+ onFinished() {
48
+ const status = ctx.summary.failed > 0 ? "failed" : "passed";
49
+ ctx.finalize(status);
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,cAAc,EAAE,MAAM,WAAW,CAAC;AAE9D,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,IAAS;IAC3B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC;IACrC,OAAO,WAAW,IAAI,KAAK,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAA6B,EAAE;IACnE,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9C,OAAO;QACL,MAAM,CAAC,MAAW;YAChB,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;YAChD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;YACnC,CAAC;YACD,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,SAAS,CAAC,IAAS;YACjB,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC;YAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,QAAQ;gBAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YACjD,IAAI,MAAM,KAAK,QAAQ;gBAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YACjD,IAAI,MAAM,KAAK,SAAS;gBAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YAEnD,GAAG,CAAC,WAAW,CAAC;gBACd,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;gBACxB,KAAK,EAAE,IAAI,EAAE,IAAI;gBACjB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBAC1B,MAAM;gBACN,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;gBAClC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,IAAI,CAAC;gBACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC5F,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;QACD,UAAU;YACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5D,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;KACU,CAAC;AAChB,CAAC"}
@@ -0,0 +1,43 @@
1
+ export type WorkflowHookRecord = {
2
+ runId: string;
3
+ hookId: string;
4
+ token: string;
5
+ ownerId?: string;
6
+ projectId?: string;
7
+ environment?: string;
8
+ metadata?: unknown;
9
+ createdAt?: string | Date;
10
+ specVersion?: number;
11
+ };
12
+ export type AwaitHookParams = {
13
+ token?: string;
14
+ hookId?: string;
15
+ runId?: string;
16
+ dataDir?: string;
17
+ pollIntervalMs?: number;
18
+ signal?: AbortSignal;
19
+ };
20
+ export declare function awaitHook(params: AwaitHookParams): Promise<WorkflowHookRecord>;
21
+ export type TriggerHookParams = {
22
+ token?: string;
23
+ hookId?: string;
24
+ runId?: string;
25
+ data?: unknown;
26
+ dataDir?: string;
27
+ wait?: boolean | AwaitHookParams;
28
+ };
29
+ export declare function triggerHook(params: TriggerHookParams): Promise<{
30
+ hook?: WorkflowHookRecord;
31
+ token: string;
32
+ }>;
33
+ export type AwaitWorkflowCompletionParams = {
34
+ runId: string;
35
+ };
36
+ export declare function awaitWorkflowCompletion<TResult = unknown>(params: AwaitWorkflowCompletionParams): Promise<TResult>;
37
+ export type AwaitWorkflowStatusParams = {
38
+ runId: string;
39
+ pollIntervalMs?: number;
40
+ signal?: AbortSignal;
41
+ };
42
+ export declare function awaitWorkflowStatus(params: AwaitWorkflowStatusParams): Promise<string>;
43
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAsDF,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmBpF;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;CAClC,CAAC;AAEF,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACpE,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAuBD;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,OAAO,GAAG,OAAO,EAC7D,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -0,0 +1,113 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { getRun, resumeHook } from "workflow/api";
4
+ import { resolveWorkflowDataDir } from "./story.js";
5
+ function readJsonFile(filePath) {
6
+ try {
7
+ const raw = fs.readFileSync(filePath, "utf-8");
8
+ return JSON.parse(raw);
9
+ }
10
+ catch {
11
+ return undefined;
12
+ }
13
+ }
14
+ function listJsonFiles(dir) {
15
+ if (!fs.existsSync(dir))
16
+ return [];
17
+ return fs
18
+ .readdirSync(dir)
19
+ .filter((file) => file.endsWith(".json"))
20
+ .sort();
21
+ }
22
+ function findHookInDir(params) {
23
+ if (!fs.existsSync(params.hooksDir))
24
+ return undefined;
25
+ if (params.hookId) {
26
+ const hookPath = path.join(params.hooksDir, `${params.hookId}.json`);
27
+ const hook = readJsonFile(hookPath);
28
+ if (!hook)
29
+ return undefined;
30
+ if (params.token && hook.token !== params.token)
31
+ return undefined;
32
+ if (params.runId && hook.runId !== params.runId)
33
+ return undefined;
34
+ return hook;
35
+ }
36
+ for (const file of listJsonFiles(params.hooksDir)) {
37
+ const hookPath = path.join(params.hooksDir, file);
38
+ const hook = readJsonFile(hookPath);
39
+ if (!hook)
40
+ continue;
41
+ if (params.token && hook.token !== params.token)
42
+ continue;
43
+ if (params.runId && hook.runId !== params.runId)
44
+ continue;
45
+ return hook;
46
+ }
47
+ return undefined;
48
+ }
49
+ function ensureSearchKey(params) {
50
+ if (!params.token && !params.hookId) {
51
+ throw new Error("awaitHook requires token or hookId");
52
+ }
53
+ }
54
+ export async function awaitHook(params) {
55
+ ensureSearchKey(params);
56
+ const dataDir = resolveWorkflowDataDir(params.dataDir);
57
+ const hooksDir = path.join(dataDir, "hooks");
58
+ const pollIntervalMs = Math.max(50, Number(params.pollIntervalMs ?? 200));
59
+ while (true) {
60
+ if (params.signal?.aborted) {
61
+ throw new Error("awaitHook aborted");
62
+ }
63
+ const hook = findHookInDir({
64
+ hooksDir,
65
+ token: params.token,
66
+ hookId: params.hookId,
67
+ runId: params.runId,
68
+ });
69
+ if (hook)
70
+ return hook;
71
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
72
+ }
73
+ }
74
+ export async function triggerHook(params) {
75
+ let hook;
76
+ const shouldWait = params.wait !== false;
77
+ if (shouldWait) {
78
+ const waitParams = params.wait && typeof params.wait === "object"
79
+ ? params.wait
80
+ : {
81
+ token: params.token,
82
+ hookId: params.hookId,
83
+ runId: params.runId,
84
+ dataDir: params.dataDir,
85
+ };
86
+ hook = await awaitHook(waitParams);
87
+ }
88
+ const token = params.token || hook?.token;
89
+ if (!token) {
90
+ throw new Error("triggerHook requires token or hookId");
91
+ }
92
+ await resumeHook(token, params.data ?? {});
93
+ return { hook, token };
94
+ }
95
+ export async function awaitWorkflowCompletion(params) {
96
+ const run = getRun(params.runId);
97
+ return await run.returnValue;
98
+ }
99
+ export async function awaitWorkflowStatus(params) {
100
+ const run = getRun(params.runId);
101
+ const pollIntervalMs = Math.max(50, Number(params.pollIntervalMs ?? 200));
102
+ while (true) {
103
+ if (params.signal?.aborted) {
104
+ throw new Error("awaitWorkflowStatus aborted");
105
+ }
106
+ const status = await run.status;
107
+ if (["completed", "failed", "cancelled"].includes(String(status))) {
108
+ return String(status);
109
+ }
110
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
111
+ }
112
+ }
113
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAuBpD,SAAS,YAAY,CAAI,QAAgB;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE;SACN,WAAW,CAAC,GAAG,CAAC;SAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACxC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,MAKtB;IACC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,OAAO,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,YAAY,CAAqB,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAClE,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,YAAY,CAAqB,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YAAE,SAAS;QAC1D,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YAAE,SAAS;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB;IAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuB;IACrD,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC;IAE1E,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,QAAQ;YACR,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QACH,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAyB;IAIzD,IAAI,IAAoC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IACzC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,UAAU,GACd,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC;gBACE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;QACR,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAqC;IAErC,MAAM,GAAG,GAAG,MAAM,CAAU,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,MAAM,GAAG,CAAC,WAAW,CAAC;AAC/B,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC;IAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@ekairos/testing",
3
+ "version": "1.21.90-beta.0",
4
+ "description": "Ekairos test reporting and trace capture",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "./playwright": {
18
+ "types": "./dist/playwright.d.ts",
19
+ "import": "./dist/playwright.js",
20
+ "default": "./dist/playwright.js"
21
+ },
22
+ "./vitest": {
23
+ "types": "./dist/vitest.d.ts",
24
+ "import": "./dist/vitest.js",
25
+ "default": "./dist/vitest.js"
26
+ },
27
+ "./story": {
28
+ "types": "./dist/story.d.ts",
29
+ "import": "./dist/story.js",
30
+ "default": "./dist/story.js"
31
+ },
32
+ "./workflow": {
33
+ "types": "./dist/workflow.d.ts",
34
+ "import": "./dist/workflow.js",
35
+ "default": "./dist/workflow.js"
36
+ },
37
+ "./schema": {
38
+ "types": "./dist/schema.d.ts",
39
+ "import": "./dist/schema.js",
40
+ "default": "./dist/schema.js"
41
+ },
42
+ "./runtime": {
43
+ "types": "./dist/runtime.d.ts",
44
+ "import": "./dist/runtime.js",
45
+ "default": "./dist/runtime.js"
46
+ },
47
+ "./provision": {
48
+ "types": "./dist/provision.d.ts",
49
+ "import": "./dist/provision.js",
50
+ "default": "./dist/provision.js"
51
+ }
52
+ },
53
+ "scripts": {
54
+ "build": "tsc -p tsconfig.json",
55
+ "dev": "tsc -p tsconfig.json --watch",
56
+ "clean": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true})\"",
57
+ "typecheck": "tsc --noEmit"
58
+ },
59
+ "peerDependencies": {
60
+ "@ekairos/domain": "*",
61
+ "@instantdb/core": "*",
62
+ "@playwright/test": "*",
63
+ "vitest": "*",
64
+ "workflow": "4.1.0-beta.55"
65
+ },
66
+ "dependencies": {
67
+ "@instantdb/core": "0.22.126",
68
+ "@instantdb/platform": "0.22.126"
69
+ },
70
+ "devDependencies": {
71
+ "@ekairos/domain": "workspace:*",
72
+ "@ekairos/tsconfig": "workspace:*",
73
+ "@types/node": "^24.5.0",
74
+ "typescript": "^5.9.2"
75
+ }
76
+ }