0.2.0 - 2026-08-17
The first formally versioned release of AgentLauncher — a Qt6/QML + C++
desktop app that launches the web UI of AI coding agents from a single
card grid. Everything is config-driven: agent definitions live in
agents.json, never in C++.
Added
- Card grid home screen showing all configured agents, each with a
Start button (launches the agent's web server) and a Configure button
(opens the agent's settings page). - HTTP health-check state detection: running cards are highlighted
with the agent's own color and a colored border; any HTTP response means
running, connection refused/timeout means stopped. - Stop button (×) on running cards for agents started this session —
launch()records the PID fromstartDetached, andstop()runs
taskkill /F /T /PID(Windows) so the wholecmd → .cmd → nodetree
dies. - Transient
launchingstate with a 30s safety timeout: the card
shows a spinner until the health check confirms the server is up. - Launch error feedback:
launchFailedsignal triggers an at-place
red flash on the card plus a scrollable, monospace central error popup. - Configurable agent icons and colors via
agents.json: icons accept
qrc:/resources, local file paths (with%VAR%and~expansion),
http(s)://URLs, or empty (falls back to built-in default); colors are
auto-assigned from a built-in Catppuccin Mocha palette when empty, and an
optionalcardColorsets the non-running background. - Four neutral built-in icons:
default,terminal,cube,bot. - Install / update / version support: each agent can declare
installCommand,updateCommand, andversionCommand; card version
labels show the installed agent version. - Streaming command output to the card: while an agent is installing,
updating, or running its one-time setup, a scrollable monospace console
below the status line shows live stdout/stderr. It hides on success,
stays visible for 5s on failure, is dismissible, and can be re-opened
via a right-click "Show output" action. - One-time
setupCommand: runs before the first launch of an agent
(e.g. generating a bearer token forqwen serve). On exit code 0 the
result is persisted toagent_state.jsonand never re-run unless the
user picks "Re-initialize" from the card's context menu. - Bearer token authentication via the
tokenFilefield (Qwen Code):
the token is set asQWEN_SERVER_TOKENon launch and appended as
#token=<value>to the web URL. - Force Stop context-menu action: kills the process listening on an
agent's web port, even when this launcher didn't start it. - Runtime version badges in the top-right corner: detected Python and
Node.js versions are shown as green badges; missing runtimes show a red
× with a tooltip explaining affected agents may not work. - Window title config: an optional
titlefield in theagents.json
root overrides the application window title; empty/absent falls back to
AgentLauncher. - Rotating file logger: all Qt log output is written to
~/.AgentLauncher/log/agentlauncher.log, rotating at 10 MB keeping
2 files (current + 1 backup). ExistingqWarning()calls are captured
automatically. - Window close confirmation: when agents have been launched, closing
the window prompts whether to terminate all background processes started
this session. - Default agents: Kimi Code, OpenCode, Qwen Code, OpenClaw, and
DeepSeek Harness ship in the bundleddefault_agents.json. - Windows packaging script (
scripts/package.sh): one-command
Release build +windeployqt. Double-clickable from Explorer — it
auto-loadsvcvars64.batwhen the MSVC environment is missing, always
cds to the project root, and uses an explicitwindeployqt.exepath. - Application icon (
app.rc,app-icon.png). - Internationalization (i18n): source strings are English; a
QTranslatorauto-loads Chinese (agentlauncher_zh_CN.qm) based on
system locale..tssources are synced vialupdateand compiled to
.qmembedded under:/i18n/. - Documentation site (MkDocs + Material, English + 中文) with a
configuration guide, plus main-window screenshots in the README/docs.
Changed
- Launch reliability: bare commands are resolved through
QStandardPaths::findExecutable(which applies PATHEXT), and.cmd/
.batshims run viacmd /cso npm-style agents (e.g.qwen.cmd)
launch correctly —CreateProcessalone can't find them. - Qwen Code command simplified to
qwen serve; the bearer token is
handled viatokenFile+setupCommandinstead of being inline. - Context menu stability: Force Stop and Re-initialize items now use
enabled(greyed out) instead ofvisible, so the menu no longer
grows/shrinks as state changes — consistent with Update/Install and
Show output. - Card layout: the button row is anchored to the bottom of the card
rectangle, eliminating the large empty gap left by top-stacked Column
content. - Version-check UX: a 500ms minimum spinner duration so the indicator
is always visible;checkingVersionis initialized before QML renders
so cards show the spinner from the first frame; stderr is read as a
fallback for version extraction, and a non-zero exit with a parseable
version string is treated as installed.
Fixed
- ConfigPage property collision: the
dataproperty was renamed to
agentDatato stop shadowingQQuickItem.data, which had left fields
empty by resolving child bindings to the wrong object. - Card Flow overflow: the 4th card (OpenClaw) overflowed off the
right edge becauseColumnLayoutwidth was bound to an undefined
parent.availableWidth(ScrollView's internal Flickable has none);
rebound toscrollView.availableWidthso cards wrap and reflow on
resize. - Install/update state stuck: removed the trailing
& pausefrom
install/update commands (it waited for a keypress so
QProcess::finishednever fired, leaving the card stuck on
"Installing…"); added running-protection (reject while the agent is
running) and correctinstallFinishedsignal emission for both success
and failure. - Stop button state: the
stoppingstate now resets whenstop()
fails, so the button no longer stays stuck.