Tags: taminhtoan2601/goclaw
Tags
fix(ui): support CLI providers without API key in setup wizard (nextl… …evelbuilder#81) - Recognize claude_cli and chatgpt_oauth as valid providers without API keys - Skip API key validation and show CLI-specific UI when provider is claude_cli - Clear API key state when switching provider type - Update bootstrap status check to handle keyless provider types Co-authored-by: Nam Nguyen Ngoc <namnn.0911@gmail.com>
feat(ui): add image lightbox and auto-scroll on send - Replace target=_blank image links with in-page lightbox modal (click image to view full-size, click backdrop or Escape to close) - Force scroll-to-bottom when user sends a message, regardless of current scroll position
feat(ui): add Realtime Events tab to team detail with structured even… …t cards Add a new "Realtime Events" tab in team detail page that displays WS events in real-time via a centralized Zustand store + wildcard listener. Includes structured card components for delegation, task, message, agent, and CRUD events with agent name resolution from TanStack Query cache. Each card is clickable to show raw JSON with syntax highlighting and copy support. Also removes byte-based task truncation in delegation event payloads that was corrupting multi-byte UTF-8 characters — now sends full task content. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(delegation): clear senderID in sync delegation context Sync delegations inherited the caller's senderID, causing the delegate agent to check group writer permissions against its own (empty) writer list instead of bypassing like async delegations do. This resulted in "permission denied: only file writers can modify files" errors when delegate agents tried to write files. Fix: clear senderID from the sync delegation context so it behaves consistently with async delegations (context.Background has no senderID). All 4 downstream usages of SenderIDFromContext are group-writer-related and correctly bypass when senderID is empty. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: validate provider API keys during bootstrap using auth-required … …endpoints (nextlevelbuilder#22) * fix(channels): start outbound dispatcher before channel check StartAll() returned early when no channels existed at boot, skipping the dispatchOutbound goroutine. Channels loaded later via Reload() assumed the dispatcher was running, causing outbound messages (agent responses) to never reach Telegram. Move dispatcher startup before the empty-channel early return so dynamically loaded channels always have a running consumer. * feat(ui): add LLM provider warning on overview page and ignore plans dir Show alert when no providers configured or all disabled, linking to provider settings. Add plans/ to .gitignore. * feat(onboard): add provider connectivity verification and placeholder seeding - Add onboard_verify.go: verify API keys via POST to chat/completions endpoint (401/403 = fatal, 400/422 = key valid, 5xx = warn) - Verify all configured providers before seeding in auto-onboard - Seed disabled placeholder providers (OpenRouter, Synthetic, AliCloud API/Sub) for UI discoverability after managed data seeding * refactor: reuse provider layer for bootstrap key verification - Replace raw HTTP requests with provider.Chat() calls, matching the existing verify pattern in internal/http/provider_verify.go - Respect config base URL overrides (GOCLAW_ANTHROPIC_BASE_URL, etc.) - Only block bootstrap if the primary provider key is invalid; secondary provider failures are logged as warnings - Add friendlyProviderError for human-readable error extraction Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: ntduc <ntduc@cpp.ai.vn> Co-authored-by: viettranx <viettranx@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
refactor: split large Go files (>350 lines) into smaller same-package… … files Pure file reorganization — no logic changes, no renames, no refactoring. Functions moved to new files in the same package for maintainability. Split 13 files across 6 packages into 25 new files: - store/pg: teams.go → teams_tasks/delegation/messaging.go; mcp_servers.go → mcp_servers_access.go - tools: delegate.go → delegate_state/policy/events.go; subagent.go → subagent_exec/config.go; web_search.go → web_search_brave/ddg.go; web_fetch.go → web_fetch_convert.go; sessions.go → sessions_history/send.go - providers: anthropic.go → anthropic_stream/request.go - mcp: manager.go → manager_connect/tools/util.go - channels/feishu: bot.go → bot_parse/policy.go; larkclient.go → larkclient_messaging.go - cmd: gateway_consumer.go → gateway_cron.go; agent_chat.go → agent_chat_client/standalone.go Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: Strip bot self-mention in Discord responses and remove AGENTS.md… … from summoning modal Discord: include sender's mention format in [From:] annotation so models use the correct user ID, and strip the bot's own @mention from message content to prevent the model from echoing it back. Summoning modal: remove AGENTS.md from progress list since backend only generates SOUL.md and IDENTITY.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
build: add dynamic version injection via ldflags and Makefile - Add cmd.Version variable set at build time via -ldflags - Fix Dockerfile ldflags path to use cmd.Version instead of main.version - Add Makefile with auto-detection from git tags (git describe) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>