Skip to content

feat: decouple extension version from CLI version#985

Merged
jackwener merged 2 commits intomainfrom
feat/extension-version-decouple
Apr 13, 2026
Merged

feat: decouple extension version from CLI version#985
jackwener merged 2 commits intomainfrom
feat/extension-version-decouple

Conversation

@jackwener
Copy link
Copy Markdown
Owner

Summary

Extension and CLI had tightly coupled version numbers (both bumped to the same value on every release), causing semantic confusion and unnecessary Chrome Web Store submissions. This decouples them so each can release independently.

  • Extension version reset to 1.0.0 with independent versioning
  • Compatibility protocol: Extension sends compatRange (e.g. >=1.7.0) in its WebSocket hello message; daemon stores it and exposes via /status
  • opencli doctor enhanced:
    • Uses compatRange for CLI/extension compatibility checks (falls back to major-version check for older extensions)
    • Shows extension update availability from cached GitHub Releases data
  • Release workflow: release.yml now always builds and attaches opencli-extension.zip to every CLI release — users always find both CLI and extension in the same release page
  • Build workflow: build-extension.yml triggers on ext-v* tags instead of v* to avoid duplicate builds

Files changed

File Change
extension/manifest.json Version → 1.0.0
extension/package.json Version → 1.0.0, added opencli.compatRange
extension/vite.config.ts Injects __OPENCLI_COMPAT_RANGE__ at build time
extension/src/background.ts Hello message includes compatRange
src/daemon.ts Stores extensionCompatRange, exposes via /status
src/browser/daemon-client.ts DaemonStatus type includes extensionCompatRange
src/doctor.ts Compatibility check + extension update check
src/update-check.ts Caches latest extension version from GitHub Releases
.github/workflows/release.yml Always attach extension zip
.github/workflows/build-extension.yml Trigger on ext-v* instead of v*

Test plan

  • npx tsc --noEmit — passes (no new TS errors)
  • npm test — 196 files, 1487 passed, 2 skipped
  • Extension typecheck — same 6 pre-existing errors, no new ones
  • CI passes

Extension and CLI had tightly coupled version numbers (both 1.7.2),
requiring manual sync across 3 files on every release. This decouples
them so each can release independently.

Changes:
- Extension version reset to 1.0.0 with independent versioning
- Extension sends compatRange (e.g. ">=1.7.0") in hello message
  so doctor can check CLI/extension compatibility
- Daemon stores and exposes extensionCompatRange via /status
- Doctor uses compatRange for compatibility checks (falls back to
  major-version check for older extensions without compatRange)
- Doctor shows extension update availability from cached GitHub
  Releases data
- release.yml always builds and attaches extension zip to every
  CLI release, so users always find both in the same release page
- build-extension.yml triggers on ext-v* tags (not v*) to avoid
  duplicate builds
@jackwener jackwener merged commit 51bc48e into main Apr 13, 2026
14 checks passed
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