Acbox
ac8a935545
refactor: remove bot type
2026-03-15 00:42:09 +08:00
BBQ
839e63acda
feat(access): add guest chat ACL ( #235 )
2026-03-14 17:15:41 +08:00
晨苒
627b673a5c
refactor: multi-provider memory adapters with scan-based builtin ( #227 )
...
* refactor: restructure memory into multi-provider adapters, remove manifest.json dependency
- Rename internal/memory/provider to internal/memory/adapters with per-provider subdirectories (builtin, mem0, openviking)
- Replace manifest.json-based delete/update with scan-based index from daily files
- Add mem0 and openviking provider adapters with HTTP client, chat hooks, MCP tools, and CRUD
- Wire provider lifecycle into registry (auto-instantiate on create, evict on update/delete)
- Split docker-compose into base stack + optional overlays (qdrant, browser, mem0, openviking)
- Update admin UI to support dynamic provider config schema rendering
* chore(lint): fix all golangci-lint issues for clean CI
* refactor(docker): replace compose overlay files with profiles
* feat(memory): add built-in memory multi modes
* fix(ci): golangci lint
* feat(memory): edit built-in memory sparse design
2026-03-14 06:04:13 +08:00
Fodesu
b46e494d3a
feat(tts): introduce TTS system ( #195 )
2026-03-13 02:49:52 +08:00
Acbox Liu
bafd327b6b
feat: agent browser ( #200 )
...
* feat: agent browser
* chore: complete docker and action config
* feat: more actions
* feat: browser tab switch
* fix: browser build
* fix: lint
* fix: migrations
2026-03-07 15:06:00 +08:00
BBQ
3feb03aca7
ci: add go lint and race test workflow ( #187 )
2026-03-05 11:25:33 +08:00
Acbox Liu
ea719f7ca7
refactor: memory provider ( #140 )
...
* refactor: memory provider
* fix: migrations
* feat: divide collection from different built-in memory
* feat: add `MEMORY.md` and `PROFILES.md`
* use .env for docker compose. fix #142 (#143 )
* feat(web): add brand icons for search providers (#144 )
Add custom FontAwesome icon definitions for all 9 search providers:
- Yandex: uses existing faYandex from FA free brands
- Tavily, Jina, Exa, Bocha, Serper: custom icons from brand SVGs
- DuckDuckGo, SearXNG, Sogou: custom icons from Simple Icons
Icons are registered with a custom 'fac' prefix and rendered as
monochrome (currentColor) via FontAwesome's standard rendering.
* fix: resolve multiple UI bugs (#147 )
* feat: add email service with multi-adapter support (#146 )
* feat: add email service with multi-adapter support
Implement a full-stack email service with global provider management,
per-bot bindings with granular read/write permissions, outbox audit
storage, and MCP tool integration for direct mailbox access.
Backend:
- Email providers: CRUD with dynamic config schema (generic SMTP/IMAP, Mailgun)
- Generic adapter: go-mail (SMTP) + go-imap/v2 (IMAP IDLE real-time push via
UnilateralDataHandler + UID-based tracking + periodic check fallback)
- Mailgun adapter: mailgun-go/v5 with dual inbound mode (webhook + poll)
- Bot email bindings: per-bot provider binding with independent r/w permissions
- Outbox: outbound email audit log with status tracking
- Trigger: inbound emails push notification to bot_inbox (from/subject only,
LLM reads full content on demand via MCP tools)
- MailboxReader interface: on-demand IMAP queries for listing/reading emails
- MCP tools: email_accounts, email_send, email_list (paginated mailbox),
email_read (by UID) — all with multi-binding and provider_id selection
- Webhook: /email/mailgun/webhook/:config_id (JWT-skipped, signature-verified)
- DB migration: 0019_add_email (email_providers, bot_email_bindings, email_outbox)
Frontend:
- Email Providers page: /email-providers with MasterDetailSidebarLayout
- Dynamic config form rendered from ordered provider meta schema with i18n keys
- Bot detail: Email tab with bindings management + outbox audit table
- Sidebar navigation entry
- Full i18n support (en + zh)
- Auto-generated SDK from Swagger
Closes #17
* feat(email): trigger bot conversation immediately on inbound email
Instead of only storing an inbox item and waiting for the next chat,
the email trigger now proactively invokes the conversation resolver
so the bot processes new emails right away — aligned with the
schedule/heartbeat trigger pattern.
* fix: lint
---------
Co-authored-by: Acbox <acbox0328@gmail.com >
* chore: update AGENTS.md
* feat: files preview
* feat(web): improve MCP details page
* refactor(skills): import skill with pure markdown string
* merge main into refactor/memory
* fix: migration
* refactor: temp delete qdrant and bm25 index
* fix: clean merge code
* fix: update memory handler
---------
Co-authored-by: Leohearts <leohearts@leohearts.com >
Co-authored-by: Menci <mencici@msn.com >
Co-authored-by: Quincy <69751197+dqygit@users.noreply.github.com >
Co-authored-by: BBQ <35603386+HoneyBBQ@users.noreply.github.com >
Co-authored-by: Ran <16112591+chen-ran@users.noreply.github.com >
2026-03-03 15:33:50 +08:00
Acbox Liu
2f38662d4d
feat: heartbeat ( #108 )
...
* feat: heartbeat
* feat: independent heartbeat model
2026-02-25 16:32:52 +08:00
Acbox Liu
17cd077f34
feat: add thinking support ( #100 )
...
* feat: add thinking support
* feat: improve thinking block render in web and filter thinking content in channels
* fix: migrate
2026-02-23 14:41:27 +08:00
ringotypowriter
8cd7c4aa86
Merge branch 'main' into fix/provider-scoped-model-id-resolution
2026-02-22 12:47:37 +08:00
Acbox Liu
c591af14b0
feat: bot inbox ( #77 )
...
* feat: bot inbox
* feat: unified header
* fix: missing tool_call usage
* feat: add group name in header
2026-02-22 01:27:24 +08:00
ringotypowriter
50bdbd519c
fix(models,settings,conversation): scope model_id uniqueness per
...
provider and harden model reference resolution
2026-02-21 22:31:32 +08:00
Acbox
77e9f585a1
feat: max context tokens
2026-02-18 17:20:22 +08:00
BBQ
75904022c0
fix(settings): search_provider_id NULL scan failure
...
The ::text cast on search_providers.id prevented sqlc from inferring
nullability via LEFT JOIN, generating a non-nullable string field that
crashes when the bot has no search provider bound.
2026-02-16 02:11:16 +08:00
Acbox
961ecbb96d
feat: search provider
2026-02-16 01:22:15 +08:00
BBQ
85251a2905
refactor(core): codebase quality cleanup
...
- Remove user-level model settings (chat_model_id, memory_model_id,
embedding_model_id, max_context_load_time, language) from users table
- Merge migration 0002 into 0001, remove compatibility migrations
- Delete dead conversation/resolver.go (1177 lines, only flow/resolver.go used)
- Remove type aliases (Chat=Conversation, types_alias.go)
- Fix SQL: remove AND false stub, fix UpdateChatTitle model_id,
reset model IDs in DeleteSettings, add preauth expiry filter,
add ListMessages limit, remove 10 dead queries
- Extract shared handler helpers (RequireChannelIdentityID, AuthorizeBotAccess)
- Rename internal/router to internal/channel/inbound
- Fix identity confusion: remove UserID->ChannelIdentityID fallbacks
- Fix all _ = var patterns with proper error logging
- Fix error propagation: storeMessages, rescheduleJob, botContainerID
- Fix naming: ModelId->ModelID, active->is_active, Duration semantic fix
- Remove dead code: mcpService, ReplyTarget, callMCPServer, sshShellQuote,
buildSessionMetadata, ChatRequest.Language, TriggerPayload.ChatID
- Fix code quality: errors.Is(), remove goto, CreateHuman deprecated
- Remove Enable model endpoint and user-level settings CLI commands
- Regenerate sqlc, swagger, SDK
2026-02-12 23:50:48 +08:00
BBQ
ca5c6a1866
refactor(core): restructure conversation, channel and message domains
...
- Rename chat module to conversation with flow-based architecture
- Move channelidentities into channel/identities subpackage
- Add channel/route for routing logic
- Add message service with event hub
- Add MCP providers: container, directory, schedule
- Refactor Feishu/Telegram adapters with directory and stream support
- Add platform management page and channel badges in web UI
- Update database schema for conversations, messages and channel routes
- Add @memoh/shared package for cross-package type definitions
2026-02-12 15:34:40 +08:00
BBQ
06e8619a37
refactor(core): migrate channel identity and binding across app
...
Align channel identity and bind flow across backend and app-facing layers, including generated swagger artifacts and package lock updates while excluding docs content changes.
2026-02-11 14:51:58 +08:00
Acbox
344b617423
fix: use bot model configs first
2026-02-07 20:45:26 +08:00
BBQ
6aebbe9279
feat: refactor User/Bot architecture and implement multi-channel gateway
...
Major changes:
1. Core Architecture: Decoupled Bots from Users. Bots now have independent lifecycles, member management (bot_members), and dedicated configurations.
2. Channel Gateway:
- Implemented a unified Channel Manager supporting Feishu, Telegram, and Local (Web/CLI) adapters.
- Added message processing pipeline to normalize interactions across different platforms.
- Introduced a Contact system for identity binding and guest access policies.
3. Database & Tooling:
- Consolidated all migrations into 0001_init with updated schema for bots, channels, and contacts.
- Optimized sqlc.yaml to automatically track the migrations directory.
4. Agent Enhancements:
- Introduced ToolContext to provide Agents with platform-aware execution capabilities (e.g., messaging, contact lookups).
- Added tool logging and fallback mechanisms for toolChoice execution.
5. UI & Docs: Updated frontend stores, UI components, and Swagger documentation to align with the new Bot-centric model.
2026-02-04 23:49:50 +08:00
Acbox
c731e0ca1d
feat: move default model into user settings
2026-02-02 01:40:54 +08:00
BBQ
46d2968e2c
feat: refactor logging system to slog with DI and component tagging
2026-02-01 15:23:57 +08:00
Acbox
28f6d87017
fix: sqlc api
2026-01-29 16:10:09 +08:00
Acbox
11551b72ab
feat: user settings & history
2026-01-28 15:57:39 +08:00