Skip to content

Releases: editor-code-assistant/eca

0.132.0

05 May 01:41
e146c73

Choose a tag to compare

  • variantsByModel entries now support an optional :api filter (string or vector) to restrict variant matching by provider API type.
  • Custom commands and skills now expose :arguments metadata inferred from their content. Previously they always reported empty arguments.
  • Native skill-create, plugin-install, and plugin-uninstall commands now declare :required true on their arguments in the command listing.
  • Fix documentation link in --help output.
  • Add built-in variants for deepseek-v4-pro (none, high, max).
  • Improve skill tool description to resolve file paths and scripts mentioned in skill content against the skill's base directory.
  • Add built-in eca-info skill that exposes the running ECA's information for debugging ECA itself.

0.131.1

30 Apr 17:16
e77d4da

Choose a tag to compare

  • MCP tools that return image content blocks (e.g. an MCP image-generation/edit server) now render those images in the chat UI as ChatImageContent and replay them back to the LLM as image inputs on follow-up turns when the model supports vision. Implemented for openai-responses (synthetic user-role input_image after the function_call_output) and anthropic (mixed text + image blocks inside tool_result.content). openai-chat and ollama continue to receive a text placeholder until a parallel pattern is implemented there.
  • Bugfix: MCP tools without a description (which the MCP spec marks optional) no longer break Anthropic chat requests with tools.<n>.custom.description: Input should be a valid string. Missing/empty descriptions now fall back to the tool's title, then to a synthesized MCP tool: <name> string at the MCP boundary so all providers receive a non-null string.
  • Hook matcher now supports object form keyed by tool selectors with per-tool argsMatchers; legacy string regex matchers remain supported.

0.131.0

29 Apr 13:14
ae82a86

Choose a tag to compare

  • Add ${plugin:root} dynamic interpolation for plugin-provided config, hooks, commands, and rules.

  • Support OpenAI built-in image_generation tool via the Responses API for capable models (openai/gpt-5.x, openai/gpt-4.1). Generated images are streamed back as a new image chat content carrying mediaType + base64. Available on every provider whose api is openai-responses (openai, github-copilot responses-api models, litellm, custom providers).

  • Support image edits via the same image_generation tool: assistant-generated images now persist to chat history so subsequent turns can iterate ("now make it blue, smaller, with a red border"), resumed chats replay previously generated images, and clients can attach source images either by file path (existing FileContext) or via a new inline base64 ImageContext request type for clients without filesystem access.

  • Fix inline completion crash when renewing auth tokens before completion requests. #437

  • Bugfix: avoid Divide by zero crash in chat auto-compact when models.dev reports 0 for a model's context/output limits (e.g. openai/chatgpt-image-latest); such limits are now normalized to nil and auto-compact? skips models without a known positive context window.

  • Bugfix: image edit follow-up turns no longer fail on the OpenAI Responses API when prior generations are replayed; generated images are now persisted under a dedicated image_generation_call history role and replayed as a user-role input_image data URL across providers.

  • Support regex patterns in markdown agent tool entries (e.g. eca__shell_command(npm run .*)) for fine-grained tool approval, currently limited to eca__shell_command.

0.130.1

28 Apr 13:43
ff4bedb

Choose a tag to compare

  • Add configurable skill paths and recursive directory loading for configured rules, commands, and skills; local skills are also discovered from .agents/skills. #423
  • Bugfix: /prompt-show now renders the system instructions as plain text instead of a raw {:static :dynamic} map.
  • Fix MCP OAuth success/error page never rendering in the browser by sending the local-callback HTML response before invoking caller-supplied on-success/on-error hooks; previously the MCP callback synchronously stopped the Jetty server inside on-success, racing the response flush.

0.130.0

27 Apr 15:32
3d358e1

Choose a tag to compare

  • Improve rules with frontmatter filters, condition variables, path-scoped loading, enforcement support, and clearer documentation. #222
  • preToolCall hooks now receive approval: "ask" for the native ask_user tool so notification hooks (e.g. matching .approval == "ask") also fire when the chat is blocked waiting for a user answer, regardless of trust mode.
  • New ${cmd:some command} dynamic string backend that resolves to the trimmed stdout of a shell command, useful for password managers like pass or op. On macOS the user's interactive shell $PATH is queried once so GUI-launched ECA picks up Homebrew, mise/asdf shims, etc. #430

0.129.2

25 Apr 20:41
d1753f7

Choose a tag to compare

  • Add support for gpt-5.5 variants
  • Restore trust mode on chat resume: chat/open and the /resume slash command now emit config/updated with selectTrust reflecting the resumed chat's persisted trust toggle, so the client indicator stays in sync with the server's auto-approval behavior. #426

0.129.1

23 Apr 16:07
2bcb648

Choose a tag to compare

  • Fix token usage not being reported in the UI for Google/Gemini (and other strict OpenAI-compat providers) by opting into stream_options.include_usage on streaming chat completion requests. #414

0.129.0

23 Apr 15:38
41ab27e

Choose a tag to compare

  • Restore the model used at chat creation when resuming a chat: chat/open and the /resume slash command now emit config/updated to realign the client's selected model to the persisted chat's :model, and the next chat/prompt prefers that stored model over the agent/global default (stale models still fall through gracefully). #417
  • Fix rewrite hanging on large files by windowing the inlined file context around the selection instead of sending the whole file; configurable via rewrite.fullFileMaxLines (default 2000). #418
  • Prefix plugin-sourced commands and skills with their plugin name (/<plugin-name>:<name>) to avoid collisions across plugins. When the plugin name and the command/skill name are equal the prefix is dropped. #420
  • Fix empty .sha256 for macOS aarch64 release artifact by using shasum -a 256 (portable across macOS runners) and enabling pipefail so silent pipe failures don't hide.
  • Fix install page eca-desktop download buttons navigating to the wrong artifact (e.g. Linux/x86_64 AppImage leading to eca-mac-arm64.dmg) caused by hidden OS/arch panels still intercepting clicks on top of the visible panel; hidden primary tab and OS panels now use display: none so their nested :checked rules can't re-activate and leak clicks.
  • Fix custom tools hanging on Windows by running them through the same platform-aware shell used by shell_command, respecting toolCall.shellCommand. #421

0.128.2

22 Apr 20:15
0b76add

Choose a tag to compare

  • Sign and notarize macOS native binaries in release CI.
  • Disable ask_user tool for subagents since they run non-interactively. #416
  • Fix low-quality chat titles on 3rd-message retitle (e.g. literal "Understand" on Opus) by flattening the conversation into a single user message so the title model can't mirror prior planning-mode section headers, adding negative rules/examples to the title prompt, and hardening sanitize-title to skip a bare leading markdown header when more content follows.

0.128.1

20 Apr 14:07
daab7b8

Choose a tag to compare

  • Fix stale system prompt being reused after switching agent mid-chat by scoping the chat-level prompt cache and the OpenAI Responses prompt_cache_key per active agent. #411
  • Improve chat title quality on 3rd-message retitle by filtering tool calls, tool results, reasoning and flag entries from the history passed to the title LLM, and by respecting the last compact marker.
  • Add the /model command allowing the user to change the model directly from the chat.