{"ok":true,"data":{"schemaVersion":"browserops.demo_readiness.v1","generatedAt":"2026-06-02T01:04:43.439Z","live":true,"summary":"Live public demo probes completed for the BrowserOps suite lanes.","counts":{"lanes":6,"ready":2,"degraded":1,"failed":3,"declared":0},"runtime":{"browser":{"provider":"browserbase","browserbase":{"status":"configured","configured":true,"projectConfigured":true,"credentialSource":"prefixed","apiUrl":"https://api.browserbase.com"}},"aiGateway":{"schemaVersion":"browserops.ai_gateway_diagnostics.v1","generatedAt":"2026-06-02T01:04:43.439Z","status":"degraded","summary":"AI Gateway is partially configured; BrowserOps can show diagnosis but should not depend on model calls yet.","docs":{"aiGateway":"https://vercel.com/docs/ai-gateway","providersAndModels":"https://ai-sdk.dev/docs/foundations/providers-and-models"},"runtime":{"aiSdk":{"installed":true,"version":"^6.0.193","gatewayCompatible":true},"gatewayPackage":{"installedTransitively":true,"expected":"@ai-sdk/gateway is bundled transitively by ai v6; explicit installation is optional unless BrowserOps needs providerOptions.gateway helpers."},"vercel":{"runningOnVercel":true,"environment":"production","urlConfigured":true}},"auth":{"mode":"vercel_oidc_runtime","oidcTokenPresent":false,"aiGatewayApiKeyPresent":false,"directProviderKeyCount":0,"directProviderKeyNames":[],"message":"The app is running on Vercel; AI Gateway can use Vercel-managed OIDC at runtime if the project has AI Gateway enabled."},"modelPolicy":{"configuredModel":null,"configuredModelSource":null,"providerModelFormat":"missing","message":"No default AI Gateway model is configured. BrowserOps will require callers to provide an explicit provider/model id before making model calls."},"checks":[{"id":"ai-sdk-version","label":"AI SDK gateway compatibility","status":"passed","message":"ai ^6.0.193 is installed and compatible with provider/model gateway routing.","evidence":{"installed":true,"version":"^6.0.193","expectedMajor":6}},{"id":"gateway-auth","label":"Gateway authentication","status":"passed","message":"The app is running on Vercel; AI Gateway can use Vercel-managed OIDC at runtime if the project has AI Gateway enabled.","evidence":{"mode":"vercel_oidc_runtime","oidcTokenPresent":false,"aiGatewayApiKeyPresent":false,"runningOnVercel":true}},{"id":"direct-provider-keys","label":"Direct provider key bypass","status":"passed","message":"No direct provider API keys were detected in the BrowserOps environment.","evidence":{"directProviderKeyCount":0,"directProviderKeyNames":[]}},{"id":"model-format","label":"Provider/model string","status":"warning","message":"No default AI Gateway model is configured. BrowserOps will require callers to provide an explicit provider/model id before making model calls.","evidence":{"configured":false,"source":null}}],"recommendedActions":["Choose a supported provider/model id from the Vercel AI Gateway model catalog before enabling model-backed remediation."],"publicSafeLog":{"schemaVersion":"browserops.log.v1","level":"warn","event":"browserops.ai_gateway.diagnosis","message":"AI Gateway is partially configured; BrowserOps can show diagnosis but should not depend on model calls yet.","service":"browserops","generatedAt":"2026-06-02T01:04:43.439Z","data":{"status":"degraded","aiSdkInstalled":true,"aiVersion":"^6.0.193","gatewayCompatible":true,"authMode":"vercel_oidc_runtime","directProviderKeyCount":0,"modelFormat":"missing"}}}},"lanes":[{"id":"root","name":"PlatPhorm Root","canonicalUrl":"https://platphormnews.com","role":"Root network graph, public platform manifest, and canonical topology source for the PlatPhormNews mesh.","targetService":"root","traceId":"6a28fe62cc2fd0ccf5ea514efd05711d","status":"failed","probes":[{"name":"health","path":"/api/health","url":"https://platphormnews.com/api/health","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":240,"traceAccepted":true,"message":"health returned HTTP 200."},{"name":"networkGraph","path":"/api/network/graph","url":"https://platphormnews.com/api/network/graph","required":true,"fetched":false,"status":"failed","httpStatus":null,"durationMs":2502,"traceAccepted":false,"message":"Probe timed out."},{"name":"llms","path":"/llms.txt","url":"https://platphormnews.com/llms.txt","required":false,"fetched":true,"status":"passed","httpStatus":200,"durationMs":2173,"traceAccepted":true,"message":"llms returned HTTP 200."}],"browserOpsContract":"Root provides topology; BrowserOps turns public network facts into browser journeys and route evidence.","requestedCapability":"read_network_graph","authorizationState":"public_read","nextAction":"Use root graph and base sitemap as the demo source of truth for discovered journeys."},{"id":"agentui","name":"AgentUI","canonicalUrl":"https://agentui.platphormnews.com","role":"Visual workflow orchestration and tool UI rendering.","targetService":"agentui","traceId":"038ec035537d52afadd4437c8d8a39e5","status":"ready","probes":[{"name":"health","path":"/api/health","url":"https://agentui.platphormnews.com/api/health","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":264,"traceAccepted":false,"message":"health returned HTTP 200."},{"name":"apiDocs","path":"/api/docs","url":"https://agentui.platphormnews.com/api/docs","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":133,"traceAccepted":false,"message":"apiDocs returned HTTP 200."},{"name":"llms","path":"/llms.txt","url":"https://agentui.platphormnews.com/llms.txt","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":258,"traceAccepted":false,"message":"llms returned HTTP 200."},{"name":"handoffReceiver","path":"/api/browserops/receive-handoff","url":"https://agentui.platphormnews.com/api/browserops/receive-handoff","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":1021,"traceAccepted":true,"message":"handoffReceiver returned HTTP 200."}],"browserOpsContract":"AgentUI asks for rendered workflow UI validation; BrowserOps returns screenshot, accessibility, labels, and navigation evidence.","requestedCapability":"validate_rendered_workflow_ui","authorizationState":"server_managed","nextAction":"Open AgentUI lane, preview a journey, and dispatch only after a confirmed receiver response."},{"id":"spec","name":"Spec","canonicalUrl":"https://spec.platphormnews.com","role":"Contract validation, diff, repair, and generation for OpenAPI, AsyncAPI, JSON Schema, MCP, webhook, event, policy, and envelope contracts.","targetService":"spec","traceId":"ee13dbb26cd574dadadaab2f6feadb04","status":"failed","probes":[{"name":"health","path":"/api/health","url":"https://spec.platphormnews.com/api/health","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":748,"traceAccepted":false,"message":"health returned HTTP 200."},{"name":"apiDocs","path":"/api/docs","url":"https://spec.platphormnews.com/api/docs","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":785,"traceAccepted":false,"message":"apiDocs returned HTTP 200."},{"name":"llms","path":"/llms.txt","url":"https://spec.platphormnews.com/llms.txt","required":true,"fetched":false,"status":"failed","httpStatus":null,"durationMs":2501,"traceAccepted":false,"message":"Probe timed out."}],"browserOpsContract":"Spec generates contract-backed journey plans; BrowserOps dry-runs and proves browser behavior for acceptance.","requestedCapability":"dry_run_contract_journey","authorizationState":"public_read","nextAction":"Use Spec contracts to seed journey templates, then run BrowserOps against trusted public targets."},{"id":"mcp","name":"MCP","canonicalUrl":"https://mcp.platphormnews.com","role":"Canonical MCP gateway, tool registry, capability graph, and integration broker.","targetService":"mcp","traceId":"477af479923b231528d79113eb95bc2f","status":"failed","probes":[{"name":"health","path":"/api/health","url":"https://mcp.platphormnews.com/api/health","required":true,"fetched":false,"status":"failed","httpStatus":null,"durationMs":2503,"traceAccepted":false,"message":"Probe timed out."},{"name":"mcpManifest","path":"/.well-known/mcp.json","url":"https://mcp.platphormnews.com/.well-known/mcp.json","required":true,"fetched":false,"status":"failed","httpStatus":null,"durationMs":2501,"traceAccepted":false,"message":"Probe timed out."},{"name":"apiDocs","path":"/api/docs","url":"https://mcp.platphormnews.com/api/docs","required":false,"fetched":false,"status":"degraded","httpStatus":null,"durationMs":2501,"traceAccepted":false,"message":"Probe timed out."}],"browserOpsContract":"MCP remains the tool registry; BrowserOps exposes and validates BrowserOps-owned tools through the gateway.","requestedCapability":"discover_browserops_tools","authorizationState":"public_read","nextAction":"Show MCP manifest and BrowserOps MCP tools before launching any protected browser run."},{"id":"sandbox","name":"Sandbox","canonicalUrl":"https://sandbox.platphormnews.com","role":"Bounded command execution, file writing, logs, artifacts, and public-safe reports.","targetService":"sandbox","traceId":"cf17936ad4898d7f3635eb7e8252e743","status":"degraded","probes":[{"name":"health","path":"/api/health","url":"https://sandbox.platphormnews.com/api/health","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":169,"traceAccepted":true,"message":"health returned HTTP 200."},{"name":"apiDocs","path":"/api/docs","url":"https://sandbox.platphormnews.com/api/docs","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":221,"traceAccepted":true,"message":"apiDocs returned HTTP 200."},{"name":"llms","path":"/llms.txt","url":"https://sandbox.platphormnews.com/llms.txt","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":199,"traceAccepted":true,"message":"llms returned HTTP 200."},{"name":"handoffReceiver","path":"/api/sandbox/receive-handoff","url":"https://sandbox.platphormnews.com/api/sandbox/receive-handoff","required":false,"fetched":true,"status":"degraded","httpStatus":404,"durationMs":149,"traceAccepted":true,"message":"handoffReceiver returned HTTP 404."}],"browserOpsContract":"Sandbox produces bounded previews; BrowserOps validates the resulting public page in a real browser.","requestedCapability":"validate_public_preview_url","authorizationState":"server_managed","nextAction":"Send a Sandbox preview URL to BrowserOps and capture public-safe artifacts."},{"id":"evals","name":"Evals","canonicalUrl":"https://evals.platphormnews.com","role":"Evidence-backed QA, scorecards, release gates, suites, and decisions.","targetService":"evals","traceId":"90136a72e734cf687daa0f4db5984ced","status":"ready","probes":[{"name":"health","path":"/api/health","url":"https://evals.platphormnews.com/api/health","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":1784,"traceAccepted":false,"message":"health returned HTTP 200."},{"name":"apiDocs","path":"/api/docs","url":"https://evals.platphormnews.com/api/docs","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":833,"traceAccepted":false,"message":"apiDocs returned HTTP 200."},{"name":"llms","path":"/llms.txt","url":"https://evals.platphormnews.com/llms.txt","required":true,"fetched":true,"status":"passed","httpStatus":200,"durationMs":228,"traceAccepted":false,"message":"llms returned HTTP 200."},{"name":"handoffReceiver","path":"/api/evals/receive-handoff","url":"https://evals.platphormnews.com/api/evals/receive-handoff","required":true,"fetched":true,"status":"passed","httpStatus":405,"durationMs":968,"traceAccepted":false,"message":"handoffReceiver returned HTTP 405."}],"browserOpsContract":"Evals remains the release gate; BrowserOps supplies run summaries and artifacts for evidence-backed scorecards.","requestedCapability":"submit_browser_run_evidence","authorizationState":"server_managed","nextAction":"Submit a real BrowserOps run to Evals and keep the lane degraded if completed artifacts are missing."}],"workflows":[{"id":"spec-browserops-evals","label":"Spec to BrowserOps to Evals","from":"spec","to":"evals","capability":"contract_journey_to_release_gate_evidence","status":"preview_ready","explanation":"Spec creates the plan, BrowserOps proves browser behavior, and Evals scores only confirmed evidence.","nextAction":"Preview a Spec journey, run BrowserOps on a trusted target, then send the real run to Evals."},{"id":"agentui-browserops","label":"AgentUI to BrowserOps","from":"agentui","to":"browserops","capability":"validate_rendered_workflow_ui","status":"preview_ready","explanation":"AgentUI remains the workflow UI; BrowserOps returns browser-visible proof for labels, navigation, accessibility, and screenshots.","nextAction":"Launch an AgentUI workflow validation and open the BrowserOps run detail."},{"id":"sandbox-browserops","label":"Sandbox to BrowserOps","from":"sandbox","to":"browserops","capability":"validate_public_preview_url","status":"planned","explanation":"Sandbox builds or replays; BrowserOps validates the public preview in a real browser.","nextAction":"Send a Sandbox preview URL and keep artifacts public-safe unless explicitly protected."},{"id":"mcp-browserops","label":"MCP to BrowserOps","from":"mcp","to":"browserops","capability":"discover_and_call_browserops_tools","status":"planned","explanation":"MCP remains the tool registry; BrowserOps exposes browser evidence tools with protected execution boundaries.","nextAction":"Show MCP manifest and public BrowserOps tools before any protected tool call."}]},"meta":{"generatedAt":"2026-06-02T01:04:43.439Z","traceId":"browserops-public-read","degraded":true,"source":"remote"},"warnings":[{"code":"BROWSEROPS_DEMO_LANE_DEGRADED","message":"One or more demo lanes need remediation before a full live demo."}],"errors":[]}