@trusty-squire/mcp 0.9.9 → 0.9.11
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/dist/bot/agent.d.ts +2 -0
- package/dist/bot/agent.d.ts.map +1 -1
- package/dist/bot/agent.js +216 -14
- package/dist/bot/agent.js.map +1 -1
- package/dist/bot/browser.d.ts +2 -0
- package/dist/bot/browser.d.ts.map +1 -1
- package/dist/bot/browser.js +90 -5
- package/dist/bot/browser.js.map +1 -1
- package/dist/bot/google-login.d.ts +13 -0
- package/dist/bot/google-login.d.ts.map +1 -1
- package/dist/bot/google-login.js +1 -1
- package/dist/bot/google-login.js.map +1 -1
- package/dist/bot/oauth-providers.d.ts.map +1 -1
- package/dist/bot/oauth-providers.js +9 -1
- package/dist/bot/oauth-providers.js.map +1 -1
- package/dist/bot/profile.d.ts +2 -0
- package/dist/bot/profile.d.ts.map +1 -1
- package/dist/bot/profile.js +41 -0
- package/dist/bot/profile.js.map +1 -1
- package/dist/bot/promote-to-skill.d.ts +1 -0
- package/dist/bot/promote-to-skill.d.ts.map +1 -1
- package/dist/bot/promote-to-skill.js +52 -4
- package/dist/bot/promote-to-skill.js.map +1 -1
- package/dist/bot/replay-skill.d.ts.map +1 -1
- package/dist/bot/replay-skill.js +379 -35
- package/dist/bot/replay-skill.js.map +1 -1
- package/package.json +1 -1
package/dist/bot/browser.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export declare function stripCloudflareChallengeParams(rawUrl: string): string |
|
|
|
43
43
|
export declare class BrowserController {
|
|
44
44
|
private context;
|
|
45
45
|
private page;
|
|
46
|
+
private launchedContext;
|
|
46
47
|
private readonly humanize;
|
|
47
48
|
private mouseX;
|
|
48
49
|
private mouseY;
|
|
@@ -60,6 +61,7 @@ export declare class BrowserController {
|
|
|
60
61
|
start(): Promise<void>;
|
|
61
62
|
private probeEgressGeo;
|
|
62
63
|
private resolveProxy;
|
|
64
|
+
reload(): Promise<void>;
|
|
63
65
|
goto(url: string): Promise<void>;
|
|
64
66
|
prewarm(url: string, mode?: "fast" | "referrer-chain"): Promise<void>;
|
|
65
67
|
private prewarmViaReferrerChain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/bot/browser.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAS5D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,cAAc,CAAC;AAoFzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IAKvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAInB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;AAQjE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,eAAe,EAAE,CAwBnB;AASD,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,cAAc,GACd,cAAc,GACd,UAAU,GACV,SAAS,CAAC;AAed,MAAM,MAAM,kBAAkB,GAC1B;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,GAChB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAChD;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAqGtD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG;IACtD,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAUA;AAYD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5E;AAED,qBAAa,iBAAiB;IAI5B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/bot/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/browser.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
import { chromium as baseChromium } from "playwright";
|
|
25
25
|
import { createRequire } from "node:module";
|
|
26
26
|
import { detectAsn } from "./asn.js";
|
|
27
|
-
import { CHROME_PROFILE_DIR, launchWithProfileGate, ProfileBusyError, waitForProfileFree } from "./profile.js";
|
|
27
|
+
import { CHROME_PROFILE_DIR, launchWithProfileGate, ProfileBusyError, reapLeakedProfileHolder, waitForProfileFree } from "./profile.js";
|
|
28
28
|
import { startXvfb, xvfbAvailable } from "./xvfb.js";
|
|
29
29
|
// Lazy registration: installing the plugin mutates the chromium singleton
|
|
30
30
|
// from playwright-extra so we only do it once per process. We require()
|
|
@@ -274,6 +274,11 @@ export class BrowserController {
|
|
|
274
274
|
// Google session across runs — see profile.ts / google-login.ts.
|
|
275
275
|
context = null;
|
|
276
276
|
page = null;
|
|
277
|
+
// True once launchPersistentContext succeeded this session. close() only
|
|
278
|
+
// reaps a leaked Chrome when WE launched one — so a ProfileBusyError thrown
|
|
279
|
+
// BEFORE launch (while waiting on a genuine concurrent holder) never kills
|
|
280
|
+
// that other run's browser.
|
|
281
|
+
launchedContext = false;
|
|
277
282
|
humanize;
|
|
278
283
|
// Tracks the simulated mouse position so successive clicks can move
|
|
279
284
|
// along a continuous path (humans don't teleport between clicks).
|
|
@@ -511,6 +516,8 @@ export class BrowserController {
|
|
|
511
516
|
...(geo?.geolocation !== undefined ? { geolocation: geo.geolocation } : {}),
|
|
512
517
|
}));
|
|
513
518
|
this.context = context;
|
|
519
|
+
// We own the profile now — close() may reap a leaked Chrome.
|
|
520
|
+
this.launchedContext = true;
|
|
514
521
|
// Patch navigator.webdriver — BASELINE ONLY. Measured against the
|
|
515
522
|
// rebrowser bot-detector, this manual `defineProperty` is
|
|
516
523
|
// COUNTERPRODUCTIVE under patchright: it re-adds `webdriver` as an own
|
|
@@ -699,6 +706,20 @@ export class BrowserController {
|
|
|
699
706
|
`configured but not needed for this network`);
|
|
700
707
|
return null;
|
|
701
708
|
}
|
|
709
|
+
// Reload the current page. Used by the post-verify flow to make a SPA
|
|
710
|
+
// re-read a server-side state change (email verified) that the client
|
|
711
|
+
// hasn't picked up yet. Best-effort: a reload failure is non-fatal — the
|
|
712
|
+
// caller re-reads the page state regardless.
|
|
713
|
+
async reload() {
|
|
714
|
+
if (!this.page)
|
|
715
|
+
throw new Error("Browser not started");
|
|
716
|
+
try {
|
|
717
|
+
await this.page.reload({ waitUntil: "domcontentloaded", timeout: 20_000 });
|
|
718
|
+
}
|
|
719
|
+
catch {
|
|
720
|
+
// reload failed (slow SPA / transient) — caller re-inspects anyway
|
|
721
|
+
}
|
|
722
|
+
}
|
|
702
723
|
async goto(url) {
|
|
703
724
|
if (!this.page)
|
|
704
725
|
throw new Error("Browser not started");
|
|
@@ -2693,6 +2714,10 @@ export class BrowserController {
|
|
|
2693
2714
|
// Misc
|
|
2694
2715
|
"project api key", "personal api key", "organization id", "org id",
|
|
2695
2716
|
"app key", "app secret",
|
|
2717
|
+
// Pusher (and other keys tables) label fields bare: key / secret /
|
|
2718
|
+
// cluster. Without these the value inherits the nearest recognized
|
|
2719
|
+
// label (the app_id field), mislabeling key + secret as "app id".
|
|
2720
|
+
"cluster", "key", "secret",
|
|
2696
2721
|
];
|
|
2697
2722
|
const isVisible = (el) => {
|
|
2698
2723
|
const r = el.getBoundingClientRect();
|
|
@@ -2717,6 +2742,12 @@ export class BrowserController {
|
|
|
2717
2742
|
// Reject simple words / capitalized phrases
|
|
2718
2743
|
if (/^[A-Za-z]+$/.test(s) && s.length < 12)
|
|
2719
2744
|
return false;
|
|
2745
|
+
// Reject label-text masquerading as a value: a short token of only
|
|
2746
|
+
// letters + separators with NO digit (e.g. the literal "app_id" /
|
|
2747
|
+
// "secret" label text pusher renders next to the real value). Real
|
|
2748
|
+
// credentials carry a digit or are long; field labels don't.
|
|
2749
|
+
if (!hasDigit && /^[a-z][a-z_-]*$/i.test(s) && s.length < 16)
|
|
2750
|
+
return false;
|
|
2720
2751
|
return true;
|
|
2721
2752
|
};
|
|
2722
2753
|
const isMaskedShape = (s) => {
|
|
@@ -2750,8 +2781,14 @@ export class BrowserController {
|
|
|
2750
2781
|
direct = direct.trim().toLowerCase();
|
|
2751
2782
|
if (direct.length === 0 || direct.length > 100)
|
|
2752
2783
|
return;
|
|
2784
|
+
// Normalize separators so underscore/hyphen field labels match the
|
|
2785
|
+
// space-form phrases: pusher renders "app_id" / "app_key" / "app_secret"
|
|
2786
|
+
// and "app_id".includes("app id") is false, so every value used to
|
|
2787
|
+
// inherit a far "App keys" heading. With this, each field label matches
|
|
2788
|
+
// its own phrase and wins the proximity match.
|
|
2789
|
+
const directNorm = direct.replace(/[_-]+/g, " ");
|
|
2753
2790
|
for (const phrase of LABEL_PHRASES) {
|
|
2754
|
-
if (
|
|
2791
|
+
if (directNorm.includes(phrase)) {
|
|
2755
2792
|
const c = centerOf(el);
|
|
2756
2793
|
labelHits.push({ phrase, x: c.x, y: c.y, el });
|
|
2757
2794
|
break; // one label per element is enough
|
|
@@ -2855,6 +2892,27 @@ export class BrowserController {
|
|
|
2855
2892
|
hasRevealButton: hasReveal,
|
|
2856
2893
|
});
|
|
2857
2894
|
};
|
|
2895
|
+
// 0. Inline config snippets: a credential block listing multiple
|
|
2896
|
+
// label = "value" pairs in one text run (pusher's App Keys page:
|
|
2897
|
+
// app_id = "2164307" key = "..." secret = "..." cluster = "ap3").
|
|
2898
|
+
// No separate label ELEMENTS exist, so the proximity matcher mislabels
|
|
2899
|
+
// every value with whatever heading is nearest. Parse the label-value
|
|
2900
|
+
// pairs straight from the page text — each pair's own label is
|
|
2901
|
+
// authoritative. Runs FIRST so its correctly-labeled candidates win
|
|
2902
|
+
// the `seen` dedup over the proximity passes. Noise pairs are harmless:
|
|
2903
|
+
// a skill only matches the labels it asks for.
|
|
2904
|
+
const bodyText = document.body?.innerText ?? "";
|
|
2905
|
+
const INLINE_PAIR = /\b([A-Za-z][A-Za-z0-9_-]{1,40})\s*[:=]\s*["']?([A-Za-z0-9._-]{6,256})["']?/g;
|
|
2906
|
+
for (const m of bodyText.matchAll(INLINE_PAIR)) {
|
|
2907
|
+
const label = (m[1] ?? "").toLowerCase();
|
|
2908
|
+
const value = m[2] ?? "";
|
|
2909
|
+
if (!isCredentialShape(value))
|
|
2910
|
+
continue;
|
|
2911
|
+
if (seen.has(value))
|
|
2912
|
+
continue;
|
|
2913
|
+
seen.add(value);
|
|
2914
|
+
out.push({ value, label, isMasked: false, hasRevealButton: false });
|
|
2915
|
+
}
|
|
2858
2916
|
// 1. <input> / <textarea> values (visible only).
|
|
2859
2917
|
document.querySelectorAll("input, textarea").forEach((el) => {
|
|
2860
2918
|
if (el instanceof HTMLInputElement &&
|
|
@@ -4347,11 +4405,38 @@ export class BrowserController {
|
|
|
4347
4405
|
// display leaks (orphaned Xvfb procs pile up over a long-lived MCP
|
|
4348
4406
|
// server and, worse, the un-closed Chrome keeps the profile's
|
|
4349
4407
|
// SingletonLock held — bricking the next signup + `mcp login`).
|
|
4408
|
+
//
|
|
4409
|
+
// EVERY close call is timeout-capped. On a wedged headed Chrome (e.g. a
|
|
4410
|
+
// run that crashed mid-captcha-click), BOTH page.close() AND
|
|
4411
|
+
// context.close() can hang INDEFINITELY — and an un-capped page.close()
|
|
4412
|
+
// blocked the reap below from ever running, so the browser leaked for
|
|
4413
|
+
// minutes and bricked the next 3 services (MEASURED 2026-06-09: supabase
|
|
4414
|
+
// crash → cockroachdb/weaviate/honeycomb all "profile held"). The cap
|
|
4415
|
+
// guarantees we always reach the SIGKILL reap.
|
|
4416
|
+
const capped = (p, ms) => Promise.race([
|
|
4417
|
+
Promise.resolve(p).then(() => undefined, () => undefined),
|
|
4418
|
+
new Promise((r) => setTimeout(r, ms)),
|
|
4419
|
+
]);
|
|
4350
4420
|
if (this.page)
|
|
4351
|
-
await this.page.close()
|
|
4352
|
-
// Closing the persistent context shuts the browser down too.
|
|
4421
|
+
await capped(this.page.close(), 5_000);
|
|
4353
4422
|
if (this.context)
|
|
4354
|
-
await this.context.close()
|
|
4423
|
+
await capped(this.context.close(), 10_000);
|
|
4424
|
+
// …and context.close() doesn't always kill the browser: headed Chrome
|
|
4425
|
+
// under Xvfb / some patchright teardowns leave the main process alive
|
|
4426
|
+
// holding the SingletonLock. A leaked browser makes the NEXT run wait
|
|
4427
|
+
// 120s and fail with ProfileBusyError — one leak bricks every subsequent
|
|
4428
|
+
// service in a batch. We're done with the profile, so any holder still on
|
|
4429
|
+
// THIS host is our own leaked Chrome: reap it. Gated on launchedContext so
|
|
4430
|
+
// a pre-launch ProfileBusyError never kills the run we were waiting on.
|
|
4431
|
+
if (this.launchedContext) {
|
|
4432
|
+
try {
|
|
4433
|
+
reapLeakedProfileHolder(this.profileDir);
|
|
4434
|
+
}
|
|
4435
|
+
catch {
|
|
4436
|
+
/* best-effort */
|
|
4437
|
+
}
|
|
4438
|
+
this.launchedContext = false;
|
|
4439
|
+
}
|
|
4355
4440
|
// F13 — release the on-demand Xvfb if we spawned one. Order
|
|
4356
4441
|
// matters: kill Chrome (context.close) first so it has its
|
|
4357
4442
|
// display until it exits, THEN kill Xvfb.
|