Files
makelore/README.md
brother7 e97a7ce9df feat: 增加共享 Agent Browser 调试能力
需求:在 AI 编程会话中让用户与 Agent 共享同一浏览器页面,并查看控制台与网络信息。

实现:新增沙箱浏览器内核、Host API/渲染器面板、OpenCode 工具接入及安全边界测试。
2026-07-31 14:53:36 +08:00

107 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Makelore 2.0
**一念成光,万物可创。**
Makelore 是一个面向软件与视觉创作的 AI 桌面工作台。当前版本为 `2.0.0`,包含两个已开通产品模块,并保留一个学习模块入口:
- `Makelore CodeAI 编程`:管理本地项目、项目 Agent、会话、文件上下文、代码变更和运行时。
- `Makelore CanvasAI 绘画`以项目、Agent 和对话组织云端视觉创作。
- `Makelore LearningAI 学习`:数学与知识宇宙主题的学习入口,当前暂未开通;开屏页和模块切换菜单保留置灰入口,不能进入。
作品广场、素材广场、发布上传和云部署页面不属于 Makelore 2.0 工作台。项目成果预览 `/deliverables` 继续保留。
## 当前产品状态
- 桌面技术栈Electron、React 19、Vite、TypeScript、Zustand、Tailwind CSS。
- AI 编程运行时Electron Main 管理项目内声明的 `opencode-ai` 依赖Renderer 不直接启动或调用运行时。
- 共享开发浏览器AI 编程右侧提供项目级浏览器,用户与 Agent 查看并调试同一实时页面、Console 和 Network支持本地与公网开发地址。
- 后端边界Renderer 通过 Main 所有的 Host API 访问认证、模型、同步、更新、语音、图像与运行时能力。
- AI 绘画:生产环境使用云端工作区契约;上游不可用时展示明确的不可用状态。未打包开发环境可使用隔离的本地适配器。
- 视觉系统:单一浅色主题,品牌蓝 `#3A5578`、星火橙 `#F26A3D`、白色画布与低饱和蓝灰层级。
- 品牌资产:生产 SVG、PNG、应用图标、托盘图标与安装器视觉位于 [`resources/brand/`](resources/brand/README.md) 和 `resources/icons/`
## 安装与开发
项目使用 `package.json` 中固定版本的 pnpm。
```bash
pnpm install --frozen-lockfile
pnpm run dev
```
开发环境中的 AI 绘画创作空间默认使用仅供开发的本地适配器;它会把项目数据保存在本机用户数据目录,并生成本地占位图。也可以使用下面的显式命令启动同一模式:
```bash
pnpm run dev:image-workspace:local
```
该模式只允许在未打包应用中启用,使用独立开发数据,并保持与生产界面相同的工作区结构。打包应用和生产环境仍使用云端工作区契约。
## 质量检查
```bash
pnpm run typecheck
pnpm run lint:check
pnpm test
pnpm run build:vite
```
Electron E2E
```bash
pnpm run test:e2e
```
## 打包
```bash
pnpm run package:mac
pnpm run package:win
pnpm run package:linux
```
各平台打包脚本会先准备目标平台所需的 Python 与运行时资源,产物写入忽略的 `release/` 目录。
## 代码结构
| 路径 | 职责 |
| --- | --- |
| `src/` | React Renderer、页面、组件和状态管理 |
| `electron/` | Electron Main、Preload、Host API、运行时与系统能力 |
| `shared/` | Main 与 Renderer 共享的契约和项目配置 |
| `.opencode/` | 随产品提供的 Skill 与 OpenCode 插件 |
| `resources/` | 品牌、图标和打包资源 |
| `scripts/` | 运行时准备、图标生成、打包与验证脚本 |
| `tests/` | Vitest、Electron runtime 与 Playwright 测试 |
## 架构约束
- Renderer 的后端调用统一经过 `src/lib/host-api.ts``src/lib/api-client.ts`
- Renderer 不直接调用 Electron IPC 或本地运行时 HTTP 地址。
- Electron Main 负责认证、秘密存储、运行时生命周期、代理、同步和系统集成。
- AI 编程项目配置以项目内 `.niancode/project.json` 为准;项目文件和会话保持本地。
- AI 绘画使用独立的云端工作区边界,不回退到 AI 编程项目数据。
- Agent 配置是项目所有的;稳定 id 用于保持会话兼容,显示名称可以修改。
### 共享开发浏览器
- Electron Main 持有 sandboxed `WebContentsView`、项目级持久浏览器配置和 CDP 连接;被调试页面不获得 Makelore Preload、Node.js 能力或 Host API 凭证。
- 用户和 Agent 操作同一个页面。Renderer 只负责显示、收起和布局Agent 通过 Main 代理的页面级 CDP 工具导航、读取 Console/Network 和执行调试命令。
- 非 Web 协议、文件注入、跨目标及宿主级命令会被阻止。面板收起或被弹窗遮挡时隐藏原生页面并暂停 Agent 调试;该能力独立于发布和部署。
### 项目联系人与会话
- 新项目默认没有联系人或 Agent用户在项目内手动创建联系人时必须填写名称、预设头像、职责和精确的 `provider/model`,提示词与 Skill 属于后置高级设置。
- 一个联系人可以拥有多条互相独立的 OpenCode Session联系人、会话、归档时间、置顶和未读数分别由项目配置与 `.niancode/conversations.json` 保存。
- 联系人展开后按时间展示会话,默认显示前五条,更多会话通过“更多会话”展开;每条会话只显示一行精简的最新消息预览和右侧时间,归档按钮仅在悬浮或聚焦会话卡片时出现,选中联系人会在卡片上保持明确的展开状态反馈。
- 创建联系人后先进入联系人对话,首条消息发送时才懒创建 OpenCode Session新会话从干净上下文开始标题从“新对话”在首条消息发送后自动生成也支持手动重命名。
- 不同 Session 由 OpenCode 自己并发运行;同一 Session 的后续消息按顺序排队。Makelore 只展示运行中、待处理和未读状态,不增加额外的全局并发锁。
- 归档联系人或单个会话前必须确认;归档会停止对应运行、保留历史,并可从列表底部恢复。未读按会话记录,打开一个会话只清除它自己的未读数。
- OpenCode 的问题与权限请求在当前会话内联处理,不自动批准;上下文压缩沿用 OpenCode 自动机制,在最新消息位置显示“正在压缩上下文”。
## 兼容标识
Makelore 2.0 继续保留既有 `niancode` 包名、应用 id、协议、数据目录、环境变量、API 请求头和服务标识,以兼容现有安装与服务。它们是内部技术契约,不是对外品牌名称。
本仓库只描述当前产品状态,不保存旧产品的任务记录、设计过程、工作日志或迁移历史。