Skip to content

chore: release - #17

Merged
Suprhimp merged 1 commit into
masterfrom
changeset-release/master
Jul 2, 2026
Merged

chore: release#17
Suprhimp merged 1 commit into
masterfrom
changeset-release/master

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Release 1.1.0

This release bundles two features. Main highlight is Codex CLI login (developed in #18):

🔑 Codex CLI login for the openai provider (#18)

Use DUUL with the OpenAI Codex CLI login instead of a raw OPENAI_API_KEY. When no key is set, DUUL falls back to ~/.codex/auth.json (override with CODEX_HOME):

  • Sign in with ChatGPT (Plus/Pro/Team): OAuth token → ChatGPT backend Responses endpoint, billed to the ChatGPT plan; tokens auto-refresh on expiry and on a mid-review 401.
  • API-key login: uses the OPENAI_API_KEY stored in auth.json.
  • Explicit env/request key always takes precedence.

The stateless ChatGPT backend is handled by streaming + output aggregation, full-input tool-round replay (echoing encrypted reasoning), and dropping unsupported params. Cross-round continuity is preserved via the new conversationReplay provider capability, so previous_review_id keeps working. Adds DUUL_REASONING_EFFORT (default medium). Verified live against the real ChatGPT backend and via DUUL's own plan-review loop (5 rounds → APPROVE); 94 unit tests pass.

🧰 Empty-input guards + file escape hatch (#16)

plan_file/code_file/approved_plan_file inputs and reachable guards that fix the recurring -32602 empty-{} loop.

Full details and changelog below.


This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated.

Releases

@planningo/duul@1.1.0

Minor Changes

  • 19b5420: Support Codex CLI login for the openai provider — no OPENAI_API_KEY required.

    When no OPENAI_API_KEY (or per-request api_key) is set, DUUL now falls back to the OpenAI Codex CLI credentials in ~/.codex/auth.json (override with CODEX_HOME):

    • Sign in with ChatGPT: uses the OAuth access token against the ChatGPT backend Responses endpoint (https://chatgpt.com/backend-api/codex), billed to your ChatGPT plan. Tokens are refreshed automatically via the OAuth endpoint (on expiry and on a mid-review 401).
    • API-key login: uses the OPENAI_API_KEY stored in auth.json.

    The ChatGPT backend is stateless (store: false): DUUL streams the request, aggregates output items from the stream, resends the full input (echoing encrypted reasoning) across tool rounds, and drops unsupported params (temperature, top_p, max_output_tokens, previous_response_id). Cross-round context is preserved by replaying prior rounds' turns (new conversationReplay provider capability, same mechanism as the Anthropic provider), so previous_review_id continuity works. Add DUUL_REASONING_EFFORT (default medium) to tune reasoning effort. An explicit env/request key always takes precedence over the CLI login.

  • 7a6123f: Fix the recurring -32602: plan required (and code/approved_plan equivalents) failure where a caller's tool call collapsed to an empty {} and looped.

    Two-part fix:

    • Reachable guards. The large required string fields (plan, code, approved_plan) are now optional at the schema level, so an empty/partial call reaches the handler instead of being rejected pre-handler by the MCP SDK. Callers now get actionable retry guidance instead of an opaque -32602 zod error. (Partition's short workspace_root was also relaxed to optional for the same reachability reason — the handler still hard-requires it.)
    • File escape hatch. Added plan_file (plan review), code_file + approved_plan_file (code review), and approved_plan_file (execution partition). Callers can write large content to a file with a normal Write call and pass a short relative path; the server reads it (scoped, symlink-guarded, tracked_only bypassed for the caller's own artifact). This avoids the large-argument serialization failure that made models emit {}.

    The reviewer system prompts now emit free-text fields in compressed style to reduce output tokens. Exactly one of the inline field or its *_file companion is required.

@github-actions
github-actions Bot force-pushed the changeset-release/master branch from 16e2ab3 to 354ec96 Compare July 2, 2026 05:16
@Suprhimp
Suprhimp merged commit 1fbd205 into master Jul 2, 2026
@Suprhimp
Suprhimp deleted the changeset-release/master branch July 3, 2026 07:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant