@trusty-squire/mcp 0.6.15-rc.8 → 0.7.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/dist/bin.js +8 -0
- package/dist/bin.js.map +1 -1
- package/dist/bot/agent.d.ts +39 -0
- package/dist/bot/agent.d.ts.map +1 -1
- package/dist/bot/agent.js +1341 -20
- package/dist/bot/agent.js.map +1 -1
- package/dist/bot/browser.d.ts +13 -0
- package/dist/bot/browser.d.ts.map +1 -1
- package/dist/bot/browser.js +573 -31
- package/dist/bot/browser.js.map +1 -1
- package/dist/bot/captcha-solver-2captcha.d.ts +42 -0
- package/dist/bot/captcha-solver-2captcha.d.ts.map +1 -0
- package/dist/bot/captcha-solver-2captcha.js +144 -0
- package/dist/bot/captcha-solver-2captcha.js.map +1 -0
- package/dist/bot/index.d.ts +2 -0
- package/dist/bot/index.d.ts.map +1 -1
- package/dist/bot/index.js +2 -0
- package/dist/bot/index.js.map +1 -1
- package/dist/bot/llm-client.d.ts +2 -1
- package/dist/bot/llm-client.d.ts.map +1 -1
- package/dist/bot/llm-client.js +19 -2
- package/dist/bot/llm-client.js.map +1 -1
- package/dist/bot/notify-api.d.ts +2 -0
- package/dist/bot/notify-api.d.ts.map +1 -1
- package/dist/bot/notify-api.js +13 -5
- package/dist/bot/notify-api.js.map +1 -1
- package/dist/bot/promote-to-skill.d.ts +9 -0
- package/dist/bot/promote-to-skill.d.ts.map +1 -1
- package/dist/bot/promote-to-skill.js +231 -25
- package/dist/bot/promote-to-skill.js.map +1 -1
- package/dist/bot/read-otp.d.ts +14 -0
- package/dist/bot/read-otp.d.ts.map +1 -0
- package/dist/bot/read-otp.js +96 -0
- package/dist/bot/read-otp.js.map +1 -0
- package/dist/bot/redact.d.ts +2 -0
- package/dist/bot/redact.d.ts.map +1 -0
- package/dist/bot/redact.js +61 -0
- package/dist/bot/redact.js.map +1 -0
- package/dist/bot/telegram-notify.d.ts +8 -0
- package/dist/bot/telegram-notify.d.ts.map +1 -0
- package/dist/bot/telegram-notify.js +134 -0
- package/dist/bot/telegram-notify.js.map +1 -0
- package/dist/skill-cli/cli.js +14 -3
- package/dist/skill-cli/cli.js.map +1 -1
- package/dist/tools/provision-any.d.ts.map +1 -1
- package/dist/tools/provision-any.js +26 -1
- package/dist/tools/provision-any.js.map +1 -1
- package/package.json +5 -2
package/dist/bot/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,qBAAqB,GACtB,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG3B,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAK/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAO/B,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAOtC,aAAa,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAI5C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/B,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAGjC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAGtD,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAO7C,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAM5D,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,qBAAqB,GACtB,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG3B,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAK/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAO/B,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAOtC,aAAa,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAI5C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/B,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAGjC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAGtD,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAO7C,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAM5D,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAM1C,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAWlB,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;YAWtD,UAAU;CAgEzB"}
|
package/dist/bot/index.js
CHANGED
|
@@ -82,6 +82,8 @@ export class UniversalSignupBot {
|
|
|
82
82
|
stepsSink: request.stepsSink,
|
|
83
83
|
allowExtraOAuthScopes: request.allowExtraOAuthScopes,
|
|
84
84
|
allowBlindOAuthConsent: request.allowBlindOAuthConsent,
|
|
85
|
+
machineToken: request.machineToken,
|
|
86
|
+
apiBase: request.apiBase,
|
|
85
87
|
});
|
|
86
88
|
console.error(`[UniversalBot] Result: ${result.success ? "SUCCESS" : "FAILED"}`);
|
|
87
89
|
if (result.success && result.credentials) {
|
package/dist/bot/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,6DAA6D;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,WAAW,EAIX,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAIL,qBAAqB,GACtB,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAwC,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAA+B,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,GAKf,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/llm-client.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export declare class OpenRouterClient implements LLMClient {
|
|
|
53
53
|
export interface ProxyLLMClientOpts {
|
|
54
54
|
apiBaseUrl: string;
|
|
55
55
|
machineToken: string;
|
|
56
|
-
tier: "cheap" | "premium";
|
|
56
|
+
tier: "cheap" | "premium" | "free";
|
|
57
57
|
}
|
|
58
58
|
export declare class ProxyLLMClient implements LLMClient {
|
|
59
59
|
readonly name: string;
|
|
@@ -65,6 +65,7 @@ export declare class ProxyLLMClient implements LLMClient {
|
|
|
65
65
|
}
|
|
66
66
|
export interface PickLLMClientOpts {
|
|
67
67
|
preferCheap?: boolean;
|
|
68
|
+
tier?: "cheap" | "premium" | "free";
|
|
68
69
|
}
|
|
69
70
|
export interface LLMPair {
|
|
70
71
|
primary: LLMClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/bot/llm-client.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,WAAW,GAAG,YAAY,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,YAAY,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IAGb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtD;AAID,qBAAa,qBAAsB,YAAW,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAM9C,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CA0B3D;AAOD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IAOf,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,SAAS;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,IAAI,EAAE,oBAAoB;IAShC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CA2D3D;AAWD,MAAM,WAAW,kBAAkB;IAEjC,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/bot/llm-client.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/llm-client.js
CHANGED
|
@@ -208,13 +208,30 @@ export function pickLLMClient(opts = {}) {
|
|
|
208
208
|
//
|
|
209
209
|
// The Sonnet-via-OR premium routes through the same OpenRouter account
|
|
210
210
|
// the user already pays for, so they get one bill, not two.
|
|
211
|
+
// Resolve the effective primary tier from explicit opts → env →
|
|
212
|
+
// "cheap" default. The env knob (UNIVERSAL_BOT_LLM_TIER=free) is
|
|
213
|
+
// how the verifier worker flips behavior without threading the
|
|
214
|
+
// option through every signup call site.
|
|
215
|
+
function resolvePrimaryTier(opts) {
|
|
216
|
+
if (opts.tier !== undefined)
|
|
217
|
+
return opts.tier;
|
|
218
|
+
const envTier = process.env.UNIVERSAL_BOT_LLM_TIER;
|
|
219
|
+
if (envTier === "free" || envTier === "premium" || envTier === "cheap") {
|
|
220
|
+
return envTier;
|
|
221
|
+
}
|
|
222
|
+
return "cheap";
|
|
223
|
+
}
|
|
211
224
|
export function pickLLMPair(opts = {}) {
|
|
212
225
|
// 1. Trusty Squire proxy (default for MCP installs).
|
|
213
226
|
const machineToken = process.env.TRUSTY_SQUIRE_MACHINE_TOKEN;
|
|
214
227
|
if (machineToken !== undefined && machineToken.length > 0) {
|
|
215
228
|
const apiBaseUrl = process.env.TRUSTY_SQUIRE_API_BASE ?? "https://trusty-squire-api.fly.dev";
|
|
216
|
-
const
|
|
217
|
-
const
|
|
229
|
+
const primaryTier = resolvePrimaryTier(opts);
|
|
230
|
+
const primary = new ProxyLLMClient({ apiBaseUrl, machineToken, tier: primaryTier });
|
|
231
|
+
// Parse-failure premium retry: paid GPT-4o regardless of primary
|
|
232
|
+
// tier. A free→free run that fails to parse JSON is exactly the
|
|
233
|
+
// case where premium is worth the spend.
|
|
234
|
+
const premium = opts.preferCheap === true || primaryTier === "free"
|
|
218
235
|
? new ProxyLLMClient({ apiBaseUrl, machineToken, tier: "premium" })
|
|
219
236
|
: null;
|
|
220
237
|
return { primary, premium };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/bot/llm-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/bot/llm-client.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/notify-api.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ export interface HeightenedAuthNotification {
|
|
|
2
2
|
service: string;
|
|
3
3
|
digit: string | null;
|
|
4
4
|
windowSeconds: number;
|
|
5
|
+
machineToken?: string | undefined;
|
|
6
|
+
apiBase?: string | undefined;
|
|
5
7
|
}
|
|
6
8
|
export declare function notifyHeightenedAuth(input: HeightenedAuthNotification): Promise<boolean>;
|
|
7
9
|
//# sourceMappingURL=notify-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify-api.d.ts","sourceRoot":"","sources":["../../src/bot/notify-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notify-api.d.ts","sourceRoot":"","sources":["../../src/bot/notify-api.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAIhB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IAKtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAKD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,OAAO,CAAC,CA2BlB"}
|
package/dist/bot/notify-api.js
CHANGED
|
@@ -7,18 +7,26 @@
|
|
|
7
7
|
// (service, digit) pair and forgets — failures are silent because
|
|
8
8
|
// the stderr banner already covers the local-operator case.
|
|
9
9
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
10
|
+
// Auth: caller passes the machine token + apiBase explicitly. The
|
|
11
|
+
// MCP install path mints the token to session.json (read once at
|
|
12
|
+
// server boot in tools/provision-any.ts) and does NOT export it as
|
|
13
|
+
// an env var. rc.12 and earlier read process.env directly here and
|
|
14
|
+
// silently no-op'd in every install — that's the bug rc.13 fixes.
|
|
15
|
+
// Env fallback retained for the dev/probe harnesses (oauth-thin-slice,
|
|
16
|
+
// CLI direct invocations) that do set the env var.
|
|
13
17
|
const DEFAULT_API_BASE = "https://trusty-squire-api.fly.dev";
|
|
14
18
|
// Fire-and-forget. Returns true if the POST returned 2xx, false
|
|
15
19
|
// otherwise (including no-token, no-network, route 4xx/5xx). Never
|
|
16
20
|
// throws — caller never has to wrap in try/catch.
|
|
17
21
|
export async function notifyHeightenedAuth(input) {
|
|
18
|
-
const token =
|
|
22
|
+
const token = input.machineToken !== undefined && input.machineToken.length > 0
|
|
23
|
+
? input.machineToken
|
|
24
|
+
: process.env.TRUSTY_SQUIRE_MACHINE_TOKEN;
|
|
19
25
|
if (token === undefined || token.length === 0)
|
|
20
26
|
return false;
|
|
21
|
-
const base =
|
|
27
|
+
const base = input.apiBase !== undefined && input.apiBase.length > 0
|
|
28
|
+
? input.apiBase
|
|
29
|
+
: (process.env.TRUSTY_SQUIRE_API_BASE ?? DEFAULT_API_BASE);
|
|
22
30
|
try {
|
|
23
31
|
const res = await fetch(`${base}/v1/notify/heightened-auth`, {
|
|
24
32
|
method: "POST",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify-api.js","sourceRoot":"","sources":["../../src/bot/notify-api.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,iEAAiE;AACjE,kEAAkE;AAClE,4DAA4D;AAC5D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"notify-api.js","sourceRoot":"","sources":["../../src/bot/notify-api.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,iEAAiE;AACjE,kEAAkE;AAClE,4DAA4D;AAC5D,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,mEAAmE;AACnE,mEAAmE;AACnE,kEAAkE;AAClE,uEAAuE;AACvE,mDAAmD;AAEnD,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAiB7D,gEAAgE;AAChE,mEAAmE;AACnE,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAiC;IAEjC,MAAM,KAAK,GACT,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC/D,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,IAAI,GACR,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,gBAAgB,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,4BAA4B,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,cAAc,EAAE,KAAK,CAAC,aAAa;aACpC,CAAC;SACH,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -11,6 +11,15 @@ export interface PromoteInput {
|
|
|
11
11
|
* synthesizer derives `${SERVICE}_API_KEY` (e.g. RAILWAY_API_KEY).
|
|
12
12
|
*/
|
|
13
13
|
env_var_suggestion?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Starting status for the synthesized skill. Defaults to
|
|
16
|
+
* `pending-review` (the two-tier registry's staging slot): the
|
|
17
|
+
* verifier worker flips it to `active` after N=2 fresh signups
|
|
18
|
+
* pass against the captured selectors. Callers pass `active`
|
|
19
|
+
* only when explicitly bypassing the verifier — `mcp skill
|
|
20
|
+
* promote --skip-verifier`.
|
|
21
|
+
*/
|
|
22
|
+
status?: "pending-review" | "active";
|
|
14
23
|
}
|
|
15
24
|
export type PromoteResult = {
|
|
16
25
|
kind: "ok";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote-to-skill.d.ts","sourceRoot":"","sources":["../../src/bot/promote-to-skill.ts"],"names":[],"mappings":"AAqCA,OAAO,EAGL,KAAK,KAAK,EAIX,MAAM,4BAA4B,CAAC;AAUpC,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"promote-to-skill.d.ts","sourceRoot":"","sources":["../../src/bot/promote-to-skill.ts"],"names":[],"mappings":"AAqCA,OAAO,EAGL,KAAK,KAAK,EAIX,MAAM,4BAA4B,CAAC;AAUpC,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC;CACtC;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5B,gBAAgB,CAAC;AAErB;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,oBAAoB,GAAG,WAAW,GAAG,mBAAmB,CAAC;IAChE,UAAU,EACN,iBAAiB,GACjB,eAAe,GACf,oBAAoB,GACpB,eAAe,GACf,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,sBAAsB,GACtB,mBAAmB,GACnB,uBAAuB,GACvB,2BAA2B,GAC3B,kCAAkC,GAClC,gBAAgB,GAQhB,+BAA+B,GAC/B,8BAA8B,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;CACjD;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAI9C,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA6IjE;AA4iCD,wBAAgB,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,MAAM,CAexE"}
|
|
@@ -139,7 +139,7 @@ export function promoteToSkill(input) {
|
|
|
139
139
|
steps,
|
|
140
140
|
credentials,
|
|
141
141
|
source_run_ids: [input.run_id],
|
|
142
|
-
status: "
|
|
142
|
+
status: input.status ?? "pending-review",
|
|
143
143
|
replays_succeeded: 0,
|
|
144
144
|
replays_failed: 0,
|
|
145
145
|
consecutive_failures: 0,
|
|
@@ -180,7 +180,7 @@ function synthesizeSteps(rounds, runId) {
|
|
|
180
180
|
run_id: runId,
|
|
181
181
|
round_index: i,
|
|
182
182
|
};
|
|
183
|
-
const translated = translateStep(round.observed, round.inventory, provenance, i);
|
|
183
|
+
const translated = translateStep(round.observed, round.inventory, provenance, i, round.state.html);
|
|
184
184
|
if (translated.kind !== "ok")
|
|
185
185
|
return translated;
|
|
186
186
|
if (translated.step !== null)
|
|
@@ -218,7 +218,7 @@ function synthesizeSteps(rounds, runId) {
|
|
|
218
218
|
}
|
|
219
219
|
// Returns { step: null } for kinds the synthesizer intentionally drops
|
|
220
220
|
// (done, wait, login). Returns a rejection for kinds we can't translate.
|
|
221
|
-
function translateStep(observed, inventory, provenance, roundIndex) {
|
|
221
|
+
function translateStep(observed, inventory, provenance, roundIndex, roundHtml) {
|
|
222
222
|
switch (observed.kind) {
|
|
223
223
|
case "done":
|
|
224
224
|
case "wait":
|
|
@@ -344,7 +344,7 @@ function translateStep(observed, inventory, provenance, roundIndex) {
|
|
|
344
344
|
// when a subsequent click can't reach its target.
|
|
345
345
|
return { kind: "ok", step: null };
|
|
346
346
|
case "extract":
|
|
347
|
-
return synthesizeExtractStep(observed, inventory, provenance, roundIndex);
|
|
347
|
+
return synthesizeExtractStep(observed, inventory, provenance, roundIndex, roundHtml);
|
|
348
348
|
default: {
|
|
349
349
|
// Exhaustiveness check. TypeScript narrows `observed` to `never`
|
|
350
350
|
// here when every PostVerifyStep variant is covered above. If
|
|
@@ -417,9 +417,16 @@ function resolveClickHint(selector, inventory, roundIndex) {
|
|
|
417
417
|
return result;
|
|
418
418
|
}
|
|
419
419
|
function pickClickText(el) {
|
|
420
|
-
// Prefer visibleText (what humans read); fall back
|
|
421
|
-
// icon-only buttons.
|
|
422
|
-
|
|
420
|
+
// Prefer visibleText (what humans read); fall back through ariaLabel,
|
|
421
|
+
// title, and iconLabel for icon-only buttons. iconLabel is the most
|
|
422
|
+
// common surface for modern dashboards that ship "Sign in with X"
|
|
423
|
+
// OAuth buttons as an SVG with no text — the iconLabel folds in
|
|
424
|
+
// alt/aria-label from descendant <img>/<svg>. Trim and drop empties.
|
|
425
|
+
const text = (el.visibleText ??
|
|
426
|
+
el.ariaLabel ??
|
|
427
|
+
el.title ??
|
|
428
|
+
el.iconLabel ??
|
|
429
|
+
"").trim();
|
|
423
430
|
if (text.length === 0)
|
|
424
431
|
return null;
|
|
425
432
|
// Truncate exceptionally long text — a 500-char button label is
|
|
@@ -469,8 +476,14 @@ function resolveLabelHint(selector, inventory, roundIndex) {
|
|
|
469
476
|
synthesizer_version: SYNTHESIZER_VERSION,
|
|
470
477
|
};
|
|
471
478
|
}
|
|
472
|
-
// Ambiguity check — same as click resolver.
|
|
479
|
+
// Ambiguity check — same as click resolver. Mirror the replay
|
|
480
|
+
// engine's rc.8 isFillable filter: only input/textarea/select can
|
|
481
|
+
// genuinely host a fill, so don't count a labelText collision from a
|
|
482
|
+
// sibling help-button as an ambiguity (OpenRouter ships a "Name"
|
|
483
|
+
// tooltip button next to its #name input — both report labelText
|
|
484
|
+
// "Name", but the button is not a fill target).
|
|
473
485
|
const duplicates = inventory.filter((e) => e.selector !== selector &&
|
|
486
|
+
(e.tag === "input" || e.tag === "textarea" || e.tag === "select") &&
|
|
474
487
|
(e.labelText?.trim() === hint ||
|
|
475
488
|
e.placeholder?.trim() === hint ||
|
|
476
489
|
e.ariaLabel?.trim() === hint));
|
|
@@ -488,7 +501,7 @@ function resolveLabelHint(selector, inventory, roundIndex) {
|
|
|
488
501
|
return { kind: "ok", hint };
|
|
489
502
|
}
|
|
490
503
|
// ── Extract step + credential spec inference ─────────────────────────
|
|
491
|
-
function synthesizeExtractStep(observed, inventory, provenance, roundIndex) {
|
|
504
|
+
function synthesizeExtractStep(observed, inventory, provenance, roundIndex, roundHtml) {
|
|
492
505
|
// Strategy: prefer extract_via_copy_button when a Copy button is
|
|
493
506
|
// visibly available on the same page. The clipboard path is regex-
|
|
494
507
|
// free and survives the Railway-class bug (bare UUIDs the regex
|
|
@@ -506,20 +519,68 @@ function synthesizeExtractStep(observed, inventory, provenance, roundIndex) {
|
|
|
506
519
|
},
|
|
507
520
|
};
|
|
508
521
|
}
|
|
509
|
-
// No Copy button. Use a regex extraction
|
|
510
|
-
//
|
|
511
|
-
//
|
|
512
|
-
//
|
|
522
|
+
// No Copy button. Use a regex extraction. The pattern_name picked
|
|
523
|
+
// here decides which regex the replay engine fires at extract time;
|
|
524
|
+
// if it's wrong (e.g. uuid_token for IPInfo's 14-char opaque key),
|
|
525
|
+
// the replay can never find the value. detectKnownCredentialPattern
|
|
526
|
+
// scans the captured page text for the actual credential and picks
|
|
527
|
+
// the matching named pattern. Falls back to uuid_token only when no
|
|
528
|
+
// recognized prefix or UUID is on the page — the historical default,
|
|
529
|
+
// preserved for sites whose key has no distinguishing prefix that
|
|
530
|
+
// happens to also not be a UUID (rare; operator hand-edits).
|
|
531
|
+
const detected = detectKnownCredentialPattern(roundHtml);
|
|
513
532
|
return {
|
|
514
533
|
kind: "ok",
|
|
515
534
|
step: {
|
|
516
535
|
kind: "extract_via_regex",
|
|
517
|
-
pattern_name:
|
|
536
|
+
pattern_name: detected,
|
|
518
537
|
provenance,
|
|
519
538
|
},
|
|
520
539
|
};
|
|
521
540
|
void roundIndex;
|
|
522
541
|
}
|
|
542
|
+
// Scan the captured HTML for a credential value matching any of the
|
|
543
|
+
// patterns the replay engine's extractApiKeyFromText knows about.
|
|
544
|
+
// Returns the matching pattern_name; falls back to "uuid_token"
|
|
545
|
+
// when nothing recognizable is on the page (the historical default).
|
|
546
|
+
//
|
|
547
|
+
// Order matters — sk-or-v1- before sk- because both could match the
|
|
548
|
+
// same string and we want the more-specific one to win, matching
|
|
549
|
+
// agent.ts's extractApiKeyFromText order.
|
|
550
|
+
function detectKnownCredentialPattern(html) {
|
|
551
|
+
if (/\bre_[a-zA-Z0-9_]{20,}\b/.test(html))
|
|
552
|
+
return "resend";
|
|
553
|
+
if (/\bsk_(?:live|test)_[a-zA-Z0-9]{20,}\b/.test(html))
|
|
554
|
+
return "stripe_secret";
|
|
555
|
+
if (/\bsk-or-v1-[a-f0-9]{40,80}/i.test(html))
|
|
556
|
+
return "openrouter";
|
|
557
|
+
if (/\bsk-ant-[a-zA-Z0-9_-]{40,120}/.test(html))
|
|
558
|
+
return "anthropic";
|
|
559
|
+
if (/\bsk-proj-[a-zA-Z0-9_-]{40,200}/.test(html))
|
|
560
|
+
return "openai_project";
|
|
561
|
+
if (/\bsk-[a-zA-Z0-9]{40,60}/.test(html))
|
|
562
|
+
return "openai_legacy";
|
|
563
|
+
if (/\bkey-[a-f0-9]{32}\b/.test(html))
|
|
564
|
+
return "mailgun";
|
|
565
|
+
if (/\bSG\.[a-zA-Z0-9_\-]{20,}\.[a-zA-Z0-9_\-]{20,}\b/.test(html))
|
|
566
|
+
return "sendgrid";
|
|
567
|
+
if (/\brnd_[a-zA-Z0-9]{20,}\b/.test(html))
|
|
568
|
+
return "render";
|
|
569
|
+
if (/\bsntry[su]_[A-Za-z0-9_=\-]{20,}/.test(html))
|
|
570
|
+
return "sentry_token";
|
|
571
|
+
// UUID — Railway-class flows. Last among prefixed checks because a
|
|
572
|
+
// UUID can co-appear with prefixed keys on the same page (e.g. a
|
|
573
|
+
// dashboard showing a key plus a request-id).
|
|
574
|
+
if (/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/.test(html)) {
|
|
575
|
+
return "uuid_token";
|
|
576
|
+
}
|
|
577
|
+
// No known prefix and no UUID. Default to uuid_token so the schema
|
|
578
|
+
// accepts the skill — replay engine's rc.8 fallback path will pick
|
|
579
|
+
// the value up via extractCredentialCandidates if the validator is
|
|
580
|
+
// set tightly enough (and the synthesizer DOES set it tightly when
|
|
581
|
+
// it observed a short alphanumeric below).
|
|
582
|
+
return "uuid_token";
|
|
583
|
+
}
|
|
523
584
|
function findCopyButton(inventory) {
|
|
524
585
|
for (const el of inventory) {
|
|
525
586
|
// rc.19 — also include title (icon-only buttons like Railway's
|
|
@@ -598,22 +659,150 @@ function inferCredentialSpec(rounds, steps, service, envVarOverride) {
|
|
|
598
659
|
// tighten it.
|
|
599
660
|
const shapeHint = inferShapeHint(extractStep, rounds);
|
|
600
661
|
const envVar = envVarOverride ?? deriveEnvVar(service);
|
|
601
|
-
// Validator
|
|
602
|
-
//
|
|
603
|
-
//
|
|
604
|
-
//
|
|
605
|
-
//
|
|
662
|
+
// Validator ranges per shape_hint. Tight ranges keep the replay
|
|
663
|
+
// engine's rc.8 candidate-fallback path from accepting wrong-shaped
|
|
664
|
+
// strings as credentials. For shapes where the value's length is
|
|
665
|
+
// service-defined, we use the typical-observed range; the operator
|
|
666
|
+
// can hand-edit if a service's keys turn out to be wider than the
|
|
667
|
+
// default. A sentinel_http_check is NOT auto-populated — that would
|
|
668
|
+
// require knowing the service's /whoami URL, which the synthesizer
|
|
669
|
+
// can't infer. Operators set it via skill:edit (C5).
|
|
670
|
+
const validator = validatorForShape(shapeHint, rounds);
|
|
671
|
+
// Detect "shown once at creation" phrasing in the extract step's
|
|
672
|
+
// captured reason + the surrounding round texts. Cloudinary,
|
|
673
|
+
// Twilio auth_token-once-shown, Stripe rotation flows all surface
|
|
674
|
+
// explicit warnings like "the secret will not be shown again",
|
|
675
|
+
// "make sure to copy it now", "this is the only time you'll see
|
|
676
|
+
// this token". When present, the router skips replay and routes
|
|
677
|
+
// to fresh-signup-each-time. False positives are bounded — the
|
|
678
|
+
// worst case is the router does extra signups, never the wrong
|
|
679
|
+
// credentials.
|
|
680
|
+
const visibility = inferVisibility(extractStep, rounds);
|
|
606
681
|
const spec = {
|
|
607
682
|
type: "api_key",
|
|
608
683
|
shape_hint: shapeHint,
|
|
609
684
|
env_var_suggestion: envVar,
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
685
|
+
// Only emit visibility when show-once — keeps canonical bytes
|
|
686
|
+
// identical for the 95% of skills that are always_visible
|
|
687
|
+
// (existing signed skills remain valid). Absent → treated as
|
|
688
|
+
// always_visible by the replay router.
|
|
689
|
+
...(visibility === "show_once_at_creation" ? { visibility } : {}),
|
|
690
|
+
post_extract_validator: validator,
|
|
614
691
|
};
|
|
615
692
|
return { kind: "ok", spec };
|
|
616
693
|
}
|
|
694
|
+
// Show-once vocabulary. The synthesizer scans the planner's prose
|
|
695
|
+
// for these markers. Captured from real-world dashboard copy across
|
|
696
|
+
// Cloudinary, Twilio, Stripe, AWS, GitHub PATs, etc.
|
|
697
|
+
const SHOW_ONCE_PHRASES = [
|
|
698
|
+
/\b(?:will not be|won'?t be|cannot be|can'?t be|never)\s+(?:shown|displayed|visible|retrievable|recovered)\s+again\b/i,
|
|
699
|
+
/\b(?:only|sole|one[- ]?time)\s+(?:time|chance|opportunity)\s+(?:you'?ll|you will|to)\s+(?:see|view|copy)\b/i,
|
|
700
|
+
/\bshow(?:n|ing)?\s+(?:only\s+)?once\b/i,
|
|
701
|
+
/\bdisplay(?:ed|ing)?\s+only\s+once\b/i,
|
|
702
|
+
/\bmake\s+sure\s+(?:to\s+)?(?:copy|save)\s+(?:it|this|now)\b/i,
|
|
703
|
+
/\bcopy\s+(?:it|this|now)\s+(?:before|now)\b/i,
|
|
704
|
+
/\b(?:save|copy)\s+(?:the\s+)?(?:secret|token|key|credential)\s+now\b/i,
|
|
705
|
+
/\b(?:this\s+is\s+the\s+)?(?:only|sole)\s+time\b.*\b(?:see|view|copy|displayed)\b/i,
|
|
706
|
+
/\bafter\s+(?:closing|leaving|navigating|refreshing).*(?:cannot|won'?t|will not).*(?:retrieve|see|recover)\b/i,
|
|
707
|
+
];
|
|
708
|
+
function inferVisibility(extractStep, rounds) {
|
|
709
|
+
// Source 1: the extract step's planner-quoted reason (from the
|
|
710
|
+
// round's `observed.reason` — we preserve this in step provenance).
|
|
711
|
+
// We don't have direct access to the original reason from the
|
|
712
|
+
// SkillStep alone, so scan the rounds' planner reasons up to the
|
|
713
|
+
// round that produced the extract.
|
|
714
|
+
const roundIndex = extractStep.provenance?.round_index;
|
|
715
|
+
if (typeof roundIndex !== "number")
|
|
716
|
+
return "always_visible";
|
|
717
|
+
const haystack = [];
|
|
718
|
+
for (const r of rounds) {
|
|
719
|
+
const observed = r.observed;
|
|
720
|
+
if (observed?.reason !== undefined && typeof observed.reason === "string") {
|
|
721
|
+
haystack.push(observed.reason);
|
|
722
|
+
}
|
|
723
|
+
// Source 2: page html — strip tags for a coarse text view. The
|
|
724
|
+
// warning banner ("the secret will not be shown again") is part
|
|
725
|
+
// of the dashboard's rendered DOM at the credential-creation
|
|
726
|
+
// moment, so it surfaces here even when the planner didn't quote
|
|
727
|
+
// the warning explicitly in its reason.
|
|
728
|
+
if (typeof r.state?.html === "string") {
|
|
729
|
+
const text = r.state.html
|
|
730
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, " ")
|
|
731
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, " ")
|
|
732
|
+
.replace(/<[^>]+>/g, " ")
|
|
733
|
+
.replace(/\s+/g, " ");
|
|
734
|
+
haystack.push(text.slice(0, 8000));
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
const joined = haystack.join(" \n ");
|
|
738
|
+
for (const re of SHOW_ONCE_PHRASES) {
|
|
739
|
+
if (re.test(joined))
|
|
740
|
+
return "show_once_at_creation";
|
|
741
|
+
}
|
|
742
|
+
return "always_visible";
|
|
743
|
+
}
|
|
744
|
+
function validatorForShape(shape, rounds) {
|
|
745
|
+
switch (shape) {
|
|
746
|
+
case "uuid":
|
|
747
|
+
return { min_length: 36, max_length: 36 };
|
|
748
|
+
case "prefix:re_":
|
|
749
|
+
return { min_length: 24, max_length: 64 };
|
|
750
|
+
case "prefix:sk_live":
|
|
751
|
+
case "prefix:sk_test":
|
|
752
|
+
return { min_length: 28, max_length: 128 };
|
|
753
|
+
case "prefix:sk-or-v1-":
|
|
754
|
+
return { min_length: 30, max_length: 120 };
|
|
755
|
+
case "prefix:sk-ant-":
|
|
756
|
+
return { min_length: 60, max_length: 200 };
|
|
757
|
+
case "prefix:sk-":
|
|
758
|
+
return { min_length: 40, max_length: 80 };
|
|
759
|
+
case "prefix:key-":
|
|
760
|
+
return { min_length: 36, max_length: 40 };
|
|
761
|
+
case "prefix:SG.":
|
|
762
|
+
return { min_length: 50, max_length: 100 };
|
|
763
|
+
case "prefix:rnd_":
|
|
764
|
+
return { min_length: 28, max_length: 64 };
|
|
765
|
+
case "prefix:sntry":
|
|
766
|
+
return { min_length: 30, max_length: 200 };
|
|
767
|
+
case "opaque":
|
|
768
|
+
// Opaque means: no recognized prefix or UUID, but we still
|
|
769
|
+
// landed on a credential page. Use the last-round HTML to find
|
|
770
|
+
// the most-likely value's length. IPInfo's 14-char API token
|
|
771
|
+
// is the canonical case. Fall back to a wide range if no
|
|
772
|
+
// value can be inferred (rare).
|
|
773
|
+
return inferOpaqueValidatorFromHtml(rounds) ?? { min_length: 8, max_length: 64 };
|
|
774
|
+
case "username_password":
|
|
775
|
+
return { min_length: 8, max_length: 256 };
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
// Scan the last round's HTML for short alphanumeric tokens that look
|
|
779
|
+
// like credentials (digits + letters, no surrounding label glue
|
|
780
|
+
// detectable). Pick the longest plausible candidate's length to
|
|
781
|
+
// anchor the validator's range. Returns null when nothing plausibly
|
|
782
|
+
// credential-shaped is found.
|
|
783
|
+
function inferOpaqueValidatorFromHtml(rounds) {
|
|
784
|
+
const rawHtml = rounds[rounds.length - 1]?.state.html ?? "";
|
|
785
|
+
// Strip HTML tags + collapse whitespace so the label and value
|
|
786
|
+
// appear adjacent — they're typically rendered as
|
|
787
|
+
// `<div>API Token</div><span>f9a062…</span>` (IPInfo case). The
|
|
788
|
+
// strip mirrors what extractText() returns at replay time, which
|
|
789
|
+
// is what the labeled regex was designed against.
|
|
790
|
+
const text = rawHtml
|
|
791
|
+
.replace(/<[^>]+>/g, " ")
|
|
792
|
+
.replace(/ /g, " ")
|
|
793
|
+
.replace(/\s+/g, " ");
|
|
794
|
+
// Look for "API Token" / "Token" / "API Key" label followed by an
|
|
795
|
+
// alphanumeric run of 8-64 chars. The replay engine's
|
|
796
|
+
// extractCredentialCandidates fallback uses validator length to
|
|
797
|
+
// filter, so we want a tight ±2-char range around the observed
|
|
798
|
+
// length to keep nav strings ("Dashboard", "Downloads") out.
|
|
799
|
+
const labeled = /(?:API[\s_-]?Token|API[\s_-]?Key|Token|Secret)\s*[:=]?\s*([a-zA-Z0-9_-]{8,64})/i.exec(text);
|
|
800
|
+
if (labeled !== null && labeled[1] !== undefined) {
|
|
801
|
+
const len = labeled[1].length;
|
|
802
|
+
return { min_length: Math.max(8, len - 2), max_length: len + 2 };
|
|
803
|
+
}
|
|
804
|
+
return null;
|
|
805
|
+
}
|
|
617
806
|
function inferShapeHint(extractStep, rounds) {
|
|
618
807
|
if (extractStep.kind === "extract_via_regex") {
|
|
619
808
|
// Map pattern name → shape hint. Closed enum so we cover every
|
|
@@ -641,8 +830,21 @@ function inferShapeHint(extractStep, rounds) {
|
|
|
641
830
|
return "prefix:sk-";
|
|
642
831
|
case "openai_project":
|
|
643
832
|
return "prefix:sk-";
|
|
644
|
-
case "uuid_token":
|
|
645
|
-
|
|
833
|
+
case "uuid_token": {
|
|
834
|
+
// uuid_token is the synthesizer's fallback when no recognized
|
|
835
|
+
// prefix was found in the HTML. Two sub-cases:
|
|
836
|
+
// 1. UUID actually present (Railway-class) → shape "uuid"
|
|
837
|
+
// 2. No UUID present (IPInfo-class opaque short token) →
|
|
838
|
+
// shape "opaque" so the validator isn't forced to 36/36
|
|
839
|
+
// and inferOpaqueValidatorFromHtml picks the observed
|
|
840
|
+
// length range. The replay engine's rc.8 candidate
|
|
841
|
+
// fallback then uses that validator to find the value.
|
|
842
|
+
const html = rounds[rounds.length - 1]?.state.html ?? "";
|
|
843
|
+
if (/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/.test(html)) {
|
|
844
|
+
return "uuid";
|
|
845
|
+
}
|
|
846
|
+
return "opaque";
|
|
847
|
+
}
|
|
646
848
|
}
|
|
647
849
|
}
|
|
648
850
|
// extract_via_copy_button: scan the latest round's HTML for a known
|
|
@@ -841,6 +1043,10 @@ function buildCredentialSpecForMulti(name, shape, service) {
|
|
|
841
1043
|
type: "api_key",
|
|
842
1044
|
shape_hint: shape,
|
|
843
1045
|
env_var_suggestion: envVar,
|
|
1046
|
+
// Default to absent (== always_visible). Multi-cred skills get
|
|
1047
|
+
// a per-credential visibility flag added by the visibility-
|
|
1048
|
+
// inference pass only when show-once phrasing was detected for
|
|
1049
|
+
// that specific credential.
|
|
844
1050
|
post_extract_validator: {
|
|
845
1051
|
min_length: shape === "uuid" ? 36 : 16,
|
|
846
1052
|
max_length: shape === "uuid" ? 36 : 512,
|