Skip to content

v1.3.140

Choose a tag to compare

@topcheer topcheer released this 09 Jul 05:27
· 3638 commits to main since this release

v1.3.140 — July 9, 2026

Major Features

IM Session-Scoped Binding Ownership

  • New ChannelBinding.LastSessionID field enables per-session IM adapter ownership
  • Multiple instances in the same workspace can now each own different adapters independently
  • Startup auto-claims unclaimed bindings for current session, mutes foreign-owned ones
  • Mute/Disable do NOT release session ownership (only Unbind does)
  • StartUnstartedOwnedAdapters launches adapters after session ownership resolves
  • All three platforms (TUI, Daemon, Desktop) defer RegisterInstance to after session ID is available

LAN Chat UDP Transport

  • Three-layer fallback: TCP → UDP unicast (ACK + retry + gzip + fragmentation) → UDP multicast
  • Supports restricted networks where TCP inbound is blocked but UDP is allowed
  • Multicast mode for environments where even UDP unicast is blocked
  • Fragment reassembly with 5s timeout, ACK-based retry for unicast
  • Participant.UDPCapable for capability negotiation

HarmonyOS (OpenHarmony) Mobile Support

  • Generated ohos project directory with conditional imports for wakelock and QR scanner
  • pubspec.ohos.yaml with OpenHarmony-TPC adapted plugin dependencies
  • 90% of business logic reused (pure Dart WebSocket + AES + relay protocol)

Bug Fixes

Desktop

  • "model must not be empty" on settings save: UpdateConfig no longer overwrites Model with empty string; SetEndpointLimits uses SaveScoped to skip full Validate
  • Sub-agent cancellation on Cancel/Close: Desktop Cancel() and Close() now cascade to sub-agents and swarm teammates, matching TUI behavior
  • Auto-refresh models on settings load: Settings page auto-fetches models from API (DiscoverModels) on load and endpoint switch

MCP

  • 403 triggers OAuth DCR: HTTP MCP servers returning 403 (not just 401) now trigger OAuth discovery. On success, API key header is replaced with OAuth Bearer token permanently
  • SSE Notification before Response: Parser skips non-Response SSE events; also falls back to SSE extraction for non-SSE content types
  • Windows console window suppression: Stdio MCP processes on Windows use CREATE_NO_WINDOW flag

TUI

  • Provider panel endpoint-scoped refresh: Model discovery only refreshes current endpoint, not all vendor endpoints. AI Gateway vendors skip vendor-level API key fallback

IM Adapters

  • WebSocket read deadlines and heartbeat failure detection for DingTalk, Discord, QQ, Slack, Mattermost, WeCom
  • Nostr dead connection watchdog timer
  • IRC and Twitch keepalive goroutines use safego.Go for panic recovery
  • Send timeout increased from 10s to 30s for multi-chunk messages

Desktop UX (from teammate)

  • Right-click context menu on user and assistant messages (Copy, Edit, Regenerate)
  • Esc-to-cancel-generation
  • Tool-call count indicator in chat header
  • Auto-expand error tool results by default
  • Copy button on reasoning/thinking blocks
  • Unified LAN Chat nav button styling
  • StatusBar accessibility (aria-labels, hover feedback)
  • Session preview title tooltip
  • GFM task list CSS + table zebra striping
  • Code block left-border accent
  • prefers-reduced-motion support for inline animations
  • ARIA dialog roles, aria-modal, aria-label on all 5 modal dialogs
  • tabIndex={-1} on all dialogs for focus management
  • ARIA live region on LAN Chat message list
  • aria-labels on FileBrowser, TeamBoard, DebugConsole, IMManagement, TopDragBar buttons
  • TeamBoard i18n (en + zh)
  • Context menu auto-close on scroll/resize
  • NavRail tooltip i18n fix

Documentation

  • GGCODE.md updated with all new features
  • Fixed stale Feishu comment referencing non-existent function