Skip to content

feat: add Safari bookmarks and frequently visited commands#37

Merged
jmcte merged 1 commit into
mainfrom
pheidon/hermes-issue-group-20260514012033
May 14, 2026
Merged

feat: add Safari bookmarks and frequently visited commands#37
jmcte merged 1 commit into
mainfrom
pheidon/hermes-issue-group-20260514012033

Conversation

@jmcte
Copy link
Copy Markdown
Contributor

@jmcte jmcte commented May 14, 2026

Summary

  • add icloud-cli safari bookmarks
  • add icloud-cli safari reading-list
  • add icloud-cli safari frequently-visited
  • document the selected issue group and privacy posture

Closes #20
Closes #36

Validation

  • bash scripts/ci/run-fast-checks.sh
  • swift test
  • swift build
  • bash scripts/check-privacy-fixtures.sh
  • CLI smoke checks against synthetic Safari fixtures

@athena-omt athena-omt added area:infra Infrastructure, CI, release, governance, scripts, or repo setup. lane:hermes Hermes macOS/native lane. review:athena Athena review governance requested. risk:medium Medium-risk change; normal care required. state:waiting-checks Waiting for CI/check status to settle. status:needs-review PR is ready for Athena review. labels May 14, 2026
@jmcte jmcte force-pushed the pheidon/hermes-issue-group-20260514012033 branch from c6c0593 to ca16b19 Compare May 14, 2026 01:39
@jmcte jmcte enabled auto-merge (squash) May 14, 2026 01:40
@jmcte jmcte merged commit 90a2e6c into main May 14, 2026
1 check passed
@jmcte jmcte deleted the pheidon/hermes-issue-group-20260514012033 branch May 14, 2026 01:41
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c6c0593592

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +51 to +54
switch (lhs.element.score, rhs.element.score) {
case let (left?, right?) where left != right: return left > right
default: return lhs.offset < rhs.offset
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Prioritize scored sites over unscored in ranking

Ensure the sort comparator treats entries with a numeric score as higher priority than entries with nil score. As written, any mixed pair (one scored, one unscored) falls through to original traversal order, so an unscored URL that appears earlier can outrank a scored URL and get a lower rank, which makes frequently-visited output inaccurate on plists where some items omit score fields.

Useful? React with 👍 / 👎.

guard FileManager.default.fileExists(atPath: fileURL.path) else { throw SafariFrequentlyVisitedError.missingTopSites(fileURL.path) }
let data: Data
do { data = try Data(contentsOf: fileURL) } catch { throw SafariFrequentlyVisitedError.unreadableTopSites(fileURL.path) }
let plist = try PropertyListSerialization.propertyList(from: data, options: [], format: nil)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Wrap TopSites plist decode errors with path-aware error

Handle PropertyListSerialization.propertyList failures the same way file-read failures are handled. Right now a malformed or partially-written TopSites.plist throws a raw Cocoa error without the file path, so users lose the command-specific unreadableTopSites(path) context and cannot tell which source file caused the failure.

Useful? React with 👍 / 👎.

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

Labels

area:infra Infrastructure, CI, release, governance, scripts, or repo setup. lane:hermes Hermes macOS/native lane. review:athena Athena review governance requested. risk:medium Medium-risk change; normal care required. state:waiting-checks Waiting for CI/check status to settle. status:needs-review PR is ready for Athena review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Safari Frequently Visited sites command Add Safari bookmarks and reading list command

3 participants