Skip to content

fix(opencodez): handle Responses lifecycle and empty continuations - #12

Merged
Krablante merged 1 commit into
mainfrom
responses-lifecycle
Oct 16, 2026
Merged

Krablante merged 1 commit into
mainfrom
responses-lifecycle

Conversation

@Krablante

@Krablante Krablante commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Codex Responses could reject partial_answer, stop early on end_turn: false, and treat terminal incomplete output as an ordinary finish. Compatible follow-ups with no new input also resent the whole working context.

This change preserves response phases through SDK/native parsing and history replay, continues controlled interruptions through the existing session loop, and surfaces output limits, content filtering, and unknown incomplete outcomes as non-retryable errors. Partial output and reported usage remain stored; incomplete usage does not replace the completed context baseline. Incomplete compaction cannot install state or fall back to another model.

Compatible WebSocket follow-ups can send input: [] with previous_response_id. Full-request fallback reports bounded, content-free reasons through the existing plugin logging API. Prefix comparison avoids allocating a second history array.

The SDK patch only parses/exposes metadata. Codex outcome policy stays in the existing attempt/session boundary; API-key, legacy-wire, and other-provider lifecycle policy remains unchanged. The bilingual lifecycle guide documents behavior, recovery, diagnostics, and patch maintenance.

Validation:

  • 318 focused tests passed across Responses SDK/native parsing, transport/compaction, session processor, history, prompt loop, and OAuth adapter coverage. Two existing disabled projector cases remain skipped.
  • Runtime, LLM, core, app, and session UI typechecks; generated-client drift check.
  • Production latest Linux baseline build reporting 1.18.33+opencodez.7, CLI help, and updater check.
  • Installed production backend with real ChatGPT OAuth: one tool call, remote compaction, retained context, and continuation after a service restart without repeated tools.
  • Rare terminal/control frames are exercised deterministically with the real SDK and OAuth/WebSocket adapter, rather than relying on the live server to emit them.

CI: the inherited broad test/typecheck workflows were cancelled while waiting
for unavailable Blacksmith runners; no jobs in those workflows executed.
The focused checks above ran on a build worker. The release workflow's separate
GitHub-hosted validation passed core/runtime/app/session-UI typechecks and the
generated-client drift check on the merged source.

@github-actions

Copy link
Copy Markdown

This PR doesn't fully meet our contributing guidelines and PR template.

What needs to be fixed:

  • PR description is missing required template sections. Please use the PR template.

Please edit this PR description to address the above within 2 hours, or it will be automatically closed.

If you believe this was flagged incorrectly, please let a maintainer know.

@github-actions

Copy link
Copy Markdown

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@Krablante
Krablante merged commit f7f1ec5 into main Oct 16, 2026
3 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant