@asrunjs/asrun 0.6.1 → 0.7.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/settings.json +5 -5
- package/.claude/skills/exploring-cases/references/assertion-targets.md +103 -103
- package/.claude/skills/exploring-cases/references/handoff-card.js +128 -128
- package/.claude/skills/making-cases/references/gaps.md +36 -36
- package/.claude/skills/making-cases/references/splitting.md +28 -28
- package/AGENTS.md +3 -0
- package/README.md +16 -2
- package/bin/asrun.mjs +2 -1
- package/dist/scripts/cli.js +14 -6
- package/dist/scripts/go.mjs +36 -6
- package/dist/scripts/heal-evidence.mjs +149 -143
- package/dist/scripts/init.d.ts +7 -0
- package/dist/scripts/init.js +57 -15
- package/dist/scripts/reset.d.ts +1 -0
- package/dist/scripts/reset.js +233 -0
- package/dist/scripts/run.js +23 -23
- package/docs/agents/framework-dev.md +29 -1
- package/docs/commands.md +25 -8
- package/docs/install.md +47 -10
- package/docs/troubleshooting.md +31 -10
- package/package.json +34 -30
- package/templates/.claude/settings.json +5 -5
- package/templates/CLAUDE.md +1 -1
- package/templates/gitignore +13 -13
- package/templates/package.json +33 -32
- package/templates/playwright.config.ts +3 -3
- package/templates/pnpm-workspace.yaml +8 -5
- package/templates/seed.spec.ts +9 -9
- package/templates/tsconfig.json +14 -14
- package/ui/dist/favicon.svg +11 -11
- package/ui/dist/logos/claude.svg +1 -1
- package/ui/dist/logos/opencode.svg +1 -1
package/docs/install.md
CHANGED
|
@@ -23,8 +23,10 @@ pnpm go
|
|
|
23
23
|
|
|
24
24
|
`init --install` scaffolds the workspace and then adds the dependency. Running `init` first matters on pnpm 12: it
|
|
25
25
|
writes `pnpm-workspace.yaml` with the `allowBuilds` entry (`esbuild` through `tsx`, `ffmpeg-static`), and without it
|
|
26
|
-
`pnpm add` exits with `ERR_PNPM_IGNORED_BUILDS`.
|
|
27
|
-
|
|
26
|
+
`pnpm add` exits with `ERR_PNPM_IGNORED_BUILDS`. The same file lists `@asrunjs/asrun` under `minimumReleaseAgeExclude`,
|
|
27
|
+
so pnpm's 24-hour release age does not hold a fresh release back (see
|
|
28
|
+
[troubleshooting.md](./troubleshooting.md#installing)). An existing `pnpm-workspace.yaml` that lacks either entry gets
|
|
29
|
+
a note instead: add the block by hand (see "Manual install").
|
|
28
30
|
|
|
29
31
|
`init` also records `@asrunjs/asrun` (pinned to its own version) in the workspace `package.json`, so `pnpm install`
|
|
30
32
|
installs the framework even without `--install`. When the install step itself fails — `pnpm` is not on `PATH`, the
|
|
@@ -39,7 +41,9 @@ registry is unreachable, or a build script is not approved — `init` names the
|
|
|
39
41
|
4. starts the web UI at http://127.0.0.1:4173 and opens it.
|
|
40
42
|
|
|
41
43
|
Run it again on any day: the install step then takes seconds, and if the UI is already running it only opens it.
|
|
42
|
-
`pnpm go --no-open` does not open a browser
|
|
44
|
+
`pnpm go --no-open` does not open a browser; `pnpm go --no-ui` stops after step 3, with the workspace prepared and no
|
|
45
|
+
server running; `pnpm go --dry-run` only prints the workspace, the framework and the `asrun` command it resolved, then
|
|
46
|
+
exits. Set `ASRUN_UI_PORT` to change the port.
|
|
43
47
|
|
|
44
48
|
The UI is optional: all commands in [commands.md](./commands.md) work without it.
|
|
45
49
|
|
|
@@ -53,13 +57,15 @@ pnpm asrun init
|
|
|
53
57
|
pnpm go
|
|
54
58
|
```
|
|
55
59
|
|
|
56
|
-
If pnpm refuses the build scripts of `esbuild` / `ffmpeg-static`,
|
|
57
|
-
install again:
|
|
60
|
+
If pnpm refuses the build scripts of `esbuild` / `ffmpeg-static`, or installs the release before `latest`, add this to
|
|
61
|
+
`pnpm-workspace.yaml` and run the install again:
|
|
58
62
|
|
|
59
63
|
```yaml
|
|
60
64
|
allowBuilds:
|
|
61
65
|
esbuild: true
|
|
62
66
|
ffmpeg-static: true
|
|
67
|
+
minimumReleaseAgeExclude:
|
|
68
|
+
- '@asrunjs/asrun'
|
|
63
69
|
```
|
|
64
70
|
|
|
65
71
|
To pin a version:
|
|
@@ -68,7 +74,8 @@ To pin a version:
|
|
|
68
74
|
pnpm add -D @asrunjs/asrun@<version>
|
|
69
75
|
```
|
|
70
76
|
|
|
71
|
-
`pnpm asrun init` is safe to run many times: it never overwrites a file the project owns
|
|
77
|
+
`pnpm asrun init` is safe to run many times: it never overwrites a file the project owns unless `--force` asks for
|
|
78
|
+
it (and `--reset-rules` for the project's rules).
|
|
72
79
|
|
|
73
80
|
## What `init` writes
|
|
74
81
|
|
|
@@ -86,13 +93,16 @@ Flags:
|
|
|
86
93
|
|---|---|
|
|
87
94
|
| `--root <dir>` | initialize that folder instead of the current one |
|
|
88
95
|
| `--update` | refresh only the generated files |
|
|
96
|
+
| `--force` | overwrite every file init writes, for a clean installation (keeps `profiles.yaml` and `package.json`) |
|
|
89
97
|
| `--force <path>` | overwrite one file init owns (repeatable) |
|
|
90
98
|
| `--reset-rules` | allow `--force` on `AGENTS.md`, `CLAUDE.md` or `.claude/skills/**` |
|
|
91
99
|
| `--no-env` | do not write `.env` |
|
|
92
100
|
| `--install [spec]` | also add the dependency (default `@asrunjs/asrun`) |
|
|
93
101
|
|
|
94
|
-
`AGENTS.md`, `CLAUDE.md` and `.claude/skills/**` belong to the project. `init --force`
|
|
95
|
-
`--reset-rules
|
|
102
|
+
`AGENTS.md`, `CLAUDE.md` and `.claude/skills/**` belong to the project. `init --force` keeps them unless
|
|
103
|
+
`--reset-rules` is given, so a framework update can never replace a project's rules. `--force` also keeps
|
|
104
|
+
`profiles.yaml` and `package.json`: replace the profiles with `--force profiles.yaml`; `package.json` is only merged
|
|
105
|
+
into, so your scripts and dependencies stay.
|
|
96
106
|
|
|
97
107
|
## Update
|
|
98
108
|
|
|
@@ -103,7 +113,8 @@ pnpm asrun doctor
|
|
|
103
113
|
```
|
|
104
114
|
|
|
105
115
|
`init --update` rewrites only the generated files and leaves project rules, case files, values and baselines alone.
|
|
106
|
-
`doctor` tells you when the workspace is
|
|
116
|
+
`init --force` rewrites every file init writes (see the flags above). `doctor` tells you when the workspace is
|
|
117
|
+
behind the installed version.
|
|
107
118
|
|
|
108
119
|
There is no folder to move: the framework lives in `node_modules`, which the package manager owns. To change the
|
|
109
120
|
framework itself, `pnpm patch @asrunjs/asrun` (a committed patch).
|
|
@@ -169,6 +180,32 @@ and `pnpm-workspace.yaml`.
|
|
|
169
180
|
Never commit or share `.auth/` (one saved login per profile, as sensitive as a password), `reports/`, `.tmp/`,
|
|
170
181
|
`.explore/`, `.env` or `node_modules/`. The asrun block of `.gitignore` covers them.
|
|
171
182
|
|
|
183
|
+
## Reset and reinstall
|
|
184
|
+
|
|
185
|
+
To get a clean environment without losing the project's test content:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
pnpm asrun reset # lists what it removes, then asks
|
|
189
|
+
pnpm dlx @asrunjs/asrun init --install
|
|
190
|
+
pnpm go
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
`reset` removes `node_modules/` and the files `init` writes: the generated config and commands, `.asrun.json`, the
|
|
194
|
+
asrun block of `.gitignore` and the `ASRUN_ROOT` lines of `.env`. It deletes a once-only file only when it is still
|
|
195
|
+
identical to its template, so a file you edited is kept (and listed). `cases/`, specs and their baselines,
|
|
196
|
+
`profiles.yaml`, `package.json` and `.claude/skills/**` are never removed.
|
|
197
|
+
|
|
198
|
+
| Flag | Meaning |
|
|
199
|
+
|---|---|
|
|
200
|
+
| `--root <dir>` | reset that folder instead of the current workspace |
|
|
201
|
+
| `--dry-run` | list what would be removed, and change nothing |
|
|
202
|
+
| `--yes` | skip the confirmation (for unattended runs) |
|
|
203
|
+
| `--state` | also remove `.auth/`, `reports/`, `.tmp/`, `.explore/`, `test-results/`, `playwright-report/`, `.playwright-mcp/` |
|
|
204
|
+
| `--lockfile` | also remove `pnpm-lock.yaml`, so the next install resolves the dependencies again |
|
|
205
|
+
|
|
206
|
+
Without `--yes` it asks you to type `yes`; a run without a terminal refuses instead of removing anything. It refuses
|
|
207
|
+
to run on the framework's own checkout. `--state` removes saved logins, so every profile must be signed in again.
|
|
208
|
+
|
|
172
209
|
## Uninstall
|
|
173
210
|
|
|
174
211
|
```bash
|
|
@@ -176,4 +213,4 @@ pnpm remove @asrunjs/asrun
|
|
|
176
213
|
```
|
|
177
214
|
|
|
178
215
|
Then delete the workspace files you no longer want (`profiles.yaml`, `cases/`, `tests/`, the generated commands and
|
|
179
|
-
configs, `.asrun.json`).
|
|
216
|
+
configs, `.asrun.json`). `pnpm asrun reset` does most of that; keep the files if another tool still uses them.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -67,6 +67,37 @@ is recorded.
|
|
|
67
67
|
checkout has the card but not the screenshot. Run the exploration again on this machine (or look at the card and the
|
|
68
68
|
report's baseline).
|
|
69
69
|
|
|
70
|
+
## Installing
|
|
71
|
+
|
|
72
|
+
**`pnpm add` installs the previous release instead of `latest`** — pnpm holds back versions published in the last
|
|
73
|
+
24 hours (`minimumReleaseAge`, 1440 minutes), so right after a release `latest` resolves to the version before it.
|
|
74
|
+
Exempt the framework in `pnpm-workspace.yaml` (the file `init` writes already does):
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
minimumReleaseAgeExclude:
|
|
78
|
+
- '@asrunjs/asrun'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For a single command, set the same list as a JSON array:
|
|
82
|
+
`PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE='["@asrunjs/asrun"]'` (a comma-separated list is not parsed), or turn the wait
|
|
83
|
+
off for that command with `PNPM_CONFIG_MINIMUM_RELEASE_AGE=0`. The wait covers `pnpm dlx @asrunjs/asrun init` too. Once
|
|
84
|
+
`minimumReleaseAgeStrict` is on, the install fails with `ERR_PNPM_NO_MATURE_MATCHING_VERSION` instead of falling back.
|
|
85
|
+
|
|
86
|
+
**`ERR_PNPM_IGNORED_BUILDS` while installing** — pnpm refused the build scripts of `esbuild` / `ffmpeg-static`. Run
|
|
87
|
+
`pnpm dlx @asrunjs/asrun init` first (it writes the `allowBuilds` entry), or add it to `pnpm-workspace.yaml` by hand;
|
|
88
|
+
see [install.md](./install.md#manual-install).
|
|
89
|
+
|
|
90
|
+
**`init` stopped and `.asrun.json` is missing** — the workspace files are written, but the `pnpm add -D
|
|
91
|
+
@asrunjs/asrun` step failed, and `init` printed the reason (most often `pnpm` is not on `PATH`, or the registry
|
|
92
|
+
refused the install). Run the command it prints, then `pnpm asrun init` again. Until then `pnpm asrun` and every
|
|
93
|
+
script that calls `asrun` do not exist, and `pnpm asrun doctor` reports both the missing framework and the missing
|
|
94
|
+
marker.
|
|
95
|
+
|
|
96
|
+
**The workspace looks half-installed, or you want fresh dependencies** — run `pnpm asrun reset` (add `--dry-run` to
|
|
97
|
+
see the list first, `--yes` to skip the prompt). It removes `node_modules` and the files `init` wrote; edited files,
|
|
98
|
+
cases, specs, `profiles.yaml` and `package.json` stay. Then run `pnpm dlx @asrunjs/asrun init --install` and
|
|
99
|
+
`pnpm go`. `--state` also clears saved logins and reports, and `--lockfile` clears the lockfile.
|
|
100
|
+
|
|
70
101
|
## AI steps
|
|
71
102
|
|
|
72
103
|
**An AI command says the `playwright-test` MCP server is missing** — run `pnpm asrun doctor`. OpenCode reads only
|
|
@@ -91,16 +122,6 @@ read it. `doctor` lists the overrides it sees.
|
|
|
91
122
|
**`pnpm asrun init --force AGENTS.md` is refused** — `AGENTS.md`, `CLAUDE.md` and `.claude/skills/**` belong to the
|
|
92
123
|
project. Add `--reset-rules` to replace them with the template, and expect to lose the project's rules.
|
|
93
124
|
|
|
94
|
-
**`ERR_PNPM_IGNORED_BUILDS` while installing** — pnpm refused the build scripts of `esbuild` / `ffmpeg-static`. Run
|
|
95
|
-
`pnpm dlx @asrunjs/asrun init` first (it writes the `allowBuilds` entry), or add it to `pnpm-workspace.yaml` by hand;
|
|
96
|
-
see [install.md](./install.md#manual-install).
|
|
97
|
-
|
|
98
|
-
**`init` stopped and `.asrun.json` is missing** — the workspace files are written, but the `pnpm add -D
|
|
99
|
-
@asrunjs/asrun` step failed, and `init` printed the reason (most often `pnpm` is not on `PATH`, or the registry
|
|
100
|
-
refused the install). Run the command it prints, then `pnpm asrun init` again. Until then `pnpm asrun` and every
|
|
101
|
-
script that calls `asrun` do not exist, and `pnpm asrun doctor` reports both the missing framework and the missing
|
|
102
|
-
marker.
|
|
103
|
-
|
|
104
125
|
**The AI did something you did not expect** — exploring and generating only read pages and edit the case file; healing
|
|
105
126
|
edits the spec and runs it under the same write gate as any run (staging writes are allowed, any other environment
|
|
106
127
|
needs a person's confirmation). None of them writes product data on its own, and none updates a baseline. If a step
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asrunjs/asrun",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Multi-profile end-to-end test suite: plain-language cases, AI-written Playwright specs, evidence for every run.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Zoro Chen",
|
|
@@ -42,6 +42,38 @@
|
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"go": "node scripts/go.mjs",
|
|
47
|
+
"bootstrap": "pnpm install && playwright install chromium",
|
|
48
|
+
"signin": "tsx scripts/login.ts",
|
|
49
|
+
"status": "tsx scripts/status.ts",
|
|
50
|
+
"reset": "tsx scripts/cli.ts reset",
|
|
51
|
+
"asrun": "tsx scripts/cli.ts",
|
|
52
|
+
"report": "tsx scripts/report.ts",
|
|
53
|
+
"heal:evidence": "node scripts/heal-evidence.mjs",
|
|
54
|
+
"explore": "tsx scripts/explore.ts",
|
|
55
|
+
"cleanup": "tsx scripts/cleanup.ts",
|
|
56
|
+
"case:new": "tsx scripts/new-case.ts",
|
|
57
|
+
"case:check": "tsx scripts/check-cases.ts",
|
|
58
|
+
"spec:lint": "tsx scripts/lint-specs.ts",
|
|
59
|
+
"baselines:review": "tsx scripts/review-baselines.ts",
|
|
60
|
+
"pdf:render": "tsx scripts/render-pdf.ts",
|
|
61
|
+
"demo:up": "node scripts/demo.mjs up",
|
|
62
|
+
"demo:build": "node scripts/demo.mjs build",
|
|
63
|
+
"demo:seed": "node scripts/demo.mjs seed",
|
|
64
|
+
"demo:reset": "node scripts/demo.mjs reset",
|
|
65
|
+
"demo:down": "node scripts/demo.mjs down",
|
|
66
|
+
"demo:logs": "node scripts/demo.mjs logs",
|
|
67
|
+
"demo:status": "node scripts/demo.mjs status",
|
|
68
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p ui/tsconfig.json",
|
|
69
|
+
"ui": "tsx scripts/ui.ts",
|
|
70
|
+
"ui:build": "tsx scripts/ui-build.ts",
|
|
71
|
+
"ui:dev": "tsx scripts/ui-dev.ts",
|
|
72
|
+
"build": "tsx scripts/build.ts",
|
|
73
|
+
"prepare": "pnpm build && pnpm ui:build",
|
|
74
|
+
"prepack": "pnpm build && pnpm ui:build",
|
|
75
|
+
"verify:pack": "node scripts/verify-pack.mjs"
|
|
76
|
+
},
|
|
45
77
|
"peerDependencies": {
|
|
46
78
|
"@playwright/test": "^1.64.0"
|
|
47
79
|
},
|
|
@@ -88,33 +120,5 @@
|
|
|
88
120
|
},
|
|
89
121
|
"optionalDependencies": {
|
|
90
122
|
"ffmpeg-static": "^5.3.0"
|
|
91
|
-
},
|
|
92
|
-
"scripts": {
|
|
93
|
-
"go": "node scripts/go.mjs",
|
|
94
|
-
"bootstrap": "pnpm install && playwright install chromium",
|
|
95
|
-
"signin": "tsx scripts/login.ts",
|
|
96
|
-
"status": "tsx scripts/status.ts",
|
|
97
|
-
"asrun": "tsx scripts/cli.ts",
|
|
98
|
-
"report": "tsx scripts/report.ts",
|
|
99
|
-
"heal:evidence": "node scripts/heal-evidence.mjs",
|
|
100
|
-
"explore": "tsx scripts/explore.ts",
|
|
101
|
-
"cleanup": "tsx scripts/cleanup.ts",
|
|
102
|
-
"case:new": "tsx scripts/new-case.ts",
|
|
103
|
-
"case:check": "tsx scripts/check-cases.ts",
|
|
104
|
-
"spec:lint": "tsx scripts/lint-specs.ts",
|
|
105
|
-
"baselines:review": "tsx scripts/review-baselines.ts",
|
|
106
|
-
"pdf:render": "tsx scripts/render-pdf.ts",
|
|
107
|
-
"demo:up": "node scripts/demo.mjs up",
|
|
108
|
-
"demo:build": "node scripts/demo.mjs build",
|
|
109
|
-
"demo:seed": "node scripts/demo.mjs seed",
|
|
110
|
-
"demo:reset": "node scripts/demo.mjs reset",
|
|
111
|
-
"demo:down": "node scripts/demo.mjs down",
|
|
112
|
-
"demo:logs": "node scripts/demo.mjs logs",
|
|
113
|
-
"demo:status": "node scripts/demo.mjs status",
|
|
114
|
-
"typecheck": "tsc --noEmit && tsc --noEmit -p ui/tsconfig.json",
|
|
115
|
-
"ui": "tsx scripts/ui.ts",
|
|
116
|
-
"ui:build": "tsx scripts/ui-build.ts",
|
|
117
|
-
"ui:dev": "tsx scripts/ui-dev.ts",
|
|
118
|
-
"build": "tsx scripts/build.ts"
|
|
119
123
|
}
|
|
120
|
-
}
|
|
124
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"sandbox": {
|
|
3
|
-
"excludedCommands": ["pnpm asrun *", "pnpm status *", "pnpm heal:evidence *", "tail *", "head *"]
|
|
4
|
-
}
|
|
5
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"sandbox": {
|
|
3
|
+
"excludedCommands": ["pnpm asrun *", "pnpm status *", "pnpm heal:evidence *", "tail *", "head *"]
|
|
4
|
+
}
|
|
5
|
+
}
|
package/templates/CLAUDE.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@AGENTS.md
|
|
1
|
+
@AGENTS.md
|
package/templates/gitignore
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# >>> asrun (generated by `pnpm asrun init`; keep these lines)
|
|
2
|
-
# Saved logins are equivalent to passwords: never commit or share them.
|
|
3
|
-
.auth/
|
|
4
|
-
reports/
|
|
5
|
-
.tmp/
|
|
6
|
-
.explore/
|
|
7
|
-
test-results/
|
|
8
|
-
playwright-report/
|
|
9
|
-
.playwright-mcp/
|
|
10
|
-
# Local settings: ASRUN_ROOT and machine-specific values.
|
|
11
|
-
.env
|
|
12
|
-
.env.*
|
|
13
|
-
# <<< asrun
|
|
1
|
+
# >>> asrun (generated by `pnpm asrun init`; keep these lines)
|
|
2
|
+
# Saved logins are equivalent to passwords: never commit or share them.
|
|
3
|
+
.auth/
|
|
4
|
+
reports/
|
|
5
|
+
.tmp/
|
|
6
|
+
.explore/
|
|
7
|
+
test-results/
|
|
8
|
+
playwright-report/
|
|
9
|
+
.playwright-mcp/
|
|
10
|
+
# Local settings: ASRUN_ROOT and machine-specific values.
|
|
11
|
+
.env
|
|
12
|
+
.env.*
|
|
13
|
+
# <<< asrun
|
package/templates/package.json
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "my-project",
|
|
3
|
-
"private": true,
|
|
4
|
-
"type": "module",
|
|
5
|
-
"engines": {
|
|
6
|
-
"node": ">=22"
|
|
7
|
-
},
|
|
8
|
-
"scripts": {
|
|
9
|
-
"go": "asrun go",
|
|
10
|
-
"asrun": "asrun",
|
|
11
|
-
"signin": "asrun signin",
|
|
12
|
-
"status": "asrun status",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"case:
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"ui
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"@
|
|
29
|
-
"@
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "my-project",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=22"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"go": "asrun go",
|
|
10
|
+
"asrun": "asrun",
|
|
11
|
+
"signin": "asrun signin",
|
|
12
|
+
"status": "asrun status",
|
|
13
|
+
"reset": "asrun reset",
|
|
14
|
+
"report": "asrun report",
|
|
15
|
+
"heal:evidence": "asrun heal:evidence",
|
|
16
|
+
"explore": "asrun explore",
|
|
17
|
+
"cleanup": "asrun cleanup",
|
|
18
|
+
"case:new": "asrun case:new",
|
|
19
|
+
"case:check": "asrun case:check",
|
|
20
|
+
"spec:lint": "asrun spec:lint",
|
|
21
|
+
"baselines:review": "asrun baselines:review",
|
|
22
|
+
"pdf:render": "asrun pdf:render",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"ui": "asrun ui",
|
|
25
|
+
"ui:dev": "asrun ui:dev"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@asrunjs/asrun": "{{asrun}}",
|
|
29
|
+
"@playwright/test": "1.64.1",
|
|
30
|
+
"@types/node": "^22.20.5",
|
|
31
|
+
"typescript": "^7.0.2"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
// Generated by `pnpm asrun init`. The real configuration is `{{framework}}/dist/playwright.config.js`; it resolves the
|
|
2
|
-
// workspace root (this folder) itself, so `pnpm asrun` finds `tests/`, `profiles.yaml` and `reports/` here.
|
|
3
|
-
export {default} from '{{framework}}/dist/playwright.config.js';
|
|
1
|
+
// Generated by `pnpm asrun init`. The real configuration is `{{framework}}/dist/playwright.config.js`; it resolves the
|
|
2
|
+
// workspace root (this folder) itself, so `pnpm asrun` finds `tests/`, `profiles.yaml` and `reports/` here.
|
|
3
|
+
export {default} from '{{framework}}/dist/playwright.config.js';
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
# `asrun` is a normal devDependency; this file
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
# `asrun` is a normal devDependency; this file approves the build scripts its dependencies run
|
|
2
|
+
# (esbuild through tsx and ffmpeg-static compile a binary on install) and exempts the framework
|
|
3
|
+
# from pnpm's 24-hour release age, so a fresh release installs right away.
|
|
4
|
+
allowBuilds:
|
|
5
|
+
esbuild: true
|
|
6
|
+
ffmpeg-static: true
|
|
7
|
+
minimumReleaseAgeExclude:
|
|
8
|
+
- '@asrunjs/asrun'
|
package/templates/seed.spec.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {test} from '@asrunjs/asrun/fixtures';
|
|
2
|
-
|
|
3
|
-
test.use({mustLogin: false});
|
|
4
|
-
|
|
5
|
-
// Used by the Playwright MCP agents to open a ready-to-use page for the current profile.
|
|
6
|
-
// Not a real test: `pnpm asrun` skips anything tagged @seed.
|
|
7
|
-
test('seed @seed', async ({page}) => {
|
|
8
|
-
await page.goto('/');
|
|
9
|
-
});
|
|
1
|
+
import {test} from '@asrunjs/asrun/fixtures';
|
|
2
|
+
|
|
3
|
+
test.use({mustLogin: false});
|
|
4
|
+
|
|
5
|
+
// Used by the Playwright MCP agents to open a ready-to-use page for the current profile.
|
|
6
|
+
// Not a real test: `pnpm asrun` skips anything tagged @seed.
|
|
7
|
+
test('seed @seed', async ({page}) => {
|
|
8
|
+
await page.goto('/');
|
|
9
|
+
});
|
package/templates/tsconfig.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "bundler",
|
|
6
|
-
"strict": true,
|
|
7
|
-
"noEmit": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"resolveJsonModule": true,
|
|
11
|
-
"types": ["node"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["tests", "playwright.config.ts"]
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"types": ["node"]
|
|
12
|
+
},
|
|
13
|
+
"include": ["tests", "playwright.config.ts"]
|
|
14
|
+
}
|
package/ui/dist/favicon.svg
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
-
<g transform="rotate(-3 32 32)">
|
|
3
|
-
<rect x="5" y="5" width="54" height="54" rx="6" fill="#b5443a"/>
|
|
4
|
-
<rect x="8" y="8" width="48" height="48" rx="4" fill="none" stroke="#f6f2e9" stroke-opacity="0.32" stroke-width="2"/>
|
|
5
|
-
<polygon fill="#f6f2e9" points="30.6,15 33.4,15 22,48 19,48"/>
|
|
6
|
-
<polygon fill="#f6f2e9" points="29.2,15 34.8,15 46.5,48 40.5,48"/>
|
|
7
|
-
<rect fill="#f6f2e9" x="24.5" y="36.5" width="15" height="2.6"/>
|
|
8
|
-
<rect fill="#f6f2e9" x="15" y="47" width="12" height="2.6"/>
|
|
9
|
-
<rect fill="#f6f2e9" x="36.5" y="47" width="13" height="2.6"/>
|
|
10
|
-
</g>
|
|
11
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
+
<g transform="rotate(-3 32 32)">
|
|
3
|
+
<rect x="5" y="5" width="54" height="54" rx="6" fill="#b5443a"/>
|
|
4
|
+
<rect x="8" y="8" width="48" height="48" rx="4" fill="none" stroke="#f6f2e9" stroke-opacity="0.32" stroke-width="2"/>
|
|
5
|
+
<polygon fill="#f6f2e9" points="30.6,15 33.4,15 22,48 19,48"/>
|
|
6
|
+
<polygon fill="#f6f2e9" points="29.2,15 34.8,15 46.5,48 40.5,48"/>
|
|
7
|
+
<rect fill="#f6f2e9" x="24.5" y="36.5" width="15" height="2.6"/>
|
|
8
|
+
<rect fill="#f6f2e9" x="15" y="47" width="12" height="2.6"/>
|
|
9
|
+
<rect fill="#f6f2e9" x="36.5" y="47" width="13" height="2.6"/>
|
|
10
|
+
</g>
|
|
11
|
+
</svg>
|
package/ui/dist/logos/claude.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"/></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"/></svg>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M16 6H8v12h8V6zm4 16H4V2h16v20z"/></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M16 6H8v12h8V6zm4 16H4V2h16v20z"/></svg>
|