v1.1.61
Changelog
v1.1.61
✨ Features
-
Per-Session Tool Capabilities
- Added
x_toolsextension to/v1/chat/completionsfor enabling webSearch, browser, a2aMaster, delegate, and multiAgent per session. - Added
GET /api/capabilitiesandGET/PATCH /api/sessions/{id}/capabilitiesAPIs for querying and updating session tool toggles. - Added
session_capabilitiespersistence table (migration 007) insessions.db. - Added CLI flags
--web-search,--browser,--enable-a2a-masterfor serve mode. - Added
webSearch,browser,a2aMasterfields toserve.jsonconfig. - Web UI session tool toggles in composer bar with PATCH to capabilities API.
- Per-session settings injection for
webSearchviasettingsForSession. - Added
x_session_id+x_working_dircwd conflict detection (HTTP 409). - Added
/api/sessions?scope=all|activeand/api/sessions/activeendpoints. /modeand/delegatecommands now persist capability changes per session.
- Added
-
Session Streaming & Stats Dashboard
- Added SSE-based session streaming for real-time chat updates (
session_stream.go). - Added sequenced message/event replay for cursor-based streaming.
- Added
/api/stats/endpoints (summary, timeseries, by-provider, by-model, recent). - Track session running state and publish run/capability events to stream.
- Added cache read/write tokens to usage tracking.
- Web UI: SSE streaming in Chat view, Stats dashboard view, Channels/Logs settings.
- Added
WorkingDir→DefaultWorkDirrename in serve config. - Added legacy config dir normalization for session/skills dirs.
- Added SSE-based session streaming for real-time chat updates (
-
Run & Capability Event Tracking
- Added
session_run_eventsandsession_capability_eventstables (migration 008). - Record run lifecycle events (started/finished/failed/canceled) for every chat completion.
- Record capability change events for
/mode,/delegate,x_tools, and PATCH API. - New endpoints:
GET /api/sessions/{id}/run-events,GET /api/sessions/{id}/capability-events. - Web UI displays recent run and capability events.
- Added
make serveMakefile target.
- Added
-
Transcript SSE Events for Streaming
- Added
x_transcriptfield toChatCompletionRequestfor enabling transcript-mode streaming. - When enabled, streaming handler emits
event: transcriptframes (assistant_deltaandmessagetypes) instead of legacytool_statusevents. - Web UI sends
x_transcript:trueand routes transcript events through sharedupsertTranscriptMessagepath. - Refactored streaming handler to branch on transcript flag with helper functions for building transcript toolCall/toolResult entries.
- Added
-
Embedded Web UI Assets
- Web UI assets are now embedded in the binary via
go:embed, no longer requiring dist files on disk. - Added
uipackage withDistFS()andfs.FSabstraction for both embedded and override paths. --web-ui-dirflag still supported for overriding embedded assets.
- Web UI assets are now embedded in the binary via
-
External Bind Address via --port
--portnow accepts full addresses (e.g.0.0.0.0:8080).- Removed
displayListenAddrrewrite that overrode0.0.0.0to127.0.0.1.
-
Web UI Keyboard Shortcuts & Pagination
- Sidebar: Cmd/Ctrl+K to focus search, Shift+Cmd/Ctrl+K for new chat.
- Platform-aware shortcut labels (macOS vs other), Escape clears search.
- Sessions view: paginated list (25 per page) with page navigation controls.
-
WeChat QR Login API & Channels Settings UI
- Added WeChat QR login API endpoints (login status, QR proxy, base64 mode).
- Added
wechatLoginSessionfor managing QR scan flow state. - Rewrote Channels.svelte with full WeChat QR login flow (polling, display, error handling).
- Added Feishu config form (appId/appSecret/workspace/allowedUsers) and WebSocket channel toggle.
- Added
ProviderSettings.sveltewrapper and comprehensive i18n strings for channel settings. - Dispatcher nil-checks before starting platforms.
-
Sub-Agent Detach & Rule Guard Fix
- Added
DetachChild()toAgentManagerto remove child from parent's active list while retaining the child agent for later inspection. - Added
HasRunning()toAgentManagerto check if any agent is actively executing. - Changed
DelegateSubAgentToolto useDetachChildinstead ofDestroyso completed delegated children remain inspectable via handle. - Delegate result now returns handle for tracking delegated child agents.
- Fixed
/rulecommand guard to useHasRunning()instead ofCount() > 0so rule changes are allowed when only completed retained agents exist.
- Added
-
Cron Store Migration to SQLite
- Replaced
FileCronStore(cron.json) withSQLiteCronStore(sessions.db) for reliable, transactional cron job persistence. - Added
SessionScopedStoreto bind cron jobs to sessions with per-session isolation and automatic workDir inheritance. - Added
--cronCLI flag as independent option (separate from--multi-agent). - Cron now enabled by default in serve mode without requiring multi-agent.
- Scheduler attaches scheduled local runs to existing sessions when
SessionIDis set. - Added
cron_jobstable migration in sessions.go. - Cron tool supports
findJobby name (with ambiguity detection) for enable, disable, delete, and run actions. - Dispatcher lazily initializes
AgentManagerfor cron-only sessions.
- Replaced
-
Serve Settings Hot-Reload & Workflows Toggle
- Added
Server.ApplySettings()to hot-reload provider/model after settings save. - Added
workflowssession tool option and feature flag in serve. - Added
nearestExistingBrowseDirfallback when default work dir is missing. - Refactored truncation to
util.TruncateWithSuffix(UTF-8 safe).
- Added
-
System Prompt Rename to MothX
- Renamed system prompt identity from VibeCoding to MothX.
🔧 Improvements
-
Web UI Settings Expansion
- Added
ListEditorreusable component for editing string lists in settings. - Expanded
AppSettingswith full form-based editor for defaults, web search, context files, compaction, sandbox, retry, approval, and provider config. - Expanded
ServeConfigwith full form-based editor for features, API, cron, memory, security, agent, hooks, channels, and lobster mode settings. - Web UI: sessions table fixed columns with ellipsis layout.
- Web UI: skill_ref and workflow_lint tool call/result display.
- Web UI: simplified WeChat QR to open-in-new-tab instead of embed.
- Web UI:
resetSelectedModelToDefaulton session switch and settings save. - Web UI: workdir settings refresh after save, cleaner restrict logic.
- i18n: added zh/en strings for workflow and skill_ref tools.
- Added
-
Web UI Internationalization & Theme Support
- Added a complete i18n system for the Web UI with Chinese/English language switching.
- Added a preference controls panel (
PreferenceControls) for adjusting language and theme. - Replaced all hardcoded strings across views and components with translation keys.
- Added a CSS variable-driven theme system supporting Dark/Light theme switching.
-
Web UI Tool Calls & Plan Card Rendering
- The Web UI chat interface now renders tool calls, tool results, and plan cards.
- Tool calls are displayed as running/completed status chips; tool results are collapsible (summary shows first line, click to fetch full output on demand).
- Plan tool invocations render as a live-updating todo checklist.
- Backend added
/api/sessions/:id/tool-results/:callIdendpoint for lazy-loading full tool output. ListActiveSessionsnow also returns historical sessions so the Sessions page shows all persisted conversations.
-
Richer Tool Status Streaming in Serve Mode
- SSE streaming events now carry richer tool status information, enabling the frontend to display real-time tool execution progress.
- Tool status events include tool name, arguments, and execution results.
-
Debug Mode pprof Server
- Added
--debugflag to start a local pprof profiling server across all entry points (CLI, TUI, Serve, ACP, A2A).
- Added
-
Speedtest Command
- Added
vibecoding speedtestCLI subcommand for testing model response speed.
- Added
-
New StepFun Vendor Support
- Added
stepfunvendor with Base URLhttps://api.stepfun.com/step_plan/v1using OpenAI-compatible protocol. - Added
step-3.7-flashmodel with 256K context window and multimodal (text + image) input support.
- Added
-
Multimodal Image Input
- Serve mode now supports multimodal (image) input; images can be uploaded via API for conversations.
- Improved session persistence to correctly store multimodal messages.
-
Serve init-config Subcommand
- Added
mothx serve init-configsubcommand for initializing global and project-levelserve.jsonconfiguration.
- Added
-
TUI Input Queue On-Demand Start
- Input queue ticker now starts on demand and stops when idle, reducing unnecessary CPU usage.
-
TUI Backspace/Delete to Remove Auth Models
- Added Backspace/Delete shortcut in the auth dialog model list to delete a selected model entry.
- Action rows like
+ Add ModelandDoneare excluded from deletion.
-
Split-Paste Coalescing Configurable
- Split-paste event coalescing is now configurable via test parameters, facilitating unit test verification.
🔒 Security
-
Browse API Restriction
- Browse API is now restricted to
allowedWorkDirswhitelist directories, rejecting out-of-bounds access. - Auth requests without tokens are now rejected to prevent unauthorized access.
- Browse API is now restricted to
-
Code Scanning Fix
- Fixed a potentially unsafe quoting issue (Code Scanning Alert #3).
🔄 Refactors
-
Merged Gateway & Hermes into Unified Serve Mode
- Removed
internal/gatewayandinternal/hermespackages, merged into the unifiedinternal/serve/architecture. - Removed
gateway/hermessubcommands from CLI entry points. - Added
internal/serve/openaiapi(OpenAI-compatible API runtime),internal/serve/channels(message channel dispatcher),internal/serve/ws(WebSocket channel runtime). - Removed Hermes built-in terminal WebSocket client.
- Removed
-
WebUI Component Split
- Split monolithic
App.svelteinto separate components, views, and lib modules for improved maintainability.
- Split monolithic
📦 Dependencies
- Bumped
golang.org/x/imagefrom v0.36.0 to v0.41.0.