Skip to content

Releases: Zhachory1/mewritecode

v1.5.2

Choose a tag to compare

@github-actions github-actions released this 12 Aug 22:23

Changed

  • Branding: a distribution that sets mewriteConfig.branding.primaryWordmark now renders that art standalone, replacing the built-in pencil logo entirely instead of rendering beside it. Previously a custom wordmark was always drawn next to the hardcoded pencil and clamped to the pencil's 12x40 footprint, so there was no supported way to show a standalone ASCII/Unicode mark (only logoPath images could replace the pencil). A standalone wordmark is now bounded only by the terminal width; the built-in default still renders beside the pencil within its fixed box. Upstream (no primaryWordmark) is unchanged.

v1.5.1

Choose a tag to compare

@github-actions github-actions released this 12 Aug 21:16

Fixed

  • mewrite agents: entering a spawned agent that had finished its turn (idle, but still alive and listed) no longer re-execs it into a separate full-screen mewrite --session with no way back. Enter now checks pty ownership first, so an owned agent — running or idle — opens the interactive pane in place with a working esc/ctrl+w exit; the resume re-exec path only applies to sessions this viewer does not own (#195).
  • Branding: the interactive startup banner and the mewrite agents view now render the distribution wordmark from mewriteConfig.branding.primaryWordmark / secondaryWordmark instead of the hardcoded "Me Write Code" block. The BANNER_PRIMARY_WORDMARK / BANNER_SECONDARY_WORDMARK config exports were parsed but never consumed by the renderer; renderPencilLogo now reads them (secondary shown only on tall terminals via showSecondaryWordmark), so a wrapper distribution's wordmark applies to both surfaces. The built-in block is now the default primaryWordmark, so upstream is unchanged. The mewrite agents header also now renders the branding.logoPath image logo (like the interactive banner) when one is configured, so image-branded distributions apply there too. Wordmark art is bounded to a fixed box (max 12 rows, 40 cells wide; primary + secondary combined also <= 12 rows) and oversized art now fails fast at startup with a dimension-named error instead of being silently clipped (#194).

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 16:40

Added

  • mewrite agents: spawned agents are now driven interactively via live PTY panes. Selecting a running agent opens a full interactive mewrite session (rendered from a pseudo-terminal) whose keystrokes go straight to the child, so you can jump in and steer mid-run instead of only monitoring read-only or using the s steer modal. The pty master lives in the viewer, so agents run in the background while the view is open and are torn down on exit. Falls back to the prior detached-headless spawn when node-pty is unavailable (#192).
  • mewrite agents: an always-visible "new agent" input bar pinned to the bottom of the view, styled like the interactive prompt editor (full-width rules, border brightens when focused). Type a task and press enter to spawn while staying in the view. n or down-arrow off the end of the list focuses the bar; up-arrow or esc returns to the list; with an empty list focus starts in the bar (#193).

Changed

  • The mewrite agents list is now scoped to agents this viewer owns, so foreign interactive mewrite sessions from other terminals no longer appear (and can't be entered/hijacked) (#192).
  • The brand wordmark is now a larger stacked "Me Write Code" block-letter title next to a refined pencil, using only universal glyphs so it renders on Apple Terminal, tmux, etc. (#192, #193).

Fixed

  • Packaging: node-pty's prebuilt spawn-helper ships non-executable via the npm tarball, causing posix_spawnp failed at runtime; a postinstall restores its executable bit (#192).

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 00:55

Fixed

  • Daemon no longer throws TypeError: The database connection is not open on shutdown. An un-awaited runner turn (e.g. the echo runner's async reply stream) could emit a state/message event after close() had closed the SQLite store, hitting store.updateSession on a dead connection. close() now latches a closed flag that makes the per-session emitter drop late events instead of touching the store or dead sockets (#176).

  • mewrite agents: a hosted session that aborted a stalled turn for auto-retry (e.g. "Model stream idle for 120000ms") no longer stays stuck showing error after the retry succeeds. The daemon runner treated the pre-retry agent_end(error) as terminal and latched, so the later successful agent_end(stop) couldn't clear it. On auto_retry_start the runner now undoes the premature terminal state and returns the session to running, so the final state reflects the retry's outcome (#158).

  • Fixed daemon double-spawn race in mewrite serve: two concurrent mewrite serve processes could both pass the pidfile existence check and race to bind the port (TOCTOU). Now the pidfile is acquired atomically with O_EXCL before starting the daemon; if another daemon holds a live pidfile, the second caller exits 0 (not 1) so auto-start workflows treat peer ownership as success. Stale pidfiles (dead process) are reclaimed automatically. Belt-and-suspenders: if two processes somehow pass the pidfile lock but one loses the port bind (EADDRINUSE), it releases its pidfile and exits 0 (#167).

  • System prompt: core safety sections (instruction precedence, durable-memory/data boundaries, executing-with-care) are now always-on. Previously the slim build flag and the customPrompt path both silently dropped every non-overridable safety section, producing an agent with no durable-memory or destructive-action consent gate while still ingesting untrusted project context. They are now injected in every build path via a shared CORE_SAFETY_SECTIONS block.

  • System prompt: the customPrompt path now routes appended text through buildAppendOnlySection (the "earlier system sections win" framing) instead of a raw concatenation.

  • System prompt: injected project-context files (AGENTS.md/CLAUDE.md) now carry a precedence banner clarifying that project instructions cannot override the safety sections and grant durable-capture consent only when they name a destination and scope.

  • Git status snapshot no longer renders a failed or oversized git status as "(clean)"; it now reports the status as unavailable.

Changed

  • New brand logo: a pencil (code shaft) with "Me Write Code / me write less, me do more" to its right, replacing the ASCII wordmark. Shown on interactive startup and on the mewrite agents launch screen (shared renderer). Terminal-safe box-drawing, no image component (#185).
  • mewrite agents is now a single full-screen status-grouped list instead of a sidebar + side-by-side focus pane. On launch the screen is wiped and a pencil logo with "Me Write Code / me write less, me do more" is shown above the list. Agents are grouped under WORKING / ERRORED / COMPLETED headers (attention order), and selecting one opens it full-screen (ctrl+w / enter to focus, back to return) rather than in a split. This is Phase A of the agents view v2 redesign toward a local process-registry model (#185).
  • mewrite agents focus pane now supports two steering controls from interactive mode: shift+tab (app.thinking.cycle) cycles the remote session's thinking level via the daemon set_thinking RPC — the status-line thinking level updates on the echoed usage — and ctrl+o (app.tools.expand) toggles tool activity between the compact one-liner and an expanded card showing the tool's args and result/error. Tool start/end are correlated into a single card by tool-call id. Both reuse the existing configurable keybindings (#175).
  • mewrite agents sidebar navigation now wraps: pressing up on the top agent selects the bottom one (and down on the bottom wraps to the top), so you can jump to the far end of the list in one keypress. Page up/down still clamp at the ends (#152).

Removed

  • Dropped references to a non-existent explore subagent from the system prompt and the task/agent tool descriptions.

Added

  • mewrite agents: while monitoring a running agent you can now steer it (press s to type a redirect) or interrupt it (press x), so you can catch an agent working on the wrong thing before it finishes. Steering messages are delivered over a per-agent inbox file; the agent's own process injects them into its steering queue at the next turn boundary (mid-run) or as a fresh prompt (when idle). Interrupt signals the agent process. Configurable via app.agents.steer / app.agents.interrupt. Agents view v2 Phase C+ (#185).

  • mewrite agents: selecting a WORKING agent now opens a read-only live monitor that tails its transcript, so you can watch a running agent without interrupting it (another process owns its live turn). Idle/completed/errored interactive agents still resume in place. Agents view v2 Phase C (#185).

  • mewrite agents now spawns new agents as independent, detached mewrite processes instead of routing through the daemon (agents view v2, Phase B2). Press n, type a task, and the agent starts working in the current directory and keeps running after you close the view; it shows up in the list via the liveness registry and is resumable. Output is logged under ~/.mewrite/agent/agent-logs/. The daemon is no longer required for the local agents workflow (and is never auto-started); it is used only to surface any daemon-hosted [d] sessions that happen to be running. Removed the daemon auto-start/ensureDaemon path from the agents view (#185).

  • mewrite agents: selecting a live interactive [i] session now resumes it as a real full interactive mewrite session in place (replace-and-return) instead of opening a read-only transcript pane. The list is torn down, mewrite --session <path> runs attached to your terminal with the complete interactive UI (editor, footer, meter, tools, thinking), and quitting returns to the agents list. This is Phase B (resume-on-select) of the agents view v2 redesign; detached resumable spawning and retiring the daemon from the local path follow (#185).

  • mewrite agents focus pane now shows a context-usage meter in its status line: a progress bar ███░░░ 20% 40k (percent of context window + tokens used) plus the thinking level next to the model id, matching the interactive context meter. Fed by the daemon usage notification (see #176), so it live-updates on each turn. Attaching to an idle session that already ran a turn now re-requests a usage snapshot on connect, so its meter is populated immediately instead of blank until the next turn. A session that has never run a turn (usage genuinely unknown) shows just the model id, and post-compaction it renders ? for unknown token counts (#173).

  • Daemon WS protocol now streams richer per-turn events so a focus-pane client can reach parity with interactive mode. Tool events carry toolCallId, args (on start), and result/isError (on end) correlated across start/end; a new usage notification streams context tokens, context window, percent, and thinking level on turn boundaries; state carries a stopReason (stop|max_tokens|error|aborted) on the terminal state; and a new set_thinking RPC steers a running session's thinking level (echoed back as a usage event). All additions are optional fields / new methods, so the bundled web-ui and the attach REPL keep working unchanged. Oversized tool args/results are truncated over the wire (16 KiB cap). HealthCapabilities.richEvents advertises support for feature detection (true for the agent runner) (#176).

  • Added mewrite history: a standalone TUI to browse and resume persisted local JSONL sessions. Select a session and press enter to see the exact mewrite --session <path> command to copy and run. This is separate from the live daemon monitor (mewrite agents) and from mewrite sessions (which lists daemon-hosted sessions via the client). Read-only: no delete or rename, just browse and get the resume command (#159).

  • Enhanced debug logging (MEWRITE_AGENTS_DEBUG) with automatic log rotation (50 MiB cap, keeps one .1 backup), category filtering (log only specific tags like runner,daemon), and support for custom log paths via tag=path syntax. Prevents disk-fill from flapping sockets while remaining zero-cost when disabled (#168).

  • The mewrite agents focus pane is now live and interactive for hosted sessions: it streams the agent's response as markdown and gives you an input box to talk to the agent in place — no more dropping to a separate attach REPL. ctrl+w focuses the pane, type and press enter to send, escape interrupts a running turn or (when the input is empty) returns focus to the sidebar. Interactive [i] terminal sessions remain read-only (#158).

  • mewrite agents is now a two-pane view: a sidebar of agents on the ...

Read more

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 05 Aug 16:51

Added

  • Subagents can now request a model by capability tier instead of a concrete id: model: tier:fast, tier:normal, or tier:strong in an agent definition. The tier resolves to a curated model within the parent's current provider, so it works regardless of which single provider you are authed to. On a miss it falls back to the provider's curated normal, then to the parent model with a warning (never your default model).
  • Added a subagentModel setting: the default model (tier keyword or concrete id) for spawned subagents whose definition pins no model.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 19:31

Changed

  • Onboarding no longer prompts about "telemetry" and there is no telemetry setting. What was framed as telemetry is local-only diagnostics logging that stays on disk and is never uploaded; it is simply enabled so the agent has usage data to improve against. The onboarding question is dropped (four questions down to three), the notice copy now says "logs usage locally ... never uploaded — there is no telemetry", and doctor reports "Local logging" instead of "Telemetry". The unused telemetry settings key and its getter/setter are removed.

Fixed

  • Fixed onboarding option lists implying arrow-key navigation. Each option was drawn with a filled/empty radio-style dot (/) marking the default, which read like a movable cursor even though selection requires typing the option's key. Options now show a plain (default) tag and the prompt reads Type <keys> and press Enter, making the number/letter input obvious.

  • Fixed the TUI appearing to freeze during a model call when auto-compaction runs. Compaction's summarization requests called completeSimple directly, bypassing the agent loop's stream inactivity watchdog, and their only AbortController fired on manual user cancel — so a provider that opened the connection then went silent would hang the summarization forever. Since compaction fires automatically at context thresholds (right around a large turn), this presented as a freeze mid model call. Compaction and turn-prefix summarization now run through streamSimple + withIdleTimeout (the same inactivity watchdog the main agent loop uses): a stall with no events for the idle window aborts fast and surfaces a retryable error, while a legitimately slow-streaming summary is never killed. Default 30s of inactivity; override via CAVE_COMPACTION_IDLE_TIMEOUT_MS, 0 disables.

  • Fixed a TUI freeze during model streaming by memoizing markdown code-block syntax highlighting. Finished code blocks were re-highlighted on every frame while later content streamed in; memoizing by language and content makes repeat frames free and keeps the render loop responsive. The memo is cleared on theme change so colors stay correct.

  • Fixed the LLMLingua compression model download hanging the agent on first use. The download fetch and its streamed body read were unbounded, so a download host that opened the connection then went silent would hang the first compressing turn forever — presenting as a freeze during a model call, like the compaction case above. The download now runs under a progress-driven inactivity watchdog that aborts the fetch and body stream when no bytes arrive within the idle window (resetting on every chunk, so a slow-but-progressing download is not killed) and throws a retryable ModelDownloadStalledError. Default 60s of inactivity; override via CAVE_MODEL_DOWNLOAD_IDLE_TIMEOUT_MS, 0 disables (#143).

v1.2.4

Choose a tag to compare

@github-actions github-actions released this 31 Jul 18:26

Fixed

  • Fixed configured MCP servers never reaching the model in normal sessions: createAgentSession pinned a fixed initial active-tool list (read/bash/edit/write/task/agent) that overrode the session's computed default, so the registered mcp_tool_search / mcp_tool_call (and memory_*) tools were never activated. mcp list showed servers and no error fired, yet the agent had no MCP tools. The initial active set is now left unset unless the caller passes explicit tools, so the session activates the memory and MCP bridge tools it discovers (#127).

v1.2.3

Choose a tag to compare

@github-actions github-actions released this 31 Jul 17:58

Fixed

  • Fixed ctrl+o ("Toggle tool output") not expanding tool output for tool rows grouped into a tool shelf (the running/most-recent turn): the shelf now propagates output expansion to its nested rows and reveals them when expanded, instead of flashing and reverting (#134).
  • /model <search> now surfaces pricing refresh failed instead of silently swallowing the pricing refresh error (was fired fire-and-forget with no handling) (#133).

v1.2.2

Choose a tag to compare

@github-actions github-actions released this 31 Jul 16:17

Added

  • Wired configured MCP servers into normal sessions: when mcp.json has at least one server, the session now registers the always-on mcp_tool_search + mcp_tool_call bridge tools (lazy connect, no startup blocking). /mcp list also reports whether the current agent actually received the MCP tools (#127).

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 24 Jul 16:49

Fixed

  • Release and smoke-install CI: bind the local install-test server to 127.0.0.1 so macOS runners (which resolve localhost to IPv6 first) no longer hang and fail the installer download (#124)
  • Linux package build produces a valid Debian version for non-numeric smoke builds (smoke -> 0.0.0~smoke), fixing the dpkg-deb "version number does not start with digit" failure (#124)
  • Release workflow no longer pushes directly to protected main: the Homebrew formula bump now lands via an auto-mergeable PR and nightly bench results are committed to a dedicated bench-results branch (#124, #125)