@e2edev/e2e 0.11.0 → 0.13.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 +7 -7
- package/dist/agent/act.d.ts +43 -9
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +126 -734
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/action-dispatcher.d.ts +98 -0
- package/dist/agent/action-dispatcher.d.ts.map +1 -0
- package/dist/agent/action-dispatcher.js +319 -0
- package/dist/agent/action-dispatcher.js.map +1 -0
- package/dist/agent/actions.d.ts +16 -1
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +5 -1
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/default-agent.d.ts +17 -8
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +65 -43
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/executor.d.ts +30 -2
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/interactive-step.d.ts +38 -0
- package/dist/agent/interactive-step.d.ts.map +1 -0
- package/dist/agent/interactive-step.js +131 -0
- package/dist/agent/interactive-step.js.map +1 -0
- package/dist/agent/invocation.d.ts +4 -9
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +1 -6
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +1 -1
- package/dist/agent/model/sdk.js +1 -1
- package/dist/agent/model/tool-choice.d.ts +21 -0
- package/dist/agent/model/tool-choice.d.ts.map +1 -0
- package/dist/agent/model/tool-choice.js +49 -0
- package/dist/agent/model/tool-choice.js.map +1 -0
- package/dist/agent/observation-feed.d.ts +123 -0
- package/dist/agent/observation-feed.d.ts.map +1 -0
- package/dist/agent/observation-feed.js +281 -0
- package/dist/agent/observation-feed.js.map +1 -0
- package/dist/agent/observation.d.ts +14 -1
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +58 -2
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/operation-queue.d.ts +21 -0
- package/dist/agent/operation-queue.d.ts.map +1 -0
- package/dist/agent/operation-queue.js +27 -0
- package/dist/agent/operation-queue.js.map +1 -0
- package/dist/agent/pixels.d.ts +21 -0
- package/dist/agent/pixels.d.ts.map +1 -0
- package/dist/agent/pixels.js +85 -0
- package/dist/agent/pixels.js.map +1 -0
- package/dist/agent/point-tap.d.ts +52 -0
- package/dist/agent/point-tap.d.ts.map +1 -0
- package/dist/agent/point-tap.js +88 -0
- package/dist/agent/point-tap.js.map +1 -0
- package/dist/agent/primitives.d.ts +7 -1
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +96 -25
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/replay.d.ts +8 -3
- package/dist/agent/replay.d.ts.map +1 -1
- package/dist/agent/replay.js +44 -15
- package/dist/agent/replay.js.map +1 -1
- package/dist/agent/screen-update.d.ts +50 -18
- package/dist/agent/screen-update.d.ts.map +1 -1
- package/dist/agent/screen-update.js +76 -94
- package/dist/agent/screen-update.js.map +1 -1
- package/dist/agent/step-accounting.d.ts +95 -0
- package/dist/agent/step-accounting.d.ts.map +1 -0
- package/dist/agent/step-accounting.js +201 -0
- package/dist/agent/step-accounting.js.map +1 -0
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +2 -2
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts +4 -4
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +109 -25
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/agent/transcript-compaction.d.ts +38 -0
- package/dist/agent/transcript-compaction.d.ts.map +1 -0
- package/dist/agent/transcript-compaction.js +165 -0
- package/dist/agent/transcript-compaction.js.map +1 -0
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +20 -0
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/trace.d.ts +28 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +44 -0
- package/dist/cache/trace.js.map +1 -1
- package/dist/cli/docs-url.d.ts +1 -1
- package/dist/cli/docs-url.d.ts.map +1 -1
- package/dist/cli/docs-url.js +1 -1
- package/dist/cli/docs-url.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +71 -26
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +26 -16
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +33 -24
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/gateways.js +3 -3
- package/dist/cli/init/mcp-config.d.ts +31 -0
- package/dist/cli/init/mcp-config.d.ts.map +1 -0
- package/dist/cli/init/mcp-config.js +72 -0
- package/dist/cli/init/mcp-config.js.map +1 -0
- package/dist/cli/init/scaffold.d.ts +1 -1
- package/dist/cli/init/scaffold.js +2 -2
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +65 -29
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +63 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/collect/collect.d.ts +8 -3
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +29 -5
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +20 -5
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +162 -56
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +9 -2
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +60 -12
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +1 -7
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +5 -8
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +24 -2
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +82 -15
- package/dist/config/app.js.map +1 -1
- package/dist/config/resolve.d.ts +23 -6
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +34 -14
- package/dist/config/resolve.js.map +1 -1
- package/dist/credentials.d.ts +6 -0
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +9 -0
- package/dist/credentials.js.map +1 -1
- package/dist/engine/contract.d.ts +9 -2
- package/dist/engine/contract.d.ts.map +1 -1
- package/dist/engine/contract.js.map +1 -1
- package/dist/engine/index.d.ts +18 -4
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +8 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/session.d.ts.map +1 -1
- package/dist/engine/session.js +3 -0
- package/dist/engine/session.js.map +1 -1
- package/dist/engine/surface.d.ts +6 -2
- package/dist/engine/surface.d.ts.map +1 -1
- package/dist/engine/surface.js.map +1 -1
- package/dist/expect/attempt.d.ts +15 -0
- package/dist/expect/attempt.d.ts.map +1 -0
- package/dist/expect/attempt.js +33 -0
- package/dist/expect/attempt.js.map +1 -0
- package/dist/expect/index.d.ts +7 -5
- package/dist/expect/index.d.ts.map +1 -1
- package/dist/expect/index.js +8 -1
- package/dist/expect/index.js.map +1 -1
- package/dist/expect/poll.d.ts +5 -0
- package/dist/expect/poll.d.ts.map +1 -0
- package/dist/expect/poll.js +118 -0
- package/dist/expect/poll.js.map +1 -0
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +6 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/explore/body.d.ts.map +1 -1
- package/dist/explore/body.js +2 -0
- package/dist/explore/body.js.map +1 -1
- package/dist/explore/executor.js +16 -11
- package/dist/explore/executor.js.map +1 -1
- package/dist/explore/index.d.ts +3 -2
- package/dist/explore/index.d.ts.map +1 -1
- package/dist/explore/index.js +11 -9
- package/dist/explore/index.js.map +1 -1
- package/dist/explore/plan.d.ts.map +1 -1
- package/dist/explore/plan.js +16 -5
- package/dist/explore/plan.js.map +1 -1
- package/dist/explore/progress.d.ts +43 -0
- package/dist/explore/progress.d.ts.map +1 -0
- package/dist/explore/progress.js +9 -0
- package/dist/explore/progress.js.map +1 -0
- package/dist/explore/state.d.ts +13 -12
- package/dist/explore/state.d.ts.map +1 -1
- package/dist/explore/state.js +28 -11
- package/dist/explore/state.js.map +1 -1
- package/dist/internal/ai-trace.d.ts +2 -0
- package/dist/internal/ai-trace.d.ts.map +1 -1
- package/dist/internal/ai-trace.js +3 -0
- package/dist/internal/ai-trace.js.map +1 -1
- package/dist/internal/brands.d.ts +2 -0
- package/dist/internal/brands.d.ts.map +1 -1
- package/dist/internal/brands.js +2 -0
- package/dist/internal/brands.js.map +1 -1
- package/dist/internal/geometry.d.ts +13 -0
- package/dist/internal/geometry.d.ts.map +1 -0
- package/dist/internal/geometry.js +16 -0
- package/dist/internal/geometry.js.map +1 -0
- package/dist/internal/ids.d.ts +2 -2
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +3 -3
- package/dist/internal/ids.js.map +1 -1
- package/dist/internal/package-manager.d.ts +4 -0
- package/dist/internal/package-manager.d.ts.map +1 -1
- package/dist/internal/package-manager.js +26 -0
- package/dist/internal/package-manager.js.map +1 -1
- package/dist/internal/urls.d.ts +6 -0
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +28 -0
- package/dist/internal/urls.js.map +1 -1
- package/dist/mcp/catalog.d.ts +51 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +141 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/config.d.ts +11 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +16 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +86 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +68 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +319 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +179 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/report/build.d.ts +8 -0
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +3 -1
- package/dist/report/build.js.map +1 -1
- package/dist/report/format.d.ts +19 -0
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +42 -0
- package/dist/report/format.js.map +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +4 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list-explore.d.ts +109 -0
- package/dist/report/list-explore.d.ts.map +1 -0
- package/dist/report/list-explore.js +388 -0
- package/dist/report/list-explore.js.map +1 -0
- package/dist/report/list.d.ts +31 -1
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +114 -16
- package/dist/report/list.js.map +1 -1
- package/dist/report/running-tree.d.ts +7 -7
- package/dist/report/running-tree.d.ts.map +1 -1
- package/dist/report/running-tree.js +12 -13
- package/dist/report/running-tree.js.map +1 -1
- package/dist/run/app-ports.d.ts +17 -0
- package/dist/run/app-ports.d.ts.map +1 -0
- package/dist/run/app-ports.js +74 -0
- package/dist/run/app-ports.js.map +1 -0
- package/dist/run/events.d.ts +21 -7
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +2 -2
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +42 -20
- package/dist/run/execute.js.map +1 -1
- package/dist/run/extended-fixtures.d.ts +33 -0
- package/dist/run/extended-fixtures.d.ts.map +1 -0
- package/dist/run/extended-fixtures.js +91 -0
- package/dist/run/extended-fixtures.js.map +1 -0
- package/dist/run/fixtures.d.ts +10 -4
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +40 -27
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts.map +1 -1
- package/dist/run/in-process.js +4 -3
- package/dist/run/in-process.js.map +1 -1
- package/dist/run/managed-process.d.ts +18 -0
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +101 -6
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/provision.d.ts +51 -0
- package/dist/run/provision.d.ts.map +1 -0
- package/dist/run/provision.js +94 -0
- package/dist/run/provision.js.map +1 -0
- package/dist/run/realm.d.ts +5 -4
- package/dist/run/realm.d.ts.map +1 -1
- package/dist/run/realm.js +8 -7
- package/dist/run/realm.js.map +1 -1
- package/dist/run/records.d.ts +4 -0
- package/dist/run/records.d.ts.map +1 -1
- package/dist/run/runner.d.ts +14 -5
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +28 -71
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +5 -2
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +13 -10
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +1 -1
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +7 -2
- package/dist/run/serial.js.map +1 -1
- package/dist/run/standalone.d.ts +63 -0
- package/dist/run/standalone.d.ts.map +1 -0
- package/dist/run/standalone.js +152 -0
- package/dist/run/standalone.js.map +1 -0
- package/dist/run/units.d.ts +6 -3
- package/dist/run/units.d.ts.map +1 -1
- package/dist/run/units.js +0 -0
- package/dist/run/units.js.map +1 -1
- package/dist/run/worker/entry.js +4 -3
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +12 -1
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/run/worker/session.d.ts +3 -4
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -4
- package/dist/run/worker/session.js.map +1 -1
- package/dist/types.d.ts +77 -17
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -7
- package/skills/e2e/SKILL.md +9 -7
- package/skills/e2e/references/agent.md +27 -12
- package/skills/e2e/references/debugging.md +5 -5
- package/skills/e2e/references/explore.md +15 -9
- package/skills/e2e/references/mcp.md +88 -0
- package/skills/e2e/references/running.md +23 -18
- package/skills/e2e/references/setup.md +32 -18
- package/skills/e2e/references/writing-tests.md +12 -5
- package/dist/agent/model/router.d.ts +0 -36
- package/dist/agent/model/router.d.ts.map +0 -1
- package/dist/agent/model/router.js +0 -45
- package/dist/agent/model/router.js.map +0 -1
- package/dist/explore/reporter.d.ts +0 -11
- package/dist/explore/reporter.d.ts.map +0 -1
- package/dist/explore/reporter.js +0 -54
- package/dist/explore/reporter.js.map +0 -1
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The list reporter's view of an `e2e explore` run, fed by its `explore`
|
|
3
|
+
* events: the exploration steps by title as they finish, each finding the
|
|
4
|
+
* moment it is reported, and at the end the record, a `Findings` section
|
|
5
|
+
* with the evidence, and the assessment. An exploration is one synthetic
|
|
6
|
+
* test whose failure is its verdict, so the view stands in for the file
|
|
7
|
+
* block, the test line, and the `Failed Tests` entry that test would get.
|
|
8
|
+
*/
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { collapseText } from '../internal/text.js';
|
|
11
|
+
import { bounded, ellipsize, F_CHECK, F_CROSS, F_POINTER, formatTime, padTitle, rule, terminalColumns, terminalRows, visibleWidth, } from './format.js';
|
|
12
|
+
import { eventLine } from './list-steps.js';
|
|
13
|
+
import { WIDTH_MARGIN } from './live-window.js';
|
|
14
|
+
import { waitingRow } from './running-tree.js';
|
|
15
|
+
/** A finding, in the live window and the CI log. */
|
|
16
|
+
const F_FINDING = '⚑';
|
|
17
|
+
const F_DOWN_RIGHT = '↳';
|
|
18
|
+
/** Indentation of the exploration's rows under its header. */
|
|
19
|
+
const ROW_INDENT = ' ';
|
|
20
|
+
/** Indentation of the detail under a running exploration in the live window. */
|
|
21
|
+
const LIVE_INDENT = ' ';
|
|
22
|
+
/** Most recent calls of the step in progress the live window shows. */
|
|
23
|
+
const MAX_EVENTS = 6;
|
|
24
|
+
/** Rows the live window spends around the exploration: blank lines and the margin above the prompt. */
|
|
25
|
+
const CHROME_ROWS = 6;
|
|
26
|
+
/** Rows reserved for the exploration from the first paint, so the summary below does not jump. */
|
|
27
|
+
const RESERVED_ROWS = 14;
|
|
28
|
+
/** The tool call a finding stands in for; its own event is not an action. */
|
|
29
|
+
const FINDING_TOOL_EVENT = 'tool:report_finding';
|
|
30
|
+
/** Width of the label gutter in a finding's block: four for the number, then `expected `. */
|
|
31
|
+
const DETAIL_LABEL_WIDTH = 8;
|
|
32
|
+
const DETAIL_INDENT = ' ';
|
|
33
|
+
const SEVERITY_WORDS = {
|
|
34
|
+
5: 'critical',
|
|
35
|
+
4: 'high',
|
|
36
|
+
3: 'medium',
|
|
37
|
+
2: 'low',
|
|
38
|
+
1: 'trivial',
|
|
39
|
+
};
|
|
40
|
+
const ENDED_TEXT = {
|
|
41
|
+
finished: 'the agent covered the goal',
|
|
42
|
+
'step-limit': 'the step limit was reached',
|
|
43
|
+
time: 'the time budget ran out',
|
|
44
|
+
stuck: 'steps kept failing',
|
|
45
|
+
aborted: 'the run was cut short',
|
|
46
|
+
};
|
|
47
|
+
const STATUS_WORDS = {
|
|
48
|
+
passed: '',
|
|
49
|
+
failed: 'failed',
|
|
50
|
+
blocked: 'blocked',
|
|
51
|
+
exhausted: 'ended at its limit',
|
|
52
|
+
};
|
|
53
|
+
export class ExploreView {
|
|
54
|
+
pc;
|
|
55
|
+
now;
|
|
56
|
+
goal;
|
|
57
|
+
budgets;
|
|
58
|
+
startedMs;
|
|
59
|
+
steps = [];
|
|
60
|
+
findings = [];
|
|
61
|
+
open;
|
|
62
|
+
/** What the planner is deciding while no step is open: nothing, the next step, or the closing assessment. */
|
|
63
|
+
planning;
|
|
64
|
+
ended;
|
|
65
|
+
summary;
|
|
66
|
+
/** The exploration test's artifacts, once its result arrived: where a finding's screenshot is. */
|
|
67
|
+
artifacts = [];
|
|
68
|
+
/** High-water mark of the live rows; the window pads up to it. */
|
|
69
|
+
reservedRows = RESERVED_ROWS;
|
|
70
|
+
constructor(pc, started, now = Date.now) {
|
|
71
|
+
this.pc = pc;
|
|
72
|
+
this.now = now;
|
|
73
|
+
this.goal = started.goal;
|
|
74
|
+
this.budgets = started.budgets;
|
|
75
|
+
this.startedMs = now();
|
|
76
|
+
}
|
|
77
|
+
/** Applies one moment of the exploration. */
|
|
78
|
+
progress(progress) {
|
|
79
|
+
switch (progress.phase) {
|
|
80
|
+
case 'started':
|
|
81
|
+
break;
|
|
82
|
+
case 'planning':
|
|
83
|
+
this.planning = progress.closing ? 'closing' : 'step';
|
|
84
|
+
break;
|
|
85
|
+
case 'step-started':
|
|
86
|
+
this.planning = undefined;
|
|
87
|
+
this.open = { step: progress.step, actions: 0, findings: [] };
|
|
88
|
+
break;
|
|
89
|
+
case 'step-finished': {
|
|
90
|
+
const open = this.open;
|
|
91
|
+
this.open = undefined;
|
|
92
|
+
this.steps.push({ step: progress.step, actions: open?.actions ?? 0, findings: open?.findings.length ?? 0 });
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case 'finding':
|
|
96
|
+
this.findings.push(progress.finding);
|
|
97
|
+
this.open?.findings.push(progress.finding);
|
|
98
|
+
break;
|
|
99
|
+
case 'finished':
|
|
100
|
+
this.planning = undefined;
|
|
101
|
+
this.ended = progress.ended;
|
|
102
|
+
this.summary = progress.summary;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** The step that finished last, with what the view counted while it ran. */
|
|
107
|
+
get lastStep() {
|
|
108
|
+
return this.steps.at(-1);
|
|
109
|
+
}
|
|
110
|
+
/** Counts one engine event of the step in progress as an action; the finding tool's own call is the finding. */
|
|
111
|
+
action(event) {
|
|
112
|
+
if (this.open === undefined || event.kind !== 'engine' || event.name === FINDING_TOOL_EVENT)
|
|
113
|
+
return;
|
|
114
|
+
this.open.actions += 1;
|
|
115
|
+
}
|
|
116
|
+
/** The exploration test's result arrived: keep its artifacts, so findings can name their screenshots. */
|
|
117
|
+
result(artifacts) {
|
|
118
|
+
this.artifacts = artifacts;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Whether the exploration test's error is the verdict the findings already
|
|
122
|
+
* express: issues were found, so the test failed. Anything else (a provider
|
|
123
|
+
* failure, a run that explored nothing) is a failure worth its own entry.
|
|
124
|
+
*/
|
|
125
|
+
isVerdict(error) {
|
|
126
|
+
return error.code === 'ASSERTION_FAILED' && this.issues.length > 0;
|
|
127
|
+
}
|
|
128
|
+
get issues() {
|
|
129
|
+
return this.findings.filter((finding) => finding.kind === 'issue');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* ` ❯ |web| Exploring <goal>`; the goal clipped to `maxWidth` when given.
|
|
133
|
+
* Once over, the glyph is the verdict: a cross when issues were found or
|
|
134
|
+
* the exploration never concluded, a check otherwise.
|
|
135
|
+
*/
|
|
136
|
+
header(badge, verb, maxWidth) {
|
|
137
|
+
const { pc } = this;
|
|
138
|
+
const glyph = verb === 'Exploring'
|
|
139
|
+
? pc.yellow(F_POINTER)
|
|
140
|
+
: this.ended === undefined || this.issues.length > 0
|
|
141
|
+
? pc.red(F_CROSS)
|
|
142
|
+
: pc.green(F_CHECK);
|
|
143
|
+
const head = ` ${pc.bold(glyph)} ${badge} ${pc.bold(verb)} `;
|
|
144
|
+
const goal = collapseText(this.goal);
|
|
145
|
+
return `${head}${maxWidth === undefined ? bounded(goal) : ellipsize(goal, Math.max(24, maxWidth - visibleWidth(head)))}`;
|
|
146
|
+
}
|
|
147
|
+
/** One finished step: glyph, number, title, then duration, actions, findings, and a non-passed status; its explanation under it. */
|
|
148
|
+
stepLines(finished, indent = ROW_INDENT) {
|
|
149
|
+
const { pc } = this;
|
|
150
|
+
const { step } = finished;
|
|
151
|
+
const glyph = step.status === 'passed' ? pc.green(F_CHECK) : step.status === 'failed' ? pc.red(F_CROSS) : pc.yellow(F_CROSS);
|
|
152
|
+
const tail = [
|
|
153
|
+
formatTime(step.durationMs),
|
|
154
|
+
...(finished.actions > 0 ? [`${finished.actions} action${finished.actions === 1 ? '' : 's'}`] : []),
|
|
155
|
+
...(finished.findings > 0 ? [`${finished.findings} finding${finished.findings === 1 ? '' : 's'}`] : []),
|
|
156
|
+
].join(' · ');
|
|
157
|
+
const status = STATUS_WORDS[step.status];
|
|
158
|
+
const lines = [
|
|
159
|
+
`${indent}${glyph} ${pc.dim(String(step.index))} ${bounded(step.title)} ${pc.dim(tail)}${status === '' ? '' : ` ${pc.yellow(status)}`}`,
|
|
160
|
+
];
|
|
161
|
+
// A step that did not pass explains itself; a passed step's summary is the planner's, not the reader's.
|
|
162
|
+
if (step.status !== 'passed' && step.summary !== undefined) {
|
|
163
|
+
const room = terminalColumns() - WIDTH_MARGIN - indent.length - 5;
|
|
164
|
+
lines.push(`${indent} ${pc.dim(ellipsize(collapseText(step.summary), Math.max(24, room)))}`);
|
|
165
|
+
}
|
|
166
|
+
return lines;
|
|
167
|
+
}
|
|
168
|
+
/** One finding on one line: `⚑ high issue Title (/path)`. */
|
|
169
|
+
findingLine(finding, indent = ROW_INDENT) {
|
|
170
|
+
const { pc } = this;
|
|
171
|
+
const location = finding.path === undefined ? '' : pc.dim(` (${bounded(finding.path)})`);
|
|
172
|
+
return `${indent}${this.severityColor(finding)(`${F_FINDING} ${this.grade(finding)}`)} ${bounded(collapseText(finding.title))}${location}`;
|
|
173
|
+
}
|
|
174
|
+
/** `high issue`, `low warning`. */
|
|
175
|
+
grade(finding) {
|
|
176
|
+
return `${SEVERITY_WORDS[finding.severity]} ${finding.kind}`;
|
|
177
|
+
}
|
|
178
|
+
severityColor(finding) {
|
|
179
|
+
const { pc } = this;
|
|
180
|
+
if (finding.kind === 'warning')
|
|
181
|
+
return (text) => pc.dim(pc.yellow(text));
|
|
182
|
+
if (finding.severity >= 4)
|
|
183
|
+
return (text) => pc.bold(pc.red(text));
|
|
184
|
+
if (finding.severity === 3)
|
|
185
|
+
return (text) => pc.bold(pc.yellow(text));
|
|
186
|
+
return pc.yellow;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The live window's running area: the header with its clock, the finished
|
|
190
|
+
* steps, and the step in progress with its latest calls and findings in
|
|
191
|
+
* time order, or the planner deciding. Sized to the screen as the running
|
|
192
|
+
* tree is: the step in progress has priority, older finished steps fold.
|
|
193
|
+
*/
|
|
194
|
+
liveRows(badge, events, summary, now) {
|
|
195
|
+
const { pc } = this;
|
|
196
|
+
const columns = terminalColumns() - WIDTH_MARGIN;
|
|
197
|
+
const clock = pc.bold(pc.yellow(formatTime(Math.max(0, now - this.startedMs))));
|
|
198
|
+
const lines = [`${this.header(badge, 'Exploring', columns - visibleWidth(clock) - 1)} ${clock}`];
|
|
199
|
+
const capacity = terminalRows() - summary.length - CHROME_ROWS;
|
|
200
|
+
let budget = capacity - 1;
|
|
201
|
+
const current = this.currentRows(events, now, budget);
|
|
202
|
+
budget -= current.length;
|
|
203
|
+
const finished = this.steps.flatMap((step) => this.stepLines(step, LIVE_INDENT));
|
|
204
|
+
if (budget > 0) {
|
|
205
|
+
const folded = finished.length - budget + 1;
|
|
206
|
+
lines.push(...(folded > 1 ? [`${LIVE_INDENT}${pc.dim(`… ${folded} earlier rows`)}`, ...finished.slice(folded)] : finished));
|
|
207
|
+
}
|
|
208
|
+
lines.push(...current);
|
|
209
|
+
this.reservedRows = Math.min(capacity, Math.max(this.reservedRows, lines.length));
|
|
210
|
+
while (lines.length < this.reservedRows)
|
|
211
|
+
lines.push('');
|
|
212
|
+
return ['', ...lines, '', ...summary, ''];
|
|
213
|
+
}
|
|
214
|
+
/** The step in progress, or the planner at work, at most `budget` rows. */
|
|
215
|
+
currentRows(events, now, budget) {
|
|
216
|
+
const { pc } = this;
|
|
217
|
+
if (this.ended !== undefined || budget < 1)
|
|
218
|
+
return [];
|
|
219
|
+
if (this.open === undefined) {
|
|
220
|
+
if (this.planning === undefined)
|
|
221
|
+
return [];
|
|
222
|
+
const what = this.planning === 'closing' ? 'the closing assessment' : `step ${this.steps.length + 1} of ${this.budgets.maxSteps}`;
|
|
223
|
+
return [`${LIVE_INDENT}${pc.dim(`${F_DOWN_RIGHT} planning ${what}`)}`, `${LIVE_INDENT} ${waitingRow(pc, now, 'Thinking')}`].slice(0, budget);
|
|
224
|
+
}
|
|
225
|
+
const { step } = this.open;
|
|
226
|
+
const rows = [`${LIVE_INDENT}${pc.dim(`${F_DOWN_RIGHT} ${step.index} `)}${bounded(step.title)} ${pc.dim(`(step ${step.index} of ${this.budgets.maxSteps})`)}`];
|
|
227
|
+
const timeline = this.timeline(events ?? []);
|
|
228
|
+
const shown = Math.min(MAX_EVENTS, Math.max(0, budget - 2));
|
|
229
|
+
const overflow = timeline.length - shown;
|
|
230
|
+
if (overflow > 0)
|
|
231
|
+
rows.push(`${LIVE_INDENT} ${pc.dim(`… ${overflow} earlier call${overflow === 1 ? '' : 's'}`)}`);
|
|
232
|
+
for (const row of overflow > 0 ? timeline.slice(overflow) : timeline)
|
|
233
|
+
rows.push(`${LIVE_INDENT} ${row}`);
|
|
234
|
+
rows.push(`${LIVE_INDENT} ${waitingRow(pc, now, 'Thinking')}`);
|
|
235
|
+
return rows.slice(0, budget);
|
|
236
|
+
}
|
|
237
|
+
/** The step's calls and its findings, interleaved by time; the finding tool's own call gives way to the finding. */
|
|
238
|
+
timeline(events) {
|
|
239
|
+
const rows = [
|
|
240
|
+
...events
|
|
241
|
+
.filter((event) => event.name !== FINDING_TOOL_EVENT)
|
|
242
|
+
.map((event) => ({ at: event.startedAt, row: eventLine(this.pc, event) })),
|
|
243
|
+
...(this.open?.findings ?? []).map((finding) => ({ at: finding.reportedAt, row: this.findingLine(finding, '') })),
|
|
244
|
+
];
|
|
245
|
+
return rows.toSorted((a, b) => (a.at < b.at ? -1 : a.at > b.at ? 1 : 0)).map((entry) => entry.row);
|
|
246
|
+
}
|
|
247
|
+
/** The summary's `Findings` and `Steps` rows, in place of `Test Files` and `Tests`. */
|
|
248
|
+
summaryRows() {
|
|
249
|
+
const { pc } = this;
|
|
250
|
+
const issues = this.issues.length;
|
|
251
|
+
const warnings = this.findings.length - issues;
|
|
252
|
+
const findings = this.findings.length === 0
|
|
253
|
+
? pc.dim('none')
|
|
254
|
+
: [
|
|
255
|
+
...(issues > 0 ? [pc.bold(pc.red(`${issues} issue${issues === 1 ? '' : 's'}`))] : []),
|
|
256
|
+
...(warnings > 0 ? [pc.yellow(`${warnings} warning${warnings === 1 ? '' : 's'}`)] : []),
|
|
257
|
+
].join(pc.dim(' | '));
|
|
258
|
+
const done = this.steps.length;
|
|
259
|
+
const steps = [];
|
|
260
|
+
if (this.ended === undefined) {
|
|
261
|
+
steps.push(`${done} done of ${this.budgets.maxSteps}`);
|
|
262
|
+
if (this.open !== undefined)
|
|
263
|
+
steps.push(`step ${this.open.step.index} running`);
|
|
264
|
+
else if (this.planning === 'closing')
|
|
265
|
+
steps.push('closing');
|
|
266
|
+
else if (this.planning === 'step')
|
|
267
|
+
steps.push('planning');
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
steps.push(`${done} of ${this.budgets.maxSteps}`, ...this.outcomeParts(), pc.dim(ENDED_TEXT[this.ended]));
|
|
271
|
+
}
|
|
272
|
+
return [padTitle(pc, 'Findings') + findings, padTitle(pc, 'Steps') + steps.join(pc.dim(' · '))];
|
|
273
|
+
}
|
|
274
|
+
/** `3 passed`, `1 failed`, ... over the finished steps, zero counts left out. */
|
|
275
|
+
outcomeParts() {
|
|
276
|
+
const { pc } = this;
|
|
277
|
+
const counts = { passed: 0, failed: 0, blocked: 0, exhausted: 0 };
|
|
278
|
+
for (const { step } of this.steps)
|
|
279
|
+
counts[step.status] += 1;
|
|
280
|
+
return [
|
|
281
|
+
...(counts.passed > 0 ? [pc.green(`${counts.passed} passed`)] : []),
|
|
282
|
+
...(counts.failed > 0 ? [pc.red(`${counts.failed} failed`)] : []),
|
|
283
|
+
...(counts.exhausted > 0 ? [pc.yellow(`${counts.exhausted} ended at their limit`)] : []),
|
|
284
|
+
...(counts.blocked > 0 ? [pc.yellow(`${counts.blocked} blocked`)] : []),
|
|
285
|
+
];
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The permanent record once the run is over. With a live window
|
|
289
|
+
* (`withSteps`) it was the steps' only home, so the header and every step
|
|
290
|
+
* print here; without one they streamed as they finished, and only why the
|
|
291
|
+
* exploration ended is left to say.
|
|
292
|
+
*/
|
|
293
|
+
record(badge, withSteps) {
|
|
294
|
+
const { pc } = this;
|
|
295
|
+
const lines = withSteps ? ['', this.header(badge, 'Explored'), ...this.steps.flatMap((step) => this.stepLines(step))] : [];
|
|
296
|
+
if (this.steps.length === 0)
|
|
297
|
+
lines.push(`${ROW_INDENT}${pc.dim('no step ran')}`);
|
|
298
|
+
lines.push(`${ROW_INDENT}${pc.dim(`ended: ${ENDED_TEXT[this.ended ?? 'aborted']}`)}`);
|
|
299
|
+
return lines;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* The `Findings` section: a banner, then one block per finding, issues
|
|
303
|
+
* before warnings and the most severe first, each with where it was seen,
|
|
304
|
+
* its screenshot, what was expected against what the screen showed, and
|
|
305
|
+
* the actions that reach it.
|
|
306
|
+
*/
|
|
307
|
+
findingsSection(displayPath, artifactsRoot) {
|
|
308
|
+
const { pc } = this;
|
|
309
|
+
if (this.findings.length === 0)
|
|
310
|
+
return [];
|
|
311
|
+
const issues = this.issues.length;
|
|
312
|
+
const lines = ['', this.banner(`Findings ${this.findings.length}`, issues > 0 ? pc.red : pc.yellow), ''];
|
|
313
|
+
const ordered = this.findings.toSorted((a, b) => Number(a.kind === 'warning') - Number(b.kind === 'warning') || b.severity - a.severity || a.index - b.index);
|
|
314
|
+
const columns = terminalColumns();
|
|
315
|
+
ordered.forEach((finding, position) => {
|
|
316
|
+
const number = `${String(position + 1).padStart(2)}. `;
|
|
317
|
+
const grade = this.grade(finding);
|
|
318
|
+
lines.push(`${number}${this.severityColor(finding)(grade.padEnd(16))} ${pc.bold(bounded(collapseText(finding.title)))}`);
|
|
319
|
+
const where = [
|
|
320
|
+
...(finding.path === undefined ? [] : [bounded(finding.path)]),
|
|
321
|
+
...(finding.step === undefined ? [] : [`step ${finding.step}`]),
|
|
322
|
+
];
|
|
323
|
+
if (where.length > 0)
|
|
324
|
+
lines.push(`${DETAIL_INDENT}${pc.dim(where.join(' · '))}`);
|
|
325
|
+
lines.push(...this.detail('expected', finding.expected, columns));
|
|
326
|
+
lines.push(...this.detail('actual', finding.actual, columns));
|
|
327
|
+
finding.reproduction.forEach((action, index) => {
|
|
328
|
+
lines.push(...this.detail(index === 0 ? 'steps' : '', `${index + 1}. ${action}`, columns));
|
|
329
|
+
});
|
|
330
|
+
const screenshot = this.screenshot(finding, displayPath, artifactsRoot);
|
|
331
|
+
if (screenshot !== undefined)
|
|
332
|
+
lines.push(`${DETAIL_INDENT}${pc.dim('evidence'.padEnd(DETAIL_LABEL_WIDTH))} ${pc.cyan(screenshot)}`);
|
|
333
|
+
lines.push('');
|
|
334
|
+
});
|
|
335
|
+
return lines;
|
|
336
|
+
}
|
|
337
|
+
/** The report-relative path of a finding's screenshot, shown as the reporter shows paths. */
|
|
338
|
+
screenshot(finding, displayPath, artifactsRoot) {
|
|
339
|
+
if (finding.artifactId === undefined)
|
|
340
|
+
return undefined;
|
|
341
|
+
const artifact = this.artifacts.find((entry) => entry.id === finding.artifactId);
|
|
342
|
+
if (artifact?.path === undefined)
|
|
343
|
+
return undefined;
|
|
344
|
+
return displayPath(artifactsRoot === undefined ? artifact.path : path.join(artifactsRoot, artifact.path));
|
|
345
|
+
}
|
|
346
|
+
/** ` expected text…`, wrapped to the width with continuation lines under the text. */
|
|
347
|
+
detail(label, text, columns) {
|
|
348
|
+
const { pc } = this;
|
|
349
|
+
const gutter = `${DETAIL_INDENT}${label.padEnd(DETAIL_LABEL_WIDTH)} `;
|
|
350
|
+
const blank = ' '.repeat(gutter.length);
|
|
351
|
+
return wrap(collapseText(bounded(text)), Math.max(24, columns - gutter.length)).map((line, index) => `${index === 0 ? `${DETAIL_INDENT}${pc.dim(label.padEnd(DETAIL_LABEL_WIDTH))} ` : blank}${line}`);
|
|
352
|
+
}
|
|
353
|
+
/** The agent's closing assessment, wrapped under its heading. */
|
|
354
|
+
assessment() {
|
|
355
|
+
const { pc } = this;
|
|
356
|
+
if (this.summary === undefined)
|
|
357
|
+
return [];
|
|
358
|
+
const width = Math.max(24, terminalColumns() - ROW_INDENT.length - WIDTH_MARGIN);
|
|
359
|
+
return [` ${pc.bold('Assessment')}`, ...wrap(bounded(this.summary), width).map((line) => `${ROW_INDENT}${line}`)];
|
|
360
|
+
}
|
|
361
|
+
banner(message, color) {
|
|
362
|
+
const { pc } = this;
|
|
363
|
+
const label = pc.bold(pc.inverse(` ${message} `));
|
|
364
|
+
const { before, after } = rule(label, 'center');
|
|
365
|
+
return `${color(before)}${color(label)}${color(after)}`;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/** Greedy word wrap; a word longer than the width stands on its own line. */
|
|
369
|
+
function wrap(text, width) {
|
|
370
|
+
const lines = [];
|
|
371
|
+
for (const paragraph of text.split('\n')) {
|
|
372
|
+
let line = '';
|
|
373
|
+
for (const word of paragraph.split(/\s+/).filter((part) => part !== '')) {
|
|
374
|
+
if (line === '')
|
|
375
|
+
line = word;
|
|
376
|
+
else if (visibleWidth(line) + 1 + visibleWidth(word) <= width)
|
|
377
|
+
line = `${line} ${word}`;
|
|
378
|
+
else {
|
|
379
|
+
lines.push(line);
|
|
380
|
+
line = word;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (line !== '')
|
|
384
|
+
lines.push(line);
|
|
385
|
+
}
|
|
386
|
+
return lines;
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=list-explore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-explore.js","sourceRoot":"","sources":["../../src/report/list-explore.ts"],"names":[],"mappings":"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"}
|
package/dist/report/list.d.ts
CHANGED
|
@@ -73,6 +73,8 @@ export declare class ListReporter implements Reporter {
|
|
|
73
73
|
private startupMs;
|
|
74
74
|
/** Run-wide model usage, summed from every reported result and serial group. */
|
|
75
75
|
private readonly runUsage;
|
|
76
|
+
/** The trace cache's part in every reported step, for the summary's `Cache` row. */
|
|
77
|
+
private readonly runCache;
|
|
76
78
|
/**
|
|
77
79
|
* The configured models as the summary names them, `provider/id` plus
|
|
78
80
|
* `vision provider/id` when pixels go to a separate model: `runUsage` sums
|
|
@@ -80,6 +82,12 @@ export declare class ListReporter implements Reporter {
|
|
|
80
82
|
* has scrolled away by the time a long run ends.
|
|
81
83
|
*/
|
|
82
84
|
private models;
|
|
85
|
+
/**
|
|
86
|
+
* The exploration an `e2e explore` run reports through `explore` events;
|
|
87
|
+
* while present, its view stands in for the one synthetic test's file
|
|
88
|
+
* block, live rows, failure entry, and test counters.
|
|
89
|
+
*/
|
|
90
|
+
private explore;
|
|
83
91
|
constructor(output?: ListReporterOutput, options?: ListReporterOptions);
|
|
84
92
|
onEvent(event: RunEvent): void;
|
|
85
93
|
/**
|
|
@@ -89,6 +97,12 @@ export declare class ListReporter implements Reporter {
|
|
|
89
97
|
readonly handle: (event: RunEventFact) => void;
|
|
90
98
|
/** Writes one permanent line without disturbing the live window. */
|
|
91
99
|
private print;
|
|
100
|
+
/**
|
|
101
|
+
* A test's title with the agent it ran as, `[buyer]`, when that is not
|
|
102
|
+
* `default`: a test pinned to several agents lists once per agent, and the
|
|
103
|
+
* tag is what tells the lines apart.
|
|
104
|
+
*/
|
|
105
|
+
private titledAs;
|
|
92
106
|
/** A target's colored badge, `|web|` when colors are off (vitest's convention). */
|
|
93
107
|
private badge;
|
|
94
108
|
/** A path relative to the project root when inside it, else as given. */
|
|
@@ -161,7 +175,8 @@ export declare class ListReporter implements Reporter {
|
|
|
161
175
|
private testLine;
|
|
162
176
|
/**
|
|
163
177
|
* vitest's padded summary, shared by the live window and the final report:
|
|
164
|
-
* files, tests, model usage,
|
|
178
|
+
* files, tests, model usage, the trace cache's part, run errors, start
|
|
179
|
+
* time, and elapsed time. The
|
|
165
180
|
* clock rows wait for `plan`; the final summary of a run that never got
|
|
166
181
|
* there (a config or collection failure, a failed download) counts from
|
|
167
182
|
* the launch instead, so the time it took to fail is still on record.
|
|
@@ -171,6 +186,21 @@ export declare class ListReporter implements Reporter {
|
|
|
171
186
|
private emptyState;
|
|
172
187
|
/** The live window: the running tree, then the summary. */
|
|
173
188
|
private renderWindow;
|
|
189
|
+
/** The badge of the explored target: an exploration runs on exactly one. */
|
|
190
|
+
private exploreBadge;
|
|
191
|
+
/**
|
|
192
|
+
* One moment of an exploration. The first creates the view and, without a
|
|
193
|
+
* live window, prints the header; from then on a finished step and a
|
|
194
|
+
* finding each print at once without one, and the window shows them with
|
|
195
|
+
* one.
|
|
196
|
+
*/
|
|
197
|
+
private exploreProgress;
|
|
198
|
+
/**
|
|
199
|
+
* An exploration's permanent record: the header and, with a live window,
|
|
200
|
+
* the steps it was the only home of; then the findings with their
|
|
201
|
+
* evidence, and the closing assessment.
|
|
202
|
+
*/
|
|
203
|
+
private printExplore;
|
|
174
204
|
/** vitest's `Failed Tests` section: a banner, then each failure with its code frame. */
|
|
175
205
|
private printFailures;
|
|
176
206
|
/** A full-width red rule with a centered `FAIL`-style label. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/report/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAyC,MAAM,kBAAkB,CAAC;AAEtG,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/report/list.ts"],"names":[],"mappings":"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"}
|