- add BotCommandInfo and CommandRegistrar interface for platform abstraction
- implement GetAllCommands to collect builtin/custom commands and skills
- add i18n descriptions for all 30 builtin commands (en/zh/zh-TW/ja/es)
- implement RegisterCommands for Telegram setMyCommands API integration
- Add AddToBind() method to incrementally add projects to binding
- Add RemoveFromBind() method to remove specific project from binding
- Update /bind command to support multiple projects:
- /bind <project> - add project to binding
- /bind -<project> - remove specific project
- /bind remove - clear all bindings
- Add debug logging for telegram group message filtering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add support for system-level systemd (/etc/systemd/system/) when running as root
- Add requireInstalled check before start/stop/restart operations
- Improve systemd detection and error messages for WSL2, containers, SSH
- Add isWSL2() helper for better platform detection
- Update daemon help text to clarify Linux root vs non-root behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add new 'config-example' command that prints annotated config template.
Embed config.example.toml file using go:embed directive.
Improve CLI usage output formatting and documentation.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add logic to delete stale preview messages when stream preview is degraded.
Implement PreviewCleaner interface for Telegram platform and add test coverage.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add patchSessionSource function to rewrite session_meta lines in Codex JSONL transcripts, changing source from "exec" to "cli" and originator to "codex_cli_rs" for CLI visibility. Includes tests for patching behavior and idempotency.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add ability to define custom slash commands that execute shell commands directly:
- Extend CommandConfig with Exec and WorkDir fields
- Add cmdCommandsAddExec handler for exec commands
- Implement executeShellCommand with timeout and output handling
- Add work_dir support for exec commands
- Update documentation and i18n messages
- Add tests and error handling
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add support for configuring agent idle timeout duration via config file
(idle_timeout_mins). Defaults to 2 hours (changed from previous fixed 30 mins).
Timeout can be disabled by setting to 0.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Adjust eventIdleTimeout constant from 5 to 30 minutes to better handle agent response scenarios. Also includes minor code formatting cleanup in Engine struct.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
- Code blocks/tables → card (schema 2.0 markdown)
- Many \n\n paragraphs (≥4, e.g. help, status) → post rich-text (preserves blank lines)
- Other markdown → post md tag (best native rendering)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add quiet mode status to /status command with i18n support
- Fix Feishu help command line breaks (use buildPostJSON instead of md tag)
- Improve tool message formatting (code block for long content)
- Strip XML tags from session summary display
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add disabled_platforms config option to disable streaming preview
for specific platforms (e.g. feishu) where it causes formatting issues.
- Add DisabledPlatforms field to StreamPreviewConfig and StreamPreviewCfg
- Check platform name against disabled list in canPreview()
- Allows pure text messages to use correct message type instead of cards
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Optimize the splitMessage function to handle newline boundaries more intelligently by checking if the boundary is in the second half of the chunk. Also simplifies the chunking logic and improves variable scoping.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Change engine startup to continue with partial failures instead of exiting.
Handle .old binary paths correctly during restarts. Update logging to reflect
partial startup status and improve restart reliability after updates.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Implement new `/search` command that allows searching sessions by:
- Session name or summary (case-insensitive)
- Session ID prefix
Adds internationalization support and usage documentation
Includes error handling and formatted results output
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
The cmdList function now accepts page arguments and displays paginated results. Added new i18n messages for paginated titles and hints. Implemented page size constant and page calculation logic.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Added eventIdleTimeout constant and idle timer logic to detect and handle stuck agent sessions that stop emitting events. The timer resets on each new event and terminates the session if no events are received within 5 minutes.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Remove intermediate maxChars throttling since we now always attempt final update regardless of length. Add cleanup when final update fails by attempting to delete stale preview message.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Added StartTime tracking and IsOldMessage check to prevent processing of messages from before process startup. Implemented checks across all platforms with platform-specific timestamp handling. Includes tests for new functionality.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add platform-specific restart handling with restart_unix.go and restart_windows.go. Enhance updater to support Gitee mirrors for Chinese users and automatically restart after updates. Improve version display in restart notifications and streamline update messages.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add zip archive extraction functionality to support auto-updates on Windows systems.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
This commit introduces a new relay system for bot-to-bot communication, including:
- New `relay` command with send/bind functionality
- RelayManager for coordinating messages between engines
- API endpoints for relay operations
- Interactive `/bind` command for chat group binding
- Session handling and message forwarding
- CLI documentation and help messages
- Internationalization support for relay messages
- Stream preview improvements for relay messages
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
- Improved `/switch` command to support session names and better matching logic
- Refactored markdown-to-HTML conversion with proper tag nesting and quote escaping
- Added detailed logging for streaming preview operations
- Fixed HTML tag validation in markdown tests
- Updated Telegram platform to handle HTML parsing errors gracefully
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add handler to ignore reaction deletion events similar to existing reaction creation handling.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Typing Indicator:
- Add TypingIndicator interface for "processing" feedback
- Discord: send typing status every 8 seconds
- Telegram: send chat typing action every 5 seconds
- Feishu: add emoji reaction, remove when done
Markdown HTML Escaping:
- Fix HTML special chars (<, >, &) escaping in all contexts
- Use placeholder strategy: extract code/links, escape all, restore
Streaming Preview:
- Remove trailing cursor character from preview messages
Feishu Card:
- Add wide_screen_mode config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Streaming Preview:
- Add freeze() method to pause preview on permission prompts
- Improve finish() logic for better edge case handling
Markdown Rendering:
- Telegram: switch from Markdown to HTML mode with MarkdownToTelegramHTML
- Discord: use code-fence-aware message splitting
- Feishu: dual rendering strategy (card for code/tables, post for text)
- Feishu: support links, italic, strikethrough in inline parsing
- Feishu: use Patch API for card message updates
i18n:
- Use code blocks for permission prompt content
- Simplify button labels (remove emoji)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Streaming Preview:
- Real-time message preview during agent response (like "typing" indicator)
- Supported on Telegram, Discord, and Feishu
- Configurable interval, min delta chars, and max preview length
Rate Limiting:
- Per-session sliding-window rate limiter
- Prevents users from flooding the bot with messages
- Configurable max messages and window size
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unnecessary fmt.Sprintf wrapper around i18n.T() calls
- Add comprehensive unit tests for core module components
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add proper platform shutdown sequence before engine cleanup and check for canceled context in message processing and session creation to prevent operations during shutdown. Also reordered error collection for logical shutdown sequence.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add 'name' command and improve descriptions for session management.
Move 'delete' command to group with other session commands.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Implement disabled commands functionality for projects, including config parsing, engine integration, and i18n support. Allows disabling specific commands per-project via config.
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add banned words configuration and filtering logic to block messages containing prohibited content. Includes:
- Config file support for banned_words list
- Engine methods to set and check banned words
- Case-insensitive matching during message processing
- Localization support for blocked message response
- Documentation updates in config example
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Implement session deletion functionality across all agent implementations (claudecode, codex, cursor, gemini)
Add new /delete command with session lookup by ID/prefix
Add i18n support for delete-related messages
Update command help texts to include new delete command
Add SessionDeleter interface for agents supporting deletion
Implement core deletion logic with active session protection
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>
Add i18n support for session creation messages and ensure pending session names are properly set. Includes:
- Added MsgNewSessionCreated and MsgNewSessionCreatedName i18n messages
- Modified cmdNew to use i18n messages and handle empty names
- Set session name from pendingName in processInteractiveEvents if valid
generated by llmgit
Co-Authored-By: Claude <noreply@anthropic.com>