diff --git a/cc-haha/README.sync-conflict-20260430-013912-GVADS2N.md b/cc-haha/README.sync-conflict-20260430-013912-GVADS2N.md deleted file mode 100644 index 489e257..0000000 --- a/cc-haha/README.sync-conflict-20260430-013912-GVADS2N.md +++ /dev/null @@ -1,73 +0,0 @@ -# Heicode(源码目录 `cc-haha`) - -本目录实现 **Heicode** 终端与桌面客户端(CLI + Desktop + 本地服务)。目录名 `cc-haha` 为历史工程名;对外产品与文档统一称 **Heicode**(与 **Heicode Manager** 区分时亦称「Heicode 客户端」)。目标是把终端编程体验产品化,并对接企业模型平台。 - -## 你能得到什么 - -- 一个可运行的 CLI + Desktop 客户端 -- 双平台登录入口(TaijiAICloud / ClawdRouter) -- 动态模型拉取,不写死模型名单 -- 适配企业交付的品牌化 UI - -## 核心能力 - -- **登录流程**:优先浏览器 OAuth,兼容平台令牌登录 -- **模型发现**:通过 provider API 拉全量模型,不强绑定某一家模型 -- **运行方式**:同一套 provider 配置可在 CLI 与 Desktop 复用 -- **本地 sidecar**:桌面端通过本地服务层与 provider 通信,便于状态管理和扩展 - -## 目录速览 - -```text -cc-haha/ -├── bin/ # 启动入口(heicode、兼容别名) -├── src/ -│ ├── server/ # 本地 API/WS 服务 -│ │ ├── api/heicode-auth.ts # 登录相关接口 -│ │ ├── api/providers.ts # 模型拉取与 provider API -│ │ └── config/providerPresets.* -│ └── ... # CLI 逻辑 -├── desktop/ # Tauri + React 桌面端 -└── docs/ # 产品和技术文档 -``` - -## 快速启动 - -```bash -# 安装依赖 -bun install - -# 启动本地服务 -bun run src/server/index.ts - -# 启动桌面端(新终端) -cd desktop -bun run tauri dev -``` - -本地联调 TaijiAICloud: - -```bash -HEICODE_TAIJIAICLOUD_BASE_URL=http://localhost:3000 bun run src/server/index.ts -``` - -## 开发约定 - -- `providerPresets` 只保留产品确定的 provider -- UI 不暴露无关配置项(例如已移除 Providers 菜单) -- 模型来源以 provider 实际返回为准 -- 认证相关改动优先保持“零配置”用户体验 - -## 已完成改造(本分支) - -- 品牌统一为 `Heicode` -- 登录页去除 API Key 输入区域及相关提示文案 -- 设置页移除 Providers 菜单 -- 侧边栏和 About 移除 GitHub 链接与图标 -- 模型选择器按 provider API 动态拉取模型,修复无 Claude provider 仍展示 Claude 模型的问题 - -## 下一步建议 - -- 增加登录与模型发现的 E2E 冒烟测试 -- 将 OAuth 流程状态可视化(处理中/失败原因/重试) -- 增加 provider 超时与降级策略(提升桌面端可用性) diff --git a/docs/README.md b/docs/README.md index 3c5d0d8..a5c7f98 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,6 +7,7 @@ | 文档 | 用途 | |------|------| | [`vision-heicode-full-stack-agentic-dev.md`](./vision-heicode-full-stack-agentic-dev.md) | 产品愿景与协作范式(方向性,非排期) | +| [`saas-manager-agnet-architecture-plan.md`](./saas-manager-agnet-architecture-plan.md) | SaaS Manager / NewAPI / Agnet / Secret Store 的新边界与实施计划 | | [`glossary.md`](./glossary.md) | 术语表:Heicode / Manager / 客户端 / 子 agent / SK 等 | | [`architecture.md`](./architecture.md) | 架构图与关键数据流(mermaid) | | [`sk-lifecycle.md`](./sk-lifecycle.md) | SK(Skill 资产)单点真相:来源、快照、刷新、写权边界 | @@ -25,11 +26,11 @@ 适合实现 Agnet 平台侧、与 Heicode 对接编排或事件流的工程师。 -1. [`glossary.md`](./glossary.md) → [`architecture.md`](./architecture.md) +1. [`saas-manager-agnet-architecture-plan.md`](./saas-manager-agnet-architecture-plan.md) → [`glossary.md`](./glossary.md) → [`architecture.md`](./architecture.md) 2. [`integration/README.md`](./integration/README.md):集成方阅读地图 3. [`sk-lifecycle.md`](./sk-lifecycle.md):SK 边界(Heicode 端写、Agnet 只读快照) -4. [`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md):详细 API 设计 -5. [`integration/agnet-user-deployment-flow.md`](./integration/agnet-user-deployment-flow.md):用户绑定 Git / 云权限到部署子 Agnet 的产品流程 +4. [`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md):历史 API 草案,若与新架构计划冲突,以新架构计划为准 +5. [`integration/agnet-user-deployment-flow.md`](./integration/agnet-user-deployment-flow.md):历史用户流程草案,若与新架构计划冲突,以新架构计划为准 6. [`integration/heicode-oauth-flow.md`](./integration/heicode-oauth-flow.md):HeiCode 客户端 ↔ Manager 浏览器登录流程 7. 落地节奏:[`milestones/README.md`](./milestones/README.md)(M3–M5)+ [`milestones/STATUS.md`](./milestones/STATUS.md) diff --git a/docs/architecture.md b/docs/architecture.md index a80eb83..23e0891 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,8 +1,8 @@ # Heicode 架构与关键数据流 -本文用 mermaid 图示统一表达 **Heicode 客户端 / Manager / Agnet** 之间的边界与数据流,作为愿景与集成 API 设计的视觉补充。 +本文用 mermaid 图示统一表达 **Heicode 客户端 / Manager / Agnet / NewAPI / Secret Store** 之间的边界与数据流,作为愿景与 SaaS 架构计划的视觉补充。 -> 与文字版的对应关系:[`vision-heicode-full-stack-agentic-dev.md`](./vision-heicode-full-stack-agentic-dev.md) 第五节、[`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md) §1.1 / §5 / §6 / §7。 +> 与文字版的对应关系:[`vision-heicode-full-stack-agentic-dev.md`](./vision-heicode-full-stack-agentic-dev.md)、[`saas-manager-agnet-architecture-plan.md`](./saas-manager-agnet-architecture-plan.md)。旧 Agnet API 草案若与新架构计划冲突,以新架构计划为准。 --- @@ -11,24 +11,30 @@ ```mermaid flowchart TD entry["人机入口
官网 · 控制台 · CLI · Desktop"] - manager["Heicode Manager
(heicode)"] + manager["Heicode Manager
SaaS 控制台"] client["Heicode 客户端
(cc-haha)"] - agnet["Agnet 平台
(角色模板 · 执行单元)"] + agnet["Agnet 平台
AKS 执行与状态"] + newapi["NewAPI
模型网关 · 余额 · 日志"] + secret["Secret Store
Vault / Infisical / Key Vault"] assets["资产与环境
仓库 · 流水线 · 运行时"] entry --> manager entry --> client manager <--> client manager --> agnet + manager --> newapi + manager --> secret + agnet --> secret client -. "会话子 agent 输出" .- agnet agnet --> assets manager --> assets ``` 要点: -- **同一身份与策略边界** 跨越 Manager 与客户端 -- 编排细节归 Agnet 内部;Heicode 关注 **契约、体验与安全边界** -- 资产层(仓库 / 流水线 / 运行时)是被动载体 +- **Manager 是 SaaS 用户、租户、资源、权限与部署控制台** +- **NewAPI 是独立模型服务**,普通用户不进入 NewAPI 后台 +- **Secret Store 保存真实密钥**,Manager DB 只保存 `secret_ref` +- **Agnet 在 AKS 上执行**,按 Manager 下发的 Resource Grant 和运行身份使用资源 --- @@ -44,20 +50,54 @@ flowchart LR user --> desktop desktop -->|"OAuth: /heicode/oauth/*"| manager desktop -->|"Anthropic Messages /
OpenAI Chat 调用"| manager - manager -->|"模型路由 / 计费 / RBAC"| manager + newapi["NewAPI
模型网关 / 额度 / 调用日志"] + secret["Secret Store
Vault / Infisical / Key Vault"] + + manager -->|"模型、余额、调用日志"| newapi + manager -->|"资源绑定 / secret_ref"| secret manager -->|"M2M JWT · 部署/查询编队"| agnet + agnet -->|"运行时受控读取密钥"| secret agnet -->|"webhook / events"| manager agnet -.->|"sub_agent.output (SSE/WS)"| desktop ``` 关键边界: -- 客户端 **不直连** 模型供应商,所有调用经 Manager 路由 +- 客户端 **不直连** 模型供应商,模型能力经 Manager / NewAPI 提供 - Manager 用 **服务账号 / 用户委派令牌** 调 Agnet -- 客户端按 [`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md) §6.4 订阅会话内子 agent 输出流 +- 密钥不进入 Git、Markdown、前端或日志;子 Agnet 只通过受控身份使用被授权资源 --- -## 三、SK 数据流(Git / Upload → 快照 → 子 agent 注入) +## 三、资源绑定与凭证托管 + +```mermaid +flowchart LR + user["用户"] + manager["Heicode Manager"] + registry["Resource Registry
资源元数据与授权"] + broker["Secret Broker"] + store["Secret Store
Vault / Infisical / Key Vault"] + agnet["Agnet 平台"] + pod["子 Agnet Pod
AKS ServiceAccount"] + + user -->|"OAuth / GitHub App / 云授权"| manager + manager --> registry + manager --> broker + broker -->|"写入真实凭证"| store + manager -->|"Resource Grant / permission manifest"| agnet + agnet -->|"创建运行身份 / policy"| pod + pod -->|"按最小权限读取短期凭证"| store +``` + +要点: +- 用户完成授权,平台负责托管、轮换、撤销和审计 +- Manager DB 保存资源元数据、授权关系和 `secret_ref` +- Secret Broker 是唯一写入真实凭证的后端边界 +- 子 Agnet 不保存长期密钥 + +--- + +## 四、SK 数据流(Git / Upload → 快照 → 子 agent 注入) ```mermaid flowchart TB @@ -87,7 +127,7 @@ flowchart TB --- -## 四、事件流双轨(平台运行态 vs 会话子代理输出) +## 五、事件流双轨(平台运行态 vs 会话子代理输出) ```mermaid flowchart LR @@ -105,15 +145,16 @@ flowchart LR --- -## 五、模块关注点对照 +## 六、模块关注点对照 -| 关注点 | Heicode 客户端 (`cc-haha/`) | Heicode Manager (`heicode/`) | Agnet 平台 | -|--------|------------------------------|-------------------------------|------------| -| 用户身份 | 浏览器登录 / API Key 兼容 | OAuth 提供方、Token 颁发与吊销 | 接收 M2M JWT 与用户委派令牌 | -| 模型调用 | 不直连模型,请求经 Manager | 路由、计费、RBAC | 不参与基础模型调用 | -| 编排 | 触发部署、订阅子 agent 输出 | 一键部署入口、Webhook 注册 | 实际执行编队、维护实例生命周期 | -| SK | 唯一编辑入口(写 Git / 上传) | 展开 `sk_sources`、刷新策略 | 拉取快照、运行时只读注入 | -| 观测 | 会话内子 agent 输出 | 平台运行态聚合 | 提供事件流、指标导出 | +| 关注点 | Heicode 客户端 (`cc-haha/`) | Heicode Manager (`heicode/`) | NewAPI | Agnet 平台 | Secret Store | +|--------|------------------------------|-------------------------------|--------|------------|--------------| +| 用户身份 | 浏览器登录 / API Key 兼容 | SaaS 登录、租户、项目、角色 | 后台服务身份 | 接收 M2M JWT 与委托令牌 | 接收服务身份 / K8s 身份 | +| 模型调用 | 不直连模型,请求经 Manager | 展示模型、余额、日志 | 模型网关、额度、调用日志 | 不参与基础模型调用 | 不参与 | +| 资源绑定 | 发起本地工作流 | Git / 云 / 文档 / SK 资源绑定与 Resource Grant | 不参与 | 接收授权后的运行引用 | 保存真实凭证 | +| 编排 | 触发部署、订阅子 agent 输出 | 一键部署入口、permission manifest、审计 | 不参与 | 实际执行编队、维护实例生命周期 | 按策略提供密钥 | +| SK | 主要编辑入口(写 Git / 上传) | 展开 `sk_sources`、刷新策略 | 不参与 | 拉取快照、运行时只读注入 | 可保存访问凭证 | +| 观测 | 会话内子 agent 输出 | 平台运行态聚合、NewAPI 调用日志 | 调用日志、余额 | 提供事件流、指标导出 | 提供密钥访问审计 | --- diff --git a/docs/glossary.md b/docs/glossary.md index 73a8b63..164796a 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -3,7 +3,7 @@ 本术语表是 Heicode 仓库内 **跨文档共享的命名标准**。任意文档涉及以下名称时,请相对链接回本文件锚点,避免规则漂移。 > 与代号相关的方向性来源:[`vision-heicode-full-stack-agentic-dev.md`](./vision-heicode-full-stack-agentic-dev.md)。 -> 与 API 字段相关的来源:[`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md)。 +> 与 SaaS 架构相关的来源:[`saas-manager-agnet-architecture-plan.md`](./saas-manager-agnet-architecture-plan.md)。 ## 产品级代号 @@ -11,7 +11,7 @@ 仓库与产品族的总称。在区分产品形态时,亦称 **Heicode 客户端**。 ### Heicode Manager -账户、模型策略、渠道、计费与平台管控的服务端,源码目录 `heicode/`。在文档中亦称 **Manager**。 +SaaS 用户控制台与编排中枢,源码目录 `heicode/`。负责用户、租户、项目、资源绑定、权限分配、Agnet 部署、审计,以及面向普通用户展示模型、余额和调用日志。 ### Heicode 客户端 面向开发者的 CLI(Ink)+ 桌面应用(Tauri + React)+ 本地 HTTP/WS 服务,源码目录 `cc-haha/`。 @@ -20,7 +20,16 @@ **子智能体编排与团队模板** 所在平台的概念名。它是一个抽象代号,用以保持愿景叙事不绑死在某个厂商。落地形态可对应 Agnet。 ### Agnet -当前实际接入的编排平台名称。规范上 Heicode 与 Agnet 通过 [`integration/agnet-platform-api-design.md`](./integration/agnet-platform-api-design.md) 中定义的契约通信。 +当前实际接入的编排平台名称。Agnet 底层运行在 AKS,负责部署子 Agnet、维护执行状态、事件和日志,并按 Manager 下发的 Resource Grant 使用受控资源。 + +### NewAPI +独立的模型网关和计费服务。它提供模型渠道、模型调用、额度、余额和调用日志;普通 SaaS 用户不进入 NewAPI 后台,Manager 后端通过服务凭据调用 NewAPI。 + +### Secret Store +真实凭证的保管库,例如 HashiCorp Vault、Infisical 或 Azure Key Vault。Manager 数据库只保存 `secret_ref`,不保存 Git token、云密钥、SSH 私钥和数据库密码。 + +### Secret Broker +Manager 后端中负责凭证写入、轮换、撤销、路径生成、策略创建和审计的边界模块。业务代码不应绕过 Secret Broker 直接操作 Secret Store。 ## 编排相关 @@ -41,6 +50,18 @@ ### SK(Skill 资产) 为子 agent 提供运行时只读上下文的说明类正文,多为 Markdown。详见 [`sk-lifecycle.md`](./sk-lifecycle.md)。 +### 资源绑定 (`resource binding`) +用户授权 Heicode 使用某个外部资源的动作与结果。资源可以是 Git 仓库、SK 仓库、项目文档、Azure/AWS/GCP 账号、VM、数据库、对象存储或 AKS 集群。绑定产生资源元数据和 `secret_ref`,不产生可暴露的明文密钥。 + +### Resource Grant +Manager 中把某个资源授权给特定租户、项目、子 Agnet 角色和权限范围的记录。部署时,Manager 将 Resource Grant 转换为 permission manifest 发送给 Agnet 平台。 + +### permission manifest +面向系统强制执行的结构化权限清单,描述每个子 Agnet 可用的资源、动作、路径、环境和限制。它和 AGENT.md / resource context 配套使用。 + +### resource context +面向模型理解的启动上下文,通常可以生成为 Markdown。它描述角色、目标、可用资源和禁止事项,但不得包含任何真实密钥。 + ### `sk_sources` SK 的来源数组。每个元素声明其来源类型: - `git`:以 commit SHA 为快照锚点 diff --git a/docs/integration/README.md b/docs/integration/README.md index 25e5454..273ca24 100644 --- a/docs/integration/README.md +++ b/docs/integration/README.md @@ -8,25 +8,26 @@ 2. 二者之间走 **什么协议、什么字段**(API 契约) 3. 这些能力 **何时落地**(与里程碑对齐) +## 当前主线 + +2026-05-02 之后,Manager / NewAPI / Agnet / Secret Store 的主边界以 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md) 为准。 +本目录中的旧接口草案可作为历史参考;如果出现冲突,优先采用新架构计划。 + ## 推荐阅读顺序 | 步骤 | 文档 | 你将得到 | | --- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -| 1 | `[../glossary.md](../glossary.md)` | 统一术语:Heicode / Manager / 客户端 / 子 agent / SK / 标识符等 | -| 2 | `[../architecture.md](../architecture.md)` | 整体架构与数据流(mermaid) | -| 3 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` §1.1 | Manager 与客户端在 Agnet 可视化中的职责划分 | +| 1 | `[../saas-manager-agnet-architecture-plan.md](../saas-manager-agnet-architecture-plan.md)` | 新主线:SaaS Manager、NewAPI、Agnet、Secret Store 的职责边界 | +| 2 | `[../glossary.md](../glossary.md)` | 统一术语:Heicode / Manager / 客户端 / 子 agent / SK / 标识符等 | +| 3 | `[../architecture.md](../architecture.md)` | 整体架构与数据流(mermaid) | | 4 | `[../sk-lifecycle.md](../sk-lifecycle.md)` | SK 来源、快照、写权边界(**单点真相**) | -| 5 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` §2–§3 | 身份、调用方式、RBAC | -| 6 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` §4 | 多租户与隔离 | -| 7 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` §5 | 一键部署、`sk_sources`、**运行时绑定**、**SK 访问策略**、控制面 API | -| 8 | `[./agnet-user-deployment-flow.md](./agnet-user-deployment-flow.md)` | 用户从绑定 Git / 云权限到部署子 Agnet 的产品流程 | -| 9 | `[./orchestration-plan-contract.md](./orchestration-plan-contract.md)` | 模型提案对象与平台裁决规则 | -| 10 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` §6–§7 | 运行态、聚合视图、事件流(双轨) | -| 11 | `[./Heicode-登录接口对接文档.md](./Heicode-登录接口对接文档.md)` | 已上线认证接口契约(login / me / refresh / logout) | -| 12 | `[./heicode-oauth-flow.md](./heicode-oauth-flow.md)` | 客户端浏览器登录到 Manager 的完整流程 | -| 13 | `[./acceptance-matrix.md](./acceptance-matrix.md)` | 集成验收最小测试矩阵 | -| 14 | `[../milestones/README.md](../milestones/README.md)` + `[../milestones/STATUS.md](../milestones/STATUS.md)` | 落地节奏与现状 | +| 5 | `[./agnet-platform-api-design.md](./agnet-platform-api-design.md)` | 历史 API 草案:需按新主线重写后才能作为实现契约 | +| 6 | `[./agnet-user-deployment-flow.md](./agnet-user-deployment-flow.md)` | 历史用户流程草案:Git 来源和云权限应升级为统一资源绑定 | +| 7 | `[./orchestration-plan-contract.md](./orchestration-plan-contract.md)` | 历史编排提案草案:需补齐 Resource Grant、Secret Broker 与平台代理 | +| 8 | `[./Heicode-登录接口对接文档.md](./Heicode-登录接口对接文档.md)` | 已上线认证接口契约(login / me / refresh / logout) | +| 9 | `[./heicode-oauth-flow.md](./heicode-oauth-flow.md)` | 客户端浏览器登录到 Manager 的完整流程 | +| 10 | `[./acceptance-matrix.md](./acceptance-matrix.md)` | 集成验收最小测试矩阵,后续需要按新主线更新 | ## 边界速览 @@ -38,7 +39,7 @@ | 模型策略与计费 | 路由 / RBAC / 计费 | 调用 Manager | 不参与 | | 子 agent 输出展示 | 平台运行态汇总 | 会话内增量展示 | 提供 SSE/WS 流 | | SK 正文写入 | **不允许** | 唯一编辑入口 | **不允许**(仅只读快照) | -| 凭据(Git/云 SA)写入 | 持久化与轮换 | 发起授权 | 按租户使用 | +| 凭据(Git/云 SA)写入 | 通过 Secret Broker 托管、轮换、撤销 | 发起授权 | 运行时按 Resource Grant 和 K8s 身份受控使用 | ## 与里程碑的关系 diff --git a/docs/integration/agnet-platform-api-design.md b/docs/integration/agnet-platform-api-design.md index 6eb0b86..8075e27 100644 --- a/docs/integration/agnet-platform-api-design.md +++ b/docs/integration/agnet-platform-api-design.md @@ -1,5 +1,7 @@ # Agnet 平台 ↔ Heicode 集成接口设计(草案) +> Deprecated: 本文是早期接口草案。2026-05-02 之后,Manager / NewAPI / Agnet / Secret Store 的主边界以 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md) 为准。本文如与新架构计划冲突,以新架构计划为准。 + 本文描述 **Agnet 平台**应向 **Heicode(Manager / 客户端 / 自动化服务)** 暴露的 **控制面、数据面隔离、权限模型与可视化/事件接口**。 路径、字段名为 **设计意图**;落地时可等价映射为 gRPC 或 GraphQL,但**语义与隔离边界**应保持一致。 @@ -487,4 +489,4 @@ Tenant(租户) --- -*本文档随里程碑评审更新;实现细节以 Agnet 与 Heicode 联合 RFC 为准。* \ No newline at end of file +*本文档随里程碑评审更新;实现细节以 Agnet 与 Heicode 联合 RFC 为准。* diff --git a/docs/integration/agnet-user-deployment-flow.md b/docs/integration/agnet-user-deployment-flow.md index a3a66ae..2532ea3 100644 --- a/docs/integration/agnet-user-deployment-flow.md +++ b/docs/integration/agnet-user-deployment-flow.md @@ -1,5 +1,7 @@ # Agnet 用户部署流程 +> Deprecated: 本文是早期用户流程草案。2026-05-02 之后,资源绑定、凭证托管、NewAPI 解耦和 Agnet AKS 运行身份以 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md) 为准。本文如与新架构计划冲突,以新架构计划为准。 + 本文记录 Heicode Manager 中用户从绑定仓库、授权云资源,到部署子 Agnet 的目标流程。它描述产品语义和交互顺序,具体 API 字段以 [`agnet-platform-api-design.md`](./agnet-platform-api-design.md) 与 [`orchestration-plan-contract.md`](./orchestration-plan-contract.md) 为准。 ## 一、绑定代码与 SK 仓库 diff --git a/docs/integration/orchestration-plan-contract.md b/docs/integration/orchestration-plan-contract.md index 04646a2..2e24f58 100644 --- a/docs/integration/orchestration-plan-contract.md +++ b/docs/integration/orchestration-plan-contract.md @@ -1,5 +1,7 @@ # 编排提案契约(`orchestration_plan`) +> Deprecated: 本文是早期编排提案草案。2026-05-02 之后,正式计划需要补齐 Resource Grant、Secret Broker、Secret Store、AKS 运行身份和平台代理语义;主参考见 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md)。 + 本文定义「模型提案、平台裁决」模式下的最小编排对象,供 Heicode / Manager / Agnet 三方对齐。 ## 1. 决策边界 @@ -118,4 +120,3 @@ Agnet 在执行前必须做下列校验: - `orchestration_plan` 建议由 Manager **无损映射**为 Agnet `POST /deployments` 标准 payload;**`runtime_execution` / `sk_access_policy` 不得在进入部署链路时丢弃**,否则子 agent 无法获得用户在 Manager 配置的权限与 SK 边界 - 拒绝时应返回 `error.code` + `request_id` + `correlation_id` - 接受后返回 `deployment_id`,并通过事件流持续反馈执行状态 - diff --git a/docs/milestones/README.md b/docs/milestones/README.md index 9a53ddd..3bc2730 100644 --- a/docs/milestones/README.md +++ b/docs/milestones/README.md @@ -2,13 +2,14 @@ > 导航:[`../README.md`](../README.md) · [`../glossary.md`](../glossary.md) · [`../architecture.md`](../architecture.md) · [`./STATUS.md`](./STATUS.md) -本目录将整体交付拆成**可验收、可并行准备**的里程碑事件;每个文件定义**完成定义(DoD)**、**依赖**与**与 Agnet 平台的衔接点**。 -全局范式仍以 [`../vision-heicode-full-stack-agentic-dev.md`](../vision-heicode-full-stack-agentic-dev.md) 为准;当前实现状态见 [`./STATUS.md`](./STATUS.md)。 +本目录保存早期 M1-M5 里程碑草案。2026-05-02 之后,SaaS Manager、NewAPI、Agnet 和 Secret Store 的落地节奏以 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md) 第十节为准。 +本目录可作为历史参考;后续需要把 M1-M5 重写为 P0-P5 后再作为正式交付计划使用。 ## 推荐阅读顺序 | 顺序 | 文档 | 摘要 | |------|------|------| +| 0 | [SaaS Manager 与 Agnet 平台架构计划](../saas-manager-agnet-architecture-plan.md) | 当前主计划:P0-P5 | | 1 | [M1-契约与身份对齐](./M1-contract-identity.md) | Heicode Manager ↔ 客户端最小契约;登录与令牌语义 | | 2 | [M2-本地端到端闭环](./M2-local-e2e.md) | 单环境跑通:登录、模型发现、对话、一次发布链路(示意) | | 3 | [M3-Agnet-编排集成](./M3-agnet-orchestration-bridge.md) | 拉起编队、执行单元生命周期与回调 Heicode | @@ -21,7 +22,7 @@ Agnet 平台应对外暴露的 **HTTP/gRPC 契约、事件流与隔离模型** **[`../integration/agnet-platform-api-design.md`](../integration/agnet-platform-api-design.md)** -里程碑 **M3~M5** 分别对应集成文档中的「编排 API」「安全与隔离」「观测与可视化 API」的落地节奏。 +早期里程碑 **M3~M5** 曾对应集成文档中的「编排 API」「安全与隔离」「观测与可视化 API」。这些内容需要按新的 Manager 资源绑定、Secret Broker、AKS 运行身份和 NewAPI 解耦方案重写。 --- diff --git a/docs/milestones/STATUS.md b/docs/milestones/STATUS.md index 1d9bebf..7669a7c 100644 --- a/docs/milestones/STATUS.md +++ b/docs/milestones/STATUS.md @@ -1,6 +1,6 @@ # 里程碑现状对齐 -本文以仓库当前代码为依据,对 M1–M5 的 DoD 项做粗粒度盘点,便于例会与评审快速对齐。**不替代** 各里程碑文档的 DoD 原文。 +本文以仓库当前代码为依据,对早期 M1-M5 的 DoD 项做粗粒度盘点,便于例会与评审快速对齐。2026-05-02 之后,正式计划以 [`../saas-manager-agnet-architecture-plan.md`](../saas-manager-agnet-architecture-plan.md) 第十节 P0-P5 为准;本文保留为历史现状参考。 > 状态图例: > - `done`:代码已落地并经过基本验证 diff --git a/docs/saas-manager-agnet-architecture-plan.md b/docs/saas-manager-agnet-architecture-plan.md new file mode 100644 index 0000000..4430348 --- /dev/null +++ b/docs/saas-manager-agnet-architecture-plan.md @@ -0,0 +1,312 @@ +# Heicode SaaS Manager 与 Agnet 平台架构计划 + +本文记录 2026-05-02 讨论后确认的新边界:Heicode 的最终形态是一款覆盖软件生命周期的智能开发 Code 工具。用户注册后,用自然语言描述想法,平台应能逐步完成团队生成、产品文档、原型描述、代码开发、代码检查、生产部署、定期维护和升级。 + +本文是后续 Manager / NewAPI / Agnet / 凭证托管方案的主参考。旧的 Agnet 接口草案如与本文冲突,以本文为准。 + +## 一、核心判断 + +Heicode 不是 NewAPI 的二次开发项目,也不是单纯的 Agent 控制台。产品边界应拆成四层: + +| 层 | 定位 | 主要职责 | +|----|------|----------| +| Heicode Manager | SaaS 用户控制台与编排中枢 | 用户、租户、项目、资源绑定、权限分配、Agnet 部署、审计、余额与模型可见性 | +| Agnet 平台 | 执行与状态平台 | 在 AKS 上部署子 Agnet、运行任务、维护状态、事件、日志和执行元数据 | +| NewAPI | 内部模型网关与计费服务 | 模型渠道、模型列表、模型调用、额度、余额、调用日志;后台不开放给普通用户 | +| Secret Store | 凭证保管库 | 保存 Git token、云密钥、SSH key、数据库密码等真实凭证 | + +Manager 是用户操作入口;Agnet 是运行时执行层;NewAPI 是模型能力服务;Secret Store 是安全凭证底座。 + +## 二、不可破坏的原则 + +1. 在需求和边界没有想清楚前,不改代码。 +2. NewAPI 保持独立服务,不继续改造成 Manager 的内嵌后台。 +3. NewAPI 后台不开放给普通 SaaS 用户,模型管理由内部人员完成。 +4. Manager 只补 NewAPI 没有的后端能力:项目、资源、权限、Agnet 部署、审计和生命周期管理。 +5. 用户绑定的是 Agnet 可用资源,不只是 Git 来源。 +6. 密钥不能进入 Git、Markdown、前端、部署摘要或日志。 +7. Manager 负责资源绑定、权限分配和凭证托管能力;真实密钥放入 Secret Store。 +8. 子 Agnet 不保存长期密钥,只接收角色、资源元数据、AGENT.md 和受控访问方式。 +9. Agnet 平台在 AKS 上负责运行时身份、隔离、状态、事件和审计回传。 +10. 高危生产权限优先走平台代理或审批,不直接把长期密钥注入子 Agnet。 + +## 三、Manager 的产品主线 + +Manager 面向普通用户展示的是一条从想法到交付的控制流程,而不是 NewAPI 管理后台。 + +核心功能: + +1. 绑定 GitHub、GitLab、Gitea、Gitee、自建 Git 等代码来源。 +2. 绑定云资源,例如 AWS、Azure、GCP、虚拟机、数据库、对象存储、Kubernetes 集群。 +3. 确认项目仓库、SK 仓库、项目文档仓库或二合一仓库。 +4. 按敏捷或瀑布方法分配子 Agnet 角色。 +5. 为每个子 Agnet 配置 AGENT.md、可用工具、Git 范围、云资源范围、模型和预算。 +6. 部署子 Agnet,设置数量、模型和运行环境。 +7. 观察子 Agnet 活动状态、失败原因、事件和运行日志。 +8. 查看审计日志和模型调用日志。 +9. 查看可用模型、余额、额度和使用情况。 +10. 展示 NewAPI 对普通用户有意义的能力,隐藏渠道、价格、模型后台管理等管理员能力。 + +## 四、资源绑定模型 + +“绑定”不是保存一串密钥,而是创建租户级 Resource Grant。 + +```text +某个用户/租户授权 Heicode 使用某个外部资源 +-> Manager 记录资源元数据 +-> Manager 的 Secret Broker 把真实凭证写入 Secret Store +-> Manager 生成可审计、可撤销、可分配给子 Agnet 的资源授权 +``` + +资源类型建议统一建模为: + +| 类型 | 示例 | 子 Agnet 可见内容 | +|------|------|------------------| +| Git 资源 | GitHub repo、自建 Git、SK repo | repo URL、ref、允许路径、读写范围 | +| 云账号 | Azure subscription、AWS account、GCP project | account/project/subscription 元数据、允许动作 | +| 单项云资源 | VM、DB、Bucket、AKS namespace | 资源 ID、环境、网络边界、允许动作 | +| 项目文档 | 产品文档、原型说明、需求库 | 文档引用、版本、可读范围 | +| SK 资源 | 技能仓库、上传的技能包 | SK 来源、版本、允许/禁止策略 | + +Manager 数据库保存资源元数据和授权关系,不保存明文密钥: + +```text +resources: + id + tenant_id + provider + type + display_name + external_id + metadata_json + secret_ref + status + +resource_grants: + id + tenant_id + project_id + resource_id + agnet_role + permissions_json + constraints_json + +secret_bindings: + id + tenant_id + resource_id + secret_provider + secret_ref + version + status + last_rotated_at +``` + +## 五、开源 Secret Store 架构 + +SaaS 场景下,凭证不能转嫁给用户手工管理。用户负责授权,平台负责托管、隔离、轮换、撤销和审计。 + +推荐抽象: + +```text +Manager API + -> Secret Broker + -> Secret Provider + -> Vault / Infisical / Azure Key Vault +``` + +开源优先方案: + +| 方案 | 适用判断 | +|------|----------| +| HashiCorp Vault | 优先选择。Kubernetes Auth、Policy、TTL、动态密钥、审计能力成熟,适合 AKS 中的子 Agnet 运行时授权 | +| Infisical | 产品体验较好,适合作为可选 Secret Provider,需要进一步验证多租户策略和运行时授权能力 | +| SOPS + KMS | 适合配置文件密钥,不适合作为 SaaS 动态资源绑定主方案 | + +Secret Broker 负责: + +- 接收 OAuth / GitHub App / 云授权回调后的凭证。 +- 生成租户隔离的 secret path。 +- 写入 Vault / Infisical / Key Vault。 +- 创建或更新 policy。 +- 保存 secret_ref 到 Manager DB。 +- 轮换、撤销、禁用凭证。 +- 避免密钥进入日志、前端响应、Markdown 和 Git。 + +Vault 路径示例: + +```text +secret/heicode/tenants/{tenant_id}/resources/{resource_id}/github +secret/heicode/tenants/{tenant_id}/resources/{resource_id}/azure +secret/heicode/tenants/{tenant_id}/projects/{project_id}/deployments/{deployment_id} +``` + +## 六、AKS 上的 Agnet 凭证访问 + +Agnet 平台底层是 AKS,因此运行时权限应和 Kubernetes 身份绑定。 + +推荐流程: + +```text +用户在 Manager 授权资源 +-> Manager Secret Broker 写入 Secret Store +-> Manager 记录 Resource Grant +-> Manager 请求 Agnet 平台部署 +-> Agnet 平台为 deployment / role 创建 K8s ServiceAccount +-> Agnet 平台绑定 Vault policy 或 Workload Identity +-> 子 Agnet Pod 运行时只能访问被授权的 secret +``` + +子 Agnet 拿到的是: + +```text +你是 backend-agent +你可以访问 project-main-repo +权限是 read_repo / write_branch / create_pr +凭证由运行环境提供 +禁止输出、持久化或提交任何凭证 +``` + +子 Agnet 不应拿到: + +```text +github_pat_xxx +azure_client_secret_xxx +ssh_private_key +database_password +``` + +运行时访问分两种模式: + +| 模式 | 用法 | 适用场景 | +|------|------|----------| +| 受控注入 | Pod 通过 Vault Agent、Kubernetes Auth、CSI 或 Workload Identity 读取短期凭证 | Git clone、开发/测试环境、低风险资源 | +| 平台代理 | 子 Agnet 请求 Manager / Agnet Platform 代执行资源动作 | 生产部署、数据库写入、高危云操作、需要审批的动作 | + +推荐混合策略:普通开发资源可受控注入,生产云资源和高危操作走平台代理或审批。 + +## 七、NewAPI 的边界 + +NewAPI 不作为普通用户后台开放。Manager 后端通过服务凭据调用 NewAPI,对用户展示必要信息。 + +Manager 可展示: + +- 可用模型。 +- 当前租户或项目额度。 +- 余额。 +- 调用量。 +- 调用日志。 +- 失败日志。 +- 模型可用状态。 + +Manager 不展示: + +- 渠道管理。 +- 模型供应商后台配置。 +- 价格配置。 +- 系统管理员用户管理。 +- NewAPI 原生管理后台入口。 + +用户登录 Manager,不直接登录 NewAPI。Manager 需要维护用户 / 租户 / 项目到 NewAPI 用户、key 或 quota 的映射。 + +## 八、认证与权限统一策略 + +不要求三套系统完全统一登录,但必须统一租户、项目、角色、资源授权语义。 + +| 系统关系 | 建议 | +|----------|------| +| Manager ↔ NewAPI | 服务端对服务端调用。用户不直接进入 NewAPI 后台。Manager 按租户映射 NewAPI key、额度和日志 | +| Manager ↔ Agnet | 必须共享 tenant / project / deployment / role / resource grant 语义。使用 M2M token 或受控委托令牌 | +| Agnet ↔ Secret Store | 通过 AKS ServiceAccount、Vault Kubernetes Auth、Workload Identity 或平台代理访问 | +| 用户 ↔ Manager | Manager 是 SaaS 登录和用户体验入口 | + +因此,可行方案是:Manager 统一用户体验和资源权限,Agnet 统一执行身份和运行隔离,NewAPI 只提供模型服务能力。 + +## 九、启动上下文与 Markdown + +绑定的资源最终可以生成 Markdown,但 Markdown 是上下文和规则,不是凭证载体。 + +Markdown 可包含: + +- 子 Agnet 角色。 +- 目标任务。 +- 项目背景。 +- AGENT.md 来源。 +- 可使用的 Git 资源。 +- 可使用的云资源。 +- 可使用的 SK。 +- 允许和禁止动作。 +- 审计要求。 + +Markdown 不得包含: + +- Git token。 +- 云 access key。 +- refresh token。 +- SSH 私钥。 +- 数据库密码。 +- NewAPI key 原文。 + +建议 Manager 生成两类产物: + +| 产物 | 用途 | +|------|------| +| AGENT.md / resource context | 给子 Agnet 的启动上下文,说明角色和可用资源 | +| permission manifest | 给 Agnet 平台和审计系统的结构化权限清单 | + +Markdown 面向模型理解,manifest 面向系统强制执行。 + +## 十、实施 Plan + +### P0:文档和边界收敛 + +- 清理废弃或冲突的旧文档入口。 +- 确认本文为 Manager / NewAPI / Agnet / Secret Store 的主参考。 +- 更新术语表:资源绑定、Resource Grant、Secret Broker、Secret Store、平台代理。 +- 明确代码修改铁律:边界未讨论清楚前不改代码。 + +### P1:Manager 资源模型 + +- 将当前“Git 来源”抽象为资源绑定模型。 +- 增加资源类型:Git、SK、项目文档、云账号、单项云资源。 +- 增加 resource_grants,用于把资源分配给项目、角色和子 Agnet。 +- 前端从“填 JSON”升级为“绑定资源 -> 分配角色 -> 部署确认”的向导。 + +### P2:Secret Broker 与开源 Secret Store + +- 选型 Vault 作为首个开源 Secret Provider。 +- 在 Manager 后端实现 Secret Broker。 +- 支持写入、读取引用、轮换、撤销、禁用。 +- DB 只保存 secret_ref,不保存明文密钥。 +- 增加密钥泄露防护:日志脱敏、前端响应过滤、Markdown 生成过滤。 + +### P3:Agnet 平台 AKS 身份接入 + +- Agnet 平台支持 deployment / role 到 Kubernetes ServiceAccount 的映射。 +- 支持 Vault Kubernetes Auth 或等价 Workload Identity。 +- 支持按 tenant / project / role 生成 Vault policy。 +- 子 Agnet 运行时只能访问被授权的 secret。 +- 生产云操作支持平台代理或审批。 + +### P4:NewAPI 解耦 + +- NewAPI 保持独立服务。 +- Manager 通过服务凭据调用 NewAPI。 +- Manager 展示普通用户需要的模型、余额、额度、调用日志。 +- 隐藏 NewAPI 管理员后台能力。 +- 建立 Manager tenant / user / project 与 NewAPI key / quota / usage 的映射。 + +### P5:部署和审计闭环 + +- Manager 生成 AGENT.md / resource context / permission manifest。 +- Agnet 平台部署子 Agnet 后回传 deployment、agent instance、状态和事件。 +- Manager 展示活动状态、失败原因、资源使用记录、模型调用记录和审计日志。 +- 对高危权限增加审批、撤销和运行中失效机制。 + +## 十一、当前不做 + +- 不把云密钥写入 Markdown。 +- 不把 NewAPI 后台开放给普通用户。 +- 不让 Agnet 平台成为长期密钥明文存储地。 +- 不在边界未确认时继续堆功能。 +- 不把 Manager 继续改造成 NewAPI 的缝合后台。 diff --git a/heicode/README.sync-conflict-20260430-014104-GVADS2N.md b/heicode/README.sync-conflict-20260430-014104-GVADS2N.md deleted file mode 100644 index 7c7a51b..0000000 --- a/heicode/README.sync-conflict-20260430-014104-GVADS2N.md +++ /dev/null @@ -1,70 +0,0 @@ -# Heicode Manager(源码目录 `heicode`) - -本目录实现 **Heicode Manager**:网关与管理控制台(账号、渠道、模型策略、计费等)。目录名 `heicode` 为历史工程名;对外产品与文档统一称 **Heicode Manager**。目标是支撑 **Heicode 客户端**「浏览器登录后即用模型」。 - -## 本仓库角色 - -- 作为模型统一入口,管理渠道、用户、令牌、计费策略 -- 提供 Heicode 需要的授权桥接接口 -- 输出标准模型发现能力(`/v1/models`)给客户端 - -## Heicode 相关新增能力 - -### 1) 浏览器登录授权入口 - -- `GET /heicode/oauth/authorize` -- `GET /heicode/oauth/session` - -行为说明: - -- 校验 `redirect_uri` 必须是 loopback(`127.0.0.1` / `localhost` / `::1`) -- 若用户未登录平台控制台,先引导登录 -- 登录后签发或复用 Heicode 专用 token -- 回跳本地客户端并携带 `state` 与 `token` - -### 2) 客户端模型发现 - -- Heicode 通过 `GET /v1/models` 拉取可用模型集合 -- 客户端不再依赖硬编码模型列表 - -## 快速运行(本地 Docker) - -```bash -cd heicode -docker compose -f docker-compose.yml -f docker-compose.override.yml up --build -d -``` - -查看服务状态: - -```bash -docker compose ps -docker compose logs -f heicode -``` - -默认访问地址:`http://localhost:3000` - -## Heicode 联调检查清单 - -- 平台已可正常登录 Web 控制台 -- `GET /heicode/oauth/authorize` 返回流程可达 -- `GET /heicode/oauth/session` 可反映登录态 -- `GET /v1/models` 返回模型列表不为空 -- Heicode 客户端登录后可直接发起模型请求 - -## 目录关注点 - -- `controller/heicode_oauth.go`:Heicode 授权与会话检测核心逻辑 -- `router/heicode-router.go`:Heicode OAuth 路由注册 -- `router/main.go`:总路由接入点 -- `docker-compose.override.yml`:本地开发构建入口 - -## 生产建议 - -- 强制 HTTPS 与可信证书 -- 设置稳定的会话密钥与持久化存储 -- 对授权回调、token 签发、模型探活增加审计日志 -- 配置限流与告警,避免异常流量冲击 - -## 许可证与来源 - -本工程在开源网关上游基础上演进(目录名 `heicode` 仅为历史路径),遵循对应许可证要求。企业使用前请完成内部合规审查。