Skip to content

Release v0.18.0 into main - #187

Merged
its-janghoon merged 9 commits into
mainfrom
develop
Oct 28, 2026
Merged

its-janghoon merged 9 commits into
mainfrom
develop

Conversation

@its-janghoon

Copy link
Copy Markdown
Member

Promote develop (v0.18.0: agent runners ask mid-turn, store tool rows, get their folder) to main.

its-janghoon and others added 9 commits October 28, 2026 04:38
POST /session/:sessionID/permission { permission, patterns, metadata?, always? }
raises the session's permission card from outside a tool call and blocks until the
person answers, returning { reply: "once" | "always" | "reject", message? }. The
session's own rules and earlier "always" answers apply, so an allowed pattern
returns "always" without a card. Claude Code's permission prompt tool and Codex's
approval requests point here, so "ask" mode works for runner turns.
- Providers marked options.agentRunner or options.providerExecutedTools get the
  session's folder as x-redrob-directory (encodeURIComponent), so a turn started
  from a schedule, the desk relay or the phone runs the CLI in the right folder.
  Other providers never see local paths.
- A chat on an options.agentRunner provider is titled after its first line
  instead of spending a full CLI run on a title.
- Runner permission requests keep the runner's own metadata.
Under provider option providerExecutedTools the stream's
choices[0].delta.tool_calls[*] entries with "provider_executed": true, "title"
and "result": { output } | { error } are read from the raw chunk and emitted as a
provider-executed tool-call + tool-result pair, so the AI SDK runs nothing locally
and the processor saves them as completed or errored tool parts of the assistant
message. They survive a reload, a fork and a share. The parser's own parts for
those ids are dropped, runner calls are left out of the doom-loop check and out of
the prompt replayed to the runner, and the native runtime is not used for these
providers.
Bun.$ pops a console window per command on Windows. There plugins now get a $
with the same tagged-template API (await $`cmd`, .text(), .json(), .lines(),
.quiet(), .nothrow(), .throws(), .cwd(), .env(), $.escape/cwd/env/nothrow) that
runs through the shared spawn helper with windowsHide: in Git Bash when Git for
Windows is installed, else cmd.exe, with interpolations quoted for that shell.
Output is buffered and not echoed; .stdin is not available. Other platforms keep
Bun.$.
docs/RUNNER-PROTOCOL.md writes down the shapes the engine and the desktop's
Claude Code / Codex shim share: provider options providerExecutedTools and
agentRunner, the x-redrob-directory header, provider-executed tool_calls in the
stream, POST /session/:id/permission, and how titles and compaction behave. They
match redrob-desktop HARNESS-NEEDS.md unchanged.
When the asker goes away (a cancelled turn, or an agent runner that drops
its HTTP call) the pending request is now answered "reject" on the bus, so
clients take the card down. Plugins' $ keeps the @ts-expect-error for the
undefined-outside-Bun case. SDK regenerated for the runner permission route.
feat: agent runners (Claude Code, Codex) ask mid-turn, store their tool rows, get their folder
Back-merge main into develop (v0.17.1)
@its-janghoon
its-janghoon merged commit 85a7aa1 into main Oct 28, 2026
11 checks passed
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