Skip to content

feat(deploy): make the edge dashboard the Agent session host - #19

Merged
RedStar071 merged 3 commits into
mainfrom
claude/dashboard-hogwild-wolstar-2d7aza
Oct 19, 2026
Merged

RedStar071 merged 3 commits into
mainfrom
claude/dashboard-hogwild-wolstar-2d7aza

Conversation

@RedStar071

Copy link
Copy Markdown
Member

🔗 Linked issue

None. Issues are disabled on this repository.

❓ Type of change

  • 📖 Documentation
  • 🐞 Bug fix
  • 👌 Enhancement
  • ✨ New feature
  • 🧹 Chore
  • ⚠️ Breaking change

📚 Description

On the Cloudflare deployment, every Claude turn failed with a 400 ("Claude Code 2.1.278 does not support this model"), New session showed an empty provider list with "Shared host capacity is unavailable", and the Settings action bar sat over the page with nothing to do. The edge had no Agent session host: its capacity command only knew the maintenance policy, sessions needed systemd, and no provider CLI was on the controller's PATH.

  • Claude Agent SDK. @anthropic-ai/claude-agent-sdk moves from 0.3.278 to 0.3.302, which ships Claude Code 2.1.302. The API refuses current models below 2.1.280.
  • Session admission. container/wolfstar-host-capacity now answers the terminal commands (capacity, reserve, bind, reconcile, release, cancel, completed) against the slot policy and free memory. A bound reservation names its helper by PID and start time, so a reused PID never passes for a live session. There is no manual override on a single-account host.
  • Process host. src/terminal-process-host.ts starts each session helper as a detached process group where there is no systemd, and the helper proves its identity from the same unit record. Hogwild keeps systemd.
  • Container. Agent sessions are on by default (server.agent_sessions in Settings still turns them off), the host is named Edge, the managed tools are on PATH, and Claude Code sessions run the CLI the SDK ships.
  • Worker. WebSocket upgrades go through the Durable Object's fetch, because a terminal stream cannot cross RPC.
  • Dashboard. The Sessions page says when no provider is installed, the Hosts panel uses the host's own name instead of a fixed "Hogwild", and the Settings action bar appears only when there is something to save or restart.

A restart or a deploy of the Container ends every session, and the Sessions page shows it as interrupted.

🤖 AI disclosure: Wolfstar Agent Kit modified this description. AI open source policy.


Generated by Claude Code

The SDK pinned Claude Code 2.1.278, and the API now refuses current models
below 2.1.280, so every Claude turn failed with a 400. 0.3.302 ships
Claude Code 2.1.302.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019aNLCPRnTShag1gmMkfSeF
…hing to do

The sticky bar stayed on the main Settings page with "No unsaved changes"
and a disabled Save button, covering the content beneath it on a phone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019aNLCPRnTShag1gmMkfSeF
The Cloudflare deployment had no session host: its capacity command knew
only the maintenance policy, sessions needed systemd, and no provider CLI
was on the controller's PATH. New session showed an empty provider list and
"Shared host capacity is unavailable".

- wolfstar-host-capacity admits sessions: capacity, reserve, bind,
  reconcile, release, cancel, and completed, against the slot policy and
  free memory. A bound reservation names its helper by PID and start time.
- A process host runs each session helper as a detached process group
  where there is no systemd. The helper proves its identity from the same
  unit record.
- The Container turns Agent sessions on by default, names the host Edge,
  and puts the managed tools on PATH. Claude Code sessions use the CLI the
  Agent SDK ships.
- The Worker sends WebSocket upgrades through the Durable Object fetch,
  because a terminal stream cannot cross RPC.
- The Sessions page says when no provider is installed, and the Hosts
  panel uses the host's own name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019aNLCPRnTShag1gmMkfSeF
@coldtea-pr-lens

coldtea-pr-lens Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Architecture

Architecture diagram for wolfstar-project/wolfstar-agent-kit at 4f8d9e1

Play the walkthrough

Inside the changed components — 2 views

Component view — Edge WebSocket tunnel

WebSocket upgrade tunneling through Cloudflare Edge Worker and Durable Object container fetch

Architecture view of Component view — Edge WebSocket tunnel in wolfstar-project/wolfstar-agent-kit

Component view — Terminal process host & admission

Interactive session reservation, detached process host, and capacity tracking without systemd

Architecture view of Component view — Terminal process host & admission in wolfstar-project/wolfstar-agent-kit

Data flow

Data flow diagram for wolfstar-project/wolfstar-agent-kit at 4f8d9e1

Follow each request

The other flows — 1 sequence

Streaming terminal session via WebSocket

Sequence diagram of Streaming terminal session via WebSocket in wolfstar-project/wolfstar-agent-kit

Review

✨ Nothing flagged · reviewed 4f8d9e1


Tip

After a push, tick Redraw to draw the latest commit

🪧 More tips
  • Run npx skills add coldteadotai/pr-lens, then tell your coding agent: "Diagram the change you just made with PR Lens and attach it to the pull request."
  • Run npx @coldtea/pr-lens-cli analyze --base origin/main on a branch, then npx @coldtea/pr-lens-cli render .pr-lens/graph.json. Same lenses, your own model key, before the pull request exists
  • Click the link under each diagram to open it on a canvas you can zoom, pan and step through
  • The diagrams are links. Click one to open it on the canvas, then press W or click play to walk through the change
  • Open a diagram on the canvas, then press W or click play to walk through the change one step at a time
  • The CLI's render reads .github/pr-lens.yml and applies your renames, exclusions and lane pins at draw time
  • Set github.comment.collapsed: true in .github/pr-lens.yml to fold the comment behind one View architecture and data flow row. Drawing still runs as before
  • Set github.draw: on-demand in .github/pr-lens.yml and PR Lens stops drawing pull requests on its own. Comment @pr-lens draw on a pull request when you want that one drawn
  • Add .github/workflows/pr-lens.yml with coldteadotai/pr-lens/packages/action@v0 and your model provider's key as its api-key to run PR Lens from your own CI. Any /chat/completions endpoint works
  • Switch GitHub to dark mode and the diagrams follow. The moving dots are this pull request's data in motion

Thanks for using PR Lens! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out on X, Bluesky, Mastodon, Reddit or LinkedIn

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​anthropic-ai/​claude-agent-sdk@​0.3.278 ⏵ 0.3.30210010093 +1100 +170

View full report

Copy link
Copy Markdown
Member Author

The test check failed on one test that this PR does not touch: test/cloudflare-snapshots.test.ts › "brings the work back in a new container, as unstaged changes on the merge base" (Skipped: the merge base is not in this checkout). The other 4172 tests passed, and the diff changes nothing in cloudflare-snapshots.ts.

It also fails now and then on my machine against this branch (1 run in 3), and main passed this check on its last run. The likely cause is in the test, not the code. makeContainer creates two separate repositories with the same init commit. They get the same SHA only when both commits land in the same second, and the restore step needs that SHA to find the merge base. When the two commits straddle a second boundary, the SHAs differ and the restore skips the branch. Fixing the author and commit dates is the obvious patch, but it needs a date near now, because the snapshot age check rejects old ones. I have not widened this PR for it.

I re-ran the failed job once. If it fails again I will treat it as real and look further.


Generated by Claude Code

@RedStar071
RedStar071 merged commit d0c0ca1 into main Oct 19, 2026
13 of 14 checks passed
@RedStar071
RedStar071 deleted the claude/dashboard-hogwild-wolstar-2d7aza branch October 19, 2026 12:19
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.

2 participants