This repository was archived by the owner on Jul 18, 2026. It is now read-only.
Repository navigation
Conversation
## Summary - publish canonical `consumerMetadata` for `heb-playwright` - publish canonical `consumerMetadata` for `wholefoods-playwright` - regenerate `connector-index.json` so downstream consumers can resolve both connectors without local brand/domain fallbacks ## Why `data-connect` should not need to hard-code `displayName`, `brandDomain`, or default scope details for these connectors. Those fields belong upstream in `data-connectors` so generated platform registries can stay minimal. ## Validation - `node scripts/generate-connector-index.mjs --check`
## Summary - run the canonical manifest normalizer on `connectors/apple/icloud-notes-playwright.json` - restore the expected canonical/legacy field ordering so contract guardrails pass ## Validation - `node scripts/normalize-manifests.mjs --check`
## Summary - replace the four retained `feat/connector-contract-unification` connector-index entries with the immutable commit that actually contains those artifacts - keep current mainline connector entries unchanged - refresh the stale `icloud-notes-playwright@0.2.0` manifest checksum in the index ## Why `context-gateway` consumes `connector-index.json` as a registry input when refreshing its pinned snapshot. The latest versions it uses are already on `main`, but the index still retained four older versions that referenced a feature branch name: - `github-playwright@1.1.4` - `icloud-notes-playwright@0.1.0` - `instagram-playwright@1.1.0` - `oura-playwright@1.0.1` Those artifacts were originally published in commit `1097ceddc8bff1c60e29ed60cd8af9f65c594646`, so this PR points the retained historical entries at that immutable ref instead of the mutable branch name. ## Validation - `node scripts/generate-connector-index.mjs --check` - verified `1097ceddc8bff1c60e29ed60cd8af9f65c594646` contains all four retained artifact paths
## Summary - republish `icloud-notes-playwright@0.2.0` so the committed artifact matches the current manifest ordering on `main` - update `artifactSha256` in `connector-index.json` to match the republished tarball ## Why `context-gateway` currently cannot resolve the latest `data-connectors/main` because `connector-index.json` expects the current `icloud-notes` manifest ordering, but the committed tarball at `artifacts/icloud-notes-playwright/icloud-notes-playwright-0.2.0.tgz` still contains the older manifest bytes. This makes the branch publication-inconsistent. ## Validation - `CONNECTOR_ARTIFACT_REF=main node scripts/generate-connector-index.mjs` - `node scripts/generate-connector-index.mjs --check` - verified packaged `./manifest.json` sha256 is `550ba20690d3d16d809686df73f9f23f18005dd5763ce6b631a17d4d7da370c4`
Exports the cross-product Google My Activity feed (Search, Maps, YouTube,
Play, Assistant, apps) via an API-first batchexecute replay — no DOM
scraping for data.
Login drives the existing challenge-URL classification loop with real CDP
keystrokes (page.type + page.press('Enter')) so Google's form validation
accepts the submission. Prompt-on-device challenges scrape the verification
number from the page and surface it in a requestInput dialog so users on
hosts that hide the streamed canvas still know which number to tap.
MAX_PAGES is capped at 50 to comfortably finish extraction within the
5-minute session TTL on the remote-browser-service harness.
Schema Health Check — 7 issue(s) found41/48 scopes consistent | 0 missing schema files | 7 not in Gateway | 0 metadata drift | 0 orphaned View issuesNot registered in Gateway:
|
Previously requestEmail/requestPassword cached the first submission and returned it on every subsequent loop iteration, so when Google rejected the wrong credential and the URL-classification loop re-entered the input step, the same wrong value was silently re-submitted and no new requestInput dialog fired. Users typing a wrong password on their first attempt had no way to correct it — the connector just spun for the 5 minutes until the session TTL. Google's /challenge/pwd and /signin/identifier pages stay on the same URL after a rejection (error rendered inline), so any time the loop re-enters an input branch it means the previous attempt was rejected. Dropping the cache entirely makes every revisit prompt the user with a fresh dialog. The cache's original purpose was to avoid re-prompting when opensteer's login loop bounced back through the same step after an account-chooser interstitial, but in this harness the URL changes during those bounces so there's no loop-iteration overlap to skip.
Kahtaf
changed the base branch from
main
to
feat/instagram-api-playwright-connector
April 15, 2026 21:34
Kahtaf
marked this pull request as ready for review
April 15, 2026 21:34
Kahtaf
merged commit Apr 15, 2026
6a09d65
into
feat/instagram-api-playwright-connector
0 of 2 checks passed
Kahtaf
added a commit
that referenced
this pull request
Apr 15, 2026
Add missing connector-index entry and packaged artifact for google-api-playwright. The connector source, manifest, and registry entry landed via #68 but the index + tgz were never updated, so consumers that enumerate connectors via connector-index.json did not see Google My Activity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new Google My Activity connector (
google-api-playwright) that exports the user's cross-product Google activity feed (Search, Maps, YouTube, Play, Assistant, apps) using an API-first batchexecute replay — no DOM scraping for data, only for login.Problem
Users have no way to export their full Google My Activity history through Vana DataConnect. The existing
youtube-playwrightconnector only covers YouTube-specific scopes, and there is no cross-product activity scope anywhere in the registry.Approach
footprintsmyactivityuibatchexecute RPC endpoint, replaying paginatedy3VFHdcalls from inside the logged-in page context. SSR initializer globals (SNlM0e auth token, FdrFJe session id,boq_footprintsmyactivityuiserver_*build label,ds:*rpc id map) are scraped from the/myactivitylanding HTML so the connector survives Google-side rpc id rotations.y3VFHdtuple is decoded via fixed positional indices documented at the top of the connector. Output shape:{ id, productIds, productName, productIcon, timestampMicros, timestampIso, title, subtitle, action, url, appName, appUrl, device }.page.requestInputto collect the value, then real CDP keystrokes (page.type+page.press('Enter')) to submit. Google's form validation rejects synthetic setter + button.click() — only trustedInput.dispatchKeyEventevents advance the flow./challenge/dp(via<samp>tag, leaf-element digit walk, and regex fallback) and surfaces it in arequestInputdialog so users whose host hides the streamed browser canvas still know which number to tap on their phone.promptUserbanner.checkLoginStatusaccepts/myactivitydirectly, and for any other authenticatedgoogle.comdomain (e.g.myaccount.google.com/?utm_source=sign_in_no_continue, which is where Google frequently drops users after an implicit sign-in) it bounces once throughMYACTIVITY_URLand re-validates the SSR globals.MAX_PAGES = 50so extraction comfortably finishes inside the 5-minute session TTL on the remote-browser-service harness.Testing
node scripts/validate-manifests.mjs— 0 errors, 0 warnings (21 manifests validated)/signin/identifier→/challenge/pwd/challenge/pwd→/challenge/dpTap 53 on your phone, then press Submit.(scraped from Google's<samp>element)53on their Galaxy device → Google redirected tomyaccount.google.com→checkLoginStatusauto-navigated to/myactivityFiles
connectors/google/google-api-playwright.js— connector script (~620 lines)connectors/google/google-api-playwright.json— manifestconnectors/google/icons/google.svg— iconconnectors/google/schemas/google.myactivity.json— scope schemaregistry.json— new entry with sha256 checksums +lastUpdatedbumpNotes
status: "experimental"in the registry — the batchexecute contract is stable at the Google side but this is the first cross-product activity connector so it should burn in before being promoted tobeta/stable.remote-browser-servicethat exposesfill/press/type/click/url/waitForSelectoronConnectorPageAPI. Those methods are declared in the officialtypes/connector.d.tsPageAPI contract and used by several existing connectors (github, oura, meta/instagram, _conformance), but the sprite-server wrapper wasn't forwarding them until now. This connector cannot sign in without that fix landing on the harness side.