• v1.1.3 71e343d6b7

    evileko released this 2026-08-26 00:59:25 -04:00 | 174 commits to main since this release

    evilcode v1.1.3 — deepseek default, picker hints, more idle tips

    A small feature release. The agent loop, tool surface, and session model are unchanged; what changed is the out-of-the-box model, how discoverable the model picker's default-setter is, how many niche features the idle tip rotation surfaces, and two fixes to how the daemon path remembers and swaps the model.

    What changed

    New default model: deepseek-v4-flash:0731 (high)

    • The default model is now deepseek-v4-flash:0731@ollama-cloud (reasoning effort high), routed through Ollama Cloud when OLLAMA_API_KEY is set, and through the local Ollama daemon (deepseek-v4-flash:0731@ollama-local) when it is not. The previous default was glm-5.2:cloud.
    • deepseek-v4-flash:0731 is a thinking model, so the default routes pin reasoning effort to high for both the cloud and local routes. A user's saved per-model preference still overrides this at runtime.
    • This only affects fresh configs with no default_model set. An existing config.toml that states its own default_model is untouched.

    The model picker now tells you how to set the default

    • The picker's default-setter (Ctrl+O) was undiscoverable — it lived only in the one-line key summary above the box, which truncated to a meaningless Ctrl+O · Ctrl+N on narrow terminals. Now:
      • The key-summary hint keeps the verb at every width, down to Ctrl+O set default on the narrowest.
      • A contextual Ctrl+O set as default hint appears right at the model the cursor is on, for any selectable model that is not already the default. It is combined with the reasoning-level line when present (e.g. reasoning: high · Ctrl+O set as default), and never shown for an unavailable model.
    • No new key binding was added, so filtering the picker by typing (including d to reach deepseek models) is unchanged.

    The idle tip rotation covers the niche features

    • The idle Tips rotation is the only passive discovery surface — a user who never opens /help and never presses an undiscovered chord still sees it rotate in the status line and the right-side dock. It went from 5 entries to 16, now covering:
      • Niche keybindings that had no other passive surface: Alt+B (send a running tool to the background), Alt+R (cycle reasoning effort), Ctrl+Up (retrieve staged messages), Alt+G (cycle diff mode), Ctrl+P (toggle auto-poke).
      • The right-side dock widgets and side panel: Alt+I (info widgets), Alt+X (todo card), Alt+M (side panel).
      • Niche slash commands only /help would otherwise reveal: /btw (a side question that costs no main context), /rewind (collapse back to a checkpoint).
    • A guard test (TestTipsFitAndRotate) locks in that every tip fits a single status-line row and the rotation visits every entry, so a tip added to the list actually reaches the user.

    evilcode update stops a running daemon

    • A running daemon holds the old binary in memory, so swapping the file on disk did not change the version it served until a manual restart. evilcode update now requests a graceful daemon shutdown (right after the download verifies, so a failed download never disturbs it) before installing the new binary. No daemon running is a silent no-op; an unreachable one is a warning, not a failure.

    Fix: last_model actually works through the daemon

    • Two bugs made the remembered-model preference useless when running through the daemon (the default evilcode/ec path):
      • The daemon resolved a new session's model but never wrote the result back to last_model, so the file sat at whatever value it booted with. The attach client now persists the resolved session model, mirroring the standalone TUI path.
      • The daemon loads its config once at serve start and never re-reads it, so picker model switches were ignored on the next launch. Session builds now refresh last_model from the config file, so a long-lived daemon honors the model you actually last used.
    • Guarded by TestBuildHonorsTheFilesLastModel and TestBuildKeepsLastModelForInMemoryConfig; in-memory test configs stay hermetic.

    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 test ./internal/...
    • go vet ./...

    SHA-256 for evilcode-linux-amd64:

    d5384978c0bc8205ff0ec2a70cb6c89be7a53d1f4a62ce5d9708b192936b3090
    
    Downloads