Files
Memoh/conf/app.example.toml
Acbox Liu faaf13a0e9 feat: add Supermarket integration (MCP & Skill marketplace) (#309)
* feat: add Supermarket integration (MCP & Skill marketplace)

Backend:
- Add [supermarket] config section with base_url (default: supermarket.memoh.ai)
- Add SupermarketHandler with proxy endpoints for MCPs, Skills, and Tags
- Add install endpoints: POST /bots/:id/supermarket/install-mcp (creates MCP
  connection with env vars) and install-skill (downloads tar.gz, extracts to
  container via gRPC)
- Register handler in FX wiring, generate Swagger docs and TypeScript SDK

Frontend:
- Add /settings/supermarket route with Store icon in sidebar
- Create supermarket page with search, tag filtering, MCP and Skill sections
- Add MCP/Skill card components with tag badges and install buttons
- Add install dialogs: MCP (bot selector + env var form), Skill (bot selector)
- Add i18n entries for en.json and zh.json

* fix: improve supermarket install UX

- Create BotSelect component with avatar + name using UI Select
- Replace NativeSelect in install dialogs and usage page with BotSelect
- Change MCP install flow: navigate to bot detail MCP tab with pre-filled
  draft instead of direct install, letting users review before saving
- Move Supermarket sidebar entry between Browser and Usage

* web: remove supermarket page top tag selector bar

Drop the horizontal tag chips and getSupermarketTags fetch; keep
search and tag filter via card tag clicks with clearable badge.

* web: add homepage link to supermarket MCP and Skill cards

Show an external-link icon next to the card title when homepage is
available, opening in a new tab on click.
2026-04-03 01:17:31 +08:00

65 lines
1.1 KiB
TOML

# Memoh configuration template
# Copy to config.toml and adjust values for your environment.
# For local development, use: cp devenv/app.dev.toml config.toml
[log]
level = "info"
format = "text"
[server]
addr = ":8080"
[admin]
username = "admin"
password = "admin123"
email = "admin@memoh.local"
[auth]
jwt_secret = "CHANGE-ME-TO-A-RANDOM-SECRET"
jwt_expires_in = "168h"
timezone = "UTC"
[containerd]
socket_path = "/run/containerd/containerd.sock"
namespace = "default"
[workspace]
# registry = "memoh.cn" # Uncomment for China mainland mirror
default_image = "debian:bookworm-slim"
snapshotter = "overlayfs"
data_root = "data"
cni_bin_dir = "/opt/cni/bin"
cni_conf_dir = "/etc/cni/net.d"
[postgres]
host = "127.0.0.1"
port = 5432
user = "memoh"
password = "memoh123"
database = "memoh"
sslmode = "disable"
[qdrant]
base_url = "http://127.0.0.1:6334"
api_key = ""
timeout_seconds = 10
[sparse]
base_url = "http://127.0.0.1:8085"
[registry]
providers_dir = "conf/providers"
[browser_gateway]
host = "127.0.0.1"
port = 8083
server_addr = ":8080"
[supermarket]
base_url = "https://supermarket.memoh.ai"
[web]
host = "127.0.0.1"
port = 8082