Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ jobs:
file: ./Dockerfile
platforms: linux/${{ matrix.arch }}
build-args: |
CODEX_CLI_VERSION=${{ steps.meta.outputs.codex_version || '0.152.1' }}
CODEX_CLI_VERSION=${{ steps.meta.outputs.codex_version || '0.153.2' }}
tags: |
${{ env.REGISTRY }}/${{ steps.meta.outputs.image_name }}:${{ matrix.arch }}-${{ steps.meta.outputs.version_tag }}
push: true
Expand All @@ -104,7 +104,7 @@ jobs:
file: ./Dockerfile
platforms: linux/${{ matrix.arch }}
build-args: |
CODEX_CLI_VERSION=${{ steps.meta.outputs.codex_version || '0.152.1' }}
CODEX_CLI_VERSION=${{ steps.meta.outputs.codex_version || '0.153.2' }}
tags: |
${{ env.REGISTRY }}/${{ steps.meta.outputs.image_name }}:${{ matrix.arch }}-${{ steps.meta.outputs.version_tag }}
push: true
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ RUN node --version \
&& mise --version

# Install global npm tools (codex + MCP utilities)
ARG CODEX_CLI_VERSION=0.152.1
ARG CODEX_CLI_VERSION=0.153.2
ENV CODEX_CLI_VERSION=${CODEX_CLI_VERSION}
RUN npm install -g \
@openai/codex@${CODEX_CLI_VERSION} \
Expand Down Expand Up @@ -119,7 +119,7 @@ RUN npx --yes node-gyp rebuild --directory=node_modules/node-pty || true \
# ── Stage 6: Runtime ─────────────────────────────────────────────────
FROM runtime-base AS runtime

ARG CODEX_CLI_VERSION=0.152.1
ARG CODEX_CLI_VERSION=0.153.2
ENV CODEX_CLI_VERSION=${CODEX_CLI_VERSION}

WORKDIR /app
Expand Down
4 changes: 2 additions & 2 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,8 @@ The same image can serve both a domain root and a proxy subpath (for example, `h

```bash
docker build \
--build-arg CODEX_CLI_VERSION=0.152.1 \
-t codex-webui:0.152.1 .
--build-arg CODEX_CLI_VERSION=0.153.2 \
-t codex-webui:0.153.2 .
```

Nginx must retain `/codex/` in browser-facing URLs and strip it when proxying to the backend. The trailing slashes on both `location` and `proxy_pass` are required:
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,8 @@ Docker Compose 中使用时,`proxy_pass` 改为 `http://codex-webui:8172`,

```bash
docker build \
--build-arg CODEX_CLI_VERSION=0.152.1 \
-t codex-webui:0.152.1 .
--build-arg CODEX_CLI_VERSION=0.153.2 \
-t codex-webui:0.153.2 .
```

Nginx 必须保留浏览器侧的 `/codex/` 前缀,并在转发到后端时将它移除。`location` 和 `proxy_pass` 末尾的 `/` 均不可省略:
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ services:
# build:
# context: .
# args:
# CODEX_CLI_VERSION: "0.152.1"
# CODEX_CLI_VERSION: "0.153.2"
ports:
- "${PORT:-8172}:8172"
environment:
Expand Down
4 changes: 2 additions & 2 deletions docs/conversation-branches.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Each version is a real app-server thread. Switching versions is therefore ordina
- New `POST /api/threads` requests include experimental `historyMode: "paginated"`. If app-server does not confirm paginated mode, the backend best-effort deletes the new thread and fails the request.
- Branch creation uses only `thread/fork` with experimental `beforeTurnId`. The in-place `thread/revert` path is intentionally unused: it rewrites history while keeping the thread id, which would give the client two sources of truth that are indistinguishable by id.
- `beforeTurnId` is preferred over `lastTurnId` because it also accepts interrupted turns. `lastTurnId` rejects them, and interrupted turns are roughly 1 in 13 in practice — all of which would otherwise be uneditable.
- Both ordinary and message-level forks pass `excludeTurns: true`. The pinned 0.152.1 fork response is metadata-only; the backend discovers the child's complete persisted turn-ID prefix through `thread/turns/list` with `itemsView: "notLoaded"` before writing provenance. Message-level forks compare that prefix with the requested boundary exactly.
- Both ordinary and message-level forks pass `excludeTurns: true`. The pinned 0.153.2 fork response is metadata-only; the backend discovers the child's complete persisted turn-ID prefix through `thread/turns/list` with `itemsView: "notLoaded"` before writing provenance. Message-level forks compare that prefix with the requested boundary exactly.
- Message branching discovers the source's complete ordered turn IDs through the same metadata-only pages. It fails immediately if the descending walk observes `inProgress`, requires the edited turn to exist in that complete order, and reads only that turn's user message through a strict `thread/items/list` path. The strict path propagates paging refusals and fails on foreign turn attribution, cursor loops, or its page bound; the UI-facing empty-result normalization is not used for provenance.
- The source metadata read occurs once, immediately before `thread/fork`. It validates the source id, paginated mode, and product rule that the thread is not active. This narrows the existing read/fork race without claiming atomicity: a later turn cannot enter the committed prefix because `beforeTurnId` copies strictly before the edited turn, and the child prefix is still compared for exact ordered equality before provenance is written.
- Fork responses must remain paginated and identify the expected parent. A mismatched source, history mode, prefix, duplicate turn ID, or non-advancing cursor fails closed. Once a distinct child id exists but before provenance commits, failure triggers a compensating `thread/delete` of that child.
Expand Down Expand Up @@ -150,7 +150,7 @@ Rendered with `@xyflow/react` over a `d3-hierarchy` tidy-tree layout. Layout is

## Empty Paginated Threads Use Method-Specific Refusals

The pinned 0.152.1 app-server reports one pre-message state differently on the
The pinned 0.153.2 app-server reports one pre-message state differently on the
two paging methods still used by this client:

| Method | Refusal before the first user message | Normalized result |
Expand Down
6 changes: 3 additions & 3 deletions docs/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,16 @@ HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \

| ARG | 默认值 | 说明 |
|-----|--------|------|
| `CODEX_CLI_VERSION` | `0.152.1` | **运行时**镜像内全局安装的 codex npm 包版本 |
| `CODEX_CLI_VERSION` | `0.153.2` | **运行时**镜像内全局安装的 codex npm 包版本 |

构建阶段生成协议类型用的是 `@openai/codex` devDependency(由 `pnpm-lock.yaml` 锁定),**不受本 ARG 控制**。改 `CODEX_CLI_VERSION` 时须同步更新 `package.json` 里的 devDependency,否则会出现「类型按 A 版本生成、运行时跑 B 版本」的错配。版本的唯一真相源是 `package.json`,Dockerfile / docker-compose / CI fallback 均跟随它。

本地构建:
```bash
docker compose build --build-arg CODEX_CLI_VERSION=0.152.1
docker compose build --build-arg CODEX_CLI_VERSION=0.153.2
```

CI 由 `codex-*` 格式的 tag 触发,tag 名会被解析成本 ARG:`codex-0.152.1` → `0.152.1`。同一 codex 版本重发镜像用 `codex-0.152.1-2` 这类后缀。tag 名不合该格式会导致解析失败、构建报错。
CI 由 `codex-*` 格式的 tag 触发,tag 名会被解析成本 ARG:`codex-0.153.2` → `0.153.2`。同一 codex 版本重发镜像用 `codex-0.153.2-2` 这类后缀。tag 名不合该格式会导致解析失败、构建报错。

## 反向代理与子目录部署

Expand Down
2 changes: 1 addition & 1 deletion docs/frontend-state.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ Multi-thread 架构:`threadsById` 存储所有 thread 的独立运行时状态
- **重开不丢分页**:若返回页的 turn 全部已在本地时间线中,则保留现有时间线与 `historyCursor`,不做替换 —— 否则离开再回来会把已加载的更早历史悄悄丢掉。若返回页含未知 turn,说明会话在别处推进过,以服务端为准整体替换。
- **迟到响应保护**:成功与失败回调都先检查运行时是否仍存在。store 的 setter 是 create-if-absent 的,删除进行中若有 in-flight 响应落地,不加保护会把已删会话的外壳重新建出来。
- **后台恢复不写指针**:刷新/重连恢复会遍历所有已加载线程,若允许它们写活跃分支指针,每棵树会指向恢复顺序中的最后一个成员,正是该指针要解决的问题。这两条路径显式传 `recordActive: false`。
- **fork 也只导航**:钉住的 0.152.1 fork 响应刻意请求 metadata-only。侧边栏不再从响应里的 `thread.turns` 或并行 auxiliary reads 自行 hydration;后端提交 provenance 后才返回,随后路由的 canonical opener 统一分页历史并读取继承后的 token usage / turn diff / turn error。
- **fork 也只导航**:钉住的 0.153.2 fork 响应刻意请求 metadata-only。侧边栏不再从响应里的 `thread.turns` 或并行 auxiliary reads 自行 hydration;后端提交 provenance 后才返回,随后路由的 canonical opener 统一分页历史并读取继承后的 token usage / turn diff / turn error。
- **降级只读同样分页**:正常 resume 失败后,路由并行读取 metadata 与最近 20 个 summary turns,两者都成功且路由仍指向目标 thread 时才应用;更早历史沿用同一个 `historyCursor` 与显式“加载更早的消息”入口。已有 live runtime 会被显式切换为 `readOnly`,避免只读快照仍保留可写模式。

Approval 与 user-input request 会为自己的 `turnId` 保留空 turn entry,即使最近一页历史没有该 turn。`writeStdin` 回调的 item 可属于更早的 turn,因此卡片按回调 turn 渲染为 unattached request,而不是倒挂回原 command 或改变其 lifecycle。
Expand Down
4 changes: 4 additions & 0 deletions docs/remaining-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,10 @@
- [ ] `thread/backgroundTerminals/clean` 等剩余 experimentalApi 能力按开关暴露。
- [ ] `modelProvider/authRecoveryStarted` / `authRecoveryCompleted`(0.152.1 新增):**前置依赖 Bedrock 支持,已决定不做**。上游只有 `amazon_bedrock` 实现 `auth_recovery_messages`,且发射被 `uses_aws_auth_recovery()`(`ConfiguredAwsProfile` / `AwsSdk`)门控,因此仅在 model provider 为 Amazon Bedrock 且走 AWS 托管凭证(profile / 环境凭证链)时触发;Codex 托管的 Bedrock API key 与 AWS access keys 不触发,ChatGPT / OpenAI API key 更不触发。该分支是单次凭证刷新而非多步重试,`message` 为写死的英文常量,且失败无对应通知(`Completed` 仅表示成功)。两个方法目前落在前端 dispatcher 的 unknown 分支;在支持 Bedrock 之前,唯一有意义的独立改动是归入 TIER3 消除噪音。
- [ ] `project/list` 的 `sortKey` / `sortDirection` 与 `Project.recencyAt`(0.152.1 新增):按最近活跃排序项目列表的前提已具备,当前仍只用手动 position 序。
- [x] `request_user_input_async`(0.153.0 新增):`agentMessage.questions` 已进入后端 OpenAPI、前端统一 normalizer 与消息展示;建议答案作为只读提示展示,自由文本仍通过普通新消息回复,不与会阻塞 turn 的 `item/tool/requestUserInput` 混用。
- [x] 新模型推理强度:0.153.2 的真实 `model/list` 已返回 `max` / `ultra`,后端 OpenAPI 与前端选择器已同步放宽并完成冒烟验证。
- [ ] `plugin/reconcile` 与 `plugin/reconcile` 相关变更通知(0.153.0 新增):当前安装、卸载与列表流程不依赖 reconcile;待出现插件落盘状态漂移的真实用例后再接入,避免引入无意义轮询。
- [ ] `AppsConfig.links`(0.153.0 新增):当前 Apps 页面只消费 app 列表与启用状态,尚未展示外部链接配置。

### 数据、检索与审计

Expand Down
2 changes: 1 addition & 1 deletion docs/upstream/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Do not edit them. Fix anything wrong by refreshing from upstream.

| File | Upstream path | Tag |
|---|---|---|
| `codex-app-server-0.152.1.md` | `codex-rs/app-server/README.md` | `rust-v0.152.1` |
| `codex-app-server-0.153.2.md` | `codex-rs/app-server/README.md` | `rust-v0.153.2` |

The tag matches the `@openai/codex` version pinned in the root `package.json`.
Refresh after bumping that dependency — a protocol migration is exactly when a
Expand Down
Loading