• v1.4.0 19091973a4

    v1.4.0 — live tool tokens, a real terminal pane, and one-command tailnet access
    Some checks failed
    ci / gate (push) Has been cancelled
    Stable

    evileko released this 2026-09-20 04:52:36 -04:00 | 0 commits to main since this release

    evilcode v1.4.0 — live tool tokens, a real terminal pane, and one-command tailnet access

    This release makes tool use visible while it happens. Tool calls now type into the transcript as their arguments arrive, and the Ctrl+L split follows the active call: bash output behaves like a live terminal, file mutations assemble against the file on disk, Markdown renders while it is being written, and every other tool gets a bounded preview instead of a blank panel.

    It also adds /tailscale, which brings up the web companion on the current tailnet from inside the TUI, plus a broad daemon and agent reliability pass covering fan-out, replay, wakeups, prompt durability, and concurrent model/context updates.

    What changed

    Live tool calls from provider to TUI

    • Arguments stream end to end. OpenAI, Codex, Ollama, and non-streaming providers now expose one stable call identity and the same start/delta semantics; malformed or partial JSON remains safe to preview while it is arriving.
    • The transcript types along. Tool rows appear when a call starts and update in place as arguments arrive, then reconcile with the authoritative completed call.
    • Replay is self-healing. Daemon attach and ring replay preserve live deltas without changing the final headless response shape, and a full payload repairs a missed or interrupted delta stream.

    A genuinely live Ctrl+L split

    • Bash is a terminal pane. The command appears as it is assembled, stdout and stderr append while the process runs, ANSI control sequences are stripped for safe rendering, and retained output is bounded.
    • Writes and edits assemble visibly. write, edit, and multiedit previews are applied to the current on-disk file as their JSON arrives. Diffs use the same syntax-aware highlight-then-tint treatment as the inline transcript.
    • Markdown renders while streaming. Whole-document .md writes render uncached during assembly and settle into the normal cached preview at completion.
    • Every tool has a fallback. Unknown tools show a dimmed, bounded raw-argument preview rather than leaving the split stale or empty. The newest active call owns the panel, and completed calls reconcile it cleanly.

    /tailscale

    • Run /tailscale inside evilcode to start the web companion on loopback, configure tailscale serve --bg, and display the tailnet URL and QR code.
    • Existing Serve routes are respected, failures are surfaced in the transcript, and the command includes a safe cleanup path.

    Agent and daemon reliability

    • Worker fan-out now reserves capacity correctly, wakes reliably, and persists session-log delivery without races.
    • Attach snapshot plus replay has one publication boundary, avoiding gaps and duplicates during concurrent activity.
    • Prompt rebuilds and context-window/model transitions are synchronized without holding locks across provider work; retry delays saturate safely.
    • Web ask cards lock for the full answer lifecycle and disable their controls once answered.

    Install or update

    Fresh install:

    curl -fsSL https://evileko.dev/evilcode | sh
    

    Existing installations can update in place:

    evilcode update
    

    Source builds require Go 1.26 or newer. This release publishes the Linux/amd64 binary evilcode-linux-amd64.

    Verification

    • go build ./...
    • go vet ./...
    • go mod verify
    • go test ./... -count=1
    • go test -race ./internal/agent ./internal/provider ./internal/tools ./internal/daemon ./internal/tui
    • go test -tags probe ./probe -count=1

    SHA-256 for evilcode-linux-amd64:

    1e569761f72689e6aace283d0faa3f7f37055195a68916c457c529aec076eb4b
    
    Downloads