/** * Point the user's OWN app at a twin, then read what it did. * * WHY THIS TOOL EXISTS, in the words of an agent that hit the gap: * * "The catch — this didn't touch your actual app. Your real checkout * endpoint, your real /api/webhooks/stripe handler, and your real email * send were never called. That's still a mock, just a fancier one — it * proves Stripe's API behaves like Stripe says it does, not that your * integration wired to it correctly." * * Measured 2026-09-24. The agent then asked for exactly this capability — * "you point your app's Stripe base URL at the sandbox and give FetchSandbox a * reachable URL for your webhook endpoint" — and could not reach it, because * the endpoint shipped to prod without a tool in front of it. * * That also explains a number we had been reading as agent behaviour: across * 57,275 twin requests since 2026-05-09, 1.72% ran under a non-default * scenario. An agent declining to arm a failure on OUR canned workflow is not * being lazy — arming one there proves nothing about the caller's code, and it * was right about that. */ export interface ValidateIntegrationInput { /** Where THEIR app is reachable. The one fact we cannot derive. */ app_base_url?: string; /** Providers the app integrates — ["paddle", "resend"] for a relay. */ providers?: string[]; /** Carry this back to continue; it makes re-validation a diff, not a restart. */ session_id?: string; } export declare const validateIntegrationTool: { readonly name: "validate_integration"; readonly description: string; readonly inputSchema: { readonly type: "object"; readonly properties: { readonly providers: { readonly type: "array"; readonly items: { readonly type: "string"; }; readonly description: string; }; readonly app_base_url: { readonly type: "string"; readonly description: string; }; readonly session_id: { readonly type: "string"; readonly description: string; }; }; readonly additionalProperties: false; }; }; export declare function runValidateIntegration(input: ValidateIntegrationInput): Promise;