Releases: AnEntrypoint/agentgui
AgentGUI v1.0.935
AgentGUI v1.0.935
Latest commit: 85628e9
agentgui: native WS chat protocol (no acptoapi dep)
Browser → WS → agentgui server → claude-runner / ACP daemons. Completely
self-contained; no acptoapi or external proxy involvement.
Wire codec: JSON over WS text frames (drop msgpackr binary). Browser doesn't
get a bundler — JSON.stringify / JSON.parse works everywhere. Server-side
codec keeps the same encode/decode API so ws-protocol.js + ws-optimizer.js
need no changes beyond the impl swap.
- lib/codec.js: JSON impl, accepts Buffer/Uint8Array/string in decode().
- site/app/js/codec.js: browser mirror.
- package.json: drop msgpackr dep (no other consumers).
New WS methods (lib/ws-handlers-util.js + wired via registerWsHandlers in
server.js):
- agents.list → enumerate registered agents from
claude-runner-agents.js registry. - conversation.subscribe → add ws to subscriptionIndex[sessionId].
- chat.sendMessage → run runClaudeWithStreaming(content, cwd,
agentId, config) with an onEvent that
broadcasts streaming_start /
streaming_progress / streaming_complete /
streaming_error keyed by an ephemeral
sessionId. Bypasses the gutted
db-queries layer entirely. - chat.cancel → kill in-flight child proc for sessionId.
Browser client (site/app/js/backend.js): singleton WS connection to /sync
with auto-reconnect; pending-reply map for request/response; per-sessionId
listener registry for broadcasts. streamChat() async-iterator yields
{type:'text'|'tool'|'result'|'error'} for backward compatibility with
existing site/app/js/app.js. listModels() now calls agents.list over WS.
probeBackend + history calls remain plain HTTP (served by ccsniff).
Smoke test (scripts/smoke-ws-chat.mjs): boot server with empty
CLAUDE_PROJECTS_DIR, connect WS, exercise sync_connected + agents.list +
conversation.subscribe. Verified: 15 agents returned, first = claude-code,
subscribe returns {subscribed:true}.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.934
AgentGUI v1.0.934
Latest commit: 0656919
agentgui: drop acptoapi refs + port terminal WS endpoint
Docs & comments (4 files):
- README.md: rewrite "Live client" section; agentgui is a single same-origin
Node server + browser client. ccsniff history is in-process, not external. - AGENTS.md: replace "ACP-to-API History Integration" + "Live History Stream
Wiring" sections to reflect ccsniff in-process mount; correct the
"acptoapi has the history" misclaim. - site/app/index.html: meta description no longer says "client for any
acptoapi backend". - site/app/js/backend.js: header comment now describes the agentgui client
(ccsniff history, /health, /sync chat WS).
Terminal endpoint (ported from acptoapi 13f208e, deleted there per audit):
- lib/terminal.js (NEW, ESM port): createSession/getSession/listSessions/
closeSession/writeToSession/resizeSession/attachWs. node-pty optional via
createRequire fallback to pipe spawn with windowsHide. - lib/http-handler.js: POST/GET /api/terminal/sessions, GET/DELETE
/api/terminal/sessions/. Gated by the existing PASSWORD Basic-auth
check at the top of httpHandler — never anonymous. - lib/ws-setup.js: route WS upgrades for /api/terminal/sessions/ to
term.attachWs(sid, ws). Reuses the same connection-level PASSWORD check.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.933
AgentGUI v1.0.933
Latest commit: 89b7816
feat(site/app): consume anentrypoint-design 0.0.127 — Select+Btn, md assistant, streaming
Pin unpkg import to 0.0.127. Replace raw model picker with the new Select kit. Replace raw stop/new and save+reconnect with Btn. Assistant turns now render kind:'md' so model markdown highlights through the kit's marked+DOMPurify path; user turns stay plain text. In-progress empty assistant message displays as typing indicator until first token. EventList passes items: + code: matching the canonical kit signature. Install with: bun x agentgui@latest npm install -g agentgui npx agentgui Web interface: http://localhost:3000/gm/ Notes: Data stored in ~/.gmgui/ folder Requirements: Node.js 18+
AgentGUI v1.0.932
AgentGUI v1.0.932
Latest commit: a610867
feat: single-surface pivot — ccsniff in-process, kits-only UI, drop legacy static/
- server.js mounts ccsniff createHistoryRouter() at /v1/history/* in-process
- server.js serves site/app/ at / (was static/)
- site/app/js/backend.js defaults to same-origin (no acptoapi base URL)
- site/app/js/app.js refactored to anentrypoint-design kits (PageHeader, SearchInput, TextField, EventList) — zero raw ds-section wrappers
- delete static/ entirely (~90 files)
- delete lib/jsonl-watcher.js, jsonl-parser.js, db-queries*.js (10), routes-sessions/conversations/messages/threads/runs/scripts/agent-actions/auth-config/util/debug.js (10), ws-handlers-conv/conv2/session/session2/run/scripts/queue/msg.js (8), ws-legacy-handlers.js
- shim lib/routes-registry.js, ws-setup.registerLegacyHandler, database.createQueries as no-ops to keep plugins/recovery/queue callers working without legacy DB
- prune rippleui devDep; add ccsniff dep
- AGENTS.md rewritten for new architecture
Browser-witnessed live: localhost:3056/ renders kits, ccsniff /v1/history/sessions returns valid JSON, SSE hello received, ws /sync opens, 0 console errors.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.931
AgentGUI v1.0.931
Latest commit: d5be410
docs(AGENTS.md): live history stream wiring + acptoapi startup latency
Live client subscribes to /v1/history/stream on history tab entry, closes
on leave. State shape: state.live = { es, connected, lastEventTs, error,
eventCount }. SSE dispatch: hello → connected, event → append-to-events
when sid matches selectedSid + bump in-place sidebar counters,
conversation → refreshHistory(), error → live.error.
acptoapi caveat: first /v1/history/* request triggers a synchronous
loadOnce() over ~/.claude/projects (~300 files / 80MB / 69k events here),
30-90s blocking window. Subsequent calls fast.
Binary at c:/dev/acptoapi/bin/agentapi.js, port 4800, CORS open.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.930
AgentGUI v1.0.930
Latest commit: 85174a4
feat(site/app): subscribe to /v1/history/stream for live session tracking
Previously refreshHistory() only ran on tab nav; the SSE wiring in
backend.js (streamHistory) was exported but never invoked, so the live
client never saw new claude turns until a manual reload. The history tab
went stale within seconds.
Wire the EventSource lifecycle to the history tab:
- navTo('history') opens the stream via B.streamHistory and stores it as
state.live.es. Leaving the tab closes the stream and nulls state.live. - 'hello' marks state.live.connected=true.
- 'event' appends to state.events when data.sid matches state.selectedSid,
and bumps the matching row's events/tools/errors counters in place so
the sidebar reflects activity without a full re-fetch. - 'conversation' kicks a refreshHistory() so brand-new sessions appear.
- 'error' sets state.live.error and the crumb pip flips to '○ stream
offline'.
Render throttling: scheduleRender() coalesces SSE bursts via rAF so
high-volume turns don't thrash the diff. The crumb's right slot now
shows '● live · N' on history with N = state.live.eventCount.
Witnessed against acptoapi 1.0.38 on :4800 with 58 indexed sessions:
- es.readyState=1, esUrl=/v1/history/stream
- eventCount climbed 3 → 16 within ~10s of unrelated activity
- leaving history tab → es=null, connected=false (clean teardown)
- sessions sidebar populated with 58 rows, 0 pageerrors
Note: first request to any /v1/history/* triggers a synchronous index
build over ~/.claude/projects that can take 30-90s on first hit (~300
JSONL files / 80MB / 69k events in our env). Subsequent requests are
sub-second. Documented in AGENTS.md.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.929
AgentGUI v1.0.929
Latest commit: 6916c54
docs(AGENTS.md): document webjsx applyDiff key caveat for sibling arrays
Surfaced 2026-05-04 while validating site/app/ chat surface. Mixing one
bare string with keyed h() elements in a Crumb({right:[...]}) array
crashes applyDiff with "Cannot read properties of undefined (reading
'key')". Wrap any sibling string in h('span',{key},...) so the array is
homogeneously keyed VElements.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.928
AgentGUI v1.0.928
Latest commit: 938dd96
fix(site/app): viewport-lock chat tab + webjsx key caveat
Validated layout via headless browser (1440x900):
- shell height was 1188px in 900px viewport → 288px overflow, status bar
pushed below the fold at y=1164. - Root cause: chatMain wrapped Chat inside ds-section with h1 + lede + a
full Panel for the model selector, eating 400px above the chat surface. - Fix: move model select + new/stop actions into Crumb({right}), drop
ds-section editorial header on the chat tab. Chat now sits directly
under the crumb at y=127 with the SDK's own internal padding.
Also fix the documented webjsx applyDiff key caveat that surfaced when
cycling tabs: Crumb({right: [...]}) array contained a bare string for the
connection-dot label alongside keyed elements, crashing applyDiff with
"Cannot read properties of undefined (reading 'key')". Wrap the dot in
h('span',{key:'dot'},...) so every sibling in the array is a VElement.
Final witness (chat tab, 1440x900):
shell=900px doc=900px overflow=false
chat at y=127 h=480 status at y=876
pageerrors=0 across chat→history→settings→chat cycle
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.927
AgentGUI v1.0.927
Latest commit: 732b19b
feat(site/app): rebuild live client on anentrypoint-design SDK only
Strip all CSS overrides from index.html — keep just html/body/#app sizing
so AppShell fills the viewport. Rewrite app.js to compose every surface
from SDK components (AppShell, Topbar, Crumb, Side, Status, Chat,
ChatComposer, Row, Panel) with no agui-* classes. Chat uses ds-section
- Panel wrappers, history sessions render as Row with rail-green/flame
by error state, history detail uses Panel + numbered Row list.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+
AgentGUI v1.0.926
AgentGUI v1.0.926
Latest commit: 954c09e
docs(AGENTS.md): add better-sqlite3 node v24 startup caveat and rs-learn audit notes
Install with:
bun x agentgui@latest
npm install -g agentgui
npx agentguiWeb interface: http://localhost:3000/gm/
Notes:
- Data stored in
~/.gmgui/folder - Requirements: Node.js 18+