@trusty-squire/mcp 1.0.0 → 1.0.1-rc.1

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.
Files changed (177) hide show
  1. package/README.md +9 -15
  2. package/dist/bot/credential-text.d.ts +4 -0
  3. package/dist/bot/credential-text.d.ts.map +1 -0
  4. package/dist/bot/credential-text.js +297 -0
  5. package/dist/bot/credential-text.js.map +1 -0
  6. package/dist/bot/email-verification.d.ts +2 -0
  7. package/dist/bot/email-verification.d.ts.map +1 -0
  8. package/dist/bot/email-verification.js +47 -0
  9. package/dist/bot/email-verification.js.map +1 -0
  10. package/dist/bot/google-login.d.ts +1 -0
  11. package/dist/bot/google-login.d.ts.map +1 -1
  12. package/dist/bot/google-login.js +47 -2
  13. package/dist/bot/google-login.js.map +1 -1
  14. package/dist/bot/index.d.ts +0 -40
  15. package/dist/bot/index.d.ts.map +1 -1
  16. package/dist/bot/index.js +8 -156
  17. package/dist/bot/index.js.map +1 -1
  18. package/dist/bot/login-state.d.ts +2 -0
  19. package/dist/bot/login-state.d.ts.map +1 -1
  20. package/dist/bot/login-state.js +44 -0
  21. package/dist/bot/login-state.js.map +1 -1
  22. package/dist/bot/oauth-detect.d.ts +8 -0
  23. package/dist/bot/oauth-detect.d.ts.map +1 -0
  24. package/dist/bot/oauth-detect.js +329 -0
  25. package/dist/bot/oauth-detect.js.map +1 -0
  26. package/dist/bot/onboarding-capture.d.ts +1 -1
  27. package/dist/bot/onboarding-capture.d.ts.map +1 -1
  28. package/dist/bot/operator-recipe.d.ts +24 -24
  29. package/dist/bot/promote-to-skill.d.ts +1 -1
  30. package/dist/bot/promote-to-skill.d.ts.map +1 -1
  31. package/dist/bot/promote-to-skill.js +7 -5
  32. package/dist/bot/promote-to-skill.js.map +1 -1
  33. package/dist/bot/provision-session.d.ts +10 -0
  34. package/dist/bot/provision-session.d.ts.map +1 -1
  35. package/dist/bot/provision-session.js +126 -5
  36. package/dist/bot/provision-session.js.map +1 -1
  37. package/dist/bot/provision-types.d.ts +69 -0
  38. package/dist/bot/provision-types.d.ts.map +1 -0
  39. package/dist/bot/provision-types.js +9 -0
  40. package/dist/bot/provision-types.js.map +1 -0
  41. package/dist/bot/semantic-transition.d.ts +1 -1
  42. package/dist/bot/semantic-transition.d.ts.map +1 -1
  43. package/dist/skill-cli/cli.d.ts +1 -7
  44. package/dist/skill-cli/cli.d.ts.map +1 -1
  45. package/dist/skill-cli/cli.js +1 -69
  46. package/dist/skill-cli/cli.js.map +1 -1
  47. package/dist/tools/provision-drive.d.ts +48 -8
  48. package/dist/tools/provision-drive.d.ts.map +1 -1
  49. package/dist/tools/provision-drive.js +127 -2
  50. package/dist/tools/provision-drive.js.map +1 -1
  51. package/dist/tools/store-credential.d.ts +4 -4
  52. package/dist/tools/use-credential.d.ts +6 -6
  53. package/package.json +2 -6
  54. package/dist/bot/affordance-probe.d.ts +0 -15
  55. package/dist/bot/affordance-probe.d.ts.map +0 -1
  56. package/dist/bot/affordance-probe.js +0 -61
  57. package/dist/bot/affordance-probe.js.map +0 -1
  58. package/dist/bot/agent.d.ts +0 -449
  59. package/dist/bot/agent.d.ts.map +0 -1
  60. package/dist/bot/agent.js +0 -13634
  61. package/dist/bot/agent.js.map +0 -1
  62. package/dist/bot/debug.d.ts +0 -3
  63. package/dist/bot/debug.d.ts.map +0 -1
  64. package/dist/bot/debug.js +0 -35
  65. package/dist/bot/debug.js.map +0 -1
  66. package/dist/bot/email-code-fetcher.d.ts +0 -5
  67. package/dist/bot/email-code-fetcher.d.ts.map +0 -1
  68. package/dist/bot/email-code-fetcher.js +0 -33
  69. package/dist/bot/email-code-fetcher.js.map +0 -1
  70. package/dist/bot/flow-engine.d.ts +0 -7
  71. package/dist/bot/flow-engine.d.ts.map +0 -1
  72. package/dist/bot/flow-engine.js +0 -13
  73. package/dist/bot/flow-engine.js.map +0 -1
  74. package/dist/bot/form-fill.d.ts +0 -172
  75. package/dist/bot/form-fill.d.ts.map +0 -1
  76. package/dist/bot/form-fill.js +0 -444
  77. package/dist/bot/form-fill.js.map +0 -1
  78. package/dist/bot/inbox-client.d.ts +0 -45
  79. package/dist/bot/inbox-client.d.ts.map +0 -1
  80. package/dist/bot/inbox-client.js +0 -220
  81. package/dist/bot/inbox-client.js.map +0 -1
  82. package/dist/bot/llm-client.d.ts +0 -89
  83. package/dist/bot/llm-client.d.ts.map +0 -1
  84. package/dist/bot/llm-client.js +0 -493
  85. package/dist/bot/llm-client.js.map +0 -1
  86. package/dist/bot/nav-search.d.ts +0 -114
  87. package/dist/bot/nav-search.d.ts.map +0 -1
  88. package/dist/bot/nav-search.js +0 -670
  89. package/dist/bot/nav-search.js.map +0 -1
  90. package/dist/bot/notify-api.d.ts +0 -9
  91. package/dist/bot/notify-api.d.ts.map +0 -1
  92. package/dist/bot/notify-api.js +0 -49
  93. package/dist/bot/notify-api.js.map +0 -1
  94. package/dist/bot/oauth-flow.d.ts +0 -48
  95. package/dist/bot/oauth-flow.d.ts.map +0 -1
  96. package/dist/bot/oauth-flow.js +0 -111
  97. package/dist/bot/oauth-flow.js.map +0 -1
  98. package/dist/bot/observation-frame.d.ts +0 -16
  99. package/dist/bot/observation-frame.d.ts.map +0 -1
  100. package/dist/bot/observation-frame.js +0 -22
  101. package/dist/bot/observation-frame.js.map +0 -1
  102. package/dist/bot/post-signup-action-executor.d.ts +0 -53
  103. package/dist/bot/post-signup-action-executor.d.ts.map +0 -1
  104. package/dist/bot/post-signup-action-executor.js +0 -104
  105. package/dist/bot/post-signup-action-executor.js.map +0 -1
  106. package/dist/bot/post-signup-flow.d.ts +0 -51
  107. package/dist/bot/post-signup-flow.d.ts.map +0 -1
  108. package/dist/bot/post-signup-flow.js +0 -155
  109. package/dist/bot/post-signup-flow.js.map +0 -1
  110. package/dist/bot/post-signup-login-flow.d.ts +0 -28
  111. package/dist/bot/post-signup-login-flow.d.ts.map +0 -1
  112. package/dist/bot/post-signup-login-flow.js +0 -35
  113. package/dist/bot/post-signup-login-flow.js.map +0 -1
  114. package/dist/bot/post-signup-recovery-state.d.ts +0 -150
  115. package/dist/bot/post-signup-recovery-state.d.ts.map +0 -1
  116. package/dist/bot/post-signup-recovery-state.js +0 -253
  117. package/dist/bot/post-signup-recovery-state.js.map +0 -1
  118. package/dist/bot/post-signup-synthetic-capture.d.ts +0 -43
  119. package/dist/bot/post-signup-synthetic-capture.d.ts.map +0 -1
  120. package/dist/bot/post-signup-synthetic-capture.js +0 -84
  121. package/dist/bot/post-signup-synthetic-capture.js.map +0 -1
  122. package/dist/bot/prewarm-cache.d.ts +0 -3
  123. package/dist/bot/prewarm-cache.d.ts.map +0 -1
  124. package/dist/bot/prewarm-cache.js +0 -91
  125. package/dist/bot/prewarm-cache.js.map +0 -1
  126. package/dist/bot/read-otp.d.ts +0 -21
  127. package/dist/bot/read-otp.d.ts.map +0 -1
  128. package/dist/bot/read-otp.js +0 -170
  129. package/dist/bot/read-otp.js.map +0 -1
  130. package/dist/bot/redact.d.ts +0 -3
  131. package/dist/bot/redact.d.ts.map +0 -1
  132. package/dist/bot/redact.js +0 -132
  133. package/dist/bot/redact.js.map +0 -1
  134. package/dist/bot/rejection-record.d.ts +0 -70
  135. package/dist/bot/rejection-record.d.ts.map +0 -1
  136. package/dist/bot/rejection-record.js +0 -76
  137. package/dist/bot/rejection-record.js.map +0 -1
  138. package/dist/bot/replay-skill.d.ts +0 -180
  139. package/dist/bot/replay-skill.d.ts.map +0 -1
  140. package/dist/bot/replay-skill.js +0 -4361
  141. package/dist/bot/replay-skill.js.map +0 -1
  142. package/dist/bot/signup-lock.d.ts +0 -17
  143. package/dist/bot/signup-lock.d.ts.map +0 -1
  144. package/dist/bot/signup-lock.js +0 -174
  145. package/dist/bot/signup-lock.js.map +0 -1
  146. package/dist/bot/signup-oauth-flow.d.ts +0 -16
  147. package/dist/bot/signup-oauth-flow.d.ts.map +0 -1
  148. package/dist/bot/signup-oauth-flow.js +0 -31
  149. package/dist/bot/signup-oauth-flow.js.map +0 -1
  150. package/dist/bot/state-classifier.d.ts +0 -18
  151. package/dist/bot/state-classifier.d.ts.map +0 -1
  152. package/dist/bot/state-classifier.js +0 -127
  153. package/dist/bot/state-classifier.js.map +0 -1
  154. package/dist/bot/terminal-gate.d.ts +0 -22
  155. package/dist/bot/terminal-gate.d.ts.map +0 -1
  156. package/dist/bot/terminal-gate.js +0 -184
  157. package/dist/bot/terminal-gate.js.map +0 -1
  158. package/dist/bot/unwinnable-services.d.ts +0 -7
  159. package/dist/bot/unwinnable-services.d.ts.map +0 -1
  160. package/dist/bot/unwinnable-services.js +0 -69
  161. package/dist/bot/unwinnable-services.js.map +0 -1
  162. package/dist/data/service-categories.d.ts +0 -11
  163. package/dist/data/service-categories.d.ts.map +0 -1
  164. package/dist/data/service-categories.js +0 -149
  165. package/dist/data/service-categories.js.map +0 -1
  166. package/dist/provision-run.d.ts +0 -45
  167. package/dist/provision-run.d.ts.map +0 -1
  168. package/dist/provision-run.js +0 -99
  169. package/dist/provision-run.js.map +0 -1
  170. package/dist/tools/provision-any.d.ts +0 -207
  171. package/dist/tools/provision-any.d.ts.map +0 -1
  172. package/dist/tools/provision-any.js +0 -1519
  173. package/dist/tools/provision-any.js.map +0 -1
  174. package/dist/tools/signup-telemetry.d.ts +0 -38
  175. package/dist/tools/signup-telemetry.d.ts.map +0 -1
  176. package/dist/tools/signup-telemetry.js +0 -103
  177. package/dist/tools/signup-telemetry.js.map +0 -1
@@ -0,0 +1,329 @@
1
+ // oauth-detect.ts — browser-free inventory predicates for the OAuth-first
2
+ // signup path: find a "Sign in with <provider>" affordance, and decide whether
3
+ // a page is already an authenticated (post-login) surface. Carved out of
4
+ // agent.ts (the retired universal-bot monolith); skill replay uses these to
5
+ // route between OAuth, form-fill, and key-extraction.
6
+ import { OAUTH_PROVIDERS } from "./oauth-providers.js";
7
+ export function detectAlreadySignedIn(args) {
8
+ const { inventory, url } = args;
9
+ // Precondition: any visible credential input → not authenticated.
10
+ const hasCredentialInput = inventory.some((e) => e.tag === "input" &&
11
+ (e.type === "email" || e.type === "password" || e.type === "tel"));
12
+ if (hasCredentialInput)
13
+ return false;
14
+ // Signal 0 — a strong post-login URL path. An onboarding /
15
+ // getting-started / welcome route is only reachable AFTER you're
16
+ // authenticated (you cannot see a "you're all set, next steps" wizard
17
+ // without a session), so the URL alone is conclusive here — unlike the
18
+ // weaker dashboard paths in Signal 3, no paired creation-CTA is needed.
19
+ // last9 lands the bot on /v2/organizations/<slug>/getting-started with
20
+ // its Google session already active; its buttons ("Choose your region",
21
+ // "You're all set! Next steps", "Upgrade Plan") matched none of the CTA
22
+ // vocabularies below, so it used to bail `oauth_required` — claiming
23
+ // "only OAuth/SSO signup, no email/password form" while the bot was in
24
+ // fact fully signed in. The precondition above already ruled out a
25
+ // signup chooser (no credential input).
26
+ // ...UNLESS the page still presents a signup/OAuth chooser (a
27
+ // "Continue with Google" button or a bare "Sign up"/"Log in"). Some
28
+ // services route the login chooser through an /onboarding-style URL; if
29
+ // a provider button is visible, the bot must OAuth via it, not treat the
30
+ // page as already-authenticated. (PostHog TS-1923.)
31
+ const hasSignupAffordance = inventory.some((e) => {
32
+ const t = `${e.visibleText ?? ""} ${e.ariaLabel ?? ""}`
33
+ .toLowerCase()
34
+ .replace(/\s+/g, " ")
35
+ .trim();
36
+ return (/\b(?:continue with|sign ?up with|sign ?in with|log ?in with|with (?:google|github|gitlab|microsoft|apple))\b/.test(t) || /^(?:sign ?up|sign ?in|log ?in|create (?:an )?account)$/.test(t));
37
+ });
38
+ const visibleTextOf = (e) => `${e.visibleText ?? ""} ${e.ariaLabel ?? ""}`.trim();
39
+ const RESOURCE_CREATION_CTA = /^\s*(?:\+\s*)?(?:new\s+(?:project|workspace|team|app|site|deployment|api\s*key|database|cluster|instance|service|index|environment)|create(?:\s+(?:new|a|an|project|workspace|database|cluster|instance|deployment|app|service|index|environment))?|get\s+started\s+by\s+sett?ing\s+up\s+(?:a|an)?\s*.*\b(?:project|workspace|app|application|service|database|cluster|index)\b|sett?ing\s+up\s+(?:a|an)?\s*.*\b(?:project|workspace|app|application|service|database|cluster|index)\b)/i;
40
+ const hasResourceCreationCta = inventory.some((e) => RESOURCE_CREATION_CTA.test(visibleTextOf(e)));
41
+ const ONBOARDING_CHROME = /\b(?:set up your first|create your project|get started by sett?ing up|welcome to|import documents|make a search|don'?t show me again|bring me home|setup checklist|onboarding)\b/i;
42
+ const hasOnboardingChrome = inventory.some((e) => ONBOARDING_CHROME.test(visibleTextOf(e)));
43
+ if (!hasSignupAffordance && hasResourceCreationCta && hasOnboardingChrome) {
44
+ return true;
45
+ }
46
+ try {
47
+ if (!hasSignupAffordance &&
48
+ /\/(?:getting-started|get-started|onboarding|welcome)(?:\/|$)/i.test(new URL(url).pathname)) {
49
+ return true;
50
+ }
51
+ }
52
+ catch {
53
+ // malformed URL — fall through to the other signals
54
+ }
55
+ // Signal 1 — strict nav-keyword match (the canonical Sentry-class case).
56
+ // STRONG markers (sign out / log out) PROVE a session — you can't sign out if
57
+ // you're not signed in — so they fire even next to a decoration "Continue with
58
+ // Google" (account-linking) button. WEAK markers (dashboard / projects /
59
+ // settings / …) are ordinary nav labels that ALSO appear on a logged-out
60
+ // marketing or /login page, so they must NOT override a visible auth gate:
61
+ // gate them on !hasSignupAffordance. Without this split, northflank's /login
62
+ // (which renders "Continue with Google" alongside "Projects"/"Settings") was
63
+ // mis-read as signed-in → the replay skipped click_oauth_button → the fresh
64
+ // robot never logged in and bailed needs_login deep in the flow (MEASURED
65
+ // 2026-06-24).
66
+ const STRONG_AUTH_KEYWORDS = /^\s*(?:sign out|log out)\s*$/i;
67
+ const WEAK_AUTH_KEYWORDS = /^\s*(?:dashboard|projects|settings|profile|my account|account settings|workspaces)\s*$/i;
68
+ const textOf = (e) => (e.visibleText ?? e.ariaLabel ?? "").trim();
69
+ if (inventory.some((e) => STRONG_AUTH_KEYWORDS.test(textOf(e)))) {
70
+ return true;
71
+ }
72
+ if (!hasSignupAffordance && inventory.some((e) => WEAK_AUTH_KEYWORDS.test(textOf(e)))) {
73
+ return true;
74
+ }
75
+ // Signal 2 — billing / trial widget. Patterns observed in the wild:
76
+ // "28 days or $5.00 leftTrial" (Railway, no separator)
77
+ // "Trial" (most SaaS)
78
+ // "$N left" / "N days left" / "remaining"
79
+ const BILLING = /(?:\$\d+(?:\.\d+)?\s*(?:left|remaining)|\d+\s*days?\s*(?:left|remaining|trial)|\btrial\b)/i;
80
+ if (!hasSignupAffordance &&
81
+ inventory.some((e) => BILLING.test(visibleTextOf(e)))) {
82
+ return true;
83
+ }
84
+ // Signal 3 — dashboard-route URL + creation CTA visible.
85
+ // The URL gate is conservative: a path that READS as dashboard,
86
+ // not /login or /signup or /. Combined with a creation CTA
87
+ // ("New project", "Create workspace", "+ New") it pins the
88
+ // page as a post-login surface.
89
+ let dashboardyPath = false;
90
+ try {
91
+ const parsed = new URL(url);
92
+ // rc.37 — widened the dashboard-path allowlist after the rc.35
93
+ // sweep showed Upstash's post-OAuth landing was /redis (the
94
+ // product-segment route, not a generic /dashboard). Added
95
+ // /redis, /kafka, /vector, /cluster, /databases?, /instances?,
96
+ // /apps?, /deployments?, /services? — all common product-name
97
+ // routes that almost always indicate authenticated state.
98
+ // An /organizations/<…> or /orgs/<…> prefix is an authenticated-only
99
+ // marker: a logged-OUT visitor never has an organization-scoped route.
100
+ // pinecone's post-OAuth plan-chooser sits at
101
+ // app.pinecone.io/organizations/registration — the trailing
102
+ // "registration" tripped the register-exclusion below and the bot, fully
103
+ // signed in via the operator's existing Google-linked account, bailed
104
+ // no_signup_link instead of routing to key-extraction (MEASURED
105
+ // 2026-06-11: pinecone account was created May 25, so every later run
106
+ // lands here authenticated). An org-prefixed path forces dashboardy and
107
+ // bypasses the auth-route exclusion.
108
+ const hasOrgPrefix = /\/(?:organizations?|orgs?)\//i.test(parsed.pathname);
109
+ dashboardyPath =
110
+ hasOrgPrefix ||
111
+ (/\/(?:new|dashboard|projects?|account|settings|workspace|home|admin|redis|kafka|vector|cluster|databases?|instances?|apps?|deployments?|services?|onboarding|welcome|getting-started|get-started|setup)(?:\/|$)/i.test(parsed.pathname) && !/\/(?:signup|sign-up|register|login|sign-in|signin)/i.test(parsed.pathname));
112
+ }
113
+ catch {
114
+ // Malformed URL — skip URL signal.
115
+ }
116
+ if (dashboardyPath) {
117
+ // rc.37 — widened the creation-CTA vocabulary to include the
118
+ // dashboard-y "Create <product-noun>" pattern. Upstash's
119
+ // dashboard CTA reads "Create Database"; Convex / Neon /
120
+ // PlanetScale / similar all use this shape ("Create cluster",
121
+ // "Create instance", "Create deployment"). Without this the
122
+ // bot's F17 already-signed-in path fell through to form-fill
123
+ // and the planner clicked the CTA thinking it was a signup
124
+ // submit button.
125
+ if (inventory.some((e) => {
126
+ const t = e.visibleText ?? e.ariaLabel ?? "";
127
+ return RESOURCE_CREATION_CTA.test(t.trim());
128
+ })) {
129
+ return true;
130
+ }
131
+ // 0.8.2-rc.5 — PostHog-class onboarding wizard. When the URL is
132
+ // dashboard-y (path like /project/<id>/onboarding) and the page
133
+ // shows project-picker / account-menu / onboarding-skip
134
+ // affordances WITHOUT a credential input or OAuth provider button,
135
+ // the user is authenticated and the wizard is interstitial. The
136
+ // rc.3 overnight run for posthog landed exactly here and bailed
137
+ // `oauth_required` because the inventory had only:
138
+ // - "Default project" (project picker)
139
+ // - "BBento" (account avatar toggle)
140
+ // - "Hand off setup" (skip-onboarding affordance)
141
+ //
142
+ // Detect this shape via a second-tier signal set. Conservative —
143
+ // we already gated on "no credential inputs" and "dashboardyPath",
144
+ // so a true signup chooser (which has neither of those AND the
145
+ // path is /signup or /login) cannot reach this branch.
146
+ const POST_AUTH_AFFORDANCE = /^\s*(?:hand\s*off\s*setup|skip\s*(?:onboarding|setup|for\s*now)|invite\s*(?:teammates|members|your\s*team)|set\s*up\s*billing|finish\s*setup|get\s*started|continue\s*to\s*(?:dashboard|app|console))\s*$/i;
147
+ // Workspace / project / org picker shape. We pattern-match
148
+ // generously because PostHog's reads "Default project" but other
149
+ // SaaS dashboards read "My workspace" / "Acme org" / similar. The
150
+ // structural cue is "button with one of the workspace-noun words"
151
+ // — see TS-1923 (PostHog rc.3 regression).
152
+ const WORKSPACE_PICKER = /\b(?:workspace|workspaces|project(?:s)?|organization|organizations|team(?:s)?)\b/i;
153
+ const hasPostAuthAffordance = inventory.some((e) => POST_AUTH_AFFORDANCE.test((e.visibleText ?? e.ariaLabel ?? "").trim()));
154
+ if (hasPostAuthAffordance) {
155
+ // Single signal — the skip-onboarding / handoff verb is strong
156
+ // enough on its own. No login page ever offers "Hand off setup".
157
+ return true;
158
+ }
159
+ // Weaker pair: a workspace-picker shape AND the page lacks a
160
+ // primary call-to-action that reads as signup ("Continue with
161
+ // Google", "Sign up", etc.). Used as a backstop for SPA dashboards
162
+ // whose only visible buttons are picker toggles.
163
+ const hasWorkspacePicker = inventory.some((e) => WORKSPACE_PICKER.test((e.visibleText ?? e.ariaLabel ?? "").trim()));
164
+ const hasSignupOrOAuthAffordance = inventory.some((e) => {
165
+ const t = (e.visibleText ?? e.ariaLabel ?? "").trim();
166
+ return /\b(?:sign[\s-]*up|signup|continue\s+with|log\s+in\s+with|sign\s+in\s+with)\b/i.test(t);
167
+ });
168
+ if (hasWorkspacePicker && !hasSignupOrOAuthAffordance) {
169
+ return true;
170
+ }
171
+ // 0.8.3-rc.1 — onboarding-wizard step shape. When the URL clearly
172
+ // names an onboarding path (/onboarding, /welcome, /getting-started,
173
+ // /setup) AND the page has a Next/Continue/Skip/Submit button AND
174
+ // does NOT have any credential input (caught above) AND does NOT
175
+ // have a Sign-up/Continue-with affordance (i.e. it's not a CHOICE
176
+ // between login and signup), the page is mid-onboarding for an
177
+ // already-authenticated user. Mixpanel hits this when a previous
178
+ // run created the account but didn't finish the multi-step
179
+ // onboarding — the bot returns and lands directly on /onboarding.
180
+ let onboardingPath = false;
181
+ try {
182
+ onboardingPath =
183
+ /\/(?:onboarding|welcome|getting-started|get-started|setup)(?:\/|$)/i.test(new URL(url).pathname);
184
+ }
185
+ catch {
186
+ // Malformed URL — skip
187
+ }
188
+ if (onboardingPath && !hasSignupOrOAuthAffordance) {
189
+ const WIZARD_STEP_BTN = /^\s*(?:next|continue|submit|skip(?:\s+for\s+now)?|finish|done)\s*$/i;
190
+ const hasWizardStepButton = inventory.some((e) => {
191
+ const t = (e.visibleText ?? e.ariaLabel ?? "").trim();
192
+ return WIZARD_STEP_BTN.test(t);
193
+ });
194
+ if (hasWizardStepButton)
195
+ return true;
196
+ }
197
+ }
198
+ return false;
199
+ }
200
+ // rc.12 — sanity-cap the element's own visible text. A real sign-in
201
+ // button is short ("Continue with Google" = 19 chars, "Sign in with
202
+ // GitHub" = 19). When the element's visibleText runs longer than the
203
+ // cap below, it is wrapping unrelated content — typically a marketing
204
+ // card with a small provider logo nested inside. The OpenRouter case:
205
+ // an <a> wrapping a model card whose textContent reads "anthropic/
206
+ // claude-opus-4.7Model routing visualization…" and whose descendant
207
+ // tree contains an <img alt="Google"> for a tiny G icon. The iconLabel
208
+ // path then fired against the wrong element. Capping at 60 chars also
209
+ // gates path 2 to truly icon-only elements (no own visible text) so a
210
+ // card wrapper with one stray <img alt> can never match.
211
+ const MAX_OAUTH_BUTTON_TEXT_CHARS = 60;
212
+ function normalizeOAuthButtonText(text, keyword) {
213
+ return text.replace(new RegExp(`(${keyword})(?=[A-Z])`, "gi"), "$1 ");
214
+ }
215
+ // Find a "Sign in with <provider>" affordance in the page inventory —
216
+ // the entry point for the OAuth-first path (T6/T13). Three signals, in
217
+ // confidence order — derived from a live sweep where the text-only
218
+ // heuristic missed real buttons:
219
+ // 1. href — an <a> whose link routes through the provider's OAuth
220
+ // endpoint (/identity/login/google, /auth/github/callback, …).
221
+ // Unambiguous: a marketing link to policies.google.com does not.
222
+ // 2. iconLabel — an icon-only button with no text at all, named only
223
+ // by a descendant <img alt="Google"> / <svg><title> (Mistral).
224
+ // 3. text + an auth verb — "Continue with Google", "Sign up with
225
+ // GitHub". The auth verb is what keeps a bare "Google" nav link
226
+ // or "Google's Privacy Policy" out.
227
+ // Returns null when the page has no such affordance — the planner then
228
+ // falls back to form-fill.
229
+ export function findOAuthButton(inventory, provider) {
230
+ const keyword = OAUTH_PROVIDERS[provider].buttonKeyword;
231
+ const keywordRe = new RegExp(`\\b${keyword}\\b`);
232
+ const hrefRe = new RegExp(`(?:login|signin|sign-in|auth|oauth|connect|sso)[/_-]*${keyword}` +
233
+ `|${keyword}[/_-]*(?:login|signin|auth|oauth|connect)`, "i");
234
+ for (const e of inventory) {
235
+ const isButtonish = e.tag === "button" ||
236
+ e.tag === "a" ||
237
+ e.role === "button" ||
238
+ e.type === "submit" ||
239
+ e.type === "button";
240
+ if (!isButtonish)
241
+ continue;
242
+ const visibleText = (e.visibleText ?? "").trim();
243
+ if (visibleText.length > MAX_OAUTH_BUTTON_TEXT_CHARS)
244
+ continue;
245
+ // 1. An <a> whose href routes through the provider's OAuth endpoint.
246
+ const href = (e.href ?? "").toLowerCase();
247
+ if (href.length > 0 && hrefRe.test(href))
248
+ return e;
249
+ // 2. Icon-only (logo) button — named only by a descendant img/svg.
250
+ // Truly-empty visibleText is the clean case. But a logo button whose
251
+ // <svg> carries a <title>GitHub</title> LEAKS that title into
252
+ // textContent (northflank renders "GitHubGitHub" — doubled, which
253
+ // also defeats the \bgithub\b match in path 3), so it isn't strictly
254
+ // empty. Treat it as icon-only too WHEN its visible text is nothing
255
+ // but the provider name (any number of times): strip every keyword
256
+ // occurrence and require no residue. A nav link like "GitHub's
257
+ // Privacy Policy" leaves residue and is correctly rejected. The
258
+ // iconLabel must still independently name the provider, so a stray
259
+ // one-word label can't false-positive.
260
+ const kw = keyword.toLowerCase();
261
+ const residue = visibleText
262
+ .toLowerCase()
263
+ .split(kw)
264
+ .join("")
265
+ .replace(/[\s·|/–-]+/g, "");
266
+ const isLogoOnly = visibleText.length === 0 || residue.length === 0;
267
+ if (isLogoOnly && keywordRe.test((e.iconLabel ?? "").toLowerCase())) {
268
+ return e;
269
+ }
270
+ // 3. Visible text / accessible label naming the provider + an
271
+ // auth verb. The auth verb requirement rejects nav and policy
272
+ // links that merely mention the provider.
273
+ const text = normalizeOAuthButtonText(`${visibleText} ${e.ariaLabel ?? ""} ${e.labelText ?? ""}`, keyword)
274
+ .toLowerCase()
275
+ .replace(/\s+/g, " ")
276
+ .trim();
277
+ if (!keywordRe.test(text))
278
+ continue;
279
+ // "with <provider>" is the OAuth-button idiom and is accepted
280
+ // directly — it survives an SVG accessible name glued to the verb.
281
+ // elevenlabs renders its button text as "GoogleSign up with Google",
282
+ // which fuses "sign" into "googlesign" so the bare \bsign\b check
283
+ // misses, but "with google" still matches. (A blanket camelCase split
284
+ // can't be used to un-glue it — it would mangle the provider name
285
+ // itself, e.g. "GitHub" → "Git Hub".)
286
+ const withProviderRe = new RegExp(`\\bwith ${keyword}\\b`);
287
+ if (/\b(sign|signup|signin|continue|log ?in|connect|auth)\b/.test(text) ||
288
+ withProviderRe.test(text)) {
289
+ return e;
290
+ }
291
+ // rc.39 — minimal-label OAuth buttons. Some auth UIs render the
292
+ // provider as a bare keyword button: just "GitHub" or just "Google"
293
+ // (Turso, several Stytch / Clerk / Auth0 templates). When the
294
+ // VISIBLE text is essentially nothing but the provider keyword,
295
+ // accept it — no auth-verb required. The keyword regex already
296
+ // ensured the provider name is present; the length cap MAX_OAUTH_
297
+ // BUTTON_TEXT_CHARS (60) ensures it's still buttonish, not a
298
+ // paragraph that happens to mention the provider.
299
+ //
300
+ // 0.8.3-rc.1 — reject minimal-label matches whose href points at
301
+ // a NON-AUTH path on the provider's domain (most often a project
302
+ // repo URL like github.com/plausible/analytics in a homepage
303
+ // footer). Without this gate, plausible's footer "GitHub" link
304
+ // matched, the bot clicked it, ended up on the analytics repo's
305
+ // page, and misclassified the README content as a security
306
+ // challenge — burning the entire OAuth budget on a false alarm.
307
+ const stripped = visibleText.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
308
+ if (stripped === keyword || stripped === `with ${keyword}`) {
309
+ // When the element is an <a> with a provider-domain href, require
310
+ // it to look like an auth route. Repo / docs / marketing links
311
+ // on the provider's site never start an OAuth flow.
312
+ if (href.length > 0) {
313
+ const providerDomain = provider === "github" ? "github.com" : "google.com";
314
+ if (href.includes(providerDomain)) {
315
+ // Accept only if href matches the auth pattern OR points
316
+ // at a login/signup/sessions/oauth path.
317
+ const looksLikeAuthPath = hrefRe.test(href) ||
318
+ /github\.com\/(?:login|signin|sign-in|sessions|oauth\/authorize|apps\/[^/]+\/installations\/new|users\/sign_in)/i.test(href) ||
319
+ /accounts\.google\.com\/(?:o\/oauth2|signin)/i.test(href);
320
+ if (!looksLikeAuthPath)
321
+ continue;
322
+ }
323
+ }
324
+ return e;
325
+ }
326
+ }
327
+ return null;
328
+ }
329
+ //# sourceMappingURL=oauth-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-detect.js","sourceRoot":"","sources":["../../src/bot/oauth-detect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { InteractiveElement } from "./browser.js";
2
- import type { PostVerifyStep, SignupResult } from "./agent.js";
2
+ import type { PostVerifyStep, SignupResult } from "./provision-types.js";
3
3
  import { type FailureStage } from "./failure-stage.js";
4
4
  import { type SemanticFailureBucket, type SemanticFaultClass, type SemanticTransitionRecord } from "./semantic-transition.js";
5
5
  export declare const CAPTURE_FORMAT_VERSION: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-capture.d.ts","sourceRoot":"","sources":["../../src/bot/onboarding-capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding-capture.d.ts","sourceRoot":"","sources":["../../src/bot/onboarding-capture.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AAKlC,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAwBjD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE;AAWD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAiBxD;AA+BD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhE;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAGzC,QAAQ,EAAE,cAAc,CAAC;IAKzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAI3B,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAID,MAAM,WAAW,kBAAkB;IACjC,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACzC,QAAQ,EAAE,cAAc,CAAC;IAKzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AA2BD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAUjD;AAkBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAsD1E;AAMD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,wBAAwB,GACjC,IAAI,CAgCN;AAkBD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IAEZ,kBAAkB,EAAE,OAAO,CAAC;IAG5B,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAGrC,aAAa,EAAE,YAAY,CAAC;IAI5B,uBAAuB,CAAC,EAAE,qBAAqB,CAAC;IAChD,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAE1C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IAGf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAoBD,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAGD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,OAAO,EAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,gBAAgB,CA8BlB;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAqB7E;AAWD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAC1C;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EACF,iBAAiB,GACjB,eAAe,GACf,oBAAoB,GACpB,eAAe,GACf,WAAW,GACX,aAAa,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,iBAAiB,CA8FnB"}
@@ -9,20 +9,20 @@ declare const TraceActionSchema: z.ZodObject<{
9
9
  direction: z.ZodOptional<z.ZodEnum<["down", "up", "bottom", "top"]>>;
10
10
  key: z.ZodOptional<z.ZodString>;
11
11
  }, "strict", z.ZodTypeAny, {
12
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
12
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
13
13
  host?: string | undefined;
14
+ value?: string | undefined;
14
15
  key?: string | undefined;
15
16
  slot?: string | undefined;
16
- value?: string | undefined;
17
17
  text_match?: string | undefined;
18
18
  url_template?: string | undefined;
19
19
  direction?: "top" | "bottom" | "down" | "up" | undefined;
20
20
  }, {
21
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
21
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
22
22
  host?: string | undefined;
23
+ value?: string | undefined;
23
24
  key?: string | undefined;
24
25
  slot?: string | undefined;
25
- value?: string | undefined;
26
26
  text_match?: string | undefined;
27
27
  url_template?: string | undefined;
28
28
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -40,31 +40,31 @@ declare const TraceEntrySchema: z.ZodObject<{
40
40
  direction: z.ZodOptional<z.ZodEnum<["down", "up", "bottom", "top"]>>;
41
41
  key: z.ZodOptional<z.ZodString>;
42
42
  }, "strict", z.ZodTypeAny, {
43
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
43
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
44
44
  host?: string | undefined;
45
+ value?: string | undefined;
45
46
  key?: string | undefined;
46
47
  slot?: string | undefined;
47
- value?: string | undefined;
48
48
  text_match?: string | undefined;
49
49
  url_template?: string | undefined;
50
50
  direction?: "top" | "bottom" | "down" | "up" | undefined;
51
51
  }, {
52
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
52
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
53
53
  host?: string | undefined;
54
+ value?: string | undefined;
54
55
  key?: string | undefined;
55
56
  slot?: string | undefined;
56
- value?: string | undefined;
57
57
  text_match?: string | undefined;
58
58
  url_template?: string | undefined;
59
59
  direction?: "top" | "bottom" | "down" | "up" | undefined;
60
60
  }>;
61
61
  }, "strict", z.ZodTypeAny, {
62
62
  action: {
63
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
63
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
64
64
  host?: string | undefined;
65
+ value?: string | undefined;
65
66
  key?: string | undefined;
66
67
  slot?: string | undefined;
67
- value?: string | undefined;
68
68
  text_match?: string | undefined;
69
69
  url_template?: string | undefined;
70
70
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -72,11 +72,11 @@ declare const TraceEntrySchema: z.ZodObject<{
72
72
  intent?: string | undefined;
73
73
  }, {
74
74
  action: {
75
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
75
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
76
76
  host?: string | undefined;
77
+ value?: string | undefined;
77
78
  key?: string | undefined;
78
79
  slot?: string | undefined;
79
- value?: string | undefined;
80
80
  text_match?: string | undefined;
81
81
  url_template?: string | undefined;
82
82
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -190,31 +190,31 @@ export declare const OperatorRecipeSchema: z.ZodObject<{
190
190
  direction: z.ZodOptional<z.ZodEnum<["down", "up", "bottom", "top"]>>;
191
191
  key: z.ZodOptional<z.ZodString>;
192
192
  }, "strict", z.ZodTypeAny, {
193
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
193
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
194
194
  host?: string | undefined;
195
+ value?: string | undefined;
195
196
  key?: string | undefined;
196
197
  slot?: string | undefined;
197
- value?: string | undefined;
198
198
  text_match?: string | undefined;
199
199
  url_template?: string | undefined;
200
200
  direction?: "top" | "bottom" | "down" | "up" | undefined;
201
201
  }, {
202
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
202
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
203
203
  host?: string | undefined;
204
+ value?: string | undefined;
204
205
  key?: string | undefined;
205
206
  slot?: string | undefined;
206
- value?: string | undefined;
207
207
  text_match?: string | undefined;
208
208
  url_template?: string | undefined;
209
209
  direction?: "top" | "bottom" | "down" | "up" | undefined;
210
210
  }>;
211
211
  }, "strict", z.ZodTypeAny, {
212
212
  action: {
213
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
213
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
214
214
  host?: string | undefined;
215
+ value?: string | undefined;
215
216
  key?: string | undefined;
216
217
  slot?: string | undefined;
217
- value?: string | undefined;
218
218
  text_match?: string | undefined;
219
219
  url_template?: string | undefined;
220
220
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -222,11 +222,11 @@ export declare const OperatorRecipeSchema: z.ZodObject<{
222
222
  intent?: string | undefined;
223
223
  }, {
224
224
  action: {
225
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
225
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
226
226
  host?: string | undefined;
227
+ value?: string | undefined;
227
228
  key?: string | undefined;
228
229
  slot?: string | undefined;
229
- value?: string | undefined;
230
230
  text_match?: string | undefined;
231
231
  url_template?: string | undefined;
232
232
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -301,11 +301,11 @@ export declare const OperatorRecipeSchema: z.ZodObject<{
301
301
  name: string;
302
302
  trace: {
303
303
  action: {
304
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
304
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
305
305
  host?: string | undefined;
306
+ value?: string | undefined;
306
307
  key?: string | undefined;
307
308
  slot?: string | undefined;
308
- value?: string | undefined;
309
309
  text_match?: string | undefined;
310
310
  url_template?: string | undefined;
311
311
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -337,11 +337,11 @@ export declare const OperatorRecipeSchema: z.ZodObject<{
337
337
  name: string;
338
338
  trace: {
339
339
  action: {
340
- kind: "goto" | "click" | "type" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
340
+ kind: "type" | "goto" | "click" | "extract" | "scroll" | "js_click" | "press" | "oauth_click" | "oauth_settle" | "allow_host" | "type_secret";
341
341
  host?: string | undefined;
342
+ value?: string | undefined;
342
343
  key?: string | undefined;
343
344
  slot?: string | undefined;
344
- value?: string | undefined;
345
345
  text_match?: string | undefined;
346
346
  url_template?: string | undefined;
347
347
  direction?: "top" | "bottom" | "down" | "up" | undefined;
@@ -1,6 +1,6 @@
1
1
  import { type Skill, type SkillStep, type SkillStepProvenance } from "@trusty-squire/skill-schema";
2
2
  import type { InteractiveElement } from "./browser.js";
3
- import type { PostVerifyStep } from "./agent.js";
3
+ import type { PostVerifyStep } from "./provision-types.js";
4
4
  import { type OnboardingCaseFile } from "./onboarding-capture.js";
5
5
  export interface PromoteInput {
6
6
  /** Directory containing the `<service>-<run_id>-r*.json` capture files. */
@@ -1 +1 @@
1
- {"version":3,"file":"promote-to-skill.d.ts","sourceRoot":"","sources":["../../src/bot/promote-to-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promote-to-skill.d.ts","sourceRoot":"","sources":["../../src/bot/promote-to-skill.ts"],"names":[],"mappings":"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"}
@@ -764,11 +764,13 @@ function translateStep(observed, inventory, provenance, roundIndex, roundHtml) {
764
764
  // ("API key name", "production-api-key") closes that gap.
765
765
  const literal = observed.value;
766
766
  const looksGenerated = /^[a-z]{3,15}-[a-z0-9]{4,12}$/.test(literal);
767
- // An email value is the run's signup alias — templatize it to
768
- // ${EMAIL_ALIAS} so replay fills a FRESH alias (and so the await_-
769
- // email_code dispatch + poll target the same inbox). Baking the
770
- // literal would replay the original run's email and, for OTP flows,
771
- // dispatch the code to an inbox the replay doesn't own.
767
+ // An email value is the run's signup email — templatize it to the email
768
+ // slot token so the literal never bakes into a shared skill (privacy: in
769
+ // the operator model this is the USER's real address) and so each run
770
+ // fills a fresh value. The token keeps its legacy ${EMAIL_ALIAS} name for
771
+ // corpus compatibility (validateReplayGraph + published skills key off it);
772
+ // post-scope-#1 it denotes "the email to fill" (operator-resolved), not a
773
+ // Squire alias, and there is no autonomous await_email_code poll anymore.
772
774
  const looksLikeEmail = /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(literal.trim());
773
775
  const matchedInput = inventory.find((e) => e.selector === observed.selector);
774
776
  const inputLooksLikeTokenName = matchedInput !== undefined && looksLikeTokenNameInput(matchedInput);