@asrunjs/asrun 0.0.0-stage → 0.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/.claude/commands/explore-case.md +15 -0
- package/.claude/commands/gen-spec.md +13 -0
- package/.claude/commands/heal-spec.md +23 -0
- package/.claude/commands/make-case.md +8 -0
- package/.claude/settings.json +5 -0
- package/.claude/skills/exploring-cases/SKILL.md +132 -0
- package/.claude/skills/exploring-cases/references/assertion-targets.md +103 -0
- package/.claude/skills/exploring-cases/references/handoff-card.js +128 -0
- package/.claude/skills/exploring-cases/references/open-questions.md +112 -0
- package/.claude/skills/exploring-cases/references/readiness.md +137 -0
- package/.claude/skills/exploring-cases/references/user-handoff.md +147 -0
- package/.claude/skills/generating-specs/SKILL.md +207 -0
- package/.claude/skills/generating-specs/references/conventions.md +148 -0
- package/.claude/skills/making-cases/SKILL.md +64 -0
- package/.claude/skills/making-cases/references/gaps.md +36 -0
- package/.claude/skills/making-cases/references/normalizing.md +38 -0
- package/.claude/skills/making-cases/references/splitting.md +28 -0
- package/.claude/skills/making-cases/references/writes-and-email.md +36 -0
- package/AGENTS.md +154 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +21 -0
- package/README.md +410 -3
- package/bin/asrun.mjs +49 -0
- package/dist/lib/account-lock.d.ts +6 -0
- package/dist/lib/account-lock.js +52 -0
- package/dist/lib/assertions.d.ts +14 -0
- package/dist/lib/assertions.js +39 -0
- package/dist/lib/baselines.d.ts +43 -0
- package/dist/lib/baselines.js +108 -0
- package/dist/lib/case-id.d.ts +11 -0
- package/dist/lib/case-id.js +17 -0
- package/dist/lib/case-ops.d.ts +26 -0
- package/dist/lib/case-ops.js +110 -0
- package/dist/lib/cases.d.ts +29 -0
- package/dist/lib/cases.js +124 -0
- package/dist/lib/cli.d.ts +10 -0
- package/dist/lib/cli.js +18 -0
- package/dist/lib/downloads.d.ts +42 -0
- package/dist/lib/downloads.js +84 -0
- package/dist/lib/email.d.ts +10 -0
- package/dist/lib/email.js +19 -0
- package/dist/lib/ffmpeg.d.ts +8 -0
- package/dist/lib/ffmpeg.js +50 -0
- package/dist/lib/fixtures.d.ts +40 -0
- package/dist/lib/fixtures.js +149 -0
- package/dist/lib/node-cli.d.ts +11 -0
- package/dist/lib/node-cli.js +26 -0
- package/dist/lib/paths.d.ts +25 -0
- package/dist/lib/paths.js +88 -0
- package/dist/lib/pdf.d.ts +71 -0
- package/dist/lib/pdf.js +140 -0
- package/dist/lib/profiles.d.ts +38 -0
- package/dist/lib/profiles.js +121 -0
- package/dist/lib/ready.d.ts +36 -0
- package/dist/lib/ready.js +53 -0
- package/dist/lib/records.d.ts +33 -0
- package/dist/lib/records.js +61 -0
- package/dist/lib/run-filters.d.ts +19 -0
- package/dist/lib/run-filters.js +30 -0
- package/dist/lib/run-summary.d.ts +90 -0
- package/dist/lib/run-summary.js +35 -0
- package/dist/lib/session.d.ts +18 -0
- package/dist/lib/session.js +45 -0
- package/dist/lib/summary-reporter.d.ts +16 -0
- package/dist/lib/summary-reporter.js +146 -0
- package/dist/lib/targets.d.ts +27 -0
- package/dist/lib/targets.js +51 -0
- package/dist/lib/ui-build.d.ts +10 -0
- package/dist/lib/ui-build.js +30 -0
- package/dist/lib/values.d.ts +29 -0
- package/dist/lib/values.js +85 -0
- package/dist/lib/write-gate.d.ts +41 -0
- package/dist/lib/write-gate.js +129 -0
- package/dist/playwright.config.d.ts +2 -0
- package/dist/playwright.config.js +92 -0
- package/dist/scripts/build.d.ts +1 -0
- package/dist/scripts/build.js +20 -0
- package/dist/scripts/check-cases.d.ts +1 -0
- package/dist/scripts/check-cases.js +81 -0
- package/dist/scripts/cleanup.d.ts +1 -0
- package/dist/scripts/cleanup.js +25 -0
- package/dist/scripts/cli.d.ts +1 -0
- package/dist/scripts/cli.js +28 -0
- package/dist/scripts/doctor.d.ts +1 -0
- package/dist/scripts/doctor.js +185 -0
- package/dist/scripts/explore.d.ts +1 -0
- package/dist/scripts/explore.js +54 -0
- package/dist/scripts/go.mjs +188 -0
- package/dist/scripts/heal-evidence.mjs +143 -0
- package/dist/scripts/init.d.ts +16 -0
- package/dist/scripts/init.js +284 -0
- package/dist/scripts/lint-specs.d.ts +1 -0
- package/dist/scripts/lint-specs.js +138 -0
- package/dist/scripts/login.d.ts +1 -0
- package/dist/scripts/login.js +47 -0
- package/dist/scripts/new-case.d.ts +1 -0
- package/dist/scripts/new-case.js +19 -0
- package/dist/scripts/render-pdf.d.ts +1 -0
- package/dist/scripts/render-pdf.js +44 -0
- package/dist/scripts/report.d.ts +1 -0
- package/dist/scripts/report.js +14 -0
- package/dist/scripts/review-baselines.d.ts +1 -0
- package/dist/scripts/review-baselines.js +30 -0
- package/dist/scripts/run.d.ts +1 -0
- package/dist/scripts/run.js +423 -0
- package/dist/scripts/status.d.ts +1 -0
- package/dist/scripts/status.js +31 -0
- package/dist/scripts/ui-build.d.ts +1 -0
- package/dist/scripts/ui-build.js +7 -0
- package/dist/scripts/ui-dev.d.ts +1 -0
- package/dist/scripts/ui-dev.js +3 -0
- package/dist/scripts/ui.d.ts +1 -0
- package/dist/scripts/ui.js +13 -0
- package/dist/ui/dev.d.ts +1 -0
- package/dist/ui/dev.js +36 -0
- package/dist/ui/server/actions.d.ts +91 -0
- package/dist/ui/server/actions.js +352 -0
- package/dist/ui/server/ai-stream.d.ts +41 -0
- package/dist/ui/server/ai-stream.js +202 -0
- package/dist/ui/server/app.d.ts +4 -0
- package/dist/ui/server/app.js +333 -0
- package/dist/ui/server/cases.d.ts +23 -0
- package/dist/ui/server/cases.js +170 -0
- package/dist/ui/server/files.d.ts +5 -0
- package/dist/ui/server/files.js +67 -0
- package/dist/ui/server/index.d.ts +1 -0
- package/dist/ui/server/index.js +33 -0
- package/dist/ui/server/jobs.d.ts +74 -0
- package/dist/ui/server/jobs.js +263 -0
- package/dist/ui/server/profiles.d.ts +16 -0
- package/dist/ui/server/profiles.js +195 -0
- package/dist/ui/server/watch-files.d.ts +4 -0
- package/dist/ui/server/watch-files.js +36 -0
- package/dist/ui/shared/ai-commands.d.ts +78 -0
- package/dist/ui/shared/ai-commands.js +154 -0
- package/dist/ui/shared/case-id.d.ts +1 -0
- package/dist/ui/shared/case-id.js +1 -0
- package/dist/ui/shared/jobs.d.ts +6 -0
- package/dist/ui/shared/jobs.js +7 -0
- package/dist/ui/shared/product.d.ts +3 -0
- package/dist/ui/shared/product.js +3 -0
- package/dist/ui/shared/run-filters.d.ts +1 -0
- package/dist/ui/shared/run-filters.js +1 -0
- package/dist/ui/shared/site-address.d.ts +6 -0
- package/dist/ui/shared/site-address.js +11 -0
- package/dist/ui/shared/types.d.ts +257 -0
- package/dist/ui/shared/types.js +1 -0
- package/docs/theme-guide.html +692 -0
- package/package.json +98 -3
- package/templates/.claude/commands/explore-case.md +21 -0
- package/templates/.claude/commands/gen-spec.md +20 -0
- package/templates/.claude/commands/heal-spec.md +30 -0
- package/templates/.claude/commands/make-case.md +12 -0
- package/templates/.claude/settings.json +5 -0
- package/templates/.mcp.json +8 -0
- package/templates/AGENTS.md +45 -0
- package/templates/CLAUDE.md +1 -0
- package/templates/cases/_template.md +63 -0
- package/templates/gitignore +13 -0
- package/templates/opencode.jsonc +11 -0
- package/templates/package.json +31 -0
- package/templates/playwright.config.ts +3 -0
- package/templates/pnpm-workspace.yaml +5 -0
- package/templates/profiles.yaml +29 -0
- package/templates/seed.spec.ts +9 -0
- package/templates/tsconfig.json +14 -0
- package/ui/dist/apple-touch-icon.png +0 -0
- package/ui/dist/assets/apl-gfMMiTNf.js +1 -0
- package/ui/dist/assets/asciiarmor-C_eisQCp.js +1 -0
- package/ui/dist/assets/asn1-DCl_8MCW.js +1 -0
- package/ui/dist/assets/asterisk-BEn0Cwpx.js +1 -0
- package/ui/dist/assets/brainfuck-D5EjA2JK.js +1 -0
- package/ui/dist/assets/clike-xvONpD0Z.js +1 -0
- package/ui/dist/assets/clojure-BflJGmDX.js +1 -0
- package/ui/dist/assets/cmake-84nbDH0I.js +1 -0
- package/ui/dist/assets/cobol-DHLQUbN7.js +1 -0
- package/ui/dist/assets/coffeescript-De_zI4J0.js +1 -0
- package/ui/dist/assets/commonlisp-DgAKBe0r.js +1 -0
- package/ui/dist/assets/crystal-Bl6YKCG_.js +1 -0
- package/ui/dist/assets/css-CnaYoQib.js +1 -0
- package/ui/dist/assets/cypher-p9eYesGn.js +1 -0
- package/ui/dist/assets/d-DWkQyNnU.js +1 -0
- package/ui/dist/assets/diff-ChtP43wD.js +1 -0
- package/ui/dist/assets/dist-BHaIOZdW.js +1 -0
- package/ui/dist/assets/dist-BSJMM_jp.js +1 -0
- package/ui/dist/assets/dist-BiE4suo9.js +1 -0
- package/ui/dist/assets/dist-BqAROxzI.js +1 -0
- package/ui/dist/assets/dist-Bw5-uxs9.js +1 -0
- package/ui/dist/assets/dist-BwYRbe5s.js +9 -0
- package/ui/dist/assets/dist-BzulKuec.js +1 -0
- package/ui/dist/assets/dist-CBV7_vDN.js +2 -0
- package/ui/dist/assets/dist-CgIQYY1o.js +1 -0
- package/ui/dist/assets/dist-DDJNvivM.js +1 -0
- package/ui/dist/assets/dist-DF3F_I8N.js +1 -0
- package/ui/dist/assets/dist-DHCY9KpV.js +1 -0
- package/ui/dist/assets/dist-DX8knLVr.js +1 -0
- package/ui/dist/assets/dist-D_I45xgJ.js +11 -0
- package/ui/dist/assets/dist-Dlorc3Sx.js +1 -0
- package/ui/dist/assets/dist-Dr9crbBz.js +13 -0
- package/ui/dist/assets/dist-gF2bFn-5.js +1 -0
- package/ui/dist/assets/dockerfile-DJkHQgkl.js +1 -0
- package/ui/dist/assets/dtd-DTF72YNO.js +1 -0
- package/ui/dist/assets/dylan-S7ucR4pR.js +1 -0
- package/ui/dist/assets/ebnf-D4c0_ac3.js +1 -0
- package/ui/dist/assets/ecl-BVIeWmwY.js +1 -0
- package/ui/dist/assets/eiffel-BEjRio4Q.js +1 -0
- package/ui/dist/assets/elm-Cshzl8qu.js +1 -0
- package/ui/dist/assets/erlang-BV0c4Hdn.js +1 -0
- package/ui/dist/assets/factor-LKH5gN8L.js +1 -0
- package/ui/dist/assets/fcl-ClOhbFR7.js +1 -0
- package/ui/dist/assets/forth-D6RzAl64.js +1 -0
- package/ui/dist/assets/fortran-Bt6PBEDR.js +1 -0
- package/ui/dist/assets/gas-BHEdbvp9.js +1 -0
- package/ui/dist/assets/gherkin-oBAE_ms0.js +1 -0
- package/ui/dist/assets/groovy-CUrWKPia.js +1 -0
- package/ui/dist/assets/haskell-BRsoo5mP.js +1 -0
- package/ui/dist/assets/haxe-DjVOVvNP.js +1 -0
- package/ui/dist/assets/http-CLVgA2GD.js +1 -0
- package/ui/dist/assets/idl-BUZw3wgd.js +1 -0
- package/ui/dist/assets/index-DmasQ6Rq.css +2 -0
- package/ui/dist/assets/index-I7uU93kk.js +294 -0
- package/ui/dist/assets/javascript-lS2r2ifg.js +1 -0
- package/ui/dist/assets/julia-CQfgDRfP.js +1 -0
- package/ui/dist/assets/livescript-BXxG0Yva.js +1 -0
- package/ui/dist/assets/lua-DPCEkfD_.js +1 -0
- package/ui/dist/assets/mathematica-u8YMmbU0.js +1 -0
- package/ui/dist/assets/mbox-BEMVcqjs.js +1 -0
- package/ui/dist/assets/mirc-C9zpzAZU.js +1 -0
- package/ui/dist/assets/mllike-B45xgp2S.js +1 -0
- package/ui/dist/assets/modelica-CqHI_q-D.js +1 -0
- package/ui/dist/assets/mscgen-qgSLujhx.js +1 -0
- package/ui/dist/assets/mumps-BSzj6Xyz.js +1 -0
- package/ui/dist/assets/nginx-C-ORUuei.js +1 -0
- package/ui/dist/assets/nsis-viPvXFiq.js +1 -0
- package/ui/dist/assets/ntriples-CzMBulkp.js +1 -0
- package/ui/dist/assets/octave-D2Q8cUp1.js +1 -0
- package/ui/dist/assets/oz-BwTct_5T.js +1 -0
- package/ui/dist/assets/pascal-Dp_KdFgX.js +1 -0
- package/ui/dist/assets/perl-BkSkiI9m.js +1 -0
- package/ui/dist/assets/pig-AF4Hwhju.js +1 -0
- package/ui/dist/assets/powershell-D8WpQPaX.js +1 -0
- package/ui/dist/assets/properties-C357ku5U.js +1 -0
- package/ui/dist/assets/protobuf-D1ij_kNL.js +1 -0
- package/ui/dist/assets/pug-BqCHZ5xT.js +1 -0
- package/ui/dist/assets/puppet-BZyAS7I4.js +1 -0
- package/ui/dist/assets/python-B_1Jd8HM.js +1 -0
- package/ui/dist/assets/q-B9NhS7L_.js +1 -0
- package/ui/dist/assets/r-CxDmU1I4.js +1 -0
- package/ui/dist/assets/rpm-gpDK5sbt.js +1 -0
- package/ui/dist/assets/ruby-ChfNwlCY.js +1 -0
- package/ui/dist/assets/sas-C2OyD2Y6.js +1 -0
- package/ui/dist/assets/scheme-D9qYN0V5.js +1 -0
- package/ui/dist/assets/shell-DwuoZtxw.js +1 -0
- package/ui/dist/assets/sieve-tLWDfEkZ.js +1 -0
- package/ui/dist/assets/simple-mode-DXiLM1-G.js +1 -0
- package/ui/dist/assets/smalltalk-BLp5-jwC.js +1 -0
- package/ui/dist/assets/solr-B78wSQJQ.js +1 -0
- package/ui/dist/assets/sparql-Dz-mlCAC.js +1 -0
- package/ui/dist/assets/spreadsheet-CTIncYxj.js +1 -0
- package/ui/dist/assets/sql-DuQMFDvy.js +1 -0
- package/ui/dist/assets/stex-DNzd62Q_.js +1 -0
- package/ui/dist/assets/stylus-BOVgKnng.js +1 -0
- package/ui/dist/assets/swift-DKB6_1j6.js +1 -0
- package/ui/dist/assets/tcl-BGfruO1u.js +1 -0
- package/ui/dist/assets/textile-C4jVoHG1.js +1 -0
- package/ui/dist/assets/tiddlywiki-VlUiK86J.js +1 -0
- package/ui/dist/assets/tiki-CvUEFusT.js +1 -0
- package/ui/dist/assets/toml-BPTmHmyx.js +1 -0
- package/ui/dist/assets/troff-C2dAgh7P.js +1 -0
- package/ui/dist/assets/ttcn-PPSTk1ow.js +1 -0
- package/ui/dist/assets/ttcn-cfg-2b4Gb5sE.js +1 -0
- package/ui/dist/assets/turtle-Cx3rYX2g.js +1 -0
- package/ui/dist/assets/vb-BthdM_4N.js +1 -0
- package/ui/dist/assets/vbscript-D9f6rSsU.js +1 -0
- package/ui/dist/assets/velocity-CqftRsjg.js +1 -0
- package/ui/dist/assets/verilog-CjI9Y6RI.js +1 -0
- package/ui/dist/assets/vhdl-kS471soi.js +1 -0
- package/ui/dist/assets/webidl-D5jiJvOU.js +1 -0
- package/ui/dist/assets/xquery-BKJx4mf9.js +1 -0
- package/ui/dist/assets/yacas-CXXgtw0p.js +1 -0
- package/ui/dist/assets/z80-Co3PbHdE.js +1 -0
- package/ui/dist/favicon.ico +0 -0
- package/ui/dist/favicon.svg +11 -0
- package/ui/dist/index.html +17 -0
- package/ui/dist/logos/claude.svg +1 -0
- package/ui/dist/logos/opencode.svg +1 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import type { ResultStatus } from '../../lib/run-summary.js';
|
|
2
|
+
import type { AiCommand, AiTool } from './ai-commands.js';
|
|
3
|
+
export type JobStatus = 'running' | 'succeeded' | 'failed' | 'cancelled';
|
|
4
|
+
export type JobKind = 'signin' | 'visit' | 'run' | 'ai';
|
|
5
|
+
/** What changed on disk: case files (`cases/**`) and/or specs (`tests/**`). */
|
|
6
|
+
export interface FilesChange {
|
|
7
|
+
cases: boolean;
|
|
8
|
+
specs: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface JobInfo {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: JobKind;
|
|
13
|
+
/** Set for `signin` and `visit` jobs. */
|
|
14
|
+
profile?: string;
|
|
15
|
+
/** Environment of the job (`signin`, `visit` and `run`). */
|
|
16
|
+
env?: string;
|
|
17
|
+
/** Human-readable command, e.g. `pnpm signin example-staging`. */
|
|
18
|
+
command: string;
|
|
19
|
+
status: JobStatus;
|
|
20
|
+
exitCode: number | null;
|
|
21
|
+
signal: string | null;
|
|
22
|
+
startedAt: string;
|
|
23
|
+
endedAt: string | null;
|
|
24
|
+
/** The process reads stdin (used by `signin`, which waits for Enter). */
|
|
25
|
+
acceptsInput: boolean;
|
|
26
|
+
/** Set for a test run that overwrote the screenshot baselines of these cases. */
|
|
27
|
+
baselineCases?: string[];
|
|
28
|
+
/** Set for a test run: the folder under reports/ it writes (it may only exist once the run has produced one). */
|
|
29
|
+
reportId?: string;
|
|
30
|
+
/** Set for the one-shot runs of an AI command on a case. */
|
|
31
|
+
caseId?: string;
|
|
32
|
+
/** Set for the one-shot runs of an AI command on a case: which command ran. */
|
|
33
|
+
aiCommand?: AiCommand;
|
|
34
|
+
/** The conversation of an AI run; a later job can resume it. */
|
|
35
|
+
sessionId?: string;
|
|
36
|
+
/** What the agent said in its last `RESULT:` line; null when it did not say or the run did not succeed. */
|
|
37
|
+
resultState?: ResultState | null;
|
|
38
|
+
/** The earlier job whose conversation this job continues. */
|
|
39
|
+
continuesJobId?: string;
|
|
40
|
+
/** An AI run that has handed a step to the person in the browser window and waits for them to press Done. */
|
|
41
|
+
awaitingUser?: AwaitingUserInfo | null;
|
|
42
|
+
}
|
|
43
|
+
export interface AwaitingUserInfo {
|
|
44
|
+
/** What the person is asked to do, as the agent wrote it on the card; null when unknown. */
|
|
45
|
+
message: string | null;
|
|
46
|
+
since: string;
|
|
47
|
+
}
|
|
48
|
+
/** `needs-input`: the agent wrote open questions into the case file and cannot go on without answers. */
|
|
49
|
+
export type ResultState = 'ready' | 'needs-input';
|
|
50
|
+
export interface JobChunk {
|
|
51
|
+
seq: number;
|
|
52
|
+
stream: 'stdout' | 'stderr' | 'system';
|
|
53
|
+
data: string;
|
|
54
|
+
}
|
|
55
|
+
export type StartJobRequest = {
|
|
56
|
+
action: 'signin';
|
|
57
|
+
profile: string;
|
|
58
|
+
env: string;
|
|
59
|
+
} | {
|
|
60
|
+
action: 'visit';
|
|
61
|
+
profile: string;
|
|
62
|
+
env: string;
|
|
63
|
+
} | {
|
|
64
|
+
action: 'ai';
|
|
65
|
+
tool: AiTool;
|
|
66
|
+
command: AiCommand;
|
|
67
|
+
caseId: string;
|
|
68
|
+
env: string;
|
|
69
|
+
force?: boolean;
|
|
70
|
+
attended?: boolean;
|
|
71
|
+
/** `heal-spec` only: the profiles to heal; omitted = every profile that is logged in. */
|
|
72
|
+
profiles?: string[];
|
|
73
|
+
/** `heal-spec` only: what the user knows (optional). The server stores it as a file for the agent. */
|
|
74
|
+
hints?: string;
|
|
75
|
+
/** `heal-spec` only: the report to read first (folder name under reports/); omitted = the newest one. */
|
|
76
|
+
report?: string;
|
|
77
|
+
} | {
|
|
78
|
+
action: 'continue';
|
|
79
|
+
jobId: string;
|
|
80
|
+
reply: string;
|
|
81
|
+
} | {
|
|
82
|
+
action: 'make-cases';
|
|
83
|
+
tool: AiTool;
|
|
84
|
+
memo: string;
|
|
85
|
+
} | {
|
|
86
|
+
action: 'run';
|
|
87
|
+
env: string;
|
|
88
|
+
profiles?: string[];
|
|
89
|
+
/** Only the profiles that carry one of these tags. */
|
|
90
|
+
tags?: string[];
|
|
91
|
+
suites?: string[];
|
|
92
|
+
grep?: string;
|
|
93
|
+
stepText?: boolean;
|
|
94
|
+
/** Leave out the cases that write data. */
|
|
95
|
+
readOnly?: boolean;
|
|
96
|
+
/** Cases (ids) whose screenshot baselines are overwritten with what the page shows now (`--update-baselines`). */
|
|
97
|
+
updateBaselines?: string[];
|
|
98
|
+
/** The environment the user confirmed write cases for. Must equal `env`; checked again on the server. */
|
|
99
|
+
confirmWritesIn?: string;
|
|
100
|
+
};
|
|
101
|
+
/** A case that writes data and would run, as listed in the confirmation. */
|
|
102
|
+
export interface WriteCaseInfo {
|
|
103
|
+
id: string;
|
|
104
|
+
note: string;
|
|
105
|
+
profiles: string[];
|
|
106
|
+
}
|
|
107
|
+
export interface RunPreviewRequest {
|
|
108
|
+
env: string;
|
|
109
|
+
profiles?: string[];
|
|
110
|
+
tags?: string[];
|
|
111
|
+
suites?: string[];
|
|
112
|
+
grep?: string;
|
|
113
|
+
readOnly?: boolean;
|
|
114
|
+
}
|
|
115
|
+
export interface RunPreview {
|
|
116
|
+
env: string;
|
|
117
|
+
/** True when the environment is protected and the run includes write cases: the user must confirm. */
|
|
118
|
+
needsConfirmation: boolean;
|
|
119
|
+
writeCases: WriteCaseInfo[];
|
|
120
|
+
/** Cases that write only in other environments; they are skipped in this run. */
|
|
121
|
+
skippedWriteCases: WriteCaseInfo[];
|
|
122
|
+
}
|
|
123
|
+
export interface PlannedCaseInfo {
|
|
124
|
+
id: string;
|
|
125
|
+
profiles: string[];
|
|
126
|
+
writes: boolean;
|
|
127
|
+
/** Why the case is skipped in this environment; null when it runs. */
|
|
128
|
+
skip: string | null;
|
|
129
|
+
/** How many baseline images the case has on disk (all profiles and environments). */
|
|
130
|
+
baselineCount: number;
|
|
131
|
+
}
|
|
132
|
+
/** One screenshot baseline, with what it must show (from the target card of the case). */
|
|
133
|
+
export interface BaselineItem {
|
|
134
|
+
caseId: string;
|
|
135
|
+
file: string;
|
|
136
|
+
profile: string | null;
|
|
137
|
+
env: string | null;
|
|
138
|
+
/** New or modified in git. */
|
|
139
|
+
changed: boolean;
|
|
140
|
+
mtimeMs: number;
|
|
141
|
+
targetId: string | null;
|
|
142
|
+
card: {
|
|
143
|
+
id: string;
|
|
144
|
+
name: string;
|
|
145
|
+
what: string | null;
|
|
146
|
+
where: string | null;
|
|
147
|
+
not: string | null;
|
|
148
|
+
pages: string | null;
|
|
149
|
+
region: string | null;
|
|
150
|
+
} | null;
|
|
151
|
+
problem: string | null;
|
|
152
|
+
}
|
|
153
|
+
/** The cases a run with the chosen filters would list. */
|
|
154
|
+
export interface RunPlan {
|
|
155
|
+
env: string;
|
|
156
|
+
/** Playwright could not list the tests (for example an invalid search expression). */
|
|
157
|
+
error: string | null;
|
|
158
|
+
/** Cases that run (skipped ones not counted). */
|
|
159
|
+
totalCases: number;
|
|
160
|
+
/** Case x profile combinations that run. */
|
|
161
|
+
totalTests: number;
|
|
162
|
+
cases: PlannedCaseInfo[];
|
|
163
|
+
}
|
|
164
|
+
export type ProfileStatus = 'missing' | 'unverified' | 'ok' | 'expired' | 'error';
|
|
165
|
+
/** One profile: a row of the Profiles page. */
|
|
166
|
+
export interface ProfileInfo {
|
|
167
|
+
id: string;
|
|
168
|
+
name: string;
|
|
169
|
+
env: string;
|
|
170
|
+
baseURL: string;
|
|
171
|
+
account: string | null;
|
|
172
|
+
tags: string[];
|
|
173
|
+
status: ProfileStatus;
|
|
174
|
+
verifying: boolean;
|
|
175
|
+
/** When the session file was last written. */
|
|
176
|
+
savedAt: string | null;
|
|
177
|
+
checkedAt: string | null;
|
|
178
|
+
error?: string;
|
|
179
|
+
}
|
|
180
|
+
export interface AddProfileRequest {
|
|
181
|
+
id: string;
|
|
182
|
+
name: string;
|
|
183
|
+
/** The environment this profile points at, e.g. `production`, `staging`. */
|
|
184
|
+
env: string;
|
|
185
|
+
baseURL: string;
|
|
186
|
+
/** A label for humans (a mailbox or username). Never a password. */
|
|
187
|
+
account?: string;
|
|
188
|
+
tags?: string[];
|
|
189
|
+
/** Page that redirects to /login when logged out. Defaults to /account/. */
|
|
190
|
+
sessionCheckPath?: string;
|
|
191
|
+
/** Only for environments other than production. Defaults to false. */
|
|
192
|
+
email?: boolean;
|
|
193
|
+
}
|
|
194
|
+
export interface ProfilesResponse {
|
|
195
|
+
profiles: ProfileInfo[];
|
|
196
|
+
/** Every environment used in profiles.yaml, `production` first. */
|
|
197
|
+
envs: string[];
|
|
198
|
+
verifying: boolean;
|
|
199
|
+
}
|
|
200
|
+
export interface CaseSummary {
|
|
201
|
+
/** Path below `cases/` without `.md`, e.g. `documents/landing-page`. */
|
|
202
|
+
id: string;
|
|
203
|
+
/** The folder of the case (`documents`), `null` for a case directly in `cases/`. */
|
|
204
|
+
group: string | null;
|
|
205
|
+
title: string | null;
|
|
206
|
+
login: string | null;
|
|
207
|
+
suites: string[];
|
|
208
|
+
/** Environments the case may write in; empty = read-only. */
|
|
209
|
+
writes: string[];
|
|
210
|
+
writesNote: string | null;
|
|
211
|
+
/** Environments the case may run in; null = all. */
|
|
212
|
+
envs: string[] | null;
|
|
213
|
+
/** Set when the front matter is invalid; the case is still listed so it can be fixed. */
|
|
214
|
+
problem: string | null;
|
|
215
|
+
hasSpec: boolean;
|
|
216
|
+
updatedAt: string;
|
|
217
|
+
}
|
|
218
|
+
export interface CaseDetail {
|
|
219
|
+
id: string;
|
|
220
|
+
content: string;
|
|
221
|
+
mtimeMs: number;
|
|
222
|
+
}
|
|
223
|
+
/** The spec of a case. */
|
|
224
|
+
export interface SpecDetail {
|
|
225
|
+
id: string;
|
|
226
|
+
/** Path relative to the project root, for display. */
|
|
227
|
+
file: string;
|
|
228
|
+
/** Absolute path, to paste into a terminal. */
|
|
229
|
+
path: string;
|
|
230
|
+
content: string;
|
|
231
|
+
mtimeMs: number;
|
|
232
|
+
}
|
|
233
|
+
export interface ReportInfo {
|
|
234
|
+
/** Folder name under reports/. */
|
|
235
|
+
id: string;
|
|
236
|
+
/** Environment the run targeted; null for runs from before environments existed (those were production). */
|
|
237
|
+
env: string | null;
|
|
238
|
+
createdAt: string;
|
|
239
|
+
isLatest: boolean;
|
|
240
|
+
/** Pass/fail counts; null for runs from before summaries existed. */
|
|
241
|
+
counts: Record<ResultStatus, number> | null;
|
|
242
|
+
}
|
|
243
|
+
export type { ParsedError, ResultStatus, RunSettings, RunSummary, TestRunResult } from '../../lib/run-summary.js';
|
|
244
|
+
export interface InfoResponse {
|
|
245
|
+
root: string;
|
|
246
|
+
envs: string[];
|
|
247
|
+
suites: string[];
|
|
248
|
+
caseIds: string[];
|
|
249
|
+
}
|
|
250
|
+
/** Everything that belongs to one case. Shown before a delete or rename, and returned by them. */
|
|
251
|
+
export interface CaseImpact {
|
|
252
|
+
id: string;
|
|
253
|
+
caseFile: string;
|
|
254
|
+
specFile: string | null;
|
|
255
|
+
snapshotDir: string | null;
|
|
256
|
+
snapshotCount: number;
|
|
257
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|