[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74785":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},74785,"LobsterAI","netease-youdao\u002FLobsterAI","netease-youdao","Your 24\u002F7 all-scenario AI agent that gets work done for you.","https:\u002F\u002Flobsterai.youdao.com",null,"TypeScript",5260,808,30,548,0,23,47,105,69,39.72,"MIT License",false,"main",[],"2026-06-12 02:03:28","# LobsterAI — All-in-One Personal Assistant Agent\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"public\u002Flogo.png\" alt=\"LobsterAI\" width=\"120\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>A 24\u002F7 personal assistant Agent that gets things done, built by NetEase Youdao\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg?style=for-the-badge\" alt=\"MIT License\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-macOS%20%7C%20Windows%20%7C%20Linux%20%7C%20Mobile-brightgreen?style=for-the-badge\" alt=\"Platform\">\n  \u003Cbr>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FElectron-40-47848F?style=for-the-badge&logo=electron&logoColor=white\" alt=\"Electron\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-18-61DAFB?style=for-the-badge&logo=react&logoColor=black\" alt=\"React\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  English · \u003Ca href=\"README_zh.md\">中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n**LobsterAI** is an all-in-one personal assistant Agent developed by [NetEase Youdao](https:\u002F\u002Fwww.youdao.com\u002F). It works around the clock to handle your everyday tasks — data analysis, making presentations, generating videos, writing documents, searching the web, sending emails, scheduling tasks, and more.\n\nAt its core is **Cowork mode** — it executes tools, manipulates files, and runs commands in a local or sandboxed environment, all under your supervision. You can also reach the Agent via WeChat, WeCom, DingTalk, Feishu, QQ, Telegram, Discord, and more — getting work done from your phone anytime, anywhere.\n\n## Key Features\n\n- **All-in-One Productivity Assistant** — Data analysis, PPT creation, video generation, document writing, web search, email — covers the full range of daily work\n- **Local + Sandbox Execution** — Run tasks directly on your machine or in an OpenClaw sandbox environment\n- **Built-in Skills** — Office document generation, web search, Playwright automation, Remotion video generation, and more\n- **Windows Built-in Python Runtime** — Windows packages bundle a ready-to-use Python interpreter runtime; Python skill dependencies can be installed on demand\n- **Scheduled Tasks** — Create recurring tasks via conversation or the GUI — daily news digests, inbox cleanup, periodic report generation, and more\n- **Persistent Memory** — Automatically extracts user preferences and personal facts from conversations, remembers your habits across sessions, and gets smarter the more you use it\n- **Mobile via IM** — Control your Agent remotely from your phone through WeChat, WeCom, DingTalk, Feishu, QQ, Telegram, Discord, and more\n- **Permission Gating** — All tool invocations require explicit user approval before execution\n- **Cross-Platform** — macOS (Intel + Apple Silicon), Windows, Linux desktop, plus mobile coverage via IM\n- **Local Data** — SQLite storage keeps your chat history and configuration on your device\n\n## How It Works\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fres\u002Farchitecture_v2_en.png\" alt=\"Architecture\" width=\"500\">\n\u003C\u002Fp>\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js** >= 24 \u003C 25\n- **npm**\n\n### Install & Develop\n\n```bash\n# Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Fnetease-youdao\u002FLobsterAI.git\ncd LobsterAI\n\n# Install dependencies\nnpm install\n\n# Start development (Vite dev server + Electron with hot reload)\nnpm run electron:dev\n```\n\nThe dev server runs at `http:\u002F\u002Flocalhost:5175` by default.\n\n#### Develop with OpenClaw Agent Engine\n\nLobsterAI can use [OpenClaw](https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw) as its agent engine.\nThe required OpenClaw version is pinned in `package.json` under `openclaw.version`.\n\n```bash\n# First run: automatically clones and builds OpenClaw (may take several minutes)\nnpm run electron:dev:openclaw\n\n# Subsequent runs: skips build if the pinned version hasn't changed\nnpm run electron:dev:openclaw\n```\n\nBy default, OpenClaw source is cloned\u002Fmanaged at `..\u002Fopenclaw` (relative to this repo). Override with:\n\n```bash\nOPENCLAW_SRC=\u002Fpath\u002Fto\u002Fopenclaw npm run electron:dev:openclaw\n```\n\nTo force a rebuild even when the version hasn't changed:\n\n```bash\nOPENCLAW_FORCE_BUILD=1 npm run electron:dev:openclaw\n```\n\nTo skip the automatic version checkout (e.g., when developing OpenClaw locally):\n\n```bash\nOPENCLAW_SKIP_ENSURE=1 npm run electron:dev:openclaw\n```\n\n### Production Build\n\n```bash\n# TypeScript compilation + Vite bundle\nnpm run build\n\n# ESLint check\nnpm run lint\n```\n\n## Packaging & Distribution\n\nUses [electron-builder](https:\u002F\u002Fwww.electron.build\u002F) to produce platform-specific installers. Output goes to `release\u002F`.\n\n```bash\n# macOS (.dmg)\nnpm run dist:mac\n\n# macOS - Intel only\nnpm run dist:mac:x64\n\n# macOS - Apple Silicon only\nnpm run dist:mac:arm64\n\n# macOS - Universal (both architectures)\nnpm run dist:mac:universal\n\n# Windows (.exe NSIS installer)\nnpm run dist:win\n\n# Linux (.AppImage & .deb)\nnpm run dist:linux\n```\n\nDesktop packaging (macOS \u002F Windows \u002F Linux) bundles a prebuilt OpenClaw runtime under `Resources\u002Fcfmind`.\nThe pinned OpenClaw version (`package.json` → `openclaw.version`) is automatically fetched and built during packaging — no manual setup needed.\nThe build is cached: if the runtime for the pinned version already exists locally, the build step is skipped automatically.\n\nYou can also build OpenClaw runtime manually:\n\n```bash\n# Build runtime for current host platform (auto-detect mac\u002Fwin\u002Flinux + arch)\nnpm run openclaw:runtime:host\n\n# Build explicit targets\nnpm run openclaw:runtime:mac-arm64\nnpm run openclaw:runtime:win-x64\nnpm run openclaw:runtime:linux-x64\n```\n\nOverride OpenClaw source path with an environment variable when needed:\n\n```bash\nOPENCLAW_SRC=\u002Fpath\u002Fto\u002Fopenclaw npm run dist:win\n```\n\nWindows builds bundle a portable Python runtime under `resources\u002Fpython-win` (included as installer resource `python-win`), so end users do not need to install Python manually.\nThe bundled runtime is interpreter-focused and does not preinstall LobsterAI skill Python packages; those can be installed at runtime on demand.\nBy default, packaging downloads the official Python embeddable runtime from python.org if no prebuilt archive is provided.\nFor offline\u002Fnon-network builds, provide a prebuilt runtime archive explicitly.\n\nOffline\u002Fruntime source options for packaging:\n- `LOBSTERAI_PORTABLE_PYTHON_ARCHIVE`: Local prebuilt runtime archive path (recommended for offline CI\u002FCD)\n- `LOBSTERAI_PORTABLE_PYTHON_URL`: Download URL for the prebuilt runtime archive\n- `LOBSTERAI_WINDOWS_EMBED_PYTHON_VERSION` \u002F `LOBSTERAI_WINDOWS_EMBED_PYTHON_URL` \u002F `LOBSTERAI_WINDOWS_GET_PIP_URL`: Optional overrides for Windows-host bootstrap sources\n\n## Architecture\n\nLobsterAI uses Electron's strict process isolation. All cross-process communication goes through IPC.\n\n### Process Model\n\n**Main Process** (`src\u002Fmain\u002Fmain.ts`):\n- Window lifecycle management\n- SQLite persistence\n- OpenClaw agent engine (primary) + CoworkEngineRouter dispatch layer\n- IM Gateways — WeChat, WeCom, DingTalk, Feishu, QQ, Telegram, Discord, POPO remote access\n- 40+ IPC channel handlers\n- Security: context isolation enabled, node integration disabled, sandbox enabled\n\n**Preload Script** (`src\u002Fmain\u002Fpreload.ts`):\n- Exposes `window.electron` API via `contextBridge`\n- Includes `cowork` namespace for session management and stream events\n\n**Renderer Process** (`src\u002Frenderer\u002F`):\n- React 18 + Redux Toolkit + Tailwind CSS\n- All UI and business logic\n- Communicates with main process exclusively through IPC\n\n### Directory Structure\n\n```\nsrc\u002F\n├── main\u002F                           # Electron main process\n│   ├── main.ts                     # Entry point, IPC handlers\n│   ├── preload.ts                  # Security bridge\n│   ├── sqliteStore.ts              # SQLite storage\n│   ├── coworkStore.ts              # Session\u002Fmessage CRUD\n│   ├── skillManager.ts             # Skill management\n│   ├── im\u002F                         # IM gateways (WeChat\u002FWeCom\u002FDingTalk\u002FFeishu\u002FQQ\u002FTelegram\u002FDiscord\u002FPOPO)\n│   └── libs\u002F\n│       ├── agentEngine\u002F\n│       │   ├── coworkEngineRouter.ts    # Dispatch layer (routes sessions to the active engine)\n│       │   ├── openclawRuntimeAdapter.ts # Primary OpenClaw gateway adapter\n│       │   └── claudeRuntimeAdapter.ts  # Legacy built-in adapter (deprecated)\n│       ├── coworkRunner.ts          # Legacy built-in executor (deprecated)\n│       ├── openclawEngineManager.ts # OpenClaw runtime lifecycle (install\u002Fstart\u002Fstatus)\n│       ├── openclawConfigSync.ts    # Syncs cowork config → OpenClaw config files\n│       └── coworkMemoryExtractor.ts # Memory extraction\n│\n├── renderer\u002F                        # React frontend\n│   ├── App.tsx                     # Root component\n│   ├── types\u002F                      # TypeScript definitions\n│   ├── store\u002Fslices\u002F               # Redux state slices\n│   ├── services\u002F                   # Business logic (API\u002FIPC\u002Fi18n)\n│   └── components\u002F\n│       ├── cowork\u002F                 # Cowork UI components\n│       ├── artifacts\u002F              # Artifact renderers\n│       ├── skills\u002F                 # Skill management UI\n│       ├── im\u002F                     # IM integration UI\n│       └── Settings.tsx            # Settings panel\n│\nSKILLs\u002F                              # Skill definitions\n├── skills.config.json              # Skill enable\u002Fdisable and ordering\n├── web-search\u002F                     # Web search\n├── docx\u002F                           # Word document generation\n├── xlsx\u002F                           # Excel spreadsheets\n├── pptx\u002F                           # PowerPoint presentations\n├── pdf\u002F                            # PDF processing\n├── remotion\u002F                       # Video generation\n├── playwright\u002F                     # Web automation\n└── ...                             # More skills\n```\n\n## Cowork System\n\nCowork is the core feature of LobsterAI — an AI working session system powered by OpenClaw as the primary agent engine. Designed for productivity scenarios, it can autonomously complete complex tasks like data analysis, document generation, and information retrieval.\n\n### Execution Modes\n\n| Mode | Description |\n|------|-------------|\n| `auto` | Automatically selects based on context |\n| `local` | Direct local execution, full speed |\n\n### Stream Events\n\nCowork uses IPC events for real-time bidirectional communication:\n\n- `message` — New message added to the session\n- `messageUpdate` — Incremental streaming content update\n- `permissionRequest` — Tool execution requires user approval\n- `complete` — Session execution finished\n- `error` — Execution error occurred\n\n### Permission Control\n\nAll tool invocations involving file system access, terminal commands, or network requests require explicit user approval in the `CoworkPermissionModal`. Both single-use and session-level approvals are supported.\n\n## Skills System\n\nLobsterAI ships with 29 built-in skills covering productivity, creative, investment research, and automation scenarios, configured via `SKILLs\u002Fskills.config.json`:\n\n| Skill | Function | Typical Use Case |\n|-------|----------|-----------------|\n| web-search | Web search | Information retrieval, research |\n| docx | Word document generation | Reports, proposals |\n| xlsx | Excel spreadsheet generation | Data analysis, dashboards |\n| pptx | PowerPoint creation | Presentations, business reviews |\n| pdf | PDF processing | Document parsing, format conversion |\n| remotion | Video generation (Remotion) | Promo videos, data visualization animations |\n| seedance | AI video generation (Seedance) | Text-to-video, image-to-video |\n| seedream | AI image generation (Seedream) | Text-to-image, image editing and fusion |\n| playwright | Web automation | Browser tasks, automated testing |\n| canvas-design | Canvas drawing and design | Posters, chart design |\n| frontend-design | Frontend UI design | Prototyping, page design |\n| develop-web-game | Web game development | Quick game prototypes |\n| stock-analyzer | Stock deep analysis | A-share research, valuation and financials |\n| stock-announcements | Stock announcement retrieval | Listed company filings, disclosure lookup |\n| stock-explorer | Stock information explorer | Basic stock info, market overview |\n| content-planner | Content planning | Topic strategy, content calendar creation |\n| article-writer | Article writing | Multi-style long-form content, social media posts |\n| daily-trending | Daily trending | Hot topic aggregation, trend tracking |\n| films-search | Film\u002FTV resource search | Movie and series cloud-drive download links |\n| music-search | Music resource search | Song and album cloud-drive download links |\n| technology-news-search | Tech news search | Programming, AI, and IT industry updates (disabled by default) |\n| weather | Weather queries | Weather information |\n| local-tools | Local system tools | File management, system operations |\n| imap-smtp-email | Email send\u002Freceive | Email processing, auto-replies |\n| create-plan | Plan authoring | Project planning, task breakdown |\n| youdaonote | Youdao Note | Note management, to-dos, web clipping |\n| skill-vetter | Skill security audit | Safety check before installing third-party skills |\n| skill-creator | Custom skill creation | Extend new capabilities |\n\nCustom skills can be created via `skill-creator` and hot-loaded at runtime.\n\n## Scheduled Tasks\n\nLobsterAI supports scheduled tasks that let the Agent automatically execute recurring work on a set schedule.\n\n### How to Create\n\n- **Conversational** — Tell the Agent in natural language (e.g., \"collect tech news for me every morning at 9 AM\"), and it will create the scheduled task automatically\n- **GUI** — Add tasks manually in the Scheduled Tasks management panel with a visual interface for configuring timing and task content\n\n### Typical Scenarios\n\n| Scenario | Example |\n|----------|---------|\n| News Collection | Automatically gather industry news and generate a summary every morning |\n| Inbox Cleanup | Periodically check your inbox, categorize emails, and summarize important ones |\n| Data Reports | Generate a weekly business data analysis report |\n| Content Monitoring | Regularly check specific websites for changes and send notifications |\n| Work Reminders | Generate to-do lists or meeting notes on a schedule |\n\nScheduled tasks are powered by Cron expressions, supporting minute, hourly, daily, weekly, and monthly intervals. When a task fires, it automatically starts a Cowork session. Results can be viewed on the desktop or pushed to your phone via IM.\n\n## IM Integration — Mobile Remote Control\n\nLobsterAI can bridge the Agent to multiple IM platforms. Send a message from your phone via IM to remotely trigger the desktop Agent — command your personal assistant anytime, anywhere.\n\n| Platform | Protocol | Description |\n|----------|----------|-------------|\n| WeChat | OpenClaw gateway | WeChat account integration, supports DMs and group chats |\n| WeCom | OpenClaw gateway | WeCom app bot, supports DMs and group chats |\n| DingTalk | OpenClaw gateway | Enterprise bot, supports multiple instances |\n| Feishu | OpenClaw gateway | Feishu\u002FLark app bot, supports multiple instances |\n| QQ | OpenClaw gateway | QQ bot (official Bot API), supports multiple instances |\n| Telegram | OpenClaw gateway | Bot API, supports webhook and polling |\n| Discord | OpenClaw gateway | Discord bot, supports servers and DMs |\n| NetEase IM | node-nim V2 SDK | [NetEase IM P2P messaging](https:\u002F\u002Fdoc.yunxin.163.com\u002Fmessaging2\u002Fgetting-started) |\n| NetEase Bee | node-nim V2 SDK | [NetEase Bee personal digital assistant](https:\u002F\u002Fwp.m.163.com\u002F163\u002Fhtml\u002Fbee\u002Flobsterai_guide\u002Findex.html) |\n| NetEase POPO | OpenClaw gateway | NetEase POPO enterprise IM, supports WebSocket and Webhook |\n\nConfigure the corresponding platform Token\u002FSecret in the Settings panel to enable. Once set up, you can send instructions directly to the Agent from your phone IM (e.g., \"analyze this dataset\", \"make a weekly summary PPT\"), and the Agent will execute on the desktop and return results.\n\n## Persistent Memory\n\nLobsterAI's memory system is built on OpenClaw and persists information as files in the working directory, so the Agent remembers your preferences and context across sessions.\n\n### Memory File Structure\n\n| File | Purpose |\n|------|---------|\n| `MEMORY.md` | Durable facts, preferences, and decisions — loaded automatically at session start |\n| `memory\u002FYYYY-MM-DD.md` | Daily notes — preserves recent context |\n| `USER.md` | User profile (name, occupation, habits, long-term info) |\n| `SOUL.md` | Agent personality and behavioral principles |\n\n### How Memories Are Written\n\n- **Explicit instructions** — Say \"remember that…\" or \"from now on reply in English,\" and the Agent calls the `write` tool to save to `MEMORY.md` before acknowledging — no silent \"mental notes\"\n- **Agent-initiated** — The Agent can proactively write important findings, configurations, or environment notes to memory files during task execution, without explicit prompting\n- **GUI management** — Add, edit, or delete entries in `MEMORY.md` directly from the Settings panel; keyword search is supported\n\n### How It Works\n\nAt the start of every session, OpenClaw reads `SOUL.md`, `USER.md`, today's and yesterday's `memory\u002FYYYY-MM-DD.md`, and `MEMORY.md` in sequence, injecting them as context. This lets the Agent pick up where it left off without you needing to re-explain preferences.\n\nMemory writes go through file tools — there is no background extraction or inference. Content is fully under user or Agent control.\n\n## Data Storage\n\nAll data is stored in a local SQLite database (`lobsterai.sqlite` in the user data directory).\n\n| Table | Purpose |\n|-------|---------|\n| `kv` | App configuration key-value pairs |\n| `cowork_config` | Cowork settings (working directory, system prompt, execution mode) |\n| `cowork_sessions` | Session metadata |\n| `cowork_messages` | Message history |\n| `user_memories` | User memory entries |\n| `user_memory_sources` | Memory source tracking |\n| `agents` | Custom Agent configurations |\n| `mcp_servers` | MCP server configurations |\n| `im_config` | IM gateway config (tokens\u002Fsecrets per platform) |\n| `im_session_mappings` | Mapping between IM conversations and Cowork sessions |\n| `scheduled_task_meta` | Scheduled task metadata (origin and binding info) |\n\n## Security Model\n\nLobsterAI enforces security at multiple layers:\n\n- **Process Isolation** — Context isolation enabled, node integration disabled\n- **Permission Gating** — Tool invocations require explicit user approval\n- **Sandbox Execution** — Optional OpenClaw sandbox for isolated execution\n- **Content Security** — HTML sandbox, DOMPurify, Mermaid strict mode\n- **Workspace Boundaries** — File operations restricted to the designated working directory\n- **IPC Validation** — All cross-process calls are type-checked\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Framework | Electron 40 |\n| Frontend | React 18 + TypeScript |\n| Build | Vite 5 |\n| Styling | Tailwind CSS 3 |\n| State | Redux Toolkit |\n| AI Engine | OpenClaw (primary) |\n| Storage | better-sqlite3 |\n| Markdown | react-markdown + remark-gfm + rehype-katex |\n| Diagrams | Mermaid |\n| Security | DOMPurify |\n| IM | @larksuiteoapi\u002Fnode-sdk · nim-web-sdk-ng · @wecom\u002Fwecom-aibot-sdk · OpenClaw gateway (DingTalk \u002F Telegram \u002F Discord \u002F QQ etc.) |\n\n## Configuration\n\n### App Configuration\n\nApp-level config is stored in the SQLite `kv` table, editable through the Settings panel.\n\n### Cowork Configuration\n\nCowork session config includes:\n\n- **Working Directory** — Root directory for Agent operations\n- **System Prompt** — Customize Agent behavior\n- **Execution Mode** — `auto` \u002F `local`\n\n### Internationalization\n\nCurrently English and Chinese are supported. Switch languages in the Settings panel.\n\n## OpenClaw Version Management\n\nLobsterAI pins its OpenClaw dependency to a specific release version, declared in `package.json`:\n\n```json\n{\n  \"openclaw\": {\n    \"version\": \"v2026.3.2\",\n    \"repo\": \"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw.git\"\n  }\n}\n```\n\n### How It Works\n\n| Step | What happens | When |\n|------|-------------|------|\n| **Version ensure** | Clones or checks out the pinned tag in `..\u002Fopenclaw` | Before every runtime build |\n| **Build cache check** | Compares pinned version with `runtime-build-info.json` | Before every runtime build |\n| **Full build** | `pnpm install` → `build` → `ui:build` → pack to asar | Only when version changed |\n\n### Updating OpenClaw Version\n\n1. Change `openclaw.version` in `package.json` to the desired release tag\n2. Run `npm run electron:dev:openclaw` or `npm run dist:win` — the new version is fetched and built automatically\n3. Commit the `package.json` change\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `OPENCLAW_SRC` | Path to OpenClaw source directory | `..\u002Fopenclaw` |\n| `OPENCLAW_FORCE_BUILD` | Set to `1` to force rebuild even if version matches | — |\n| `OPENCLAW_SKIP_ENSURE` | Set to `1` to skip automatic version checkout | — |\n| `LOBSTERAI_SQLITE_BACKUP_ALWAYS_ON_STARTUP` | Set to `1` or `true` to force an automatic backup on every app startup for QA\u002Ftesting | — |\n\n## Development Guidelines\n\n- TypeScript strict mode, functional components + Hooks\n- 2-space indentation, single quotes, semicolons\n- Components: `PascalCase`; functions\u002Fvariables: `camelCase`; Redux slices: `*Slice.ts`\n- Tailwind CSS preferred; avoid custom CSS\n- Commit messages follow `type: short imperative summary` (e.g., `feat: add artifact toolbar`)\n\n## Testing\n\nUnit tests use [Vitest](https:\u002F\u002Fvitest.dev\u002F) and are co-located with the source files they cover.\n\n```bash\n# run all tests\nnpm test\n\n# run tests for a specific module (Vitest filename filter)\nnpm test -- logger\nnpm test -- cowork\n```\n\nNew test files go next to the source file they test, using the `.test.ts` extension:\n\n```\nsrc\u002Fmain\u002F\n├── foo.ts\n└── foo.test.ts\n```\n\nExample (`src\u002Fmain\u002Flogger.test.ts`):\n\n```ts\nimport { test, expect } from 'vitest';\n\ntest('log file pattern matches daily name', () => {\n  expect(\u002F^main-\\d{4}-\\d{2}-\\d{2}\\.log$\u002F.test('main-2026-03-20.log')).toBe(true);\n});\n```\n\nAvoid importing Electron-only APIs (e.g. `electron-log`) in tests — inline any logic that depends on them instead.\n\n\n\n## Community\n\nJoin our WeChat group to get help, share feedback, and stay up to date:\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fshared.ydstatic.com\u002Fmarket\u002Fsouti\u002FfihserChatWeb\u002Fonline\u002F1.3.5\u002Fdist\u002Fassets\u002Fwechat_group-ButC0ZCl.jpg\" alt=\"WeChat Community QR Code\" width=\"200\">\n\u003C\u002Fp>\n\n## Contributing\n\n1. Fork this repository\n2. Create your feature branch (`git checkout -b feature\u002Fyour-feature`)\n3. Commit your changes (`git commit -m 'feat: add something'`)\n4. Push to the branch (`git push origin feature\u002Fyour-feature`)\n5. Open a Pull Request\n\nPlease include in your PR description: a summary of changes, linked issue (if any), screenshots for UI changes, and notes on any Electron-specific behavior changes.\n\n## License\n\n[MIT License](LICENSE)\n\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=netease-youdao\u002FLobsterAI&type=date&legend=top-left)](https:\u002F\u002Fwww.star-history.com\u002F#netease-youdao\u002FLobsterAI&type=date&legend=top-left)\n\n---\n\nBuilt and maintained by [NetEase Youdao](https:\u002F\u002Fwww.youdao.com\u002F).\n","LobsterAI 是由网易有道开发的一款全天候个人助理程序，旨在帮助用户处理包括数据分析、制作演示文稿、生成视频、撰写文档、网络搜索、发送邮件及任务调度等在内的多种日常工作任务。其核心功能包括协同工作模式，允许在本地或沙盒环境中执行工具和命令，并支持通过微信、企业微信、钉钉、飞书、QQ、Telegram 和 Discord 等即时通讯软件远程控制。该项目采用 TypeScript 编写，基于 Electron 和 React 构建，适用于需要提高工作效率的各种场景，如办公室工作、远程协作和个人事务管理等。 LobsterAI 还具有持久记忆特性，能够根据用户的使用习惯自动优化服务体验。",2,"2026-06-11 03:50:48","high_star"]