Commit Graph

336 Commits

Author SHA1 Message Date
Ran 0fffed1d1e fix(web): vite url config error
- golang server support for arm64 arg
2026-02-15 03:45:09 +08:00
Fodesu 6f5ee013e6 fix(models): models id change can not be save (#49) 2026-02-14 23:40:47 +08:00
Ran e6580d7837 fix(deploy): docker health check failure 2026-02-14 22:44:23 +08:00
Ran 5c46d41ebf fix(deploy): vite config lazy load 2026-02-14 22:16:55 +08:00
Acbox f964cbca69 fix (docker): missing web keys in docker config 2026-02-14 20:45:33 +08:00
Acbox 1c85e0106f fix(docker): Dockerfile.web 2026-02-14 20:43:08 +08:00
Acbox 94d1cea488 fix(docker): Dockerfile.agent 2026-02-14 20:39:49 +08:00
Acbox ac8f857e27 feat(agent): put time-now header to the end of system prompt to increase the cache rate 2026-02-14 20:22:18 +08:00
Acbox f967c07e0a fix(web): tsconfig 2026-02-14 19:56:44 +08:00
Acbox b771238576 chore: add required config key 2026-02-14 19:52:31 +08:00
Acbox 82e9f12b7f refactor(web): change old port (7003) and deploy port (80) to port 8082 2026-02-14 19:51:55 +08:00
Ran 7817ec8147 fix(web): channel switch failure
Also add webui memory page
2026-02-14 07:30:21 +08:00
Fodesu 5ffd672605 ci: fix typos version again 2026-02-13 22:21:20 +08:00
Fodesu 2c2a8da01b ci: fix typos version 2026-02-13 22:17:39 +08:00
Fodesu fc42e717a7 chore: fix typos 2026-02-13 22:06:56 +08:00
Fodesu 6bf56d4b6b ci: fix typos failed log 2026-02-13 22:05:23 +08:00
Fodesu 8a8c8eb2e4 ci: add typos ci support 2026-02-13 22:01:01 +08:00
BBQ f3ea18a2da feat(telegram): add processing reaction and fix reply-to-bot trigger
Add ProcessingStatusNotifier implementation: show 👀 reaction while
processing, remove on completion/failure. Fix isReplyToBot to match
only the current bot (bot.Self.ID) instead of any bot, preventing
multiple bots from responding to the same reply. Add rune-safe text
truncation for Telegram message length limit.
2026-02-13 20:45:14 +08:00
BBQ 14a1f9cad3 chore(db): remove obsolete text.go, text_test.go and uuid.go
These files were superseded by internal/db/utils.go.
2026-02-13 20:42:00 +08:00
BBQ b3c869f0ff fix(telegram): sanitize text to valid UTF-8 before sending to API
Strip invalid UTF-8 byte sequences in sendTelegramTextReturnMessage and
editTelegramMessageText to prevent "text must be encoded in UTF-8" errors
that abort the stream mid-response.
2026-02-13 20:26:27 +08:00
BBQ 670698090f fix(route): handle concurrent route creation race condition
Catch unique constraint violation (SQLSTATE 23505) during route creation
in ResolveConversation and fall back to Find, preventing duplicate key
errors when concurrent inbound messages hit the same chat simultaneously.
Add shared IsUniqueViolation helper to internal/db.
2026-02-13 20:26:22 +08:00
BBQ f1d53e1c2c fix(telegram): improve stream edit throttle and 429 rate limit handling
Increase edit throttle from 250ms to 1500ms to respect Telegram per-chat limits,
remove newline bypass that effectively disabled throttling, add dedicated
editStreamMessageFinal with retry for final message delivery, and simplify
editTelegramMessageText by removing blocking sleep in favor of caller-level retry.
2026-02-13 20:21:10 +08:00
BBQ c46f284556 fix(telegram): handle stream edit errors and 429 rate limit
- Treat 400 "message is not modified" as success to avoid user-facing error
- On 429: sleep retry_after and retry once in editTelegramMessageText;
  stream backs off lastEditedAt and returns nil
- Require error code 400 for message-not-modified check; add production
  error string to unit tests
- Lower base throttle to 250ms; add test hooks and tests for 429 retry
  and stream backoff
2026-02-13 19:52:22 +08:00
BBQ 33e10f3738 docs: align README_CN with EN, fix CONTRIBUTING links to .github/CONTRIBUTING.md 2026-02-13 18:41:38 +08:00
BBQ fbc2ab7593 docs: improve README, DEPLOYMENT and move CONTRIBUTING
- README: emphasize Docker requirement with get-started link, move silent
  install under one-click and de-emphasize
- DEPLOYMENT: clarify default config path and that only config file is mounted
- Move CONTRIBUTING.md to .github/CONTRIBUTING.md (git mv)
2026-02-13 18:38:51 +08:00
BBQ 33d7662798 Merge pull request #45 from memohai/feat/containerd-in-docker
feat: containerd-in-docker deployment with core refactoring and MCP management
2026-02-13 18:14:15 +08:00
BBQ 243ea6f034 feat(web): add all supported provider client types to model selector 2026-02-13 18:02:30 +08:00
BBQ b3775f57a2 merge: resolve conflicts with github/main
- Remove uppercase Sidebar/index.vue (keep lowercase sidebar/)
- Keep HEAD imports for user-chat and settings/user.vue
2026-02-13 17:51:48 +08:00
BBQ 7b6490ebcd chore: update install script and docs to reference main branch 2026-02-13 17:49:00 +08:00
BBQ c08e34cbcc fix(web): persist tool call messages across page refresh
Tool call messages disappeared after page refresh because messageToChat()
filtered out messages without text content. Added convertMessagesToChats()
to merge consecutive assistant(tool_calls) + tool(results) + assistant(text)
into a single ChatMessage with ToolCallBlocks.
2026-02-13 17:42:29 +08:00
killpanda 49fe355123 fix: correct store import path case (#42) 2026-02-13 17:04:58 +08:00
BBQ faaadf14c5 feat(channel): pass conversation type through to agent gateway and persist in route
Propagate conversation type (direct/group/thread) from channel adapters
all the way to the agent prompt. Store conversation_type on bot_channel_routes
so the bot knows whether a message originates from a p2p chat, group, or thread.

Schema changes are folded into the 0001 init migration (destructive update).
2026-02-13 06:22:24 +08:00
Ran 0406f42e86 feat: memory search/compact/rebuild api 2026-02-13 06:14:57 +08:00
BBQ 2614763547 feat(web): parallel health checks and MCP form UX improvements
- Bot overview: fetch check keys first, then parallel-request each key
  independently with per-item loading spinner
- Stable check ordering via key-indexed placeholder array
- MCP form: replace flat command/url fields with Stdio/Remote tab
  switcher for clear mode selection
- MCP type labels: "Stdio (Local)" / "Remote (HTTP/SSE)"
2026-02-13 02:43:31 +08:00
BBQ 76dbae2844 feat(bots): per-key parallel health checks with MCP connection probing
- Refactor RuntimeChecker interface: CheckKeys() + RunCheck() for
  individual check dispatch instead of batch-all
- Add GET /bots/:id/checks/keys to list all available check keys
- Add GET /bots/:id/checks/run/:key to evaluate a single check
- MCP ConnectionChecker probes each active connection independently
  via tools/list with 8s timeout
- Keep container checks (init/record/task/data_path) as fast builtins
- Graceful network setup failure in containerd handler (log warning
  instead of killing task) for containerd-in-docker compatibility
2026-02-13 02:43:23 +08:00
BBQ df142e8439 docs: add troubleshooting for MCP image update not taking effect 2026-02-13 02:15:09 +08:00
BBQ 1d1586186c feat(bots): add MCP connection runtime health checks
- Add RuntimeChecker interface for extensible bot health checks
- Implement MCP ConnectionChecker: probes active connections via tools/list
- Show MCP server status (healthy/unreachable/no tools) in bot checks
- Register checker in main.go alongside container lifecycle
2026-02-13 02:13:52 +08:00
BBQ f9be6baa4e fix(containerd): add pid:host for CNI netns access and runtime deps to MCP image
- Add pid: host to containerd service so server can access MCP container
  network namespaces via /proc/PID/ns/net for CNI setup
- Add Node.js, npm, Python 3, uv to embedded MCP image rootfs so users
  can run npx/uvx MCP servers inside containers
2026-02-13 01:55:11 +08:00
BBQ fddacbb86d fix(containerd): keep task running when network setup fails
In containerd-in-docker mode, SetupNetwork fails because netns is
unavailable. Previously this killed the task, making stdio MCP tools
unusable. Now the task continues running with a warning log, since
stdio MCP communication does not require networking.
2026-02-13 01:50:59 +08:00
BBQ c7d66f89ab feat(bots): MCP add/import merge, batch select and batch delete/export 2026-02-13 01:11:40 +08:00
BBQ 7e5612d474 refactor(i18n): move generic keys to common 2026-02-13 01:11:06 +08:00
BBQ 3a1aa31611 fix(mcp): move import/export routes to /mcp-ops to avoid /:id conflict
Echo router treats /mcp/import and /mcp/export as /mcp/:id matches.
Move to /bots/:bot_id/mcp-ops/import and /mcp-ops/export.
2026-02-13 00:47:44 +08:00
BBQ 944461f031 feat(mcp): add Node.js and Python runtime to MCP container image
- Install nodejs + npm (provides npx for JS/TS MCP servers)
- Install python3 + uv (provides uvx for Python MCP servers)
- Add bash and curl as base utilities
2026-02-13 00:41:00 +08:00
BBQ 7942df6a32 feat(web): implement bot MCP management page and remove global MCP page
- Add bot-mcp.vue component with table, create/edit dialog, import/export
- Wire MCP tab into bot detail page
- Remove dead global MCP page, composable, and form component (/mcp route)
- Add i18n keys for import/export/copy and MCP CRUD messages
- Fix store/User.ts case sensitivity for Linux builds
2026-02-13 00:40:53 +08:00
BBQ 9dd7135820 refactor(mcp): standard mcpServers input format with type inference
- Accept standard mcpServers item format (command/args/env/url/headers)
- Auto-infer connection type: command -> stdio, url -> http/sse
- Add PUT /bots/:bot_id/mcp/import for batch import from mcpServers dict
- Add GET /bots/:bot_id/mcp/export for standard format export
- Add UpsertMCPConnectionByName SQL for import upsert by name
- Preserve is_active state on import upsert
2026-02-13 00:25:42 +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 57dd75ff52 refactor(memory): fix naming, dead code, error handling and AgentID support
Normalize JSON tags to snake_case, remove dead fusion branches and unused
struct fields, add proper error logging for BM25 operations, wire AgentID
through filters/store/retrieval, and replace goto with structured control flow.
2026-02-12 23:50:48 +08:00
BBQ c53d35740e feat(deploy): self-contained containerd with embedded MCP image
- Add Dockerfile.containerd: multi-stage build that compiles MCP binary,
  assembles rootfs, creates Docker image tar, and bundles it with containerd
- Add containerd-entrypoint.sh: auto-imports MCP image on first start
- Fix MCP image reference: rename busybox_image to image in config,
  use fully-qualified docker.io/library/memoh-mcp:latest everywhere
- Make image ref configurable via config.toml instead of hardcoded
- Simplify deploy.sh: remove manual nerdctl/containerd-install steps
2026-02-12 23:50:48 +08:00
BBQ e63d335c7e feat(deploy): add containerd-in-docker support for docker compose
Run containerd as a sidecar container instead of requiring host
containerd installation. Server mounts shared docker volumes for
containerd socket, data and state.
2026-02-12 23:50:48 +08:00
Acbox 67120cb582 fix: mcp 2026-02-12 23:43:09 +08:00