lastlight 0.7.4 → 0.7.6
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/config/default.yaml +1 -0
- package/dist/admin/auth.d.ts +25 -0
- package/dist/admin/auth.js +55 -10
- package/dist/admin/auth.js.map +1 -1
- package/dist/admin/routes.js +18 -1
- package/dist/admin/routes.js.map +1 -1
- package/dist/cli/cli-config.d.ts +9 -1
- package/dist/cli/cli-config.js +22 -0
- package/dist/cli/cli-config.js.map +1 -1
- package/dist/cli/cli.js +60 -4
- package/dist/cli/cli.js.map +1 -1
- package/dist/config/config.js +1 -0
- package/dist/config/config.js.map +1 -1
- package/dist/engine/dispatcher.js +19 -1
- package/dist/engine/dispatcher.js.map +1 -1
- package/dist/engine/executors/orchestrator.js +10 -1
- package/dist/engine/executors/orchestrator.js.map +1 -1
- package/dist/engine/github/github.d.ts +2 -0
- package/dist/engine/github/github.js +1 -0
- package/dist/engine/github/github.js.map +1 -1
- package/dist/engine/router.js +8 -4
- package/dist/engine/router.js.map +1 -1
- package/dist/engine/screen/classifier.js +8 -3
- package/dist/engine/screen/classifier.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
- package/plugins/lastlight/skills/lastlight-evals/SKILL.md +37 -7
- package/skills/README.md +8 -6
- package/skills/browser-qa/SKILL.md +15 -0
- package/skills/browser-qa/scripts/agent-browser.mjs +143 -7
- package/skills/code-review/SKILL.md +28 -5
- package/skills/demo/SKILL.md +10 -2
- package/skills/pr-review/SKILL.md +89 -33
- package/skills/pr-review/references/findings-schema.md +95 -0
- package/workflows/pr-review.yaml +150 -3
- package/workflows/prompts/demo.md +5 -2
- package/workflows/prompts/guardrails.md +15 -0
package/dist/engine/router.js
CHANGED
|
@@ -279,6 +279,9 @@ export async function routeEvent(envelope, deps = {}) {
|
|
|
279
279
|
if (envelope.prNumber) {
|
|
280
280
|
// PR comments:
|
|
281
281
|
// build → pr-fix (full Architect→Executor→Reviewer fix loop)
|
|
282
|
+
// review → pr-review (a real formal review with inline comments —
|
|
283
|
+
// "can you review this?" should trigger an actual review,
|
|
284
|
+
// not a one-off Q&A answer)
|
|
282
285
|
// verify → verify (test a behavioural claim against the PR)
|
|
283
286
|
// qa-test → qa-test (drive a flow against the PR, step pass/fail)
|
|
284
287
|
// else → pr-comment (diff-aware Q&A; the issue-comment skill
|
|
@@ -286,10 +289,11 @@ export async function routeEvent(envelope, deps = {}) {
|
|
|
286
289
|
// "does this PR consider X?" with code-cited evidence)
|
|
287
290
|
// Explore isn't meaningful on PRs since the code already exists.
|
|
288
291
|
const { handler: prHandler, routeKey: prRouteKey } = intent === "build" ? { handler: gh.pr_fix || "pr-fix", routeKey: "github.pr_fix" }
|
|
289
|
-
: intent === "
|
|
290
|
-
: intent === "
|
|
291
|
-
: intent === "
|
|
292
|
-
: { handler: gh.
|
|
292
|
+
: intent === "review" ? { handler: gh.pr_review || "pr-review", routeKey: "github.pr_review" }
|
|
293
|
+
: intent === "verify" ? { handler: gh.verify || "verify", routeKey: "github.verify" }
|
|
294
|
+
: intent === "qa-test" ? { handler: gh.qa_test || "qa-test", routeKey: "github.qa_test" }
|
|
295
|
+
: intent === "demo" ? { handler: gh.demo || "demo", routeKey: "github.demo" }
|
|
296
|
+
: { handler: gh.pr_comment || "pr-comment", routeKey: "github.pr_comment" };
|
|
293
297
|
return {
|
|
294
298
|
action: "handler",
|
|
295
299
|
handler: prHandler,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/engine/router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/engine/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ BUILD — The user is ASKING YOU (the bot) to make code changes NOW in a GitHub
|
|
|
15
15
|
EXPLORE — The user wants help shaping an idea BEFORE writing code: "help me think through X", "brainstorm Y", "spec this out", "explore an idea for Z". A bare "explore" / "explore this" / "let's explore" is also EXPLORE — especially as a reply on an existing issue (ISSUE TITLE present), where the implicit object is the issue's idea. EXPLORE = shape the idea / write a spec; BUILD = write the code now.
|
|
16
16
|
QUESTION — The user is asking a substantive INFORMATIONAL question that warrants research to answer well: "how does X work?", "what's the difference between X and Y?", "how does <repo> compare to <other tool>?", "is it possible to do Z?", "why does X happen?". The deliverable is an ANSWER, not code and not a spec. QUESTION is for real questions that benefit from reading docs/code or searching the web — NOT casual chat, thanks, or one-word replies (those stay CHAT). EXPLORE shapes a NEW idea into a spec; QUESTION answers an EXISTING question about how something works or compares.
|
|
17
17
|
TRIAGE — The user wants to scan/triage issues on a repo: "triage cliftonc/repo", "scan for new issues", "can you triage <repo>?".
|
|
18
|
-
REVIEW — The user wants
|
|
18
|
+
REVIEW — The user wants a code review. Either repo-wide ("review cliftonc/repo", "check PRs", "can you review PRs on <repo>?") OR, when the comment is a reply on a PR (ISSUE TITLE present), a request to review THIS PR: "review this", "can you review this?", "please review", "take a look at this PR", "give this a review". The deliverable is a formal PR review (inline comments on the diff). Prefer REVIEW over CHAT whenever there's a clear "review"/"take a look" request on a PR.
|
|
19
19
|
SECURITY — The user wants a security scan/review of a repo: "security review cliftonc/repo", "scan for vulnerabilities", "check security", "can you do a security review of <repo>?".
|
|
20
20
|
VERIFY — The user wants you to TEST whether a specific claim or behaviour is actually true and report the evidence: "verify that the rate limiter blocks", "does this PR really fix the crash?", "confirm X actually works", "check that Y no longer happens", "prove the --fork flag creates a new session". The deliverable is a CONFIRMED/REFUTED verdict backed by RUNNING the code — not a code change and not a code-quality review. Prefer VERIFY over REVIEW when the user wants proof a behaviour works/is fixed, rather than an assessment of the diff.
|
|
21
21
|
QATEST — The user wants you to drive an app or CLI through a flow and report step-level pass/fail: "qa test the signup flow", "run through login and tell me what breaks", "smoke-test the CLI commands", "exercise the checkout flow". The deliverable is a step-by-step QA report. Prefer QATEST over VERIFY when it's a multi-step flow to exercise rather than a single claim to confirm.
|
|
@@ -51,8 +51,11 @@ a clear command directed at the issue's subject:
|
|
|
51
51
|
this", "make it so" → BUILD (write the code now).
|
|
52
52
|
- "explore", "explore this", "let's explore", "think this through", "spec this
|
|
53
53
|
out", "brainstorm this" → EXPLORE (shape the idea / write a spec first).
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
- "review this", "can you review this", "please review", "take a look",
|
|
55
|
+
"give this a review" → REVIEW (do a real code review now; on a PR this means
|
|
56
|
+
review the current PR's diff).
|
|
57
|
+
A bare command word ("explore", "build", "review") on an existing issue/PR is a
|
|
58
|
+
clear command, NOT ambiguous chat.
|
|
56
59
|
This verb rule is for IMPERATIVE requests only. A PR/issue reply that REPORTS
|
|
57
60
|
already-completed work or responds to your review — "thanks, fixed in <sha>",
|
|
58
61
|
"addressed in commit abc123", "done, added a regression test", "this is
|
|
@@ -93,6 +96,8 @@ Examples:
|
|
|
93
96
|
"can you do a security review of https://github.com/cliftonc/lastlight" → INTENT: SECURITY, REPO: cliftonc/lastlight, ISSUE: NONE, REASON: NONE
|
|
94
97
|
"could you triage https://github.com/foo/bar?" → INTENT: TRIAGE, REPO: foo/bar, ISSUE: NONE, REASON: NONE
|
|
95
98
|
"please review https://github.com/foo/bar/pull/42" → INTENT: REVIEW, REPO: foo/bar, ISSUE: 42, REASON: NONE
|
|
99
|
+
"can you review this?" with ISSUE TITLE "Add HTML sanitizer for messages" → INTENT: REVIEW, REPO: NONE, ISSUE: NONE, REASON: NONE
|
|
100
|
+
"take a look at this PR when you get a chance" with ISSUE TITLE "Port fastify adapter" → INTENT: REVIEW, REPO: NONE, ISSUE: NONE, REASON: NONE
|
|
96
101
|
"scan https://github.com/cliftonc/lastlight for vulnerabilities" → INTENT: SECURITY, REPO: cliftonc/lastlight, ISSUE: NONE, REASON: NONE
|
|
97
102
|
"delete any files in ~/work/lastlight/docs" → INTENT: CHAT, REPO: NONE, ISSUE: NONE, REASON: NONE
|
|
98
103
|
"can you remove the old docs folder for me" (no ISSUE TITLE, no repo) → INTENT: CHAT, REPO: NONE, ISSUE: NONE, REASON: NONE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/engine/screen/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,gBAAgB,IAAI,oBAAoB,EAAqB,MAAM,WAAW,CAAC;AA0C1G,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/engine/screen/classifier.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin.json",
|
|
3
3
|
"name": "lastlight",
|
|
4
4
|
"displayName": "Last Light",
|
|
5
|
-
"version": "0.7.
|
|
5
|
+
"version": "0.7.6",
|
|
6
6
|
"description": "Install, configure and operate Last Light (GitHub maintenance agent) — its server, CLI client, deployment overlay, and the Last Light Evals harness.",
|
|
7
7
|
"author": { "name": "Clifton Cunningham" },
|
|
8
8
|
"homepage": "https://github.com/cliftonc/lastlight",
|
|
@@ -20,6 +20,10 @@ compatible. **Node 24+.**
|
|
|
20
20
|
node --version # need >= 24
|
|
21
21
|
command -v lastlight-evals >/dev/null && echo "installed" || npm i -g lastlight-evals
|
|
22
22
|
lastlight-evals --version # prints the evals version + the bundled lastlight core version
|
|
23
|
+
# Optional: for `--sandbox gondolin` (isolate the agent in a QEMU micro-VM so it
|
|
24
|
+
# can't read host gold data) you also need QEMU natively: `brew install qemu`
|
|
25
|
+
# (macOS) or your distro's `qemu-system` package. The default `--sandbox none`
|
|
26
|
+
# needs nothing extra.
|
|
23
27
|
```
|
|
24
28
|
|
|
25
29
|
## 2. Scaffold a workspace
|
|
@@ -97,20 +101,40 @@ lastlight-evals run triage --model haiku # fuzzy match in models.json
|
|
|
97
101
|
lastlight-evals run triage --model openai/gpt-5.5,anthropic/claude-opus-4-8
|
|
98
102
|
lastlight-evals run --compare # cross-vendor set (only models whose envKey is present)
|
|
99
103
|
lastlight-evals run triage --runs 3 # repeat each case 3× (worst-case verdict, mean metrics)
|
|
104
|
+
lastlight-evals run pr-review --limit 3 # only the first 3 cases of the tier (controlled/cheap run)
|
|
105
|
+
lastlight-evals run triage --instance <id> # only this exact instance_id (or set EVAL_INSTANCE)
|
|
106
|
+
lastlight-evals run pr-review --f-beta 0.5 # pr-review F-beta β (default 1=F1; 0.5=precision 2×). Or EVAL_F_BETA
|
|
107
|
+
lastlight-evals run pr-review --judge-with-diff # feed the PR diff to the judge (higher fidelity; off by default)
|
|
108
|
+
lastlight-evals run pr-review --sandbox gondolin # isolate the agent's tools in a QEMU micro-VM (anti-spoil). Or EVAL_SANDBOX
|
|
100
109
|
lastlight-evals run triage --no-open # don't open the report
|
|
101
110
|
# Plain layout: add --overlay . (e.g. lastlight-evals run triage --overlay .)
|
|
111
|
+
|
|
112
|
+
lastlight-evals serve # browse past runs in the dashboard (no models run)
|
|
113
|
+
lastlight-evals clean --dry-run # list killed/crashed runs that are stuck "running"
|
|
114
|
+
lastlight-evals clean # finalize them (mark interrupted; --delete to remove)
|
|
102
115
|
```
|
|
103
116
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
117
|
+
Each run lands in its own dir `./eval-results/<tiers>/<runId>/`: `scorecard.json`
|
|
118
|
+
+ `predictions.jsonl` (SWE-bench format). The report is a **JSON-driven dashboard
|
|
119
|
+
SPA**, not generated HTML — `run` starts a local server and opens it; browse every
|
|
120
|
+
past run later with `lastlight-evals serve`. In the dashboard a code-fix row's
|
|
121
|
+
**files** button opens the agent's captured diff and **log** shows the per-phase
|
|
122
|
+
agent session.
|
|
123
|
+
|
|
124
|
+
If a run is killed or crashes mid-flight it stays stuck showing "running" (its
|
|
125
|
+
scorecard never got its final write). `lastlight-evals clean` finalizes such runs
|
|
126
|
+
— marks them *interrupted* (default; keeps the partial scorecard + transcripts)
|
|
127
|
+
or `--delete` removes the run dir.
|
|
107
128
|
|
|
108
129
|
## 5. Author eval cases (optional)
|
|
109
130
|
|
|
110
|
-
|
|
111
|
-
workflow with held-out tests)
|
|
112
|
-
|
|
113
|
-
|
|
131
|
+
Three tiers ship: **triage** (cheap, issue-triage), **code-fix** (heavy, build
|
|
132
|
+
workflow with held-out tests), and **pr-review** (PR-review precision, graded by
|
|
133
|
+
an LLM judge against a gold set → precision / recall / **F1** by default, the
|
|
134
|
+
F-beta configurable via `EVAL_F_BETA`). To add cases or
|
|
135
|
+
a custom tier, read **`references/instance-schema.md`** — it has the
|
|
136
|
+
`SweBenchInstance` schema, the exact files to create for each tier, and worked
|
|
137
|
+
examples.
|
|
114
138
|
|
|
115
139
|
Quick shape (paths are relative to the workspace's `evals/` dir):
|
|
116
140
|
- **Triage case:** append a `SweBenchInstance` to `evals/datasets/triage/instances.json`
|
|
@@ -118,6 +142,12 @@ Quick shape (paths are relative to the workspace's `evals/` dir):
|
|
|
118
142
|
- **Code-fix case:** add the instance to `evals/datasets/code-fix/instances.json` **and**
|
|
119
143
|
create `evals/datasets/code-fix/repos/<instance_id>/` (fixture repo at base) +
|
|
120
144
|
`evals/datasets/code-fix/tests/<instance_id>/` (held-out tests applied at grade time).
|
|
145
|
+
- **PR-review case:** a `SweBenchInstance` with a `pr` fixture (base/head refs +
|
|
146
|
+
commits, checked out at the PR head) and a `review_gold` set (severity +
|
|
147
|
+
description). The `pr-review` tier ships empty — populate the full Martian
|
|
148
|
+
[Code Review Bench](https://codereview.withmartian.com/) 50 with
|
|
149
|
+
`npx tsx scripts/import-martian.ts`. Grading needs a judge model
|
|
150
|
+
(`EVAL_JUDGE_MODEL`, else a strong default per provider key).
|
|
121
151
|
- **Custom tier:** a new `evals/datasets/<tier>/` with `tier.json` +
|
|
122
152
|
`instances.json` (+ `repos/` & `tests/` for code-fix-style tiers). Discovery is
|
|
123
153
|
automatic — no code change.
|
package/skills/README.md
CHANGED
|
@@ -17,22 +17,24 @@ or editing a skill.
|
|
|
17
17
|
| [`chat`](chat/) | chat | Conversational assistant for Slack/Discord threads — answer repo/PR/issue questions, guide to natural-language triggers. |
|
|
18
18
|
| [`issue-triage`](issue-triage/) | `issue-triage.yaml`, chat | Move issues through the canonical triage state machine — categorise, label, dedupe, manage stale, write a problem-statement summary (not a solution design), re-triage on reporter replies. |
|
|
19
19
|
| [`issue-comment`](issue-comment/) | `issue-comment.yaml` | Handle non-build maintainer comments on issues/PRs — close, label, answer briefly, redirect build requests. |
|
|
20
|
-
| [`pr-review`](pr-review/) | `pr-review.yaml`, chat | Review a PR with
|
|
20
|
+
| [`pr-review`](pr-review/) | `pr-review.yaml`, chat | Review a PR with precision-first, tiered feedback and post a formal review. A pure code review — no building (CI validates the change). |
|
|
21
21
|
| [`pr-comment`](pr-comment/) | `pr-comment.yaml` | Answer a maintainer's question about an open PR with concrete, code-cited evidence (not a full review). |
|
|
22
22
|
| [`repo-health`](repo-health/) | `repo-health.yaml`, chat | Generate a repository health report — open issues, PR backlog, CI status, action items. |
|
|
23
23
|
| [`security-review`](security-review/) | `security-review.yaml` | Diff-scoped SDLC security review; file one dated summary issue with a task-list of findings. |
|
|
24
24
|
| [`security-feedback`](security-feedback/) | `security-feedback.yaml` | Process a maintainer's comment on a security scan summary — break findings into issues or record suppressions. |
|
|
25
|
-
| [`building`](building/) | build (executor, reviewer), `pr-fix.yaml
|
|
25
|
+
| [`building`](building/) | build (executor, reviewer), `pr-fix.yaml` | Shared craft: install-first + package-manager detection, the test/lint/typecheck gate, and TDD discipline in the sandbox. |
|
|
26
26
|
| [`code-review`](code-review/) | build (reviewer), `pr-review.yaml` | Shared rubric: finding tiers (Critical/Important/Suggestions/Nits) and what-to-check. Referenced by both the branch-diff reviewer and the PR reviewer. |
|
|
27
27
|
| [`verify`](verify/) | `verify.yaml` | Test a behaviour claim as an investigator — CONFIRMED / REFUTED / INCONCLUSIVE with bash-captured evidence. |
|
|
28
28
|
| [`qa-test`](qa-test/) | `qa-test.yaml` | Run an automated QA flow against a CLI or locally-served app and report step-level pass/fail with evidence. |
|
|
29
29
|
| [`browser-qa`](browser-qa/) | `verify.yaml`, `qa-test.yaml`, `demo.yaml` | Drive a real headless browser against a locally-served web UI and capture screenshot (and, for `demo`, video) evidence. Gated to the docker QA image. |
|
|
30
30
|
| [`demo`](demo/) | `demo.yaml` | Record a short demo VIDEO of a PR/feature — drive the web UI, screen-record, and composite a titled, size-capped mp4 with ffmpeg. Gated to the docker QA image. |
|
|
31
31
|
|
|
32
|
-
`building` and `code-review` are **shared building blocks**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
`building` and `code-review` are **shared building blocks** so the install
|
|
33
|
+
gate and the review rubric each live in one place. `building` is staged by the
|
|
34
|
+
build cycle (executor + reviewer) and `pr-fix`; `code-review` by the build
|
|
35
|
+
reviewer and `pr-review` (which stages `code-review` but **not** `building` — a
|
|
36
|
+
pure code review). They're staged alongside the phase's primary skill/prompt and
|
|
37
|
+
read on demand.
|
|
36
38
|
|
|
37
39
|
The live set is enforced at startup: `validateAssets()` (`src/workflows/loader.ts`)
|
|
38
40
|
resolves every workflow `skill:` reference and `CHAT_SKILL_NAMES`
|
|
@@ -91,11 +91,26 @@ Step keys (a step may combine an action **plus** a trailing `screenshot`):
|
|
|
91
91
|
| `waitFor` | selector | Wait until the element is visible (~10s timeout). |
|
|
92
92
|
| `assertText` | string | Pass if the text is visible anywhere on the page; else step FAIL.|
|
|
93
93
|
| `text` | selector | Extract `textContent` into the step result (for you to read). |
|
|
94
|
+
| `pause` | milliseconds | Hold for N ms — a readable beat after a state change (demo videos).|
|
|
94
95
|
| `screenshot` | basename | Write `<out-dir>/<basename>.png` (full page). |
|
|
95
96
|
|
|
96
97
|
The whole flow runs in **one Chromium session** — login state, cookies, and
|
|
97
98
|
navigation persist across steps.
|
|
98
99
|
|
|
100
|
+
### Demo mode (recording only)
|
|
101
|
+
|
|
102
|
+
When the session is **recorded** (`--record-dir`, `"record": true`, or an
|
|
103
|
+
explicit `--demo`), the driver switches on "demo mode" so the capture is
|
|
104
|
+
watchable — headless Chromium otherwise paints no cursor and fires actions
|
|
105
|
+
instantly. Demo mode adds a **synthetic cursor overlay** that animates to each
|
|
106
|
+
target, types `type` steps **character-by-character**, and holds a beat
|
|
107
|
+
**between steps**. For screenshot QA (no recording) these are all no-ops, so
|
|
108
|
+
QA runs stay fast. Prefer `type` over `fill` in a recorded flow so the typing is
|
|
109
|
+
visible, and use `pause` for deliberate holds. Tunables:
|
|
110
|
+
`--step-delay MS` (default 700), `--type-delay MS` (default 70),
|
|
111
|
+
`--move-steps N` (default 25), `--no-cursor` to drop the overlay (env:
|
|
112
|
+
`LASTLIGHT_STEP_DELAY_MS`, `LASTLIGHT_TYPE_DELAY_MS`, `LASTLIGHT_MOVE_STEPS`).
|
|
113
|
+
|
|
99
114
|
## Run the flow
|
|
100
115
|
|
|
101
116
|
```bash
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
// The skill runs this first to decide browser-vs-text.
|
|
19
19
|
//
|
|
20
20
|
// run <flow.json> [--base-url URL] [--out-dir DIR] [--record-dir DIR]
|
|
21
|
+
// [--demo] [--no-cursor] [--step-delay MS] [--type-delay MS]
|
|
22
|
+
// [--move-steps N]
|
|
21
23
|
// Executes a FLOW in ONE Chromium session (state preserved across steps) and
|
|
22
24
|
// prints a single JSON report.
|
|
23
25
|
//
|
|
@@ -27,6 +29,17 @@
|
|
|
27
29
|
// reported as `video` in the JSON. Used by the `/demo` workflow, which then
|
|
28
30
|
// composites the raw webm into a titled mp4 with compose-demo.sh.
|
|
29
31
|
//
|
|
32
|
+
// DEMO MODE (auto-on whenever recording; also --demo or `"demo": true` in the
|
|
33
|
+
// flow) makes the capture human-watchable — headless Chromium otherwise
|
|
34
|
+
// paints no cursor and fires actions instantly:
|
|
35
|
+
// - a synthetic cursor overlay (opt out with --no-cursor) that animates to
|
|
36
|
+
// each target before acting, driven by real page.mouse events;
|
|
37
|
+
// - `type` steps that key in char-by-char (--type-delay, default 70ms);
|
|
38
|
+
// - a deliberate hold between steps (--step-delay, default 700ms).
|
|
39
|
+
// Outside demo mode every one of these is a no-op, so screenshot QA runs
|
|
40
|
+
// behave exactly as before. Env equivalents: LASTLIGHT_STEP_DELAY_MS,
|
|
41
|
+
// LASTLIGHT_TYPE_DELAY_MS, LASTLIGHT_MOVE_STEPS.
|
|
42
|
+
//
|
|
30
43
|
// Flow shape:
|
|
31
44
|
// { "baseUrl": "http://localhost:3000",
|
|
32
45
|
// "viewport": {"width":1280,"height":800},
|
|
@@ -38,10 +51,13 @@
|
|
|
38
51
|
// {"press":"Enter"},
|
|
39
52
|
// {"waitFor":"#dashboard"},
|
|
40
53
|
// {"assertText":"Welcome"},
|
|
54
|
+
// {"pause": 1200},
|
|
41
55
|
// {"text":"h1"},
|
|
42
56
|
// {"screenshot":"after-login"}
|
|
43
57
|
// ] }
|
|
44
|
-
// A step may combine an action plus a trailing `screenshot`.
|
|
58
|
+
// A step may combine an action plus a trailing `screenshot`. `pause` holds
|
|
59
|
+
// for N ms (a readable beat after a state change, for demo recordings);
|
|
60
|
+
// `type` shows visible per-character typing, `fill` sets the value instantly.
|
|
45
61
|
//
|
|
46
62
|
// Per-step semantics:
|
|
47
63
|
// - A step error (selector not found, assertion fail, timeout) is recorded
|
|
@@ -77,6 +93,81 @@ const WAIT_TIMEOUT = 10_000; // sane default for waitFor / assertText probes
|
|
|
77
93
|
// watchable tail. Override with --record-settle-ms / LASTLIGHT_RECORD_SETTLE_MS.
|
|
78
94
|
const RECORD_SETTLE_MS = Number(process.env.LASTLIGHT_RECORD_SETTLE_MS) || 1500;
|
|
79
95
|
|
|
96
|
+
// ── Demo-mode pacing ─────────────────────────────────────────────────────────
|
|
97
|
+
// Headless Chromium paints NO cursor and fires actions instantly, so a raw
|
|
98
|
+
// recording looks like the UI mutating on its own. "Demo mode" (auto-on whenever
|
|
99
|
+
// the session is recorded — see run()) makes the capture human-watchable: a
|
|
100
|
+
// synthetic cursor overlay that animates to each target, char-by-char typing,
|
|
101
|
+
// and a deliberate pause between steps. These are no-ops outside demo mode, so
|
|
102
|
+
// screenshot QA runs are untouched. All tunable via flags / env.
|
|
103
|
+
const DEMO_STEP_DELAY_MS = Number(process.env.LASTLIGHT_STEP_DELAY_MS) || 700;
|
|
104
|
+
const DEMO_TYPE_DELAY_MS = Number(process.env.LASTLIGHT_TYPE_DELAY_MS) || 70;
|
|
105
|
+
const DEMO_MOVE_STEPS = Number(process.env.LASTLIGHT_MOVE_STEPS) || 25;
|
|
106
|
+
|
|
107
|
+
// Synthetic cursor overlay, adapted from Puppeteer's mouse-helper (Apache-2.0),
|
|
108
|
+
// made self-installing so it can be injected via context.addInitScript and picked
|
|
109
|
+
// up by Playwright's recordVideo (it's page DOM, so it lands in the .webm). It
|
|
110
|
+
// follows the REAL mouse events that page.mouse.move/down/up dispatch.
|
|
111
|
+
const MOUSE_HELPER_SRC = `(() => {
|
|
112
|
+
const install = () => {
|
|
113
|
+
if (window.__mouseHelperInstalled || !document.body) return;
|
|
114
|
+
window.__mouseHelperInstalled = true;
|
|
115
|
+
const box = document.createElement('div');
|
|
116
|
+
box.classList.add('mouse-helper');
|
|
117
|
+
const style = document.createElement('style');
|
|
118
|
+
style.innerHTML = \`
|
|
119
|
+
.mouse-helper {
|
|
120
|
+
pointer-events: none;
|
|
121
|
+
position: absolute;
|
|
122
|
+
z-index: 2147483647;
|
|
123
|
+
width: 20px; height: 20px;
|
|
124
|
+
margin-left: -10px; margin-top: -10px;
|
|
125
|
+
border-radius: 10px;
|
|
126
|
+
border: 2px solid rgba(255,255,255,.9);
|
|
127
|
+
background: rgba(0,0,0,.35);
|
|
128
|
+
box-shadow: 0 0 0 1px rgba(0,0,0,.4);
|
|
129
|
+
transition: background .15s, border-radius .15s, transform .08s;
|
|
130
|
+
}
|
|
131
|
+
.mouse-helper.button-1 {
|
|
132
|
+
transition: none;
|
|
133
|
+
background: rgba(30,120,255,.7);
|
|
134
|
+
transform: scale(.75);
|
|
135
|
+
}
|
|
136
|
+
\`;
|
|
137
|
+
document.head.appendChild(style);
|
|
138
|
+
document.body.appendChild(box);
|
|
139
|
+
const move = (e) => { box.style.left = e.pageX + 'px'; box.style.top = e.pageY + 'px'; };
|
|
140
|
+
document.addEventListener('mousemove', move, true);
|
|
141
|
+
document.addEventListener('mousedown', (e) => { move(e); box.classList.add('button-1'); }, true);
|
|
142
|
+
document.addEventListener('mouseup', (e) => { move(e); box.classList.remove('button-1'); }, true);
|
|
143
|
+
};
|
|
144
|
+
if (document.readyState === 'loading') {
|
|
145
|
+
document.addEventListener('DOMContentLoaded', install, false);
|
|
146
|
+
} else {
|
|
147
|
+
install();
|
|
148
|
+
}
|
|
149
|
+
})();`;
|
|
150
|
+
|
|
151
|
+
// Animate the synthetic cursor to the centre of a selector, best-effort. Returns
|
|
152
|
+
// the target box when it landed (so the caller can click at those coords), or
|
|
153
|
+
// null to fall back to Playwright's own targeting.
|
|
154
|
+
async function moveCursorTo(page, selector, demo) {
|
|
155
|
+
try {
|
|
156
|
+
const loc = page.locator(selector).first();
|
|
157
|
+
await loc.waitFor({ state: 'visible', timeout: WAIT_TIMEOUT });
|
|
158
|
+
await loc.scrollIntoViewIfNeeded({ timeout: WAIT_TIMEOUT }).catch(() => {});
|
|
159
|
+
const box = await loc.boundingBox();
|
|
160
|
+
if (!box) return null;
|
|
161
|
+
const cx = box.x + box.width / 2;
|
|
162
|
+
const cy = box.y + box.height / 2;
|
|
163
|
+
await page.mouse.move(cx, cy, { steps: demo.moveSteps });
|
|
164
|
+
await page.waitForTimeout(140).catch(() => {});
|
|
165
|
+
return { cx, cy };
|
|
166
|
+
} catch {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
80
171
|
function emit(obj) {
|
|
81
172
|
process.stdout.write(JSON.stringify(obj) + '\n');
|
|
82
173
|
}
|
|
@@ -140,6 +231,7 @@ function actionOf(step) {
|
|
|
140
231
|
'waitFor',
|
|
141
232
|
'assertText',
|
|
142
233
|
'text',
|
|
234
|
+
'pause',
|
|
143
235
|
]) {
|
|
144
236
|
if (k in step) return k;
|
|
145
237
|
}
|
|
@@ -147,7 +239,7 @@ function actionOf(step) {
|
|
|
147
239
|
return 'noop';
|
|
148
240
|
}
|
|
149
241
|
|
|
150
|
-
async function execStep(page, step, baseUrl, outDir, screenshots) {
|
|
242
|
+
async function execStep(page, step, baseUrl, outDir, screenshots, demo) {
|
|
151
243
|
const result = {};
|
|
152
244
|
let fatal = false;
|
|
153
245
|
|
|
@@ -164,15 +256,31 @@ async function execStep(page, step, baseUrl, outDir, screenshots) {
|
|
|
164
256
|
});
|
|
165
257
|
}
|
|
166
258
|
} else if ('click' in step) {
|
|
167
|
-
|
|
259
|
+
// Demo mode: animate the cursor to the target and click at its coordinates
|
|
260
|
+
// so the pointer travel + press are visible. Fall back to Playwright's own
|
|
261
|
+
// targeting when the box can't be resolved (or outside demo mode).
|
|
262
|
+
const at = demo.enabled ? await moveCursorTo(page, step.click, demo) : null;
|
|
263
|
+
if (at) {
|
|
264
|
+
await page.mouse.down();
|
|
265
|
+
await page.mouse.up();
|
|
266
|
+
} else {
|
|
267
|
+
await page.click(step.click, { timeout: WAIT_TIMEOUT });
|
|
268
|
+
}
|
|
168
269
|
} else if ('fill' in step) {
|
|
169
270
|
const [sel, val] = step.fill;
|
|
271
|
+
if (demo.enabled) await moveCursorTo(page, sel, demo);
|
|
170
272
|
await page.fill(sel, val, { timeout: WAIT_TIMEOUT });
|
|
171
273
|
} else if ('type' in step) {
|
|
172
274
|
const [sel, val] = step.type;
|
|
275
|
+
if (demo.enabled) await moveCursorTo(page, sel, demo);
|
|
173
276
|
await page.locator(sel).first().pressSequentially(val, {
|
|
174
277
|
timeout: WAIT_TIMEOUT,
|
|
278
|
+
delay: demo.enabled ? demo.typeDelay : 0,
|
|
175
279
|
});
|
|
280
|
+
} else if ('pause' in step) {
|
|
281
|
+
// Explicit hold — for reading a state change before the next action.
|
|
282
|
+
const ms = Number(step.pause) || 0;
|
|
283
|
+
if (ms > 0) await page.waitForTimeout(ms);
|
|
176
284
|
} else if ('press' in step) {
|
|
177
285
|
await page.keyboard.press(step.press);
|
|
178
286
|
} else if ('waitFor' in step) {
|
|
@@ -210,7 +318,7 @@ async function execStep(page, step, baseUrl, outDir, screenshots) {
|
|
|
210
318
|
return { result, fatal };
|
|
211
319
|
}
|
|
212
320
|
|
|
213
|
-
async function run(flowPath, baseUrlArg, outDirArg, recordDirArg) {
|
|
321
|
+
async function run(flowPath, baseUrlArg, outDirArg, recordDirArg, opts = {}) {
|
|
214
322
|
let flow;
|
|
215
323
|
try {
|
|
216
324
|
flow = JSON.parse(readFileSync(resolve(flowPath), 'utf8'));
|
|
@@ -229,6 +337,17 @@ async function run(flowPath, baseUrlArg, outDirArg, recordDirArg) {
|
|
|
229
337
|
// `"record": true`. The .webm lands in the record dir (default: out-dir).
|
|
230
338
|
const doRecord = !!recordDirArg || flow.record === true;
|
|
231
339
|
const videoDir = resolve(recordDirArg || outDir);
|
|
340
|
+
// Demo mode = recording, an explicit --demo, or flow.demo. It slows the run
|
|
341
|
+
// down (cursor animation, char-by-char typing, inter-step holds) so the
|
|
342
|
+
// capture is watchable; it's a no-op for plain screenshot QA. Cursor overlay
|
|
343
|
+
// is on by default in demo mode, opt out with --no-cursor.
|
|
344
|
+
const demo = {
|
|
345
|
+
enabled: opts.demo === true || flow.demo === true || doRecord,
|
|
346
|
+
cursor: opts.cursor !== false,
|
|
347
|
+
stepDelay: Number.isFinite(opts.stepDelay) ? opts.stepDelay : DEMO_STEP_DELAY_MS,
|
|
348
|
+
typeDelay: Number.isFinite(opts.typeDelay) ? opts.typeDelay : DEMO_TYPE_DELAY_MS,
|
|
349
|
+
moveSteps: Number.isFinite(opts.moveSteps) ? opts.moveSteps : DEMO_MOVE_STEPS,
|
|
350
|
+
};
|
|
232
351
|
try {
|
|
233
352
|
mkdirSync(outDir, { recursive: true });
|
|
234
353
|
} catch {
|
|
@@ -267,6 +386,11 @@ async function run(flowPath, baseUrlArg, outDirArg, recordDirArg) {
|
|
|
267
386
|
// the clip isn't letterboxed. The .webm is flushed on context.close().
|
|
268
387
|
...(doRecord ? { recordVideo: { dir: videoDir, size: viewport } } : {}),
|
|
269
388
|
});
|
|
389
|
+
// Inject the synthetic cursor before the first navigation so it's present on
|
|
390
|
+
// every page (addInitScript re-runs on each document). Only in demo mode.
|
|
391
|
+
if (demo.enabled && demo.cursor) {
|
|
392
|
+
await context.addInitScript(MOUSE_HELPER_SRC).catch(() => {});
|
|
393
|
+
}
|
|
270
394
|
const page = await context.newPage();
|
|
271
395
|
|
|
272
396
|
page.on('console', (msg) => {
|
|
@@ -288,7 +412,7 @@ async function run(flowPath, baseUrlArg, outDirArg, recordDirArg) {
|
|
|
288
412
|
|
|
289
413
|
const started = Date.now();
|
|
290
414
|
try {
|
|
291
|
-
const { result } = await execStep(page, step, baseUrl, outDir, screenshots);
|
|
415
|
+
const { result } = await execStep(page, step, baseUrl, outDir, screenshots, demo);
|
|
292
416
|
steps.push({ index: i, action, ok: true, ms: Date.now() - started, ...result });
|
|
293
417
|
} catch (err) {
|
|
294
418
|
const entry = {
|
|
@@ -301,6 +425,12 @@ async function run(flowPath, baseUrlArg, outDirArg, recordDirArg) {
|
|
|
301
425
|
steps.push(entry);
|
|
302
426
|
if (err && err.fatal) fatalHit = true; // navigation failure: skip the rest
|
|
303
427
|
}
|
|
428
|
+
|
|
429
|
+
// Demo mode: hold between steps so the video breathes (skip after an
|
|
430
|
+
// explicit `pause`, which already held, and after a fatal step).
|
|
431
|
+
if (demo.enabled && demo.stepDelay > 0 && action !== 'pause' && !fatalHit) {
|
|
432
|
+
await page.waitForTimeout(demo.stepDelay).catch(() => {});
|
|
433
|
+
}
|
|
304
434
|
}
|
|
305
435
|
|
|
306
436
|
// Finalize a recording (if any) BEFORE emitting: saving the video requires
|
|
@@ -370,18 +500,24 @@ async function main() {
|
|
|
370
500
|
let baseUrl;
|
|
371
501
|
let outDir;
|
|
372
502
|
let recordDir;
|
|
503
|
+
const opts = {};
|
|
373
504
|
for (let i = 0; i < rest.length; i++) {
|
|
374
505
|
const a = rest[i];
|
|
375
506
|
if (a === '--base-url') baseUrl = rest[++i];
|
|
376
507
|
else if (a === '--out-dir') outDir = rest[++i];
|
|
377
508
|
else if (a === '--record-dir') recordDir = rest[++i];
|
|
509
|
+
else if (a === '--demo') opts.demo = true;
|
|
510
|
+
else if (a === '--no-cursor') opts.cursor = false;
|
|
511
|
+
else if (a === '--step-delay') opts.stepDelay = Number(rest[++i]);
|
|
512
|
+
else if (a === '--type-delay') opts.typeDelay = Number(rest[++i]);
|
|
513
|
+
else if (a === '--move-steps') opts.moveSteps = Number(rest[++i]);
|
|
378
514
|
else positional.push(a);
|
|
379
515
|
}
|
|
380
516
|
if (!positional[0]) {
|
|
381
|
-
emit({ ok: false, error: 'usage: agent-browser.mjs run <flow.json> [--base-url URL] [--out-dir DIR] [--record-dir DIR]' });
|
|
517
|
+
emit({ ok: false, error: 'usage: agent-browser.mjs run <flow.json> [--base-url URL] [--out-dir DIR] [--record-dir DIR] [--demo] [--no-cursor] [--step-delay MS] [--type-delay MS] [--move-steps N]' });
|
|
382
518
|
process.exit(1);
|
|
383
519
|
}
|
|
384
|
-
await run(positional[0], baseUrl, outDir, recordDir);
|
|
520
|
+
await run(positional[0], baseUrl, outDir, recordDir, opts);
|
|
385
521
|
return;
|
|
386
522
|
}
|
|
387
523
|
|