Skip to content

Commit 10197c4

Browse files
committed
chore: save AGENTS.md and learning index before datadome bypass branch
Made-with: Cursor
1 parent ae7eec1 commit 10197c4

3 files changed

Lines changed: 42 additions & 19 deletions

File tree

.cursor/hooks/state/continual-learning-index.json

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,59 @@
33
"transcripts": {
44
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/7ff80e1e-d316-4cd1-9f0f-6dc4e044e981/7ff80e1e-d316-4cd1-9f0f-6dc4e044e981.jsonl": {
55
"mtimeMs": 1774268759000,
6-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
6+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
77
},
88
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/abb7fe3a-e2fb-4d6a-96c9-af2132261e36/abb7fe3a-e2fb-4d6a-96c9-af2132261e36.jsonl": {
99
"mtimeMs": 1774276015000,
10-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
10+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
1111
},
1212
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/48c31d0a-13ce-4e19-88ec-0225ad4494ad/48c31d0a-13ce-4e19-88ec-0225ad4494ad.jsonl": {
1313
"mtimeMs": 1774280028000,
14-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
14+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
1515
},
1616
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/4abb768d-dfd3-4278-8f22-5f3ccfb3a959/4abb768d-dfd3-4278-8f22-5f3ccfb3a959.jsonl": {
1717
"mtimeMs": 1774281374000,
18-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
18+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
1919
},
2020
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/7110620f-271a-4db1-87b4-279c6adfcfb7/7110620f-271a-4db1-87b4-279c6adfcfb7.jsonl": {
2121
"mtimeMs": 1774286264000,
22-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
22+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
2323
},
2424
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/b82fce76-2196-4db3-9013-49280b49e97b/b82fce76-2196-4db3-9013-49280b49e97b.jsonl": {
2525
"mtimeMs": 1774286078000,
26-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
26+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
2727
},
2828
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/d7b149aa-4f29-4d71-9c3f-19e2c665da59/d7b149aa-4f29-4d71-9c3f-19e2c665da59.jsonl": {
2929
"mtimeMs": 1774286530000,
30-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
30+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
3131
},
3232
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/7b307ef7-47b9-4311-b527-3318ac9231d3/7b307ef7-47b9-4311-b527-3318ac9231d3.jsonl": {
3333
"mtimeMs": 1774301611000,
34-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
34+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
3535
},
3636
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/50512271-3552-41e1-88d4-9d4c141964c4/50512271-3552-41e1-88d4-9d4c141964c4.jsonl": {
3737
"mtimeMs": 1774303070000,
38-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
38+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
3939
},
4040
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/5e728ef6-2360-48b8-9a4d-e9f09b8932a6/5e728ef6-2360-48b8-9a4d-e9f09b8932a6.jsonl": {
4141
"mtimeMs": 1774305471000,
42-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
42+
"lastProcessedAt": "2026-03-24T11:40:00.000Z"
43+
},
44+
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/4fba3f3f-9558-449e-a5e9-362f032f6611/4fba3f3f-9558-449e-a5e9-362f032f6611.jsonl": {
45+
"mtimeMs": 1774369653000,
46+
"lastProcessedAt": "2026-03-25T00:00:00.000Z"
4347
},
4448
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/742cd137-f286-473f-b685-4441da6c55db/742cd137-f286-473f-b685-4441da6c55db.jsonl": {
45-
"mtimeMs": 1774339903000,
46-
"lastProcessedAt": "2026-03-24T00:00:00.000Z"
49+
"mtimeMs": 1774390690000,
50+
"lastProcessedAt": "2026-03-25T00:00:00.000Z"
51+
},
52+
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/031606d7-01ca-4b3e-bad0-274af5a9a931/031606d7-01ca-4b3e-bad0-274af5a9a931.jsonl": {
53+
"mtimeMs": 1774450242000,
54+
"lastProcessedAt": "2026-03-25T16:00:00.000Z"
55+
},
56+
"/Users/jzarecki/.cursor/projects/Users-jzarecki-Projects-session-mcp/agent-transcripts/672ffd14-9bc9-4c91-9eb7-9759b40e8893/672ffd14-9bc9-4c91-9eb7-9759b40e8893.jsonl": {
57+
"mtimeMs": 1774474577000,
58+
"lastProcessedAt": "2026-03-25T16:00:00.000Z"
4759
}
4860
}
4961
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"version": 1,
3-
"lastRunAtMs": 1774339889907,
4-
"turnsSinceLastRun": 6,
5-
"lastTranscriptMtimeMs": 1774339889511,
6-
"lastProcessedGenerationId": "2a43687a-d086-4f80-aefe-13971b99c85e",
3+
"lastRunAtMs": 1774519514313,
4+
"turnsSinceLastRun": 5,
5+
"lastTranscriptMtimeMs": 1774519513950,
6+
"lastProcessedGenerationId": "492daf12-4802-4a02-a01e-a454c517b849",
77
"trialStartedAtMs": null
88
}

AGENTS.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ Durable facts and correction patterns for this workspace. Updated by continual-l
55
## Project: browserkit
66

77
- Project is named **browserkit** — decided and final. npm scope is `@browserkit`. GitHub org is `browserkit-dev` (`browserkit` org was taken on GitHub, available on npm).
8-
- GitHub repos: `browserkit-dev/browserkit` (framework — `@browserkit/core` + `@browserkit/core/testing`), `browserkit-dev/adapter-hackernews` (standalone adapter repo), `browserkit-dev/adapter-google-discover` (privatenot ready)
8+
- GitHub repos: `browserkit-dev/browserkit` (framework — `@browserkit/core` + `@browserkit/core/testing`), `browserkit-dev/adapter-hackernews`, `browserkit-dev/adapter-google-discover`, `browserkit-dev/adapter-linkedin`all standalone public repos
99
- Language is TypeScript, not Python
1010
- MCP transport is HTTP (`StreamableHTTPServerTransport`), not stdio — preferred for multi-agent deployment
1111
- Each adapter gets its own HTTP port; each connecting MCP client gets its own `McpServer + StreamableHTTPServerTransport` pair (per-session factory inside the HTTP handler). Shared state (browser, lock, rate limiter) lives outside the McpServer.
1212
- All adapters share one daemon process — restarting the daemon to reload one adapter takes all adapters down. Use `browserkit reload <site>` to restart just one adapter's MCP server without stopping the daemon (browser session preserved).
1313
- Adapter packages are plain npm packages with no naming convention — config keys are npm package names, resolved via `require(key)`
14-
- Adapters live in external git repos as standalone packages; the monorepo's `adapter-linkedin` is a reference implementation only
14+
- Adapters live in external git repos as standalone packages; the monorepo's `adapter-linkedin` is gitignored (local dev copy of the published repo)
1515
- No abstract base class for adapters — `SiteAdapter` is an interface, shared logic is standalone utility functions (composition over inheritance)
1616
- No Docker — headed browser + human handoff requires native display; Docker needs X11/XQuartz which breaks local-first UX
1717
- Correct spelling is **adapter** (not adaptor)
@@ -35,7 +35,12 @@ Durable facts and correction patterns for this workspace. Updated by continual-l
3535
- Testing utilities (`createTestAdapterServer`, `createTestMcpClient`) live at `@browserkit/core/testing` subpath — a separate harness package was explicitly rejected ("I don't think we need it, it should be in either adapter or in core")
3636
- Real Chrome (`channel: "chrome"`) is required for Google-based adapters — Playwright's bundled Chromium is blocked by Google's login with "This browser or app may not be secure". `isLoggedIn` must NOT navigate during login polling or it redirects the user away from the sign-in page.
3737
- Google Discover has NO infinite scroll in automated browser contexts — confirmed with Pixel 5, Pixel 7, both headless and watch mode, both `window.scrollBy` and `mouse.wheel`. ~10 articles is the practical ceiling per call. Do NOT mention this limitation in marketing content.
38-
- Patchright (drop-in Playwright replacement) is the next step for LinkedIn adapter — removes `Runtime.enable` CDP leak and other automation signals that authenticated sites detect. `channel: "chrome"` already covers some of the same ground for Google.
38+
- Patchright (drop-in Playwright replacement) **has been implemented** in core and all adapters — removes `Runtime.enable` CDP leak, `Console.enable` leak, and `--enable-automation` flag. Same API as Playwright; just change the import. `channel: "chrome"` still recommended on top of Patchright for Google-based adapters.
39+
- LinkedIn adapter was rebuilt 1:1 with `stickerdaniel/linkedin-mcp-server`: innerText + URL navigation (not DOM selectors), section-based architecture, 7 tools (`get_person_profile`, `get_company_profile`, `get_company_posts`, `search_people`, `search_jobs`, `get_job_details`, `get_feed`). `isAuthBlockerUrl` + `detectAuthBarrier` promoted to `@browserkit/core` as generic utilities.
40+
- CSS class selectors break on JS-heavy apps (LinkedIn proved this) — prefer `page.evaluate()` + ARIA-label walk-up from stable action buttons, or raw `innerText` extraction. This is now in the `create-adapter` scaffold template.
41+
- Framework navigates to `adapter.loginUrl` before calling `isLoggedIn()` when browser is at `about:blank` — adapters do NOT need to handle this themselves
42+
- `warm_up_browser()` (visiting google/wiki/github before login) was evaluated from stickerdaniel's code — decided as "nice to have" for first-time login, not adopted yet
43+
- `browserkit login <site>` is blocked by the `CI=1` env var that Cursor sets — must run as `CI="" node packages/core/dist/cli.js login <site>` to open a headed browser from within Cursor terminal
3944

4045
## Design Process Preferences
4146

@@ -52,3 +57,9 @@ Durable facts and correction patterns for this workspace. Updated by continual-l
5257
- Cursor uses `.cursor/mcp.json` for project-level MCP config; `.mcp.json` is the Claude Code format — these are different files serving different tools
5358
- E2E install tests are wanted: spin up a clean environment, install core + HN adapter, verify tools work, install Google Discover adapter, verify it starts but returns auth error (no login)
5459
- Squash CI fix commits to keep git history clean — user noticed multiple "fix CI" commits and asked to squash
60+
- Adapter roadmap priority: Reddit → Twitter/X (flagship, hardest bot detection) → Amazon (no consumer API at all) → Airbnb, Google Maps, Booking.com — all documented in the main README as planned adapters.
61+
- Reddit adapter is two-phase: Phase 1 = unauthenticated `old.reddit.com` (stable HTML class names, no login required); Phase 2 = authenticated (separate plan file). Target `old.reddit.com` exclusively — new Reddit is a React SPA with aggressive DOM churn.
62+
- Booking.com adapter was started (plan + Phase 1 architecture); user preference is to plan architecture first, then implement.
63+
- Phased adapter development pattern: Phase 1 is unauthenticated/mock, Phase 2 is authenticated/live. Add verification gates between phases.
64+
- Live scraping tests should run in GitHub CI via an external browser service (desired; specific service not yet chosen).
65+
- The main browserkit README doubles as the project's public-facing "blogpost" — user refers to it interchangeably; keep it polished and up-to-date with available + planned adapters

0 commit comments

Comments
 (0)