@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 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` and setting up git if needed |
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` if needed. | `/create-pr` |
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 3000
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:3000/api/prompts
381
+ curl http://localhost:4003/api/prompts
382
382
 
383
383
  # Discover providers and their auth status
384
- curl http://localhost:3000/api/providers
384
+ curl http://localhost:4003/api/providers
385
385
 
386
386
  # List models available to the server (optionally per provider)
387
- curl http://localhost:3000/api/models
388
- curl "http://localhost:3000/api/models?provider=anthropic"
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:3000/api/prompts/setup-playwright \
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:3000/api/prompts/setup-playwright \
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:3000/api/prompts/setup-playwright \
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:3000/api/prompts/generate-pom-from-url-cli \
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` | `3000` | Server 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assertrx/dino",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "A friendly purple dinosaur pi package with a custom TUI header, theme, and Playwright skills.",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -1,8 +1,14 @@
1
1
  ---
2
- description: Create a GitHub PR for current changes, installing gh and git setup if needed
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. **Check `gh` authentication**.
21
- - Run `gh auth status`.
22
- - If not authenticated, ask the user to run `gh auth login` manually (do not paste tokens into chat). Do not proceed until authenticated.
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
- 3. **Detect git project state**.
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. **Prepare a branch**.
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 `main` or `master`, create and switch to a feature branch:
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
- 3. **Configure git identity if needed**.
92
+ 4. **Configure git identity if needed**.
44
93
  - Run `git config user.name` and `git config user.email`.
45
- - If either is missing, ask the user for a name and email, then set them locally:
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
- 4. **Commit and push**.
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
- 5. **Create the pull request**.
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. **Ask the user** for:
72
- - The desired GitHub repository name.
73
- - Whether it should be public or private.
74
- - The GitHub owner/organization (default to the authenticated user).
75
-
76
- 2. **Create the remote repository**.
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
- gh repo create <owner>/<repo> --<public|private> --source=. --remote=origin --push
146
+ git init -b main
147
+ git remote add origin <repo-url>
80
148
  ```
81
- - If the user only provided a repo name without an owner, use `gh repo create <repo> --<public|private> --source=. --remote=origin --push`.
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
@@ -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 || "3000", 10);
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 {
@@ -61,7 +61,7 @@ echo [4/4] Starting Dino API server...
61
61
  echo.
62
62
 
63
63
  :: Defaults — override via env vars
64
- if "%PORT%"=="" set PORT=3000
64
+ if "%PORT%"=="" set PORT=4003
65
65
  if "%HOST%"=="" set HOST=0.0.0.0
66
66
 
67
67
  echo Port: %PORT%
@@ -40,7 +40,7 @@ fi
40
40
  echo "[4/4] Starting Dino API server..."
41
41
  echo ""
42
42
 
43
- PORT="${PORT:-3000}"
43
+ PORT="${PORT:-4003}"
44
44
  HOST="${HOST:-0.0.0.0}"
45
45
 
46
46
  echo " Port: ${PORT}"
@@ -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: 3000)...
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.
@@ -12,5 +12,5 @@ if [ ! -d "${DINO_DIR}" ]; then
12
12
  exit 1
13
13
  fi
14
14
 
15
- echo "Starting Dino API server on port ${PORT:-3000}..."
15
+ echo "Starting Dino API server on port ${PORT:-4003}..."
16
16
  exec node "${DINO_DIR}/scripts/api-server.mjs"