@assertrx/dino 1.0.5 → 1.0.7
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 +13 -13
- package/package.json +1 -1
- package/prompts/create-pr.md +97 -27
- package/scripts/.playwright-mcp/console-2026-08-27T21-43-04-193Z.log +9 -0
- package/scripts/.playwright-mcp/console-2026-08-27T21-54-18-098Z.log +1 -0
- package/scripts/.playwright-mcp/page-2026-08-27T21-43-04-389Z.yml +14 -0
- package/scripts/.playwright-mcp/page-2026-08-27T21-43-35-033Z.yml +17 -0
- package/scripts/.playwright-mcp/page-2026-08-27T21-54-18-321Z.yml +14 -0
- package/scripts/.playwright-mcp/page-2026-08-27T21-54-38-840Z.yml +17 -0
- package/scripts/.playwright-mcp/page-2026-08-27T21-54-53-294Z.yml +102 -0
- package/scripts/api-server.mjs +5 -2
- package/scripts/setup-dino-api.bat +1 -1
- package/scripts/setup-dino-api.sh +1 -1
- package/scripts/start-dino-server.bat +1 -1
- package/scripts/start-dino-server.sh +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ An Automated Verification agent based on Pi Harness
|
|
|
15
15
|
| Skill | `playwright-core` | Battle-tested Playwright patterns for writing and debugging reliable E2E, API, component, visual, accessibility, and security tests |
|
|
16
16
|
| Skill | `playwright-pom` | Page Object Model patterns for Playwright — when to use POM, how to structure page objects, and when fixtures or helpers are a better fit |
|
|
17
17
|
| Skill | `mabl-mcp` | Guidance for using the mabl MCP bridge — workspace context, running tests, retrieving results, and handling OAuth auth |
|
|
18
|
-
| Prompt | `create-pr` | Create a GitHub pull request for changes in the current workspace, installing `gh
|
|
18
|
+
| Prompt | `create-pr` | Create a GitHub pull request for changes in the current workspace against a repository URL, installing `gh`, authenticating from an optional env file, and setting up git if needed |
|
|
19
19
|
| Prompt | `generate-bdd-from-url` | Generate exhaustive Gherkin BDD scenarios for a single page by inspecting it with `playwright-cli` or Playwright MCP |
|
|
20
20
|
| Prompt | `generate-pom-from-url` | Generate Playwright Page Object Models from a live URL using the Playwright MCP bridge (`browser_*` tools) |
|
|
21
21
|
| Prompt | `generate-pom-from-url-cli` | Generate Playwright Page Object Models from a live URL using `playwright-cli` commands |
|
|
@@ -49,7 +49,7 @@ For browser-based tasks, **prefer the `playwright-cli` prompts**. They are more
|
|
|
49
49
|
|
|
50
50
|
| Prompt | What it does | Example usage |
|
|
51
51
|
|--------|--------------|---------------|
|
|
52
|
-
| `/create-pr` | Create a GitHub pull request for changes in the current workspace, installing `gh`
|
|
52
|
+
| `/create-pr` | Create a GitHub pull request for changes in the current workspace against a given repository URL, installing `gh` and authenticating from an optional auth env file. | `/create-pr https://github.com/octocat/repo github-auth.env` |
|
|
53
53
|
| `/generate-bdd-from-url` | Inspect a page and generate exhaustive Gherkin BDD scenarios for that page only. | `/generate-bdd-from-url https://example.com tests/features` |
|
|
54
54
|
| `/generate-pom-from-url-cli` | Generate Playwright Page Object Models from a live URL using `playwright-cli` (**preferred**). | `/generate-pom-from-url-cli https://example.com tests/pom` |
|
|
55
55
|
| `/generate-pom-from-url` | Generate Page Object Models from a live URL using the Playwright MCP bridge (**fallback only**). | `/generate-pom-from-url https://example.com tests/pom` |
|
|
@@ -310,7 +310,7 @@ This single script:
|
|
|
310
310
|
1. Checks that Node.js is installed
|
|
311
311
|
2. Installs `pi` globally if missing
|
|
312
312
|
3. Installs `@assertrx/dino` via `pi install` if missing
|
|
313
|
-
4. Starts the API server on port
|
|
313
|
+
4. Starts the API server on port 4003
|
|
314
314
|
|
|
315
315
|
### Manual setup
|
|
316
316
|
|
|
@@ -367,7 +367,7 @@ All POST bodies accept auth/model options, `cwd` (workspace directory, defaults
|
|
|
367
367
|
| Prompt name | Required params |
|
|
368
368
|
|-------------|---------------|
|
|
369
369
|
| `setup-playwright` | _none_ |
|
|
370
|
-
| `create-pr` | _none_ |
|
|
370
|
+
| `create-pr` | _none_ (optional: `repoUrl`, `authEnvFile`) |
|
|
371
371
|
| `generate-pom-from-url` | `url` |
|
|
372
372
|
| `generate-pom-from-url-cli` | `url` |
|
|
373
373
|
| `generate-bdd-from-url` | `url` |
|
|
@@ -378,28 +378,28 @@ All POST bodies accept auth/model options, `cwd` (workspace directory, defaults
|
|
|
378
378
|
|
|
379
379
|
```bash
|
|
380
380
|
# List all prompts
|
|
381
|
-
curl http://localhost:
|
|
381
|
+
curl http://localhost:4003/api/prompts
|
|
382
382
|
|
|
383
383
|
# Discover providers and their auth status
|
|
384
|
-
curl http://localhost:
|
|
384
|
+
curl http://localhost:4003/api/providers
|
|
385
385
|
|
|
386
386
|
# List models available to the server (optionally per provider)
|
|
387
|
-
curl http://localhost:
|
|
388
|
-
curl "http://localhost:
|
|
387
|
+
curl http://localhost:4003/api/models
|
|
388
|
+
curl "http://localhost:4003/api/models?provider=anthropic"
|
|
389
389
|
|
|
390
390
|
# Execute a prompt (SSE streaming, auth from env vars)
|
|
391
|
-
curl -X POST http://localhost:
|
|
391
|
+
curl -X POST http://localhost:4003/api/prompts/setup-playwright \
|
|
392
392
|
-H "Content-Type: application/json" \
|
|
393
393
|
-d '{"cwd": "/path/to/workspace"}'
|
|
394
394
|
|
|
395
395
|
# Execute with a single provider key + model selection
|
|
396
396
|
# (env: export OPENAI_API_KEY=sk-... then:)
|
|
397
|
-
curl -X POST http://localhost:
|
|
397
|
+
curl -X POST http://localhost:4003/api/prompts/setup-playwright \
|
|
398
398
|
-H "Content-Type: application/json" \
|
|
399
399
|
-d '{"cwd": "/path/to/workspace", "model": "openai/gpt-5.2"}'
|
|
400
400
|
|
|
401
401
|
# Execute with multiple per-request API keys and an explicit model
|
|
402
|
-
curl -X POST http://localhost:
|
|
402
|
+
curl -X POST http://localhost:4003/api/prompts/setup-playwright \
|
|
403
403
|
-H "Content-Type: application/json" \
|
|
404
404
|
-d '{
|
|
405
405
|
"cwd": "/path/to/workspace",
|
|
@@ -408,7 +408,7 @@ curl -X POST http://localhost:3000/api/prompts/setup-playwright \
|
|
|
408
408
|
}'
|
|
409
409
|
|
|
410
410
|
# Execute with URL parameter (non-streaming JSON response)
|
|
411
|
-
curl -X POST http://localhost:
|
|
411
|
+
curl -X POST http://localhost:4003/api/prompts/generate-pom-from-url-cli \
|
|
412
412
|
-H "Content-Type: application/json" \
|
|
413
413
|
-d '{"url": "https://example.com", "outputDir": "tests/pom", "stream": false}'
|
|
414
414
|
```
|
|
@@ -439,7 +439,7 @@ event: error → {"message": "..."} # error
|
|
|
439
439
|
|
|
440
440
|
| Variable | Default | Description |
|
|
441
441
|
|----------|---------|-------------|
|
|
442
|
-
| `PORT` | `
|
|
442
|
+
| `PORT` | `4003` | Server port |
|
|
443
443
|
| `HOST` | `0.0.0.0` | Server host |
|
|
444
444
|
| Provider env vars | — | Any provider's standard env var (e.g. `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`); per-request `apiKeys`/`apiKey` override these |
|
|
445
445
|
|
package/package.json
CHANGED
package/prompts/create-pr.md
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Create a GitHub PR for current changes
|
|
2
|
+
description: Create a GitHub PR for current changes using a repository URL and optional auth env file
|
|
3
|
+
argument-hint: "[repo-url] [auth-env-file]"
|
|
3
4
|
---
|
|
4
5
|
|
|
5
|
-
Create a GitHub pull request for the changes in the current workspace. Install the GitHub CLI (`gh`) if it is missing, and handle both existing git repos and brand-new projects.
|
|
6
|
+
Create a GitHub pull request for the changes in the current workspace, targeting the GitHub repository at ${1:-the origin remote (or a repository you will be asked for)}. Install the GitHub CLI (`gh`) if it is missing, and handle both existing git repos and brand-new projects.
|
|
7
|
+
|
|
8
|
+
## Arguments
|
|
9
|
+
|
|
10
|
+
- `$1` — GitHub repository URL (e.g. `https://github.com/octocat/repo`, `git@github.com:octocat/repo.git`, or `owner/repo`). If empty, fall back to the existing `origin` remote; if there is none, ask the user.
|
|
11
|
+
- `$2` — optional env file with GitHub login details (see **Authentication**).
|
|
6
12
|
|
|
7
13
|
## Steps
|
|
8
14
|
|
|
@@ -17,11 +23,48 @@ Create a GitHub pull request for the changes in the current workspace. Install t
|
|
|
17
23
|
- **Fedora / RHEL**: `sudo dnf install -y gh`
|
|
18
24
|
- After installing, verify with `gh --version`.
|
|
19
25
|
|
|
20
|
-
2. **
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
2. **Authenticate `gh`**.
|
|
27
|
+
|
|
28
|
+
### Preferred: auth env file (`$2`)
|
|
29
|
+
|
|
30
|
+
If `$2` was provided:
|
|
31
|
+
|
|
32
|
+
- Verify the file exists before use; if it is missing, report that and fall back to existing `gh` authentication.
|
|
33
|
+
- The env file should contain variables such as:
|
|
34
|
+
```bash
|
|
35
|
+
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
|
|
36
|
+
GITHUB_USERNAME=octocat
|
|
37
|
+
GIT_USER_NAME=Octo Cat
|
|
38
|
+
GIT_USER_EMAIL=octocat@example.com
|
|
39
|
+
```
|
|
40
|
+
`GITHUB_TOKEN` (a personal access token with repo scope) is required; the remaining variables are used for git identity.
|
|
41
|
+
- Load the file and authenticate in a single bash command, and **do not echo, log, or persist the values anywhere**:
|
|
42
|
+
```bash
|
|
43
|
+
set -a; . <auth-env-file>; set +a
|
|
44
|
+
printf '%s' "$GITHUB_TOKEN" | gh auth login --with-token
|
|
45
|
+
gh auth setup-git
|
|
46
|
+
gh auth status
|
|
47
|
+
```
|
|
48
|
+
- `gh auth setup-git` configures git's credential helper so `git push` over HTTPS works without embedding the token in remote URLs.
|
|
49
|
+
- Never print the token, never write it into git config or remote URLs, and never commit the env file. Make sure it is listed in `.gitignore` if it lives inside the workspace.
|
|
50
|
+
|
|
51
|
+
### Fallback: existing `gh` authentication
|
|
52
|
+
|
|
53
|
+
If no env file was provided:
|
|
54
|
+
|
|
55
|
+
- Run `gh auth status`.
|
|
56
|
+
- If not authenticated, ask the user to run `gh auth login` manually (do not paste tokens into chat). Do not proceed until authenticated.
|
|
57
|
+
|
|
58
|
+
3. **Resolve the target repository**.
|
|
59
|
+
- Normalize `$1` to `owner/repo` (accept `https://github.com/owner/repo.git`, `git@github.com:owner/repo.git`, or `owner/repo`).
|
|
60
|
+
- If `$1` is empty, use the existing `origin` remote (`git remote get-url origin`).
|
|
61
|
+
- If neither exists, ask the user for the repository URL before proceeding.
|
|
62
|
+
- Determine the default (base) branch of the target repository:
|
|
63
|
+
```bash
|
|
64
|
+
gh repo view <owner>/<repo> --json defaultBranchRef --jq .defaultBranchRef.name
|
|
65
|
+
```
|
|
23
66
|
|
|
24
|
-
|
|
67
|
+
4. **Detect git project state**.
|
|
25
68
|
- Check whether `.git` exists in the current workspace.
|
|
26
69
|
|
|
27
70
|
### A. Existing git project
|
|
@@ -32,23 +75,35 @@ If `.git` exists:
|
|
|
32
75
|
- Run `git status --short` to see modified/untracked files.
|
|
33
76
|
- Show the user a concise summary of the changes.
|
|
34
77
|
|
|
35
|
-
2. **
|
|
78
|
+
2. **Point the remote at the target repository**.
|
|
79
|
+
- If `$1` was provided:
|
|
80
|
+
- If no `origin` remote exists, run `git remote add origin <repo-url>`.
|
|
81
|
+
- If `origin` points elsewhere, run `git remote set-url origin <repo-url>` (tell the user before changing it).
|
|
82
|
+
- If `$1` is empty, keep the existing `origin` as-is.
|
|
83
|
+
|
|
84
|
+
3. **Prepare a branch**.
|
|
36
85
|
- Get the current branch with `git branch --show-current`.
|
|
37
|
-
- If currently on
|
|
86
|
+
- If currently on the default branch (`main`/`master`), create and switch to a feature branch:
|
|
38
87
|
```bash
|
|
39
88
|
git checkout -b update/<short-description>
|
|
40
89
|
```
|
|
41
90
|
- Use a descriptive branch name based on the changes.
|
|
42
91
|
|
|
43
|
-
|
|
92
|
+
4. **Configure git identity if needed**.
|
|
44
93
|
- Run `git config user.name` and `git config user.email`.
|
|
45
|
-
- If either is missing,
|
|
94
|
+
- If either is missing and an auth env file was provided, source it in a single bash command and set the identity locally from `GIT_USER_NAME`/`GIT_USER_EMAIL` (fall back to `GITHUB_USERNAME` for the name):
|
|
95
|
+
```bash
|
|
96
|
+
set -a; . <auth-env-file>; set +a
|
|
97
|
+
git config user.name "${GIT_USER_NAME:-$GITHUB_USERNAME}"
|
|
98
|
+
git config user.email "$GIT_USER_EMAIL"
|
|
99
|
+
```
|
|
100
|
+
- Otherwise, ask the user for a name and email, then set them locally:
|
|
46
101
|
```bash
|
|
47
102
|
git config user.name "Name"
|
|
48
103
|
git config user.email "email@example.com"
|
|
49
104
|
```
|
|
50
105
|
|
|
51
|
-
|
|
106
|
+
5. **Commit and push**.
|
|
52
107
|
- Stage the relevant changes with `git add`.
|
|
53
108
|
- Commit with a clear message. Ask the user for a message if one is not obvious, or use a sensible default summarizing the changes.
|
|
54
109
|
- Push the branch:
|
|
@@ -56,32 +111,45 @@ If `.git` exists:
|
|
|
56
111
|
git push -u origin <branch-name>
|
|
57
112
|
```
|
|
58
113
|
|
|
59
|
-
|
|
60
|
-
- Use `gh pr create` with non-interactive flags:
|
|
114
|
+
6. **Create the pull request**.
|
|
115
|
+
- Use `gh pr create` with non-interactive flags against the target repository:
|
|
61
116
|
```bash
|
|
62
|
-
gh pr create --title "<title>" --body "<body>" --base <base-branch>
|
|
117
|
+
gh pr create --repo <owner>/<repo> --title "<title>" --body "<body>" --base <base-branch>
|
|
63
118
|
```
|
|
64
119
|
- Derive the PR title and body from the commit message and changed files.
|
|
65
|
-
- If a PR already exists for this branch, run `gh pr view <branch>` and report the URL instead.
|
|
120
|
+
- If a PR already exists for this branch, run `gh pr view <branch> --repo <owner>/<repo>` and report the URL instead.
|
|
66
121
|
|
|
67
122
|
### B. New project without git
|
|
68
123
|
|
|
69
124
|
If `.git` does not exist:
|
|
70
125
|
|
|
71
|
-
1. **
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
126
|
+
1. **Resolve the repository**.
|
|
127
|
+
- If `$1` was provided, use its `owner/repo` (do not ask the user).
|
|
128
|
+
- Check whether the repository already exists with `gh repo view <owner>/<repo>`.
|
|
129
|
+
- If it does not exist, ask whether it should be public or private, then create it:
|
|
130
|
+
```bash
|
|
131
|
+
gh repo create <owner>/<repo> --<public|private>
|
|
132
|
+
```
|
|
133
|
+
- Ask the user before creating a public repo.
|
|
134
|
+
- If `$1` is empty, **ask the user** for:
|
|
135
|
+
- The desired GitHub repository name (or full URL).
|
|
136
|
+
- Whether it should be public or private.
|
|
137
|
+
- The GitHub owner/organization (default to the authenticated user).
|
|
138
|
+
- Then create the remote repository:
|
|
139
|
+
```bash
|
|
140
|
+
gh repo create <owner>/<repo> --<public|private>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
2. **Initialize git and the remote**.
|
|
77
144
|
- Run:
|
|
78
145
|
```bash
|
|
79
|
-
|
|
146
|
+
git init -b main
|
|
147
|
+
git remote add origin <repo-url>
|
|
80
148
|
```
|
|
81
|
-
- If
|
|
149
|
+
- If `main` is not the desired default branch name, use `master` or ask the user.
|
|
82
150
|
|
|
83
151
|
3. **Configure git identity**.
|
|
84
|
-
- Ask for name and email if not already set globally.
|
|
152
|
+
- Ask for name and email if not already set globally, or use `GIT_USER_NAME`/`GIT_USER_EMAIL` (falling back to `GITHUB_USERNAME`) from the auth env file when provided (see step 4.4 in section A).
|
|
85
153
|
|
|
86
154
|
4. **Commit the current code**.
|
|
87
155
|
- Run:
|
|
@@ -90,21 +158,23 @@ If `.git` does not exist:
|
|
|
90
158
|
git commit -m "Initial commit"
|
|
91
159
|
git push -u origin main
|
|
92
160
|
```
|
|
93
|
-
- If `main` is not the default branch name, use `master` or ask the user.
|
|
94
161
|
|
|
95
162
|
5. **Report the repository URL**.
|
|
96
163
|
|
|
97
164
|
## Rules
|
|
98
165
|
|
|
99
|
-
- Never paste credentials or tokens into the chat.
|
|
166
|
+
- Never paste credentials or tokens into the chat; never echo, log, or print the auth env file contents.
|
|
167
|
+
- Never write the token into remote URLs or git config.
|
|
168
|
+
- Do not run interactive `gh auth login` automatically; use the auth env file when provided, otherwise prompt the user to authenticate manually.
|
|
169
|
+
- Ensure the auth env file is listed in `.gitignore` and never committed; suggest deleting it when the session is complete.
|
|
100
170
|
- Ask the user before creating a public repo if privacy matters.
|
|
101
|
-
- Do not run `gh auth login` automatically; prompt the user to authenticate manually.
|
|
102
171
|
- Do not overwrite or ignore local git configuration without asking.
|
|
103
172
|
- If there are no changes to commit, report that and stop.
|
|
104
173
|
- Keep the PR title/body concise and relevant to the actual changes.
|
|
105
174
|
|
|
106
175
|
After completing, summarize:
|
|
107
176
|
- Whether `gh` was installed or already present.
|
|
177
|
+
- How authentication was handled (auth env file or existing `gh` login).
|
|
108
178
|
- The repository and branch used.
|
|
109
179
|
- The commit message and PR URL (if created).
|
|
110
180
|
- Any errors or manual steps the user still needs to take.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[ 261ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o @ https://www.saucedemo.com/:0
|
|
2
|
+
[ 273ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/summed-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
3
|
+
[ 1303ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/unique-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
4
|
+
[ 10394ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/summed-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
5
|
+
[ 11462ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/unique-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
6
|
+
[ 30324ms] [ERROR] Access to fetch at 'https://submit.backtrace.io/UNIVERSE/TOKEN/json' from origin 'https://www.saucedemo.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. @ https://www.saucedemo.com/:0
|
|
7
|
+
[ 30324ms] [ERROR] Failed to load resource: net::ERR_FAILED @ https://submit.backtrace.io/UNIVERSE/TOKEN/json:0
|
|
8
|
+
[ 30538ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/summed-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
9
|
+
[ 31620ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ https://events.backtrace.io/api/unique-events/submit?universe=UNIVERSE&token=TOKEN:0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[ 289ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o @ https://www.saucedemo.com/:0
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
- generic [ref=e3]:
|
|
2
|
+
- generic [ref=e4]: Swag Labs
|
|
3
|
+
- generic [ref=e5]:
|
|
4
|
+
- generic [ref=e9]:
|
|
5
|
+
- textbox "Username" [ref=e11]
|
|
6
|
+
- textbox "Password" [ref=e13]
|
|
7
|
+
- button "Login" [ref=e15] [cursor=pointer]
|
|
8
|
+
- generic [ref=e17]:
|
|
9
|
+
- generic [ref=e18]:
|
|
10
|
+
- heading "Accepted usernames are:" [level=4] [ref=e19]
|
|
11
|
+
- text: standard_userlocked_out_userproblem_userperformance_glitch_usererror_uservisual_user
|
|
12
|
+
- generic [ref=e20]:
|
|
13
|
+
- heading "Password for all users:" [level=4] [ref=e21]
|
|
14
|
+
- text: secret_sauce
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
- generic [ref=e3]:
|
|
2
|
+
- generic [ref=e4]: Swag Labs
|
|
3
|
+
- generic [ref=e5]:
|
|
4
|
+
- generic [ref=e9]:
|
|
5
|
+
- textbox "Username" [ref=e11]: invalid_user
|
|
6
|
+
- textbox "Password" [ref=e13]: wrong_password
|
|
7
|
+
- heading [level=3] [ref=e26]:
|
|
8
|
+
- button [ref=e27] [cursor=pointer]
|
|
9
|
+
- text: "Epic sadface: Username and password do not match any user in this service"
|
|
10
|
+
- button "Login" [active] [ref=e15] [cursor=pointer]
|
|
11
|
+
- generic [ref=e17]:
|
|
12
|
+
- generic [ref=e18]:
|
|
13
|
+
- heading "Accepted usernames are:" [level=4] [ref=e19]
|
|
14
|
+
- text: standard_userlocked_out_userproblem_userperformance_glitch_usererror_uservisual_user
|
|
15
|
+
- generic [ref=e20]:
|
|
16
|
+
- heading "Password for all users:" [level=4] [ref=e21]
|
|
17
|
+
- text: secret_sauce
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
- generic [ref=e3]:
|
|
2
|
+
- generic [ref=e4]: Swag Labs
|
|
3
|
+
- generic [ref=e5]:
|
|
4
|
+
- generic [ref=e9]:
|
|
5
|
+
- textbox "Username" [ref=e11]
|
|
6
|
+
- textbox "Password" [ref=e13]
|
|
7
|
+
- button "Login" [ref=e15] [cursor=pointer]
|
|
8
|
+
- generic [ref=e17]:
|
|
9
|
+
- generic [ref=e18]:
|
|
10
|
+
- heading "Accepted usernames are:" [level=4] [ref=e19]
|
|
11
|
+
- text: standard_userlocked_out_userproblem_userperformance_glitch_usererror_uservisual_user
|
|
12
|
+
- generic [ref=e20]:
|
|
13
|
+
- heading "Password for all users:" [level=4] [ref=e21]
|
|
14
|
+
- text: secret_sauce
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
- generic [ref=e3]:
|
|
2
|
+
- generic [ref=e4]: Swag Labs
|
|
3
|
+
- generic [ref=e5]:
|
|
4
|
+
- generic [ref=e9]:
|
|
5
|
+
- textbox "Username" [ref=e11]
|
|
6
|
+
- textbox "Password" [ref=e13]
|
|
7
|
+
- heading [level=3] [ref=e26]:
|
|
8
|
+
- button [ref=e27] [cursor=pointer]
|
|
9
|
+
- text: "Epic sadface: Username is required"
|
|
10
|
+
- button "Login" [active] [ref=e15] [cursor=pointer]
|
|
11
|
+
- generic [ref=e17]:
|
|
12
|
+
- generic [ref=e18]:
|
|
13
|
+
- heading "Accepted usernames are:" [level=4] [ref=e19]
|
|
14
|
+
- text: standard_userlocked_out_userproblem_userperformance_glitch_usererror_uservisual_user
|
|
15
|
+
- generic [ref=e20]:
|
|
16
|
+
- heading "Password for all users:" [level=4] [ref=e21]
|
|
17
|
+
- text: secret_sauce
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
- generic [ref=e30]:
|
|
2
|
+
- generic [ref=e31]:
|
|
3
|
+
- generic [ref=e32]:
|
|
4
|
+
- generic [ref=e33]:
|
|
5
|
+
- generic [ref=e34]:
|
|
6
|
+
- button "Open Menu" [ref=e35] [cursor=pointer]
|
|
7
|
+
- img "Open Menu" [ref=e36]
|
|
8
|
+
- generic [ref=e37]: Swag Labs
|
|
9
|
+
- generic [ref=e41]:
|
|
10
|
+
- generic [ref=e42]: Products
|
|
11
|
+
- generic [ref=e44] [cursor=pointer]:
|
|
12
|
+
- generic [ref=e45]: Name (A to Z)
|
|
13
|
+
- combobox [ref=e46]:
|
|
14
|
+
- option "Name (A to Z)" [selected]
|
|
15
|
+
- option "Name (Z to A)"
|
|
16
|
+
- option "Price (low to high)"
|
|
17
|
+
- option "Price (high to low)"
|
|
18
|
+
- generic [ref=e50]:
|
|
19
|
+
- generic [ref=e51]:
|
|
20
|
+
- link [ref=e53] [cursor=pointer]:
|
|
21
|
+
- /url: "#"
|
|
22
|
+
- img "Sauce Labs Backpack" [ref=e54]
|
|
23
|
+
- generic [ref=e55]:
|
|
24
|
+
- generic [ref=e56]:
|
|
25
|
+
- link "Sauce Labs Backpack" [ref=e57] [cursor=pointer]:
|
|
26
|
+
- /url: "#"
|
|
27
|
+
- generic [ref=e59]: carry.allTheThings() with the sleek, streamlined Sly Pack that melds uncompromising style with unequaled laptop and tablet protection.
|
|
28
|
+
- generic [ref=e60]:
|
|
29
|
+
- generic [ref=e61]: $29.99
|
|
30
|
+
- button "Add to cart" [ref=e62] [cursor=pointer]
|
|
31
|
+
- generic [ref=e63]:
|
|
32
|
+
- link [ref=e65] [cursor=pointer]:
|
|
33
|
+
- /url: "#"
|
|
34
|
+
- img "Sauce Labs Bike Light" [ref=e66]
|
|
35
|
+
- generic [ref=e67]:
|
|
36
|
+
- generic [ref=e68]:
|
|
37
|
+
- link "Sauce Labs Bike Light" [ref=e69] [cursor=pointer]:
|
|
38
|
+
- /url: "#"
|
|
39
|
+
- generic [ref=e71]: A red light isn't the desired state in testing but it sure helps when riding your bike at night. Water-resistant with 3 lighting modes, 1 AAA battery included.
|
|
40
|
+
- generic [ref=e72]:
|
|
41
|
+
- generic [ref=e73]: $9.99
|
|
42
|
+
- button "Add to cart" [ref=e74] [cursor=pointer]
|
|
43
|
+
- generic [ref=e75]:
|
|
44
|
+
- link [ref=e77] [cursor=pointer]:
|
|
45
|
+
- /url: "#"
|
|
46
|
+
- img "Sauce Labs Bolt T-Shirt" [ref=e78]
|
|
47
|
+
- generic [ref=e79]:
|
|
48
|
+
- generic [ref=e80]:
|
|
49
|
+
- link "Sauce Labs Bolt T-Shirt" [ref=e81] [cursor=pointer]:
|
|
50
|
+
- /url: "#"
|
|
51
|
+
- generic [ref=e83]: Get your testing superhero on with the Sauce Labs bolt T-shirt. From American Apparel, 100% ringspun combed cotton, heather gray with red bolt.
|
|
52
|
+
- generic [ref=e84]:
|
|
53
|
+
- generic [ref=e85]: $15.99
|
|
54
|
+
- button "Add to cart" [ref=e86] [cursor=pointer]
|
|
55
|
+
- generic [ref=e87]:
|
|
56
|
+
- link [ref=e89] [cursor=pointer]:
|
|
57
|
+
- /url: "#"
|
|
58
|
+
- img "Sauce Labs Fleece Jacket" [ref=e90]
|
|
59
|
+
- generic [ref=e91]:
|
|
60
|
+
- generic [ref=e92]:
|
|
61
|
+
- link "Sauce Labs Fleece Jacket" [ref=e93] [cursor=pointer]:
|
|
62
|
+
- /url: "#"
|
|
63
|
+
- generic [ref=e95]: It's not every day that you come across a midweight quarter-zip fleece jacket capable of handling everything from a relaxing day outdoors to a busy day at the office.
|
|
64
|
+
- generic [ref=e96]:
|
|
65
|
+
- generic [ref=e97]: $49.99
|
|
66
|
+
- button "Add to cart" [ref=e98] [cursor=pointer]
|
|
67
|
+
- generic [ref=e99]:
|
|
68
|
+
- link [ref=e101] [cursor=pointer]:
|
|
69
|
+
- /url: "#"
|
|
70
|
+
- img "Sauce Labs Onesie" [ref=e102]
|
|
71
|
+
- generic [ref=e103]:
|
|
72
|
+
- generic [ref=e104]:
|
|
73
|
+
- link "Sauce Labs Onesie" [ref=e105] [cursor=pointer]:
|
|
74
|
+
- /url: "#"
|
|
75
|
+
- generic [ref=e107]: Rib snap infant onesie for the junior automation engineer in development. Reinforced 3-snap bottom closure, two-needle hemmed sleeved and bottom won't unravel.
|
|
76
|
+
- generic [ref=e108]:
|
|
77
|
+
- generic [ref=e109]: $7.99
|
|
78
|
+
- button "Add to cart" [ref=e110] [cursor=pointer]
|
|
79
|
+
- generic [ref=e111]:
|
|
80
|
+
- link [ref=e113] [cursor=pointer]:
|
|
81
|
+
- /url: "#"
|
|
82
|
+
- img "Test.allTheThings() T-Shirt (Red)" [ref=e114]
|
|
83
|
+
- generic [ref=e115]:
|
|
84
|
+
- generic [ref=e116]:
|
|
85
|
+
- link "Test.allTheThings() T-Shirt (Red)" [ref=e117] [cursor=pointer]:
|
|
86
|
+
- /url: "#"
|
|
87
|
+
- generic [ref=e119]: This classic Sauce Labs t-shirt is perfect to wear when cozying up to your keyboard to automate a few tests. Super-soft and comfy ringspun combed cotton.
|
|
88
|
+
- generic [ref=e120]:
|
|
89
|
+
- generic [ref=e121]: $15.99
|
|
90
|
+
- button "Add to cart" [ref=e122] [cursor=pointer]
|
|
91
|
+
- contentinfo [ref=e123]:
|
|
92
|
+
- list [ref=e124]:
|
|
93
|
+
- listitem [ref=e125]:
|
|
94
|
+
- link "Twitter" [ref=e126] [cursor=pointer]:
|
|
95
|
+
- /url: https://twitter.com/saucelabs
|
|
96
|
+
- listitem [ref=e127]:
|
|
97
|
+
- link "Facebook" [ref=e128] [cursor=pointer]:
|
|
98
|
+
- /url: https://www.facebook.com/saucelabs
|
|
99
|
+
- listitem [ref=e129]:
|
|
100
|
+
- link "LinkedIn" [ref=e130] [cursor=pointer]:
|
|
101
|
+
- /url: https://www.linkedin.com/company/sauce-labs/
|
|
102
|
+
- generic [ref=e131]: © 2026 Sauce Labs. All Rights Reserved. Terms of Service | Privacy Policy
|
package/scripts/api-server.mjs
CHANGED
|
@@ -28,7 +28,10 @@ const PROMPT_REGISTRY = {
|
|
|
28
28
|
},
|
|
29
29
|
"create-pr": {
|
|
30
30
|
file: "create-pr.md",
|
|
31
|
-
params: [
|
|
31
|
+
params: [
|
|
32
|
+
{ name: "repoUrl", required: false, description: "GitHub repository URL (https://github.com/owner/repo, owner/repo, or git@ URL; default: existing origin remote)" },
|
|
33
|
+
{ name: "authEnvFile", required: false, description: "Env file with GitHub login (GITHUB_TOKEN, GITHUB_USERNAME, GIT_USER_NAME, GIT_USER_EMAIL)" },
|
|
34
|
+
],
|
|
32
35
|
description: "Create a GitHub pull request for changes in the current workspace",
|
|
33
36
|
},
|
|
34
37
|
"generate-pom-from-url": {
|
|
@@ -542,7 +545,7 @@ app.post("/api/prompts/:name", async (request, reply) => {
|
|
|
542
545
|
});
|
|
543
546
|
|
|
544
547
|
// ── Start server ───────────────────────────────────────────────────────────
|
|
545
|
-
const PORT = parseInt(process.env.PORT || "
|
|
548
|
+
const PORT = parseInt(process.env.PORT || "4003", 10);
|
|
546
549
|
const HOST = process.env.HOST || "0.0.0.0";
|
|
547
550
|
|
|
548
551
|
try {
|
|
@@ -10,7 +10,7 @@ if not exist "%DINO_DIR%" (
|
|
|
10
10
|
exit /b 1
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
echo Starting Dino API server on port %PORT% (default:
|
|
13
|
+
echo Starting Dino API server on port %PORT% (default: 4003)...
|
|
14
14
|
|
|
15
15
|
:: The published npm package may not include api-server.mjs, so fall back
|
|
16
16
|
:: to the local source copy when this script is run from the Dino repo.
|