Commit Graph

191 Commits

Author SHA1 Message Date
Acbox 3ed89aeb1d fix(web): monoca overload 2026-03-01 02:48:52 +08:00
Acbox 0bcef0cae6 fix(web): lint 2026-03-01 02:40:58 +08:00
Acbox 8b98e7fba8 refactor(web): sidebar 2026-03-01 02:40:07 +08:00
Acbox Liu 0cdf822603 feat: token usage state (#153)
* feat: token usage state

* fix: typo
2026-03-01 02:19:07 +08:00
Acbox 443ede30b4 refactor(skills): import skill with pure markdown string 2026-02-28 23:07:44 +08:00
Acbox 21029f44c7 feat(web): improve MCP details page 2026-02-28 22:48:51 +08:00
Acbox e365e5545a feat: files preview 2026-02-28 21:45:30 +08:00
Acbox fab5ae6320 chore: update AGENTS.md 2026-02-28 21:13:55 +08:00
BBQ cc5f00355f 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>
2026-02-28 21:03:59 +08:00
Quincy 7d392a1143 fix: resolve multiple UI bugs (#147) 2026-02-28 20:32:25 +08:00
Menci 8fba05584c 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.
2026-02-28 20:32:12 +08:00
Acbox b47258b15e refactor(web): fix types, ui, error handling, unhealthy styles 2026-02-27 18:02:23 +08:00
BBQ bf0eeb0e80 feat(search): add 8 new search providers (#135)
* feat(search): add Sogou search provider

* fix(search): use new endpoint and API version for sogou

* feat(search): add Serper, SearXNG, Jina, Exa, Bocha, DuckDuckGo search providers

Add six new search provider integrations:
- Serper: Google search via Serper API
- SearXNG: Self-hosted meta search engine
- Jina: Jina AI search API
- Exa: Exa neural search API
- Bocha: Bocha AI web search
- DuckDuckGo: DuckDuckGo HTML search (no API key required)

Each provider includes backend implementation, config schema,
i18n entries, and Vue settings component.

* feat(search): add Yandex search provider

Add Yandex search provider with XML response parsing and
configurable search type (RU/TR/COM).

---------

Co-authored-by: Menci <mencici@msn.com>
2026-02-27 00:00:44 +08:00
斬風千雪 d4ad1597e3 fix(agent): force flush remaining text before call tools (#134) 2026-02-26 23:59:49 +08:00
Acbox Liu fe10abf3fc refactor: inbox (#137)
* refactor: inbox

* fix: migrations

* fix: migrations
2026-02-26 20:16:02 +08:00
BBQ d6aebf654f feat(devenv): add containerized development environment (#116)
* feat(devenv): add containerized development environment

Replace local-process dev workflow with a fully containerized stack
using docker compose. This enables consistent development across
machines without requiring local Go/Node toolchains or containerd.

- Add Dockerfile.server.dev with containerd + CNI networking support
- Add Dockerfile.web.dev for frontend dev server
- Add server-dev-entrypoint.sh for containerd lifecycle management
- Expand devenv/docker-compose.yml with server, agent, web, migrate
  and deps services with proper health checks and dependency ordering
- Update app.dev.toml to use container service names instead of localhost
- Refactor mise.toml dev tasks to drive docker compose workflow
- Support agent_gateway.server_addr in config package for inter-container
  communication

* feat(devenv): add hot-reload and registry mirror support

- Add air for Go server hot-reload in dev containers
- Fix agent_gateway host in dev config (0.0.0.0 -> agent)
- Add configurable registry mirror for China mainland users
- Unify MCP image refs via MCPConfig.ImageRef()

* feat(scripts): add China mainland mirror option to install script

Prompt users to opt-in to memoh.cn mirror during installation,
which applies docker-compose.cn.yml overlay and sets registry
in config.toml for MCP image pulls.
2026-02-26 17:32:19 +08:00
Menci 08f5130c66 feat(search): add Tavily search provider 2026-02-26 15:54:14 +08:00
Acbox Liu 2f38662d4d feat: heartbeat (#108)
* feat: heartbeat

* feat: independent heartbeat model
2026-02-25 16:32:52 +08:00
Ran d92993e56e release: v0.1.2 2026-02-24 23:39:52 +08:00
Ran 6f392cbb90 release: v0.1.1 2026-02-24 20:55:52 +08:00
Acbox bd28c624b9 release: v0.1.0 2026-02-24 03:47:07 +08:00
Ran 5e12b5a53f fix: ensure unifying on hardcoded /data mount path 2026-02-24 03:35:27 +08:00
MoeMagicMango 786959f038 feat(service): add OpenAI completions models output probe (#97) 2026-02-24 02:16:24 +08:00
Ran 65c4d6f793 feat(container): support for apple container 2026-02-23 22:40:46 +08:00
Ringo.Typowriter 29e76322cc feat(feishu): add webhook inbound mode, region support, and callback/attachment enhancements (#107) 2026-02-23 21:57:34 +08:00
Acbox 8590c53f3d feat(web): add sunagent, history, skills page 2026-02-23 15:49:28 +08:00
Acbox a440bf122b feat(search): add bing and google support 2026-02-23 15:41:47 +08:00
Acbox 7ada20967a release: v0.1.0-beta.7 2026-02-23 14:49:18 +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
Acbox 18535f97f2 feat: improve prompts 2026-02-23 14:18:41 +08:00
Ran efbf7be0da release: v0.1.0-beta.6 2026-02-23 06:29:08 +08:00
ShellWen 469626e009 feat(ui): add read-only styles to input component 2026-02-23 06:23:03 +08:00
ShellWen 4a6172e7f1 fix(ui): add select-none class to AvatarFallback component 2026-02-23 06:22:00 +08:00
ShellWen 3a4f463dcc fix(web): unwrap breadcrumb value for page title by using unref 2026-02-23 06:19:18 +08:00
ShellWen cad684355e fix(web): standardize padding across various pages 2026-02-23 06:19:18 +08:00
ShellWen 8aabcf486a fix(web): access breadcrumb value correctly in currentPageTitle 2026-02-23 06:19:18 +08:00
ShellWen 9bfa9c1bef fix(web,ui): adjust chat area height for better responsiveness 2026-02-23 06:19:18 +08:00
Acbox da9d64e508 fix(agent): tell agent that when to use tools and when to respond directly 2026-02-23 04:38:13 +08:00
ShellWen | 颉文 c7a2bec709 fix(ui): add cursor pointer style to button variants (#101) 2026-02-23 03:58:38 +08:00
Acbox b560e17723 fix(typo): mesasage -> message 2026-02-23 00:34:17 +08:00
Acbox ac929f9f44 feat: add message id in user header 2026-02-23 00:06:15 +08:00
Acbox c17d56c9d1 feat: improve system prompts 2026-02-22 23:40:48 +08:00
ringotypowriter 85831732d3 Merge remote-tracking branch 'origin/main' into fix/provider-scoped-model-id-resolution
# Conflicts:
#	packages/web/src/components/create-model/index.vue
#	packages/web/src/pages/bots/components/model-select.vue
2026-02-22 20:01:27 +08:00
AlexMa233 dc5604b8c4 refactor(web): modularize chat flow, unify dialog patterns, and improve accessibility (#88)
* fix(a11y): improve landmark semantics and control labeling across web UI

* refactor(web): simplify frontend patterns and reduce duplication

Introduce shared composables and reusable UI shells to keep pages smaller while preserving behavior across settings, bots, selectors, and realtime streaming.

* style(web): apply lint autofix formatting

* refactor(web): modularize chat helpers and split settings sections

This reduces frontend maintenance risk by moving shared logic into focused modules/components while keeping existing behavior and import paths stable.

* refactor(web): remove legacy chat-list and unify dialog submit flow

Drop the unused legacy chat-list stack to reduce maintenance overhead, and centralize dialog mutation error handling so submit behavior stays consistent across create/edit dialogs.
2026-02-22 17:07:13 +08:00
ringotypowriter 45e7362b44 Merge branch 'main' into fix/provider-scoped-model-id-resolution 2026-02-22 17:00:51 +08:00
Acbox Liu ee0aa319e2 feat: add restful apis of container file system (#92)
* feat: add restful apis of container file system

* feat: add fs tools in agent
2026-02-22 16:42:30 +08:00
Acbox 928b0c0ee5 refactor: subagent usage and related tools 2026-02-22 16:35:50 +08:00
ringotypowriter 8cd7c4aa86 Merge branch 'main' into fix/provider-scoped-model-id-resolution 2026-02-22 12:47:37 +08:00
Acbox 3669027c95 fix(typo): ./packages/agent/README.md 2026-02-22 02:08:04 +08:00
Acbox Liu e6d70b523e refactor: divide agent logic and gateway into different package (#90)
* feat: add @memoh/agent

* chore: use @memoh/agent in @memoh-gateway
2026-02-22 02:06:47 +08:00