From d3dafce6157ddac2cef9fe0d011ae5e7f4e34409 Mon Sep 17 00:00:00 2001 From: Acbox Date: Thu, 19 Mar 2026 13:45:20 +0800 Subject: [PATCH] chore: update README.md and AGENTS.md --- AGENTS.md | 150 ++++++++++++++++++++++++++++++++------------------- README.md | 81 +++++++++++++++------------- README_CN.md | 80 +++++++++++++++------------ 3 files changed, 184 insertions(+), 127 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 9728a740..4e43540d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,12 +6,11 @@ Memoh is a multi-member, structured long-memory, containerized AI agent system p ## Architecture Overview -The system consists of four core services: +The system consists of three core services: | Service | Tech Stack | Port | Description | |---------|-----------|------|-------------| -| **Server** (Backend) | Go + Echo | 8080 | Main service: REST API, auth, database, container management | -| **Agent Gateway** | Bun + Elysia | 8081 | AI chat gateway: handles chat requests, tool execution, and SSE streaming | +| **Server** (Backend) | Go + Echo | 8080 | Main service: REST API, auth, database, container management, **in-process AI agent** | | **Web** (Frontend) | Vue 3 + Vite | 8082 | Management UI: visual configuration for Bots, Models, Channels, etc. | | **Browser Gateway** | Bun + Elysia + Playwright | 8083 | Browser automation service: headless browser actions for bots | @@ -25,17 +24,13 @@ Infrastructure dependencies: ### Backend (Go) - **Framework**: Echo (HTTP) - **Dependency Injection**: Uber FX +- **AI SDK**: [Twilight AI](https://github.com/memohai/twilight-ai) (Go LLM SDK — OpenAI, Anthropic, Google) - **Database Driver**: pgx/v5 - **Code Generation**: sqlc (SQL → Go) - **API Docs**: Swagger/OpenAPI (swaggo) +- **MCP**: modelcontextprotocol/go-sdk - **Containers**: containerd v2 (Linux), Apple Virtualization (macOS) -### Agent Gateway & Agent Library (TypeScript) -- **Runtime**: Bun -- **Framework**: Elysia (gateway), Vercel AI SDK (agent core) -- **AI Providers**: Anthropic, OpenAI, Google (via Vercel AI SDK) -- **Tools**: MCP, Web Search, Subagent, Skill - ### Frontend (TypeScript) - **Framework**: Vue 3 (Composition API) - **Build Tool**: Vite @@ -45,10 +40,15 @@ Infrastructure dependencies: - **Markdown**: markstream-vue + Shiki + Mermaid + KaTeX - **Package Manager**: pnpm monorepo +### Browser Gateway (TypeScript) +- **Runtime**: Bun +- **Framework**: Elysia +- **Browser Automation**: Playwright + ### Tooling - **Task Runner**: mise - **Package Managers**: pnpm (frontend monorepo), Go modules (backend) -- **Linting**: ESLint + typescript-eslint + vue-eslint-parser +- **Linting**: golangci-lint (Go), ESLint + typescript-eslint + vue-eslint-parser (TypeScript) - **Testing**: Vitest - **Typo Checker**: typos - **Version Management**: bumpp @@ -59,27 +59,56 @@ Infrastructure dependencies: ``` Memoh/ ├── cmd/ # Go application entry points -│ ├── agent/ # Main backend server (main.go) -│ ├── bridge/ # Bridge server binary (in-container gRPC, template/) -│ └── memoh/ # Unified binary wrapper (Cobra CLI) +│ ├── agent/ # Main backend server (main.go, FX wiring) +│ ├── bridge/ # In-container gRPC bridge (UDS-based, runs inside bot containers) +│ ├── mcp/ # MCP stdio transport binary +│ └── memoh/ # Unified binary wrapper (Cobra CLI: serve, migrate, version) ├── internal/ # Go backend core code (domain packages) │ ├── accounts/ # User account management (CRUD, password hashing) +│ ├── acl/ # Access control list (source-aware chat trigger ACL) +│ ├── agent/ # In-process AI agent (Twilight AI SDK integration) +│ │ ├── agent.go # Core agent: Stream() / Generate() via Twilight SDK +│ │ ├── model.go # Model creation (OpenAI completions/responses, Anthropic, Google) +│ │ ├── stream.go # Streaming event assembly +│ │ ├── sential.go # Sential (sentinel) loop detection logic +│ │ ├── tags.go # Tag extraction from streaming text (attachments, reactions, speech) +│ │ ├── prompt.go # Prompt assembly (system, heartbeat, schedule, subagent) +│ │ ├── config.go # Agent configuration types (RunConfig, ModelConfig) +│ │ ├── types.go # Shared types (StreamEvent, GenerateResult, FileAttachment) +│ │ ├── fs.go # Filesystem utilities +│ │ ├── prompts/ # Prompt templates (system.md, heartbeat.md, schedule.md, subagent.md) +│ │ └── tools/ # Tool providers (ToolProvider interface) +│ │ ├── message.go # Send message tool +│ │ ├── contacts.go # Contact list tool +│ │ ├── schedule.go # Schedule management tool +│ │ ├── memory.go # Memory read/write tool +│ │ ├── web.go # Web search tool +│ │ ├── webfetch.go # Web page fetch tool +│ │ ├── container.go # Container file/exec tools +│ │ ├── inbox.go # Inbox tool +│ │ ├── email.go # Email send tool +│ │ ├── subagent.go # Sub-agent invocation tool +│ │ ├── skill.go # Skill activation tool +│ │ ├── browser.go # Browser automation tool +│ │ ├── tts.go # Text-to-speech tool +│ │ └── federation.go # MCP federation tool │ ├── attachment/ # Attachment normalization (MIME types, base64) │ ├── auth/ # JWT authentication middleware and utilities │ ├── bind/ # Channel identity-to-user binding code management │ ├── boot/ # Runtime configuration provider (container backend detection) │ ├── bots/ # Bot management (CRUD, lifecycle) │ ├── browsercontexts/ # Browser context management (CRUD) -│ ├── bun/ # Bun runtime manager (agent gateway process lifecycle) -│ ├── channel/ # Channel adapter system (Telegram, Discord, Feishu, Local, Email) +│ ├── channel/ # Channel adapter system (Telegram, Discord, Feishu, QQ, Local, Email) +│ ├── command/ # Slash command system (extensible command handlers) │ ├── config/ # Configuration loading and parsing (TOML) │ ├── containerd/ # Container runtime abstraction (containerd / Apple Virtualization) │ ├── conversation/ # Conversation management and flow resolver +│ │ ├── service.go # Conversation CRUD and routing +│ │ └── flow/ # Chat orchestration (resolver, streaming, memory, triggers) │ ├── db/ # Database connection and migration utilities │ │ └── sqlc/ # ⚠️ Auto-generated by sqlc — DO NOT modify manually -│ ├── email/ # Email provider and outbox management (Mailgun, generic SMTP) -│ ├── embedded/ # Embedded filesystem assets (web, agent, bun) -│ ├── embeddings/ # Embedding model resolver +│ ├── email/ # Email provider and outbox management (Mailgun, generic SMTP, OAuth) +│ ├── embedded/ # Embedded filesystem assets (web only) │ ├── handlers/ # HTTP request handlers (REST API endpoints) │ ├── healthcheck/ # Health check adapter system (MCP, channel checkers) │ ├── heartbeat/ # Heartbeat scheduling service (cron-based) @@ -87,13 +116,16 @@ Memoh/ │ ├── inbox/ # Bot inbox service (notifications, triggers) │ ├── logger/ # Structured logging (slog) │ ├── mcp/ # MCP protocol manager (connections, OAuth, tool gateway) -│ ├── workspace/ # Workspace container lifecycle (bridge client, protobuf) +│ ├── workspace/ # Workspace container lifecycle management +│ │ ├── manager.go # Container reconciliation, gRPC connection pool +│ │ ├── manager_lifecycle.go # Container create/start/stop operations +│ │ ├── bridge/ # gRPC client for in-container bridge service +│ │ └── bridgepb/ # Protobuf definitions (bridge.proto) │ ├── media/ # Content-addressed media asset service -│ ├── memory/ # Long-term memory system (Qdrant, BM25, LLM extraction) +│ ├── memory/ # Long-term memory system (multi-provider: Qdrant, BM25, LLM extraction) │ ├── message/ # Message persistence and event publishing │ ├── models/ # LLM model management (CRUD, variants) -│ ├── policy/ # Access policy resolution (guest access, bot type) -│ ├── preauth/ # Pre-authentication key management +│ ├── policy/ # Access policy resolution (guest access) │ ├── providers/ # LLM provider management (OpenAI, Anthropic, etc.) │ ├── prune/ # Text pruning utilities (truncation with head/tail) │ ├── schedule/ # Scheduled task service (cron) @@ -103,15 +135,10 @@ Memoh/ │ ├── settings/ # Bot settings management │ ├── storage/ # Storage provider interface (filesystem, container FS) │ ├── subagent/ # Sub-agent management (CRUD) +│ ├── textutil/ # UTF-8 safe text utilities +│ ├── tts/ # Text-to-speech provider management │ └── version/ # Build-time version information ├── apps/ # Application services -│ ├── agent/ # Agent Gateway (Bun/Elysia) -│ │ └── src/ -│ │ ├── index.ts # Elysia server entry point -│ │ ├── modules/ # Route modules (chat, stream, trigger) -│ │ ├── middlewares/ # CORS, error handling, bearer auth -│ │ ├── utils/ # SSE utilities -│ │ └── models.ts # Zod request schemas │ ├── browser/ # Browser Gateway (Bun/Elysia/Playwright) │ │ └── src/ │ │ ├── index.ts # Elysia server entry point @@ -123,16 +150,6 @@ Memoh/ │ │ └── models.ts # Zod request schemas │ └── web/ # Main web app (@memoh/web, Vue 3) ├── packages/ # Shared TypeScript libraries -│ ├── agent/ # Core agent library (@memoh/agent) -│ │ └── src/ -│ │ ├── agent.ts # Agent creation and streaming logic -│ │ ├── model.ts # Model configuration and creation -│ │ ├── tool-loop.ts # Tool execution loop -│ │ ├── sential.ts # Sential (sentinel) logic -│ │ ├── tools/ # Tool implementations (MCP, web, subagent, skill) -│ │ ├── prompts/ # System/heartbeat/schedule/subagent prompts -│ │ ├── types/ # TypeScript type definitions -│ │ └── utils/ # Attachments, headers, filesystem utilities │ ├── ui/ # Shared UI component library (@memoh/ui) │ ├── sdk/ # TypeScript SDK (@memoh/sdk, auto-generated from OpenAPI) │ ├── cli/ # CLI tool (@memoh/cli, Commander.js) @@ -143,7 +160,7 @@ Memoh/ │ └── queries/ # SQL query files (sqlc input) ├── conf/ # Configuration templates (app.example.toml, app.docker.toml, app.apple.toml, app.windows.toml) ├── devenv/ # Dev environment (docker-compose, dev Dockerfiles, app.dev.toml, bridge-build.sh, server-entrypoint.sh) -├── docker/ # Production Docker (Dockerfiles, entrypoints, nginx.conf, docker-compose.yml, docker-compose.cn.yml) +├── docker/ # Production Docker (Dockerfiles, entrypoints, nginx.conf, toolkit/) ├── docs/ # Documentation site ├── scripts/ # Utility scripts (db, release, install) ├── docker-compose.yml # Docker Compose orchestration (production) @@ -174,17 +191,22 @@ Memoh/ | `mise run dev:down` | Stop the dev environment | | `mise run dev:logs` | View dev environment logs | | `mise run dev:restart` | Restart a service (e.g. `-- server`) | -| `mise run setup` | Copy config + install dependencies | +| `mise run setup` | Install dependencies + workspace toolkit | | `mise run sqlc-generate` | Regenerate Go code after modifying SQL files | | `mise run swagger-generate` | Generate Swagger documentation | | `mise run sdk-generate` | Generate TypeScript SDK (depends on swagger-generate) | | `mise run db-up` | Initialize and migrate the database | | `mise run db-down` | Drop the database | -| `mise run build-embedded-assets` | Build and stage embedded web/agent/bun assets | +| `mise run build-embedded-assets` | Build and stage embedded web assets | | `mise run build-unified` | Build unified memoh binary | +| `mise run bridge:build` | Rebuild bridge binary in dev container | +| `mise run lint` | Run all linters (Go + ESLint) | +| `mise run lint:fix` | Run all linters with auto-fix | | `mise run release` | Release new version (bumpp) | | `mise run release-binaries` | Build release archive for target (requires TARGET_OS TARGET_ARCH) | | `mise run install-cli` | Install CLI locally | +| `mise run install-socktainer` | Install socktainer (macOS container backend) | +| `mise run install-workspace-toolkit` | Install workspace toolkit (bridge binary etc.) | ### Docker Deployment @@ -193,6 +215,9 @@ docker compose up -d # Start all services # Visit http://localhost:8082 ``` +Production services: `postgres`, `migrate`, `server`, `web`. +Optional profiles: `qdrant` (vector DB), `sparse` (BM25 search), `browser` (browser automation). + ## Key Development Rules ### Database, sqlc & Migrations @@ -228,11 +253,15 @@ Migrations live in `db/migrations/` and follow a dual-update convention: ### Agent Development -- The core agent logic lives in `packages/agent/` (`@memoh/agent`), providing reusable agent streaming, tool execution, and prompt management. -- The Agent Gateway (`apps/agent/`) is a thin Elysia HTTP service that uses `@memoh/agent` for processing. -- AI model providers (Anthropic, OpenAI, Google) are integrated via Vercel AI SDK. -- Tools (MCP, web search, subagent, skill) are defined in `packages/agent/src/tools/`. -- Prompt templates (system, heartbeat, schedule, subagent) are in `packages/agent/src/prompts/`. +- The AI agent runs **in-process** within the Go server — there is no separate agent gateway service. +- Core agent logic lives in `internal/agent/`, powered by the [Twilight AI](https://github.com/memohai/twilight-ai) Go SDK. +- `internal/agent/agent.go` provides `Stream()` (SSE streaming) and `Generate()` (non-streaming) methods. +- Model creation (`internal/agent/model.go`) supports four client types: `openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`. +- Tools are implemented as `ToolProvider` instances in `internal/agent/tools/`, loaded via setter injection to avoid FX dependency cycles. +- Prompt templates (system, heartbeat, schedule, subagent) are embedded Go Markdown files in `internal/agent/prompts/`. +- The conversation flow resolver (`internal/conversation/flow/`) orchestrates message assembly, memory injection, history trimming, and agent invocation. +- Loop detection (text and tool loops) is built into the agent with configurable thresholds. +- Tag extraction system processes inline tags in streaming output (attachments, reactions, speech/TTS). ### Frontend Development @@ -242,11 +271,15 @@ Migrations live in `db/migrations/` and follow a dual-update convention: - State management uses Pinia; data fetching uses Pinia Colada. - i18n via vue-i18n. -### Container Management +### Container / Workspace Management -- In Docker deployment, containerd runs inside the server container. -- On macOS, Apple Virtualization is used as container backend. -- Each bot has its own isolated container instance. +- Each bot can have an isolated **workspace container** for file editing, command execution, and MCP tool hosting. +- Containers communicate with the host via a **gRPC bridge** over Unix Domain Sockets (UDS), not TCP. +- The bridge binary (`cmd/bridge/`) runs inside each container, mounting runtime binaries from `$WORKSPACE_RUNTIME_DIR` and UDS sockets from `/run/memoh/`. +- Container images are standard base images (debian, alpine, ubuntu, etc.) — no dedicated MCP Docker image needed. +- `internal/workspace/` manages container lifecycle (create, start, stop, reconcile) and maintains a gRPC connection pool. +- `internal/containerd/` provides the container runtime abstraction layer (containerd on Linux, Apple Virtualization on macOS, socktainer for socket-based management). +- SSE-based progress feedback is provided during container image pull and creation. ## Database Tables @@ -260,14 +293,13 @@ Migrations live in `db/migrations/` and follow a dual-update convention: | `models` | Model definitions (chat/embedding types, modalities, reasoning) | | `model_variants` | Model variant definitions (weight, metadata) | | `bots` | Bot definitions with model references and settings | -| `bot_members` | Bot membership (owner/admin/member) | | `mcp_connections` | MCP connection configurations per bot | | `bot_channel_configs` | Per-bot channel configurations | | `bot_preauth_keys` | Bot pre-authentication keys | | `channel_identity_bind_codes` | One-time codes for channel identity → user linking | | `bot_channel_routes` | Conversation route mapping (inbound thread → bot history) | | `bot_history_messages` | Unified message history under bot scope | -| `bot_history_message_assets` | Message → content_hash asset links | +| `bot_history_message_assets` | Message → content_hash asset links (with name and metadata) | | `containers` | Bot container instances | | `snapshots` | Container snapshots | | `container_versions` | Container version tracking | @@ -282,6 +314,12 @@ Migrations live in `db/migrations/` and follow a dual-update convention: | `email_providers` | Pluggable email service backends (Mailgun, generic SMTP) | | `bot_email_bindings` | Per-bot email provider binding with permissions | | `email_outbox` | Outbound email audit log | +| `email_oauth_tokens` | OAuth2 tokens for email providers (Gmail) | +| `memory_providers` | Multi-provider memory adapter configurations | +| `tts_providers` | Text-to-speech provider configurations | +| `tts_models` | TTS model definitions | +| `token_usage` | Per-message LLM token usage tracking | +| `chat_acl` | Source-aware chat access control lists | ## Configuration @@ -291,11 +329,11 @@ The main configuration file is `config.toml` (copied from `conf/app.example.toml - `[server]` — HTTP listen address - `[admin]` — Admin account credentials - `[auth]` — JWT authentication settings -- `[containerd]` — Container runtime configuration (socket path, namespace) -- `[workspace]` — Workspace image and data configuration +- `[containerd]` — Container runtime configuration (socket path, namespace, socktainer) +- `[workspace]` — Workspace container image and data configuration (registry, default_image, snapshotter, data_root, cni, runtime_dir) - `[postgres]` — PostgreSQL connection - `[qdrant]` — Qdrant vector database connection -- `[agent_gateway]` — Agent Gateway address +- `[sparse]` — Sparse (BM25) search service connection - `[browser_gateway]` — Browser Gateway address - `[web]` — Web frontend address diff --git a/README.md b/README.md index 215956b8..0f42857b 100644 --- a/README.md +++ b/README.md @@ -134,45 +134,54 @@ Additional capabilities include memory compaction (merge redundant entries), reb -## Tech Stack - -| Layer | Stack | -|-------|-------| -| Backend | Go, Echo, sqlc, Uber FX, pgx/v5, containerd v2 | -| Agent Gateway | Bun, Elysia | -| Browser Gateway | Bun, Elysia, Playwright (Chromium) | -| Frontend | Vue 3, Vite, Pinia, Tailwind CSS, Reka UI | -| Storage | PostgreSQL, Qdrant | -| Infra | Docker, containerd, CNI | -| Tooling | mise, pnpm, swaggo, sqlc | - ## Architecture +```mermaid +flowchart TB + subgraph Clients [" Clients "] + direction LR + CH["Channels
Telegram · Discord · Feishu · QQ · Email"] + WEB["Web UI (Vue 3 :8082)"] + CLI["CLI"] + end + + CH & WEB & CLI --> API + + subgraph Server [" Server · Go :8080 "] + API["REST API & Channel Adapters"] + + subgraph Agent [" In-process AI Agent "] + TWILIGHT["Twilight AI SDK
OpenAI · Anthropic · Google"] + CONV["Conversation Flow
Streaming · Sential · Loop Detection"] + end + + subgraph ToolProviders [" Tool Providers "] + direction LR + T_CORE["Memory · Web Search
Schedule · Contacts · Inbox"] + T_EXT["Container · Email · Browser
Subagent · Skill · TTS
MCP Federation"] + end + + API --> Agent --> ToolProviders + end + + PG[("PostgreSQL")] + QD[("Qdrant")] + BROWSER["Browser Gateway
(Playwright :8083)"] + + subgraph Workspace [" Workspace Containers · containerd "] + direction LR + BA["Bot A"] ~~~ BB["Bot B"] ~~~ BC["Bot C"] + end + + Server --- PG + Server --- QD + ToolProviders -.-> BROWSER + ToolProviders -- "gRPC Bridge over UDS" --> Workspace ``` -┌──────────────────┐ ┌─────────────────┐ ┌──────────────┐ -│ Channels │ │ Web UI │ │ CLI │ -│ (TG/DC/FS/Email) │ │ (Vue 3 :8082) │ │ │ -└────────┬─────────┘ └────────┬────────┘ └──────┬───────┘ - │ │ │ - ▼ ▼ ▼ -┌──────────────────────────────────────────────────────────┐ -│ Server (Go :8080) │ -│ Auth · Bots · Channels · Memory · Containers · MCP │ -└──────────────────────┬───────────────────────────────────┘ - │ - ┌───────────┼───────────┬───────────┐ - ▼ ▼ ▼ ▼ - ┌──────────┐ ┌─────────┐ ┌──────────────────┐ ┌───────────────────┐ - │ PostgreSQL│ │ Qdrant │ │ Agent Gateway │ │ Browser Gateway │ - │ │ │ (Vector)│ │ (Bun/Elysia :8081)│ │ (Playwright :8083) │ - └──────────┘ └─────────┘ └────────┬──────────┘ └───────────────────┘ - │ - ┌───────┼───────┐ - ▼ ▼ ▼ - ┌─────┐ ┌─────┐ ┌─────┐ - │Bot A│ │Bot B│ │Bot C│ ← containerd - └─────┘ └─────┘ └─────┘ -``` + +## Sub-projects Born for This Project + +- [**Twilight AI**](https://github.com/memohai/twilight-ai) — A lightweight, idiomatic AI SDK for Go — inspired by [Vercel AI SDK](https://sdk.vercel.ai/). Provider-agnostic (OpenAI, Anthropic, Google), with first-class streaming, tool calling, MCP support, and embeddings. ## Roadmap diff --git a/README_CN.md b/README_CN.md index 826a3e4d..a60cbb91 100644 --- a/README_CN.md +++ b/README_CN.md @@ -132,45 +132,55 @@ Memoh 的记忆系统围绕 **Memory Provider(记忆供应商)** 构建 — -## 技术栈 - -| 层级 | 技术 | -|------|------| -| 后端 | Go, Echo, sqlc, Uber FX, pgx/v5, containerd v2 | -| Agent 网关 | Bun, Elysia | -| 浏览器网关 | Bun, Elysia, Playwright (Chromium) | -| 前端 | Vue 3, Vite, Pinia, Tailwind CSS, Reka UI | -| 存储 | PostgreSQL, Qdrant | -| 基础设施 | Docker, containerd, CNI | -| 工具链 | mise, pnpm, swaggo, sqlc | ## 架构 +```mermaid +flowchart TB + subgraph Clients [" 客户端 "] + direction LR + CH["渠道
Telegram · Discord · 飞书 · QQ · Email"] + WEB["Web 管理界面 (Vue 3 :8082)"] + CLI["CLI"] + end + + CH & WEB & CLI --> API + + subgraph Server [" 服务端 · Go :8080 "] + API["REST API & 渠道适配器"] + + subgraph Agent [" 进程内 AI Agent "] + TWILIGHT["Twilight AI SDK
OpenAI · Anthropic · Google"] + CONV["对话流
流式输出 · Sential · 循环检测"] + end + + subgraph ToolProviders [" 工具提供者 "] + direction LR + T_CORE["记忆 · 网络搜索
定时任务 · 联系人 · 收件箱"] + T_EXT["容器 · 邮件 · 浏览器
子代理 · 技能 · TTS
MCP 联邦"] + end + + API --> Agent --> ToolProviders + end + + PG[("PostgreSQL")] + QD[("Qdrant")] + BROWSER["浏览器网关
(Playwright :8083)"] + + subgraph Workspace [" 工作区容器 · containerd "] + direction LR + BA["Bot A"] ~~~ BB["Bot B"] ~~~ BC["Bot C"] + end + + Server --- PG + Server --- QD + ToolProviders -.-> BROWSER + ToolProviders -- "gRPC Bridge over UDS" --> Workspace ``` -┌──────────────────┐ ┌─────────────────┐ ┌──────────────┐ -│ Channels │ │ Web UI │ │ CLI │ -│ (TG/DC/FS/Email) │ │ (Vue 3 :8082) │ │ │ -└────────┬─────────┘ └────────┬────────┘ └──────┬───────┘ - │ │ │ - ▼ ▼ ▼ -┌──────────────────────────────────────────────────────────┐ -│ Server (Go :8080) │ -│ Auth · Bots · Channels · Memory · Containers · MCP │ -└──────────────────────┬───────────────────────────────────┘ - │ - ┌───────────┼───────────┬───────────┐ - ▼ ▼ ▼ ▼ - ┌──────────┐ ┌─────────┐ ┌──────────────────┐ ┌───────────────────┐ - │ PostgreSQL│ │ Qdrant │ │ Agent Gateway │ │ Browser Gateway │ - │ │ │ (向量库) │ │ (Bun/Elysia :8081)│ │ (Playwright :8083) │ - └──────────┘ └─────────┘ └────────┬──────────┘ └───────────────────┘ - │ - ┌───────┼───────┐ - ▼ ▼ ▼ - ┌─────┐ ┌─────┐ ┌─────┐ - │Bot A│ │Bot B│ │Bot C│ ← containerd - └─────┘ └─────┘ └─────┘ -``` + +## 因本项目而诞生的子项目 + +- [**Twilight AI**](https://github.com/memohai/twilight-ai) — 轻量、地道的 Go AI SDK —— 灵感源自 [Vercel AI SDK](https://sdk.vercel.ai/)。支持多供应商(OpenAI、Anthropic、Google),提供一流的流式输出、工具调用、MCP 支持与嵌入向量生成。 ## 路线图