feat: set up preview versions monitoring and preview registry for JetBrains - #573
Open
EugeneTheDev wants to merge 3 commits into
Open
feat: set up preview versions monitoring and preview registry for JetBrains#573EugeneTheDev wants to merge 3 commits into
EugeneTheDev wants to merge 3 commits into
Conversation
EugeneTheDev
force-pushed
the
eugenethedev/preview-registry
branch
from
September 4, 2026 12:32
118a105 to
275dd41
Compare
EugeneTheDev
force-pushed
the
eugenethedev/preview-registry
branch
from
September 9, 2026 13:07
275dd41 to
89a2855
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Adds an opt-in preview channel so JetBrains IDEs can ship newer, unstable ACP wrapper builds (starting with
codex-acpandclaude-acp) without affecting the public registries.An agent may now declare an optional
previewblock in itsagent.jsonholding exactlyversion+distribution. The build emits a third, self-contained indexdist/registry-for-jetbrains-preview.jsonin which a previewed agent appears as an ordinary entry — sameidand metadata, withversion/distributionsubstituted from thepreviewblock and thepreviewkey stripped. Agents without apreviewblock appear there at their stable version, so the file is a drop-in replacement forregistry-for-jetbrains.json.Key design decisions
X.Y.Z-preview.N— valid semver;1.9.0-preview.Nranks below1.9.0, andpreview.10correctly outrankspreview.2(numeric prerelease identifiers).preview.versionmeans "the newest version we know about", so it may legitimately hold a plainX.Y.Zrelease. A stale preview is not an error: the hourly checker writesmax(highest published preview, highest published stable), and the build falls back to the stable entry when stable is ahead. No build failure, no downgrade for preview users.verify_agents.pyandprotocol_matrix.pystay stable-only), their URLs are never probed, and no new CI jobs are added. The only preview-specific check is offline: the package spec's pinned version must equalpreview.version. Speed and simplicity over safety on an explicitly unstable channel.npx/uvxonly —binarypreview distributions are rejected by the schema.Changes
Schema & manifests
agent.schema.json: anchored the rootversionpattern (a prerelease can no longer leak into the stable field); added thepreviewChanneldefinition (required: version + distribution,additionalProperties: false,npx/uvxreusingpackageDistribution).previewblocks forcodex-acpandclaude-acp.Build
registry_utils.py:PREVIEW_VERSION_RE,parse_preview_version,is_preview_version,semver_sort_key,version_tuple/normalize_release_version(hoisted from the checker),strip_preview, andresolve_preview_entry— the single definition of "what a preview entry is", shared by all scripts.build_registry.py: offlinevalidate_preview; both public registries mapped throughstrip_preview; third output written, with a build summary listing which ids are actually ahead of stable; optionalregistry_dirargument for testability.build-registry.yml: new file added to the release assets (S3aws s3 sync dist/needs no change).Hourly version updates
update_versions.py:VersionUpdate.channel;fetch_distribution_versionswith a per-agent source cache so both channels share one fetch per source;get_highest_preview_version;check_agent_preview_version; channel-branchingapply_update;channelin the--jsonpayload and a new--channelsfilter. Thedist-tags.latestfallback remains stable-only.update-versions.yml: staging map re-keyedpath → {channel → version}(a path-only key let one channel mask the other) and asserted against the right field per channel; auth verification filtered to stable ids and skipped when empty; channel rendered in commit messages.Docs & tooling
FORMAT.md,AGENTS.md,README.md, including the new CDN path and the wrapper-repo prerequisite (npm publish --tag preview— publishing a prerelease without it movesdist-tags.latestonto it).--with jsonschemato both test runners: schema validation was silently skipped in every test run before this.