基于 OpenCode 的个人 AI 助手 - 支持飞书和邮箱通讯渠道
- 🤖 OpenCode 集成: 通过 HTTP API 连接 OpenCode Server,支持多模型切换
- 🧭 自主执行策略: 默认优先自主决策与自动重试,减少把流程决策抛给用户
- 💾 记忆系统: SQLite + ChromaDB 持久化存储,支持上下文记忆和长期记忆
- 🧠 自动记忆提取: 从对话中自动识别并保存用户的习惯、偏好、个人信息等,无需手动触发
- 💡 记忆提示: 聊天输入时实时显示相关记忆提示,让 AI 回复更贴合用户背景
- ⏰ 定时任务: 完整 Cron 表达式支持,AI 辅助创建任务
- 🔔 通知系统: 飞书/邮箱/应用内/系统桌面通知,用户可配置
- 📂 记忆管理: 归档查看、导出导入、自动清理、自动整理,支持按类别过滤
- 📝 日志系统: 详细执行日志,可配置保留期限
- 🌐 局域网访问: 支持通过 IP 地址远程访问
- 📱 移动端适配: 响应式设计,支持手机浏览器
- 🖥️ 跨平台: Electron 桌面应用 + Web 应用
- 🛠️ 技能系统: 内置 web_search / web_fetch / news / file_reader / pdf / docx / pptx / xlsx 等技能,支持自定义目录扩展
- 🔌 MCP 支持: 管理 MCP 服务器(stdio/SSE),AI 自动调用匹配的外部工具
- 🏖️ 沙箱执行: 工作目录隔离执行环境,AI 生成的代码在独立
sandbox_workspace/目录中运行,无需 QEMU/Docker,开箱即用
- Python 3.11+
- Node.js 18+
- OpenCode CLI
opencode serve默认端口 4096(http://127.0.0.1:4096)
# 下载项目后,双击运行
scripts\install.bat# 下载项目后,运行
chmod +x scripts/install.sh
./scripts/install.sh应用程序运行依赖 OpenCode CLI,需要开启 opencode serve 才能连接 OpenCode Server。
# Windows(打开 cmd 运行)
opencode serve
# 或指定端口与监听地址(推荐)
opencode serve --port 4096 --hostname 127.0.0.1应用程序配置文件(设置 → 通用设置 → 配置文件 → config.json)里的 server_url 需要与 opencode serve 保持一致(端口/地址一致)。如果连不上,请优先检查该配置项。桌面端启动后端时会自动尝试拉起 OpenCode 服务,端口优先级为 127.0.0.1:1120 → 配置端口 → 127.0.0.1:4096。若 1120 被其他进程占用,会直接回退到后续候选端口,不会改用 1121/1122 这类随机端口。这样可优先为 Codebot 单独使用 1120,不干扰已有的 4096 服务。
打开任务计划程序:
- 搜索“任务计划程序”或按 Win + R → 输入
taskschd.msc→ 回车
创建任务:
- 右侧点击“创建任务”
常规:
- 名称:OpenCode Serve
- 勾选“使用最高权限运行”
- “仅限当用户登录时运行”或“不管是否登录都运行”根据需要选择
触发器:
- 新建 → “在登录时”或“开机时”
操作:
- 新建 → 操作选择“启动程序”
- 程序/脚本填:
C:\Users\Administrator\Scripts\opencode.cmd(根据你的实际路径;可打开 cmd 运行where opencode查找位置) - 添加参数填:
serve --port 4096 --hostname 127.0.0.1 - 起始位置填:
C:\Users\Administrator或你的工作目录
条件 / 设置:
- 可保持默认
保存任务后,每次开机或用户登录时,opencode serve 会自动启动。
# Windows
venv\Scripts\activate
python backend\main.py
# Linux/macOS
source venv/bin/activate
python backend/main.py如果 OpenCode Server 未启动,应用会在启动阶段自动尝试拉起;若本机策略或环境限制导致拉起失败,再手动启动并检查 config.json 中的 server_url。
cd electron
npm install
npm start开发模式下(从源码运行),Electron 默认使用 venv\\Scripts\\python.exe(若存在)启动 backend\\main.py,以确保后端代码变更立即生效;如需强制使用 backend\\dist\\codebot-backend.exe,可设置环境变量 CODEBOT_BACKEND_MODE=exe。
Electron 会优先使用应用内置的 opencode 可执行文件(electron/vendor/opencode 或打包后的 resources/opencode)自动拉起 opencode serve;若内置文件不可用或不可执行,会自动回退到系统 PATH 中的 opencode。桌面端会强制开启 OpenCode 自动拉起,并优先尝试 1120(回退配置端口与 4096)。
- 沙箱已重构为工作目录隔离模式,移除 QEMU 依赖,开箱即用,无需安装任何额外软件
- AI 生成的代码在独立的
data/sandbox/workspace/目录中执行,通过asyncio子进程运行,带超时控制 - 执行结果实时返回,支持
stdout/stderr/exit_code完整输出 - 旧版 QEMU 相关端点(
/install-qemu、/start、/stop)保留但返回本地模式说明,保持 API 向后兼容
- 本地访问: http://127.0.0.1:8080
- 局域网访问: http://<你的 IP>:8080
- 移动端: 使用手机浏览器访问局域网地址
OpenCode Server 默认地址:http://127.0.0.1:4096(由 opencode serve 提供 OpenAPI)
server_url 建议填写 OpenCode Server 的 HTTP 地址(例如 http://127.0.0.1:4096),后端会自动规范化为可访问的 HTTP 基础地址。连不上的话请优先检查 config.json 的 server_url 是否与 opencode serve 一致。
如果 OpenCode 未连接,不会在应用启动时弹窗打扰;当你在聊天中创建定时任务/保存记忆时,会优先使用本地规则解析并直接落库到“定时任务/记忆”,仅在解析失败且 OpenCode 可用时,才会通过 OpenCode HTTP API 请求获取结构化结果。意图识别阶段要求 OpenCode 输出结构化 JSON,若输出不符合格式会自动重试一次。后端会将 OpenCode Server 输出写入 logs/opencode_server.*.log 便于排查。
提醒类定时任务在 OpenCode 未连接时也会按计划执行并发送应用内通知;创建任务也不依赖 OpenCode(支持 20:05 与 20:05)。
codebot/
├── backend/ # Python 后端
│ ├── main.py # 入口:FastAPI 应用 + 生命周期管理
│ ├── config.py # 全局配置模型 (Pydantic)
│ ├── requirements.txt # Python 依赖
│ ├── core/ # 核心业务逻辑
│ │ ├── opencode_ws.py # OpenCode HTTP 客户端
│ │ ├── memory_manager.py # SQLite + ChromaDB 记忆管理
│ │ ├── memory_extractor.py # 自动记忆提取(对话中识别习惯/偏好)
│ │ ├── memory_organizer.py # AI 驱动的每日记忆整理(合并/去重)
│ │ ├── scheduler.py # Cron 定时任务调度器
│ │ ├── task_solver.py # 多策略 AI 任务求解器
│ │ ├── tool_dispatcher.py # 提示词路由(技能 & MCP 工具匹配)
│ │ ├── lark_ws_bot.py # 飞书 WebSocket 长连接机器人
│ │ └── sandbox/ # 沙箱隔离执行环境
│ │ ├── __init__.py # 模块入口
│ │ └── manager.py # 沙箱生命周期 & 工作目录隔离执行
│ ├── api/routes/ # REST API 路由
│ │ ├── chat.py # 对话 API
│ │ ├── memory.py # 记忆 CRUD & 搜索 API
│ │ ├── scheduler.py # 定时任务 API
│ │ ├── skills.py # 技能管理 API
│ │ ├── mcp.py # MCP 服务器管理 API
│ │ ├── config.py # 应用配置 API
│ │ ├── notifications.py # 通知 API
│ │ ├── lark.py # 飞书 Webhook/事件 API
│ │ ├── sandbox.py # 沙箱控制 API
│ │ └── logs.py # 执行日志 API
│ ├── database/
│ │ └── init_db.py # 数据库初始化 & 连接
│ └── services/
│ ├── notification.py # 通知分发(应用内/桌面/飞书/邮箱)
│ └── lark_bot.py # 飞书机器人(Webhook 模式)
├── frontend/ # Web UI (Vue 3)
│ ├── src/
│ │ ├── views/ # 页面视图(Chat / Memory / Scheduler / Skills / MCP / Logs / Settings)
│ │ ├── components/ # 可复用组件
│ │ └── stores/ # Pinia 状态管理
│ └── dist/ # 构建输出(由后端静态托管)
├── electron/ # Electron 桌面应用
│ ├── main.js # 主进程:启动 Python 后端 & 打开窗口
│ ├── preload.js # IPC 桥接(剪贴板 API)
│ └── package.json # electron-builder 打包配置
├── skills/ # 内置技能目录
│ ├── web_search/SKILL.md # 网页搜索技能
│ ├── web_fetch/SKILL.md # 网页抓取技能
│ ├── news/SKILL.md # 新闻获取技能
│ ├── file_reader/SKILL.md # 文件读取技能
│ ├── pdf/SKILL.md # PDF 处理技能
│ ├── pptx/SKILL.md # PowerPoint 技能
│ ├── docx/SKILL.md # Word 文档技能
│ └── xlsx/SKILL.md # Excel 技能
├── data/ # 运行时数据目录(自动生成)
│ ├── config.json # 用户配置(可通过 UI 编辑)
│ ├── conversations.db # SQLite:对话/记忆/通知
│ ├── scheduled_tasks.db # SQLite:定时任务 & 执行日志
│ ├── chroma/ # ChromaDB 向量索引
│ ├── backups/ # 记忆备份 ZIP 文件
│ └── mcp_servers.json # MCP 服务器配置
├── scripts/
│ ├── install.bat # Windows 一键安装脚本
│ └── install.sh # Linux/macOS 一键安装脚本
└── logs/ # 服务器 & OpenCode 运行日志
- 创建和管理多个对话,支持重命名、置顶、归档、删除
- 查看历史对话记录;进入"聊天"自动打开最近对话
- 支持多对话并行处理,多个对话可同时发送并后台执行
- 分组聊天: 支持将多个对话合并为群组模式
- 对话分享: 生成分享链接(
share_id),可供他人只读查看 - 支持在聊天中创建定时任务(如"每天8点写一个故事并保存到D盘""每天8:10提醒我喝水",可在定时任务中查看)
- 支持在聊天中保存记忆(如"帮我记住 广东揭阳普宁船埔 这个地址""10月2日是姐姐的生日",可在记忆中查看)
- 意图分类: 消息自动分类为"定时任务/保存记忆/普通对话",避免误判
- Agent 模式: 支持
plan(结构化规划)和build(直接执行)两种模式 - 消息一键复制(Electron 使用系统剪贴板)
- 支持文件附件上传;多模态模型支持图片分析
- 流式响应显示
- 流式展示 OpenCode 步骤事件(如
step-start/step-finish)与回复增量 - 流式链路采用
prompt_async + /global/event,可实时看到工具调用与文本增量 - 前端按事件实时追加渲染(步骤/工具事件逐条显示,正文增量分块刷新,不等待最终完成)
- 为避免浏览器渲染被单次大量事件阻塞,前端会在流式消费中定期让出事件循环,并将文本增量按帧合并刷新
- 同一对话默认复用 OpenCode 会话,减少上下文丢失,提升连续追问一致性
- 切换到“技能/设置”等页面时,任务继续在后台执行,除非用户主动点击终止
- 从“技能/设置”等页面返回聊天页后,会自动恢复当前对话的“处理中/排队中”状态,并在任务结束后自动刷新最新消息
- 从其他页面返回聊天页后,会按当前对话回放后台执行期间的工具调用事件,并保持原有事件顺序与展示位置
- 自动沉淀技能仅在复杂任务场景触发,过滤寒暄类和系统提示词污染内容,避免生成无意义技能
- 回答入库与展示前会自动清洗
system_policy/conversation_context等内部提示片段,避免污染最终回复与对话标题 - 聊天时间显示会将 SQLite 的 UTC 时间戳按本地时区换算,并正确显示“刚刚/分钟前/小时前”
- 聊天相对时间会自动刷新,避免时间长期停留在“刚刚”
- 用户手动上滑查看历史消息时,流式更新不再强制自动滚动到底部;仅在接近底部或主动发送消息时自动跟随
- 后台事件回放与数据库最终消息会做去重收敛,避免同一回复先流式出现后又重复插入一次
- 消息操作按钮(复制/撤销)统一固定在回复气泡右下角
- 应用与对话回复头像使用 logo.ico
- 上下文记忆: 自动保存对话历史
- 长期记忆: 保存用户习惯、偏好、事实信息(用于之后对话检索问答)
- 自动提取: 每次对话后,后台自动进行规则+AI双通道提取,识别重要信息并保存,无需依赖“记住”关键词
- 记忆类别:
habit(习惯)、preference(偏好)、profile(个人信息)、note(笔记)、contact(联系人)、address(地址) - 聊天记忆分类补充: 聊天中手动“记住”时会优先识别生日/姓名/职业/账号密码等个人信息关键词,自动归类到
profile - 记忆提示: 聊天输入时自动检索相关记忆并在输入框上方显示提示气泡,AI 回复时也会注明"根据我的记忆"
- 记忆搜索: 语义搜索相关记忆
- 记忆归档: 自动或手动归档旧记忆,支持按类别过滤查看
- 事实同步: 打开活跃记忆列表时,会将生日类事实记忆自动补齐到长期记忆,避免“有事实但列表为空”
- 删除联动: 删除带
memory_key/fact_key的长期记忆时会同步归档对应事实,防止生日等条目被自动补回 - 存储诊断: 提供
/api/memory/storage-status,可直接查看当前数据库路径与表计数 - 一键自检: 活跃记忆页支持“一键自检”,会检测数据库路径、关键表计数和接口读链路状态
- 备份恢复: 导出记忆为 ZIP 文件(保存至
data/backups/),或上传备份文件恢复(导入前自动备份当前数据) - 记忆整理: 每日在配置时间点(默认 03:00)自动用 AI 对活跃记忆进行优化,也可在"活跃记忆"页手动触发
- 聊天整理联动: 自动整理时会扫描新增聊天记录,从聊天中补充记忆,并尝试沉淀相关定时任务与可复用技能
- 自动清理: 可选同时清理超期的已归档长期记忆,活跃记忆永不被自动删除
- 页面入口: /memory/active、/memory/search、/memory/archived、/memory/backup、/memory/config
- Cron 表达式: 完整的 Cron 语法支持
- 意图识别: 本地规则优先分流“定时任务/记忆/普通对话”,避免“保存到D盘”这类任务被误判为记忆
- 判断依据: 同时满足“触发词(提醒/通知/闹钟等)+ 时间或日期线索(每天/周几/几点/10月20日等)”时优先判为定时任务
- 生日提醒特例: 对“记住我的生日,10月20日,我生日时提醒我”这类复合句,会同时保存生日记忆并创建每年生日提醒任务
- AI 辅助: 自然语言生成 Cron 表达式(OpenCode 不可用时降级为本地规则解析)
- 通知渠道: 飞书/邮箱/应用内通知
- 执行日志: 详细的任务执行记录
- 提醒任务: 不依赖 OpenCode 也能按计划触发通知;AI 类任务(生成内容/写文件等)需要 OpenCode 在线执行
示例:
- 每天早上 9 点生成日报:
0 9 * * * - 每周一上午 10 点开周会:
0 10 * * 1 - 每小时检查邮箱:
0 * * * *
- 主模型: 处理常规文本任务
- 多模态模型: 处理图片识别任务
- 自由切换: UI 界面随时切换模型
- 内置技能:
web_search(网页搜索)、web_fetch(抓取网页)、news(新闻获取)、file_reader(文件读取)、pdf(PDF 处理)、docx(Word 文档)、pptx(PowerPoint,含缩略图脚本)、xlsx(Excel,含重算脚本) - 技能定义: Markdown 文件(
SKILL.md)带 YAML front-matter(name、description),自动匹配用户提示 - 自动调度:
tool_dispatcher.py通过关键词 + 语义匹配,将SKILL.md内容注入到对应请求的提示词中 - 低干扰注入: 仅在高相关度下启用技能上下文,降低无关技能误触发
- 内部上下文隔离: 技能与 MCP 上下文仅用于内部推理,不向用户直接展示“技能参考”等标签
- 自动沉淀技能: 对高复用的已完成任务,自动生成可复用技能元数据,便于后续任务快速命中
- 对话生成技能: 本地规则生成,不调用 OpenCode,写入
codebot/skills - OpenCode 本地技能: 自动读取
~/.agents/skills,可在技能页卸载 - 自定义目录技能: 支持配置多个外部文件夹路径,自动扫描其中包含
SKILL.md的子目录并加载为只读技能,方便复用其他工具的技能文件 - 技能市场: 从 GitHub 安装技能(开发中)
- 支持 stdio 和 SSE 两种传输模式的 MCP 服务器配置
- SSE 模式的 MCP 工具由
tool_dispatcher.py自动调用:当用户提示词匹配到工具描述时,后端自动发起工具调用并将结果注入上下文 - 完整 CRUD 管理界面(
/mcp页面)及 REST API(/api/mcp)
- 工作目录隔离执行环境,AI 生成的代码在独立
data/sandbox/workspace/目录中运行 - 无需安装额外软件:移除 QEMU/Docker 依赖,开箱即用
- 基于
asyncio.create_subprocess_shell执行命令,支持超时控制 - 完整输出捕获:
stdout、stderr、exit_code - 执行模式:
local(工作目录隔离) - 可配置执行超时(秒,默认 300)
如果你在自行测试 WebSocket 时看到 server rejected WebSocket connection: HTTP 200,说明 OpenCode Server 在该端口提供的是 HTTP 服务而非 WebSocket。
当前版本 Codebot 使用 OpenCode 的 HTTP API(如 /global/health、/session)进行交互,即使你把 server_url 写成 WebSocket 形式,后端也会自动转换为对应的 HTTP 基础地址。
这通常表示内置的 opencode.exe 与当前系统架构不兼容。当前版本会自动尝试下一个候选命令(系统 PATH 中的 opencode/opencode-ai),无需手动修改代码。
- 建议先确认系统中可直接执行:
opencode --version - 若命令不存在,可重新安装 OpenCode CLI(例如
npm i -g opencode-ai)
如果直接访问或刷新 /memory/active、/skills 等前端路由地址,请确保通过后端服务地址访问(如 http://127.0.0.1:8080)。
当前版本后端已支持 SPA History 路由回退,刷新不会再丢失页面。
这是 SQLite 的限制:ALTER TABLE ... ADD COLUMN 不能使用 CURRENT_TIMESTAMP 这类“非固定常量”的默认值。
当前版本已在迁移逻辑中兼容旧库:新增 updated_at 列时不设置默认值,并对历史数据进行回填;升级后再次启动即可恢复正常。
这通常是因为上一次的后端/Electron 进程未完全退出,导致 data/chroma/chroma.sqlite3 被占用。
- 先确保所有 Codebot 相关进程已退出(关闭终端、退出 Electron)
- 重新启动后端
- 如仍失败,可手动将
data/chroma重命名为data/chroma_backup_manual后再启动(向量索引会自动重建)
这表示你在同一台机器上启动了多个 Codebot 后端实例(或其它程序占用了配置端口)。
- 用 PowerShell 查找占用进程:
netstat -ano | findstr :8080 - 结束占用进程:
taskkill /PID <PID> /F - 或修改
data/config.json里的network.port,换一个端口后再启动
在“记忆”页面的“配置”标签(/memory/config)可以配置:
- 自动清理: 启用后自动删除旧数据
- 保留天数: 数据保留时间(0=永久)
- 清理已归档记忆: 开启后,自动清理时会同时删除超期的已归档长期记忆(活跃记忆永不受影响)
- 自动归档: 启用后自动归档旧对话
- 归档天数: 多少天后的对话被归档
- 每日自动整理: 启用后,每天在指定时间自动触发 AI 整理
- 整理聊天记录: 启用后,自动整理会额外扫描新增聊天记录并联动补记忆/任务/技能
- 整理时间: 选择每日整理时间(默认 03:00)
- 上次整理时间: 显示最近一次整理完成时间,支持"立即整理"手动触发
记忆整理通过 AI 对长期记忆进行批量优化:
- 合并重复:相似或互相包含的条目合并为一条
- 补全描述:过于简短的内容根据语义适当补全
- 标准化格式:统一表达方式,去除冗词
- 修正矛盾:同类别中互相矛盾的条目,保留较新的,旧的归档
- 聊天补全:额外扫描新增聊天消息,补提取高价值信息到长期记忆
- 任务/技能联动:当聊天内容具备任务或技能线索时,自动触发任务创建与技能沉淀流程
无 OpenCode 连接时降级为规则模式(仅去重完全相同的条目)。每批最多处理 30 条,避免超出模型上下文窗口。活跃记忆永远不会被整理删除,只会被归档或更新内容。
在设置页面沙箱标签页可以配置:
- 启用沙箱: 开启后 AI 生成的代码在工作目录隔离环境中执行
- 执行超时: 单次命令执行超时(秒,默认 300)
- 无需安装 QEMU 或 Docker,所有执行均在本机 目录中进行
- 切换启用沙箱后,点击冒烟测试立即验证执行环境是否正常
在 MCP 页面(/mcp)管理外部工具服务器:
- stdio 模式: 通过标准输入/输出与本地进程通信
- SSE 模式: 通过 HTTP Server-Sent Events 与远程服务通信
- 添加后,AI 会在处理相关请求时自动调用匹配的 MCP 工具
在设置页面"技能目录"标签页可以管理自定义技能文件夹:
- 添加目录: 输入包含技能子文件夹的目录路径,每个子文件夹须包含
SKILL.md文件 - 多目录支持: 可添加多个不同路径,所有目录中的技能会统一显示在技能列表中
- 只读技能: 自定义目录中的技能为只读,不可在 UI 中删除或修改,需在文件系统中直接管理
- 来源标识: 技能列表中以"外部目录"标签区分自定义目录技能
- 应用内通知: 默认启用,在右上角查看,配置修改后即时生效
- 系统桌面通知: 推送至操作系统通知中心(Windows/macOS/Linux),需在设置中启用
- 飞书通知: 配置 Webhook URL
- 邮箱通知: 配置 SMTP 服务器,任务通知会按“全局开关+任务渠道”共同判定
- 邮箱测试: 设置页“邮箱配置”支持一键发送测试邮件,快速验证 SMTP 配置是否生效
- 地址兼容: 自动将国际化域名转为 Punycode;若邮箱本地部分含中文且 SMTP 不支持 SMTPUTF8,会返回明确错误提示
- 无公网地址推荐使用“长连接”订阅方式,只要机器能访问公网即可,无需公网 IP/域名/内网穿透:https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/request-url-configuration-case
- 在飞书开放平台创建企业自建应用,启用机器人能力,并在“事件与回调”里选择“使用长连接接收事件”
- 设置页面启用飞书机器人,接入方式选择“长连接”,填写 App ID / App Secret
- 如果日志出现
lark_oapi缺少EventDispatcherHandler/ws等提示,说明当前依赖版本不支持长连接,请改用 Webhook 模式 - Webhook 回调模式需要公网可访问的回调地址
/api/lark/events,且当前版本不支持加密回调
- 日志保留天数:默认 30 天(0=永久)
- 可手动清理旧日志
APP_TOKEN不再内置默认值,需在.env中显式配置随机高强度令牌.env.example仅保留占位符,避免误用示例值作为生产密钥backend/dist_build/与security-scan-*.json已加入.gitignore,避免将打包产物和扫描报告误提交- 本地开源清理建议先删除
backend/dist_build/、security-scan-*.json、security-report*.json再提交 - 推荐执行:
python C:\Users\yuhan\.agents\skills\security\scripts\scan_secrets.py . --severity medium --extensions .py,.js,.vue,.json,.env,.toml,.yaml,.yml,.md - 飞书 Webhook 日志默认不再记录消息正文,仅记录
chat_id和文本长度
# 激活虚拟环境
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# 启动开发服务器
python backend/main.pycd frontend
# 开发模式
npm run dev
# 构建生产版本
npm run buildcd electron
# 启动应用
npm start
# 打包应用
npm run build说明:npm start 会先构建前端(frontend/dist),再启动 Electron。
补充说明:
- Electron 启动时会先检查
http://127.0.0.1:8080/api/health,若后端已在运行则复用现有实例,不会重复拉起后端进程。 - 若检测到已有后端运行但
opencode_connected=false,Electron 会自动重启后端以重新拉起opencode serve。 - 开发模式下
npm start始终使用venv\Scripts\python.exe backend\main.py启动后端,确保运行的是当前源码。 - 开发模式若检测到 8080 端口为非源码后端(
runtime_source != source),会先终止该进程再拉起源码后端,避免看不到最新流式改动。 - 桌面端打包默认读取
backend/dist_build/codebot-backend作为后端资源目录。 - Windows 下建议使用根目录
build.bat执行完整打包流程(后端 PyInstaller + 前端构建 + Electron 安装包)。 - Windows 打包产物默认输出到
electron/dist/electron_new/。 - Windows 产物会同时生成安装版(
Codebot Setup 1.0.0.exe)和免安装版(Codebot 1.0.0.exe,portable)。 build.bat会自动清理electron/dist/electron_new/win-unpacked,避免旧桌面资源残留导致打包混淆。build.bat使用python -m pip安装依赖并关闭 pip 版本检查,兼容 Conda/venv 场景。build.bat使用python -m PyInstaller执行后端封装,避免pyinstaller.exe路径缺失导致构建失败。build.bat在前端/桌面依赖安装失败时会直接给出错误并退出,便于快速定位打包问题。- 若
electron-builder提示win-unpacked\\resources\\app.asar被占用,请先关闭已运行的Codebot.exe后再打包。 - 免安装分发请复制整个
electron/dist/electron_new/win-unpacked/目录,不要只拷贝Codebot.exe,否则会缺少resources下的后端与opencode运行文件导致无法启动。
POST /api/chat/conversations- 创建对话GET /api/chat/conversations- 获取对话列表GET /api/chat/conversations/{id}- 获取对话详情POST /api/chat/conversations/{id}/messages- 发送消息POST /api/chat/send_stream- 流式发送消息(NDJSON:步骤事件 + 回复增量)
GET /api/config/file-info- 获取当前生效配置文件路径POST /api/config/load-from-path- 从指定config.json路径导入并应用配置
GET /api/memory/memories- 获取记忆列表(支持category参数按类别过滤)POST /api/memory/memories- 创建记忆GET /api/memory/memories/search- 搜索记忆GET /api/memory/hints- 根据当前输入返回相关记忆提示(供前端实时展示)POST /api/memory/export- 导出记忆为 ZIP 文件(保存至服务端data/backups/)POST /api/memory/import- 上传 ZIP 备份文件并恢复(multipart/form-data)POST /api/memory/cleanup- 手动触发清理(支持cleanup_archived_memories参数)POST /api/memory/organize- 手动触发记忆整理(后台异步执行)GET /api/memory/organize/status- 查询整理任务状态及上次运行时间
GET /api/scheduler/tasks- 获取任务列表POST /api/scheduler/tasks- 创建任务PUT /api/scheduler/tasks/{id}- 更新任务DELETE /api/scheduler/tasks/{id}- 删除任务POST /api/scheduler/ai-generate- AI 生成 Cron 表达式
GET /api/skills- 获取技能列表POST /api/skills- 创建技能DELETE /api/skills/{name}- 删除技能
GET /api/mcp/servers- 获取 MCP 服务器列表POST /api/mcp/servers- 添加 MCP 服务器PUT /api/mcp/servers/{id}- 更新 MCP 服务器配置DELETE /api/mcp/servers/{id}- 删除 MCP 服务器
GET /api/notifications- 获取通知列表POST /api/notifications/{id}/read- 标记通知已读POST /api/notifications/read-all- 全部标记已读
GET /api/sandbox/status- 获取沙箱状态POST /api/sandbox/start- 启动沙箱 VMPOST /api/sandbox/stop- 停止沙箱 VMPOST /api/sandbox/execute- 在沙箱中执行命令
GET /api/logs- 获取执行日志列表DELETE /api/logs/cleanup- 清理过期日志
欢迎提交 Issue 和 Pull Request!
MIT License
- OpenCode - 开源 AI 编码助手
- OpenClaw - 个人 AI 助手
- Vue 3 - 渐进式 JavaScript 框架
- Element Plus - Vue 3 组件库
- FastAPI - 现代 Python Web 框架
- ChromaDB - 向量数据库
Codebot - 你的个人 AI 助手 🦞
余汉波 - 编程爱好者-量化交易和效率工具开发
- GitHub: @yuhanbo758
- Email: yuhanbo@sanrenjz.com
- Website: 三人聚智
python 程序管理工具下载:sanrenjz - 三人聚智-余汉波
效率工具程序管理下载:sanrenjz-tools - 三人聚智-余汉波
智能codebot下载:sanrenjz-codebot - 三人聚智-余汉波
⭐ 如果这个项目对您有帮助,请给它一个 Star!

