LobsterAI 代码导读(不是趋势,直接看代码)
你如果要真正看懂这个项目,抓 5 条主链路就够了:启动链路、会话执行链路、权限链路、调度链路、存储链路。下面按文件和函数点名。
1) 启动与总线:src/main/main.ts
- 窗口与安全配置在
BrowserWindow初始化:nodeIntegration:false、contextIsolation:true、sandbox:true。 - 这文件是系统总线,注册大量
ipcMain.handle(...),核心域包括:cowork:session:*、skills:*、scheduledTask:*、im:*。 - 想看“功能入口”,从 IPC 名字反查即可。
2) 会话执行内核:src/main/libs/coworkRunner.ts
startSession():创建活跃会话状态,拼系统提示词,进入执行。continueSession():追加用户输入,走同一执行通道。runClaudeCode():执行分发器,决定 local 还是 sandbox。runClaudeCodeLocal():本机执行路径,挂上canUseTool回调做权限决策。runClaudeCodeInSandbox():沙箱执行路径(QEMU 相关运行时)。stopSession():会话停止与资源回收。
一句话:这个文件就是“执行控制面”。你看懂它,就看懂 LobsterAI 70%。
3) 权限与安全闸门(在 Runner 内)
enforceToolSafetyPolicy():策略层,先拦危险模式(如删除相关)。requestSafetyApproval():人工确认层,形成双层门控。canUseTool回调:每次工具调用都会经过这里。
这不是 UI 功能,而是“系统调用网关”。
4) 调度器:src/main/libs/scheduler.ts + scheduledTaskStore.ts
scheduleNext()/tick():下一次触发与轮询执行。executeTask():把定时任务转成一次 Cowork 会话。MAX_CONSECUTIVE_ERRORS = 5:连续失败自动禁用。scheduled_tasks/scheduled_task_runs:任务定义与执行历史。
这说明它不是聊天壳,而是“可无人值守执行器”。
5) 存储模型(SQLite)
- 会话、消息、记忆、定时任务都落 SQLite。
- 关键看:
coworkStore.ts、scheduledTaskStore.ts、sqliteStore.ts。 - 代码阅读建议:先看“读路径”,再看“写路径”,最后看“迁移与清理”。
6) 30 分钟读码路径(实操)
- 在
main.ts找ipcMain.handle('cowork:session:start')。 - 跳到
coworkRunner.startSession()。 - 跟进到
runClaudeCode(),分叉看 local/sandbox 两条路径。 - 在
canUseTool看权限决策。 - 再回到
scheduler.executeTask(),看“定时任务如何复用执行内核”。
7) 你该下断点的 8 个函数
main.ts: cowork:session:startCoworkRunner.startSessionCoworkRunner.runClaudeCodeCoworkRunner.runClaudeCodeLocalCoworkRunner.enforceToolSafetyPolicyCoworkRunner.requestSafetyApprovalScheduler.tickScheduler.executeTask
如果你愿意,我下一版直接做“按真实调用栈逐行讲解”(从一次 message 进入到工具执行返回),会更像源码带读课。