Skip to content

Releases: guitaripod/CodingAgentKit

Release list

0.10.0

Choose a tag to compare

@guitaripod guitaripod released this 03 Aug 17:44

0.10.0

The release that lets more than one window watch one conversation, and one socket carry a whole
server.

Added

  • Many observers on one conversation. states() no longer tears down whatever came before it:
    every caller gets its own stream over one shared connection, refcounted so the run loop starts
    with the first observer and stops with the last. A chat window, a second window and a session
    list can watch the same session at once. reconnect() re-dials underneath the observers without
    ending anyone's stream — the forced reconnect that calling states() twice used to provide.
  • permissionResolved. pendingPermissions was the one field in ConversationState that
    could not converge; an approval answered on the phone stayed live on the desktop forever.
    Decoded from opencode's replied/rejected/updated shapes, with answered ids remembered so a late
    re-ask cannot resurrect a settled card.
  • BridgeStream: one socket per server. Multiplexes the bridge's proto-2 /stream with
    replay, gap detection and a heartbeat watchdog, instead of a connection per session.
  • SubagentSummary carries live progress, so a fan-out can be rendered while it runs.
  • A spend gauge carries its money. usedUSD / limitUSD pass through the bridge quota.
  • Per-model effort on opencode. Effort variants ride the catalog, the send, and the
    transcript, rather than being one setting for every model.
  • Every account the machine holds. Extra quotas are fetched for all of them, not just the
    first.
  • Ultracode joins the effort menu, Opus 1M joins the catalog. Ultracode is a mode more than a
    level — the server reads it as xhigh plus standing multi-agent orchestration — so it belongs in
    the same list clients already render.
  • AuthenticatingBackend + ServerAuth. Whether the agent behind a server is signed in, and
    the three-step browser sign-in that fixes it when it isn't: beginSignIn() returns the URL the
    server printed, submitSignInCode(_:) hands back the code it produced. ClaudeCodeBackend
    conforms; a bridge without the routes throws AgentError.unsupported.
  • SelfUpdatingBackend. A server that can install its own updates: updateStatus(checkingRemote:)
    reports the running version, whether the remote is ahead and by which commits, and whether this
    install can move at all; startUpdate() asks it to. ClaudeCodeBackend conforms — a bridge too
    old to know the route throws AgentError.unsupported. ServerUpdate.phase follows a run through
    the server's own restart, so a client can keep watching something that stops answering.
  • health() reports the bridge's version. It reads /status, which costs the same round trip
    as /health and carries what the server is actually running, instead of the constant "claude".

Fixed

  • Attachment URLs may carry a query string. ClaudeCodeBackend.attachmentData now splits a
    relative bridge URL into path and query items instead of handing the whole string to
    appendingPathComponent, which percent-encoded the ? and 404'd. Lets the bridge address
    attachment bytes by file path (/files/raw?path=…) — the shape it uses for a picture the agent
    read — not only by stored attachment name.
  • A bridge upgraded mid-flight reaches running apps. The proto is re-probed and list streams
    wait for it, instead of a live app staying on the old protocol until relaunch.
  • A person never reads Error Domain=NSURLErrorDomain. Transport failures are turned into
    situations a banner can state.
  • A streaming turn reaches the cache every few seconds, not only when it goes idle.

Performance

  • A freshly opened chat pays for its three fetches at once. Transcript, questions and goal now
    race rather than running in single file; the chat paints when the slowest lands.

0.9.0

Choose a tag to compare

@guitaripod guitaripod released this 29 Jul 19:43

Everything a coding-agent session contains that isn't a message.

Compaction as a first-class event. A context compaction arrives as a Compaction part — tokens before and after, how long it took, how many messages carried over, and the CLI's own summary — instead of dumping tens of thousands of words of machine-facing prose into the transcript.

Structured questions, commands and goals. QuestionRequest models multi-question, multi-option asks with free-text "Other", and QuestionRequest.awaitingAnswer derives what is still open from the transcript. AgentCommand lists the slash commands a machine will actually resolve (built-in, user, project, plugin). GoalStatus reports a /goal in flight, whether it was met, and what it cost.

Attachments, subagents, worktrees. Prompts carry files and images to claude-bridge and the bytes come back through the backend. subagents(for:) and subagentMessages(sessionID:agentID:) fetch a spawned agent's own transcript, keyed to the tool call that spawned it. Session listing reaches every worktree, not just the server's own directory.

Semantic tool-call summaries. ToolCallSummary turns raw tool JSON into the line a human wants to read, so every client stops writing its own.

Localized engine. Errors, fallbacks and summaries resolve through AgentText against the Kit's own catalogue, so a localized app doesn't leak English out of its engine.

Fixes. A finished turn no longer inherits a stale running status, and a session counts as live when its agents are working, not only during its own turn.

191 tests, Linux and Apple, GPL-3.0.