Skip to content

Make Chrome bookmarks easy to capture and review in batches - #37

Draft
szmyty wants to merge 1 commit into
mainfrom
agent/chrome-bookmark-batches
Draft

szmyty wants to merge 1 commit into
mainfrom
agent/chrome-bookmark-batches

Conversation

@szmyty

@szmyty szmyty commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Chrome capture already existed, but trying it required navigating a media-oriented capture command and a private archive containing profile/folder metadata. This adds a direct local capture → inspect → share workflow:

uv sync --locked
uv run mindcap bookmarks prepare

The command captures readable profiles in the selected Chrome channel, verifies the saved archive, and prints counts plus the first numbered Markdown batch to inspect. Defaults: a private ~/Downloads/mindcap-bookmarks workspace, 50 bookmark occurrences per file, and a 20,000-character ceiling. bookmarks batches <bundle> --batch-size 25 re-batches an existing verified capture without reading Chrome again.

  • Keep raw and normalized captures intact. Separate batch files omit profile/folder names, timestamps, IDs and local paths; preserve eligible duplicate occurrences and source ordering; screen obvious private/credential-bearing links; remove known tracking parameters; and retain a local withheld-index report, provenance/checksums and progress checklist. Titles and URLs still require local inspection before manually sharing.
  • Route the new CLI through typed facade commands and provider-owned workflow/export code. No URL fetching, AI categorization, browser modification, upload, merge or publication is introduced; bookmark capture needs no Playwright browser download.
  • Harden saved-bundle verification against missing/unchecked artifacts, alternate normalized-path substitution, unsafe paths/symlinks, malformed identity/count/checksum records and digest mismatches. Ignore malformed optional Chrome display-name metadata; withhold legacy hexadecimal IP spellings.
  • Replace stale monorepo installation instructions and add a complete Chrome walkthrough plus library/CLI documentation. Normalize pre-existing formatter-only whitespace in the vault catalog and touched CLI file so the checked-in formatter gates pass; vault behavior is unchanged.

Validation on tree be1d6163de19679d379f6a7dc8bea7151e4baa78: 617 tests passed, including architecture boundaries; Ruff lint/format passed with both the uv-lock and Poetry-lock versions; strict focused Mypy passed on 15 source/test files; wheel and sdist built; a fresh wheel-only installation captured 123 synthetic occurrences from two profiles, retained 120 in 50/50/20 batches, withheld three, then re-batched 25/25/25/25/20 with the same source hash. Synthetic tests cover source preservation, duplicate ordering, unsafe links, Unicode/Markdown/control text, no network, private metadata omission, empty output, batch bounds, failed writes/no overwrite, malformed captures and bundle substitution. No real browser profiles or bookmark data were accessed.

Full-repository Mypy still reports the exact same 28 pre-existing diagnostics in nine files as main; no new diagnostics were introduced. Local offline test runs clear this environment's inherited SOCKS proxy because an existing Suno HTTP-client construction test otherwise expects an optional SOCKS transport; production dependencies are unchanged.

Related to completed #23 and future #35. This is the bounded manual-review helper requested by the maintainer; incremental snapshot comparison, Mindgarden source-bundle integration and publication approval remain #35/downstream work.

GitHub Actions CI run 39127141463 passed on head d568285c3089f690b345029ed88eeda749327b99: Poetry configuration/install, formatting, lint, full tests, architecture boundaries, wheel/sdist build, packaged-content validation and clean-tree check.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant