Skip to content

Complete EternalChat provider, device and browser workflows - #1

Merged
adagora merged 8 commits into
mainfrom
web-ui-redesign
Oct 22, 2026
Merged

adagora merged 8 commits into
mainfrom
web-ui-redesign

Conversation

@adagora

@adagora adagora commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Complete the remaining EternalChat workflows while retaining our own implementation: subscription/API model configuration, remote terminal access, reconnect-safe devices, screen agents, browser imports, independent sessions, push notifications, and recorded-audio transcription.

Harden goal evaluation, subprocess cleanup, credential handling, and session revocation. Document setup and verification evidence, include the upstream license notices, and remove the completed parity plan. Native iOS/Xcode and the share extension are outside the required scope; the existing native prototype is optional.

Validation:

  • Full Python suite with optional push dependencies: 283 tests passed, no skips.
  • Restart/recall smoke and service-worker fixtures passed.
  • Chromium/WebKit acceptance: 12 offline flows; phone layouts reviewed.
  • Targeted UBS scan: no critical findings.

Live browser push/transcription, macOS screen permissions, and the quota-blocked Claude subscription baseline remain tracked verification tasks. Docker deployment and native UIKit builds have not been validated.

adagora and others added 8 commits October 20, 2026 17:06
The log is now the memory as the model reads it: summary blocks open into
their halves down to the original message, recent messages show whole.
Live thinking, recall traces and streaming replies; slash commands with
/zoom that reveals any message; agent tabs with transcripts; memory and
settings sheets; theme, notifications, dictation, a QR code for phones.

The page installs as an app (manifest, service worker, icons). The server
can answer to an HTTPS proxy's name (--allow-host) or listen beyond this
computer (--host), and gains /api/agent and reasoning effort switching.
docs/home-server.md covers Tailscale and a LaunchAgent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
deploy/fly.sh creates, deploys and checks a single auto-stopping machine
with the chat and the Codex/Claude Code logins on a volume (docs/fly.md);
doctor reports each part with its fix, backup downloads a verified copy.
The server now answers to the Mac's Bonjour .local name (scutil), which
differs from the host name a router may give, and prints the Wi-Fi link
only for an advertised name. The page suggests full Claude model names
and explains how a new device connects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine awaits the new machine adapter for the device tools in every
connection mode (API, Claude Code, Codex), so the CLIs' own tools stay off
and one implementation serves all three. Each caller works in its own
folder under ~/.eternalchat/work; every command runs in its own process
group, which a stop or closing the chat ends; secrets stay out of its
environment; writes and edits answer unified diffs. --tools auto|off and
--work are saved settings, switchable in the page, which renders commands,
outputs, numbered file lines and diffs, and warns when commands run on a
plain-HTTP network page. The per-request budget grows to 600 KB for tool
turns. Contract adapted from UniiChat (THIRD_PARTY_NOTICES.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
spawn starts one named agent per task, in parallel, with the chat's memory
and the computer's tools but not spawn or tell, at most eight at work.
tell steers a working agent between its tool calls, or continues a finished
one from its transcript; each reply has its own event ID, so a crash never
loses or repeats one. An agent's effort reaches the subscription CLIs per
call. The page describes both calls in traces.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After each successful turn with no message waiting, a tool-less check asks
whether the chat shows the goal fully satisfied; unmet, a message asks for
another turn, at most 30 in a row before the goal waits for the user; met,
a note ends it. The goal is saved with the chat (goal.json). Terminal and
page commands, a header chip with Halt, and /api/goal and /api/halt.
Adapted from UniiChat's goal check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
history.py reads Claude Code's and Codex's logs on this computer and the
websites' exports (zip or conversations.json): each session becomes a note
naming it, then its messages with their own dates, the person's words and
the replies, tool calls only on request, never thinking; keys, tokens and
private keys are redacted first. Engine.import_chats appends them and keeps
each session's last date, so importing again brings only what is new.
eternalchat import-chats shows what it found and its summary calls, then
asks; the page's Settings scans, lets you pick sessions, and imports.
Reading after UniiChat's Import.ts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eternalchat device URL#TOKEN joins a chat elsewhere without opening one:
it receives jobs over an event stream, runs them with its own Machine in
its work folder, and posts each answer; a lost connection joins again.
The devices adapter routes each shell, read, write and edit by its
optional device field (none: the computer EternalChat runs on), lists the
computers after the view, forwards stops, and fails the calls of a
computer that leaves. Joined computers outlive reopening the chat. The
page lists them and offers the join command to copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adagora
adagora merged commit 194baf1 into main Oct 22, 2026
7 of 8 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