Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
4072e47
Fix native Responses prelude EOF recovery
lidge-jun Nov 7, 2026
9112b9c
Preserve lifecycle snapshots before EOF recovery
lidge-jun Nov 8, 2026
befaa31
Preserve ambiguous SSE frames before recovery
lidge-jun Nov 8, 2026
0111a23
Clarify native stream keepalive scope
lidge-jun Nov 8, 2026
3643f7b
Preserve preflight activity and lifecycle errors
lidge-jun Nov 8, 2026
f209f4a
Preserve conflicting lifecycle evidence before retry
lidge-jun Nov 8, 2026
b7bd9e5
Honor replay-unsafe lifecycle events
lidge-jun Nov 8, 2026
d08f0b4
Guard gateway upstream activity before reset recovery
lidge-jun Nov 8, 2026
4d03d55
Reject ambiguous lifecycle snapshot extensions
lidge-jun Nov 8, 2026
8af6530
Validate nested lifecycle snapshot metadata
lidge-jun Nov 8, 2026
712dc8f
Preserve response metadata during deferred reset recovery
lidge-jun Nov 8, 2026
f751e84
Document deferred response metadata boundary
lidge-jun Nov 8, 2026
a5c5769
Select reset replacement before committing the response head
lidge-jun Nov 8, 2026
0af39c9
Bound buffered reset selection by upstream reads
lidge-jun Nov 8, 2026
fba8261
Break required-tool preflight import cycle
lidge-jun Nov 8, 2026
6a887f4
Register outbound parser in Responses owner inventory
lidge-jun Nov 8, 2026
9920030
Guard ambiguous Responses retries at physical dispatch
lidge-jun Nov 8, 2026
36a1331
Merge dev into EOF recovery after dispatch conflict
lidge-jun Nov 8, 2026
eae2600
Bound upstream silence during reset selection
lidge-jun Nov 8, 2026
fc26e0b
Return direct stream heads before reset inspection settles
lidge-jun Nov 8, 2026
199fae1
Commit the reset-selection head on its own clock in quota tests
lidge-jun Nov 8, 2026
6bc7335
Merge remote-tracking branch 'origin/dev' into codex/8231-prelude-eof
Nov 9, 2026
cfe670c
fix(responses): release a replacement authorization when its send fai…
Nov 9, 2026
1748a25
fix(responses): count reset selection against the buffered turn ceiling
lidge-jun Nov 9, 2026
f5f146d
Merge origin/dev into fix/8343-8347-reset-selection-deadline
lidge-jun Nov 12, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ sauvegarde dont le contenu diffère, puis réécrit en identifiants sans préfix
| `unsafeAllowNativeLocalExec?` | `boolean` | Ancien booléen de Cursor, équivalent à `nativeLocalExec: "on"` uniquement lorsque le champ plus récent n'est pas défini. |
| `nativeLocalExec?` | `"off" \| "codex-sandbox" \| "on"` | Politique d'exécution locale de Cursor. `off` est la valeur par défaut ; actuellement, `codex-sandbox` échoue de manière sûre comme `off`. |

Pour Responses natif, la même option couvre aussi une fin de flux normale après les seuls événements de cycle de vie. Les limites de requête autonome et de remplacement restent applicables. Les requêtes hors de ces limites ne sont pas inspectées et leur flux n'est jamais retenu. Un flux direct reçoit l'en-tête de réponse original dans les 200 millisecondes, même si l'amont est encore silencieux. Si la réinitialisation ou la fin de flux survient avant le renvoi de cet en-tête, le client reçoit le remplacement avec son propre statut et ses propres en-têtes, après avoir attendu l'en-tête du remplacement au plus 15 secondes, ou le délai d'inactivité s'il est plus court. Les requêtes non diffusées collectées en JSON et les cibles de combo peuvent attendre aussi longtemps avant de choisir un en-tête, car leur client ne reçoit aucun en-tête avant la collecte ou la sélection de la réponse. Une fois l'en-tête renvoyé, ce que le remplacement doit respecter dépend de la fin du flux. Une erreur de lecture conserve le comportement existant de la voie de réinitialisation : le corps du remplacement est publié derrière l'en-tête d'origine comme auparavant. Une fin de flux propre après les seuls événements de cycle de vie est plus stricte, car elle provient d'une autre tentative répondant au même tour : le remplacement doit concorder avec l'en-tête engagé sur le statut, le texte de statut, le type de média content-type, `openai-model` et `x-codex-turn-state`. Les en-têtes volatils et de saut (`date`, identifiants de requête, `cf-ray`, `server-timing`, `x-ratelimit-*`, `openai-processing-ms`, `content-length`, `transfer-encoding`, `connection`, `keep-alive`) n'ont pas à concorder, car le client détient déjà les valeurs de l'en-tête d'origine et une véritable origine les fait varier à chaque tentative. Une divergence conserve le flux original et son erreur. Les flux directs encore inspectés après ce point reçoivent un commentaire SSE keepalive avec l'en-tête, puis toutes les 15 secondes ; la vérification préalable du combo retient ces commentaires jusqu'à ce qu'elle sélectionne une réponse.
Pour Responses natif, la même option couvre aussi une fin de flux normale après les seuls événements de cycle de vie. Les limites de requête autonome et de remplacement restent applicables. Les requêtes hors de ces limites ne sont pas inspectées et leur flux n'est jamais retenu. Un flux direct reçoit l'en-tête de réponse original dans les 200 millisecondes, même si l'amont est encore silencieux. Le remplacement n'apporte son propre statut et ses propres en-têtes que s'il est sélectionné avant le renvoi de cet en-tête : pour un flux direct, la réinitialisation ou la fin de flux doit survenir dans ces 200 millisecondes, et l'en-tête du remplacement doit arriver dans les 15 secondes suivant la réponse originale, ou dans le délai d'inactivité s'il est plus court. Les requêtes non diffusées collectées en JSON et les cibles de combo n'ont pas de fenêtre de 200 millisecondes et peuvent attendre aussi longtemps avant de choisir un en-tête, car leur client ne reçoit aucun en-tête avant la collecte ou la sélection de la réponse. Une fois l'en-tête renvoyé, ce que le remplacement doit respecter dépend de la fin du flux. Une erreur de lecture conserve le comportement existant de la voie de réinitialisation : le corps du remplacement est publié derrière l'en-tête d'origine comme auparavant. Une fin de flux propre après les seuls événements de cycle de vie est plus stricte, car elle provient d'une autre tentative répondant au même tour : le remplacement doit concorder avec l'en-tête engagé sur le statut, le texte de statut, le type de média content-type, `openai-model` et `x-codex-turn-state`. Les en-têtes volatils et de saut (`date`, identifiants de requête, `cf-ray`, `server-timing`, `x-ratelimit-*`, `openai-processing-ms`, `content-length`, `transfer-encoding`, `connection`, `keep-alive`) n'ont pas à concorder, car le client détient déjà les valeurs de l'en-tête d'origine et une véritable origine les fait varier à chaque tentative. Une divergence conserve le flux original et son erreur. Les flux directs encore inspectés après ce point reçoivent un commentaire SSE keepalive avec l'en-tête, puis toutes les 15 secondes ; la vérification préalable du combo retient ces commentaires jusqu'à ce qu'elle sélectionne une réponse.

LM Studio instruction compatibility: `singleLeadingSystemMessage: true` overrides chronological Chat instruction placement by merging text-only system/developer messages into one leading system message. The LM Studio preset enables it by default; set it to `false` to disable merging.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ account を削除しても mapping は保持され、同じ id を再追加す
| `unsafeAllowNativeLocalExec?` | `boolean` |カーソルのレガシー ブール値。新しいフィールドが設定されていない場合のみ、`nativeLocalExec: "on"` と同等です。 |
| `nativeLocalExec?` | `"off" \| "codex-sandbox" \| "on"` |カーソルのローカル実行ポリシー。 `off` がデフォルトです。 `codex-sandbox` は現在、`off` と同様にフェールクローズされます。 |

ネイティブ Responses では、ライフサイクルイベントだけを受信して正常 EOF で終了した場合にも同じオプトインが適用されます。自己完結したリクエストと置換回数の制限は変わりません。これらの制限外のリクエストは検査されず、ストリームが保留されることはありません。直接ストリームは、上流がまだ無応答でも 200 ミリ秒以内に元の応答ヘッダーを受け取ります。そのヘッダーを返す前にリセットまたは EOF が起きた場合、置換応答のヘッダーを最大 15 秒(ストールタイムアウトの方が短い場合はその時間)待ち、クライアントは置換応答をそのステータスとヘッダーのまま受け取ります。JSON に収集する非ストリーミングリクエストとコンボのターゲットは、応答の収集または選択までクライアントにヘッダーが返らないため、ヘッダーの選択を同じ時間まで待つことがあります。ヘッダーを返した後の置換可否は、ストリームがどう終了したかで決まります。読み取りエラーではリセット経路の既存動作をそのまま維持し、置換本文を元のヘッダーの後ろに公開します。ライフサイクルイベントだけを受信して正常 EOF で終了した場合は同じターンへの別の試行なので、より厳格です。置換応答はコミット済みのヘッダーとステータス、ステータステキスト、content-type メディアタイプ、`openai-model`、`x-codex-turn-state` で一致しなければなりません。変動するヘッダーとホップバイホップヘッダー(`date`、リクエスト id、`cf-ray`、`server-timing`、`x-ratelimit-*`、`openai-processing-ms`、`content-length`、`transfer-encoding`、`connection`、`keep-alive`)は一致不要です。クライアントはすでに元のヘッダーの値を持っており、実際の上流は試行ごとにこれらを変えるためです。不一致の場合は元のストリームとそのエラーを保持します。その後も検査中の直接ストリームにはヘッダーとともに SSE keepalive コメントが送られ、その後は 15 秒ごとに送られます。コンボのプリフライトは応答を選択するまでこれらのコメントを保留します。
ネイティブ Responses では、ライフサイクルイベントだけを受信して正常 EOF で終了した場合にも同じオプトインが適用されます。自己完結したリクエストと置換回数の制限は変わりません。これらの制限外のリクエストは検査されず、ストリームが保留されることはありません。直接ストリームは、上流がまだ無応答でも 200 ミリ秒以内に元の応答ヘッダーを受け取ります。置換応答が独自のステータスとヘッダーで返るのは、そのヘッダーを返す前に置換応答が選択された場合だけです。直接ストリームではリセットまたは EOF がその 200 ミリ秒以内に起きる必要があり、置換応答のヘッダーは元の応答から 15 秒以内(ストールタイムアウトの方が短い場合はその時間内)に届く必要があります。JSON に収集する非ストリーミングリクエストとコンボのターゲットには 200 ミリ秒の枠がなく、応答の収集または選択までクライアントにヘッダーが返らないため、ヘッダーの選択を同じ時間まで待つことがあります。ヘッダーを返した後の置換可否は、ストリームがどう終了したかで決まります。読み取りエラーではリセット経路の既存動作をそのまま維持し、置換本文を元のヘッダーの後ろに公開します。ライフサイクルイベントだけを受信して正常 EOF で終了した場合は同じターンへの別の試行なので、より厳格です。置換応答はコミット済みのヘッダーとステータス、ステータステキスト、content-type メディアタイプ、`openai-model`、`x-codex-turn-state` で一致しなければなりません。変動するヘッダーとホップバイホップヘッダー(`date`、リクエスト id、`cf-ray`、`server-timing`、`x-ratelimit-*`、`openai-processing-ms`、`content-length`、`transfer-encoding`、`connection`、`keep-alive`)は一致不要です。クライアントはすでに元のヘッダーの値を持っており、実際の上流は試行ごとにこれらを変えるためです。不一致の場合は元のストリームとそのエラーを保持します。その後も検査中の直接ストリームにはヘッダーとともに SSE keepalive コメントが送られ、その後は 15 秒ごとに送られます。コンボのプリフライトは応答を選択するまでこれらのコメントを保留します。

LM Studio instruction compatibility: `singleLeadingSystemMessage: true` overrides chronological Chat instruction placement by merging text-only system/developer messages into one leading system message. The LM Studio preset enables it by default; set it to `false` to disable merging.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ managed map을 활성화하면 privacy-safe selector를 만들고, 이후 계정
| `unsafeAllowNativeLocalExec?` | `boolean` | Cursor 레거시 불리언입니다. 더 새로운 필드가 설정되지 않았을 때만 `nativeLocalExec: "on"`과 같습니다. |
| `nativeLocalExec?` | `"off" \| "codex-sandbox" \| "on"` | Cursor 로컬 실행 정책입니다. 기본값은 `off`입니다. `codex-sandbox`는 현재 `off`처럼 실패를 닫습니다. |

네이티브 Responses에서는 같은 선택 설정이 라이프사이클 이벤트만 받은 뒤 정상 EOF로 끝난 경우에도 적용됩니다. 자기완결 요청과 교체 횟수 제한은 그대로 적용됩니다. 이 제한을 벗어난 요청은 검사하지 않으므로 스트림이 보류되지 않습니다. 직접 스트림은 업스트림이 아직 조용하더라도 200밀리초 안에 원본 응답 헤더를 받습니다. 그 헤더를 반환하기 전에 리셋이나 EOF가 발생하면 교체 응답의 헤더를 최대 15초(정지 시간 제한이 더 짧으면 그 시간)까지 기다리며, 클라이언트는 교체 응답을 그 응답의 상태와 헤더 그대로 받습니다. JSON으로 모으는 비스트리밍 요청과 콤보 대상은 응답을 모으거나 선택하기 전까지 클라이언트에 헤더가 전달되지 않으므로 헤더 선택을 같은 시간까지 기다릴 수 있습니다. 헤더를 반환한 뒤 교체 여부는 스트림이 어떻게 끝났는지에 따라 달라집니다. 읽기 오류는 리셋 경로의 기존 동작을 그대로 유지하여 교체 본문을 원본 헤더 뒤에 발행합니다. 라이프사이클 이벤트만 받은 뒤 정상 EOF로 끝난 경우는 같은 턴에 대한 다른 시도이므로 더 엄격합니다. 교체 응답은 커밋된 헤더와 상태, 상태 텍스트, content-type 미디어 타입, `openai-model`, `x-codex-turn-state`에서 일치해야 합니다. 변동성 및 홉 단위 헤더(`date`, 요청 id, `cf-ray`, `server-timing`, `x-ratelimit-*`, `openai-processing-ms`, `content-length`, `transfer-encoding`, `connection`, `keep-alive`)는 일치할 필요가 없습니다. 클라이언트가 이미 원본 헤더의 값을 갖고 있고 실제 업스트림은 시도마다 이 값을 바꾸기 때문입니다. 일치하지 않으면 원본 스트림과 그 오류를 유지합니다. 그 뒤에도 검사 중인 직접 스트림은 헤더와 함께 SSE keepalive 주석을 받고 그 뒤 15초마다 다시 받으며, 콤보 사전 검사는 응답을 선택할 때까지 이 주석을 보류합니다.
네이티브 Responses에서는 같은 선택 설정이 라이프사이클 이벤트만 받은 뒤 정상 EOF로 끝난 경우에도 적용됩니다. 자기완결 요청과 교체 횟수 제한은 그대로 적용됩니다. 이 제한을 벗어난 요청은 검사하지 않으므로 스트림이 보류되지 않습니다. 직접 스트림은 업스트림이 아직 조용하더라도 200밀리초 안에 원본 응답 헤더를 받습니다. 교체 응답이 자체 상태와 헤더로 전달되는 것은 그 헤더를 반환하기 전에 교체 응답이 선택된 경우뿐입니다. 직접 스트림에서는 리셋이나 EOF가 그 200밀리초 안에 발생해야 하고, 교체 응답의 헤더는 원본 응답으로부터 15초(정지 시간 제한이 더 짧으면 그 시간) 안에 도착해야 합니다. JSON으로 모으는 비스트리밍 요청과 콤보 대상은 200밀리초 창이 없으며, 응답을 모으거나 선택하기 전까지 클라이언트에 헤더가 전달되지 않으므로 헤더 선택을 같은 시간까지 기다릴 수 있습니다. 헤더를 반환한 뒤 교체 여부는 스트림이 어떻게 끝났는지에 따라 달라집니다. 읽기 오류는 리셋 경로의 기존 동작을 그대로 유지하여 교체 본문을 원본 헤더 뒤에 발행합니다. 라이프사이클 이벤트만 받은 뒤 정상 EOF로 끝난 경우는 같은 턴에 대한 다른 시도이므로 더 엄격합니다. 교체 응답은 커밋된 헤더와 상태, 상태 텍스트, content-type 미디어 타입, `openai-model`, `x-codex-turn-state`에서 일치해야 합니다. 변동성 및 홉 단위 헤더(`date`, 요청 id, `cf-ray`, `server-timing`, `x-ratelimit-*`, `openai-processing-ms`, `content-length`, `transfer-encoding`, `connection`, `keep-alive`)는 일치할 필요가 없습니다. 클라이언트가 이미 원본 헤더의 값을 갖고 있고 실제 업스트림은 시도마다 이 값을 바꾸기 때문입니다. 일치하지 않으면 원본 스트림과 그 오류를 유지합니다. 그 뒤에도 검사 중인 직접 스트림은 헤더와 함께 SSE keepalive 주석을 받고 그 뒤 15초마다 다시 받으며, 콤보 사전 검사는 응답을 선택할 때까지 이 주석을 보류합니다.

LM Studio instruction compatibility: `singleLeadingSystemMessage: true` overrides chronological Chat instruction placement by merging text-only system/developer messages into one leading system message. The LM Studio preset enables it by default; set it to `false` to disable merging.

Expand Down
Loading
Loading