Merge remote-tracking branch 'upstream/main'
Some checks failed
Publish container images / Quality checks (push) Has been cancelled
Publish container images / Resolve build version (push) Has been cancelled
Publish container images / Build open-ai-canvas-backend (amd64) (push) Has been cancelled
Publish container images / Build open-ai-canvas-backend (arm64) (push) Has been cancelled
Publish container images / Build open-ai-canvas-web (multi) (push) Has been cancelled
Publish container images / Build open-ai-canvas-yingce-agent (multi) (push) Has been cancelled
Publish container images / Publish open-ai-canvas-backend manifest (push) Has been cancelled
Publish container images / Publish open-ai-canvas-web manifest (push) Has been cancelled
Publish container images / Publish open-ai-canvas-yingce-agent manifest (push) Has been cancelled
Publish container images / Publish release assets (push) Has been cancelled

This commit is contained in:
2026-10-10 09:17:28 +08:00
1919 changed files with 239870 additions and 40699 deletions

View File

@@ -18,6 +18,32 @@
## 2. 开始工作前
### Agent 本地开发
详细说明请参考 [docs/AGENT_LOCAL_DEVELOPMENT.md](docs/AGENT_LOCAL_DEVELOPMENT.md)。
**快速启动**:
```bash
# 1. 安装 Agent runtime 依赖
cd backend/agent-runtime/pi && npm install && cd ../../..
# 2. 启动后端(自动使用嵌入模式)
cd backend
CANVAS_BACKEND_DATA_DIR=../.local/project-workbench-debug go run ./cmd/server
# 3. 启动前端
cd web && bun run dev
```
本地开发不设置 `YINGCE_AGENT_URL` 时,后端在本进程内启动 Node,无需单独启动 yingce-agent。
生产 Compose 设置 `YINGCE_AGENT_URL` 后只调用 yingce-agent 容器。远程服务失败时不要回退到内嵌进程,否则同一步可能执行两次。不要删除 `yingce-agent/` 或把它从发布流程里撤掉。
---
### 其他本地开发说明
1. 先读取任务涉及的入口、调用方、配置、锁文件和相邻测试;先理解现状,再决定是否抽象或重构。
2. 使用 `rg` / `rg --files` 搜索,优先并行读取相关文件。不要为了“统一风格”改动无关模块、依赖、格式或用户已有修改。
3. 先形成目标边界:页面负责什么、service 负责什么、handler/service/repository 如何分层、数据和错误如何流动。新增 helper 必须消除真实重复或隔离明确协议,不能只透传参数。
@@ -41,7 +67,7 @@
- `backend/internal/handler/`:HTTP 入参、鉴权上下文、调用 service、返回统一响应;不放业务判断和数据库查询。
- `backend/internal/service/`:稳定导入面。只再导出 `internal/app` 的类型、常量和包级函数(`aliases_*.go`)。handler/cmd 继续 import 本包。
- `backend/internal/app/`:HTTP 组合根和尚未拆出的业务实现。校验、权限、跨域编排从这里进入。画布生成调度仍主要在 `provider.go`;文本 / 图片 / 视频遗留 / 音频 / HTTP / 声明式协议分别在 `provider_text.go`、`provider_image.go`、`provider_video.go`、`provider_audio.go`、`provider_http_client.go`、`provider_protocol.go`。技能库在 `internal/skills`,提示词与风格在 `internal/prompts`,登录注册在 `internal/auth`,画布分享在 `internal/canvas`,资源引用解析在 `internal/assets`,运行时策略/限流/worker 在 `internal/platform`,错误码与通用工具在 `internal/kernel`,出站 SSRF 在 `internal/outbound`。域包不得 import `internal/service` 或 `internal/app`。
- `backend/internal/app/`:HTTP 组合根和尚未拆出的业务实现。校验、权限、跨域编排从这里进入。画布生成调度仍主要在 `provider.go`;文本 / 图片 / 视频遗留 / 音频 / HTTP / 声明式协议分别在 `provider_text.go`、`provider_image.go`、`provider_video.go`、`provider_audio.go`、`provider_http_client.go`、`provider_protocol.go`。技能库在 `internal/skills`,提示词与风格在 `internal/prompts`,登录注册在 `internal/auth`,画布分享在 `internal/canvas`,资源引用解析在 `internal/assets`,运行时策略/限流/worker 在 `internal/platform`,错误码与通用工具在 `internal/kernel`,出站 SSRF 在 `internal/outbound`,Agent 上下文检查点契约在 `internal/agentcontext`。域包不得 import `internal/service` 或 `internal/app`。
- `backend/internal/repository/`:GORM 查询和持久化;不承载业务策略。
- `backend/internal/model/`:结构、枚举和简单模型方法;不调用外部服务。
- `backend/internal/provider/`:模型供应商能力和协议实现。