@post-print/agent-test 2.0.11 → 2.2.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.
- package/README.md +1 -1
- package/dist/sdk/cli.d.ts +10 -0
- package/dist/sdk/cli.d.ts.map +1 -1
- package/dist/sdk/cli.js +27 -2
- package/dist/sdk/cli.js.map +1 -1
- package/dist/sdk/execution-reporter.d.ts.map +1 -1
- package/dist/sdk/execution-reporter.js +4 -0
- package/dist/sdk/execution-reporter.js.map +1 -1
- package/dist/sdk/execution-store.d.ts +9 -0
- package/dist/sdk/execution-store.d.ts.map +1 -1
- package/dist/sdk/execution-store.js +27 -5
- package/dist/sdk/execution-store.js.map +1 -1
- package/dist/sdk/stored-value.d.ts.map +1 -1
- package/dist/sdk/stored-value.js +11 -0
- package/dist/sdk/stored-value.js.map +1 -1
- package/dist/sdk/workspace.d.ts.map +1 -1
- package/dist/sdk/workspace.js +14 -1
- package/dist/sdk/workspace.js.map +1 -1
- package/dist/viewer/client-entry.js +21 -20
- package/dist/viewer/main.js +16 -4
- package/dist/viewer/main.js.map +1 -1
- package/dist/viewer/presentation.d.ts +20 -2
- package/dist/viewer/presentation.d.ts.map +1 -1
- package/dist/viewer/presentation.js +64 -2
- package/dist/viewer/presentation.js.map +1 -1
- package/dist/viewer/run-inbox.d.ts +7 -0
- package/dist/viewer/run-inbox.d.ts.map +1 -0
- package/dist/viewer/run-inbox.js +335 -0
- package/dist/viewer/run-inbox.js.map +1 -0
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +52 -4
- package/dist/viewer/server.js.map +1 -1
- package/dist/viewer/styles.d.ts.map +1 -1
- package/dist/viewer/styles.js +5 -0
- package/dist/viewer/styles.js.map +1 -1
- package/dist/viewer/stylex.css +234 -2
- package/dist/viewer/tool-images.d.ts +13 -0
- package/dist/viewer/tool-images.d.ts.map +1 -0
- package/dist/viewer/tool-images.js +77 -0
- package/dist/viewer/tool-images.js.map +1 -0
- package/dist/viewer/v2-client.d.ts.map +1 -1
- package/dist/viewer/v2-client.js +331 -172
- package/dist/viewer/v2-client.js.map +1 -1
- package/dist/viewer/viewer-queries.d.ts +26 -0
- package/dist/viewer/viewer-queries.d.ts.map +1 -0
- package/dist/viewer/viewer-queries.js +31 -0
- package/dist/viewer/viewer-queries.js.map +1 -0
- package/package.json +2 -2
package/dist/viewer/main.js
CHANGED
|
@@ -29,11 +29,23 @@ function applyLiveEvent(message) {
|
|
|
29
29
|
function applyExecutionHistory(executions) {
|
|
30
30
|
const previous = queryClient.getQueryData(["execution-history"]);
|
|
31
31
|
queryClient.setQueryData(["execution-history"], executions);
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
32
|
+
const started = newlyRunningExecution(previous, executions);
|
|
33
|
+
if (started && !pageShowsExecution(started.id))
|
|
34
|
+
showStartedExecution(started);
|
|
35
|
+
}
|
|
36
|
+
/** A single-test run opens on its test page; a batch opens on the run inbox. */
|
|
37
|
+
function showStartedExecution(execution) {
|
|
38
|
+
const [testId, ...others] = execution.testIds ?? [];
|
|
39
|
+
if (testId && others.length === 0)
|
|
40
|
+
void viewerRouter.navigate({
|
|
41
|
+
to: "/tests/$testId",
|
|
42
|
+
params: { testId },
|
|
43
|
+
search: { execution: execution.id },
|
|
44
|
+
});
|
|
45
|
+
else
|
|
34
46
|
void viewerRouter.navigate({
|
|
35
47
|
to: "/executions/$executionId",
|
|
36
|
-
params: { executionId },
|
|
48
|
+
params: { executionId: execution.id },
|
|
37
49
|
});
|
|
38
50
|
}
|
|
39
51
|
function pageShowsExecution(executionId) {
|
|
@@ -43,7 +55,7 @@ function pageShowsExecution(executionId) {
|
|
|
43
55
|
}
|
|
44
56
|
function newlyRunningExecution(previous, executions) {
|
|
45
57
|
const known = new Set(previous?.map(({ id }) => id) ?? []);
|
|
46
|
-
return executions.find(({ id, status }) => status === "running" && !known.has(id))
|
|
58
|
+
return executions.find(({ id, status }) => status === "running" && !known.has(id));
|
|
47
59
|
}
|
|
48
60
|
function connectExecutionSync(bootstrap) {
|
|
49
61
|
const socket = bootstrap.capabilities.socket;
|
package/dist/viewer/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/viewer/main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AACpD,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;AAE7E,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;IACnE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAoB,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAE3F,SAAS,aAAa,CAAC,EAAE,SAAS,EAAkC;IACnE,SAAS,CAAC,GAAG,EAAE;QACd,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AACb,CAAC;AAUD,SAAS,cAAc,CAAC,OAAqB;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAc,CAAC;IACpD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;QAAE,WAAW,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjG,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB;QAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,QAAQ;QACjF,WAAW,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,qBAAqB,CAAC,UAA2B;IACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAClF,WAAW,CAAC,YAAY,CAAC,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/viewer/main.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,30 @@
|
|
|
1
1
|
export declare function stripAnsi(value: string): string;
|
|
2
2
|
export declare function conversationPlaceholder(status: string): string;
|
|
3
|
-
|
|
3
|
+
/** One date style for runs everywhere: "Thu, Sep 17, 4:23 PM". */
|
|
4
|
+
export declare function formatRunDate(value: string): string;
|
|
5
|
+
export type TestRunStatus = "queued" | "running" | "passed" | "failed" | "skipped" | "interrupted";
|
|
6
|
+
export type RunSummary = {
|
|
4
7
|
id: string;
|
|
5
8
|
status: string;
|
|
6
|
-
|
|
9
|
+
testIds?: string[];
|
|
10
|
+
testStatuses?: Record<string, TestRunStatus>;
|
|
11
|
+
};
|
|
12
|
+
/** Severity order for a run inbox: what needs attention comes first. */
|
|
13
|
+
export declare const TEST_RUN_STATUS_ORDER: TestRunStatus[];
|
|
14
|
+
/** One test's outcome inside a run. A batch status never replaces a recorded test status. */
|
|
15
|
+
export declare function testRunStatus(run: RunSummary, testId: string): TestRunStatus;
|
|
16
|
+
/** Prefer the run where this test is active, then the newest run that actually ran it. */
|
|
17
|
+
export declare function preferredTestExecutionId(runs: RunSummary[], testId: string): string | undefined;
|
|
18
|
+
export declare function runStatusCounts(run: RunSummary): Map<TestRunStatus, number>;
|
|
19
|
+
/** Test ids ordered by severity, keeping run order within one status. */
|
|
20
|
+
export declare function testIdsBySeverity(run: RunSummary): string[];
|
|
7
21
|
export type AssertionComparison = {
|
|
8
22
|
expected: string;
|
|
9
23
|
received: string;
|
|
10
24
|
};
|
|
11
25
|
export declare function assertionComparison(value: string): AssertionComparison | undefined;
|
|
26
|
+
/** Middle value, or the mean of the two middle values; undefined for no values. */
|
|
27
|
+
export declare function median(values: number[]): number | undefined;
|
|
28
|
+
/** `/bin/zsh -lc "bun test"` reads as `bun test`; the wrapper is host plumbing. */
|
|
29
|
+
export declare function unwrapShellCommand(command: string): string;
|
|
12
30
|
//# sourceMappingURL=presentation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/viewer/presentation.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe/C;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI9D;
|
|
1
|
+
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/viewer/presentation.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe/C;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI9D;AAUD,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AACnG,MAAM,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC7C,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,aAAa,EAOhD,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAM5E;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAS3E;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,CAG3D;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAgBlF;AAED,mFAAmF;AACnF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAM3D;AAID,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -22,8 +22,56 @@ export function conversationPlaceholder(status) {
|
|
|
22
22
|
? "Waiting for the first agent event…"
|
|
23
23
|
: "No conversation was captured.";
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const RUN_DATE = new Intl.DateTimeFormat(undefined, {
|
|
26
|
+
weekday: "short",
|
|
27
|
+
month: "short",
|
|
28
|
+
day: "numeric",
|
|
29
|
+
hour: "numeric",
|
|
30
|
+
minute: "2-digit",
|
|
31
|
+
});
|
|
32
|
+
/** One date style for runs everywhere: "Thu, Sep 17, 4:23 PM". */
|
|
33
|
+
export function formatRunDate(value) {
|
|
34
|
+
return RUN_DATE.format(new Date(value));
|
|
35
|
+
}
|
|
36
|
+
/** Severity order for a run inbox: what needs attention comes first. */
|
|
37
|
+
export const TEST_RUN_STATUS_ORDER = [
|
|
38
|
+
"failed",
|
|
39
|
+
"interrupted",
|
|
40
|
+
"running",
|
|
41
|
+
"queued",
|
|
42
|
+
"passed",
|
|
43
|
+
"skipped",
|
|
44
|
+
];
|
|
45
|
+
/** One test's outcome inside a run. A batch status never replaces a recorded test status. */
|
|
46
|
+
export function testRunStatus(run, testId) {
|
|
47
|
+
const recorded = run.testStatuses?.[testId];
|
|
48
|
+
if (recorded)
|
|
49
|
+
return recorded;
|
|
50
|
+
if (run.status === "running")
|
|
51
|
+
return "queued";
|
|
52
|
+
if (run.status === "passed" || run.status === "failed")
|
|
53
|
+
return run.status;
|
|
54
|
+
return "interrupted";
|
|
55
|
+
}
|
|
56
|
+
/** Prefer the run where this test is active, then the newest run that actually ran it. */
|
|
57
|
+
export function preferredTestExecutionId(runs, testId) {
|
|
58
|
+
const statuses = runs.map((run) => ({ id: run.id, status: testRunStatus(run, testId) }));
|
|
59
|
+
const active = statuses.find(({ status }) => status === "running" || status === "queued");
|
|
60
|
+
const ran = statuses.find(({ status }) => status !== "skipped");
|
|
61
|
+
return active?.id ?? ran?.id ?? statuses[0]?.id;
|
|
62
|
+
}
|
|
63
|
+
export function runStatusCounts(run) {
|
|
64
|
+
const counts = new Map();
|
|
65
|
+
for (const testId of run.testIds ?? []) {
|
|
66
|
+
const status = testRunStatus(run, testId);
|
|
67
|
+
counts.set(status, (counts.get(status) ?? 0) + 1);
|
|
68
|
+
}
|
|
69
|
+
return new Map(TEST_RUN_STATUS_ORDER.filter((s) => counts.has(s)).map((s) => [s, counts.get(s) ?? 0]));
|
|
70
|
+
}
|
|
71
|
+
/** Test ids ordered by severity, keeping run order within one status. */
|
|
72
|
+
export function testIdsBySeverity(run) {
|
|
73
|
+
const rank = (testId) => TEST_RUN_STATUS_ORDER.indexOf(testRunStatus(run, testId));
|
|
74
|
+
return [...(run.testIds ?? [])].sort((left, right) => rank(left) - rank(right));
|
|
27
75
|
}
|
|
28
76
|
export function assertionComparison(value) {
|
|
29
77
|
const lines = stripAnsi(value).split("\n");
|
|
@@ -45,4 +93,18 @@ export function assertionComparison(value) {
|
|
|
45
93
|
}
|
|
46
94
|
return { expected: expected.join("\n"), received: received.join("\n") };
|
|
47
95
|
}
|
|
96
|
+
/** Middle value, or the mean of the two middle values; undefined for no values. */
|
|
97
|
+
export function median(values) {
|
|
98
|
+
if (!values.length)
|
|
99
|
+
return undefined;
|
|
100
|
+
const sorted = [...values].sort((left, right) => left - right);
|
|
101
|
+
const middle = Math.floor(sorted.length / 2);
|
|
102
|
+
const upper = sorted[middle] ?? 0;
|
|
103
|
+
return sorted.length % 2 ? upper : ((sorted[middle - 1] ?? upper) + upper) / 2;
|
|
104
|
+
}
|
|
105
|
+
const SHELL_WRAPPER = /^(?:\S*\/)?(?:ba|z)?sh\s+-l?c\s+(["'])([\s\S]*)\1$/;
|
|
106
|
+
/** `/bin/zsh -lc "bun test"` reads as `bun test`; the wrapper is host plumbing. */
|
|
107
|
+
export function unwrapShellCommand(command) {
|
|
108
|
+
return SHELL_WRAPPER.exec(command.trim())?.[2] ?? command;
|
|
109
|
+
}
|
|
48
110
|
//# sourceMappingURL=presentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/viewer/presentation.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAC3D,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAE7D,MAAM,UAAU,SAAS,CAAC,KAAa;IACtC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS;QACV,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG;gBAAE,MAAM;YACrC,KAAK,EAAE,CAAC;QACT,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACrD,OAAO,MAAM,KAAK,SAAS;QAC1B,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,+BAA+B,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/viewer/presentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Home: the run that needs attention now, then earlier runs. */
|
|
2
|
+
export declare function RunInboxPage(): import("react").JSX.Element;
|
|
3
|
+
/** One saved or live run, addressed by id. Falls back to the record when history is trimmed. */
|
|
4
|
+
export declare function RunPage({ executionId }: {
|
|
5
|
+
executionId: string;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=run-inbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-inbox.d.ts","sourceRoot":"","sources":["../../src/viewer/run-inbox.tsx"],"names":[],"mappings":"AA+BA,iEAAiE;AACjE,wBAAgB,YAAY,gCAe3B;AAED,gGAAgG;AAChG,wBAAgB,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,+BAa/D"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as stylex from "@stylexjs/stylex";
|
|
3
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { Link } from "@tanstack/react-router";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { formatRunDate, runStatusCounts, stripAnsi, testIdsBySeverity, testRunStatus, } from "./presentation.js";
|
|
7
|
+
import { cancelExecution, fetchExecution, useCatalog, useExecutionHistory, } from "./viewer-queries.js";
|
|
8
|
+
const EARLIER_RUN_LIMIT = 20;
|
|
9
|
+
const STARTED_STATUSES = new Set(["running", "passed", "failed"]);
|
|
10
|
+
const ERROR_EXCERPT_LENGTH = 180;
|
|
11
|
+
/** Home: the run that needs attention now, then earlier runs. */
|
|
12
|
+
export function RunInboxPage() {
|
|
13
|
+
const history = useExecutionHistory();
|
|
14
|
+
if (history.isPending)
|
|
15
|
+
return _jsx("p", { ...stylex.props(styles.empty), children: "Loading runs\u2026" });
|
|
16
|
+
if (history.isError)
|
|
17
|
+
return _jsx("p", { role: "alert", children: "Run history is unavailable." });
|
|
18
|
+
const latest = history.data.find((run) => run.status === "running") ?? history.data[0];
|
|
19
|
+
if (!latest)
|
|
20
|
+
return _jsx(FirstRunInvitation, {});
|
|
21
|
+
return (_jsxs("div", { ...stylex.props(styles.page), children: [_jsx(RunOverview, { run: latest, eyebrow: latest.status === "running" ? "Running now" : "Latest run" }), _jsx(EarlierRuns, { runs: history.data.filter((run) => run.id !== latest.id) })] }));
|
|
22
|
+
}
|
|
23
|
+
/** One saved or live run, addressed by id. Falls back to the record when history is trimmed. */
|
|
24
|
+
export function RunPage({ executionId }) {
|
|
25
|
+
const history = useExecutionHistory();
|
|
26
|
+
const summary = history.data?.find((run) => run.id === executionId);
|
|
27
|
+
const record = useQuery({
|
|
28
|
+
queryKey: ["execution", executionId],
|
|
29
|
+
queryFn: () => fetchExecution(executionId),
|
|
30
|
+
enabled: !history.isPending && summary === undefined,
|
|
31
|
+
});
|
|
32
|
+
const run = summary ?? record.data;
|
|
33
|
+
if (run)
|
|
34
|
+
return _jsx(RunOverview, { run: run, eyebrow: "Run" });
|
|
35
|
+
if (history.isPending || record.isPending)
|
|
36
|
+
return _jsx("p", { ...stylex.props(styles.empty), children: "Loading run\u2026" });
|
|
37
|
+
return _jsx("p", { role: "alert", children: "This run is unavailable. It may have been removed from history." });
|
|
38
|
+
}
|
|
39
|
+
function RunOverview({ run, eyebrow }) {
|
|
40
|
+
const [filter, setFilter] = useState("all");
|
|
41
|
+
const counts = runStatusCounts(run);
|
|
42
|
+
const detail = useRunDetail(run, counts);
|
|
43
|
+
const testIds = testIdsBySeverity(run).filter((testId) => filter === "all" || testRunStatus(run, testId) === filter);
|
|
44
|
+
return (_jsxs("section", { "aria-labelledby": `run-${run.id}`, ...stylex.props(styles.page), children: [_jsx(RunHeader, { run: run, eyebrow: eyebrow, detail: detail }), _jsx(StatusFilters, { total: run.testIds?.length ?? 0, counts: counts, active: filter, onChange: setFilter }), _jsx(RunTestList, { run: run, testIds: testIds, detail: detail })] }));
|
|
45
|
+
}
|
|
46
|
+
/** Failure excerpts and the stop control need the full record; passing runs skip that fetch. */
|
|
47
|
+
function useRunDetail(run, counts) {
|
|
48
|
+
const needsDetail = run.status === "running" || counts.has("failed") || counts.has("interrupted");
|
|
49
|
+
const detail = useQuery({
|
|
50
|
+
queryKey: ["execution", run.id],
|
|
51
|
+
queryFn: () => fetchExecution(run.id),
|
|
52
|
+
enabled: needsDetail,
|
|
53
|
+
});
|
|
54
|
+
return detail.data;
|
|
55
|
+
}
|
|
56
|
+
function RunHeader({ run, eyebrow, detail, }) {
|
|
57
|
+
const count = run.testIds?.length ?? 0;
|
|
58
|
+
const duration = runDuration(run);
|
|
59
|
+
return (_jsxs("header", { ...stylex.props(styles.header), children: [_jsxs("div", { ...stylex.props(styles.headerCopy), children: [_jsx("span", { ...stylex.props(styles.eyebrow), children: eyebrow }), _jsx("h2", { id: `run-${run.id}`, ...stylex.props(styles.title), children: formatRunDate(run.startedAt) }), _jsx(RunNotice, { run: run }), _jsxs("p", { ...stylex.props(styles.meta), children: [count, " ", count === 1 ? "test" : "tests", duration ? ` · ${duration}` : "", " \u00B7", " ", _jsx("span", { ...stylex.props(styles.mono), children: run.id.slice(0, 8) })] })] }), _jsxs("div", { ...stylex.props(styles.headerActions), children: [run.status === "running" && detail?.cancellable ? _jsx(StopRunButton, { run: run }) : null, _jsx(StatusPill, { status: runOutcome(run) })] })] }));
|
|
60
|
+
}
|
|
61
|
+
/** Explains a run that has no test outcome yet, or never got one. */
|
|
62
|
+
function RunNotice({ run }) {
|
|
63
|
+
const statuses = (run.testIds ?? []).map((testId) => testRunStatus(run, testId));
|
|
64
|
+
if (statuses.some((status) => STARTED_STATUSES.has(status)))
|
|
65
|
+
return null;
|
|
66
|
+
const count = statuses.length;
|
|
67
|
+
if (run.status === "running")
|
|
68
|
+
return (_jsx("p", { role: "status", ...stylex.props(styles.meta), children: count ? `Starting ${count} ${count === 1 ? "test" : "tests"}…` : "Starting the test run…" }));
|
|
69
|
+
if (run.status === "interrupted")
|
|
70
|
+
return _jsx("p", { ...stylex.props(styles.meta), children: "Run stopped before the first test started." });
|
|
71
|
+
if (run.status === "failed")
|
|
72
|
+
return _jsx("p", { ...stylex.props(styles.meta), children: "Run failed before the first test started." });
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function StopRunButton({ run }) {
|
|
76
|
+
const client = useQueryClient();
|
|
77
|
+
const cancel = useMutation({
|
|
78
|
+
mutationFn: () => cancelExecution(run.id),
|
|
79
|
+
onSuccess: () => client.invalidateQueries({ queryKey: ["execution", run.id] }),
|
|
80
|
+
});
|
|
81
|
+
const stopping = cancel.isPending || cancel.isSuccess;
|
|
82
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", ...stylex.props(styles.buttonReset, styles.secondaryButton), onClick: () => cancel.mutate(), disabled: stopping, children: stopping
|
|
83
|
+
? "Stopping…"
|
|
84
|
+
: (run.testIds?.length ?? 0) > 1
|
|
85
|
+
? "Stop suite run"
|
|
86
|
+
: "Stop this run" }), cancel.isError ? _jsx("p", { role: "alert", children: "The run could not be stopped." }) : null] }));
|
|
87
|
+
}
|
|
88
|
+
function StatusFilters({ total, counts, active, onChange, }) {
|
|
89
|
+
const options = [["all", total], ...counts];
|
|
90
|
+
return (_jsxs("fieldset", { ...stylex.props(styles.filters), children: [_jsx("legend", { ...stylex.props(styles.visuallyHidden), children: "Show tests by result" }), options.map(([status, count]) => (_jsxs("button", { type: "button", "aria-pressed": active === status, ...stylex.props(styles.buttonReset, styles.filter, active === status && styles.filterActive), onClick: () => onChange(active === status ? "all" : status), children: [status !== "all" ? _jsx(StatusDot, { status: status, inline: true }) : null, _jsx("span", { children: status === "all" ? "All" : capitalize(status) }), _jsx("span", { ...stylex.props(styles.filterCount), children: count })] }, status)))] }));
|
|
91
|
+
}
|
|
92
|
+
function RunTestList({ run, testIds, detail, }) {
|
|
93
|
+
const catalog = useCatalog();
|
|
94
|
+
const tests = new Map(catalog.data?.tests.map((test) => [test.id, test]));
|
|
95
|
+
if (testIds.length === 0)
|
|
96
|
+
return _jsx("p", { ...stylex.props(styles.empty), children: "No tests match this result." });
|
|
97
|
+
return (_jsx("ol", { ...stylex.props(styles.testList), children: testIds.map((testId) => (_jsx("li", { children: _jsx(RunTestRow, { runId: run.id, status: testRunStatus(run, testId), test: tests.get(testId) ?? missingTest(testId), error: firstErrorLine(detail, testId) }) }, testId))) }));
|
|
98
|
+
}
|
|
99
|
+
function RunTestRow({ runId, status, test, error, }) {
|
|
100
|
+
const group = test.title.slice(0, -1).join(" › ");
|
|
101
|
+
return (_jsxs(Link, { to: "/tests/$testId", params: { testId: test.id }, search: { execution: runId }, ...stylex.props(styles.testRow, status === "failed" && styles.testRowFailed), children: [_jsx(StatusDot, { status: status }), _jsxs("span", { ...stylex.props(styles.testCopy), children: [_jsx("span", { ...stylex.props(styles.testTitle), children: test.title.at(-1) }), group ? _jsx("span", { ...stylex.props(styles.testGroup), children: group }) : null, error ? _jsx("span", { ...stylex.props(styles.testError), children: error }) : null] }), _jsx("span", { ...stylex.props(styles.rowStatus), children: status })] }));
|
|
102
|
+
}
|
|
103
|
+
function EarlierRuns({ runs }) {
|
|
104
|
+
if (runs.length === 0)
|
|
105
|
+
return null;
|
|
106
|
+
return (_jsxs("section", { "aria-labelledby": "earlier-runs", ...stylex.props(styles.earlier), children: [_jsx("h3", { id: "earlier-runs", ...stylex.props(styles.sectionTitle), children: "Earlier runs" }), _jsx("ol", { ...stylex.props(styles.testList), children: runs.slice(0, EARLIER_RUN_LIMIT).map((run) => (_jsx("li", { children: _jsx(EarlierRunRow, { run: run }) }, run.id))) })] }));
|
|
107
|
+
}
|
|
108
|
+
/** A single-test run opens that test; a batch opens its own inbox. */
|
|
109
|
+
function EarlierRunRow({ run }) {
|
|
110
|
+
const catalog = useCatalog();
|
|
111
|
+
const [onlyTestId, ...others] = run.testIds ?? [];
|
|
112
|
+
const onlyTest = others.length === 0 ? catalog.data?.tests.find((test) => test.id === onlyTestId) : undefined;
|
|
113
|
+
const when = formatRunDate(run.startedAt);
|
|
114
|
+
const body = (_jsxs(_Fragment, { children: [_jsx(StatusDot, { status: runOutcome(run) }), _jsxs("span", { ...stylex.props(styles.testCopy), children: [_jsx("span", { ...stylex.props(styles.testTitle), children: onlyTest?.title.at(-1) ?? when }), _jsx("span", { ...stylex.props(styles.testGroup), children: onlyTest ? when : `${run.testIds?.length ?? 0} tests · ${countSummary(run)}` })] }), _jsx("span", { ...stylex.props(styles.rowStatus), children: runOutcome(run) })] }));
|
|
115
|
+
return onlyTest ? (_jsx(Link, { to: "/tests/$testId", params: { testId: onlyTest.id }, search: { execution: run.id }, ...stylex.props(styles.testRow), children: body })) : (_jsx(Link, { to: "/executions/$executionId", params: { executionId: run.id }, ...stylex.props(styles.testRow), children: body }));
|
|
116
|
+
}
|
|
117
|
+
function FirstRunInvitation() {
|
|
118
|
+
return (_jsxs("section", { ...stylex.props(styles.header, styles.invitation), children: [_jsx("span", { ...stylex.props(styles.eyebrow), children: "Runs" }), _jsx("h2", { ...stylex.props(styles.title), children: "Run your first test" }), _jsxs("p", { ...stylex.props(styles.meta), children: ["Choose a test in the sidebar or select Run all tests. Runs started with", " ", _jsx("code", { ...stylex.props(styles.mono), children: "agent-test test" }), " also appear here while they stream."] })] }));
|
|
119
|
+
}
|
|
120
|
+
function StatusPill({ status }) {
|
|
121
|
+
return (_jsx("span", { ...stylex.props(styles.pill, status === "passed" && styles.pillPass, status === "failed" && styles.pillFail, (status === "running" || status === "queued") && styles.pillRunning), children: status }));
|
|
122
|
+
}
|
|
123
|
+
function StatusDot({ status, inline = false }) {
|
|
124
|
+
return (_jsx("span", { "aria-hidden": "true", ...stylex.props(styles.dot, inline && styles.dotInline, status === "passed" && styles.dotPass, status === "failed" && styles.dotFail, (status === "running" || status === "queued") && styles.dotRunning, status === "skipped" && styles.dotSkipped) }));
|
|
125
|
+
}
|
|
126
|
+
/** The most severe test outcome; a batch with nothing run is not "passed". */
|
|
127
|
+
function runOutcome(run) {
|
|
128
|
+
if (run.status === "running")
|
|
129
|
+
return "running";
|
|
130
|
+
const worst = runStatusCounts(run).keys().next().value ?? "passed";
|
|
131
|
+
if (run.status === "interrupted" && (worst === "passed" || worst === "skipped"))
|
|
132
|
+
return "interrupted";
|
|
133
|
+
return worst;
|
|
134
|
+
}
|
|
135
|
+
function capitalize(value) {
|
|
136
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
137
|
+
}
|
|
138
|
+
function countSummary(run) {
|
|
139
|
+
const parts = [...runStatusCounts(run)].map(([status, count]) => `${count} ${status}`);
|
|
140
|
+
return parts.join(" · ") || "No tests recorded";
|
|
141
|
+
}
|
|
142
|
+
function runDuration(run) {
|
|
143
|
+
if (!run.finishedAt)
|
|
144
|
+
return undefined;
|
|
145
|
+
const seconds = Math.round((Date.parse(run.finishedAt) - Date.parse(run.startedAt)) / 1000);
|
|
146
|
+
if (!Number.isFinite(seconds) || seconds < 0)
|
|
147
|
+
return undefined;
|
|
148
|
+
return seconds < 60 ? `${seconds}s` : `${Math.floor(seconds / 60)}m ${seconds % 60}s`;
|
|
149
|
+
}
|
|
150
|
+
function firstErrorLine(detail, testId) {
|
|
151
|
+
const message = detail?.attempts
|
|
152
|
+
.filter((attempt) => attempt.testId === testId)
|
|
153
|
+
.flatMap((attempt) => attempt.errors)
|
|
154
|
+
.find((error) => error.message)?.message;
|
|
155
|
+
const line = message
|
|
156
|
+
? stripAnsi(message)
|
|
157
|
+
.split("\n")
|
|
158
|
+
.find((text) => text.trim())
|
|
159
|
+
: undefined;
|
|
160
|
+
return line && line.length > ERROR_EXCERPT_LENGTH
|
|
161
|
+
? `${line.slice(0, ERROR_EXCERPT_LENGTH)}…`
|
|
162
|
+
: line?.trim();
|
|
163
|
+
}
|
|
164
|
+
function missingTest(testId) {
|
|
165
|
+
return { id: testId, title: ["Test no longer in the catalog"], file: "", project: "" };
|
|
166
|
+
}
|
|
167
|
+
const styles = stylex.create({
|
|
168
|
+
page: { display: "grid", gap: "1rem" },
|
|
169
|
+
buttonReset: { appearance: "none", font: "inherit", borderWidth: 0 },
|
|
170
|
+
header: {
|
|
171
|
+
display: "flex",
|
|
172
|
+
flexWrap: "wrap",
|
|
173
|
+
alignItems: "flex-start",
|
|
174
|
+
justifyContent: "space-between",
|
|
175
|
+
gap: "1rem",
|
|
176
|
+
padding: { default: "1.1rem 1.25rem", "@media (max-width: 620px)": "1rem" },
|
|
177
|
+
border: "1px solid var(--border)",
|
|
178
|
+
borderRadius: 12,
|
|
179
|
+
backgroundColor: "var(--panel)",
|
|
180
|
+
},
|
|
181
|
+
invitation: { display: "grid", justifyContent: "stretch" },
|
|
182
|
+
headerCopy: { display: "grid", gap: "0.3rem", minWidth: 0 },
|
|
183
|
+
headerActions: { display: "flex", alignItems: "center", gap: "0.6rem" },
|
|
184
|
+
eyebrow: {
|
|
185
|
+
color: "var(--accent)",
|
|
186
|
+
fontSize: "0.66rem",
|
|
187
|
+
fontWeight: 750,
|
|
188
|
+
letterSpacing: "0.11em",
|
|
189
|
+
textTransform: "uppercase",
|
|
190
|
+
},
|
|
191
|
+
title: {
|
|
192
|
+
margin: 0,
|
|
193
|
+
fontSize: { default: "clamp(1.08rem, 1.5vw, 1.3rem)", "@media (max-width: 620px)": "1.08rem" },
|
|
194
|
+
lineHeight: 1.18,
|
|
195
|
+
letterSpacing: "-0.025em",
|
|
196
|
+
fontWeight: 720,
|
|
197
|
+
},
|
|
198
|
+
sectionTitle: { margin: 0, fontSize: "0.92rem", letterSpacing: "-0.01em" },
|
|
199
|
+
meta: { color: "var(--muted)", fontSize: "0.82rem", lineHeight: 1.5 },
|
|
200
|
+
mono: { fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontSize: "0.92em" },
|
|
201
|
+
secondaryButton: {
|
|
202
|
+
minHeight: "2.25rem",
|
|
203
|
+
padding: "0.45rem 0.8rem",
|
|
204
|
+
borderWidth: 1,
|
|
205
|
+
borderStyle: "solid",
|
|
206
|
+
borderColor: "var(--border-strong)",
|
|
207
|
+
borderRadius: 9,
|
|
208
|
+
backgroundColor: { default: "var(--panel-2)", ":hover": "var(--panel-3)" },
|
|
209
|
+
color: "var(--text)",
|
|
210
|
+
fontSize: "0.8rem",
|
|
211
|
+
fontWeight: 650,
|
|
212
|
+
cursor: "pointer",
|
|
213
|
+
},
|
|
214
|
+
filters: {
|
|
215
|
+
display: "flex",
|
|
216
|
+
flexWrap: "wrap",
|
|
217
|
+
gap: "0.45rem",
|
|
218
|
+
margin: 0,
|
|
219
|
+
padding: 0,
|
|
220
|
+
borderWidth: 0,
|
|
221
|
+
minWidth: 0,
|
|
222
|
+
},
|
|
223
|
+
visuallyHidden: {
|
|
224
|
+
position: "absolute",
|
|
225
|
+
width: 1,
|
|
226
|
+
height: 1,
|
|
227
|
+
overflow: "hidden",
|
|
228
|
+
clipPath: "inset(50%)",
|
|
229
|
+
whiteSpace: "nowrap",
|
|
230
|
+
},
|
|
231
|
+
filter: {
|
|
232
|
+
display: "inline-flex",
|
|
233
|
+
alignItems: "center",
|
|
234
|
+
gap: "0.4rem",
|
|
235
|
+
minHeight: "2.25rem",
|
|
236
|
+
padding: "0.35rem 0.75rem",
|
|
237
|
+
borderWidth: 1,
|
|
238
|
+
borderStyle: "solid",
|
|
239
|
+
borderColor: { default: "var(--border)", ":hover": "var(--border-strong)" },
|
|
240
|
+
borderRadius: 999,
|
|
241
|
+
backgroundColor: "var(--panel)",
|
|
242
|
+
color: "var(--muted)",
|
|
243
|
+
fontSize: "0.78rem",
|
|
244
|
+
fontWeight: 650,
|
|
245
|
+
fontVariantNumeric: "tabular-nums",
|
|
246
|
+
cursor: "pointer",
|
|
247
|
+
},
|
|
248
|
+
filterCount: { color: "var(--subtle)" },
|
|
249
|
+
filterActive: {
|
|
250
|
+
borderColor: "var(--accent)",
|
|
251
|
+
backgroundColor: "var(--accent-soft)",
|
|
252
|
+
color: "var(--text)",
|
|
253
|
+
},
|
|
254
|
+
testList: { display: "grid", gap: "0.4rem", margin: 0, padding: 0, listStyle: "none" },
|
|
255
|
+
testRow: {
|
|
256
|
+
display: "grid",
|
|
257
|
+
gridTemplateColumns: "0.7rem minmax(0, 1fr) auto",
|
|
258
|
+
alignItems: "start",
|
|
259
|
+
gap: "0.75rem",
|
|
260
|
+
padding: "0.7rem 0.9rem",
|
|
261
|
+
borderWidth: 1,
|
|
262
|
+
borderStyle: "solid",
|
|
263
|
+
borderColor: { default: "var(--border)", ":hover": "var(--border-strong)" },
|
|
264
|
+
borderRadius: 10,
|
|
265
|
+
backgroundColor: { default: "var(--panel)", ":hover": "var(--panel-2)" },
|
|
266
|
+
color: "var(--text)",
|
|
267
|
+
textDecoration: "none",
|
|
268
|
+
},
|
|
269
|
+
testRowFailed: {
|
|
270
|
+
borderColor: { default: "oklch(0.73 0.18 25 / 0.45)", ":hover": "var(--fail)" },
|
|
271
|
+
},
|
|
272
|
+
testCopy: { display: "grid", gap: "0.2rem", minWidth: 0 },
|
|
273
|
+
testTitle: { fontSize: "0.86rem", fontWeight: 600, lineHeight: 1.35 },
|
|
274
|
+
testGroup: { color: "var(--subtle)", fontSize: "0.72rem" },
|
|
275
|
+
testError: {
|
|
276
|
+
color: "oklch(0.86 0.08 25)",
|
|
277
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
278
|
+
fontSize: "0.72rem",
|
|
279
|
+
lineHeight: 1.45,
|
|
280
|
+
overflowWrap: "anywhere",
|
|
281
|
+
},
|
|
282
|
+
rowStatus: {
|
|
283
|
+
color: "var(--muted)",
|
|
284
|
+
fontSize: "0.68rem",
|
|
285
|
+
fontWeight: 750,
|
|
286
|
+
letterSpacing: "0.06em",
|
|
287
|
+
textTransform: "uppercase",
|
|
288
|
+
},
|
|
289
|
+
earlier: { display: "grid", gap: "0.65rem", marginTop: "0.75rem" },
|
|
290
|
+
pill: {
|
|
291
|
+
fontSize: "0.68rem",
|
|
292
|
+
fontWeight: 750,
|
|
293
|
+
letterSpacing: "0.06em",
|
|
294
|
+
textTransform: "uppercase",
|
|
295
|
+
padding: "0.2rem 0.55rem",
|
|
296
|
+
borderRadius: 999,
|
|
297
|
+
border: "1px solid var(--border)",
|
|
298
|
+
color: "var(--muted)",
|
|
299
|
+
},
|
|
300
|
+
pillPass: {
|
|
301
|
+
color: "var(--pass)",
|
|
302
|
+
borderColor: "var(--pass)",
|
|
303
|
+
backgroundColor: "var(--pass-soft)",
|
|
304
|
+
},
|
|
305
|
+
pillFail: {
|
|
306
|
+
color: "var(--fail)",
|
|
307
|
+
borderColor: "var(--fail)",
|
|
308
|
+
backgroundColor: "var(--fail-soft)",
|
|
309
|
+
},
|
|
310
|
+
pillRunning: {
|
|
311
|
+
color: "var(--skip)",
|
|
312
|
+
borderColor: "var(--skip)",
|
|
313
|
+
backgroundColor: "var(--skip-soft)",
|
|
314
|
+
},
|
|
315
|
+
dot: {
|
|
316
|
+
alignSelf: "start",
|
|
317
|
+
marginTop: "0.38rem",
|
|
318
|
+
width: 8,
|
|
319
|
+
height: 8,
|
|
320
|
+
borderRadius: 999,
|
|
321
|
+
backgroundColor: "var(--muted)",
|
|
322
|
+
},
|
|
323
|
+
dotInline: { alignSelf: "center", marginTop: 0 },
|
|
324
|
+
dotPass: { backgroundColor: "var(--pass)" },
|
|
325
|
+
dotFail: { backgroundColor: "var(--fail)" },
|
|
326
|
+
dotRunning: { backgroundColor: "var(--skip)", boxShadow: "0 0 0 3px var(--skip-soft)" },
|
|
327
|
+
dotSkipped: {
|
|
328
|
+
backgroundColor: "transparent",
|
|
329
|
+
borderWidth: 1.5,
|
|
330
|
+
borderStyle: "solid",
|
|
331
|
+
borderColor: "var(--subtle)",
|
|
332
|
+
},
|
|
333
|
+
empty: { color: "var(--muted)", fontStyle: "italic", padding: "1rem 0" },
|
|
334
|
+
});
|
|
335
|
+
//# sourceMappingURL=run-inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-inbox.js","sourceRoot":"","sources":["../../src/viewer/run-inbox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"AAIA,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAErB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"AAIA,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAErB,MAAM,4BAA4B,CAAC;AAYpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWrD,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/E;AACD,MAAM,WAAW,kBAAkB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA4UD,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE5F"}
|