diff --git a/AGENTS.md b/AGENTS.md index b1ee2a4..e496ef6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -220,7 +220,14 @@ edges stay deterministic Rust. The harness appends a terminal system prefix — gated on `SamplerConfig.anthropic_oauth` (claude-pro-max only), so API-key `anthropic`/`minimax` Messages requests stay byte-identical. Its `/v1/models` listing rides the same Bearer + - oauth-beta headers. + oauth-beta headers. THINKING REPLAY (`prune_replayed_thinking`, + all Messages requests): Anthropic validates every replayed + `thinking` block (signature model-bound, non-empty required), so + only the final assistant message's signed thinking is replayed and + only while its tool loop is open (request ends on the tool + results); everything else — unsigned cross-backend history, `tco_*` + Responses blobs, stale-model blocks — is stripped, or the request + 400s "Invalid `signature` in `thinking` block". - `openai-codex` (ChatGPT Plus/Pro, `scope_key oauth/openai-codex`, port 1455 `/auth/callback`, FORM body, authorize+token host `auth.openai.com`, client `app_EMoam…`, scope `openid profile email offline_access`, the 3 @@ -237,9 +244,15 @@ edges stay deterministic Rust. The harness appends a terminal `PlatformId::sends_codex_responses_headers()`): headers `chatgpt-account-id` (per-request from the JWT), `originator codex_cli_rs`, `OpenAI-Beta responses=experimental`, a codex `User-Agent`; `store:false` - is the shared Responses default. API-key `openai` Responses requests carry - NONE of this (byte-identical). `reasoning.effort` carries the thinking - level (incl. the codex-only `ultra`). NO websocket, NO base_instructions. + is the shared Responses default. BODY adaptation + (`adapt_body_for_codex_backend`, same gate): the backend 400s + `role:system` input ("System messages are not allowed") — system items + are hoisted into the top-level `instructions` field — and stateless + reasoning replay requires `include:["reasoning.encrypted_content"]`. + API-key `openai` Responses requests carry NONE of this + (byte-identical, pinned by a control wire test). `reasoning.effort` + carries the thinking level (incl. the codex-only `ultra`). NO + websocket, NO base_instructions. CATALOG is HARDCODED (`PlatformId::hardcoded_catalog` → `openai_codex_wire_models`, mapped through the SAME `platform_wire_model_to_entry` output): exactly the 4 `visibility=list` && diff --git a/Cargo.lock b/Cargo.lock index cf61b36..498a687 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "kigi-acp-lib" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "async-trait", @@ -5456,7 +5456,7 @@ dependencies = [ [[package]] name = "kigi-agent" -version = "0.1.5" +version = "0.1.6" dependencies = [ "chrono", "dirs 6.0.0", @@ -5486,7 +5486,7 @@ dependencies = [ [[package]] name = "kigi-agent-lifecycle" -version = "0.1.5" +version = "0.1.6" dependencies = [ "async-trait", "tokio", @@ -5495,7 +5495,7 @@ dependencies = [ [[package]] name = "kigi-auth" -version = "0.1.5" +version = "0.1.6" dependencies = [ "async-trait", "http 1.4.2", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "kigi-bin" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "clap", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "kigi-chat-state" -version = "0.1.5" +version = "0.1.6" dependencies = [ "indexmap", "kigi-compaction", @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "kigi-codebase-graph" -version = "0.1.5" +version = "0.1.6" dependencies = [ "ahash", "clap", @@ -5596,7 +5596,7 @@ dependencies = [ [[package]] name = "kigi-compaction" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "async-trait", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "kigi-config" -version = "0.1.5" +version = "0.1.6" dependencies = [ "base64", "blake3", @@ -5632,7 +5632,7 @@ dependencies = [ [[package]] name = "kigi-config-types" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "indexmap", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "kigi-crash-handler" -version = "0.1.5" +version = "0.1.6" dependencies = [ "backtrace", "libc", @@ -5657,7 +5657,7 @@ dependencies = [ [[package]] name = "kigi-env" -version = "0.1.5" +version = "0.1.6" dependencies = [ "tracing", "url", @@ -5665,7 +5665,7 @@ dependencies = [ [[package]] name = "kigi-fast-worktree" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "bytes", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "kigi-file-utils" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "aws-config", @@ -5721,7 +5721,7 @@ dependencies = [ [[package]] name = "kigi-fsnotify" -version = "0.1.5" +version = "0.1.6" dependencies = [ "criterion", "dunce", @@ -5742,7 +5742,7 @@ dependencies = [ [[package]] name = "kigi-gix-status" -version = "0.1.5" +version = "0.1.6" dependencies = [ "gix", "kigi-test-utils", @@ -5752,7 +5752,7 @@ dependencies = [ [[package]] name = "kigi-hooks" -version = "0.1.5" +version = "0.1.6" dependencies = [ "fastrand", "kigi-config", @@ -5771,7 +5771,7 @@ dependencies = [ [[package]] name = "kigi-hooks-plugins-types" -version = "0.1.5" +version = "0.1.6" dependencies = [ "serde", "serde_json", @@ -5779,7 +5779,7 @@ dependencies = [ [[package]] name = "kigi-http" -version = "0.1.5" +version = "0.1.6" dependencies = [ "kigi-auth", "kigi-log", @@ -5794,7 +5794,7 @@ dependencies = [ [[package]] name = "kigi-hunk-tracker" -version = "0.1.5" +version = "0.1.6" dependencies = [ "chrono", "dunce", @@ -5815,14 +5815,14 @@ dependencies = [ [[package]] name = "kigi-interjection-core" -version = "0.1.5" +version = "0.1.6" dependencies = [ "serde", ] [[package]] name = "kigi-log" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "chrono", @@ -5840,7 +5840,7 @@ dependencies = [ [[package]] name = "kigi-markdown" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anstyle", "anstyle-lossy", @@ -5864,14 +5864,14 @@ dependencies = [ [[package]] name = "kigi-markdown-core" -version = "0.1.5" +version = "0.1.6" dependencies = [ "pulldown-cmark", ] [[package]] name = "kigi-mcp" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "async-trait", @@ -5908,7 +5908,7 @@ dependencies = [ [[package]] name = "kigi-memory" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "arc-swap", @@ -5942,7 +5942,7 @@ dependencies = [ [[package]] name = "kigi-mermaid" -version = "0.1.5" +version = "0.1.6" dependencies = [ "fontdb", "image", @@ -5960,7 +5960,7 @@ dependencies = [ [[package]] name = "kigi-models" -version = "0.1.5" +version = "0.1.6" dependencies = [ "kigi-env", "serde", @@ -5970,7 +5970,7 @@ dependencies = [ [[package]] name = "kigi-pager-minimal" -version = "0.1.5" +version = "0.1.6" dependencies = [ "chrono", "crossterm", @@ -5987,7 +5987,7 @@ dependencies = [ [[package]] name = "kigi-pager-pty-harness" -version = "0.1.5" +version = "0.1.6" dependencies = [ "alacritty_terminal", "anyhow", @@ -6012,7 +6012,7 @@ dependencies = [ [[package]] name = "kigi-pager-render" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "anstyle", @@ -6064,7 +6064,7 @@ dependencies = [ [[package]] name = "kigi-paths" -version = "0.1.5" +version = "0.1.6" dependencies = [ "camino", "serde", @@ -6074,7 +6074,7 @@ dependencies = [ [[package]] name = "kigi-prompt-queue" -version = "0.1.5" +version = "0.1.6" dependencies = [ "serde", "serde_json", @@ -6082,7 +6082,7 @@ dependencies = [ [[package]] name = "kigi-proto-build" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "pbjson-build", @@ -6093,7 +6093,7 @@ dependencies = [ [[package]] name = "kigi-ratatui-inline" -version = "0.1.5" +version = "0.1.6" dependencies = [ "ansi-width", "anstyle-parse 0.2.7", @@ -6110,7 +6110,7 @@ dependencies = [ [[package]] name = "kigi-ratatui-textarea" -version = "0.1.5" +version = "0.1.6" dependencies = [ "arboard", "chrono", @@ -6131,7 +6131,7 @@ dependencies = [ [[package]] name = "kigi-sampler" -version = "0.1.5" +version = "0.1.6" dependencies = [ "async-openai", "async-stream", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "kigi-sampling-types" -version = "0.1.5" +version = "0.1.6" dependencies = [ "assert_matches", "async-openai", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "kigi-sandbox" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "chrono", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "kigi-secrets" -version = "0.1.5" +version = "0.1.6" dependencies = [ "regex", "serde_json", @@ -6230,7 +6230,7 @@ dependencies = [ [[package]] name = "kigi-shell" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "anyhow", @@ -6367,7 +6367,7 @@ dependencies = [ [[package]] name = "kigi-shell-base" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "chrono", @@ -6392,7 +6392,7 @@ dependencies = [ [[package]] name = "kigi-sqlite-journal" -version = "0.1.5" +version = "0.1.6" dependencies = [ "libc", "rusqlite", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "kigi-subagent-resolution" -version = "0.1.5" +version = "0.1.6" dependencies = [ "kigi-sampling-types", "kigi-tool-types", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "kigi-system-power" -version = "0.1.5" +version = "0.1.6" dependencies = [ "windows-sys 0.59.0", "zbus", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "kigi-test-support" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "anyhow", @@ -6448,7 +6448,7 @@ dependencies = [ [[package]] name = "kigi-test-utils" -version = "0.1.5" +version = "0.1.6" dependencies = [ "runfiles", "tracing", @@ -6457,11 +6457,11 @@ dependencies = [ [[package]] name = "kigi-token-estimation" -version = "0.1.5" +version = "0.1.6" [[package]] name = "kigi-tool-protocol" -version = "0.1.5" +version = "0.1.6" dependencies = [ "kigi-tool-types", "serde", @@ -6472,7 +6472,7 @@ dependencies = [ [[package]] name = "kigi-tool-runtime" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "async-trait", @@ -6490,7 +6490,7 @@ dependencies = [ [[package]] name = "kigi-tool-types" -version = "0.1.5" +version = "0.1.6" dependencies = [ "minijinja", "schemars 1.2.1", @@ -6500,7 +6500,7 @@ dependencies = [ [[package]] name = "kigi-tools" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "arc-swap", @@ -6577,7 +6577,7 @@ dependencies = [ [[package]] name = "kigi-tools-api" -version = "0.1.5" +version = "0.1.6" dependencies = [ "kigi-proto-build", "kigi-tool-protocol", @@ -6590,11 +6590,11 @@ dependencies = [ [[package]] name = "kigi-tracing-macros" -version = "0.1.5" +version = "0.1.6" [[package]] name = "kigi-tty-utils" -version = "0.1.5" +version = "0.1.6" dependencies = [ "libc", "nix 0.30.1", @@ -6604,7 +6604,7 @@ dependencies = [ [[package]] name = "kigi-tui" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "ansi-to-tui", @@ -6691,7 +6691,7 @@ dependencies = [ [[package]] name = "kigi-update" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "dunce", @@ -6720,14 +6720,14 @@ dependencies = [ [[package]] name = "kigi-version" -version = "0.1.5" +version = "0.1.6" dependencies = [ "semver", ] [[package]] name = "kigi-workspace" -version = "0.1.5" +version = "0.1.6" dependencies = [ "agent-client-protocol", "anyhow", @@ -6806,7 +6806,7 @@ dependencies = [ [[package]] name = "kigi-workspace-types" -version = "0.1.5" +version = "0.1.6" dependencies = [ "base64", "chrono", @@ -8840,7 +8840,7 @@ dependencies = [ [[package]] name = "ptyctl" -version = "0.1.5" +version = "0.1.6" dependencies = [ "alacritty_terminal", "anyhow", @@ -8858,7 +8858,7 @@ dependencies = [ [[package]] name = "ptyctl-cli" -version = "0.1.5" +version = "0.1.6" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 0ede9ab..db358d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,7 @@ members = [ ] [workspace.package] -version = "0.1.5" +version = "0.1.6" edition = "2024" license = "Apache-2.0"