1 Commits

Author SHA1 Message Date
Hunter Bown
ef9b344284 cloud agent: product-owned Daytona snapshot + two fixes found by running agents inside a Computer (#5745)
* computer: add product-owned codewhale-cloud-agent Daytona snapshot definition

Pins the released v0.9.11 Linux x64 engine (commit 96d13a0bc3, sha256
c02969556e51e138afa3fe9c97a1359878cd3d1986b1ce1f5fa96c93c6909416) into a
debian:bookworm-slim Computer image with the agent toolchain (git, node 22,
python3, ripgrep, build-essential), non-root agent user, and /workspace
prepared for the cloud dispatcher (PRD 4.5). Built and probed on Daytona
as snapshot codewhale-cloud-agent (4 CPU / 8 GB / 10 GB).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aDEyM2a4pPZ9qqMDrP5YX
Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* exec: honour dispatcher-forwarded --provider/--model on --resume/--continue

The `codewhale` dispatcher rejects `--provider`/`--model` after `exec`
and forwards the top-level flags as CODEWHALE_PROVIDER / CODEWHALE_MODEL.
`resolve_exec_resume_route` only looked at the exec-level flags, so
`codewhale --provider modelstudio-token-plan --model qwen3.8-flash exec
--continue ...` silently restored the saved route (observed in the Daytona
cloud-agent e2e on 2026-08-30: the resumed turn ran on deepseek-v4-pro).

Fold the launch overrides into the explicit route signals for resume; a
fresh session already treated them as explicit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aDEyM2a4pPZ9qqMDrP5YX
Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* subagent: scope session-name reservation to the live session

A completed worker hydrated from a previous session's workspace ledger is
invisible to status/peek/followup (`Agent not found in the active
session`), yet spawn still refused its name with "already in use by
agent_id ... (status: completed)". A second `codewhale exec` in the same
workspace could not spawn worker-a/worker-b again and burned six turns
recovering (Daytona cloud-agent e2e, 2026-08-30).

Skip prior-session agents in the collision check, matching the other
model-facing actions. The existing duplicate-name test now stamps the
manager's own boot id so it keeps covering the live-session case.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aDEyM2a4pPZ9qqMDrP5YX
Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* computer: disclose Daytona create-time env persistence; require post-create key injection

Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* computer: align snapshot docs and tests with the post-create credential contract

- Dockerfile/README: Daytona create-time env is server-visible; provider
  secrets must never be injected at create time. Post-create delivery over
  an execution channel (stdin, never argv) into a 0600 file, removed at
  teardown, is the only documented path. The provider env table is
  reframed as reference for a future supported bridge, and api_key_env is
  correctly described as holding an env-var name, not a file path.
- Image/probe receipts re-labeled as manual image evidence, not launch
  proof; the snapshot remains an image definition, not a wired dispatcher.
- tui: test-only strengthening — exec_resume route override covered
  end-to-end through Config::load with CODEWHALE_PROVIDER/CODEWHALE_MODEL;
  session-name reservation test now hard-expects same-name respawn.

Local proof (RUST_MIN_STACK=33554432, --locked): subagent 676/676,
exec_resume 4/4, session_name 7/7; cargo fmt --check clean.

Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* fix(tui): release Runtime Chat owner lock before same-process reopen

Safety-gate hermetic tests failed on
failed_state_writes_never_become_in_memory_authority_and_exact_retry_reopens
with WouldBlock after drop-then-reopen of the same account session (#5735).
Unlock on Drop, and retry only WouldBlock, so a just-closed fd is not
reported as another owner. A lock that stays held is still ownership.

Local proof (hermetic HOME, RUST_MIN_STACK=8388608, --locked):
runtime_chat_relay 16/16; Safety-gate tui filter 344/344; execpolicy 108/108
plus authorization_order 1/1; PR exec_resume/session-name 4/4.

Signed-off-by: CodeWhale Bot <bot@codewhale.net>

* docs: record Pod public-roster surface in the unreleased changelog

Feature commit 84f42aefc0 (#5776) landed on main without a durable
release-note receipt, so Version drift failed after merging origin/main
into this branch. The gate requires #5776 in CHANGELOG.md.

Signed-off-by: CodeWhale Bot <bot@codewhale.net>

---------

Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Co-authored-by: CodeWhale Bot <bot@codewhale.net>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 22:52:14 +00:00