Commit Graph

612 Commits

Author SHA1 Message Date
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
Leohearts cf7d578005 use .env for docker compose. fix #142 (#143) 2026-02-27 19:06:59 +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 dfcfc4aff4 chore(docs): add deepwiki badge 2026-02-26 23:45:48 +08:00
BBQ f68b675efd fix(containerd): normalize image references for containerd compatibility (#138)
Containerd does not auto-prepend "docker.io/" to short Docker Hub names
like "memohai/mcp:latest", causing it to treat "memohai" as a registry
host and fail with EOF. Add NormalizeImageRef() to ensure all image
references are fully qualified before being passed to containerd.
2026-02-26 20:22:36 +08:00
BBQ cedac8dbf6 chore: require config.toml for deployment, update docs (#139)
- docker-compose.yml now defaults to ./config.toml instead of
  conf/app.docker.toml, enforcing explicit configuration for
  production deployments (dev environment still uses conf/ directly)
- Update DEPLOYMENT.md and docs with clear instructions to copy
  config template before starting
- Update config-toml.md: add registry/cni fields, remove obsolete
  [brave] section (search providers are now managed via web UI),
  fix default values
- Add China mainland mirror documentation
2026-02-26 20:20:29 +08:00
Acbox Liu fe10abf3fc refactor: inbox (#137)
* refactor: inbox

* fix: migrations

* fix: migrations
2026-02-26 20:16:02 +08:00
BBQ d2878d841b fix(containerd): use image RootFS for snapshot parent chain ID (#132)
The previous snapshotParentFromLayers manually decompressed layer
blobs to compute diffIDs, which could diverge from the IDs that
containerd's Unpack uses (e.g. gzip vs zstd). Use image.RootFS()
instead — the canonical source containerd itself relies on.
2026-02-26 19:55:46 +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
Ringo.Typowriter 19ab2fef3a feat(tool): paginated file read with safety limits for container (#119)
* feat(tool): paginated file read with safety limits for container
provider

* fix(tool): harden container read pagination and binary safety
2026-02-26 16:17:12 +08:00
Menci ed90c63888 refactor(search): improve HTTP error reporting with status code and response detail 2026-02-26 15:54:14 +08:00
Menci 08f5130c66 feat(search): add Tavily search provider 2026-02-26 15:54:14 +08:00
Fodesu 989b3e9c93 docs: move IPA to docs 2026-02-26 12:27:27 +08:00
Fodesu 3f73e0036b chore(README_CN) add IPA to header 2026-02-26 12:27:27 +08:00
Fodesu dc00d28dfd add IPA to header 2026-02-26 12:27:27 +08:00
Ran 03164c698c fix(scripts): upgrade via docker images instead of git tags 2026-02-25 18:28:38 +08:00
Acbox e2678ff0a1 chore(docs): change install scripts to short domain 2026-02-25 16:32:52 +08:00
Acbox Liu 2f38662d4d feat: heartbeat (#108)
* feat: heartbeat

* feat: independent heartbeat model
2026-02-25 16:32:52 +08:00
Ran a9680587c6 fix: change docker/docker-compose.yml to override 2026-02-25 16:32:52 +08:00
晨苒 2f301ff5a1 Update internal/auth/jwt_test.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 16:32:52 +08:00
晨苒 4d1ca633ba Update agent/src/index.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 16:32:52 +08:00
Ran 52d4aee104 feat(auth): implement JWT token refresh mechanism 2026-02-25 16:32:52 +08:00
Fodesu 5aefccd7cc feat: support discord attacchment file, assetService 2026-02-25 16:30:43 +08:00
Fodesu 87a4be7439 fix: discord channel stream ignore Reasoning content 2026-02-25 16:29:57 +08:00
Ran 2b75d955e3 fix(script): update install.sh 2026-02-25 16:23:28 +08:00
Ran d92993e56e release: v0.1.2 v0.1.2 2026-02-24 23:39:52 +08:00
Ran ab3746fb27 fix(release): restore parallel asset publishing flow 2026-02-24 23:28:32 +08:00
Ran 4d167929c7 fix(release): publish assets in single serial step
Avoid race conditions during release uploads by moving asset publication out of matrix jobs and into one dedicated job.

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.1.1
2026-02-24 22:57:46 +08:00
Ran 30fe3edc39 fix(release): switch to agent-bin and gzip-only embedded web 2026-02-24 22:29:15 +08:00
Ran 6f392cbb90 release: v0.1.1 2026-02-24 20:55:52 +08:00
Ran 625d1bbe04 fix(memoh): CI asset embedding 2026-02-24 20:49:48 +08:00
Ran ffda558d24 feat(memoh): unify embedded runtime serving and release binaries 2026-02-24 19:39:01 +08:00
Ran d6914f99ab Merge branch 'fix-issue-#78-bug' into v0.1 2026-02-24 17:05:40 +08:00
斬風千雪 a5b11dddc2 fix(mcp): adapt tool list checker to underscore name format (#113)
* fix(mcp): adapt tool list checker to underscore name format

---------

Co-authored-by: Ran <16112591+chen-ran@users.noreply.github.com>
2026-02-24 17:00:41 +08:00
Ran eeef8a46c2 chore(ci): update github action 2026-02-24 16:58:04 +08:00
晨苒 3e3379a869 Update agent/src/index.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-24 16:47:58 +08:00
晨苒 579bf45fc2 Update internal/auth/jwt_test.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-24 16:47:58 +08:00
晨苒 54b337e391 Update agent/src/index.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-24 16:47:58 +08:00
晨苒 8bbdb2b022 Update agent/src/index.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-24 16:47:58 +08:00
Ran 0c6a905317 feat(auth): implement JWT token refresh mechanism 2026-02-24 16:47:58 +08:00
Ran 4d668b177a chore: update docker badge 2026-02-24 06:03:26 +08:00
Ran d5a861c723 chore(ci): optimize docker builds with native arm64 runners 2026-02-24 05:55:38 +08:00
Acbox bd28c624b9 release: v0.1.0 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
Acbox 6cb80d30be docs: remove documentation about cli 2026-02-24 03:18:37 +08:00
MoeMagicMango 786959f038 feat(service): add OpenAI completions models output probe (#97) 2026-02-24 02:16:24 +08:00