- Add `recommended` field to AddonInfo model (omitted from output when false)
- Rename `_load_repo_tags` to `_load_repo_config` to load all addon metadata
- Sort output: recommended addons first, then by stars descending
- Mark 5 initial recommended addons: zotero-pdf-translate, zotero-better-notes,
zotero-better-bibtex, jasminum, paper-chat-for-zotero
- Add 4 test cases for recommended field serialization and deserialization
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `tags` field to AddonInfo model with serialization support
- Add `_load_repo_tags()` to CacheScraper to read tags from addon files
- Populate 160 addon files with curated tags using 8 categories:
ai, metadata, reader, notes, attachment, interface, integration, utility
- Add test cases for tags field in AddonInfo model
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously, releases cached with parse_success=False were never
re-attempted. Now "Download failed" entries are excluded from
checked tags so they get retried on the next run.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tags like "zotero-plugin/v0.9.0" contain "/" which broke the download
filename path construction, causing the file write to target a
non-existent subdirectory.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use target="7.*" instead of "7.0" to match any version in the
major version series. This allows plugins with min=7.5.0 to still
appear in the Zotero 7 compatible list.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. get_releases() now fetches all pages (up to 1000 releases)
2. Remove redundant _check_for_updates() that ran on every release
3. Only check update_url for the latest cached release via
_check_latest_release_update_url()
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use proper version comparison instead of just major version.
Now correctly handles cases like min=6.999 which should not be
compatible with Zotero 6 (since 6.0 < 6.999).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add update_url field to CachedRelease to persist update URL in cache
- Add get_latest_release() method to RepoCache for retrieving newest release
- Add _check_latest_release_update_url() to check for updates even when
no new GitHub releases exist
- Now checks update_url on every run, not just when parsing new releases
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Avoid unnecessary file modifications by only updating last_checked
when there are new releases added or old releases deleted.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>