Skip to content

feat(ext): land bookmark-all-tabs on main (#46)#51

Merged
paperhurts merged 2 commits into
mainfrom
feat/extension-ui-polish
Jun 13, 2026
Merged

feat(ext): land bookmark-all-tabs on main (#46)#51
paperhurts merged 2 commits into
mainfrom
feat/extension-ui-polish

Conversation

@paperhurts

Copy link
Copy Markdown
Owner

Closes #46.

PR #50 was merged into its stacked base (feat/extension-ui-polish) rather than main, so the bookmark-all-tabs work never reached main and #46 stayed open (GitHub only auto-closes linked issues on merges to the default branch). This PR lands that exact commit on main.

The diff is precisely PR #50's changes — PR #49's content already merged to main, so the only delta between feat/extension-ui-polish and main is the bookmark-all-tabs work:

  • core: addBookmarks (dedupe-safe batch append) + export.
  • extension-shared: saveAllTabs + SaveAllTabsResult, applySaveAllResult, bookmark-factory folder option, popup "Save all tabs" button/handler.
  • manifests: tabs permission (both). ⚠️ widens install prompt to "Read your browsing history".
  • tests + docs.

Already verified on the branch: core 82 tests, extension-shared 115 tests, typecheck + builds clean.

🤖 Generated with Claude Code

paperhurts and others added 2 commits June 13, 2026 17:20
Adds a "Save all tabs" popup button that saves every http(s) tab in the
current window in one batched bookmarks.json write.

core:
- addBookmarks(file, bookmarks, nowIso): pure, replay-safe batch append that
  de-dupes by URL against existing *active* bookmarks and within the batch.
  Tombstoned URLs aren't treated as duplicates (re-save allowed). Exported.

extension-shared:
- bookmark-factory: optional `folder` input (default "").
- save-flow: saveAllTabs(...) + SaveAllTabsResult (shared SaveFailure type,
  reuses classify). Pre-filters unsafe schemes via isSafeBookmarkUrl, builds a
  bookmark per safe tab, then one updateBookmarksOrBootstrap call whose mutator
  applies addBookmarks; reports saved / skippedUnsafe / skippedDuplicate / total.
- save-result-view: applySaveAllResult(...) — count message + Saved ✓ + auto-close.
- popup: "Save all tabs" button (magenta secondary) + handler. Restricts the
  batch to http(s) tabs (isSafeBookmarkUrl also allows chrome:/about:, which
  aren't useful bookmarks); groups saves into a dated `Session YYYY-MM-DD` folder.

manifests: add the `tabs` permission (chrome + firefox). NOTE: this widens the
install prompt to "Read your browsing history" — needed to read every tab's
url/title.

tests: addBookmarks (5), saveAllTabs (6), applySaveAllResult (3).
docs: CLAUDE.md roadmap item 8 -> done; smoke-test steps in both READMEs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(ext): bookmark all open tabs in one action (#46)
@paperhurts paperhurts merged commit 6708ed4 into main Jun 13, 2026
1 check passed
@paperhurts paperhurts deleted the feat/extension-ui-polish branch June 13, 2026 22:04
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.

Feature: Bookmark all open tabs in one action

1 participant