0.89.0
Gentleman-Programming/engram0.89.0Sep 25, 2026by takahirom
Upgrading?
AI Summary
Desktop app bundles necessary Java modules to fix backend errors and improves error reporting for 429 API responses.
Key Highlights
- Bundles Java modules (fixes keyring/backend errors)
- 429 errors now show the provider's specific error body
New Features
- Bundled Java runtime for packaged UI
- Detailed 429 error logging
Full Release Notes
The packaged desktop app no longer fails on missing Java modules, and a 429 from the AI provider now says why it was returned.
## The Packaged App Bundles the Java Modules It Uses (#456)
The dmg/msi/deb ship a trimmed Java runtime that only had the modules Compose Desktop includes by default. On Linux, saving an API key failed with `BackendNotSupportedException: No available keyring backend found`, because the keyring backend needs `jdk.security.auth`. Playing a scenario failed with `NoClassDefFoundError: java/sql/Timestamp` from Maestro's JS engine, which needs `java.sql`; this was reproduced on the macOS app, and the Linux and Windows packages use the same trimmed runtime.
The runtime now includes the modules `./gradlew arbigent-ui:suggestRuntimeModules` reports for the app's dependencies. The dmg grows by about 2 MB (from 235.5 MB to 237.6 MB on macOS), and the installed app by about 7 MB. `arbigent` CLI runs on your own JDK and is unaffected.
Thank you, @rlanyi, for the report in #449, which already narrowed both failures down to the missing modules with `--limit-modules`.
## A 429 Shows the Provider's Error Body (#457)
OpenAI returns HTTP 429 both for a temporary rate limit and for `insufficient_quota`, and Gemini, Azure OpenAI and other OpenAI-compatible endpoints send their own 429 bodies. Every 429 used to be logged as a plain `Rate limit exceeded`. The provider's body is now in the message, for OpenAI-compatible endpoints and Anthropic alike:
```
I: Rate limit exceeded: {"error":{"message":"You exceeded your current quota, please check your plan and billing details. ...","type":"insufficient_quota","code":"insufficient_quota"}}. Waiting for 10 seconds.
```
The retry behavior does not change: a 429 is still waited out and retried, so you can now see from the log whether waiting will help.
Error bodies for 429 and other API errors reach logs, step feedback and reports, so they are redacted first. The configured API key is removed as before, and API-key-like tokens that a provider echoes back (`sk-...`, `AIza...`, such as the partially masked key in OpenAI's 401 message) are replaced with `****` in full. The body is capped at 1,000 characters.
Thank you, @rlanyi, for reporting in #450 that `insufficient_quota` was hidden behind the rate limit message.
## What's Changed
* Bundle the runtime modules the packaged UI needs by @takahirom in https://github.com/takahirom/arbigent/pull/456
* Show the provider's 429 error body and mask API keys in API errors by @takahirom in https://github.com/takahirom/arbigent/pull/457
**Full Changelog**: https://github.com/takahirom/arbigent/compare/0.88.0...0.89.0
Related Repositories
ollama/ollama★ 184,226
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
fatedier/frp★ 110,059
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
infiniflow/ragflow★ 92,628
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
gohugoio/hugo★ 90,199
The world’s fastest framework for building websites.
junegunn/fzf★ 83,715
:cherry_blossom: A command-line fuzzy finder