@debugg-ai/debugg-ai-mcp 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/handlers/testPageChangesHandler.js +13 -0
- package/dist/types/index.js +16 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -75,7 +75,7 @@ Runs an AI browser agent against your app. The agent navigates, interacts, and r
|
|
|
75
75
|
| `username` | string | Username for login (ephemeral — not persisted) |
|
|
76
76
|
| `password` | string | Password for login (ephemeral — not persisted) |
|
|
77
77
|
| `loginCredentials` | array | Accounts for logins the agent hits **during** the task — `[{username, password, label?}]` |
|
|
78
|
-
| `useEnvironmentCredentials` | boolean | Default `true`. `false` forbids auto-filling the environment's stored credentials |
|
|
78
|
+
| `useEnvironmentCredentials` | boolean | Default `true`. `false` forbids auto-filling the environment's stored credentials; with no account named it means **do not log in at all** |
|
|
79
79
|
| `freshSession` | boolean | Default `false`. `true` forces a real login instead of reusing the warm session held for that account |
|
|
80
80
|
| `auth` | object | Auth precondition — `{precondition, entryUrl, deepUrl, environmentId, username, password}` |
|
|
81
81
|
| `repoName` | string | Override auto-detected git repo name (e.g. `my-org/my-repo`) |
|
|
@@ -90,7 +90,9 @@ Naming an account only in `description` does **not** make the agent use it — i
|
|
|
90
90
|
- `auth.username` / `auth.password` — pins the precondition login when you also use `auth.precondition: "login"`.
|
|
91
91
|
- `loginCredentials` — accounts for a login form the agent reaches **part-way through** the task. This is the one for flows like *set a password → get bounced to sign-in → log in as the account you just created*, where splitting into separate calls would lose browser state.
|
|
92
92
|
|
|
93
|
-
Set `useEnvironmentCredentials: false` when a silent fallback to the default test user would invalidate the check.
|
|
93
|
+
Set `useEnvironmentCredentials: false` when a silent fallback to the default test user would invalidate the check.
|
|
94
|
+
|
|
95
|
+
**Checking a page that needs no login at all?** Pass `useEnvironmentCredentials: false` and name no account. That combination means exactly what it says — *do not log in* — and the run skips authentication entirely instead of hunting for a login form. Use it for public pages, marketing sites, docs, and anything pre-auth. It is also faster: on the default (`auto`) the agent will follow a "Log in" link off your page and try the environment's stored account before it evaluates anything.
|
|
94
96
|
|
|
95
97
|
##### Session reuse: why a check can report "no login form"
|
|
96
98
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Executes the App Evaluation Workflow via the 4-step pattern:
|
|
4
4
|
* find template → execute → poll → result
|
|
5
5
|
*/
|
|
6
|
+
import { meansDoNotLogIn, } from '../types/index.js';
|
|
6
7
|
import { config } from '../config/index.js';
|
|
7
8
|
import { Logger } from '../utils/logger.js';
|
|
8
9
|
import { handleExternalServiceError } from '../utils/errors.js';
|
|
@@ -419,6 +420,18 @@ async function testPageChangesHandlerInner(input, context, rawProgressCallback)
|
|
|
419
420
|
if (input.useEnvironmentCredentials === false) {
|
|
420
421
|
env.useEnvironmentCredentials = false;
|
|
421
422
|
}
|
|
423
|
+
// sentinal-oj7dp.3: opting out of the environment's credentials WITHOUT naming
|
|
424
|
+
// an account means "do not log in" — say so in the language the backend already
|
|
425
|
+
// speaks instead of leaving auth_mode on its 'auto' default. On 'auto' the auth
|
|
426
|
+
// subworkflow hunts for a login on a page that needs none: measured 2026-08-18,
|
|
427
|
+
// a public-homepage check spent 38 of its 111 seconds following the site's login
|
|
428
|
+
// link to a sibling host, submitting the environment's default credential three
|
|
429
|
+
// times, and parking the browser on a login screen the run was then graded
|
|
430
|
+
// against (execution 2c787273). no_auth short-circuits that cleanly and marks
|
|
431
|
+
// the run auth.skipped, which is explicitly NOT an auth failure (sentinal-76f8y.12).
|
|
432
|
+
if (meansDoNotLogIn(input)) {
|
|
433
|
+
contextData.auth_mode = 'no_auth';
|
|
434
|
+
}
|
|
422
435
|
// Same rule for the session opt-out: send it only when it IS one, so the
|
|
423
436
|
// default (reuse a warm session when one exists for this account) is
|
|
424
437
|
// expressed by absence rather than by an explicit false.
|
package/dist/types/index.js
CHANGED
|
@@ -66,14 +66,23 @@ export const TestPageChangesInputSchema = z.object({
|
|
|
66
66
|
freshSession: z.boolean().optional(),
|
|
67
67
|
// Auth-precondition deep-link intent (bead 56kd.6) — "log in THEN go to X".
|
|
68
68
|
auth: AuthPreconditionSchema.optional(),
|
|
69
|
-
}).refine((v) => !(v.useEnvironmentCredentials === false
|
|
70
|
-
&& !v.username && !v.credentialId && !v.credentialRole
|
|
71
|
-
&& !(v.loginCredentials && v.loginCredentials.length > 0)
|
|
72
|
-
&& !v.auth?.username), {
|
|
73
|
-
message: 'useEnvironmentCredentials:false leaves the run with no way to authenticate. '
|
|
74
|
-
+ 'Pass username/password, credentialId, credentialRole, or loginCredentials alongside it.',
|
|
75
|
-
path: ['useEnvironmentCredentials'],
|
|
76
69
|
});
|
|
70
|
+
/**
|
|
71
|
+
* True when the caller opted out of the environment's credentials AND named no
|
|
72
|
+
* account of their own — i.e. "do not log in at all".
|
|
73
|
+
*
|
|
74
|
+
* This used to be a hard validation error ("leaves the run with no way to
|
|
75
|
+
* authenticate"), which made the single most common check — "is my PUBLIC page
|
|
76
|
+
* still up?" — the one thing the tool refused to express. It is not an error; it
|
|
77
|
+
* is an instruction, and the backend already has the enum for it
|
|
78
|
+
* (auth_mode: no_auth, sentinal-i7fnc). See sentinal-oj7dp.3.
|
|
79
|
+
*/
|
|
80
|
+
export function meansDoNotLogIn(v) {
|
|
81
|
+
return v.useEnvironmentCredentials === false
|
|
82
|
+
&& !v.username && !v.credentialId && !v.credentialRole
|
|
83
|
+
&& !(v.loginCredentials && v.loginCredentials.length > 0)
|
|
84
|
+
&& !v.auth?.username;
|
|
85
|
+
}
|
|
77
86
|
export const TriggerCrawlInputSchema = z.object({
|
|
78
87
|
url: z.preprocess(normalizeUrl, z.string().url('Invalid URL. Pass a full URL like "http://localhost:3000" or "https://example.com". Localhost URLs are auto-tunneled to the remote browser.')),
|
|
79
88
|
projectUuid: z.string().uuid().optional(),
|