Run tasks on Codex beside Claude; drop turn caps and mid-turn snapshots

This commit is contained in:
Ian Gulliver
2026-10-15 14:55:58 -07:00
parent 17898b0191
commit 74707f6398
53 changed files with 1904 additions and 1295 deletions
+12 -28
View File
@@ -312,7 +312,7 @@ paths:
a Co-authored-by trailer for each of the task's co-authors, pushes it to origin, fast-forwards the project's
checkout to it, then removes the worktree and branch and marks the task merged. While another task in the
project is merging, the merge is held instead (merge_queued_at is set) and starts when no merge is in progress
in the project and the task's session is idle, oldest first. Refused while a turn is running or queued, or the
in the project and the task's session is idle, oldest first. Refused while a turn is running, or the
merge is already held.
responses:
"202":
@@ -332,10 +332,10 @@ paths:
description: >
Asks the task's agent to merge the project's default branch into the task branch, resolving any conflicts
and regenerating generated files. Sent to the task's idle session, or starts a session when it has none.
Refused while a turn is running or queued.
Refused while a turn is running.
responses:
"202":
description: The merge turn was started or queued.
description: The merge turn was started.
content:
application/json:
schema: { $ref: "#/components/schemas/AgentSession" }
@@ -640,7 +640,7 @@ paths:
the session is completed and a new session on the same task and model starts with the handoff as its first message.
responses:
"202":
description: The handoff turn was started or queued.
description: The handoff turn was started.
content:
application/json:
schema: { $ref: "#/components/schemas/AgentSession" }
@@ -1013,7 +1013,7 @@ components:
type: string
enum: [message, turn_end, tool_call, ask_human, timer]
x-enum-varnames: [SnapshotTriggerMessage, SnapshotTriggerTurnEnd, SnapshotTriggerToolCall, SnapshotTriggerAskHuman, SnapshotTriggerTimer]
description: "message: the agent wrote text after one or more tool calls; turn_end: after byre's end-of-turn commit. tool_call, ask_human and timer appear only on snapshots taken by earlier builds."
description: "turn_end: after byre's end-of-turn commit. message (the agent wrote text after one or more tool calls), tool_call, ask_human and timer appear only on snapshots taken by earlier builds."
created_at: { type: string, format: date-time }
Preview:
@@ -1032,19 +1032,18 @@ components:
id: { type: string }
task_id: { type: string, description: Empty for a lead session. }
owner: { type: string, description: "The login whose lead agent this is; empty for a task's session." }
vendor: { type: string, enum: [claude] }
model: { type: string, description: Requested model; empty means the vendor's default. }
vendor_session_id: { type: string }
vendor: { type: string, enum: [claude, codex], description: "Follows from the model the session was created with: gpt-* models run on Codex, every other model on Claude Code." }
model: { type: string, description: "Requested model; empty means the vendor's default. A session only switches between its own vendor's models." }
vendor_session_id: { type: string, description: "Claude Code's session id, chosen by byre; or the Codex thread id, empty until the session's first turn starts its thread." }
state:
type: string
enum: [idle, queued, running, completed]
x-enum-varnames: [AgentSessionStateIdle, AgentSessionStateQueued, AgentSessionStateRunning, AgentSessionStateCompleted]
description: queued means a turn is waiting for a free slot under the concurrency caps.
enum: [idle, running, completed]
x-enum-varnames: [AgentSessionStateIdle, AgentSessionStateRunning, AgentSessionStateCompleted]
role: { type: string, enum: [implementer, lead] }
created_by: { type: string }
created_at: { type: string, format: date-time }
forked_from: { type: string, description: "A fork's first start resumes this vendor session, cut at forked_at, under a new vendor_session_id; absent for other sessions." }
forked_at: { type: string, description: "With forked_from: the vendor's id of the last message the fork keeps." }
forked_at: { type: string, description: "With forked_from: the vendor's id of the last thing the fork keeps, a message for Claude Code, a turn for Codex." }
SessionCreate:
type: object
@@ -1219,7 +1218,7 @@ components:
Status:
type: object
required: [started_at, db_bytes, last_event_seq, projects, active_tasks, sse_clients, live_agents, running_turns, queued_turns, caps, rate_limits, agent_processes, zombies, stuck_after_seconds, protocol_errors]
required: [started_at, db_bytes, last_event_seq, projects, active_tasks, sse_clients, live_agents, running_turns, rate_limits, agent_processes, zombies, stuck_after_seconds, protocol_errors]
properties:
live_agents: { type: integer, description: Agent processes currently running. }
agent_processes:
@@ -1236,11 +1235,6 @@ components:
type: array
description: Turns running now, oldest session first.
items: { $ref: "#/components/schemas/TurnRef" }
queued_turns:
type: array
description: Turns waiting for room under the caps, in the order they will start.
items: { $ref: "#/components/schemas/TurnRef" }
caps: { $ref: "#/components/schemas/Caps" }
rate_limits:
type: object
description: The latest rate-limit status each vendor reported, keyed by vendor.
@@ -1252,16 +1246,6 @@ components:
active_tasks: { type: integer }
sse_clients: { type: integer }
Caps:
type: object
required: [global, per_vendor]
properties:
global: { type: integer, description: Most turns running at once across all vendors. }
per_vendor:
type: object
description: Most turns running at once per vendor, keyed by vendor.
additionalProperties: { type: integer }
TurnRef:
type: object
required: [session_id, task_id, vendor]