Repository navigation
chore: release v0.86.0 - #613
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Minor release: a host can now ask a runtime to compact its context and wait until the runtime confirms it. This completes the 0.85.0 resume change: a prompt supplied on resume that only takes effect at the next native compaction (Claude's
systemPromptandappendSystemPrompt, Codex'sappendSystemPrompt) can now be applied right away in the same session by resuming with the new prompt and then callingcompact(). Codex's replacementsystemPromptalready applies immediately. Stream-json turn ends also carry the native input identities.New: manual compaction (#610)
Runtime.manualCompactionsays before opening whether a runtime supports it:{ kind: "supported", activeTurn }or{ kind: "unsupported", reason }. An absent declaration means untested, not unsupported. Supported now: Claude, Codex and Pi (in-process and subprocess). Declared unsupported with reasons: Kimi, Qwen, Antigravity, CodeBuddy. Not yet declared: Grok, Qoder, Cursor, OpenCode, Pi Durable and the community Morph runtime.Session.compact({ timeoutMs?, signal? })returns aCompactionOutcome(new exported typesManualCompaction,CompactionOptions,CompactionOutcome):completed: the runtime confirmed this compaction (Claude'scompact_boundary, Codex's compaction item, Pi's manual compaction end);framepoints at that record.rejected: the compaction was not admitted, with a typedcodeandreason. Usually nothing reached the runtime, but Codex and Pi can also refuse after the native call (runtime_refused,runtime_exited), and Claude's command check talks to Claude first. Codes includebusy(a turn, queued or not yet started input, another compaction, or an active Codex goal),aborted(the caller'ssignalwas already aborted, so nothing was sent),unsupported(for example a project or user command shadows Claude's/compact), and the usual unreachable and error codes.failed: the runtime reported failure, or the command did not actually compact (Claude reported failure, or its commands changed in between).aborted: the runtime itself reported the compaction cancelled.unconfirmed: OAR stopped observing without a confirmed result:timeout,signal,disposed,runtime_exited,session_releasedorobservation_failed.compact()throwsRangeErrorwhentimeoutMsis negative or not finite.timeoutMsorsignalreturnunconfirmed; the native compaction continues and the session stayscompactinguntil the runtime settles, and later records still arrive. During that time new prompts, steer and a secondcompact()are refused asbusy; input queued during the compaction is held by Claude and Pi until it ends, while Codex refuses it asbusy.timeoutMs: 0sends the request without waiting.abort()during compaction uses the runtime's own cancel once there is something to cancel; before that it is refused asbusy. A queued Claude/compactcancelled before it starts endsaborted. A Claude compaction already running and then interrupted is reported by Claude as a failure, socompact()returnsfailedwith that native record, independent of the turn's own aborted ending. Codex refusesabort()asbusyuntil its compaction item names the turn.compact()call, OAR sends Claude aninitializerequest in the same session and sends/compactonly if Claude reports it as its built-in command. On Claude 2.1.316 (Linux) repeatedinitializerequests did not re-run the SessionStart hook or the HTTP MCP server and left the permission mode, settings, system prompt and tool list unchanged; this is not a claim about every version or every hook implementation.compact, newControlActionvalue"compact"(check exhaustive switches overControlAction), and newRejectionCodeaborted.Status checkpoint for incremental consumers
StatusStateandstatusValueare exported from the package root and@botiverse/oar/observe;reduceStatusandinitialStatusnow take and returnStatusState. Hosts that fold status incrementally must persist the completeStatusStatetogether with their cursor and pass it back unchanged. The displayedAgentStatus(statusValue,Session.status()) alone cannot continue a fold through a manual compaction.TaskState.statusis now aStatusState, andSessionViewgainsstatusState?. Persist these whole as well.AgentStatusisrunningwith phasecompactingandcompaction: { requestId, started? }.Turn input identities
turn_ended.inputId?andturn_ended.inputIds?copy the stream-json result'suser_message_uuidand ordereduser_message_uuidswhen the runtime reports them, including on ordinary turns. Neither is derived from the other. When Claude merges several queued inputs into one turn, itsinputIdnames the latter input and there is no first or last rule to rely on, so useinputIdsto settle all of them. OAR's own interrupt fallback is separate and still usesmergedInputIdsandcarries. Claude reports these fields; Qwen 0.26.5 and Qoder 1.1.81 currently do not.Docs and experiments
compress.tomlcan replace/compress. OAR emits no Qwen compaction events and does not guess from text.🤖 Generated with Claude Code