Commit Graph
829 Commits
Author SHA1 Message Date
zeekay b39c98c4d4 feat: rebrand npm to @hanzo/dev, wire ZT transport into tunnel protocol
- rust-release.yml: change npm scope from @openai to @hanzo, remove
  openai.com deploy trigger
- build_npm_package.py: rebrand all @openai/codex references to
  @hanzo/dev, rename platform packages (codex-* → hanzo-dev-*)
- stage_npm_packages.py: update tarball naming to match hanzo-dev-npm-*
- cloud.rs: complete ZT wiring — zt:// URLs now authenticate via ZT
  fabric, dial service, create TunnelConnection from channels, spawn
  ZT frame transport, and run standard dispatch loop
- zt/tunnel.rs: add run_zt_transport() — newline-delimited JSON frame
  protocol over ZtConnection (AsyncRead+AsyncWrite) with heartbeat
- Bump hanzo-tunnel dep to v0.1.1 (adds from_channels constructor)
- Add zt-tunnel feature combining zt + tunnel + hanzo-zt/tunnel
2026-03-12 00:33:29 -07:00
zeekay 9d251b3ec4 fix: publish hanzo-tunnel to crates.io, gate tunnel behind feature flag, fix CI
- hanzo-tunnel v0.1.0 published to crates.io (was path dep to ../../../tunnel)
- cli: tunnel + tunnel-bridge deps now optional behind `tunnel` feature flag
- cli: cloud module (ZT + relay) gated with #[cfg(feature = "tunnel")]
- tunnel-bridge: all hanzo_tunnel usage gated behind `tunnel` feature
- CI: fix prettier by scoping JS globs, excluding symlinked CLAUDE.md
- CI: format all workflows and docs with prettier
- Workspace compiles clean without tunnel feature (CI default)
- Local builds with `--features tunnel` still work with crates.io dep
2026-03-11 20:28:33 -07:00
zeekay 3247e56e84 Merge remote-tracking branch 'just-every-local/main'
# Conflicts:
#	.github/workflows/Dockerfile.bazel
#	.github/workflows/bazel.yml
#	.github/workflows/ci.yml
#	.github/workflows/issue-deduplicator.yml
#	.github/workflows/rust-ci.yml
#	.github/workflows/rust-release-windows.yml
#	.github/workflows/rust-release.yml
#	.github/workflows/shell-tool-mcp.yml
#	.vscode/settings.json
#	AGENTS.md
#	CHANGELOG.md
#	README.md
#	code-rs/app-server-protocol/schema/json/ClientRequest.json
#	code-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json
#	code-rs/app-server-protocol/schema/json/EventMsg.json
#	code-rs/app-server-protocol/schema/json/ExecCommandApprovalParams.json
#	code-rs/app-server-protocol/schema/json/ServerNotification.json
#	code-rs/app-server-protocol/schema/json/ServerRequest.json
#	code-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json
#	code-rs/app-server-protocol/schema/json/v1/ForkConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ForkConversationResponse.json
#	code-rs/app-server-protocol/schema/json/v1/GetUserSavedConfigResponse.json
#	code-rs/app-server-protocol/schema/json/v1/NewConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ResumeConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ResumeConversationResponse.json
#	code-rs/app-server-protocol/schema/json/v1/SendUserTurnParams.json
#	code-rs/app-server-protocol/schema/json/v1/SessionConfiguredNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ModelListResponse.json
#	code-rs/app-server-protocol/schema/json/v2/RawResponseItemCompletedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json
#	code-rs/app-server-protocol/schema/json/v2/TurnStartParams.json
#	code-rs/app-server-protocol/schema/typescript/AskForApproval.ts
#	code-rs/app-server-protocol/schema/typescript/ClientRequest.ts
#	code-rs/app-server-protocol/schema/typescript/EventMsg.ts
#	code-rs/app-server-protocol/schema/typescript/ExecApprovalRequestEvent.ts
#	code-rs/app-server-protocol/schema/typescript/ExecCommandApprovalParams.ts
#	code-rs/app-server-protocol/schema/typescript/FunctionCallOutputContentItem.ts
#	code-rs/app-server-protocol/schema/typescript/ResponseItem.ts
#	code-rs/app-server-protocol/schema/typescript/index.ts
#	code-rs/app-server-protocol/schema/typescript/v2/AskForApproval.ts
#	code-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts
#	code-rs/app-server-protocol/schema/typescript/v2/Model.ts
#	code-rs/app-server-protocol/schema/typescript/v2/index.ts
#	code-rs/app-server-protocol/src/protocol/common.rs
#	code-rs/app-server-protocol/src/protocol/v1.rs
#	code-rs/app-server-protocol/src/protocol/v2.rs
#	code-rs/app-server/src/code_message_processor.rs
#	code-rs/app-server/src/lib.rs
#	code-rs/app-server/src/message_processor.rs
#	code-rs/protocol/src/approvals.rs
#	code-rs/protocol/src/config_types.rs
#	code-rs/protocol/src/models.rs
#	code-rs/protocol/src/openai_models.rs
#	code-rs/protocol/src/prompts/permissions/approval_policy/on_request_rule.md
#	code-rs/protocol/src/protocol.rs
#	code-rs/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_open.snap
#	code-rs/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_section_open.snap
#	codex-cli/package.json
#	docs/agents.md
#	docs/config.md
#	docs/faq.md
#	docs/install.md
#	docs/release-notes/RELEASE_NOTES.md
#	docs/slash-commands.md
#	hanzo-dev/Cargo.lock
#	hanzo-dev/code-auto-drive-core/src/auto_compact.rs
#	hanzo-dev/code-auto-drive-core/src/auto_drive_history.rs
#	hanzo-dev/core/src/agent_tool.rs
#	hanzo-dev/core/src/chat_completions.rs
#	hanzo-dev/core/src/client.rs
#	hanzo-dev/core/src/client_common.rs
#	hanzo-dev/core/src/codex.rs
#	hanzo-dev/core/src/codex/compact.rs
#	hanzo-dev/core/src/codex/compact_remote.rs
#	hanzo-dev/core/src/codex/session.rs
#	hanzo-dev/core/src/codex/streaming.rs
#	hanzo-dev/core/src/config.rs
#	hanzo-dev/core/src/config/sources.rs
#	hanzo-dev/core/src/config/validation.rs
#	hanzo-dev/core/src/config_profile.rs
#	hanzo-dev/core/src/config_types.rs
#	hanzo-dev/core/src/event_mapping.rs
#	hanzo-dev/core/src/exec_command/exec_command_params.rs
#	hanzo-dev/core/src/external_agent_config.rs
#	hanzo-dev/core/src/memories/citations.rs
#	hanzo-dev/core/src/memories/mod.rs
#	hanzo-dev/core/src/memories/storage.rs
#	hanzo-dev/core/src/model_family.rs
#	hanzo-dev/core/src/openai_tools.rs
#	hanzo-dev/core/src/protocol.rs
#	hanzo-dev/core/src/remote_models/mod.rs
#	hanzo-dev/core/src/rollout/policy.rs
#	hanzo-dev/core/src/slash_commands.rs
#	hanzo-dev/exec/src/lib.rs
#	hanzo-dev/protocol/src/mcp_protocol.rs
#	hanzo-dev/tui/Cargo.toml
#	hanzo-dev/tui/src/app/events.rs
#	hanzo-dev/tui/src/app_event.rs
#	hanzo-dev/tui/src/bottom_pane/chat_composer.rs
#	hanzo-dev/tui/src/bottom_pane/memories_settings_view.rs
#	hanzo-dev/tui/src/bottom_pane/mod.rs
#	hanzo-dev/tui/src/bottom_pane/model_selection_view.rs
#	hanzo-dev/tui/src/bottom_pane/settings_overlay.rs
#	hanzo-dev/tui/src/chatwidget.rs
#	hanzo-dev/tui/src/chatwidget/agent_summary.rs
#	hanzo-dev/tui/src/chatwidget/settings_overlay.rs
#	hanzo-dev/tui/src/history_cell/plain.rs
#	hanzo-dev/tui/src/lib.rs
#	hanzo-dev/tui/src/memory_citation.rs
#	hanzo-dev/tui/src/streaming/controller.rs
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_closed.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_section_closed.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overlay_overview_layout.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overlay_overview_truncates.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overview_hints_clean.snap
#	hanzo-dev/tui/tests/ui_smoke.rs
2026-03-09 12:02:13 -07:00
GitHub Action 4eed6013b5 chore(release): 0.6.79 [skip ci] 2026-03-08 15:32:37 +00:00
GitHub Action c6e54b48e5 chore(release): 0.6.78 [skip ci] 2026-03-08 14:41:51 +00:00
GitHub Action 7ba19a3237 chore(release): 0.6.77 [skip ci] 2026-03-07 15:15:53 +00:00
GitHub Action 05547fbf2e chore(release): 0.6.76 [skip ci] 2026-03-07 13:03:16 +00:00
GitHub Action bdafc15524 chore(release): 0.6.75 [skip ci] 2026-03-06 01:22:10 +00:00
GitHub Action 2e04db2c4c chore(release): 0.6.74 [skip ci] 2026-02-27 05:34:35 +00:00
GitHub Action 4e7ced4d56 chore(release): 0.6.73 [skip ci] 2026-02-27 04:38:55 +00:00
GitHub Action 8de7fb12d5 chore(release): 0.6.72 [skip ci] 2026-02-27 01:45:38 +00:00
GitHub Action 6ccec41e5f chore(release): 0.6.71 [skip ci] 2026-02-26 22:34:40 +00:00
zeekay 163ce89652 chore(release): 0.6.74
Sync latest from openai/codex and just-every/code upstreams.
2026-02-18 13:52:07 -08:00
zeekay ca86d5f408 Merge remote-tracking branch 'origin/main' 2026-02-18 13:51:05 -08:00
zeekay 83b05674ab Merge remote-tracking branch 'openai-upstream/main'
# Conflicts:
#	.github/prompts/issue-labeler.txt
#	.github/workflows/issue-labeler.yml
#	MODULE.bazel.lock
#	codex-rs/core/src/agent/role.rs
#	codex-rs/core/src/memories/storage.rs
#	codex-rs/core/src/models_manager/manager.rs
#	codex-rs/core/src/tools/handlers/collab.rs
#	codex-rs/core/src/tools/registry.rs
#	codex-rs/core/src/tools/spec.rs
#	codex-rs/core/templates/search_tool/tool_description.md
#	codex-rs/core/tests/common/responses.rs
#	codex-rs/core/tests/suite/compact.rs
#	codex-rs/core/tests/suite/compact_remote.rs
#	codex-rs/core/tests/suite/personality.rs
2026-02-18 13:34:51 -08:00
GitHub Action a9e6f69b77 chore(release): 0.6.73 [skip ci] 2026-02-18 03:55:45 +00:00
Eric TrautandGitHub 1d01829a30 Update vendored rg to the latest stable version (15.1) (#12007)
Addresses #12002
2026-02-17 09:40:10 -08:00
zeekay af234bc908 chore(release): 0.6.72 2026-02-16 12:39:34 -08:00
GitHub Action ae5225a40f chore(release): 0.6.70 [skip ci] 2026-02-16 05:16:41 +00:00
zeekay dc8f2477e1 chore(release): 0.6.71 [skip ci] 2026-02-15 12:28:12 -08:00
GitHub Action e5d82773c4 chore(release): 0.6.69 [skip ci] 2026-02-15 07:07:30 +00:00
GitHub Action 6e8cac3a26 chore(release): 0.6.68 [skip ci] 2026-02-14 22:09:17 +00:00
GitHub Action cb1e26e422 chore(release): 0.6.70 [skip ci] 2026-02-14 20:57:49 +00:00
GitHub Action bc1a1a144c chore(release): 0.6.69 [skip ci] 2026-02-14 13:36:38 +00:00
zeekay 0fe10a4d3f Merge remote-tracking branch 'origin/main' 2026-02-13 22:30:52 -08:00
zeekay cfd825f4ac Merge openai/main: sync latest codex upstream into dev baseline 2026-02-13 17:47:01 -08:00
GitHub Action e1a0665263 chore(release): 0.6.68 [skip ci] 2026-02-14 01:38:00 +00:00
zeekay 317c1d5c67 feat(tui): remove OpenAI migration prompts, rebrand browser UI, bump 0.6.67
- Disable OpenAI model upgrade prompts (GPT-5.2/5.3 migration banners)
  Users choose their own model via /model or config.toml
- Make migration prompt UI monochromatic (no blue/green accents)
- Rebrand /chrome and /browser: remove Chrome-specific strings,
  settings section now shows "Browser" instead of "Chrome"
- Add Enso browser recommendation to README
- Bump version to 0.6.67
2026-02-13 13:13:37 -08:00
GitHub Action 0a8abf10b0 chore(release): 0.6.67 [skip ci] 2026-02-13 05:33:34 +00:00
zeekay b3621febe7 fix(release): force package.json version to 0.6.66
The merge resolution silently kept 3.0.13 from the CI-generated
release commit. Forcibly set back to 0.6.66 so the next release
workflow publishes the correct version.
2026-02-12 19:31:58 -08:00
zeekay 8809c4bcd0 docs: use official Hanzo mono logo in READMEs
Add hanzo-logo.svg (mono black) and hanzo-logo.png from the logo repo.
npm package READMEs use the PNG via GitHub raw URL so the correct mark
renders on npmjs.com instead of the old every-logo.png.
2026-02-12 19:06:00 -08:00
GitHub Action 8101a54366 chore(release): 0.6.66 [skip ci] 2026-02-12 23:34:16 +00:00
zeekay 590d573447 Merge origin/main: adopt release changelog, keep 0.6.66 version 2026-02-12 13:55:58 -08:00
zeekay 6b4a9babb0 docs: replace old Every Code logo with Hanzo Dev heading
Remove the every-logo.png image reference from all three READMEs
(main, dev-cli, codex-cli/.pack) and use a text heading instead.
The old logo was still showing "EVERY CODE" on the npm page.
2026-02-12 13:48:37 -08:00
GitHub Action 8b5fbf4227 chore(release): 3.0.13 [skip ci] 2026-02-12 21:33:49 +00:00
zeekay 3d930b066b feat(login): rebrand to Hanzo Dev, fix multi-auth, bump 0.6.66
- Replace Codex branding with Hanzo logo/styling on login success page
- Dark-first theme with Hanzo red (#fd4444) accent
- Default platform_url to hanzo.ai instead of platform.openai.com
- MCP client name/title: codex-mcp-client → hanzo-dev-mcp-client
- CLI help text: codex mcp → dev mcp
- Fix OAuth token exchange for Casdoor/hanzo.id (optional id_token,
  send client_secret alongside PKCE code_verifier)
- Fix refresh token to use id_token_or_access() fallback for Casdoor
- Restore 0.6.x version series (v3.0.12 leaked from upstream merge)
2026-02-12 10:51:15 -08:00
GitHub Action 4cf9414dd8 chore(release): 3.0.12 [skip ci] 2026-02-12 02:50:25 +00:00
pakrym-oaiandGitHub 1e81259c9a Make codex-sdk depend on openai/codex (#11503)
Do not bundle all binaries inside the SDK as it makes the package huge.
Instead depend on openai/codex
2026-02-11 16:20:10 -08:00
zeekay 84e4a5d89d fix(tui): update VT100 snapshots for zen-mode theme changes
Accept 32 refreshed VT100 snapshots after zen-mode border, padding,
and theme-driven layout changes. Includes upstream merge artifacts
(workflows, codex-cli scripts, docs, MCP connection manager).

All 39 snapshot tests now pass locally.
2026-02-11 14:35:50 -08:00
zeekay b18726d549 docs: rebrand README to Hanzo Dev, document TUI features and agent piping
Rewrite all READMEs from "Every Code" to "Hanzo Dev" branding. Add
comprehensive chat TUI documentation (Zen mode, themes, keyboard
shortcuts, session management), CLI agent piping section (Claude/Gemini/
Qwen orchestration), Auto Review docs, upstream comparison table, and
architecture overview. Update config paths to ~/.hanzo/ and default
model to gpt-5.3-codex.
2026-02-11 14:03:37 -08:00
GitHub Action f34e55b20b chore(release): 0.6.65 [skip ci] 2026-02-11 19:02:36 +00:00
GitHub Action 2f3dde7110 chore(release): 0.6.64 [skip ci] 2026-02-11 11:18:47 +00:00
GitHub Action b13c7d2d05 chore(release): 0.6.63 [skip ci] 2026-02-11 06:19:17 +00:00
James Peter 4a08f7702d Merge upstream/main: keep fork workflows and scripts 2026-02-11 14:24:12 +10:00
GitHub Action c2b35cb450 chore(release): 0.6.62 [skip ci] 2026-02-11 03:57:21 +00:00
zeekay 8fc009be0e Update TUI 2026-02-10 17:35:37 -08:00
zeekay 436ee5ff4d Remove code-rs/, rebrand all references to hanzo-dev/
- Delete entire code-rs/ directory (1796 files) — just-every/code fork
  is no longer needed; hanzo-dev/ is the canonical Rust workspace
- Update all build scripts, CI workflows, docs, and configs to
  reference hanzo-dev/ instead of code-rs/
- Update binary name references: code → dev throughout
- Fix hanzo-cli/index.js, hanzo.sh, README.md, dev-cli READMEs
- Include pre-existing TUI improvements (theme, colors, greeting,
  card styles, chatwidget refactor) and build-fast.sh enhancements
  (symlink install, smarter crate prefix detection)
- codex-rs/ (read-only upstream mirror) is untouched
2026-02-10 16:14:50 -08:00
zeekay 5017c476d2 Merge openai/main: mem v2, tool building, sandbox metadata, image handling
Brings in 42 commits from openai/codex including:
- feat: mem v2 (memory extraction, prompt module, phase 1+2 consolidation)
- feat: connector capabilities for sub-agents
- feat: sandbox metadata in turn headers, proxy-aware network routing
- fix: canonicalize wrapper approvals, heredoc prefix support
- fix: reduce open_if_present usage, websocket incrementality
- chore: split NPM packages, extract hooks crate, tool building extraction
- Strip unsupported images, sanitize MCP image output for text-only models
- Thin LTO for alpha Rust release builds
2026-02-10 14:56:40 -08:00
zeekay 8736399ea0 Remove binary, merge latest 2026-02-10 14:53:44 -08:00
Michael BolinandGitHub e8efc0b715 # Use @openai/codex dist-tags for platform binaries instead of separate package names (#11339)
https://github.com/openai/codex/pull/11318 introduced logic to publish
platform artifacts as separate npm packages (for example,
`@openai/codex-darwin-arm64`, `@openai/codex-linux-x64`, etc.). That
requires provisioning and maintaining multiple package entries in npm,
which we want to avoid.

We still need to keep the package-size mitigation (platform-specific
payloads), but we want that layout to live under a single npm package
namespace (`@openai/codex`) using dist-tags.

We also need to preserve pre-release workflows where users install
`@openai/codex@alpha` and get platform-appropriate binaries.

Additionally, we want GitHub Release assets to group Codex npm tarballs
together, so platform tarballs should follow the same `codex-npm-*`
filename prefix as the main Codex tarball.

## Release Strategy (New Scheme)

We publish **one npm package name for Codex binaries** (`@openai/codex`)
and use **dist-tags** to select platform-specific payloads. This avoids
creating separate platform package names while keeping the package size
split by platform.

### What gets published

#### Mainline release (`x.y.z`)

- `@openai/codex@latest` (meta package)
- `@openai/codex@darwin-arm64`
- `@openai/codex@darwin-x64`
- `@openai/codex@linux-arm64`
- `@openai/codex@linux-x64`
- `@openai/codex@win32-arm64`
- `@openai/codex@win32-x64`
- `@openai/codex-responses-api-proxy@latest`
- `@openai/codex-sdk@latest`

#### Alpha release (`x.y.z-alpha.N`)

- `@openai/codex@alpha` (meta package)
- `@openai/codex@alpha-darwin-arm64`
- `@openai/codex@alpha-darwin-x64`
- `@openai/codex@alpha-linux-arm64`
- `@openai/codex@alpha-linux-x64`
- `@openai/codex@alpha-win32-arm64`
- `@openai/codex@alpha-win32-x64`
- `@openai/codex-responses-api-proxy@alpha`
- `@openai/codex-sdk@alpha`

As an example, the `package.json` for `@openai/codex@alpha` (using
`0.99.0-alpha.17` as the `version`) would be:

```
{
  "name": "@openai/codex",
  "version": "0.99.0-alpha.17",
  "license": "Apache-2.0",
  "bin": {
    "codex": "bin/codex.js"
  },
  "type": "module",
  "engines": {
    "node": ">=16"
  },
  "files": [
    "bin"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/openai/codex.git",
    "directory": "codex-cli"
  },
  "packageManager": "[email protected].2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
  "optionalDependencies": {
    "@openai/codex-linux-x64": "npm:@openai/[email protected].0-alpha.17-linux-x64",
    "@openai/codex-linux-arm64": "npm:@openai/[email protected].0-alpha.17-linux-arm64",
    "@openai/codex-darwin-x64": "npm:@openai/[email protected].0-alpha.17-darwin-x64",
    "@openai/codex-darwin-arm64": "npm:@openai/[email protected].0-alpha.17-darwin-arm64",
    "@openai/codex-win32-x64": "npm:@openai/[email protected].0-alpha.17-win32-x64",
    "@openai/codex-win32-arm64": "npm:@openai/[email protected].0-alpha.17-win32-arm64"
  }
}
```

Note that the keys in `optionalDependencies` have "clean" names, but the
values have the tag embedded.

### Important note

**Note:** Because we never created the new platform package names on npm
(for example,
`@openai/codex-darwin-arm64`) since #11318 landed, there are no extra
npm packages to clean up.

## What changed

### 1. Stage platform tarballs as `@openai/codex` with platform-specific
versions

File: `codex-cli/scripts/build_npm_package.py`

- Added `CODEX_NPM_NAME = "@openai/codex"` and platform metadata
`npm_tag` values:
- `darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-x64`,
`win32-arm64`, `win32-x64`
- For platform package staging (`codex-<platform>` inputs), switched
generated `package.json` from:
  - `name = @openai/codex-<platform>`
  to:
  - `name = @openai/codex`
- Added `compute_platform_package_version(version, platform_tag)` so
platform tarballs have unique
versions (`<release-version>-<platform-tag>`), which is required because
npm forbids re-publishing
  the same `name@version`.

### 2. Point meta package optional dependencies at dist-tags on
`@openai/codex`

File: `codex-cli/scripts/build_npm_package.py`

- Updated `optionalDependencies` generation for the main `codex` package
to use npm alias syntax:
- key remains alias package name (for example,
`@openai/codex-darwin-arm64`) so runtime lookup behavior is unchanged
  - value now resolves to `@openai/codex` by dist-tag
- Stable releases emit tags like `npm:@openai/codex@darwin-arm64`.
- Alpha releases (`x.y.z-alpha.N`) emit tags like
`npm:@openai/codex@alpha-darwin-arm64`.

### 3. Publish with per-tarball dist-tags in release CI

File: `.github/workflows/rust-release.yml`

- Reworked npm publish logic to derive the publish tag per tarball
filename:
  - platform tarballs publish with `<platform>` tags for stable releases
- platform tarballs publish with `alpha-<platform>` tags for alpha
releases
- top-level tarballs (`codex`, `codex-responses-api-proxy`, `codex-sdk`)
continue using
the existing channel tag policy (`latest` implicit for stable, `alpha`
for alpha)
- Added fail-fast behavior for unexpected tarball names to avoid silent
mispublishes.

### 4. Normalize Codex platform tarball filenames for GitHub Release
grouping

Files: `scripts/stage_npm_packages.py`,
`.github/workflows/rust-release.yml`

- Renamed staged platform tarball filenames from:
  - `codex-linux-<arch>-npm-<version>.tgz`
  - `codex-darwin-<arch>-npm-<version>.tgz`
  - `codex-win32-<arch>-npm-<version>.tgz`
- To:
  - `codex-npm-linux-<arch>-<version>.tgz`
  - `codex-npm-darwin-<arch>-<version>.tgz`
  - `codex-npm-win32-<arch>-<version>.tgz`

This keeps all Codex npm artifacts grouped under a common `codex-npm-`
prefix in GitHub Releases.

### 5. Documentation update

File: `codex-cli/scripts/README.md`

- Updated staging docs to clarify that platform-native variants are
published as dist-tagged
  `@openai/codex` artifacts rather than separate npm package names.

## Resulting behavior

- Mainline release:
  - `@openai/codex@latest` resolves the meta package
- meta package optional dependencies resolve
`@openai/codex@<platform-tag>`
- Alpha release:
  - users can continue installing `@openai/codex@alpha`
- alpha meta package optional dependencies resolve
`@openai/codex@alpha-<platform-tag>`
- Release assets:
- Codex npm tarballs share `codex-npm-` prefix for cleaner grouping in
GitHub Releases

This preserves platform-specific payload distribution while avoiding
separate npm package names and
improves release-asset discoverability.

## Validation notes

- Verified staged `package.json` output for stable and alpha meta
packages includes expected alias targets.
- Verified staged platform package manifests are `name=@openai/codex`
with unique platform-suffixed versions.
- Verified publish tag derivation maps renamed platform tarballs to
expected stable and alpha dist-tags.
2026-02-10 10:33:47 -08:00