codex exec --json emits duplicate id keys for web-search items
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 84/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- backend-api-design, cli, testing
Hướng nghiên cứu
Bắt đầu trong codex-rs/exec/src/exec_events.rs, nơi issue trỏ đến mục bên ngoài và các định nghĩa payload tìm kiếm web được làm phẳng. Theo dõi cách các trường đó được tuần tự hóa, rồi thêm một kiểm thử tuần tự hóa JSON thô từ chối các khóa trùng lặp, như issue yêu cầu. Công việc hoàn tất khi mỗi mục tìm kiếm web được phát ra có một id rõ ràng và kiểm thử xác nhận các khóa trùng lặp bị từ chối.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
What issue are you seeing?
codex exec --json emits two different id properties in each web-search item. Parsers that keep the first property identify the item as item_1; parsers that keep the last identify it as ws-1. A duplicate-rejecting parser cannot consume the event.
This is separate from #60990, which concerns an omitted TypeScript field.
Reproduction
Run from the repository root with the Python SDK dependencies and codex on PATH. The Responses API is a local mock; no external web request is made.
import json, os, shutil, subprocess, sys, tempfile
from pathlib import Path
sys.path[:0] = [str(Path("sdk/python/src").resolve()),
str(Path("sdk/python/tests").resolve())]
from app_server_harness import (
AppServerHarness, ev_assistant_message, ev_completed,
ev_response_created, sse,
)
def reject_duplicates(pairs):
result = {}
for key, value in pairs:
if key in result:
raise ValueError(f"duplicate key: {key}")
result[key] = value
return result
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmp:
with AppServerHarness(Path(tmp)) as harness:
added = {"type": "response.output_item.added", "item": {
"type": "web_search_call", "id": "ws-1", "status": "in_progress"}}
done = {"type": "response.output_item.done", "item": {
"type": "web_search_call", "id": "ws-1", "status": "completed",
"action": {"type": "search", "query": "example"}}}
harness.responses.enqueue_sse(sse([
ev_response_created("r1"), added, done,
ev_assistant_message("m1", "Finished."), ev_completed("r1"),
]))
env = dict(os.environ, CODEX_HOME=str(harness.codex_home),
CODEX_APP_SERVER_DISABLE_MANAGED_CONFIG="1")
proc = subprocess.run([
shutil.which("codex"), "exec", "--json", "--skip-git-repo-check",
"-c", 'web_search="cached"', "-c", "features.plugins=false",
"-c", "features.plugin_discovery_prefetch=false", "Example",
], cwd=harness.workspace, env=env, capture_output=True, text=True,
check=True, timeout=15)
for line in proc.stdout.splitlines():
event = json.loads(line)
if event.get("item", {}).get("type") == "web_search":
print(line)
try:
json.loads(line, object_pairs_hook=reject_duplicates)
except ValueError as error:
print(error)
Observed for the started item (the completed item has the same duplication):
{"type":"item.started","item":{"id":"item_1","type":"web_search","id":"ws-1","query":"","action":{"type":"other"}}}
duplicate key: id
Python's default decoder retains ws-1; a first-wins decoder retains item_1. A separate structurally equivalent Serde deserialization test returned duplicate field id.
Expected behavior
Emit one unambiguous id per item. The outer item flattens a web-search payload that also has an id. Remove the duplicate or give the raw search identifier a distinct field name if both IDs are needed. Add a raw-JSON serialization test that rejects duplicate keys.
Tested with Codex CLI 0.167.0-alpha.4.1, Python 3.14.0, and Windows; source checked at 6bfdc75f0d9e6fae313234f694839866d7c63c39.
- Ngôn ngữ chính
- Rust
- Star
- 135k
- Fork
- 21.4k
- Merge trung bình
- 1 phút
- Pull request đã merge (30 ngày)
- 995
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của openai/codex
-
bug CLI exec session
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug CLI config
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
app-server bug CLI
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug CLI exec windows-os
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
app-server bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
Issue tương tự
-
compatibility
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
aws/aws-emulator#30 · 1 bình luận ·
-
tormach-plasma refusal text with no machine reads "no machine is not declared a plasma machine"Đang mởarea:post bug effort:low P2 source:agent
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Higher Interval Candles draws nothing on a seconds chart whose interval does not divide two hoursĐang mởbug studies
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
userFRM/egui-charts#2727 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement priority::low upstream
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
Maintainer thường phản hồi trong vòng 1 ngày