chore: initial import — heicode manager + website
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
Heicode 今日工作总结与后续计划
|
||||
日期:2026-05-02
|
||||
工作区:/Volumes/macOS/GO/heicode
|
||||
分支策略:未新建分支,所有工作均在当前 main 上完成
|
||||
|
||||
一、今日完成简介
|
||||
|
||||
1. 项目主线梳理
|
||||
- 已确认 docs/heicode.md 与 docs/plan.md 是当前实施主线。
|
||||
- 已明确旧 Agnet API 草案、旧 M1-M5 计划、旧架构说明不作为当前实施依据。
|
||||
- 已恢复 docs/README.md 为主线文档入口,并加入 Agnet 平台请求契约文档入口。
|
||||
|
||||
2. P0 文档边界收敛
|
||||
- 已完成 P0:文档入口与实施依据收敛。
|
||||
- 已清理 docs 下临时 sync-conflict 文档,当前未发现 docs 目录下残留同步冲突文件。
|
||||
- 已提交:912e315 docs: converge heicode plan entrypoint。
|
||||
|
||||
3. P1 Manager 资源模型最小实现
|
||||
- 已实现 Manager 侧最小 Resource Binding / Resource Grant 后端能力。
|
||||
- 新增资源模型:ResourceBinding、ResourceGrant。
|
||||
- 已加入 GORM 自动迁移。
|
||||
- 新增认证 API:/api/resources 与 /api/resource-grants。
|
||||
- 支持的资源类型包括:git、sk、project_document、cloud_account、cloud_resource。
|
||||
- 资源授权可表达 tenant/project/resource 到 role/子 Agnet 的最小权限关系。
|
||||
- 已实现 secret_ref-only 原则:只保存密钥引用,不保存明文密钥。
|
||||
- 已加入校验,拒绝 metadata、permission_scope、constraints 中出现 password、token、secret、private_key、access_key、credential 等明文敏感字段。
|
||||
|
||||
4. Agnet 平台请求参数文档
|
||||
- 已新增文档:docs/integration/agnet-platform-request-contract.md。
|
||||
- 该文档说明 Manager 主动请求 Agnet 平台时需要携带的参数。
|
||||
- 覆盖内容包括:
|
||||
- 创建子 Agent 部署 POST /api/agnet/deployments。
|
||||
- orchestration_plan、agents、sk_sources、runtime_execution、sk_access_policy、resource_grants 字段说明。
|
||||
- secret_ref、安全边界、租户/项目边界、预算与模型约束。
|
||||
- 部署状态查询、停止部署。
|
||||
- 日志接口:批量日志、实时 SSE 日志流。
|
||||
- 监控接口:项目 dashboard snapshot、单部署 metrics。
|
||||
- 事件接口、审计日志接口。
|
||||
- SK 快照解析与查询接口。
|
||||
- 已提交:ab71d5b docs: add agnet platform request contract。
|
||||
|
||||
5. 团队协作与校验
|
||||
- 已启动并完成 5 个 OMX worker 的协作任务。
|
||||
- 5 个 worker 均已完成并关闭,团队已 graceful shutdown。
|
||||
- 当前 main 分支 ahead origin/main 15 个提交。
|
||||
- 当前工作区干净。
|
||||
|
||||
二、今日验证情况
|
||||
|
||||
已通过的校验:
|
||||
- git diff --check:通过。
|
||||
- gofmt changed backend files:通过。
|
||||
- go vet ./controller ./model ./router:通过。
|
||||
- go test ./controller ./model ./router:通过。
|
||||
- 重点 controller/model/router 变更包测试:通过。
|
||||
- docs Markdown fence 检查:通过。
|
||||
|
||||
已知未通过但不属于本次改动直接引入的问题:
|
||||
- go test ./... 存在历史/环境相关失败:
|
||||
1. heicode 根包 main.go embed 依赖 web/classic/dist,但当前环境缺少该构建产物。
|
||||
2. relay/channel/claude 相关既有测试失败。
|
||||
3. relay/helper stream scanner 相关既有测试失败。
|
||||
- website/frontend typecheck/lint 在部分 worker 环境中因依赖未安装或 bun 不存在无法完整运行。
|
||||
|
||||
三、资源使用情况
|
||||
|
||||
1. 本地开发资源
|
||||
- 使用当前外置盘工作区:/Volumes/macOS/GO/heicode。
|
||||
- 使用 Git 当前 main 分支,无新分支。
|
||||
- 使用 Go 后端测试、gofmt、go vet 完成验证。
|
||||
- 使用 OMX team 5 worker 协作完成分析、实现、测试、文档和验证任务。
|
||||
|
||||
2. 数据库与缓存资源
|
||||
- PostgreSQL 与 Redis 被确认为项目运行资源。
|
||||
- 本次没有把 PostgreSQL、Redis 的真实连接信息写入代码、文档、Git、日志或提交。
|
||||
- 本次本地验证未直接连接生产 PostgreSQL 或 Redis。
|
||||
- 后续如需线上验证,应从 VM 环境变量或 Secret Store 临时读取,不应硬编码到仓库。
|
||||
|
||||
3. 云与部署资源
|
||||
- 当前未执行生产 VM SSH 部署。
|
||||
- 当前未对 Azure PostgreSQL、Redis、AKS 或其他云资源执行写操作。
|
||||
- 当前未消耗可量化的线上运行资源。
|
||||
- 本次新增的资源模型与 Agnet 请求契约为后续生产部署和平台联调准备。
|
||||
|
||||
4. Git 资源
|
||||
- 当前 main 相对 origin/main ahead 15 个提交。
|
||||
- 未新建分支。
|
||||
- 尚未执行 git push。
|
||||
- 目标远端仍应使用既有 origin,推送时不得把密码写入 remote URL、命令、脚本或日志。
|
||||
|
||||
四、部署情况
|
||||
|
||||
1. 当前部署状态
|
||||
- 代码和文档已在本地 main 完成并提交。
|
||||
- OMX team 已完成并关闭。
|
||||
- 尚未推送到远端仓库。
|
||||
- 尚未 SSH 到生产 VM 执行部署。
|
||||
- 尚未执行 Docker/服务重启/迁移等生产动作。
|
||||
|
||||
2. 当前可部署基础
|
||||
- P0 文档边界已收敛。
|
||||
- P1 Manager 资源模型最小后端能力已实现。
|
||||
- Manager → Agnet 平台接口参数文档已补齐,包含日志和监控接口。
|
||||
- 变更包 controller/model/router 的测试与 vet 已通过。
|
||||
|
||||
3. 部署前阻塞/风险
|
||||
- 需要确认是否允许将 main 推送到指定 Git 仓库。
|
||||
- 需要确认生产 VM 当前运行方式、服务名、docker compose 文件与环境变量状态。
|
||||
- 需要在 VM 上使用现有环境变量读取 PostgreSQL/Redis 配置,禁止写入仓库。
|
||||
- 需要处理或确认 go test ./... 的既有失败是否影响生产发布。
|
||||
- 如部署需要前端 embed 产物,需要在部署流程中构建 web/classic/dist 或确认当前生产镜像构建流程会生成该目录。
|
||||
|
||||
五、后续需要完成简介
|
||||
|
||||
1. Git 同步
|
||||
- 在不新建分支的前提下,将当前 main 推送到指定远端。
|
||||
- 推送过程必须使用安全凭据输入方式,不能把密码写入 remote URL、shell history、脚本或日志。
|
||||
|
||||
2. 生产部署
|
||||
- SSH 到生产 VM。
|
||||
- 在 VM 上通过环境变量确认 PostgreSQL、Redis、Manager 运行配置。
|
||||
- 使用仓库更新方式拉取当前 main。
|
||||
- 执行生产构建、数据库迁移、服务重启或 docker compose 更新。
|
||||
- 部署后检查服务健康、日志、API 可用性。
|
||||
|
||||
3. P1 后续完善
|
||||
- 将 Resource Binding / Resource Grant 与现有项目、用户、Agnet 部署流更紧密打通。
|
||||
- 完善资源授权 revoke/disable/status transition。
|
||||
- 补充跨数据库兼容验证,尤其 PostgreSQL 线上迁移验证。
|
||||
- 补充前端资源绑定与授权页面,避免展示任何 secret。
|
||||
|
||||
4. Agnet 平台联调
|
||||
- 按 docs/integration/agnet-platform-request-contract.md 与 Agnet 平台确认最终字段。
|
||||
- 联调创建部署、查询状态、停止部署、日志拉取、监控快照、事件、审计日志。
|
||||
- 明确哪些接口由 Manager 内部提供,哪些接口由 Agnet 平台提供。
|
||||
- 确认 Agnet 平台对日志和监控返回的脱敏策略。
|
||||
|
||||
5. 测试与质量
|
||||
- 解决或隔离 go test ./... 的既有失败。
|
||||
- 确保 frontend/web 依赖可安装并完成 typecheck/lint/build。
|
||||
- 增加 e2e 验证:创建资源 -> 创建授权 -> 创建 Agnet 部署 -> 查询事件/日志/监控。
|
||||
|
||||
六、安全说明
|
||||
|
||||
- 本次文档和代码未写入任何真实密码、Token、Redis 密钥、PostgreSQL 密码、SSH 密码或 Git 密码。
|
||||
- 文档示例全部使用占位符或 vault:// secret_ref。
|
||||
- 后续部署与推送仍需继续遵守:密钥只走环境变量、Secret Store、交互式凭据或平台安全注入,不进入 Git。
|
||||
@@ -0,0 +1,16 @@
|
||||
# Heicode Docs
|
||||
|
||||
当前 `docs/` 只保留五类主线文档:
|
||||
|
||||
| 文档 | 用途 |
|
||||
|------|------|
|
||||
| [`heicode.md`](./heicode.md) | Heicode 当前产品定位、系统边界和架构共识 |
|
||||
| [`plan.md`](./plan.md) | 按当前共识拆出的实施计划 |
|
||||
| [`heicode-runtime-auth-newapi-secret-design.md`](./heicode-runtime-auth-newapi-secret-design.md) | 用户输入、登录用户复用、NewAPI 扣费映射、OpenBao 短期凭证注入边界 |
|
||||
| [`integration/Heicode-登录接口对接文档.md`](./integration/Heicode-登录接口对接文档.md) | 已上线登录接口对接文档 |
|
||||
| [`integration/agnet-platform-request-contract.md`](./integration/agnet-platform-request-contract.md) | Manager 请求 Agnet 平台时携带的部署、日志、监控、事件与审计接口参数 |
|
||||
| [`deployment/azure-production-deploy-guardrails.md`](./deployment/azure-production-deploy-guardrails.md) | Azure VM / PostgreSQL / Redis / Agnet / NewAPI 生产部署前的安全守卫、环境变量注入和验证计划 |
|
||||
|
||||
旧 Agnet API 草案、旧里程碑、旧架构说明和旧上手材料不再作为实施依据。后续文档和实现以 `heicode.md` 与 `plan.md` 为准;生产部署操作以安全守卫文档约束,且不得覆盖产品/架构主线。
|
||||
|
||||
代码中的过渡期命名、旧接口注释或旧 UI 文案只作为现状参考;若与 `heicode.md` / `plan.md` 冲突,应先更新实现或另行补充当前主线文档,不得恢复旧 Agnet/M1-M5 草案作为依据。
|
||||
@@ -0,0 +1,188 @@
|
||||
# Azure 生产部署安全守卫与验证计划
|
||||
|
||||
本文用于 Heicode Manager / Agnet / NewAPI 相关生产发布前的人工执行检查。它只描述安全命令、环境变量名和验证项,不保存任何真实地址、账号、密码、Token、连接串、SSH key 或云访问密钥。
|
||||
|
||||
适用范围:Azure VM、Azure PostgreSQL、Azure Redis、Git 同步、Nginx 统一入口、Heicode Manager 容器、OpenBao 内网密钥保管、Agnet 平台联调、NewAPI 网关能力验证。
|
||||
|
||||
## 1. 执行原则
|
||||
|
||||
| 项 | 要求 |
|
||||
|---|---|
|
||||
| 凭据处理 | 只使用 VM 环境、交互式 SSH、未提交的 `.env`、Key Vault 或 `secret_ref`;禁止把真实密钥写入 Git、Markdown、终端报告或 team state。 |
|
||||
| Git 发布 | 仅允许快进同步已审核提交;禁止在生产 VM 上提交代码或保存临时补丁。 |
|
||||
| 数据库/Redis | Azure PostgreSQL / Redis 连接串只写入 VM 本地 `.env` 或 Secret Store;验证时只打印变量名和连通性结果,不打印值。 |
|
||||
| Agnet / NewAPI | Manager 只传 `secret_ref`、部署计划、资源授权和审计上下文;禁止把明文云账号、数据库密码、模型 Key 放入请求体。 |
|
||||
| OpenBao | 只允许 Manager/Agnet 受控网络访问;如果 Manager 提供客户端验证和绑定接口,OpenBao 不暴露公网路由。 |
|
||||
| 生产动作 | 执行 `up -d`、迁移、重启、回滚前必须记录当前镜像/提交和健康检查 URL;失败时停止扩大变更。 |
|
||||
|
||||
## 2. 本地发布前检查
|
||||
|
||||
在本地工作区执行,确认没有未提交变更和明文凭据:
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
git diff --check
|
||||
|
||||
# 只允许命中占位符、变量名或文档中的禁用词说明;若命中真实值,立即停止。
|
||||
grep -RIn --exclude-dir=.git --exclude-dir=node_modules --exclude='*.jpg' \
|
||||
-E '(password|passwd|token|secret|private_key|access_key|credential|SQL_DSN|REDIS_CONN_STRING)' \
|
||||
docs heicode/bin heicode/docker-compose.azure-vm.yml
|
||||
```
|
||||
|
||||
预期:
|
||||
|
||||
- `git status --short` 只显示准备发布的已审核文档/代码变更。
|
||||
- `git diff --check` 无输出。
|
||||
- `grep` 结果不包含真实凭据;只允许出现 `secret_ref`、环境变量名、占位符或安全规则说明。
|
||||
|
||||
## 3. Git 同步守卫
|
||||
|
||||
在生产 VM 上只执行快进同步,避免产生生产端漂移:
|
||||
|
||||
```bash
|
||||
export VM_HOST='<azure-vm-host-or-ip>'
|
||||
export VM_USER='<ssh-user>'
|
||||
export REMOTE_DIR='/opt/heicode'
|
||||
export REMOTE="${VM_USER}@${VM_HOST}"
|
||||
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR' && git status --short"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR' && git fetch --all --prune"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR' && git merge --ff-only origin/main"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR' && git rev-parse --short HEAD"
|
||||
```
|
||||
|
||||
若 `git status --short` 非空,先停止部署并人工判断;不要在 VM 上直接 `git reset --hard`,除非已有明确回滚授权。
|
||||
|
||||
## 4. VM 本地 `.env` 注入
|
||||
|
||||
真实连接串只能进入 VM 本地未提交 `.env` 或 Secret Store。推荐用交互式编辑器写入,不在命令行参数中携带值:
|
||||
|
||||
```bash
|
||||
ssh -t "$REMOTE" "cd '$REMOTE_DIR/heicode' && umask 077 && \${EDITOR:-vi} .env"
|
||||
```
|
||||
|
||||
`.env` 至少应包含以下键,值由运维在交互式 SSH 会话中填入:
|
||||
|
||||
```text
|
||||
SQL_DSN=<azure-postgresql-connection-string>
|
||||
REDIS_CONN_STRING=<azure-redis-connection-string>
|
||||
SESSION_SECRET=<generated-session-secret>
|
||||
HEICODE_ROOT_EMAILS=<comma-separated-root-emails-if-needed>
|
||||
HEICODE_ADMIN_EMAILS=<comma-separated-admin-emails-if-needed>
|
||||
```
|
||||
|
||||
验证只打印 key,不打印 value:
|
||||
|
||||
```bash
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && test -f .env && chmod 600 .env && awk -F= '/^[A-Z0-9_]+=/{print \$1}' .env | sort"
|
||||
```
|
||||
|
||||
## 5. Azure PostgreSQL / Redis 连通性验证
|
||||
|
||||
优先通过应用容器的健康检查间接验证。若必须直接验证,只输出成功/失败:
|
||||
|
||||
```bash
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && docker compose -f docker-compose.azure-vm.yml --env-file .env config --services"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && docker compose -f docker-compose.azure-vm.yml --env-file .env run --rm heicode sh -lc 'test -n \"\$SQL_DSN\" && test -n \"\$REDIS_CONN_STRING\" && echo env-present'"
|
||||
```
|
||||
|
||||
禁止执行会打印完整环境的命令,例如 `env`、`printenv`、`docker inspect` 全量输出或 `docker compose config` 全量输出。
|
||||
|
||||
## 6. Heicode Manager / NewAPI 容器部署
|
||||
|
||||
当前仓库的 Heicode 服务保留 NewAPI 网关能力;生产部署以 `heicode/docker-compose.azure-vm.yml` 为入口,PostgreSQL / Redis 使用 Azure 托管实例。
|
||||
|
||||
公网入口约定:
|
||||
|
||||
- 对外域名统一使用 `heicode.xinghanlab.com`。
|
||||
- Nginx 负责按路由转发 Manager 与 NewAPI,例如 Manager 主站、NewAPI 受控 API 或健康检查路由。
|
||||
- OpenBao 仅供 Manager/Agnet 服务端访问,不通过 `heicode.xinghanlab.com` 暴露给浏览器用户。
|
||||
- 若需要 OpenBao 运维 UI,也必须走临时 SSH tunnel、VPN、内网跳板或单独受保护管理入口,不走普通 SaaS 用户路由。
|
||||
|
||||
构建和启动:
|
||||
|
||||
```bash
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && docker compose -f docker-compose.azure-vm.yml --env-file .env build heicode"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && docker compose -f docker-compose.azure-vm.yml --env-file .env up -d heicode"
|
||||
```
|
||||
|
||||
健康检查:
|
||||
|
||||
```bash
|
||||
ssh "$REMOTE" "curl -fsS http://127.0.0.1:3000/api/status | grep -q '\"success\":true' && echo heicode-health-ok"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && docker compose -f docker-compose.azure-vm.yml --env-file .env ps heicode"
|
||||
```
|
||||
|
||||
如使用现有脚本,仍需通过环境变量传参,不在命令里写真实凭据:
|
||||
|
||||
```bash
|
||||
VM_HOST="$VM_HOST" VM_USER="$VM_USER" REMOTE_DIR="$REMOTE_DIR/heicode" \
|
||||
IMAGE_TAG='heicode-manager:local' HEALTH_URL='http://127.0.0.1:3000/api/status' \
|
||||
./heicode/bin/azure_vm_deploy.sh
|
||||
```
|
||||
|
||||
## 7. Agnet 平台联调守卫
|
||||
|
||||
Manager 请求 Agnet 平台时遵循 `docs/integration/agnet-platform-request-contract.md`:
|
||||
|
||||
- `resource_grants[].secret_ref` 必须是 Secret Store 引用,不能是明文密钥。
|
||||
- `repo_url` 不能包含用户名、密码或 Token。
|
||||
- `metadata`、`constraints`、`audit` 的 key 和 value 都需要脱敏检查。
|
||||
- 高风险部署设置 `risk_level=high`,并保留审批或人工确认记录。
|
||||
|
||||
安全 smoke request 模板:
|
||||
|
||||
```bash
|
||||
export AGNET_BASE_URL='<agnet-platform-base-url>'
|
||||
export MANAGER_SERVICE_TOKEN_SECRET_REF='<secret-ref-only>'
|
||||
export USER_ID='<manager-user-id>'
|
||||
export BINDING_SCOPE='<resource-binding-scope>'
|
||||
|
||||
# 真实 token 由运行环境注入;禁止把 token 字面值写入命令历史或文档。
|
||||
curl -fsS -X POST "$AGNET_BASE_URL/api/agnet/deployments" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H "X-User-Id: $USER_ID" \
|
||||
-H "X-Binding-Scope: $BINDING_SCOPE" \
|
||||
-H "Idempotency-Key: deploy-$(date +%Y%m%d%H%M%S)" \
|
||||
-H "Authorization: Bearer $MANAGER_SERVICE_TOKEN" \
|
||||
--data @docs/integration/safe-agnet-deploy-example.json
|
||||
```
|
||||
|
||||
若没有 `safe-agnet-deploy-example.json`,先用本地临时文件生成并确认只包含 `secret_ref`,不要提交包含环境特定值的 payload。
|
||||
|
||||
## 8. 发布后验证清单
|
||||
|
||||
| 验证项 | 安全命令 | 通过标准 |
|
||||
|---|---|---|
|
||||
| 服务健康 | `curl -fsS http://127.0.0.1:3000/api/status` | 返回 `success=true`。 |
|
||||
| Nginx 公网入口 | `curl -fsS https://heicode.xinghanlab.com/api/status` | 返回 Manager 健康状态;DNS 需解析到生产入口。 |
|
||||
| OpenBao 暴露面 | `curl -fsSI https://heicode.xinghanlab.com/v1/sys/health` | 普通公网入口不应返回 OpenBao 健康信息;预期为无路由、403 或 404。 |
|
||||
| 容器状态 | `docker compose ... ps heicode` | `heicode` 为 running/healthy。 |
|
||||
| Git 版本 | `git rev-parse --short HEAD` | 与已审核提交一致。 |
|
||||
| DB/Redis 注入 | `awk -F= ... .env` | 只打印 key,包含 `SQL_DSN`、`REDIS_CONN_STRING`。 |
|
||||
| 登录链路 | 调用登录文档中的生产验证流程 | 不在日志或报告输出 token。 |
|
||||
| Agnet 部署 | 查询部署状态/事件/审计接口 | 能看到 deployment、events、audit,且无明文凭据。 |
|
||||
| NewAPI 网关能力 | 使用 Manager 受控模型调用或健康接口 | 只记录 request id、状态码、模型名,不记录 provider key。 |
|
||||
|
||||
## 9. 回滚与停止条件
|
||||
|
||||
立即停止部署并进入回滚/人工排障的条件:
|
||||
|
||||
1. 任一日志、响应、Markdown 或 Git diff 中出现真实密钥。
|
||||
2. `git merge --ff-only` 失败或 VM 工作区有未知改动。
|
||||
3. 健康检查连续失败。
|
||||
4. Agnet 平台返回的事件/审计中包含明文凭据。
|
||||
5. 数据库迁移或容器启动错误无法在一次重试内恢复。
|
||||
|
||||
回滚指针:
|
||||
|
||||
```bash
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && cat .last_success_image 2>/dev/null || true"
|
||||
ssh "$REMOTE" "cd '$REMOTE_DIR/heicode' && IMAGE_TAG=\$(cat .last_success_image) docker compose -f docker-compose.azure-vm.yml --env-file .env up -d heicode"
|
||||
```
|
||||
|
||||
若 `.last_success_image` 为空,回滚到上一个已验证 Git commit,并重新执行健康检查。
|
||||
|
||||
## 10. 本次文档产物状态
|
||||
|
||||
本文件仅准备部署守卫和验证计划;未执行 Git push、SSH 登录、Azure 资源变更、生产容器重启或 Agnet 实际部署。
|
||||
@@ -0,0 +1,206 @@
|
||||
# Heicode 运行时认证、扣费与密钥设计
|
||||
|
||||
日期:2026-05-04
|
||||
|
||||
本文修正 Manager、Agnet 平台、NewAPI 与 OpenBao 之间的运行时边界。若本文与旧文档中 `tenant`、`project` 或平台侧批准描述冲突,以本文为准。
|
||||
|
||||
## 一、用户输入在哪里
|
||||
|
||||
用户输入发生在 Heicode 的用户侧入口,也就是 Manager/客户端的“想法输入”主流程。
|
||||
|
||||
用户登录后输入目标、需求、约束、绑定的 Git/SK/云资源选择,以及是否批准高危操作。Manager 负责把这些输入整理成 Agnet 平台可执行的 work request:
|
||||
|
||||
- 用户想法和自然语言需求。
|
||||
- 绑定的 Git 仓库、分支、路径范围和写入权限。
|
||||
- 绑定的 SK 仓库或技能包。
|
||||
- 绑定的云资源元数据和允许动作。
|
||||
- 子 Agnet 角色、数量、运行模型和预算限制。
|
||||
- 客户端已经确认的高危操作审批结果。
|
||||
|
||||
Manager 不应为了团队开发控制额外发明 `tenant/project` 产品概念。当前团队开发边界优先来自绑定的 Git 仓库、允许路径、分支策略、Agnet 角色和资源授权。
|
||||
|
||||
## 二、Manager 用户复用 Agnet 登录体系
|
||||
|
||||
Manager User 应复用 Heicode/Agnet 已上线登录体系,不再另建一套独立身份。
|
||||
|
||||
参考 [`integration/Heicode-登录接口对接文档.md`](./integration/Heicode-登录接口对接文档.md),登录流程已经提供:
|
||||
|
||||
- `POST /api/auth/login`
|
||||
- `GET /api/auth/me`
|
||||
- `POST /api/auth/refresh`
|
||||
- `POST /api/auth/logout`
|
||||
|
||||
登录返回的用户对象包含:
|
||||
|
||||
- `id`
|
||||
- `name`
|
||||
- `email`
|
||||
- `role`
|
||||
- `channelId`
|
||||
|
||||
JWT 中也包含:
|
||||
|
||||
- `sub`
|
||||
- `email`
|
||||
- `role`
|
||||
- `channelId`
|
||||
- `type`
|
||||
- `iat`
|
||||
- `exp`
|
||||
|
||||
因此 Manager 的认证设计应是:
|
||||
|
||||
```text
|
||||
用户登录 Heicode/Agnet 认证体系
|
||||
-> Manager 校验 token 并读取 /api/auth/me
|
||||
-> Manager 使用 user.id / sub 作为业务用户 ID
|
||||
-> Manager 使用 channelId 关联 NewAPI 余额、用量和扣费查询
|
||||
-> Manager 本地只保存必要的用户会话、资源绑定和审计数据
|
||||
```
|
||||
|
||||
Manager 可以有本地 user cache,但 canonical user identity 应来自登录接口返回的用户信息。除非未来产品明确引入企业组织、空间或项目账本,否则不要把 tenant/project 作为认证和扣费主轴。
|
||||
|
||||
## 三、高危操作审批与 OpenBao 密钥注入
|
||||
|
||||
高危操作审批只在客户端完成。用户在客户端明确批准后,Manager/Agnet 平台才可以执行对应动作。Agnet 平台不是审批主体,不发起额外审批;它只校验 `approval_id`、审批主体、审批范围、TTL、`risk_level` 和策略是否匹配。
|
||||
|
||||
密钥处理边界如下:
|
||||
|
||||
```text
|
||||
长期密钥
|
||||
-> 用户授权或绑定资源
|
||||
-> Manager 写入 OpenBao
|
||||
-> Manager DB 只保存 secret_ref
|
||||
-> OpenBao 只允许 Manager/Agnet 受控网络访问,不对公网暴露
|
||||
|
||||
高危操作
|
||||
-> 客户端审批
|
||||
-> Manager/Agnet 平台按 secret_ref 从 OpenBao 获取或派生短期凭证
|
||||
-> 短期凭证可注入子 Agnet
|
||||
-> 子 Agnet 完成任务后凭证过期或撤销
|
||||
```
|
||||
|
||||
允许注入子 Agnet 的只能是短期、最小权限、可审计的凭证。长期 Git token、云 access key、SSH 私钥、数据库密码、NewAPI key 原文不得进入 Git、Markdown、普通日志或长期 Agnet 状态。
|
||||
|
||||
公网入口边界:
|
||||
|
||||
- `heicode.xinghanlab.com` 是 Manager、NewAPI 与内部服务的统一公网域名入口。
|
||||
- Nginx 可以为 Manager 和 NewAPI 制定路由,例如 Manager 主站与 NewAPI 受控 API 路由。
|
||||
- OpenBao 不应作为普通公网路由开放;如果 Manager 已经提供客户端验证、资源绑定、审批和 `secret_ref` 管理接口,客户端不需要直连 OpenBao。
|
||||
- OpenBao 访问应限制在容器网络、VM loopback、AKS 内网、Workload Identity 或其它受保护服务间通道。
|
||||
|
||||
OpenBao 不暴露公网的检查口径:
|
||||
|
||||
- 公网 DNS、Nginx `server_name`、Ingress、LoadBalancer 和安全组规则不得直接指向 OpenBao 服务端口。
|
||||
- 外部客户端只能通过 Manager 的认证、资源绑定、审批和 `secret_ref` 管理接口间接操作密钥引用。
|
||||
- Manager、Agnet 平台和子 Agnet 访问 OpenBao 时必须走内网地址、loopback、容器网络、AKS private endpoint 或 Workload Identity 绑定。
|
||||
- 健康检查和联调报告只能证明内网访问可用;不得把公网可访问的 OpenBao health endpoint 作为验收口径。
|
||||
|
||||
短期凭证注入必须满足:
|
||||
|
||||
- 有客户端审批记录。
|
||||
- 有 `secret_ref` 来源。
|
||||
- 有 TTL 或明确撤销机制。
|
||||
- 有资源范围、路径范围、云资源范围或 API 范围限制。
|
||||
- 有 Agnet deployment、agent role、user id、操作类型的审计记录。
|
||||
|
||||
## 四、NewAPI 额度与扣费能力
|
||||
|
||||
公开 NewAPI 文档当前体现的是用户、Token、Group、余额和用量视角,而不是 Manager `tenant/project` 视角。
|
||||
|
||||
NewAPI 官方 skill 文档明确支持:
|
||||
|
||||
- 查询模型。
|
||||
- 查询用户 Group。
|
||||
- 查询账号余额。
|
||||
- 管理 API Token。
|
||||
- 创建 Token 并指定 Group。
|
||||
- 切换 Token Group。
|
||||
- Token 安全复制和注入。
|
||||
|
||||
因此当前结论是:
|
||||
|
||||
1. NewAPI 可以承担模型网关和用户/Token/Group 维度的额度、余额、用量、日志能力。
|
||||
2. Manager 不应假设 NewAPI 已有 Heicode tenant/project 额度。
|
||||
3. Manager 普通用户侧展示应围绕当前登录用户的模型可用性、余额、额度、调用量和调用日志。
|
||||
4. 扣费映射应优先使用 `channelId`、NewAPI user、NewAPI token 或 NewAPI group。
|
||||
5. 若未来需要团队、组织、项目维度账本,应作为独立产品决策重新设计,而不是在当前 Manager 里暗自添加。
|
||||
6. 子 Agnet 的运行模型是 Agnet 平台的部署配置,独立于 NewAPI 的用户、Token、Group 扣费映射;NewAPI 不负责决定子 Agnet 使用哪个模型。
|
||||
|
||||
推荐映射:
|
||||
|
||||
| Heicode/Agnet 字段 | NewAPI 映射 | 用途 |
|
||||
|------|------|------|
|
||||
| `user.id` / JWT `sub` | NewAPI user ref | 标识调用归属用户 |
|
||||
| `channelId` | NewAPI channel/user/group 绑定 | 关联模型渠道、额度或扣费策略 |
|
||||
| 绑定 Git 仓库 | request metadata | 审计某次开发任务来源 |
|
||||
| 预算或用量限制 | token quota 或 group policy | 限制本次任务可消耗额度 |
|
||||
|
||||
子 Agnet 角色、运行模型和实例数量应放在 Agnet 平台 deployment/runtime 配置里,不放进 NewAPI 扣费对象里。
|
||||
|
||||
## 五、传给 Agnet 平台的用户与扣费上下文
|
||||
|
||||
Manager 请求 Agnet 平台部署或执行任务时,应携带登录用户上下文,但不携带真实密钥。
|
||||
|
||||
建议传递结构:
|
||||
|
||||
```json
|
||||
{
|
||||
"request_id": "req_20260504_demo",
|
||||
"user_context": {
|
||||
"user_id": "123",
|
||||
"email": "user@example.com",
|
||||
"role": "user",
|
||||
"channel_id": "channel_abc",
|
||||
"subscription_tier": "pro"
|
||||
},
|
||||
"billing_context": {
|
||||
"provider": "newapi",
|
||||
"newapi_user_ref": "newapi_user_123",
|
||||
"newapi_group": "development",
|
||||
"quota_ref": "newapi_token_or_group_quota_ref"
|
||||
},
|
||||
"agent_runtime": {
|
||||
"platform": "agnet",
|
||||
"agents": [
|
||||
{
|
||||
"role": "backend",
|
||||
"model_ref": "agnet_model_profile_backend",
|
||||
"instance_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
"work_context": {
|
||||
"input": "用户输入的产品想法或任务目标",
|
||||
"git_bindings": [
|
||||
{
|
||||
"resource_id": "res_git_1",
|
||||
"repo_url": "https://example.com/org/repo.git",
|
||||
"ref": "main",
|
||||
"allowed_paths": ["services/**"],
|
||||
"allowed_actions": ["read", "write"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"secret_context": {
|
||||
"secret_refs": ["vault://secret/resources/res_git_1"],
|
||||
"inject_short_lived_credentials": true,
|
||||
"approval_id": "approval_123"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
这里的 `user_context` 用于确认身份,`billing_context` 用于 NewAPI 余额、用量和扣费映射,`agent_runtime` 用于 Agnet 平台独立选择子 Agnet 模型和实例数量,`work_context` 用于团队开发控制,`secret_context` 只传 `secret_ref` 和审批结果。
|
||||
|
||||
Agnet 平台执行时,应把用户、角色、Git 绑定、deployment、Agnet model profile 和 NewAPI 映射写入 metadata 或审计日志。真实 NewAPI key 和 OpenBao 凭证由平台安全通道读取,不进入 Markdown。
|
||||
|
||||
## 六、当前主线结论
|
||||
|
||||
- 用户输入在 Manager/客户端,不在 NewAPI 后台。
|
||||
- Manager User 复用 Heicode/Agnet 登录体系。
|
||||
- Manager 不自行发明 tenant/project 作为当前团队或扣费边界。
|
||||
- 团队开发控制优先由绑定 Git、允许路径、Agnet 角色、资源授权表达。
|
||||
- 子 Agnet 的运行模型由 Agnet 平台独立配置,不和 NewAPI 扣费对象混在一起。
|
||||
- NewAPI 负责模型网关、用户/Token/Group 额度、余额、日志和扣费。
|
||||
- OpenBao 负责长期密钥托管,子 Agnet 只拿短期、最小权限、可审计凭证。
|
||||
- 高危操作审批发生在客户端,审批结果随任务上下文传给 Manager/Agnet 平台。
|
||||
+246
@@ -0,0 +1,246 @@
|
||||
# Heicode 当前共识
|
||||
|
||||
## 一、产品定位
|
||||
|
||||
Heicode 的最终形态是一款覆盖软件生命周期的智能开发 Code 工具。
|
||||
|
||||
目标用户注册账号后,只需要输入想法,平台逐步完成:
|
||||
|
||||
1. 团队生成。
|
||||
2. 产品文档。
|
||||
3. 原型描述。
|
||||
4. 代码开发。
|
||||
5. 代码检查。
|
||||
6. 部署到生产并对外提供服务。
|
||||
7. 后续定期维护和升级。
|
||||
8. 软件生命周期管理。
|
||||
|
||||
一句话: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. 高危操作审批只在客户端完成;审批通过后可以把 OpenBao 派生的短期、最小权限凭证注入子 Agnet,但不能注入长期密钥。
|
||||
11. 子 Agnet 的运行模型是 Agnet 平台的部署配置,独立于 NewAPI 的用户、Token、Group 扣费映射。
|
||||
|
||||
## 四、Manager 的核心功能
|
||||
|
||||
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 对普通用户有意义的能力,隐藏渠道、价格、模型后台管理等管理员能力。
|
||||
|
||||
## 五、资源绑定与密钥托管
|
||||
|
||||
绑定不是保存一串密钥,而是创建面向登录用户、绑定 Git/SK/云资源和子 Agnet 角色的 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 数据库只保存资源元数据、权限关系和 `secret_ref`,不保存明文密钥。
|
||||
|
||||
### P1 最小资源模型
|
||||
|
||||
P1 只要求 Manager 先具备可验证的资源表达和授权关系,不要求直接接入所有 Secret Provider。真实凭证仍由后续 Secret Broker 写入 Secret Store;P1 数据库只能保存 `secret_ref`。
|
||||
|
||||
Resource Binding 建议字段:
|
||||
|
||||
| 字段 | 含义 | 约束 |
|
||||
|------|------|------|
|
||||
| `id` | 资源绑定 ID | Manager 内部生成 |
|
||||
| `user_id` | 登录用户 ID | 来自 Heicode/Agnet 登录体系的 `user.id` 或 JWT `sub` |
|
||||
| `type` | 资源类型 | `git`、`sk`、`project_doc`、`cloud_account`、`cloud_resource` |
|
||||
| `name` | 用户可见名称 | 不包含密钥 |
|
||||
| `external_ref` | 外部资源定位 | repo URL、subscription ID、resource ID、文档引用等非密钥标识 |
|
||||
| `metadata` | 子 Agnet 可见元数据 | 只包含 ref、允许路径、环境、网络边界等非密钥信息 |
|
||||
| `permission_scope` | 可授权动作范围 | 例如 `read`、`write`、`deploy`、`approve_required` |
|
||||
| `constraints` | 使用限制 | 路径、分支、环境、网络、审批要求、TTL 等 |
|
||||
| `secret_ref` | Secret Store 引用 | 可为空;有凭证时只保存引用,不保存原文 |
|
||||
| `status` | 资源状态 | `pending`、`active`、`disabled`、`revoked` |
|
||||
| `created_by` / `updated_by` / `created_at` / `updated_at` | 审计字段 | 必填 |
|
||||
|
||||
Resource Grant 建议字段:
|
||||
|
||||
| 字段 | 含义 | 约束 |
|
||||
|------|------|------|
|
||||
| `id` | 授权 ID | Manager 内部生成 |
|
||||
| `user_id` / `binding_scope` | 授权归属 | 来自登录用户、绑定 Git/SK/云资源和角色范围 |
|
||||
| `resource_id` | 被授权资源 | 指向 Resource Binding |
|
||||
| `role` | 子 Agnet 角色 | 例如 product、frontend、backend、reviewer、ops |
|
||||
| `agent_id` | 子 Agnet 标识 | 可为空;为空表示授予该项目角色下的下一次部署 |
|
||||
| `allowed_actions` | 本次授权动作 | 必须是 `permission_scope` 的子集 |
|
||||
| `constraints` | 本次授权限制 | 不得放宽 Resource Binding 的限制 |
|
||||
| `status` | 授权状态 | `active`、`suspended`、`revoked`、`expired` |
|
||||
| `expires_at` | 过期时间 | 可为空;高危资源建议必填 |
|
||||
| `created_by` / `revoked_by` / `created_at` / `revoked_at` | 审计字段 | 创建与撤销均需可追溯 |
|
||||
|
||||
P1 permission manifest 示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"user_id": "user_demo",
|
||||
"binding_scope": "repo_demo:main",
|
||||
"agent_role": "backend",
|
||||
"resource_grants": [
|
||||
{
|
||||
"grant_id": "grant_demo_git_read",
|
||||
"resource_type": "git",
|
||||
"resource_ref": "https://example.com/org/repo.git",
|
||||
"allowed_actions": ["read"],
|
||||
"constraints": {
|
||||
"ref": "main",
|
||||
"paths": ["services/api/**"]
|
||||
},
|
||||
"secret_ref": "vault://secret/resources/repo_demo"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
该 manifest 可以包含 `secret_ref`,但不得包含 Git token、云 access key、SSH 私钥、数据库密码、NewAPI key 或 refresh token 原文。撤销 Resource Grant 后,下一次生成的 manifest 必须移除对应授权。
|
||||
|
||||
## 六、开源 Secret Store 方案
|
||||
|
||||
SaaS 场景下,凭证不能转嫁给用户手工管理。用户负责授权,平台负责托管、隔离、轮换、撤销和审计。
|
||||
|
||||
优先方案:
|
||||
|
||||
| 方案 | 判断 |
|
||||
|------|------|
|
||||
| HashiCorp Vault | 优先选择。Kubernetes Auth、Policy、TTL、动态密钥、审计能力成熟,适合 AKS 中的子 Agnet 运行时授权 |
|
||||
| Infisical | 可选方案。产品体验较好,但需要验证 SaaS 多用户隔离策略和运行时授权能力 |
|
||||
| Azure Key Vault | 适合 Azure 优先部署,也可以作为 Secret Provider 的一种实现 |
|
||||
|
||||
Secret Broker 负责:
|
||||
|
||||
- 接收 OAuth、GitHub App、云授权回调后的凭证。
|
||||
- 生成按用户、资源和角色隔离的 secret path。
|
||||
- 写入 Vault、Infisical 或 Azure Key Vault。
|
||||
- 创建或更新 policy。
|
||||
- 保存 `secret_ref` 到 Manager DB。
|
||||
- 轮换、撤销、禁用凭证。
|
||||
- 避免密钥进入日志、前端响应、Markdown 和 Git。
|
||||
|
||||
## 七、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 拿到的是角色、目标、AGENT.md、resource context 和 permission manifest,不拿长期密钥。
|
||||
|
||||
运行时访问分两类:
|
||||
|
||||
| 模式 | 适用 |
|
||||
|------|------|
|
||||
| 受控注入 | Git clone、开发/测试环境、低风险资源 |
|
||||
| 短期凭证注入 | 已经客户端审批的生产部署、数据库写入、高危云操作 |
|
||||
|
||||
普通开发资源可受控注入;生产云资源和高危操作也只在客户端审批通过后,注入 OpenBao 派生的短期、最小权限凭证。
|
||||
|
||||
## 八、NewAPI 边界
|
||||
|
||||
NewAPI 不作为普通用户后台开放。Manager 后端通过服务凭据调用 NewAPI,对用户展示必要信息。
|
||||
|
||||
Manager 可展示:
|
||||
|
||||
- 可用模型。
|
||||
- 当前用户、Token 或 Group 额度。
|
||||
- 余额。
|
||||
- 调用量。
|
||||
- 调用日志。
|
||||
- 失败日志。
|
||||
- 模型可用状态。
|
||||
|
||||
Manager 不展示:
|
||||
|
||||
- 渠道管理。
|
||||
- 模型供应商后台配置。
|
||||
- 价格配置。
|
||||
- 系统管理员用户管理。
|
||||
- NewAPI 原生管理后台入口。
|
||||
|
||||
用户登录 Manager,不直接登录 NewAPI。Manager User 复用 Heicode/Agnet 登录体系,并维护 `user.id`、`channelId` 到 NewAPI 用户、Token、Group、quota 或 usage 的映射。当前不要把 Manager tenant/project 作为扣费和团队开发控制主轴;团队开发控制优先由绑定 Git、路径范围、资源授权和 Agnet 角色表达。子 Agnet 的模型选择、模型 profile 和实例数属于 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 面向系统强制执行。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 77 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 74 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,372 @@
|
||||
# Heicode 客户端 — 登录接口对接文档
|
||||
|
||||
**版本**: v1.0
|
||||
**生效日期**: 2026-04-30
|
||||
**状态**: 已上线生产,已通过端到端测试
|
||||
|
||||
---
|
||||
|
||||
## 1. 概述
|
||||
|
||||
本文档描述 Heicode 客户端(桌面/CLI)与 Heicode Manager(即 mcp-server)之间的**登录认证接口**。共 4 个接口,覆盖完整登录生命周期:
|
||||
|
||||
|
||||
| 接口 | 用途 |
|
||||
| ------------------------ | ----------------------- |
|
||||
| `POST /api/auth/login` | 账号密码登录,换取 token |
|
||||
| `GET /api/auth/me` | 校验 token 有效性 + 获取当前用户资料 |
|
||||
| `POST /api/auth/refresh` | access token 过期时换新的 |
|
||||
| `POST /api/auth/logout` | 登出(token 加入黑名单) |
|
||||
|
||||
|
||||
> 不在本期范围:注册、找回密码、改密码 — 这些走官网 web 端完成。
|
||||
|
||||
---
|
||||
|
||||
## 2. 接入信息
|
||||
|
||||
### 2.1 Base URL
|
||||
|
||||
生产环境通过 Azure APIM 网关接入:
|
||||
|
||||
```
|
||||
https://apimtaiji.azure-api.net/api/mcp
|
||||
```
|
||||
|
||||
完整路径示例:
|
||||
|
||||
```
|
||||
POST https://apimtaiji.azure-api.net/api/mcp/api/auth/login
|
||||
```
|
||||
|
||||
### 2.2 通用请求头
|
||||
|
||||
|
||||
| Header | 必填 | 说明 |
|
||||
| -------------------------------- | ----------- | -------------- |
|
||||
| `Content-Type: application/json` | 是(POST/PUT) | 请求体 JSON |
|
||||
| `Authorization: Bearer <token>` | 受保护接口必填 | 见 §3 |
|
||||
| `X-Request-Id: <uuid>` | 建议 | 全链路追踪 ID,客户端生成 |
|
||||
|
||||
|
||||
### 2.3 Token 模型
|
||||
|
||||
登录成功返回两个 token:
|
||||
|
||||
|
||||
| Token | 用途 | 有效期 |
|
||||
| ----------------- | ------------------------ | ----- |
|
||||
| **Access Token** | 调业务接口(含 `/me`、`/logout`) | 24 小时 |
|
||||
| **Refresh Token** | 仅用于 `/refresh` 换新 access | 7 天 |
|
||||
|
||||
|
||||
JWT claims 包含:`sub`(user_id)、`email`、`role`、`channelId`、`type`(access/refresh)、`iat`、`exp`。
|
||||
|
||||
---
|
||||
|
||||
## 3. 接口详情
|
||||
|
||||
### 3.1 POST /api/auth/login — 登录
|
||||
|
||||
**请求**
|
||||
|
||||
```http
|
||||
POST /api/auth/login HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"password": "YourPassword123",
|
||||
"role": "user"
|
||||
}
|
||||
```
|
||||
|
||||
字段:
|
||||
|
||||
- `email` (string, 必填)
|
||||
- `password` (string, 必填)
|
||||
- `role` (string, 必填):Heicode 客户端**固定传 `"user"`**
|
||||
|
||||
**成功响应 200**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"user": {
|
||||
"id": "b00a7b8e-9e8b-463d-9593-a3b4d0006778",
|
||||
"name": "张三",
|
||||
"email": "user@example.com",
|
||||
"role": "user",
|
||||
"channelId": "6e6fc470-76f8-4bb1-8ea4-625dc5b12bc6"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
|
||||
| HTTP | 含义 | 客户端处理建议 |
|
||||
| ---- | ------------------------- | -------------------------------- |
|
||||
| 401 | 邮箱或密码错误 | 显示"账号或密码错误",让用户重新输入 |
|
||||
| 403 | 账户已被禁用 | 提示用户联系管理员 |
|
||||
| 429 | 登录尝试过于频繁(**每 IP 5 次/分钟**) | 显示倒计时;响应头 `Retry-After: 60` 表示秒数 |
|
||||
| 422 | 请求体校验失败(邮箱格式不合法等) | 检查 `detail` 字段 |
|
||||
| 500 | 服务异常 | 重试或提示稍后再试 |
|
||||
|
||||
|
||||
**重要:限流规则**
|
||||
|
||||
- **每 IP 每分钟最多 5 次**登录尝试(不区分成功失败)
|
||||
- 超出返回 **429 Too Many Requests**,含 `Retry-After` 头(秒)
|
||||
- 计数滑动窗口,60 秒后自动恢复
|
||||
|
||||
---
|
||||
|
||||
### 3.2 GET /api/auth/me — 获取当前用户
|
||||
|
||||
客户端**启动时**应调用此接口校验本地缓存的 access token 是否仍有效,并刷新用户信息。
|
||||
|
||||
**请求**
|
||||
|
||||
```http
|
||||
GET /api/auth/me HTTP/1.1
|
||||
Authorization: Bearer <accessToken>
|
||||
```
|
||||
|
||||
**成功响应 200**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": "b00a7b8e-9e8b-463d-9593-a3b4d0006778",
|
||||
"email": "user@example.com",
|
||||
"name": "张三",
|
||||
"role": "user",
|
||||
"channelId": "6e6fc470-76f8-4bb1-8ea4-625dc5b12bc6",
|
||||
"status": "active",
|
||||
"subscriptionTier": "free",
|
||||
"lastLoginAt": "2026-04-30T06:38:14.765457"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
|
||||
| HTTP | 含义 | 客户端处理建议 |
|
||||
| ---- | --------------------- | ------------------------------------------ |
|
||||
| 401 | Token 无效/过期/已登出/用户不存在 | 调 `/refresh` 换新 token;若 refresh 也 401,跳登录页 |
|
||||
| 403 | 账户已被禁用 | 强制登出,提示联系管理员 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 3.3 POST /api/auth/refresh — 刷新 token
|
||||
|
||||
access token 接近或已过期时调用,使用 **refresh token** 换取新的 access + refresh token 对。
|
||||
|
||||
**请求**
|
||||
|
||||
```http
|
||||
POST /api/auth/refresh HTTP/1.1
|
||||
Authorization: Bearer <refreshToken>
|
||||
```
|
||||
|
||||
> ⚠️ **必须传 refresh token**,传 access token 会被拒绝。
|
||||
|
||||
**成功响应 200**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
客户端收到新的 token 对后**应替换本地缓存**(包括 refresh token,旧的也作废)。
|
||||
|
||||
**错误响应**
|
||||
|
||||
|
||||
| HTTP | 含义 | 客户端处理建议 |
|
||||
| ---- | ---------------------------------------- | ------- |
|
||||
| 401 | refresh token 无效 / 过期 / 错传了 access token | 跳登录页 |
|
||||
|
||||
|
||||
实施细节:
|
||||
|
||||
- 服务端会校验 token claims `type == "refresh"`,否则拒绝
|
||||
- 旧 refresh token 不会被立即吊销(容许并发换发期),但客户端应丢弃旧的
|
||||
|
||||
---
|
||||
|
||||
### 3.4 POST /api/auth/logout — 登出
|
||||
|
||||
将当前 access token 加入黑名单,使其立即失效。
|
||||
|
||||
**请求**
|
||||
|
||||
```http
|
||||
POST /api/auth/logout HTTP/1.1
|
||||
Authorization: Bearer <accessToken>
|
||||
```
|
||||
|
||||
**成功响应 200**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": null,
|
||||
"message": "登出成功"
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
logout 容错性较强,token 黑名单写入失败也会返回 200(前端清理本地 token 即可)。
|
||||
|
||||
**客户端登出流程**:
|
||||
|
||||
1. 调 `/api/auth/logout`
|
||||
2. 清除本地存储的 access + refresh token
|
||||
3. 清除当前用户资料缓存
|
||||
4. 跳转到登录页
|
||||
|
||||
---
|
||||
|
||||
## 4. 完整登录流程(示例)
|
||||
|
||||
### 启动时
|
||||
|
||||
```
|
||||
┌─ 本地有 access token ?
|
||||
│
|
||||
├─ 是 ─→ GET /me
|
||||
│ ├─ 200 ─→ 进入主界面
|
||||
│ └─ 401 ─→ 本地有 refresh token ?
|
||||
│ ├─ 是 ─→ POST /refresh
|
||||
│ │ ├─ 200 ─→ 替换 token,进入主界面
|
||||
│ │ └─ 401 ─→ 跳登录页
|
||||
│ └─ 否 ─→ 跳登录页
|
||||
│
|
||||
└─ 否 ─→ 跳登录页
|
||||
```
|
||||
|
||||
### 登录页提交
|
||||
|
||||
```
|
||||
POST /login
|
||||
├─ 200 ─→ 存 token 对,进主界面
|
||||
├─ 401 ─→ 显示"账号或密码错误"
|
||||
├─ 429 ─→ 显示"尝试过于频繁,请 N 秒后重试"(N 取响应头 Retry-After)
|
||||
└─ 其他 ─→ 显示通用错误
|
||||
```
|
||||
|
||||
### 业务请求过程中 access token 过期
|
||||
|
||||
```
|
||||
任意业务接口返回 401
|
||||
└─→ POST /refresh (用 refresh token)
|
||||
├─ 200 ─→ 替换 token,重试原请求
|
||||
└─ 401 ─→ 清理 token,跳登录页
|
||||
```
|
||||
|
||||
### 登出按钮
|
||||
|
||||
```
|
||||
POST /logout
|
||||
└─→ 不论结果都清理本地 token,跳登录页
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 错误响应格式
|
||||
|
||||
当前为 FastAPI 默认格式(下个版本 `/api/v1/*` 路径会改为标准 envelope,本期保留兼容):
|
||||
|
||||
```json
|
||||
{
|
||||
"detail": "邮箱或密码错误"
|
||||
}
|
||||
```
|
||||
|
||||
422 校验错误格式(Pydantic):
|
||||
|
||||
```json
|
||||
{
|
||||
"detail": [
|
||||
{
|
||||
"type": "value_error",
|
||||
"loc": ["body", "email"],
|
||||
"msg": "value is not a valid email address: ...",
|
||||
"input": "abc"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 安全注意事项
|
||||
|
||||
|
||||
| 项 | 说明 |
|
||||
| -------------- | -------------------------------------------------------------------------------------- |
|
||||
| **token 存储** | 桌面应用建议存到 OS 安全凭据存储(Windows Credential Manager / macOS Keychain / Linux Secret Service) |
|
||||
| **HTTPS 强制** | 生产 base URL 已是 HTTPS;客户端**禁止**回退 HTTP |
|
||||
| **token 泄露应对** | 用户怀疑泄露时提示去官网 web 端改密码(改密会导致所有 session 黑名单) |
|
||||
| **审计日志** | 所有 login 尝试(成功/失败)服务端均写审计 |
|
||||
| **状态码不泄漏** | 错误信息已统一用"邮箱或密码错误",不区分账号是否存在,防爆破 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 7. 测试账号(仅供联调)
|
||||
|
||||
|
||||
| 角色 | 邮箱 | 密码 |
|
||||
| ---- | ----------- | ------------ |
|
||||
| 普通用户 | `55@55.com` | `By@123456.` |
|
||||
|
||||
|
||||
> ⚠️ 测试账号仅用于联调阶段,正式上线前请务必关闭。
|
||||
|
||||
---
|
||||
|
||||
## 8. 已上线生产验证清单
|
||||
|
||||
|
||||
| 测试项 | 结果 |
|
||||
| ------------------------------------------ | --- |
|
||||
| login 200 + 返回 access/refresh token | ✅ |
|
||||
| /me 用 access token → 200 + 完整 profile | ✅ |
|
||||
| /refresh 用 refresh token → 200 + 新 token 对 | ✅ |
|
||||
| /refresh 用 access token → 401 拒绝 | ✅ |
|
||||
| logout → 200 | ✅ |
|
||||
| logout 后旧 token 调 /me → 401(黑名单生效) | ✅ |
|
||||
| 连续 7 次错密 → 第 6 次起 429(每 IP 5/min 限流) | ✅ |
|
||||
| 服务器审计日志记录所有 login(含成功/失败) | ✅ |
|
||||
|
||||
|
||||
镜像 digest: `sha256:339b64ae090dc81fa13cb29705958167e77fe0698e27ac227c05054ed5c42309`
|
||||
镜像 tag: `taiji.azurecr.io/mcp-server:heicode-auth-fix2-20260430`
|
||||
部署日期: 2026-04-30
|
||||
|
||||
---
|
||||
|
||||
## 9. 联系
|
||||
|
||||
如对接过程发现接口行为与本文档不一致,请联系 Heicode Manager 后端团队,附上:
|
||||
|
||||
- 请求完整 URL / Headers / Body
|
||||
- 响应 HTTP 状态 + Body
|
||||
- `X-Request-Id` 头值(便于服务端按 ID 反查日志)
|
||||
|
||||
@@ -0,0 +1,961 @@
|
||||
# Manager → Agnet 平台接口参数文档
|
||||
|
||||
**版本**: v0.3(P1/P5 联调契约)
|
||||
**生效日期**: 2026-05-03
|
||||
**状态**: 联调准备;当前仓库提供 Manager 侧最小验证端点,生产 Agnet 平台部署尚未在本文档中宣称完成。
|
||||
**方向**: Heicode Manager 主动请求 Agnet 平台;Agnet 平台返回部署、日志、监控与审计状态。
|
||||
**范围**: 创建/停止子 Agent 部署、查询部署、获取事件/日志/监控快照、解析 SK 快照、查询审计日志,以及 Agnet 辅助 NewAPI 重建/部署的参数约定。
|
||||
|
||||
> 2026-05-04 边界修正:Manager 当前不把 `tenant/project` 作为产品、认证或扣费主轴。新请求应使用 `user_context.user_id`、`user_context.channel_id`、`resource_grants[].binding_scope`、`billing_context(newapi)` 和 `agent_runtime(agnet)`。本文中仍出现的 `tenant_id/project_id` 只表示旧字段兼容或历史接口命名,不应作为新功能设计依据。
|
||||
**安全红线**: 请求体只允许传资源元数据、权限范围与 `secret_ref`/环境变量名;不得传明文密码、Token、私钥、连接串或云访问密钥。
|
||||
|
||||
> 本文档描述 Manager 对 Agnet 平台的出站集成契约。当前仓库中 `/api/agnet/*` 是 Manager 侧最小控制面/模拟端点,用于校验同一套 payload 结构;生产接入时,Manager 应将下列请求发送到 Agnet 平台网关。
|
||||
|
||||
## 0. 概述
|
||||
|
||||
本文档按登录接口文档的对接方式组织:先定义接入信息,再逐个接口给出请求、响应、错误和安全约束。接口分组如下:
|
||||
|
||||
| 接口 | 用途 | 当前性质 |
|
||||
|---|---|---|
|
||||
| `POST /api/agnet/deployments` | 创建子 Agent/运维任务部署,含 NewAPI 重建/部署场景 | 必需 |
|
||||
| `GET /api/agnet/deployments` | 查询部署列表 | 必需 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}` | 查询单个部署详情 | 必需 |
|
||||
| `POST /api/agnet/deployments/{deployment_id}/stop` | 停止部署或取消排队任务 | 必需 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}/logs` | 拉取部署日志 | 必需 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}/logs/stream` | 实时日志 SSE | 可选 |
|
||||
| `GET /api/agnet/projects/{project_id}/dashboard-snapshot` | 资源作用域监控快照;路径名保留旧兼容,参数值按 `binding_scope` 解释 | 必需 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}/metrics` | 单部署指标序列 | 建议 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}/events` | 部署事件 | 必需 |
|
||||
| `GET /api/agnet/audit-logs` | 审计日志 | 必需 |
|
||||
| `POST /api/agnet/sk-snapshots/resolve` | 触发 SK 快照解析 | 必需 |
|
||||
| `GET /api/agnet/deployments/{deployment_id}/sk-snapshots` | 查询 SK 快照 | 必需 |
|
||||
|
||||
> 不在本文档范围:真实 Secret Store 写入、生产 SSH 登录、云账号授权回调、NewAPI 管理后台开放。生产部署动作只有实际执行并通过日志/监控/审计验证后,才能在报告中标记为“已部署”。
|
||||
|
||||
---
|
||||
|
||||
## 1. 接入约定
|
||||
|
||||
### 1.1 Base URL
|
||||
|
||||
由部署环境配置,不写入仓库。例如:
|
||||
|
||||
```text
|
||||
AGNET_PLATFORM_BASE_URL=https://agnet-platform.example.com
|
||||
```
|
||||
|
||||
联调环境建议使用独立域名或内网网关,示例不得包含真实凭据:
|
||||
|
||||
```text
|
||||
AGNET_PLATFORM_BASE_URL=https://staging-agnet.example.com
|
||||
MANAGER_SERVICE_TOKEN_SECRET_REF=vault://secret/users/manager-service/bindings/agnet-platform/service-token
|
||||
```
|
||||
|
||||
完整路径示例:
|
||||
|
||||
```http
|
||||
POST https://agnet-platform.example.com/api/agnet/deployments
|
||||
```
|
||||
|
||||
### 1.2 通用 Header
|
||||
|
||||
| Header | 必填 | 说明 |
|
||||
|---|---:|---|
|
||||
| `Authorization: Bearer <manager-service-token>` | 是 | Manager 服务身份令牌,由 Secret Store/运行环境注入。 |
|
||||
| `Content-Type: application/json` | POST/PUT 是 | JSON 请求体。 |
|
||||
| `X-User-Id: <user_id>` | 建议 | 登录用户边界;也可从 Manager 服务端 token 或 body `user_context.user_id` 推导。 |
|
||||
| `X-Binding-Scope: <binding_scope>` | 建议 | Git/SK/云资源作用域;也可从 `resource_grants[].binding_scope` 推导。 |
|
||||
| `X-Correlation-Id: <uuid>` | 是 | Manager 生成,全链路追踪。 |
|
||||
| `X-Request-Id: <uuid>` | 建议 | 单次 HTTP 请求追踪 ID,可与 correlation_id 不同。 |
|
||||
| `Idempotency-Key: <uuid>` | 创建类接口建议 | 避免重试造成重复部署。 |
|
||||
|
||||
### 1.3 通用响应包裹
|
||||
|
||||
成功:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
失败:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "human readable message",
|
||||
"error": {
|
||||
"code": "POLICY_REJECTED",
|
||||
"message": "human readable message",
|
||||
"request_id": "req_xxx"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
建议错误码:
|
||||
|
||||
| code | 场景 |
|
||||
|---|---|
|
||||
| `POLICY_REJECTED` | 缺必填字段、权限策略不满足、风险等级非法。 |
|
||||
| `BUDGET_EXCEEDED` | 超过 token/金额/时长预算。 |
|
||||
| `MODEL_NOT_ALLOWED` | agent 默认模型不在允许列表内。 |
|
||||
| `FORBIDDEN_SCOPE` | Header 与 body/query 的用户或资源作用域不一致。 |
|
||||
| `RESOURCE_GRANT_INVALID` | Resource Grant 字段缺失、跨用户/跨资源作用域/角色不匹配。 |
|
||||
| `RESOURCE_GRANT_SECRET_REF_REQUIRED` | 凭据型资源缺少 `secret_ref`。 |
|
||||
| `RESOURCE_GRANT_SECRET_REJECTED` | 请求中出现明文密钥字段。 |
|
||||
| `SK_SOURCE_UNRESOLVABLE` | SK 来源不可解析。 |
|
||||
| `DEPLOYMENT_CONFLICT` | 部署不存在、状态冲突或重复提交。 |
|
||||
| `NOT_FOUND` | deployment、agent instance、snapshot 或审计资源不存在。 |
|
||||
| `CURSOR_EXPIRED` | 分页游标过期或不属于当前查询条件。 |
|
||||
| `RATE_LIMITED` | 平台限流;响应头建议包含 `Retry-After`。 |
|
||||
| `INTERNAL_ERROR` | 平台内部错误;Manager 应记录 request_id 并重试或提示稍后处理。 |
|
||||
|
||||
### 1.4 通用错误处理
|
||||
|
||||
| HTTP | business code | Manager 处理建议 |
|
||||
|---:|---|---|
|
||||
| 400 | `POLICY_REJECTED` / `RESOURCE_GRANT_INVALID` | 标记部署失败,展示校验原因,不自动重试。 |
|
||||
| 401 | `UNAUTHORIZED` | 检查 Manager 服务令牌的 `secret_ref`/环境注入,不把令牌写入日志。 |
|
||||
| 403 | `FORBIDDEN_SCOPE` / `MODEL_NOT_ALLOWED` | 阻断本次部署,写审计事件。 |
|
||||
| 404 | `NOT_FOUND` | 对查询类接口返回空态;对控制类接口提示资源不存在。 |
|
||||
| 409 | `DEPLOYMENT_CONFLICT` | 使用 `Idempotency-Key` 查询既有结果,避免重复创建。 |
|
||||
| 410 | `CURSOR_EXPIRED` | 丢弃 cursor,使用 `since` 重新拉取。 |
|
||||
| 422 | `RESOURCE_GRANT_SECRET_REF_REQUIRED` / `RESOURCE_GRANT_SECRET_REJECTED` | 要求 Manager 重新生成只含 `secret_ref` 的 payload。 |
|
||||
| 429 | `RATE_LIMITED` | 按 `Retry-After` 退避重试。 |
|
||||
| 500/503 | `INTERNAL_ERROR` | 指数退避重试;超过阈值后转人工排查。 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 创建子 Agent 部署
|
||||
|
||||
### 2.1 Endpoint
|
||||
|
||||
```http
|
||||
POST /api/agnet/deployments
|
||||
```
|
||||
|
||||
### 2.2 请求体
|
||||
|
||||
```json
|
||||
{
|
||||
"orchestration_plan": {
|
||||
"intent_id": "intent_20260502_001",
|
||||
"template_hint": "manager-resource-binding",
|
||||
"objective": "为已绑定的代码仓库启动 builder 子 Agent,允许其读取 SK 并在限定路径内提交代码",
|
||||
"risk_level": "low",
|
||||
"budget": {
|
||||
"max_tokens": 100000,
|
||||
"max_cost_usd": 30,
|
||||
"max_duration_sec": 7200
|
||||
},
|
||||
"user_context": {
|
||||
"user_id": "user_123",
|
||||
"email": "user@example.com",
|
||||
"role": "user",
|
||||
"channel_id": "channel_abc",
|
||||
"subscription_tier": "pro"
|
||||
},
|
||||
"billing_context": {
|
||||
"provider": "newapi",
|
||||
"newapi_user_ref": "newapi_user_123",
|
||||
"newapi_group": "development",
|
||||
"quota_ref": "newapi_token_or_group_quota_ref"
|
||||
},
|
||||
"agent_runtime": {
|
||||
"platform": "agnet",
|
||||
"agents": [
|
||||
{
|
||||
"role": "builder",
|
||||
"model_ref": "agnet_model_profile_builder",
|
||||
"instance_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
"constraints": {
|
||||
"allowed_model_ids": ["gpt-5.4-mini", "gpt-5.4"]
|
||||
},
|
||||
"metadata": {
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-resource-scope",
|
||||
"correlation_id": "corr_20260502_001"
|
||||
},
|
||||
"agents": [
|
||||
{
|
||||
"role_template": "builder",
|
||||
"goal": "按 Manager 下发的任务在允许资源内完成实现、验证并回传状态",
|
||||
"default_model_id": "gpt-5.4-mini",
|
||||
"sk_sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"mime": "text/markdown",
|
||||
"repo_ref": {
|
||||
"connection_id": "conn_sk_repo_001",
|
||||
"repo_url": "https://example.com/org/sk-repo.git",
|
||||
"ref": "main",
|
||||
"paths": ["skills/heicode/**", "AGENTS.md"]
|
||||
}
|
||||
}
|
||||
],
|
||||
"runtime_execution": {
|
||||
"profile_id": "aks-codex-standard",
|
||||
"cloud_principal_refs": ["principal://users/user_123/agnet-runtime"],
|
||||
"network_policy_ref": "netpol://bindings/repo_default/restricted-egress"
|
||||
},
|
||||
"sk_access_policy": {
|
||||
"policy_ref": "sk-policy://bindings/repo_default/default-readonly",
|
||||
"deny_skill_ids": ["dangerous-shell"],
|
||||
"inherit_deployment_defaults": true
|
||||
},
|
||||
"resource_grants": [
|
||||
{
|
||||
"grant_id": "grant_git_repo_001",
|
||||
"resource_id": "res_git_repo_001",
|
||||
"resource_type": "git",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "repo_default",
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-resource-scope",
|
||||
"target_role": "builder",
|
||||
"target_agent_ref": "agent-builder-1",
|
||||
"permission_scope": ["repo:read", "repo:write:current-branch"],
|
||||
"constraints": {
|
||||
"ref": "main",
|
||||
"allowed_paths": "heicode/**,docs/**",
|
||||
"forbid_branch_create": "true"
|
||||
},
|
||||
"metadata": {
|
||||
"provider": "gitee",
|
||||
"repo_url": "https://example.com/org/repo.git"
|
||||
},
|
||||
"status": "active",
|
||||
"secret_ref": "vault://secret/users/user_123/bindings/repo_default/resources/res_git_repo_001",
|
||||
"audit": {
|
||||
"created_by": "manager",
|
||||
"approval_id": "approval_001"
|
||||
}
|
||||
},
|
||||
{
|
||||
"grant_id": "grant_doc_001",
|
||||
"resource_id": "res_project_doc_001",
|
||||
"resource_type": "project_doc",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "repo_default",
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-resource-scope",
|
||||
"target_role": "builder",
|
||||
"target_agent_ref": "agent-builder-1",
|
||||
"permission_scope": ["doc:read"],
|
||||
"constraints": {
|
||||
"doc_paths": "docs/heicode.md,docs/plan.md"
|
||||
},
|
||||
"metadata": {
|
||||
"doc_ref": "project-doc://project-a/docs-mainline"
|
||||
},
|
||||
"status": "active",
|
||||
"audit": {
|
||||
"created_by": "manager"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 字段说明
|
||||
|
||||
#### orchestration_plan
|
||||
|
||||
| 字段 | 类型 | 必填 | 约束/说明 |
|
||||
|---|---|---:|---|
|
||||
| `intent_id` | string | 是 | Manager 侧意图 ID,用于幂等、审计和追踪。 |
|
||||
| `template_hint` | string | 是 | Agnet 平台选择编排模板的提示,如 `manager-resource-binding`。 |
|
||||
| `objective` | string | 是 | 本次部署目标,应是自然语言但不能含密钥。 |
|
||||
| `risk_level` | enum | 是 | `low` / `medium` / `high`。高风险必须携带客户端审批证据;缺失或不匹配时只能只读或拒绝执行。 |
|
||||
| `budget.max_tokens` | int | 是 | 当前策略上限建议不超过 `500000`。 |
|
||||
| `budget.max_cost_usd` | number | 是 | 当前策略上限建议不超过 `200`。 |
|
||||
| `budget.max_duration_sec` | int | 是 | 当前策略上限建议不超过 `86400`。 |
|
||||
| `user_context` | object | 建议 | 登录用户上下文,优先使用 Heicode/Agnet 登录返回的 `user.id`/`channelId`。 |
|
||||
| `billing_context` | object | 条件 | NewAPI 扣费上下文;只表达 user/token/group/quota 映射,不表达子 Agnet 模型或实例数。 |
|
||||
| `agent_runtime` | object | 条件 | Agnet 平台运行时上下文;表达子 Agnet 角色、模型 profile 和实例数,不承载 NewAPI key 或扣费对象。 |
|
||||
| `constraints.allowed_model_ids` | string[] | 否 | agent 的 `default_model_id` 如填写,必须在此列表内。 |
|
||||
| `metadata.tenant_id` | string | 否 | 旧兼容字段;新实现不得作为产品租户边界。 |
|
||||
| `metadata.project_id` | string | 否 | 旧兼容字段;新实现不得作为项目账本边界。 |
|
||||
| `metadata.correlation_id` | string | 是 | 全链路追踪 ID。 |
|
||||
| `agents` | array | 是 | 至少 1 个子 Agent。 |
|
||||
|
||||
#### user_context / billing_context / agent_runtime
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---:|---|
|
||||
| `user_context.user_id` | string | 建议 | Manager 业务用户 ID,来自登录接口 `id` 或 JWT `sub`。 |
|
||||
| `user_context.channel_id` | string | 建议 | 用于关联 NewAPI 用户、Token、Group、余额或额度策略。 |
|
||||
| `billing_context.provider` | enum | 条件 | 当前只允许 `newapi`。设置后必须提供 `channel_id`、`newapi_user_ref`、`newapi_group` 或 `quota_ref` 之一。 |
|
||||
| `billing_context.newapi_user_ref` | string | 否 | NewAPI 用户映射引用,不是 NewAPI key。 |
|
||||
| `billing_context.newapi_group` | string | 否 | NewAPI Group 映射,用于额度或策略选择。 |
|
||||
| `billing_context.quota_ref` | string | 否 | Token 或 Group 额度引用,不得包含真实 Token 原文。 |
|
||||
| `agent_runtime.platform` | enum | 条件 | 当前只允许 `agnet`。 |
|
||||
| `agent_runtime.agents[].role` | string | 条件 | 必须匹配 `agents[].role_template`。 |
|
||||
| `agent_runtime.agents[].model_ref` | string | 条件 | Agnet 平台模型 profile 引用;不是 NewAPI 扣费字段。 |
|
||||
| `agent_runtime.agents[].instance_count` | int | 条件 | 子 Agnet 实例数量,必须大于 0。 |
|
||||
|
||||
#### agents[]
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---:|---|
|
||||
| `role_template` | string | 是 | 平台角色模板,如 `builder`/`reviewer`/`operator`。 |
|
||||
| `goal` | string | 是 | 此 agent 的任务目标。 |
|
||||
| `default_model_id` | string | 否 | 默认模型;若设置需满足 allowed_model_ids。 |
|
||||
| `sk_sources` | array | 否 | SK 来源,平台应解析为只读快照。 |
|
||||
| `runtime_execution` | object | 否 | 运行环境绑定;任一字段存在时 `profile_id` 必填。 |
|
||||
| `sk_access_policy` | object | 否 | SK 权限策略。若 `deny_skill_ids` 非空,需 `policy_ref` 或继承默认策略。 |
|
||||
| `resource_grants` | array | 否 | Manager 下发给子 Agent 的最小权限资源授权。 |
|
||||
|
||||
#### sk_sources[]
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---:|---|
|
||||
| `type` | enum | 否 | 空值表示不启用;支持 `git`、`upload`。 |
|
||||
| `artifact_id` | string | upload 必填 | 上传型 SK 包 ID。 |
|
||||
| `mime` | string | 否 | 内容类型,如 `text/markdown`。 |
|
||||
| `repo_ref.connection_id` | string | git 建议 | Git 连接资源 ID。 |
|
||||
| `repo_ref.repo_url` | string | git 建议 | 仓库 URL;不得带用户名密码。 |
|
||||
| `repo_ref.ref` | string | git 必填 | 分支/标签/commit。 |
|
||||
| `repo_ref.paths` | string[] | git 必填 | 允许读取的路径。 |
|
||||
|
||||
#### runtime_execution
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---:|---|
|
||||
| `profile_id` | string | 条件必填 | Agnet 平台运行规格,如 AKS profile。 |
|
||||
| `cloud_principal_refs` | string[] | 否 | 运行身份引用,不是明文凭据。 |
|
||||
| `network_policy_ref` | string | 否 | 网络策略引用,用于限制出站/入站。 |
|
||||
|
||||
#### resource_grants[]
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---:|---|
|
||||
| `grant_id` | string | 是 | 授权记录 ID。 |
|
||||
| `resource_id` | string | 是 | Manager 资源 ID。 |
|
||||
| `resource_type` | enum | 是 | `git` / `sk` / `project_doc` / `cloud_account` / `cloud_resource`。 |
|
||||
| `user_id` | string | 建议 | 与 `user_context.user_id` 一致;为空时平台可从部署上下文推导。 |
|
||||
| `binding_scope` | string | 是 | Git/SK/云资源作用域,例如 repo/ref/path 或云资源引用。 |
|
||||
| `tenant_id` | string | 否 | 旧兼容字段;新实现不应依赖。 |
|
||||
| `project_id` | string | 否 | 旧兼容字段;新实现不应依赖。 |
|
||||
| `target_role` | string | 是 | 必须等于当前 agent 的 `role_template`。 |
|
||||
| `target_agent_ref` | string | 是 | Manager 侧对子 Agent 的逻辑引用。 |
|
||||
| `permission_scope` | string[] | 是 | 最小权限列表,如 `repo:read`、`doc:read`。 |
|
||||
| `constraints` | object<string,string> | 否 | 路径、分支、区域、超时等限制;不得含密钥字段。 |
|
||||
| `metadata` | object<string,string> | 否 | 资源展示/审计元数据;不得含密钥字段。 |
|
||||
| `status` | enum | 是 | `pending` / `active` / `disabled` / `revoked`。 |
|
||||
| `secret_ref` | string | 条件必填 | `git`、`sk`、`cloud_account`、`cloud_resource` 必填;`project_doc` 可为空。 |
|
||||
| `audit` | object<string,string> | 否 | 审计上下文;不得含密钥字段。 |
|
||||
|
||||
### 2.4 典型场景:Agnet 辅助 NewAPI 重建/部署
|
||||
|
||||
当 Manager 需要让 Agnet 平台协助重建或部署 NewAPI 时,仍使用 `POST /api/agnet/deployments`,但必须把任务表达为受控运维部署,不得把 VM、PostgreSQL、Redis、NewAPI key 等真实凭据写入请求体。
|
||||
|
||||
请求体示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"orchestration_plan": {
|
||||
"intent_id": "intent_newapi_rebuild_20260503_001",
|
||||
"template_hint": "newapi-rebuild-deploy",
|
||||
"objective": "在批准窗口内重建 NewAPI 服务并回传健康检查、日志与资源使用摘要",
|
||||
"risk_level": "high",
|
||||
"budget": {
|
||||
"max_tokens": 80000,
|
||||
"max_cost_usd": 20,
|
||||
"max_duration_sec": 3600
|
||||
},
|
||||
"constraints": {
|
||||
"allowed_model_ids": ["gpt-5.4", "gpt-5.4-mini"],
|
||||
"requires_approval": "true",
|
||||
"rollback_required": "true",
|
||||
"healthcheck_url_ref": "env://NEWAPI_HEALTHCHECK_URL"
|
||||
},
|
||||
"metadata": {
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-newapi-scope",
|
||||
"correlation_id": "corr_newapi_20260503_001",
|
||||
"service": "new-api",
|
||||
"environment": "production",
|
||||
"commit": "origin/main",
|
||||
"runbook_ref": "heicode/docs/deploy/new-api-rebuild-deploy-runbook.md"
|
||||
},
|
||||
"agents": [
|
||||
{
|
||||
"role_template": "operator",
|
||||
"goal": "按 runbook 执行构建、服务重启、健康检查和失败回滚;只通过 secret_ref/env 获取凭据",
|
||||
"default_model_id": "gpt-5.4",
|
||||
"runtime_execution": {
|
||||
"profile_id": "aks-codex-ops",
|
||||
"cloud_principal_refs": ["principal://users/user_123/agnet-ops"],
|
||||
"network_policy_ref": "netpol://bindings/newapi-prod/ops-egress"
|
||||
},
|
||||
"resource_grants": [
|
||||
{
|
||||
"grant_id": "grant_newapi_vm_ops",
|
||||
"resource_id": "res_newapi_vm",
|
||||
"resource_type": "cloud_resource",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "newapi-prod",
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-newapi-scope",
|
||||
"target_role": "operator",
|
||||
"target_agent_ref": "agent-operator-1",
|
||||
"permission_scope": ["vm:ssh:approved-window", "service:restart", "log:read", "healthcheck:read"],
|
||||
"constraints": {
|
||||
"approval_id": "approval_newapi_001",
|
||||
"window": "2026-05-03T10:00:00Z/2026-05-03T11:00:00Z",
|
||||
"rollback_command_ref": "runbook://newapi/rollback"
|
||||
},
|
||||
"metadata": {
|
||||
"host_ref": "env://NEWAPI_VM_HOST",
|
||||
"service_name": "new-api"
|
||||
},
|
||||
"status": "active",
|
||||
"secret_ref": "vault://secret/users/user_123/bindings/newapi-prod/resources/res_newapi_vm",
|
||||
"audit": {
|
||||
"created_by": "manager",
|
||||
"approval_id": "approval_newapi_001"
|
||||
}
|
||||
},
|
||||
{
|
||||
"grant_id": "grant_newapi_runtime_env",
|
||||
"resource_id": "res_newapi_runtime_env",
|
||||
"resource_type": "cloud_resource",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "newapi-prod",
|
||||
"tenant_id": "legacy-user-scope",
|
||||
"project_id": "legacy-newapi-scope",
|
||||
"target_role": "operator",
|
||||
"target_agent_ref": "agent-operator-1",
|
||||
"permission_scope": ["env:read:runtime", "secret:read:scoped"],
|
||||
"constraints": {
|
||||
"allowed_env_refs": "DATABASE_DSN,REDIS_URL,NEWAPI_SERVICE_TOKEN",
|
||||
"plaintext_export_forbidden": "true"
|
||||
},
|
||||
"metadata": {
|
||||
"secret_provider": "openbao",
|
||||
"scope": "newapi-runtime"
|
||||
},
|
||||
"status": "active",
|
||||
"secret_ref": "vault://secret/users/user_123/bindings/newapi-prod/resources/res_newapi_runtime_env",
|
||||
"audit": {
|
||||
"created_by": "manager",
|
||||
"approval_id": "approval_newapi_001"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Agnet 平台返回的部署详情、日志、监控和审计中应至少能证明:构建版本/commit、服务重启结果、健康检查结果、资源使用情况、失败回滚状态。未执行真实 SSH/生产动作时,只能返回 `phase=planned` 或 `phase=pending_approval`。
|
||||
|
||||
NewAPI 重建/部署的完成判定必须同时满足:
|
||||
|
||||
1. `metadata.commit` 或部署详情中的 resolved commit 已在 VM 仓库中生效。
|
||||
2. 部署日志包含构建/compose/restart 的脱敏摘要。
|
||||
3. 健康检查返回成功,且监控接口能返回本次 deployment 的状态或资源摘要。
|
||||
4. 审计日志包含高风险审批 ID、执行者、目标环境和结果。
|
||||
5. 回滚指针或回滚命令引用已记录。
|
||||
|
||||
### 2.5 成功响应
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"deployment_id": "dep_abc123",
|
||||
"status": "accepted",
|
||||
"agent_instances": [
|
||||
{
|
||||
"instance_id": "agi_abc123",
|
||||
"role": "builder",
|
||||
"phase": "pending"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 部署状态与控制接口
|
||||
|
||||
### 3.1 查询部署列表
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments?user_id=user_123&binding_scope=repo_default
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"deployment_id": "dep_abc123",
|
||||
"status": "accepted",
|
||||
"phase": "pending",
|
||||
"created_at": "2026-05-02T00:00:00Z",
|
||||
"updated_at": "2026-05-02T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 查询单个部署
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}
|
||||
```
|
||||
|
||||
返回应包含部署状态、phase、agent_instances、最近错误、资源授权摘要和预算消耗摘要。Agnet 平台返回时必须对 `secret_ref` 以外的凭据信息做脱敏;原则上不返回任何明文凭据。
|
||||
|
||||
### 3.3 停止部署
|
||||
|
||||
```http
|
||||
POST /api/agnet/deployments/{deployment_id}/stop
|
||||
```
|
||||
|
||||
请求体可为空;如需原因可扩展:
|
||||
|
||||
```json
|
||||
{
|
||||
"reason": "user_requested",
|
||||
"requested_by": "manager"
|
||||
}
|
||||
```
|
||||
|
||||
成功:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"deployment_id": "dep_abc123",
|
||||
"status": "stopped"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
错误与幂等:
|
||||
|
||||
| HTTP | business code | 说明 |
|
||||
|---:|---|---|
|
||||
| 200 | - | 已停止的部署重复停止也可返回 200,并保持 `status=stopped`。 |
|
||||
| 404 | `NOT_FOUND` | 部署不存在或不属于当前租户/项目。 |
|
||||
| 409 | `DEPLOYMENT_CONFLICT` | 部署已进入不可停止的终态,如 `completed` 且无运行实例。 |
|
||||
| 422 | `POLICY_REJECTED` | 高风险停止缺少审批记录或 reason 不合法。 |
|
||||
|
||||
若停止请求触发异步回收,平台可返回 `status=stopping`;Manager 应继续通过事件、日志和监控接口确认最终状态。
|
||||
|
||||
---
|
||||
|
||||
## 4. 日志接口(Manager 拉取 Agnet 平台)
|
||||
|
||||
### 4.1 获取部署日志
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}/logs?agent_instance_id=agi_abc123&stream=stdout&since=2026-05-02T00:00:00Z&limit=200&cursor=cur_001
|
||||
```
|
||||
|
||||
Query:
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|---|---:|---|
|
||||
| `agent_instance_id` | 否 | 不传则返回该 deployment 下全部实例日志。 |
|
||||
| `stream` | 否 | `stdout` / `stderr` / `system` / `audit`,默认全部。 |
|
||||
| `since` | 否 | RFC3339 时间,增量拉取起点。 |
|
||||
| `limit` | 否 | 默认 200,建议最大 1000。 |
|
||||
| `cursor` | 否 | 分页游标。 |
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"log_id": "log_001",
|
||||
"deployment_id": "dep_abc123",
|
||||
"agent_instance_id": "agi_abc123",
|
||||
"stream": "stdout",
|
||||
"level": "info",
|
||||
"message": "task started",
|
||||
"redacted": true,
|
||||
"occurred_at": "2026-05-02T00:00:01Z"
|
||||
}
|
||||
],
|
||||
"next_cursor": "cur_002",
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
日志要求:
|
||||
|
||||
- Agnet 平台必须在返回前完成密钥脱敏。
|
||||
- `message` 不得包含密码、Token、私钥、连接串、云访问密钥。
|
||||
- Manager 只保存必要摘要和审计索引;长日志建议落对象存储并设置保留期。
|
||||
|
||||
### 4.2 实时日志流(可选)
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}/logs/stream?agent_instance_id=agi_abc123
|
||||
Accept: text/event-stream
|
||||
```
|
||||
|
||||
SSE event 示例:
|
||||
|
||||
```text
|
||||
event: log
|
||||
data: {"log_id":"log_002","level":"info","message":"step completed","occurred_at":"2026-05-02T00:00:02Z"}
|
||||
```
|
||||
|
||||
SSE 事件类型:
|
||||
|
||||
| event | 说明 |
|
||||
|---|---|
|
||||
| `log` | 普通日志行,必须已脱敏。 |
|
||||
| `heartbeat` | 保活事件,建议 15-30 秒一次。 |
|
||||
| `error` | 流式读取错误;不包含敏感上下文。 |
|
||||
| `done` | 部署进入终态或服务端主动结束流。 |
|
||||
|
||||
错误处理:
|
||||
|
||||
| HTTP | business code | Manager 处理建议 |
|
||||
|---:|---|---|
|
||||
| 401/403 | `UNAUTHORIZED` / `FORBIDDEN_SCOPE` | 立即断开流并记录审计。 |
|
||||
| 404 | `NOT_FOUND` | 停止订阅并刷新部署详情。 |
|
||||
| 429 | `RATE_LIMITED` | 退避后重连,保留 `Last-Event-Id`。 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 监控接口(Manager 拉取 Agnet 平台)
|
||||
|
||||
### 5.1 项目监控快照
|
||||
|
||||
```http
|
||||
GET /api/agnet/projects/{binding_scope}/dashboard-snapshot?window=1h
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"project_id": "project-a",
|
||||
"active_instances": 3,
|
||||
"phase_distribution": {
|
||||
"pending": 1,
|
||||
"running": 2,
|
||||
"stopped": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"failure_rate_1h": 0.02,
|
||||
"avg_task_duration": 185.3,
|
||||
"budget": {
|
||||
"tokens_used": 32000,
|
||||
"cost_usd": 4.21,
|
||||
"duration_sec": 930
|
||||
},
|
||||
"resource_usage": {
|
||||
"cpu_millicores": 1200,
|
||||
"memory_mb": 2048,
|
||||
"network_rx_bytes": 102400,
|
||||
"network_tx_bytes": 204800
|
||||
},
|
||||
"updated_at": "2026-05-02T00:05:00Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 单部署监控快照(建议平台实现)
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}/metrics?window=15m&step=60s
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"deployment_id": "dep_abc123",
|
||||
"window": "15m",
|
||||
"series": [
|
||||
{
|
||||
"metric": "tokens_used",
|
||||
"unit": "count",
|
||||
"points": [["2026-05-02T00:00:00Z", 1200]]
|
||||
},
|
||||
{
|
||||
"metric": "cpu_millicores",
|
||||
"unit": "millicore",
|
||||
"points": [["2026-05-02T00:00:00Z", 500]]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
建议指标:`tokens_used`、`cost_usd`、`duration_sec`、`cpu_millicores`、`memory_mb`、`restart_count`、`tool_call_count`、`error_count`、`queue_latency_ms`。
|
||||
|
||||
---
|
||||
|
||||
## 6. 事件与审计接口
|
||||
|
||||
### 6.1 部署事件
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}/events?since=2026-05-02T00:00:00Z&limit=200&cursor=cur_001
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"event_id": "evt_001",
|
||||
"event": "deployment.accepted",
|
||||
"schema_version": 1,
|
||||
"user_id": "user_123",
|
||||
"channel_id": "channel_abc",
|
||||
"binding_scope": "repo_default",
|
||||
"deployment_id": "dep_abc123",
|
||||
"correlation_id": "corr_20260502_001",
|
||||
"occurred_at": "2026-05-02T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"next_cursor": "cur_002",
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
常用事件名:
|
||||
|
||||
| event | 说明 |
|
||||
|---|---|
|
||||
| `deployment.accepted` | 平台接受部署请求。 |
|
||||
| `instance.phase_changed` | 子 Agent phase 变化。 |
|
||||
| `sk_snapshot_refreshed` | SK 快照解析/刷新完成。 |
|
||||
| `resource_grant.attached` | 资源授权已绑定到实例。 |
|
||||
| `resource_grant.revoked` | 授权被撤销或禁用。 |
|
||||
| `budget.threshold_reached` | 预算阈值触发。 |
|
||||
| `deployment.failed` | 部署失败。 |
|
||||
|
||||
### 6.2 审计日志
|
||||
|
||||
```http
|
||||
GET /api/agnet/audit-logs?user_id=user_123&binding_scope=repo_default&actor=agnet_control_plane&action=deployment.accepted&since=2026-05-02T00:00:00Z&limit=200&cursor=cur_001
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"audit_id": "aud_001",
|
||||
"actor": "agnet_control_plane",
|
||||
"action": "deployment.accepted",
|
||||
"resource": "dep_abc123",
|
||||
"user_id": "user_123",
|
||||
"channel_id": "channel_abc",
|
||||
"binding_scope": "repo_default",
|
||||
"request_id": "req_001",
|
||||
"correlation_id": "corr_20260502_001",
|
||||
"result": "ok",
|
||||
"occurred_at": "2026-05-02T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"next_cursor": "cur_002",
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. SK 快照接口
|
||||
|
||||
### 7.1 触发解析/刷新
|
||||
|
||||
```http
|
||||
POST /api/agnet/sk-snapshots/resolve
|
||||
```
|
||||
|
||||
请求:
|
||||
|
||||
```json
|
||||
{
|
||||
"deployment_id": "dep_abc123"
|
||||
}
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"deployment_id": "dep_abc123",
|
||||
"items": [
|
||||
{
|
||||
"snapshot_id": "sks_001",
|
||||
"deployment_id": "dep_abc123",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "repo_default",
|
||||
"source_type": "git",
|
||||
"source_ref": "main:skills/heicode/**@sha_xxx",
|
||||
"resolved_at": "2026-05-02T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 7.2 查询部署 SK 快照
|
||||
|
||||
```http
|
||||
GET /api/agnet/deployments/{deployment_id}/sk-snapshots
|
||||
```
|
||||
|
||||
Query:
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|---|---:|---|
|
||||
| `user_id` | 建议 | 与 `X-User-Id` 或 deployment 的 `user_context.user_id` 一致。 |
|
||||
| `binding_scope` | 建议 | 与 `X-Binding-Scope` 或 deployment 的资源授权作用域一致。 |
|
||||
| `source_type` | 否 | `git` / `upload`,用于筛选。 |
|
||||
| `limit` | 否 | 默认 100,最大 500。 |
|
||||
| `cursor` | 否 | 分页游标。 |
|
||||
|
||||
成功响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"snapshot_id": "sks_001",
|
||||
"deployment_id": "dep_abc123",
|
||||
"user_id": "user_123",
|
||||
"binding_scope": "repo_default",
|
||||
"source_type": "git",
|
||||
"source_ref": "main:skills/heicode/**@sha_xxx",
|
||||
"artifact_ref": "artifact://bindings/repo_default/sk/sks_001",
|
||||
"checksum": "sha256:example-redacted",
|
||||
"status": "ready",
|
||||
"resolved_at": "2026-05-02T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"next_cursor": "cur_002",
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
错误处理:
|
||||
|
||||
| HTTP | business code | 说明 |
|
||||
|---:|---|---|
|
||||
| 404 | `NOT_FOUND` | deployment 不存在或不属于当前租户/项目。 |
|
||||
| 410 | `CURSOR_EXPIRED` | cursor 过期,使用不带 cursor 的查询重拉。 |
|
||||
| 422 | `SK_SOURCE_UNRESOLVABLE` | 快照来源不可解析,详情在事件/日志中查看。 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 安全校验清单
|
||||
|
||||
Manager 发给 Agnet 平台前必须执行:
|
||||
|
||||
1. `user_id`、`binding_scope`、`target_role` 与部署计划一致。
|
||||
2. 凭据型资源只传 `secret_ref`,不传明文凭据。
|
||||
3. `metadata`、`constraints`、`audit` 的 key 中不得出现 `password`、`token`、`secret`、`private_key`、`access_key`、`credential` 等敏感词。
|
||||
4. `repo_url` 不得包含用户名、密码或访问 Token。
|
||||
5. `permission_scope` 使用最小权限;生产写操作必须携带客户端审批记录,Agnet 平台不得自行补批。
|
||||
6. 高风险操作(生产部署、云资源修改、删除、扩容)必须设置 `risk_level=high`,Agnet 平台执行前只校验客户端审批证据。
|
||||
7. 所有日志/事件/审计返回给 Manager 前必须脱敏。
|
||||
|
||||
Agnet 平台不承担高危操作审批主体。审批只发生在客户端;Agnet 平台只能在执行前校验以下字段和策略是否一致:
|
||||
|
||||
| 校验项 | 要求 |
|
||||
|---|---|
|
||||
| `approval_id` | 必须存在于高危任务的 `constraints` 或 `audit`,并可追溯到客户端审批记录。 |
|
||||
| 审批主体 | 审批用户必须与 `user_context.user_id`、`resource_grants[].user_id` 或授权代理主体一致。 |
|
||||
| 审批范围 | 审批范围必须覆盖 `binding_scope`、`permission_scope`、目标环境、资源 ID 和操作类型。 |
|
||||
| TTL / 时间窗口 | 审批记录必须未过期;若使用 `window` 或 TTL,当前执行时间必须落在允许范围内。 |
|
||||
| `risk_level` | 高危资源写入、生产部署、云资源修改、删除和扩容必须为 `high`。 |
|
||||
| 策略 | 平台 policy、OpenBao policy、Kubernetes/Workload Identity、网络策略和最小权限约束均必须允许本次动作。 |
|
||||
|
||||
任一校验不通过时,Agnet 平台应返回 `POLICY_REJECTED` 或 `FORBIDDEN_SCOPE`,不得发起额外批准流程。
|
||||
|
||||
### 8.1 字段级约束速查
|
||||
|
||||
| 对象/接口 | 必填最小集合 | 禁止内容 |
|
||||
|---|---|---|
|
||||
| `orchestration_plan` | `intent_id`、`template_hint`、`objective`、`risk_level`、`budget`、`user_context`、`billing_context`、`agent_runtime`、`metadata.correlation_id`、`agents[]` | 密钥、连接串、真实主机登录密码、NewAPI key 原文。 |
|
||||
| `agents[]` | `role_template`、`goal` | 让子 Agent 绕过 Manager/Agnet 审计的指令。 |
|
||||
| `runtime_execution` | 任一字段存在时 `profile_id` 必填 | 明文 kubeconfig、SSH key、云访问密钥。 |
|
||||
| `resource_grants[]` | `grant_id`、`resource_id`、`resource_type`、`user_id`、`binding_scope`、`target_role`、`target_agent_ref`、`permission_scope`、`status` | 明文 `password`、`token`、`private_key`、`access_key`、`credential`、数据库 DSN。 |
|
||||
| 日志/事件/审计返回 | `request_id` 或 `correlation_id`,以及发生时间 | 未脱敏命令行、环境变量 dump、密钥片段。 |
|
||||
| NewAPI 重建/部署场景 | `approval_id`、`rollback_command_ref`、健康检查引用、运行环境 `secret_ref` | 真实 VM 密码、PostgreSQL/Redis 连接串、NewAPI 服务令牌。 |
|
||||
|
||||
### 8.2 联调验收清单
|
||||
|
||||
- 创建部署请求只包含 `secret_ref`/`env://`/`runbook://` 引用,不包含真实凭据。
|
||||
- `user_id` 与 `binding_scope` 在 user context、resource grant、事件和审计中一致。
|
||||
- `risk_level=high` 的生产运维任务包含 `approval_id` 和回滚引用。
|
||||
- 日志、事件、监控、审计接口都能通过 `correlation_id` 串联。
|
||||
- NewAPI 重建/部署只在实际执行并通过健康检查后标记为已部署;未执行时状态只能是 `planned`、`pending_approval`、`accepted` 或 `running`。
|
||||
- Manager 本地 `/api/agnet/*` 占位端点通过 payload 校验不等于生产 Agnet 平台已上线。
|
||||
|
||||
---
|
||||
|
||||
## 9. Manager 侧当前实现映射
|
||||
|
||||
当前代码中可用于对齐/验证 payload 的 Manager 侧端点:
|
||||
|
||||
| Manager 路由 | 用途 |
|
||||
|---|---|
|
||||
| `POST /api/agnet/deployments` | 校验并接受 orchestration_plan。 |
|
||||
| `GET /api/agnet/deployments` | 按 user/binding scope 查询部署。 |
|
||||
| `GET /api/agnet/deployments/:deployment_id` | 查询部署详情。 |
|
||||
| `POST /api/agnet/deployments/:deployment_id/stop` | 停止部署。 |
|
||||
| `GET /api/agnet/deployments/:deployment_id/logs` | 查询脱敏日志占位/联调日志。 |
|
||||
| `GET /api/agnet/deployments/:deployment_id/metrics` | 查询单部署指标占位/联调指标。 |
|
||||
| `GET /api/agnet/deployments/:deployment_id/events` | 查询事件。 |
|
||||
| `POST /api/agnet/sk-snapshots/resolve` | 解析 SK 快照。 |
|
||||
| `GET /api/agnet/deployments/:deployment_id/sk-snapshots` | 查询 SK 快照。 |
|
||||
| `GET /api/agnet/projects/:project_id/dashboard-snapshot` | 资源作用域监控快照;路径名保留旧兼容。 |
|
||||
| `GET /api/agnet/audit-logs` | 审计日志。 |
|
||||
|
||||
生产对接时,Manager 应把相同契约的请求发送给 Agnet 平台;本地 Manager 端点仅作为最小验证与控制面占位,不代表所有日志/监控平台能力已完整实现。
|
||||
|
||||
当前本地 `logs` 与 `metrics` 端点只返回脱敏占位/联调数据,用于验证 Manager ↔ Agnet payload、路由和验收流程。生产级实时日志流 `GET /api/agnet/deployments/{deployment_id}/logs/stream` 仍属于 Agnet 平台能力;Manager 不得把“本地占位通过”误报为“生产日志/监控已上线”。
|
||||
@@ -0,0 +1,61 @@
|
||||
# Manager → mcp-server 契约补丁清单
|
||||
|
||||
> 来源:Heicode Manager 前端集成 §1–§6 时打的本地 patch。建议 mcp-server 侧把这些归一掉,前端就能删掉对应的兼容层。
|
||||
|
||||
## 1. `manager_actions[].deeplink` 命名空间
|
||||
|
||||
**当前现象**:mcp-server 返回的 deeplink 形如 `/manager/resources`、`/manager/wallet`、`/manager/audit`。
|
||||
|
||||
**Manager 实际路由**:`/sk-sources`、`/wallet`、`/audit`。
|
||||
|
||||
**前端兜底**:`src/features/tasks/task-card-view.tsx::normalizeDeeplink()` 做了映射表。
|
||||
|
||||
**建议**:mcp-server 直接返回 Manager 真实路径,或返回 `{kind: 'resources' | 'wallet' | 'audit', ...}` 让前端自己拼。前者更简单。
|
||||
|
||||
| mcp-server 现返回 | Manager 应跳 |
|
||||
|---|---|
|
||||
| `/manager/resources` | `/sk-sources` |
|
||||
| `/manager/wallet` | `/wallet` |
|
||||
| `/manager/audit` | `/audit` |
|
||||
| `/manager/tasks/{id}` | `/tasks/{id}` |
|
||||
|
||||
## 2. §5 审计日志的敏感字段 redact
|
||||
|
||||
**当前现象**:mcp-server `/api/agnet/audit` 返回的条目里 `payload` 字段可能包含 token / secret 原文(按 §5 设计应在服务端 mask)。
|
||||
|
||||
**前端兜底**:`src/features/agnet-console/pages.tsx::maskIfSecret()` 做了第二层 mask(按 key 名匹配 `secret|token|password|api_key`)。
|
||||
|
||||
**建议**:mcp-server 在写审计或读出时统一 mask,前端可以删掉那一层。
|
||||
|
||||
## 3. §6 任务卡 `manager_actions` 形状一致性
|
||||
|
||||
**当前确认**:HeicodeTaskCard 真实形状是 `{goal, scope, generated_artifacts, manager_actions: [{label, deeplink}]}`,前端已对齐。
|
||||
|
||||
**建议**:在 mcp-server contract 文档 §6 里把这个形状固定下来,避免后续漂移。
|
||||
|
||||
## 4. §4 usage 字段名
|
||||
|
||||
**当前消费**:`{date, total_quota, total_tokens, prompt_tokens, completion_tokens, count}`。
|
||||
|
||||
**Manager 用**:sparkline 取 `total_quota`、tooltip 拼 `date` + `formatQuota(total_quota)`。
|
||||
|
||||
**建议**:维持当前字段名即可。如果未来引入按模型聚合,建议另起 endpoint,不要在 `items` 里混。
|
||||
|
||||
## 5. §5 `/api/agnet/*` stub 数据
|
||||
|
||||
**当前**:mcp-server 内存 dict(按 §5.0 设计),无 agent-manager 真实转发。
|
||||
|
||||
**阻塞解除条件**:
|
||||
- agent-manager 侧给 mcp-server 派发 service token
|
||||
- mcp-server 把 stub 换成对 `20.212.121.126:80` 的真实转发(HTTP/80,Host 头 `agent-manager.taijiagnet.com`)
|
||||
|
||||
Manager 前端已按 §5 契约消费,stub → 真实数据无需前端改动。
|
||||
|
||||
## 6. SSE `/api/user/tasks/{id}/events` 状态
|
||||
|
||||
**当前**:Manager 用 `refetchInterval` 自适应轮询替代(active 状态 3 秒,terminal 状态停止,其它 15 秒)。
|
||||
|
||||
**建议**:mcp-server 把 SSE 帧格式(event name、data shape)写进契约文档,前端再切到 EventSource / fetch stream。事件至少要覆盖:
|
||||
- `status_changed`(包含新 status)
|
||||
- `followup_added`(包含 followup payload)
|
||||
- `card_updated`(包含完整 HeicodeTaskCard)
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# Heicode 实施计划
|
||||
|
||||
本文依据 [`heicode.md`](./heicode.md) 的当前共识拆分执行阶段。计划只描述方向和交付顺序,不代表每项已经进入开发。
|
||||
|
||||
## P0:边界收敛
|
||||
|
||||
状态:文档边界已收敛。当前 `docs/` 只保留 `heicode.md`、`plan.md` 和已上线登录接口文档作为实施依据;旧 Agnet API 草案、旧 M1-M5 计划和旧架构说明不再作为开发输入。现有代码中仍可能存在过渡期的 `sk_sources`、Agnet control plane 或部署计划命名,不能反向覆盖本文档边界。
|
||||
|
||||
目标:让团队只围绕一套产品和架构边界协作。
|
||||
|
||||
任务:
|
||||
|
||||
- 以 [`heicode.md`](./heicode.md) 作为当前产品与架构共识。
|
||||
- 保留已上线登录接口文档。
|
||||
- 不再维护旧 Agnet API 草案和旧 M1-M5 计划。
|
||||
- 后续所有实现前先确认是否符合 Manager / Agnet / NewAPI / Secret Store 的边界。
|
||||
- 需求和边界没有想清楚前,不改代码。
|
||||
|
||||
验收:
|
||||
|
||||
- `docs/` 中没有多套互相冲突的 Agnet、NewAPI 或 Manager 计划。
|
||||
- 新需求讨论先落到文档共识,再进入实现。
|
||||
|
||||
## P1:Manager 资源模型
|
||||
|
||||
目标:把“Git 来源”升级为面向子 Agnet 的统一资源绑定模型。
|
||||
|
||||
任务:
|
||||
|
||||
- 将当前 Git 来源抽象为资源绑定模型。
|
||||
- 增加资源类型:Git、SK、项目文档、云账号、单项云资源。
|
||||
- 增加 Resource Grant,用于把资源分配给登录用户、绑定 Git/SK/云资源范围、角色和子 Agnet。
|
||||
- 定义资源元数据、权限范围、约束、状态和审计字段。
|
||||
- 前端从单点功能页逐步走向“绑定资源 -> 分配角色 -> 部署确认”的主流程。
|
||||
|
||||
当前实现状态:P1 资源模型尚未在代码中完整落地;如现有 UI/API 仍使用 Git source、`sk_sources` 或旧部署计划字段,应先按下列最小模型收敛,再进入 P2。
|
||||
|
||||
最小可验证实现:
|
||||
|
||||
1. 后端先落库资源绑定和 Resource Grant 两类记录,不在本阶段实现 Secret Broker 的真实写入。
|
||||
2. Resource Binding 表达登录用户绑定的资源元数据:资源类型、名称、外部标识、可见元数据、权限范围、约束、状态、`secret_ref` 和审计字段。
|
||||
3. Resource Grant 表达授权关系:user、resource、binding scope、role、子 Agnet 标识、允许动作、限制条件、状态、过期时间和审计字段。
|
||||
4. 提供只返回元数据和 `secret_ref` 的列表、详情、创建、授权、撤销接口;任何接口响应、日志和 Markdown 产物都不得包含真实密钥。
|
||||
5. 生成一份 permission manifest 示例,用结构化数据证明“某登录用户把某个绑定资源授予某个子 Agnet 角色使用”。
|
||||
|
||||
验收:
|
||||
|
||||
- Manager 能表达“某登录用户把某个绑定资源授予某个子 Agnet 角色使用”。
|
||||
- 数据库不保存明文密钥,只保存 `secret_ref`。
|
||||
- P1 测试样例能覆盖 Git、SK、项目文档、云账号和单项云资源五类资源的元数据建模。
|
||||
- 撤销 Resource Grant 后,对应 permission manifest 不再包含该授权。
|
||||
|
||||
## P2:Secret Broker 与 Secret Store
|
||||
|
||||
目标:建立 SaaS 多用户凭证托管能力。
|
||||
|
||||
任务:
|
||||
|
||||
- 优先选型 HashiCorp Vault。
|
||||
- 保留 Infisical 和 Azure Key Vault 作为 Secret Provider 备选。
|
||||
- 在 Manager 后端实现 Secret Broker。
|
||||
- Secret Broker 负责写入、轮换、撤销、禁用和审计。
|
||||
- Manager DB 只保存 `secret_ref`,不保存明文密钥。
|
||||
- 增加日志脱敏、前端响应过滤、Markdown 生成过滤。
|
||||
|
||||
验收:
|
||||
|
||||
- Git token、云密钥、SSH key、数据库密码不会进入 Git、Markdown、前端响应或普通日志。
|
||||
- 用户可以授权和撤销资源,平台负责实际凭证托管。
|
||||
|
||||
## P3:Agnet 平台 AKS 身份接入
|
||||
|
||||
目标:让子 Agnet 在 AKS 上按最小权限访问被授权资源。
|
||||
|
||||
任务:
|
||||
|
||||
- Agnet 平台支持 deployment / role 到 Kubernetes ServiceAccount 的映射。
|
||||
- 支持 Vault Kubernetes Auth 或等价 Workload Identity。
|
||||
- 支持按 user / resource binding / role 生成 OpenBao policy。
|
||||
- 子 Agnet 运行时只能访问被授权的 secret。
|
||||
- 普通开发资源支持受控注入。
|
||||
- 高危操作审批只在客户端完成;审批通过后允许向子 Agnet 注入 OpenBao 派生的短期、最小权限凭证。
|
||||
|
||||
验收:
|
||||
|
||||
- 子 Agnet 不保存长期密钥。
|
||||
- 撤销 Resource Grant 后,子 Agnet 无法继续访问对应资源。
|
||||
- 高危资源访问有审计记录。
|
||||
|
||||
## P4:NewAPI 解耦
|
||||
|
||||
目标:让 NewAPI 回到独立模型网关和计费服务的位置。
|
||||
|
||||
任务:
|
||||
|
||||
- NewAPI 保持独立服务。
|
||||
- NewAPI 后台不开放给普通 SaaS 用户。
|
||||
- Manager 通过服务凭据调用 NewAPI。
|
||||
- Manager 展示普通用户需要的模型、余额、额度、调用日志。
|
||||
- 隐藏渠道管理、价格配置、模型供应商后台配置和 NewAPI 管理员能力。
|
||||
- 建立 Heicode/Agnet 登录用户 `user.id`、`channelId` 与 NewAPI user / token / group / quota / usage 的映射。
|
||||
- 子 Agnet 的运行模型、模型 profile 和实例数归 Agnet 平台部署配置管理,不和 NewAPI 扣费映射混用。
|
||||
|
||||
验收:
|
||||
|
||||
- 普通用户只进入 Manager,不进入 NewAPI 后台。
|
||||
- Manager 能展示模型与用量信息。
|
||||
- NewAPI 升级不要求 Manager 跟着改核心后台逻辑。
|
||||
|
||||
## P5:部署和审计闭环
|
||||
|
||||
目标:跑通从用户想法到子 Agnet 部署、执行、观测和审计的闭环。
|
||||
|
||||
任务:
|
||||
|
||||
- Manager 生成 AGENT.md、resource context 和 permission manifest。
|
||||
- Agnet 平台部署子 Agnet 后回传 deployment、agent instance、状态和事件。
|
||||
- Manager 展示活动状态、失败原因、资源使用记录、模型调用记录和审计日志。
|
||||
- 对高危权限增加审批、撤销和运行中失效机制。
|
||||
- 为每次部署保留可追溯的资源、权限、模型和上下文快照。
|
||||
|
||||
验收:
|
||||
|
||||
- 用户能看到每个子 Agnet 的角色、模型、资源权限、运行状态和失败原因。
|
||||
- 审计能回答谁在什么时候让哪个子 Agnet 使用了什么资源。
|
||||
- Markdown 只作为上下文,permission manifest 才是系统执行依据。
|
||||
@@ -0,0 +1,82 @@
|
||||
# 01. 产品说明文档
|
||||
|
||||
## 产品名称
|
||||
|
||||
Heicode
|
||||
|
||||
## 产品定位
|
||||
|
||||
Heicode 是一款覆盖软件生命周期的智能开发 Code 工具。它面向的是“从想法到上线”的完整开发过程,而不是单个模型聊天窗口、CodeGW 管理后台或简单的 Agent 控制台。
|
||||
|
||||
用户只需要注册登录,输入想法和约束,Heicode 就帮助用户组织子 Agnet 团队,接入用户授权的 Git、SK、项目文档和云资源,完成产品设计、代码开发、代码检查、部署、观测和后续维护。
|
||||
|
||||
## 目标用户
|
||||
|
||||
| 用户 | 典型问题 | Heicode 价值 |
|
||||
|------|----------|--------------|
|
||||
| 独立开发者 | 有想法但缺工程团队 | 用 AI 团队完成从需求到上线 |
|
||||
| 创业团队 | 人少、迭代快、交付压力大 | 用 Heicode 编排产品、开发、测试、部署流程 |
|
||||
| 企业创新团队 | 有资源和代码,但协作成本高 | 在既有 Git 和云资源边界内受控开发 |
|
||||
| 技术负责人 | 担心权限、成本、质量和审计 | 统一资源授权、模型用量、日志和审计 |
|
||||
|
||||
## 核心价值
|
||||
|
||||
1. 把自然语言想法变成可执行的软件开发任务。
|
||||
2. 把 Git、文档、SK、云资源变成可授权、可撤销、可审计的资源。
|
||||
3. 把子 Agnet 的角色、权限、模型和上下文组织成可运行的开发团队。
|
||||
4. 把持续开发拆成需求、设计、开发、测试、修复、部署等子环节,由 Agnet 持续推进。
|
||||
5. 让 Agnet 在执行过程中可以调用项目 SK 工具和外部能力,而不是只做一次性任务分发。
|
||||
6. 把模型调用、余额、额度和日志统一展示给用户。
|
||||
7. 把长期密钥放入密钥保管器,只给子 Agnet 短期、最小权限凭证。
|
||||
8. 把开发、检查、部署、维护纳入同一个生命周期闭环。
|
||||
|
||||
## 产品形态
|
||||
|
||||
| 产品面 | 说明 |
|
||||
|--------|------|
|
||||
| Heicode 客户端 | 用户主体验,负责本地对话、输入想法、继续开发、查看执行反馈、接收交付结果和高危审批,只登录 Heicode,只使用 Heicode 提供的模型 |
|
||||
| Heicode Manager / 浏览器控制台 | 辅助控制台,负责账号与安全、客户端下载、Git/云资源绑定、Agnet 部署、任务状态总览、模型余额与用量、审计与日志查看 |
|
||||
| Agnet 平台 | 执行层,负责部署和运行子 Agnet,在任务推进过程中完成需求、开发、测试、修复、交付与部署,并回传日志、状态、事件和指标 |
|
||||
| CodeGW | 内部模型网关与计费服务,普通用户不直接进入后台 |
|
||||
| 密钥保管器 | OpenBao 实现,保存长期凭证,按审批和权限提供短期凭证租约 |
|
||||
|
||||
说明:Heicode 客户端是用户主体验,用户不在网页上编码。Heicode Manager 是浏览器里的辅助控制台,承担资源、部署、状态、余额、审计和下载等辅助操作。真正持续推进任务的是 Heicode 调度下的 Agnet 执行闭环,Agnet 在过程中还可以调用已授权的 SK 工具和外部能力,最终完成交付与部署并把结果回传到客户端。
|
||||
|
||||
## 核心流程
|
||||
|
||||
```text
|
||||
注册登录
|
||||
-> 输入产品想法
|
||||
-> 生成产品文档和任务计划
|
||||
-> 在 Manager 绑定 Git 和云资源
|
||||
-> 在 Manager 部署 Agnet
|
||||
-> 客户端继续追加需求和修正方向
|
||||
-> Agnet 按子环节执行需求、开发、测试、修复
|
||||
-> Agnet 按需要调用已授权 SK 工具
|
||||
-> 客户端确认高危操作
|
||||
-> Agnet 完成交付物整理和部署
|
||||
-> Manager 查看状态、余额、审计和下载
|
||||
-> 客户端展示执行反馈和交付结果
|
||||
-> 持续维护和升级
|
||||
```
|
||||
|
||||
## 差异化
|
||||
|
||||
| 对比对象 | 差异 |
|
||||
|----------|------|
|
||||
| 普通 AI 聊天工具 | Heicode 不只回答问题,而是组织资源、权限和执行团队 |
|
||||
| IDE 插件 | Heicode 不局限于本地代码编辑,而覆盖部署、审计和生命周期 |
|
||||
| CodeGW 后台 | Heicode 不管理渠道后台,面向用户完成开发任务 |
|
||||
| 传统 DevOps 平台 | Heicode 以自然语言和 AI 团队为核心,自动生成任务和执行上下文 |
|
||||
|
||||
## 产品承诺
|
||||
|
||||
1. 用户不需要理解底层模型供应商。
|
||||
2. 用户不需要把密钥交给子 Agnet 长期保存。
|
||||
3. 用户可以清楚知道哪些资源被哪个角色使用。
|
||||
4. 高危操作必须经过客户端审批。
|
||||
5. 所有关键动作都能审计。
|
||||
|
||||
## 当前一句话卖点
|
||||
|
||||
> 从一个想法开始,让 Heicode 组织 AI 开发团队,持续调用 Agnet 完成开发、测试、交付与部署,安全接入你的代码和云资源,把产品推进到生产环境。
|
||||
@@ -0,0 +1,173 @@
|
||||
# 02. 产品首页设计文档
|
||||
|
||||
## 首页目标
|
||||
|
||||
首页要让用户在第一屏理解三件事:
|
||||
|
||||
1. Heicode 是全流程智能开发工具。
|
||||
2. 用户可以从想法开始,到代码、部署和维护。
|
||||
3. Heicode 能安全接入 Git、云资源、模型和密钥保管器。
|
||||
|
||||
首页不是 CodeGW 后台入口,也不是单纯 Agent 平台介绍页。
|
||||
|
||||
## 首页受众
|
||||
|
||||
| 受众 | 第一眼要看到 |
|
||||
|------|--------------|
|
||||
| 创业者 | 想法可以快速变成产品 |
|
||||
| 开发者 | 能接入真实代码仓库和云资源 |
|
||||
| 技术负责人 | 权限、密钥、审计和成本可控 |
|
||||
| 投资人/客户 | 这是完整的软件生命周期平台 |
|
||||
|
||||
## 首屏文案
|
||||
|
||||
标题建议:
|
||||
|
||||
> 从一个想法,到可上线的软件产品
|
||||
|
||||
副标题建议:
|
||||
|
||||
> Heicode 组织 AI 开发团队,接入你的代码、文档、SK 和云资源,完成需求、开发、检查、部署和后续维护。
|
||||
|
||||
主按钮:
|
||||
|
||||
- 开始使用 Heicode
|
||||
|
||||
次按钮:
|
||||
|
||||
- 查看产品演示
|
||||
|
||||
首屏辅助信息:
|
||||
|
||||
- 绑定 Git 与云资源
|
||||
- 生成子 Agnet 团队
|
||||
- 密钥保管器托管凭证
|
||||
- CodeGW 统一模型与用量
|
||||
|
||||
## 首页结构
|
||||
|
||||
### 1. Hero 区
|
||||
|
||||
重点表达:
|
||||
|
||||
```text
|
||||
想法输入
|
||||
-> AI 开发团队
|
||||
-> 代码与云资源
|
||||
-> 生产部署
|
||||
```
|
||||
|
||||
视觉建议:
|
||||
|
||||
- 使用真实产品界面截图或产品工作流图。
|
||||
- 不做抽象渐变英雄图。
|
||||
- 第一屏必须看到 Heicode 名称和产品主张。
|
||||
- CTA 明确指向登录或演示。
|
||||
|
||||
### 2. 问题区
|
||||
|
||||
标题:
|
||||
|
||||
> 现在的软件开发,不缺模型,缺完整流程
|
||||
|
||||
要点:
|
||||
|
||||
- 想法和代码之间缺少可执行路径。
|
||||
- AI 工具无法安全使用用户的云资源和密钥。
|
||||
- 多个 Agent 缺少角色、权限和审计。
|
||||
- 模型用量、余额、日志分散在后台。
|
||||
- 部署和后续维护没有闭环。
|
||||
|
||||
### 3. 解决方案区
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode 把开发流程变成可编排的 AI 团队任务
|
||||
|
||||
四个能力:
|
||||
|
||||
| 能力 | 说明 |
|
||||
|------|------|
|
||||
| 想法转任务 | 把自然语言目标转成产品文档、任务和角色 |
|
||||
| 资源绑定 | 接入 Git、SK、项目文档、云账号和云资源 |
|
||||
| 权限控制 | 按角色分配 Resource Grant 和审批规则 |
|
||||
| 执行闭环 | 子 Agnet 持续推进开发、测试、修复和部署,可调用 SK 工具,Heicode 展示日志和审计 |
|
||||
|
||||
### 4. 工作流区
|
||||
|
||||
标题:
|
||||
|
||||
> 从登录到上线,一条主流程
|
||||
|
||||
流程:
|
||||
|
||||
1. 登录 Heicode。
|
||||
2. 输入想法。
|
||||
3. 绑定资源。
|
||||
4. 生成 AI 开发团队。
|
||||
5. 确认权限和审批。
|
||||
6. 执行开发与部署。
|
||||
7. 查看日志、用量和审计。
|
||||
8. 持续维护。
|
||||
|
||||
### 5. 安全区
|
||||
|
||||
标题:
|
||||
|
||||
> 资源可以使用,密钥不能外泄
|
||||
|
||||
说明:
|
||||
|
||||
- 长期密钥进入密钥保管器。
|
||||
- Heicode 服务端数据库只保存 `secret_ref`。
|
||||
- 子 Agnet 只拿短期凭证。
|
||||
- 高危操作在客户端审批。
|
||||
- 日志、Markdown、前端响应不显示明文密钥。
|
||||
|
||||
### 6. 系统边界区
|
||||
|
||||
标题:
|
||||
|
||||
> 每个系统各司其职
|
||||
|
||||
| 系统 | 职责 |
|
||||
|------|------|
|
||||
| Heicode Manager | 资源、部署、状态、用量和审计辅助控制台 |
|
||||
| 客户端 | 主对话体验、任务推进和高危审批 |
|
||||
| Agnet 平台 | AKS 执行层 |
|
||||
| CodeGW | 模型网关与用量 |
|
||||
| OpenBao | 密钥保管器 |
|
||||
|
||||
补充说明:
|
||||
|
||||
- 用户主要在客户端对话和推进任务。
|
||||
- Manager 主要承担资源准备、Agnet 部署、用量和审计辅助。
|
||||
|
||||
### 7. 适用场景区
|
||||
|
||||
场景:
|
||||
|
||||
- 从 0 到 1 创建 SaaS 产品。
|
||||
- 为已有代码库增加功能。
|
||||
- 让 AI 团队维护和升级系统。
|
||||
- 在云资源边界内自动部署。
|
||||
- 对模型用量和高危操作做审计。
|
||||
|
||||
### 8. CTA 区
|
||||
|
||||
标题:
|
||||
|
||||
> 让你的下一个想法进入开发流程
|
||||
|
||||
按钮:
|
||||
|
||||
- 登录 Heicode
|
||||
- 观看 5 分钟演示
|
||||
|
||||
## 风格建议
|
||||
|
||||
- 产品感应偏专业、清晰、可信,不要娱乐化。
|
||||
- 信息密度适中,避免空泛大词。
|
||||
- 主色与 Heicode 和客户端保持一致。
|
||||
- 图片优先使用真实界面和流程,不使用无意义装饰图。
|
||||
- 首页文案避免出现 CodeGW 后台、OpenBao 控制台、模型提供方配置等内部概念。
|
||||
@@ -0,0 +1,184 @@
|
||||
# 03. 用户旅程与核心流程
|
||||
|
||||
## 旅程目标
|
||||
|
||||
用户从“我有一个想法”开始,不需要先学习 Agent、CodeGW、密钥保管器或部署系统。Heicode 应该用一个连续流程带用户完成:
|
||||
|
||||
```text
|
||||
想法
|
||||
-> 资源
|
||||
-> 团队
|
||||
-> 权限
|
||||
-> 执行
|
||||
-> 上线
|
||||
-> 维护
|
||||
```
|
||||
|
||||
## 用户旅程总览
|
||||
|
||||
| 阶段 | 用户动作 | 平台动作 | 输出 |
|
||||
|------|----------|----------|------|
|
||||
| 1. 登录 | 注册或登录 Heicode | 获取用户身份和 channelId | 用户会话 |
|
||||
| 2. 输入想法 | 描述要做的产品或任务 | 生成需求摘要和任务草案 | 需求草案 |
|
||||
| 3. 绑定资源 | 授权 Git、文档、SK、云资源 | 保存资源元数据和 `secret_ref` | Resource Binding |
|
||||
| 4. 生成团队 | 确认开发方法和角色 | 推荐子 Agnet 角色 | 角色方案 |
|
||||
| 5. 分配权限 | 确认每个角色能用什么 | 生成 Resource Grant | 权限清单 |
|
||||
| 6. 审批高危操作 | 在客户端确认高危动作 | 记录 approval | 审批记录 |
|
||||
| 7. 执行任务 | 持续追加需求、查看进度 | Agnet 平台运行子 Agnet,按子环节推进开发 | 状态、日志、事件 |
|
||||
| 8. SK 工具调用 | 允许平台使用技能能力 | Agnet 按权限调用 SK 工具和外部能力 | 中间产物、检查结果 |
|
||||
| 9. 交付上线 | 确认部署结果 | Agnet 完成交付整理、部署并回写审计 | 生产服务 |
|
||||
| 10. 维护升级 | 提出迭代或修复 | 复用上下文和权限再次进入 Agnet 闭环 | 新版本计划 |
|
||||
|
||||
## 关键任务状态流程
|
||||
|
||||
### 1. 初始入口
|
||||
|
||||
用户看到:
|
||||
|
||||
- 当前任务。
|
||||
- 任务上下文状态。
|
||||
- 模型余额和用量。
|
||||
- 最近失败或待审批项。
|
||||
- 客户端下载入口。
|
||||
|
||||
页面目标:
|
||||
|
||||
- 让用户知道下一步该做什么。
|
||||
- 避免用户先进入复杂配置页。
|
||||
|
||||
### 2. 想法输入与追问
|
||||
|
||||
用户输入:
|
||||
|
||||
- 产品想法。
|
||||
- 目标用户。
|
||||
- 功能范围。
|
||||
- 已有代码或是否从零开始。
|
||||
- 部署目标。
|
||||
- 风险和约束。
|
||||
|
||||
平台输出:
|
||||
|
||||
- 需求摘要。
|
||||
- 产品文档草案。
|
||||
- 原型描述。
|
||||
- 推荐资源需求。
|
||||
- 推荐子 Agnet 角色。
|
||||
|
||||
### 3. 任务上下文准备
|
||||
|
||||
用户应该看到简化路径:
|
||||
|
||||
```text
|
||||
Heicode 判断本任务缺少哪些上下文
|
||||
-> 用户授权代码、文档、SK 或云账号
|
||||
-> 平台自动发现资源
|
||||
-> 用户确认本任务允许使用的资源范围
|
||||
-> Heicode 保存元数据和 secret_ref
|
||||
```
|
||||
|
||||
任务上下文不要设计成大量裸字段表单。云账号授权后,应尽量自动展示已发现的 VM、数据库、对象存储、Kubernetes 或资源组。
|
||||
|
||||
### 4. 风险和权限确认卡
|
||||
|
||||
默认展示角色视角:
|
||||
|
||||
```text
|
||||
Backend Agnet
|
||||
- 可读写:后端代码路径
|
||||
- 可读:项目文档
|
||||
- 可部署:测试环境
|
||||
- 生产部署:需要审批
|
||||
```
|
||||
|
||||
高级用户可以打开 manifest 预览,但普通流程不应要求用户手写 manifest。
|
||||
|
||||
### 5. 开始执行前确认
|
||||
|
||||
展示:
|
||||
|
||||
- 本次目标。
|
||||
- 子 Agnet 数量和角色。
|
||||
- 每个角色使用的资源。
|
||||
- 是否会访问密钥。
|
||||
- 是否会部署云资源。
|
||||
- 预计模型预算。
|
||||
- 审批项。
|
||||
|
||||
用户确认后,Heicode 生成 Agnet 平台 payload。
|
||||
|
||||
### 6. 执行中的任务空间
|
||||
|
||||
展示:
|
||||
|
||||
- 子 Agnet 活跃状态。
|
||||
- 当前步骤。
|
||||
- 最近日志。
|
||||
- 失败原因。
|
||||
- 模型用量。
|
||||
- 资源访问记录。
|
||||
- 审批记录。
|
||||
|
||||
用户可以:
|
||||
|
||||
- 暂停任务。
|
||||
- 停止任务。
|
||||
- 查看日志。
|
||||
- 撤销资源授权。
|
||||
- 发起修复或继续迭代。
|
||||
|
||||
### 7. Agnet 执行闭环
|
||||
|
||||
Heicode 不是只把任务丢给 Agnet 一次就结束,而是会在开发过程中持续调用 Agnet 完成子环节。
|
||||
|
||||
闭环应表达为:
|
||||
|
||||
```text
|
||||
客户端输入目标或追加需求
|
||||
-> Heicode 生成下一步任务
|
||||
-> Agnet 执行需求/设计/开发/测试/修复中的当前子环节
|
||||
-> Agnet 按需要调用已授权的 SK 工具
|
||||
-> Heicode 回传中间结果给客户端
|
||||
-> 用户继续追问、修正或审批
|
||||
-> Agnet 继续下一子环节
|
||||
-> 最终由 Agnet 完成交付整理与部署
|
||||
```
|
||||
|
||||
这意味着用户看到的不是一次性“已部署 Agent”,而是一个可连续推进的开发循环。
|
||||
|
||||
## 简化原则
|
||||
|
||||
1. 用户先表达目标,再补资源。
|
||||
2. 用户选择资源,不手写底层配置。
|
||||
3. 用户选择角色权限,不手写策略。
|
||||
4. 高危操作单独审批,不埋在复杂表单里。
|
||||
5. 技术细节可展开,但默认隐藏。
|
||||
6. 所有资源、权限、模型、日志都回到同一个任务视角。
|
||||
|
||||
## 复杂度拆解
|
||||
|
||||
资源绑定复杂度来自三类问题:
|
||||
|
||||
| 复杂点 | 简化方式 |
|
||||
|--------|----------|
|
||||
| 云资源字段多 | 绑定云账号后自动发现资源 |
|
||||
| 权限动作多 | 使用角色模板和推荐权限 |
|
||||
| 密钥安全难理解 | 用户只看“密钥保管器已托管”,不看明文 |
|
||||
|
||||
## MVP 用户路径
|
||||
|
||||
MVP 最小路径:
|
||||
|
||||
1. 用户登录 Heicode。
|
||||
2. 下载并登录客户端。
|
||||
3. 输入一个产品想法。
|
||||
4. 绑定一个 Git 仓库。
|
||||
5. 绑定一个云账号或导入云资源。
|
||||
6. 选择推荐角色。
|
||||
7. 确认资源权限。
|
||||
8. 预览 manifest。
|
||||
9. 创建 Agnet 部署占位任务。
|
||||
10. 在客户端持续推进子环节开发与测试。
|
||||
11. 查看任务状态、日志、审计和交付结果。
|
||||
|
||||
当前唯一可延期项:Heicode 到 Agnet 平台真实部署 API 的完整联调。
|
||||
@@ -0,0 +1,185 @@
|
||||
# 04. 登录平台和使用平台指南
|
||||
|
||||
## 面向用户
|
||||
|
||||
本文面向第一次使用 Heicode 的普通用户,说明如何登录、绑定资源、下载客户端、创建任务和查看结果。
|
||||
|
||||
## 访问入口
|
||||
|
||||
平台入口:
|
||||
|
||||
```text
|
||||
https://code.xinghanlab.com
|
||||
```
|
||||
|
||||
用户只需要登录 Heicode。普通用户不需要登录 CodeGW 后台,也不需要登录 OpenBao。
|
||||
|
||||
## 第一步:登录 Heicode
|
||||
|
||||
1. 打开 `https://code.xinghanlab.com`。
|
||||
2. 输入账号和密码,或使用平台支持的登录方式。
|
||||
3. 登录成功后进入 Heicode 控制台。
|
||||
4. 进入首页,查看资源、模型、任务和客户端下载状态。
|
||||
|
||||
登录后平台会读取:
|
||||
|
||||
- 用户 ID。
|
||||
- 用户邮箱。
|
||||
- 用户角色。
|
||||
- `channelId`。
|
||||
|
||||
这些信息用于用户身份、CodeGW 额度和用量映射。
|
||||
|
||||
## 第二步:下载客户端
|
||||
|
||||
1. 在 Heicode 控制台进入 `客户端下载`。
|
||||
2. 选择对应系统版本,例如 macOS 或 Windows。
|
||||
3. 下载并安装 Heicode 客户端。
|
||||
4. 打开客户端后,只需要登录 `https://code.xinghanlab.com`。
|
||||
|
||||
客户端不会要求选择模型提供方。客户端可用模型由 Heicode 提供。
|
||||
|
||||
macOS 提示说明:
|
||||
|
||||
- 如果安装时出现系统安全提示,说明当前安装包可能还没有完成 Apple Developer ID 签名和 notarization。
|
||||
- 用户可以按平台提供的安装说明继续打开。
|
||||
- 长期方案应完成签名和 notarization。
|
||||
|
||||
## 第三步:在客户端输入想法
|
||||
|
||||
主要在 Heicode 客户端输入要做的事情。Manager 负责下载、资源绑定、Agnet 部署、状态和审计等辅助能力,不承担主开发对话。
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
我想做一个面向小团队的任务管理 SaaS,
|
||||
需要登录、项目、任务、评论、通知和后台管理,
|
||||
希望部署到 Azure。
|
||||
```
|
||||
|
||||
平台会生成:
|
||||
|
||||
- 需求摘要。
|
||||
- 产品文档草案。
|
||||
- 推荐开发角色。
|
||||
- 需要绑定的资源。
|
||||
- 高危操作提示。
|
||||
|
||||
## 第四步:绑定资源
|
||||
|
||||
进入 `资源绑定`。
|
||||
|
||||
可绑定资源:
|
||||
|
||||
- 代码仓库。
|
||||
- SK 仓库或技能包。
|
||||
- 项目文档。
|
||||
- 云账号。
|
||||
- 云资源。
|
||||
|
||||
推荐流程:
|
||||
|
||||
```text
|
||||
先绑定 Git
|
||||
-> 再绑定项目文档或 SK
|
||||
-> 再绑定云账号
|
||||
-> 从云账号自动发现资源
|
||||
-> 选择允许使用的云资源
|
||||
```
|
||||
|
||||
用户不需要把密钥贴到文档里。真实凭证由 Heicode 写入密钥保管器,Heicode 只保存 `secret_ref`。
|
||||
|
||||
## 第五步:分配权限
|
||||
|
||||
用户可以使用平台推荐角色:
|
||||
|
||||
- Product Agnet。
|
||||
- Architect Agnet。
|
||||
- Frontend Agnet。
|
||||
- Backend Agnet。
|
||||
- Reviewer Agnet。
|
||||
- Ops Agnet。
|
||||
|
||||
每个角色确认:
|
||||
|
||||
- 能访问哪些仓库。
|
||||
- 能读写哪些路径。
|
||||
- 能使用哪些云资源。
|
||||
- 哪些操作需要审批。
|
||||
- 授权是否有有效期。
|
||||
|
||||
## 第六步:确认高危操作
|
||||
|
||||
高危操作会在客户端审批。
|
||||
|
||||
常见高危操作:
|
||||
|
||||
- 生产部署。
|
||||
- 修改数据库。
|
||||
- 创建或删除云资源。
|
||||
- 访问生产密钥。
|
||||
- 大额模型预算消耗。
|
||||
|
||||
用户确认后,平台才会为子 Agnet 派生短期凭证。
|
||||
|
||||
## 第七步:启动任务
|
||||
|
||||
用户确认任务后,Heicode 会生成:
|
||||
|
||||
- 子 Agnet 角色。
|
||||
- AGENT.md。
|
||||
- resource context。
|
||||
- permission manifest。
|
||||
- 模型和预算配置。
|
||||
- 审批策略。
|
||||
|
||||
Heicode 将这些内容提交给 Agnet 平台执行。
|
||||
|
||||
## 第八步:在客户端持续推进
|
||||
|
||||
任务开始后,主流程回到客户端。
|
||||
|
||||
闭环应理解为:
|
||||
|
||||
```text
|
||||
客户端继续补充要求
|
||||
-> Heicode 生成下一步子任务
|
||||
-> Agnet 执行需求/开发/测试/修复/部署中的当前环节
|
||||
-> Agnet 按权限调用需要的 SK 工具
|
||||
-> 中间结果和失败原因回到客户端
|
||||
-> 用户继续修正或审批
|
||||
-> 最终返回交付物和部署结果
|
||||
```
|
||||
|
||||
## 第九步:查看执行结果
|
||||
|
||||
用户可以在 Heicode 查看:
|
||||
|
||||
- 当前任务状态。
|
||||
- 子 Agnet 活动状态。
|
||||
- 运行日志。
|
||||
- 失败原因。
|
||||
- 模型用量。
|
||||
- 资源访问记录。
|
||||
- 高危审批记录。
|
||||
- 部署结果。
|
||||
|
||||
## 第十步:维护和升级
|
||||
|
||||
上线后,用户可以继续输入:
|
||||
|
||||
- 修复 bug。
|
||||
- 增加功能。
|
||||
- 优化性能。
|
||||
- 升级依赖。
|
||||
- 调整部署资源。
|
||||
|
||||
Heicode 会复用已有项目上下文、资源绑定和审计信息。
|
||||
|
||||
## 用户注意事项
|
||||
|
||||
1. 不要把密钥写入需求、Markdown、聊天内容或 Git。
|
||||
2. 授权云资源时先从测试环境开始。
|
||||
3. 生产部署必须仔细确认审批内容。
|
||||
4. 如果不确定某个资源是否应该授权,选择只读或暂不授权。
|
||||
5. CodeGW 后台不是普通用户入口,模型和余额在 Heicode 中查看。
|
||||
@@ -0,0 +1,191 @@
|
||||
# 05. 产品 PPT 文案
|
||||
|
||||
## Slide 1:标题
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode
|
||||
|
||||
副标题:
|
||||
|
||||
> 从一个想法,到可上线的软件产品
|
||||
|
||||
讲述:
|
||||
|
||||
Heicode 是一款全流程智能开发 Code 工具。它让用户输入想法,接入自己的代码和云资源,由 AI 开发团队完成需求、开发、检查、部署和维护。
|
||||
|
||||
## Slide 2:问题
|
||||
|
||||
标题:
|
||||
|
||||
> AI 已经会写代码,但软件交付仍然很难
|
||||
|
||||
要点:
|
||||
|
||||
- 想法到需求、原型、代码之间仍然断裂。
|
||||
- AI 工具通常不能安全使用真实 Git、云资源和密钥。
|
||||
- 多 Agent 协作缺少角色、权限、状态和审计。
|
||||
- 模型用量、余额和日志分散在后台系统。
|
||||
- 部署和后续维护没有统一生命周期。
|
||||
|
||||
## Slide 3:解决方案
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode 把开发过程变成可编排的 AI 团队任务
|
||||
|
||||
要点:
|
||||
|
||||
- 用户输入自然语言目标。
|
||||
- Heicode 生成任务、角色、权限和执行上下文。
|
||||
- 客户端是主体验,Manager 负责资源、部署和审计辅助。
|
||||
- 子 Agnet 按角色推进开发、测试、修复和部署,并可调用 SK 工具。
|
||||
- 密钥进入密钥保管器,子 Agnet 只拿短期凭证。
|
||||
- Heicode 展示模型用量、日志、事件和审计。
|
||||
|
||||
## Slide 4:产品工作流
|
||||
|
||||
标题:
|
||||
|
||||
> 一条从想法到上线的主流程
|
||||
|
||||
流程:
|
||||
|
||||
```text
|
||||
登录
|
||||
-> 客户端输入想法
|
||||
-> Manager 绑定资源
|
||||
-> Manager 部署 Agnet
|
||||
-> 客户端继续推进任务
|
||||
-> Agnet 执行开发/测试/修复并调用 SK
|
||||
-> 审批高危操作
|
||||
-> Agnet 交付与部署
|
||||
-> 观测与维护
|
||||
```
|
||||
|
||||
讲述:
|
||||
|
||||
用户不需要直接操作 CodeGW 后台,也不需要直接管理 OpenBao。所有操作都在 Heicode 和客户端内完成。
|
||||
|
||||
## Slide 5:核心能力
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode 的四个核心能力
|
||||
|
||||
1. 想法转开发任务。
|
||||
2. 资源绑定和权限分配。
|
||||
3. 子 Agnet 编排和执行。
|
||||
4. 用量、日志、安全和审计闭环。
|
||||
|
||||
## Slide 6:系统架构
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode 产品面连接执行、模型和密钥底座
|
||||
|
||||
架构:
|
||||
|
||||
```text
|
||||
用户 / 客户端
|
||||
-> Heicode Manager
|
||||
-> Agnet 平台
|
||||
-> CodeGW
|
||||
-> OpenBao
|
||||
-> Git / SK / 云资源
|
||||
```
|
||||
|
||||
讲述:
|
||||
|
||||
客户端是主体验,Manager 是辅助控制台。Agnet 平台是执行层,执行过程中可调用 SK。CodeGW 是模型网关和计费服务。OpenBao 是密钥保管器。
|
||||
|
||||
## Slide 7:安全模型
|
||||
|
||||
标题:
|
||||
|
||||
> 资源可用,密钥不外泄
|
||||
|
||||
要点:
|
||||
|
||||
- Heicode 服务端数据库只保存 `secret_ref`。
|
||||
- 长期密钥进入 OpenBao。
|
||||
- 子 Agnet 只获得短期、最小权限凭证。
|
||||
- 高危操作必须在客户端审批。
|
||||
- 日志、Markdown、前端响应不包含明文密钥。
|
||||
|
||||
## Slide 8:用户价值
|
||||
|
||||
标题:
|
||||
|
||||
> 让小团队拥有完整软件交付能力
|
||||
|
||||
对独立开发者:
|
||||
|
||||
- 更快从想法到 MVP。
|
||||
|
||||
对创业团队:
|
||||
|
||||
- 用更少人力完成产品迭代。
|
||||
|
||||
对企业团队:
|
||||
|
||||
- 在权限和审计边界内使用 AI 开发。
|
||||
|
||||
对技术负责人:
|
||||
|
||||
- 控制资源、成本、质量和风险。
|
||||
|
||||
## Slide 9:当前 MVP
|
||||
|
||||
标题:
|
||||
|
||||
> 当前 MVP 先闭环三件事
|
||||
|
||||
1. Heicode、CodeGW、OpenBao 解耦部署。
|
||||
2. 资源绑定、Resource Grant、manifest 和密钥保管。
|
||||
3. 客户端只登录 Heicode,只使用 Heicode 模型。
|
||||
|
||||
延期项:
|
||||
|
||||
- Heicode 到 Agnet 平台真实部署 API 的完整联调。
|
||||
|
||||
## Slide 10:路线图
|
||||
|
||||
标题:
|
||||
|
||||
> 从可用工具到生命周期平台
|
||||
|
||||
阶段:
|
||||
|
||||
1. 资源绑定和密钥保管。
|
||||
2. CodeGW 用户侧模型和用量展示。
|
||||
3. 客户端登录、审批和下载闭环。
|
||||
4. Agnet 平台真实部署联调。
|
||||
5. 自动维护、升级、成本和质量观测。
|
||||
|
||||
## Slide 11:演示故事
|
||||
|
||||
标题:
|
||||
|
||||
> 5 分钟看懂 Heicode
|
||||
|
||||
演示:
|
||||
|
||||
1. 登录 Heicode。
|
||||
2. 客户端输入产品想法。
|
||||
3. Manager 绑定 Git 和云资源。
|
||||
4. Manager 部署 Agnet 并展示权限。
|
||||
5. 客户端继续推进任务。
|
||||
6. 展示 Agnet 调用 SK 和当前子环节。
|
||||
7. 客户端审批高危操作。
|
||||
8. 查看交付、部署结果、日志和模型用量。
|
||||
|
||||
## Slide 12:结束页
|
||||
|
||||
标题:
|
||||
|
||||
> Heicode,让想法进入真实开发流程
|
||||
|
||||
收尾语:
|
||||
|
||||
> 不是只生成代码,而是把产品、代码、权限、模型、部署和维护组织成一个可审计的软件生命周期。
|
||||
@@ -0,0 +1,108 @@
|
||||
# 06. 安全与凭证管理说明
|
||||
|
||||
## 核心原则
|
||||
|
||||
Heicode 是 SaaS 产品,不能把凭证管理转嫁给用户,也不能让密钥散落在 Git、Markdown、日志或子 Agnet 长期状态中。
|
||||
|
||||
安全目标:
|
||||
|
||||
1. 用户授权资源,平台托管凭证。
|
||||
2. Heicode 服务端数据库只保存元数据和 `secret_ref`。
|
||||
3. 长期密钥进入密钥保管器。
|
||||
4. 子 Agnet 只拿短期、最小权限、可审计凭证。
|
||||
5. 高危操作必须由客户端审批。
|
||||
|
||||
## 凭证分类
|
||||
|
||||
| 凭证 | 示例 | 存放位置 |
|
||||
|------|------|----------|
|
||||
| Git 凭证 | GitHub token、SSH key | 密钥保管器 |
|
||||
| 云凭证 | Azure、AWS、GCP access key | 密钥保管器 |
|
||||
| 数据库凭证 | DB password、connection secret | 密钥保管器 |
|
||||
| CodeGW 服务凭据 | 内部服务 token | 服务环境或密钥保管器 |
|
||||
| 短期凭证 | 临时云 token、临时 Git token | 运行时注入,TTL 到期失效 |
|
||||
|
||||
## 密钥保管器
|
||||
|
||||
用户可见名称:密钥保管器。
|
||||
|
||||
技术实现:OpenBao,兼容 Vault API。
|
||||
|
||||
用户不需要直接登录 OpenBao,也不需要看到 OpenBao 控制台。
|
||||
|
||||
## Secret Broker 流程
|
||||
|
||||
```text
|
||||
用户绑定资源
|
||||
-> Heicode 接收授权结果
|
||||
-> Heicode Secret Broker 写入 OpenBao
|
||||
-> OpenBao 返回或形成 secret_ref
|
||||
-> Heicode DB 保存 secret_ref
|
||||
-> 前端只展示脱敏引用和状态
|
||||
```
|
||||
|
||||
Heicode 接口不得返回明文密钥。日志、错误信息、审计摘要也不得包含明文密钥。
|
||||
|
||||
## 子 Agnet 访问凭证
|
||||
|
||||
子 Agnet 不保存长期密钥。
|
||||
|
||||
推荐流程:
|
||||
|
||||
```text
|
||||
Heicode 生成 Resource Grant
|
||||
-> Agnet 平台部署子 Agnet
|
||||
-> Agnet 平台绑定运行时身份
|
||||
-> 子 Agnet 请求使用资源
|
||||
-> 高危操作先走客户端审批
|
||||
-> 审批通过后派生短期凭证
|
||||
-> 短期凭证注入运行时
|
||||
-> TTL 到期或任务结束后失效
|
||||
```
|
||||
|
||||
## 高危操作
|
||||
|
||||
高危操作包括:
|
||||
|
||||
- 生产环境部署。
|
||||
- 云资源创建、删除、扩缩容。
|
||||
- 数据库迁移或写入。
|
||||
- 访问生产密钥。
|
||||
- 大额模型预算消耗。
|
||||
|
||||
审批必须记录:
|
||||
|
||||
- 审批人。
|
||||
- 审批时间。
|
||||
- 操作类型。
|
||||
- 资源范围。
|
||||
- 风险等级。
|
||||
- TTL。
|
||||
- 对应 deployment 或任务。
|
||||
|
||||
## 禁止事项
|
||||
|
||||
1. 禁止把 token 写入 Git。
|
||||
2. 禁止把密钥写入 Markdown。
|
||||
3. 禁止前端返回明文密钥。
|
||||
4. 禁止在日志中打印密钥。
|
||||
5. 禁止把长期云密钥注入子 Agnet。
|
||||
6. 禁止把 OpenBao 暴露为普通公网入口。
|
||||
7. 禁止把 CodeGW key 原文交给客户端长期保存。
|
||||
|
||||
## 用户侧解释
|
||||
|
||||
推荐文案:
|
||||
|
||||
> Heicode 会把你的授权凭证存入密钥保管器。平台只在你授权的范围内,为对应任务和角色生成短期访问能力。密钥不会写入 Git、文档、日志或子 Agnet 长期状态。
|
||||
|
||||
## 验收标准
|
||||
|
||||
| 验收项 | 标准 |
|
||||
|--------|------|
|
||||
| 数据库 | 只保存 `secret_ref`,不保存明文密钥 |
|
||||
| 前端 | 不显示明文密钥 |
|
||||
| 日志 | 不包含 token、password、private key、access key |
|
||||
| 子 Agnet | 不保存长期凭证 |
|
||||
| 高危操作 | 有客户端审批记录 |
|
||||
| OpenBao | 不对普通公网暴露 |
|
||||
@@ -0,0 +1,148 @@
|
||||
# 07. CodeGW、OpenBao、Agnet 平台边界说明
|
||||
|
||||
## 目标
|
||||
|
||||
本文用于讲清楚 Heicode 与 CodeGW、OpenBao、Agnet 平台之间的产品和技术边界,避免再次变成缝合式系统。
|
||||
|
||||
## 总体边界
|
||||
|
||||
| 系统 | 能力归属 | 普通用户是否直接进入 |
|
||||
|------|----------|----------------------|
|
||||
| Heicode | 产品总入口,包含客户端主体验与 Manager 辅助控制台 | 是 |
|
||||
| CodeGW | 模型网关、模型调用、余额、额度、用量日志 | 否 |
|
||||
| OpenBao | 长期凭证保管、短期凭证租约 | 否 |
|
||||
| Agnet 平台 | AKS 执行层、状态、日志、事件、指标 | 否 |
|
||||
|
||||
## Heicode 与 CodeGW
|
||||
|
||||
Heicode 使用 CodeGW 的方式:
|
||||
|
||||
- 查询普通用户可见模型。
|
||||
- 查询余额和额度。
|
||||
- 查询用量和调用日志。
|
||||
- 建立 `channelId`、CodeGW user、token 或 group 的映射。
|
||||
|
||||
Heicode 不做:
|
||||
|
||||
- CodeGW 渠道管理。
|
||||
- CodeGW 模型供应商配置。
|
||||
- CodeGW 价格配置。
|
||||
- CodeGW 管理员用户管理。
|
||||
- 把 CodeGW 后台开放给普通用户。
|
||||
|
||||
产品口径:
|
||||
|
||||
> CodeGW 是 Heicode 的模型网关和计费底座,用户在 Heicode 中查看模型和用量,不直接使用 CodeGW 后台。
|
||||
|
||||
## Heicode 与 OpenBao
|
||||
|
||||
Heicode 使用 OpenBao 的方式:
|
||||
|
||||
- 写入用户授权后的长期凭证。
|
||||
- 保存和管理 `secret_ref`。
|
||||
- 执行密钥 health、metadata、轮换、禁用、撤销。
|
||||
- 为高危操作申请短期凭证。
|
||||
|
||||
Heicode 不做:
|
||||
|
||||
- 在数据库保存明文密钥。
|
||||
- 把 OpenBao token 交给前端。
|
||||
- 把 OpenBao 作为普通公网服务暴露。
|
||||
|
||||
产品口径:
|
||||
|
||||
> 密钥保管器负责保存凭证,Heicode 只保存引用。子 Agnet 使用资源时,平台按权限和审批结果获取短期访问能力。
|
||||
|
||||
## Heicode 与 Agnet 平台
|
||||
|
||||
Heicode 传给 Agnet 平台:
|
||||
|
||||
- 用户上下文。
|
||||
- 任务目标。
|
||||
- 子 Agnet 角色。
|
||||
- AGENT.md。
|
||||
- resource context。
|
||||
- permission manifest。
|
||||
- `secret_ref`。
|
||||
- 审批策略。
|
||||
- 模型和预算配置。
|
||||
- `sk_context` / `tool_permissions`。
|
||||
- 回调地址。
|
||||
|
||||
Agnet 平台回传 Heicode:
|
||||
|
||||
- deployment 状态。
|
||||
- 子 Agnet 状态。
|
||||
- 事件。
|
||||
- 日志。
|
||||
- 指标。
|
||||
- 审计事件。
|
||||
- 使用量。
|
||||
- 当前子环节状态。
|
||||
- 中间交付物。
|
||||
- 部署结果。
|
||||
|
||||
Heicode 不传:
|
||||
|
||||
- 长期明文密钥。
|
||||
- CodeGW key 原文。
|
||||
- OpenBao root token。
|
||||
- 数据库密码。
|
||||
|
||||
产品口径:
|
||||
|
||||
> Heicode 决定用户想做什么、能用什么资源和谁来做;Agnet 平台负责把这些任务安全运行起来,在过程中按权限调用需要的 SK 工具,并把子环节状态、交付物和部署结果回传给 Heicode。
|
||||
|
||||
## 客户端与 Manager 的边界
|
||||
|
||||
客户端主做:
|
||||
|
||||
- 登录 Heicode。
|
||||
- 对话和任务输入。
|
||||
- 继续补充要求和修正方向。
|
||||
- 展示 Heicode 提供的模型。
|
||||
- 高危操作审批。
|
||||
- 查看执行反馈和交付结果。
|
||||
|
||||
Manager 主做:
|
||||
|
||||
- 账号与安全。
|
||||
- 客户端下载。
|
||||
- Git、文档、SK、云资源绑定。
|
||||
- Agnet 部署。
|
||||
- 任务状态、用量和审计查看。
|
||||
- 风险与授权范围确认。
|
||||
|
||||
客户端不做:
|
||||
|
||||
- 选择模型提供方。
|
||||
- 配置 CodeGW 渠道。
|
||||
- 直接访问 OpenBao。
|
||||
- 直接保存长期云密钥。
|
||||
|
||||
Manager 不做:
|
||||
|
||||
- 主开发对话。
|
||||
- 网页编码。
|
||||
- 替代客户端完成高危审批。
|
||||
|
||||
## 当前延期项
|
||||
|
||||
Heicode 到 Agnet 平台真实部署 API 的完整联调仍可延期。
|
||||
|
||||
但 Heicode 侧必须准备好:
|
||||
|
||||
- payload。
|
||||
- manifest。
|
||||
- 审计字段。
|
||||
- callback URL。
|
||||
- 本地占位控制面。
|
||||
- 日志、事件、指标的数据展示位置。
|
||||
|
||||
## 验收口径
|
||||
|
||||
1. 普通用户只进入 Heicode。
|
||||
2. 客户端只登录 Heicode。
|
||||
3. CodeGW 独立服务运行。
|
||||
4. OpenBao 只通过受控内网或后端访问。
|
||||
5. Agnet 平台接口只收结构化上下文和 `secret_ref`,不收长期明文密钥。
|
||||
@@ -0,0 +1,118 @@
|
||||
# 08. Heicode 客户端说明
|
||||
|
||||
## 客户端定位
|
||||
|
||||
Heicode 客户端是用户主体验,承担本地对话、想法输入、任务推进、执行反馈、交付接收和高危审批。它不是独立模型配置工具,也不是 CodeGW 后台客户端。
|
||||
|
||||
Heicode Manager 不是主体验,但它仍然负责账号与安全、客户端下载、Git/云资源绑定、Agnet 部署、任务状态、余额与审计等辅助操作。用户不在网页上编码,主要在客户端里推进开发任务。
|
||||
|
||||
客户端必须保持:
|
||||
|
||||
- 只登录 Heicode。
|
||||
- 只使用 Heicode 提供的模型。
|
||||
- 不出现模型提供方选择。
|
||||
- 不出现旧服务入口。
|
||||
- 视觉风格与 Heicode 保持一致。
|
||||
|
||||
## 登录
|
||||
|
||||
客户端登录地址:
|
||||
|
||||
```text
|
||||
https://code.xinghanlab.com
|
||||
```
|
||||
|
||||
用户打开客户端后,点击登录,跳转或打开 Heicode 登录流程。登录完成后,客户端读取 Heicode 会话状态。
|
||||
|
||||
## 模型
|
||||
|
||||
客户端模型来源:
|
||||
|
||||
```text
|
||||
Heicode
|
||||
-> CodeGW 用户侧模型能力
|
||||
-> 客户端展示可用模型
|
||||
```
|
||||
|
||||
客户端不内置默认 Claude 模型,也不让用户选择模型提供方。用户看到什么模型,由 Heicode 和 CodeGW 映射决定。
|
||||
|
||||
## 主要功能
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| 对话输入 | 用户描述产品想法、开发任务或维护需求 |
|
||||
| 任务推进 | 继续要求、查看 Agnet 执行反馈、接收交付结果 |
|
||||
| 任务状态 | 查看 Heicode 返回的任务和子 Agnet 进度 |
|
||||
| 模型选择 | 从 Heicode 提供的模型中选择 |
|
||||
| 高危审批 | 对生产部署、密钥访问、云操作做确认 |
|
||||
| 日志反馈 | 展示关键执行反馈和失败原因 |
|
||||
| 安装更新 | 从 Heicode 下载页获取安装包 |
|
||||
|
||||
## 客户端里的 Agnet 闭环
|
||||
|
||||
客户端里发生的不是单次对话,而是持续推进的任务闭环:
|
||||
|
||||
```text
|
||||
用户输入想法或补充要求
|
||||
-> Heicode 判断当前子任务
|
||||
-> 调用 Agnet 执行需求/开发/测试/修复/部署中的某一环
|
||||
-> Agnet 按权限调用需要的 SK 工具
|
||||
-> 中间结果、失败原因和下一步建议回到客户端
|
||||
-> 用户继续补充、修正或审批
|
||||
-> Agnet 继续推进
|
||||
-> 最终返回交付物和部署结果
|
||||
```
|
||||
|
||||
所以客户端应该更像“任务驾驶舱”,而不是一次性聊天窗口。
|
||||
|
||||
## 高危审批体验
|
||||
|
||||
审批弹窗应清楚展示:
|
||||
|
||||
- 操作类型。
|
||||
- 目标资源。
|
||||
- 请求角色。
|
||||
- 风险等级。
|
||||
- 有效期。
|
||||
- 预计影响。
|
||||
- 是否会派生短期凭证。
|
||||
|
||||
用户操作:
|
||||
|
||||
- 批准。
|
||||
- 拒绝。
|
||||
- 查看详情。
|
||||
|
||||
## 安装包分发
|
||||
|
||||
安装包由 Heicode 下载页提供。
|
||||
|
||||
平台:
|
||||
|
||||
- macOS arm64。
|
||||
- Windows。
|
||||
- 后续可扩展 Linux。
|
||||
|
||||
macOS 注意:
|
||||
|
||||
- 如果未完成 Developer ID 签名和 notarization,系统可能弹出安全提示。
|
||||
- 产品文案应说明当前安装方式和后续签名计划。
|
||||
|
||||
## 客户端不应该出现的内容
|
||||
|
||||
1. 模型提供方配置。
|
||||
2. 旧登录入口。
|
||||
3. 第三方路由登录入口。
|
||||
4. CodeGW 后台入口。
|
||||
5. OpenBao 地址或 token。
|
||||
6. 长期云密钥输入框。
|
||||
7. 无法解释的个人 API key 自动复制。
|
||||
|
||||
## 验收标准
|
||||
|
||||
1. 打开客户端只看到 Heicode 登录入口。
|
||||
2. 登录地址是 `https://code.xinghanlab.com`。
|
||||
3. 模型列表来自 Heicode。
|
||||
4. 没有模型提供方菜单。
|
||||
5. 没有旧品牌和旧模型默认文案。
|
||||
6. 高危审批能明确展示风险和资源范围。
|
||||
@@ -0,0 +1,177 @@
|
||||
# 09. 产品演示脚本
|
||||
|
||||
## 演示目标
|
||||
|
||||
用 5 分钟讲清楚 Heicode 的核心价值:
|
||||
|
||||
> 用户从一个想法开始,绑定自己的代码和云资源,由 Heicode 组织 AI 开发团队完成开发、部署和审计。
|
||||
|
||||
## 演示准备
|
||||
|
||||
演示账号:
|
||||
|
||||
- 使用演示专用账号。
|
||||
- 不展示真实密码。
|
||||
- 不使用真实生产密钥。
|
||||
|
||||
演示资源:
|
||||
|
||||
- 一个演示 Git 仓库。
|
||||
- 一个演示 SK 仓库或技能包。
|
||||
- 一个演示云资源列表。
|
||||
- 一个可展示的模型余额或用量页面。
|
||||
- 一个客户端安装包下载入口。
|
||||
|
||||
## 5 分钟脚本
|
||||
|
||||
### 0:00 到 0:30 开场
|
||||
|
||||
话术:
|
||||
|
||||
> 今天演示 Heicode。它不是一个普通聊天工具,也不是 CodeGW 后台,而是一个从想法到生产的软件生命周期工具。用户输入想法,平台组织 AI 开发团队,并在权限和审计边界内使用代码、文档和云资源。
|
||||
|
||||
展示:
|
||||
|
||||
- 首页或 Heicode 登录页。
|
||||
- 一句话定位。
|
||||
|
||||
### 0:30 到 1:00 登录和首页
|
||||
|
||||
操作:
|
||||
|
||||
1. 登录 `https://code.xinghanlab.com`。
|
||||
2. 进入 Heicode 工作区。
|
||||
|
||||
话术:
|
||||
|
||||
> 用户只登录 Heicode。模型、资源、任务、日志和客户端下载都从这里进入,普通用户不需要进入 CodeGW 后台,也不需要直接接触密钥保管器。
|
||||
|
||||
展示:
|
||||
|
||||
- 首页。
|
||||
- 模型或余额摘要。
|
||||
- 客户端下载入口。
|
||||
|
||||
### 1:00 到 1:45 输入想法
|
||||
|
||||
操作:
|
||||
|
||||
输入演示想法:
|
||||
|
||||
```text
|
||||
我想做一个小团队任务管理 SaaS,
|
||||
需要登录、项目、任务、评论、通知和后台管理,
|
||||
希望部署到 Azure。
|
||||
```
|
||||
|
||||
话术:
|
||||
|
||||
> Heicode 先把自然语言想法整理成产品目标、功能范围、开发任务和需要的资源。
|
||||
|
||||
展示:
|
||||
|
||||
- 需求摘要。
|
||||
- 推荐角色。
|
||||
- 资源需求提示。
|
||||
|
||||
### 1:45 到 2:30 资源绑定
|
||||
|
||||
操作:
|
||||
|
||||
1. 打开资源绑定。
|
||||
2. 选择演示 Git 仓库。
|
||||
3. 选择演示云资源。
|
||||
4. 展示密钥保管状态。
|
||||
|
||||
话术:
|
||||
|
||||
> 资源绑定不是把密钥贴到页面里。用户授权后,真实凭证进入密钥保管器,Heicode 只保存 secret_ref。子 Agnet 能看到的是资源元数据和权限,不是长期密钥。
|
||||
|
||||
展示:
|
||||
|
||||
- Git 资源。
|
||||
- 云资源。
|
||||
- `secret_ref` 或密钥保管状态。
|
||||
|
||||
### 2:30 到 3:15 角色和权限
|
||||
|
||||
操作:
|
||||
|
||||
1. 展示推荐子 Agnet 角色。
|
||||
2. 打开某个角色权限。
|
||||
3. 展示 manifest 预览。
|
||||
|
||||
话术:
|
||||
|
||||
> Heicode 会把资源按角色授权。例如 Backend Agnet 可以读写后端路径,Ops Agnet 可以部署测试环境,生产部署需要客户端审批。
|
||||
|
||||
展示:
|
||||
|
||||
- Product、Backend、Frontend、Reviewer、Ops 角色。
|
||||
- Resource Grant。
|
||||
- manifest 预览。
|
||||
|
||||
### 3:15 到 4:00 客户端和审批
|
||||
|
||||
操作:
|
||||
|
||||
1. 展示客户端下载入口。
|
||||
2. 展示客户端登录只指向 Heicode。
|
||||
3. 展示高危审批弹窗或审批设计稿。
|
||||
|
||||
话术:
|
||||
|
||||
> 客户端不选择模型提供方,也不配置 CodeGW。它只登录 Heicode,使用 Heicode 提供的模型。高危操作,例如生产部署或访问生产密钥,必须在客户端确认。
|
||||
|
||||
展示:
|
||||
|
||||
- 客户端登录页。
|
||||
- 模型选择。
|
||||
- 审批弹窗。
|
||||
|
||||
### 4:00 到 4:40 执行和观测
|
||||
|
||||
操作:
|
||||
|
||||
1. 切回客户端,追加一句新要求。
|
||||
2. 展示当前 Agnet 子环节和 SK 工具调用。
|
||||
3. 展示任务状态、日志、模型用量和审计。
|
||||
|
||||
话术:
|
||||
|
||||
> 主体验在客户端。用户继续补充要求后,Heicode 会调用 Agnet 推进下一子环节,例如开发、测试或修复。Agnet 在过程中还可以调用已授权的 SK 工具,最后把中间结果、交付物和部署结果回传回来。Manager 负责辅助查看状态、日志、用量和审计。
|
||||
|
||||
展示:
|
||||
|
||||
- 客户端追加需求。
|
||||
- 当前 Agnet 子环节和 SK 工具调用。
|
||||
- 子 Agnet 状态。
|
||||
- 日志。
|
||||
- 用量。
|
||||
- 审计记录。
|
||||
|
||||
### 4:40 到 5:00 总结
|
||||
|
||||
话术:
|
||||
|
||||
> Heicode 的核心不是只生成代码,而是把想法、代码、云资源、模型、密钥、权限、部署和维护组织成一个可审计的软件生命周期。
|
||||
|
||||
结束 CTA:
|
||||
|
||||
- 开始使用 Heicode。
|
||||
- 查看产品文档。
|
||||
- 下载客户端。
|
||||
|
||||
## 演示注意事项
|
||||
|
||||
1. 不展示真实密钥。
|
||||
2. 不进入 CodeGW 管理后台。
|
||||
3. 不展示 OpenBao token。
|
||||
4. 不强调底层配置复杂度,强调用户流程。
|
||||
5. 如果 Agnet 真实部署尚未联调,明确说当前展示的是 Heicode 侧 payload、manifest 和占位控制面。
|
||||
|
||||
## 备用 1 分钟版本
|
||||
|
||||
话术:
|
||||
|
||||
> Heicode 是从想法到上线的智能开发工具。用户主要在客户端输入想法和继续推进任务,在 Manager 绑定 Git、文档、SK 和云资源并部署 Agnet。Heicode 生成子 Agnet 团队、角色和权限,密钥进入密钥保管器,子 Agnet 只拿短期凭证。Agnet 在执行中可以调用 SK 工具,最后完成交付与部署;CodeGW 提供模型、余额和用量,Heicode 展示日志、状态和审计。用户不需要进入 CodeGW 后台,也不需要管理 OpenBao,只在 Heicode 和客户端完成整个开发流程。
|
||||
@@ -0,0 +1,328 @@
|
||||
# 10. 前端细节说明
|
||||
|
||||
## 目标
|
||||
|
||||
本文用于指导 Heicode 和 Heicode 客户端的前端产品设计。重点不是罗列后台页面,而是明确用户如何在一个任务空间里完成“想法 -> 追问 -> 上下文授权 -> 执行 -> 审批 -> 交付”。
|
||||
|
||||
## 设计原则
|
||||
|
||||
1. 第一屏只强调“你想做什么”。
|
||||
2. 主流程围绕当前任务展开,不围绕后台模块展开。
|
||||
3. 资源、权限、模型、日志和审计都作为任务上下文出现。
|
||||
4. 复杂配置默认由 Heicode 解释成确认卡片,高级细节可以展开。
|
||||
5. 密钥永不明文展示,只展示密钥保管状态和 `secret_ref`。
|
||||
6. 客户端只登录 Heicode,只展示 Heicode 提供的模型。
|
||||
7. 页面状态必须覆盖空态、加载、错误、成功、撤销和过期。
|
||||
|
||||
## 全局体验结构
|
||||
|
||||
Heicode 不以后台菜单作为主体验。建议使用顶部轻量入口和主任务空间:
|
||||
|
||||
| 入口 | 作用 | 出现方式 |
|
||||
|------|------|----------|
|
||||
| 输入想法 | 创建新产品、新功能或维护任务 | 首屏主输入框 |
|
||||
| 当前任务 | 查看草案、上下文、执行状态和下一步 | 首页主区域和任务详情 |
|
||||
| 资源上下文 | 选择本任务可用的代码、文档、SK、云资源 | 任务准备卡片 |
|
||||
| 风险确认 | 确认可用资源、禁止动作和审批规则 | 开始执行前确认卡 |
|
||||
| 执行记录 | 查看日志、用量、资源访问和审计 | 任务详情抽屉 |
|
||||
| 客户端下载 | 下载本地客户端并完成高危审批 | 顶部辅助入口或审批提示 |
|
||||
|
||||
产品面边界需要在信息架构中明确:
|
||||
|
||||
- Heicode 客户端是主任务驾驶舱。
|
||||
- Heicode Manager 是资源、部署、状态、余额和审计的辅助控制台。
|
||||
- 用户不在网页上编码,但会在网页完成辅助管理动作。
|
||||
|
||||
禁止普通用户体验出现:
|
||||
|
||||
- CodeGW 后台。
|
||||
- 渠道管理。
|
||||
- 模型供应商配置。
|
||||
- OpenBao 控制台。
|
||||
- 模型提供方选择。
|
||||
- 旧服务入口。
|
||||
|
||||
## 视觉风格
|
||||
|
||||
| 元素 | 要求 |
|
||||
|------|------|
|
||||
| 色系 | Heicode 与客户端保持统一,专业、可信、低噪音 |
|
||||
| 布局 | 任务空间优先,辅助信息以抽屉、浮层或卡片呈现 |
|
||||
| 卡片 | 只用于任务、上下文、审批、交付物等明确对象 |
|
||||
| 按钮 | 主按钮用于继续任务,次按钮用于查看详情或取消 |
|
||||
| 状态 | 使用清晰标签:待确认、运行中、待审批、失败、已完成、已撤销 |
|
||||
| 图标 | 资源、审批、日志、模型、客户端下载使用稳定图标语义 |
|
||||
|
||||
## 初始首页
|
||||
|
||||
### 目标
|
||||
|
||||
让用户登录后马上知道可以输入想法或继续任务。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 主输入 | “你想把什么想法变成可以上线的软件?” |
|
||||
| 继续任务 | 最近任务、运行状态、待审批提示 |
|
||||
| 今日焦点 | 当前最重要任务、失败任务、待确认事项 |
|
||||
| 辅助入口 | 客户端下载、账户安全、最近审计 |
|
||||
|
||||
### 空态文案
|
||||
|
||||
> 输入一个产品想法,Heicode 会帮你生成任务、需要的上下文和执行计划。
|
||||
|
||||
## 想法输入与追问
|
||||
|
||||
### 目标
|
||||
|
||||
把用户自然语言输入转成可执行任务,而不是让用户先填完整表单。
|
||||
|
||||
### 初始输入
|
||||
|
||||
只展示一个多行输入框。用户可以说产品想法、开发任务、修复目标或维护诉求。
|
||||
|
||||
### Heicode 追问
|
||||
|
||||
Heicode 只追问影响执行路径的少量问题:
|
||||
|
||||
| 问题 | 选项示例 |
|
||||
|------|----------|
|
||||
| 是否基于已有代码 | 从零开始 / 选择已有仓库 |
|
||||
| 是否需要部署 | 暂不部署 / 测试环境 / 生产环境需审批 |
|
||||
| 执行风格 | 保守 / 平衡 / 主动 |
|
||||
| 预算限制 | 使用默认 / 自定义预算 |
|
||||
|
||||
更多约束放在“继续补充要求”中,不作为第一屏表单。
|
||||
|
||||
## 任务卡
|
||||
|
||||
### 目标
|
||||
|
||||
让用户确认“我要做什么”和“第一版做到哪里”。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 目标 | Heicode 总结的产品或任务目标 |
|
||||
| 第一版范围 | 功能清单、交付边界、暂不做事项 |
|
||||
| 自动生成 | 产品说明、原型描述、开发任务、检查清单、部署步骤 |
|
||||
| 待确认上下文 | 代码和文档、云资源、风险审批 |
|
||||
|
||||
### 交互
|
||||
|
||||
- 用户可以直接修改目标。
|
||||
- 用户可以继续用自然语言补充要求。
|
||||
- 下一步不是“去配置资源”,而是“确认任务,准备上下文”。
|
||||
|
||||
## 任务上下文卡
|
||||
|
||||
### 目标
|
||||
|
||||
让用户理解这个任务需要哪些上下文,并用最少操作授权。
|
||||
|
||||
### 卡片类型
|
||||
|
||||
| 卡片 | 用户看到的内容 | 系统处理 |
|
||||
|------|----------------|----------|
|
||||
| 代码上下文 | 选择仓库或从零开始 | 保存仓库元数据和授权引用 |
|
||||
| 文档和 SK | 选择已有产品文档或 SK 仓库 | 作为任务上下文提供给执行层 |
|
||||
| 云资源 | 连接云账号并自动发现资源 | 展示可用资源和风险级别 |
|
||||
| 密钥保管 | 凭证将保存到密钥保管器 | 前端不展示明文密钥 |
|
||||
|
||||
### 简化要求
|
||||
|
||||
- 云账号绑定后优先自动发现 VM、数据库、对象存储、Kubernetes 或资源组。
|
||||
- 不要求用户手写 VM ID、数据库 ID、AKS ID 等复杂字段。
|
||||
- 对不能自动发现的资源提供“手动补充”兜底,但放在次级入口。
|
||||
- 默认推荐低风险资源,高风险资源默认不选。
|
||||
|
||||
## 执行前确认卡
|
||||
|
||||
### 目标
|
||||
|
||||
让用户在开始前确认结果、边界和风险。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 本次会做 | 需求、代码、检查、测试部署等 |
|
||||
| 本次允许使用 | 仓库、文档、SK、测试云资源 |
|
||||
| 本次不会做 | 生产部署、生产数据库访问、导出长期密钥 |
|
||||
| 高危规则 | 生产部署、生产密钥访问、破坏性操作必须客户端审批 |
|
||||
| 预计消耗 | 模型预算或任务预算 |
|
||||
|
||||
### 高级展开
|
||||
|
||||
高级用户可以展开 manifest 预览,但默认折叠。展开后只展示:
|
||||
|
||||
- `resource_id`
|
||||
- `resource_type`
|
||||
- `allowed_actions`
|
||||
- `constraints`
|
||||
- `secret_ref`
|
||||
|
||||
不得展示明文密钥。
|
||||
|
||||
## 执行中的任务空间
|
||||
|
||||
### 目标
|
||||
|
||||
让用户看到任务进展、产物和下一步。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 当前子环节 | 需求、设计、后端、前端、检查、测试、部署的阶段状态 |
|
||||
| Agnet 调用 | 当前角色、正在调用的 SK 工具、工具输出摘要 |
|
||||
| 最新动态 | Heicode 翻译后的关键执行事件 |
|
||||
| 当前产物 | 产品文档、接口草案、代码变更、检查报告 |
|
||||
| 继续输入 | 用户继续追加需求或修正方向 |
|
||||
| 交付回流 | 交付物、测试结果、部署结果、待审批动作 |
|
||||
| 辅助查看 | 资源使用、模型消耗、审计记录、停止任务 |
|
||||
|
||||
### 交互要求
|
||||
|
||||
- 日志默认摘要化,用户需要时再展开原始日志。
|
||||
- 失败必须展示可理解原因和建议动作。
|
||||
- 停止任务要说明影响范围。
|
||||
- 当前子环节必须可见,不能只显示“运行中”。
|
||||
- 如果 Agnet 调用了 SK 工具,前端要展示“调用了什么、产出了什么、是否失败”。
|
||||
- 交付和部署结果必须回到客户端任务空间,而不是只留在后台日志里。
|
||||
|
||||
## 任务用量与审计
|
||||
|
||||
### 目标
|
||||
|
||||
回答“本任务用了什么模型、访问了什么资源、谁批准了什么”。
|
||||
|
||||
### 呈现方式
|
||||
|
||||
默认作为任务详情里的抽屉或浮层,不作为主体验。
|
||||
|
||||
### 内容
|
||||
|
||||
| 类型 | 示例 |
|
||||
|------|------|
|
||||
| 模型用量 | 任务、模型、消耗、状态、失败原因 |
|
||||
| 资源访问 | 仓库、文档、云资源、动作、角色 |
|
||||
| 审批记录 | 批准、拒绝、过期、有效期 |
|
||||
| 安全记录 | 密钥轮换、短期凭证租约、撤销 |
|
||||
|
||||
## 交付结果
|
||||
|
||||
### 目标
|
||||
|
||||
让用户看到完成结果、质量证明和下一步。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 交付物 | 产品说明、代码变更、测试环境、部署链接 |
|
||||
| 质量结果 | 代码检查、安全检查、测试结果 |
|
||||
| 可信记录 | 使用资源、模型消耗、高危审批 |
|
||||
| 继续动作 | 继续迭代、发起维护任务、查看完整记录 |
|
||||
|
||||
## 客户端下载
|
||||
|
||||
### 目标
|
||||
|
||||
让用户清楚下载哪个客户端,以及安装后只登录 Heicode。
|
||||
|
||||
### 内容
|
||||
|
||||
| 区块 | 内容 |
|
||||
|------|------|
|
||||
| 推荐版本 | 根据系统提示 macOS 或 Windows |
|
||||
| 下载列表 | macOS arm64、Windows |
|
||||
| 安装说明 | macOS 安全提示、Windows 安装说明 |
|
||||
| 登录说明 | 只登录 `https://code.xinghanlab.com` |
|
||||
| 版本信息 | 版本号、构建时间、校验值 |
|
||||
|
||||
## 账户与安全
|
||||
|
||||
### 目标
|
||||
|
||||
管理账号基础信息、安全设置和通知。
|
||||
|
||||
### 禁止
|
||||
|
||||
- 不自动生成无法解释的普通密钥。
|
||||
- 若未来需要 API 令牌,命名为“Heicode API 访问令牌”,并说明用途、权限、过期时间和撤销方式。
|
||||
- 无用途的 Token 入口应删除。
|
||||
|
||||
## 客户端前端细节
|
||||
|
||||
### 登录
|
||||
|
||||
只保留:
|
||||
|
||||
- Heicode 品牌。
|
||||
- Heicode 登录按钮。
|
||||
- 登录地址说明:`https://code.xinghanlab.com`。
|
||||
- 登录失败提示。
|
||||
|
||||
不出现:
|
||||
|
||||
- 模型提供方卡片。
|
||||
- 旧服务入口。
|
||||
- 第三方路由入口。
|
||||
- Claude 默认模型说明。
|
||||
|
||||
### 主对话
|
||||
|
||||
显示:
|
||||
|
||||
- 当前任务。
|
||||
- 输入框。
|
||||
- Heicode 提供的模型列表。
|
||||
- 文件和资源上下文。
|
||||
- 执行状态。
|
||||
|
||||
### 高危审批
|
||||
|
||||
字段:
|
||||
|
||||
- 操作名称。
|
||||
- 风险等级。
|
||||
- 目标资源。
|
||||
- 请求角色。
|
||||
- 有效期。
|
||||
- 是否需要短期凭证。
|
||||
- 批准/拒绝按钮。
|
||||
|
||||
文案示例:
|
||||
|
||||
> Heicode 请求在生产环境执行数据库迁移。该操作将使用密钥保管器派生的 15 分钟短期凭证。请确认资源、范围和影响后再批准。
|
||||
|
||||
## 响应式要求
|
||||
|
||||
| 视口 | 要求 |
|
||||
|------|------|
|
||||
| 桌面 | 顶部入口 + 主任务空间 + 可选右侧上下文 |
|
||||
| 平板 | 顶部入口收进更多操作,主流程保持单列 |
|
||||
| 手机 | 只保留继续输入、查看状态和审批能力 |
|
||||
|
||||
## 状态清单
|
||||
|
||||
每个关键状态必须设计:
|
||||
|
||||
- 加载态。
|
||||
- 空态。
|
||||
- 成功态。
|
||||
- 错误态。
|
||||
- 权限不足态。
|
||||
- 网络异常态。
|
||||
- 撤销/禁用后的只读态。
|
||||
|
||||
## 文案规则
|
||||
|
||||
- 用“任务上下文”或“资源上下文”,不要把主流程叫成资源管理。
|
||||
- 用“密钥保管器”,不用“OpenBao”作为普通用户标题。
|
||||
- 用“客户端”,不用“本地模型提供方”。
|
||||
- 用“模型与余额”,不用“CodeGW 后台”。
|
||||
- 用“执行计划”,不用“控制面草案”。
|
||||
@@ -0,0 +1,454 @@
|
||||
# 11. Heicode 客户端主体验与 Manager 辅助控制台原型图
|
||||
|
||||
## 说明
|
||||
|
||||
本文是 Heicode 产品的低保真原型图,用来说明 Heicode 客户端和 Heicode Manager 分别承担什么用户体验。
|
||||
|
||||
核心边界:
|
||||
|
||||
- Heicode 客户端是主体验。用户主要在客户端里对话、描述想法、推进开发任务、查看执行反馈和审批高危操作。
|
||||
- Heicode Manager / 浏览器控制台是辅助控制台。它负责账号与安全、客户端下载、Git 绑定、云资源绑定、Agnet 部署、任务状态总览、模型余额与用量、审计与日志查看。
|
||||
- 用户不在网页上编码,也不在网页上完成主要开发对话。
|
||||
- 用户会在 Manager 里做辅助操作和观测,但主开发体验仍然在客户端。
|
||||
- CodeGW、密钥保管器、Agnet 平台后台都不是普通用户入口,只作为 Heicode 的底层能力。
|
||||
|
||||
## 原型范围
|
||||
|
||||
| 范围 | 是否属于本文原型 | 说明 |
|
||||
|------|------------------|------|
|
||||
| Heicode 客户端 | 是,主体验 | 本地对话、想法输入、任务推进、执行反馈、高危审批 |
|
||||
| Heicode Manager / 浏览器控制台 | 是,辅助控制台 | 账号与安全、客户端下载、Git/云资源绑定、Agnet 部署、任务总览、余额与审计 |
|
||||
| 网页编码界面 | 否 | 用户不在网页上编码 |
|
||||
| 底层服务后台 | 否 | CodeGW、密钥保管器、Agnet 平台后台不直接暴露给普通用户 |
|
||||
|
||||
## 原型原则
|
||||
|
||||
1. 客户端承载“我要做什么”和“继续开发”的主流程。
|
||||
2. Manager 承载资源准备、部署准备、任务总览、用量和审计等辅助能力。
|
||||
3. 主开发对话、编码推进和高危审批仍然以客户端为主。
|
||||
4. 高危动作必须在客户端清晰审批。
|
||||
5. 继续开发时,Heicode 会持续调用 Agnet 推进需求、开发、测试、修复和部署等子环节。
|
||||
6. Agnet 执行过程中可以按权限调用 SK 工具。
|
||||
7. Manager 可以查看任务状态、用量和审计,但不把网页设计成 IDE 或网页编码工作台。
|
||||
8. 客户端只登录 Heicode,只使用 Heicode 提供的模型。
|
||||
|
||||
## 总体关系
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Client["Heicode 客户端主体验"] --> Idea["输入想法 / 继续开发"]
|
||||
Idea --> Task["生成任务卡"]
|
||||
Task --> Manager["Manager 准备资源 / 查看辅助信息"]
|
||||
Manager --> Deploy["Manager 部署 Agnet"]
|
||||
Deploy --> Loop["Agnet 子环节循环"]
|
||||
Loop --> Dev["需求 / 开发 / 测试 / 修复"]
|
||||
Dev --> SK["按权限调用 SK 工具"]
|
||||
SK --> Run["执行反馈和对话"]
|
||||
Run --> Approval["高危审批"]
|
||||
Approval --> Loop
|
||||
Run --> Result["交付结果 / 部署结果"]
|
||||
|
||||
Manager --> Git["绑定 Git"]
|
||||
Manager --> Cloud["绑定云资源"]
|
||||
Manager --> Audit["任务总览 / 用量 / 审计"]
|
||||
Manager --> Download["客户端下载 / 账号安全"]
|
||||
|
||||
Git --> Deploy
|
||||
Cloud --> Deploy
|
||||
Result --> Client
|
||||
```
|
||||
|
||||
## 1. 客户端登录
|
||||
|
||||
客户端是用户进入 Heicode 主体验的入口。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ Heicode │
|
||||
│ 从一个想法,到可上线的软件产品 │
|
||||
│ │
|
||||
│ 登录地址 │
|
||||
│ https://code.xinghanlab.com │
|
||||
│ │
|
||||
│ [登录 Heicode] │
|
||||
│ │
|
||||
│ 登录后,客户端会使用 Heicode 提供的模型。 │
|
||||
│ │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- 不出现模型提供方选择。
|
||||
- 不出现旧服务入口或第三方路由入口。
|
||||
- 登录目标只有 Heicode。
|
||||
|
||||
## 2. 客户端主界面
|
||||
|
||||
用户在客户端里输入想法、继续开发、查看反馈。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Client 模型:heicode-code 用户头像 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 当前任务:未选择 │
|
||||
│ │
|
||||
│ 你想把什么想法变成可以上线的软件? │
|
||||
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 做一个小团队任务管理 SaaS,需要登录、任务、评论、通知,部署到 Azure。 │ │
|
||||
│ └──────────────────────────────────────────────────────────────────────────┘ │
|
||||
│ [发送] │
|
||||
│ │
|
||||
│ 最近任务 │
|
||||
│ ┌────────────────────────────┐ ┌────────────────────────────┐ │
|
||||
│ │ 小团队任务管理 SaaS │ │ 企业微信通知集成 │ │
|
||||
│ │ 后端实现中 │ │ 等待生产部署审批 │ │
|
||||
│ └────────────────────────────┘ └────────────────────────────┘ │
|
||||
│ │
|
||||
│ 辅助:打开 Manager 绑定资源、部署 Agnet、查看状态 │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- 主界面像本地开发对话空间,不像后台控制台。
|
||||
- 用户不在网页上编码,主要通过客户端持续表达需求和接收反馈。
|
||||
- Manager 承担辅助配置和观测,但不是主开发对话空间。
|
||||
|
||||
## 3. 客户端追问和任务卡
|
||||
|
||||
Heicode 在客户端里追问关键缺口,并生成任务卡。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Client / 小团队任务管理 SaaS │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 你:做一个小团队任务管理 SaaS,需要登录、任务、评论、通知,部署到 Azure。 │
|
||||
│ │
|
||||
│ Heicode:我可以开始整理任务。还需要确认 3 件事: │
|
||||
│ │
|
||||
│ 1. 基于已有仓库还是从零开始? │
|
||||
│ [从零开始] [选择已有仓库] │
|
||||
│ │
|
||||
│ 2. 第一版是否需要部署? │
|
||||
│ [暂不部署] [Azure 测试环境] [生产环境,需审批] │
|
||||
│ │
|
||||
│ 3. 执行风格? │
|
||||
│ [保守] [平衡] [主动] │
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 继续补充你的要求... │ │
|
||||
│ └────────────────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
任务卡:
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 小团队任务管理 SaaS / 任务卡 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 目标:做一个面向小团队的任务协作 SaaS。 │
|
||||
│ │
|
||||
│ 第一版范围 │
|
||||
│ - 登录和团队空间 │
|
||||
│ - 项目、任务、评论 │
|
||||
│ - 通知能力 │
|
||||
│ - Azure 测试环境部署 │
|
||||
│ │
|
||||
│ Heicode 将自动生成 │
|
||||
│ 产品说明 / 原型描述 / 开发任务 / 检查清单 / 部署步骤 │
|
||||
│ │
|
||||
│ 需要 Manager 辅助确认 │
|
||||
│ [绑定 Git] [绑定云资源] [部署 Agnet] [查看预算与审计] │
|
||||
│ │
|
||||
│ [修改目标] [去 Manager 准备] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 4. Manager 辅助控制台
|
||||
|
||||
Manager 是网页端辅助控制台,不是编码主体验,但依然承载资源、部署、账号、下载、任务状态、余额和审计等辅助操作。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Manager 模型余额 ¥128.40 用户头像 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 当前任务辅助状态:小团队任务管理 SaaS │
|
||||
│ │
|
||||
│ ┌────────────────────────────┐ ┌────────────────────────────┐ │
|
||||
│ │ Git 绑定 │ │ 云资源绑定 │ │
|
||||
│ │ repo-main / main │ │ Azure / aks-test / db-dev │ │
|
||||
│ └────────────────────────────┘ └────────────────────────────┘ │
|
||||
│ ┌────────────────────────────┐ ┌────────────────────────────┐ │
|
||||
│ │ 模型与余额 │ │ 审计与风险 │ │
|
||||
│ │ ¥128.40 / 今日 ¥12.30 │ │ 1 个高危审批待处理 │ │
|
||||
│ └────────────────────────────┘ └────────────────────────────┘ │
|
||||
│ ┌────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ Agnet 部署 │ │
|
||||
│ │ 角色:Product / Backend / Frontend / Reviewer / Ops │ │
|
||||
│ │ 状态:待部署 │ │
|
||||
│ │ [部署 Agnet] │ │
|
||||
│ └────────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 你可以在这里做辅助操作: │
|
||||
│ [下载客户端] [查看任务状态] [确认资源范围] [查看审计记录] [管理账户安全] │
|
||||
│ │
|
||||
│ 提示:想法输入、开发对话、编码推进和审批请回到 Heicode 客户端。 │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- Manager 展示资源、部署、任务状态、余额和审计等辅助信息。
|
||||
- Manager 不承载网页编码。
|
||||
- Manager 不替代客户端对话主流程。
|
||||
|
||||
## 5. Manager 绑定 Git 和云资源
|
||||
|
||||
Git 和云资源在 Manager 中绑定,作为部署 Agnet 的前置条件。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Manager / 绑定 Git 和云资源 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 客户端任务:小团队任务管理 SaaS │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ Git 仓库 │ │
|
||||
│ │ 状态:还没有可用仓库 │ │
|
||||
│ │ [授权 GitHub/GitLab/Gitee/自建 Git] │ │
|
||||
│ └──────────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 云资源 │ │
|
||||
│ │ 已发现:aks-test、db-dev、aks-prod、db-prod │ │
|
||||
│ │ [选择本任务允许使用的资源] │ │
|
||||
│ └──────────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [保存资源绑定] [继续部署 Agnet] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- Git 和云资源绑定属于 Manager。
|
||||
- 用户不在网页上写代码。
|
||||
- 绑定完成后可以继续部署 Agnet,也可以返回查看任务状态与辅助信息。
|
||||
|
||||
## 6. Manager 云资源自动发现
|
||||
|
||||
```text
|
||||
┌────────────────────── Heicode 发现了可用 Azure 资源 ────────────────────────┐
|
||||
│ │
|
||||
│ 你不需要手动填写资源 ID。请选择客户端任务允许使用的范围: │
|
||||
│ │
|
||||
│ 建议用于本任务 │
|
||||
│ [x] aks-test Kubernetes 测试部署 │
|
||||
│ [x] db-dev PostgreSQL 开发读写 │
|
||||
│ │
|
||||
│ 高风险资源 │
|
||||
│ [ ] aks-prod Kubernetes 生产部署,需要客户端审批 │
|
||||
│ [ ] db-prod PostgreSQL 生产数据,默认禁止 │
|
||||
│ │
|
||||
│ 凭证处理 │
|
||||
│ 长期凭证保存到密钥保管器。执行时只申请短期凭证。 │
|
||||
│ │
|
||||
│ [取消] [允许本任务使用] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 7. Manager 部署 Agnet
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Manager / 部署 Agnet │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 任务:小团队任务管理 SaaS │
|
||||
│ │
|
||||
│ 已绑定资源 │
|
||||
│ - Git:repo-main / main │
|
||||
│ - 云资源:aks-test、db-dev │
|
||||
│ │
|
||||
│ Agnet 角色 │
|
||||
│ [x] Product 需求和验收 │
|
||||
│ [x] Backend API / 数据模型 │
|
||||
│ [x] Frontend 页面和交互 │
|
||||
│ [x] Reviewer 质量和安全检查 │
|
||||
│ [x] Ops 测试环境部署 │
|
||||
│ │
|
||||
│ 安全边界 │
|
||||
│ - 生产部署需要客户端审批 │
|
||||
│ - 生产数据默认禁止 │
|
||||
│ - 长期密钥不下发给 Agnet │
|
||||
│ │
|
||||
│ [返回修改资源] [部署 Agnet] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- Manager 的最终动作是部署 Agnet。
|
||||
- Manager 不继续承担开发任务执行。
|
||||
- 部署完成后主流程回到客户端,但状态和审计仍可在 Manager 查看。
|
||||
|
||||
## 8. 客户端执行空间
|
||||
|
||||
Agnet 部署完成后,主流程回到客户端。
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Client / 小团队任务管理 SaaS 运行中 ¥12.30 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Heicode:Agnet 已部署,我开始推进当前开发任务。 │
|
||||
│ │
|
||||
│ 当前 Agnet 子环节 │
|
||||
│ - 需求和原型:已完成 │
|
||||
│ - 后端开发:进行中 │
|
||||
│ - 前端开发:等待接口确认 │
|
||||
│ - 代码检查:等待代码变更 │
|
||||
│ - 测试部署:等待构建 │
|
||||
│ │
|
||||
│ 正在调用的能力 │
|
||||
│ - Git 代码仓库:已授权 │
|
||||
│ - SK 工具:e2e-test / deploy-check / api-review │
|
||||
│ │
|
||||
│ 当前产物 │
|
||||
│ [产品文档] [接口草案] [代码变更] [检查报告] │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 继续实现通知功能,并在完成后给我一份测试结果。 │ │
|
||||
│ └──────────────────────────────────────────────────────────────────────────┘ │
|
||||
│ [发送] │
|
||||
│ │
|
||||
│ 辅助查看:打开 Manager 查看 Git/云资源绑定、Agnet 部署、用量和审计 │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 设计意图
|
||||
|
||||
- 主执行反馈在客户端。
|
||||
- 用户看到的是 Agnet 持续推进的子环节,而不是一次性执行结果。
|
||||
- Agnet 可以在执行过程中调用已授权的 SK 工具。
|
||||
- Manager 仍然是资源、部署、状态、余额和审计的辅助入口。
|
||||
- 用户持续通过自然语言推进任务。
|
||||
|
||||
## 9. 客户端高危审批
|
||||
|
||||
高危动作必须在客户端确认。
|
||||
|
||||
```text
|
||||
┌──────────────────────── Heicode 高危操作审批 ───────────────────────────────┐
|
||||
│ │
|
||||
│ 任务:小团队任务管理 SaaS │
|
||||
│ 请求:部署到生产环境 │
|
||||
│ 资源:aks-prod │
|
||||
│ 风险:会更新对外服务 │
|
||||
│ 凭证:将申请 15 分钟短期凭证 │
|
||||
│ │
|
||||
│ Heicode 建议:先完成测试环境验证,再批准生产部署。 │
|
||||
│ │
|
||||
│ [拒绝] [稍后提醒] [批准 15 分钟] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 10. 客户端交付结果
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ Heicode Client / 小团队任务管理 SaaS 已完成 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Heicode:第一版已完成,Agnet 已整理交付物并完成目标环境部署。 │
|
||||
│ │
|
||||
│ 交付物 │
|
||||
│ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ │
|
||||
│ │ 产品说明 │ │ 代码变更 │ │ 测试环境 / 生产环境 │ │
|
||||
│ │ 查看 / 导出 │ │ 查看 diff │ │ 打开服务 / 看部署记录 │ │
|
||||
│ └────────────────────┘ └────────────────────┘ └────────────────────┘ │
|
||||
│ │
|
||||
│ 质量结果 │
|
||||
│ - 代码检查:通过 │
|
||||
│ - 安全检查:1 个问题已修复 │
|
||||
│ - 部署:测试环境成功,生产环境待你确认后可继续 │
|
||||
│ │
|
||||
│ [继续迭代] [发起维护任务] [查看 Agnet 部署信息] │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 11. 移动端
|
||||
|
||||
移动端只做三件事:继续输入、查看状态、审批风险。
|
||||
|
||||
```text
|
||||
┌────────────────────────┐
|
||||
│ Heicode │
|
||||
├────────────────────────┤
|
||||
│ 你想继续做什么? │
|
||||
│ ┌────────────────────┐ │
|
||||
│ │ 输入想法或追加需求 │ │
|
||||
│ └────────────────────┘ │
|
||||
├────────────────────────┤
|
||||
│ 当前任务 │
|
||||
│ 小团队任务管理 SaaS │
|
||||
│ 后端开发中 │
|
||||
├────────────────────────┤
|
||||
│ 待审批 │
|
||||
│ 生产部署请求 │
|
||||
│ [查看] │
|
||||
├────────────────────────┤
|
||||
│ 本次消耗 ¥12.30 │
|
||||
└────────────────────────┘
|
||||
```
|
||||
|
||||
## 不应该画成什么
|
||||
|
||||
这些不是 Heicode Manager 的主体验:
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ 网页代码编辑器 │
|
||||
│ 网页主开发对话 │
|
||||
│ 网页编码推进 │
|
||||
│ 任务推进 │
|
||||
└────────────────────┘
|
||||
```
|
||||
|
||||
正确表达应该是:
|
||||
|
||||
```text
|
||||
客户端说目标
|
||||
-> Heicode 生成任务
|
||||
-> Manager 绑定 Git 和云资源
|
||||
-> Manager 部署 Agnet
|
||||
-> 客户端持续追加需求和修正方向
|
||||
-> Agnet 执行需求、开发、测试、修复等子环节
|
||||
-> Agnet 按权限调用 SK 工具
|
||||
-> 客户端接收中间结果并审批高危动作
|
||||
-> Agnet 完成交付整理和部署
|
||||
-> Manager 提供状态、余额、下载和审计辅助
|
||||
-> 客户端接收交付结果
|
||||
```
|
||||
|
||||
## 页面关系图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ClientHome["客户端输入想法"] --> ClientAsk["客户端追问缺口"]
|
||||
ClientAsk --> Task["客户端任务卡"]
|
||||
Task --> Manager["Manager 绑定资源 / 查看状态"]
|
||||
Manager --> Deploy["Manager 部署 Agnet"]
|
||||
Deploy --> Loop["Agnet 子环节循环"]
|
||||
Loop --> ClientRun["客户端执行空间"]
|
||||
Loop --> SK["SK 工具调用"]
|
||||
SK --> ClientRun
|
||||
Manager --> Audit["Manager 审计 / 余额 / 下载"]
|
||||
ClientRun --> Approval["客户端高危审批"]
|
||||
Approval --> Loop
|
||||
ClientRun --> Result["客户端交付结果"]
|
||||
Result --> ClientHome
|
||||
```
|
||||
@@ -0,0 +1,341 @@
|
||||
# 12. 口述用户操作流程
|
||||
|
||||
## 使用场景
|
||||
|
||||
本文用于产品演示、培训、录屏旁白和销售讲解。语气以真实用户操作为主,不讲复杂技术实现;当需要解释安全、模型、密钥和 Agnet 平台时,只讲用户需要理解的边界。
|
||||
|
||||
## 一句话开场
|
||||
|
||||
> 我现在打开 Heicode,从一个产品想法开始,绑定我的代码和云资源,让平台生成 AI 开发团队,并在我确认权限和高危操作后推进开发、部署和维护。
|
||||
|
||||
## 完整口述流程
|
||||
|
||||
### 1. 打开平台
|
||||
|
||||
我先打开 Heicode 的平台地址:
|
||||
|
||||
```text
|
||||
https://code.xinghanlab.com
|
||||
```
|
||||
|
||||
这里是 Heicode 的浏览器控制台,也就是 Heicode Manager。后续我不会直接进入 CodeGW 后台,也不会直接进入密钥保管器后台。Manager 负责资源、部署、状态和审计等辅助动作;真正持续推进开发任务和高危审批,主要会回到客户端完成。
|
||||
|
||||
### 2. 登录账号
|
||||
|
||||
我输入账号和密码登录。
|
||||
|
||||
登录成功后,平台会识别我的用户身份,包括用户 ID、邮箱、角色和 `channelId`。这些信息用于后续模型额度、用量和审计归属。
|
||||
|
||||
用户不需要理解 `channelId` 的技术细节,只需要知道:我的模型余额、调用记录和任务消耗都能在 Heicode 里看到。
|
||||
|
||||
### 3. 进入首页
|
||||
|
||||
登录后,我首先进入首页。
|
||||
|
||||
首页会告诉我:
|
||||
|
||||
- 当前有没有正在运行的任务。
|
||||
- 有没有失败任务。
|
||||
- 有没有待我审批的高危操作。
|
||||
- 我绑定了哪些资源。
|
||||
- 模型余额和今日用量。
|
||||
- 客户端是否已经下载。
|
||||
|
||||
如果我是第一次使用,首页会提示我下一步:输入产品想法、绑定资源或下载客户端。
|
||||
|
||||
### 4. 下载客户端
|
||||
|
||||
如果我还没有安装客户端,我会先进入“客户端下载”。
|
||||
|
||||
这里可以看到适合我系统的安装包,比如 macOS 或 Windows。下载安装后,我打开客户端。
|
||||
|
||||
客户端只需要登录:
|
||||
|
||||
```text
|
||||
https://code.xinghanlab.com
|
||||
```
|
||||
|
||||
客户端不会让我选择模型提供方,也不会出现 旧服务入口 或其他旧入口。客户端里能用什么模型,由 Heicode 提供。
|
||||
|
||||
### 5. 输入产品想法
|
||||
|
||||
回到 Heicode 或客户端,我输入我的产品想法。
|
||||
|
||||
比如我输入:
|
||||
|
||||
```text
|
||||
我想做一个小团队任务管理 SaaS,
|
||||
需要登录、项目、任务、评论、通知和后台管理,
|
||||
希望部署到 Azure。
|
||||
```
|
||||
|
||||
我不需要一开始就写完整 PRD。Heicode 会先理解我的目标,再帮我生成需求摘要、功能清单、原型描述和需要的资源。
|
||||
|
||||
### 6. 查看平台生成的任务草案
|
||||
|
||||
平台会根据我的输入生成一个任务草案。
|
||||
|
||||
我可以看到:
|
||||
|
||||
- 这个产品要解决什么问题。
|
||||
- 第一版包含哪些功能。
|
||||
- 推荐哪些页面和接口。
|
||||
- 需要哪些代码仓库、文档、SK 和云资源。
|
||||
- 建议使用哪些子 Agnet 角色。
|
||||
- 哪些操作可能属于高危操作。
|
||||
|
||||
如果草案不准确,我可以直接修改。确认后,Heicode 会提示我补充这个任务需要的上下文。
|
||||
|
||||
### 7. 绑定代码仓库
|
||||
|
||||
在任务上下文卡片里,我先授权代码仓库。
|
||||
|
||||
如果我已有项目仓库,我可以授权 GitHub、GitLab、Gitea、Gitee 或自建 Git。平台会让我选择仓库、分支和允许访问的路径。
|
||||
|
||||
例如:
|
||||
|
||||
- 仓库:`repo-main`
|
||||
- 分支:`main`
|
||||
- 后端路径:`services/api/**`
|
||||
- 前端路径:`web/**`
|
||||
|
||||
这里的重点不是把 Git token 贴在页面里,而是完成授权。真实凭证会进入密钥保管器,Heicode 只保存密钥引用。
|
||||
|
||||
### 8. 绑定项目文档和 SK
|
||||
|
||||
如果我有产品文档、原型描述或技能仓库,我继续绑定项目文档和 SK。
|
||||
|
||||
项目文档可以作为 Product Agnet 和 Architect Agnet 的上下文。SK 可以作为子 Agnet 可调用的技能来源。
|
||||
|
||||
绑定后,平台知道:
|
||||
|
||||
- 哪些文档可以读。
|
||||
- 哪些技能可以使用。
|
||||
- 哪些路径和版本有效。
|
||||
|
||||
### 9. 绑定云账号
|
||||
|
||||
接下来我绑定云资源,比如 Azure、AWS 或 GCP。
|
||||
|
||||
以 Azure 为例,我授权云账号后,平台会尽量自动发现我账号下的资源,比如:
|
||||
|
||||
- 虚拟机。
|
||||
- 数据库。
|
||||
- 存储。
|
||||
- Kubernetes 或 AKS。
|
||||
- 资源组。
|
||||
|
||||
我不应该手动填写一堆复杂资源 ID。正常体验应该是:平台发现资源,我选择哪些资源允许 Heicode 使用。
|
||||
|
||||
### 10. 选择允许使用的云资源
|
||||
|
||||
云账号授权后,我从自动发现列表里选择资源。
|
||||
|
||||
例如:
|
||||
|
||||
- 允许使用测试环境 AKS。
|
||||
- 允许读取开发数据库。
|
||||
- 不允许直接操作生产数据库。
|
||||
- 生产部署必须审批。
|
||||
|
||||
保存后,这些云资源会变成 Resource Binding。
|
||||
|
||||
### 11. 确认密钥保管状态
|
||||
|
||||
资源绑定完成后,我能看到密钥保管状态。
|
||||
|
||||
我看到的是:
|
||||
|
||||
- 已托管。
|
||||
- 无需密钥。
|
||||
- 待补充。
|
||||
- 已撤销。
|
||||
- 异常。
|
||||
|
||||
我不会看到明文密钥。平台最多展示 `secret_ref` 这种引用,让我知道凭证由密钥保管器管理。
|
||||
|
||||
### 12. 生成子 Agnet 团队
|
||||
|
||||
资源准备好后,Heicode 会推荐一组子 Agnet 角色。
|
||||
|
||||
例如:
|
||||
|
||||
- Product Agnet:负责需求和验收标准。
|
||||
- Architect Agnet:负责架构和技术方案。
|
||||
- Frontend Agnet:负责页面和交互。
|
||||
- Backend Agnet:负责 API、数据模型和服务逻辑。
|
||||
- Reviewer Agnet:负责代码检查和安全审查。
|
||||
- Ops Agnet:负责构建、部署和运行观察。
|
||||
|
||||
我可以使用推荐团队,也可以增减角色。
|
||||
|
||||
### 13. 分配资源权限
|
||||
|
||||
接下来我确认每个角色可以使用哪些资源。
|
||||
|
||||
例如:
|
||||
|
||||
Backend Agnet 可以:
|
||||
|
||||
- 读项目文档。
|
||||
- 读写后端代码路径。
|
||||
- 使用开发数据库。
|
||||
|
||||
Frontend Agnet 可以:
|
||||
|
||||
- 读项目文档。
|
||||
- 读写前端代码路径。
|
||||
|
||||
Ops Agnet 可以:
|
||||
|
||||
- 部署测试环境。
|
||||
- 请求生产部署审批。
|
||||
|
||||
这一步不要求我手写复杂策略。页面应该用角色卡片告诉我:这个角色能用什么、能做什么、是否需要审批。
|
||||
|
||||
### 14. 预览权限清单
|
||||
|
||||
如果我想看更详细的权限,我可以打开 manifest 预览。
|
||||
|
||||
这里会展示:
|
||||
|
||||
- 资源 ID。
|
||||
- 资源类型。
|
||||
- 允许动作。
|
||||
- 限制条件。
|
||||
- `secret_ref`。
|
||||
|
||||
manifest 不会显示 Git token、云 access key、SSH 私钥、数据库密码或 CodeGW key 原文。
|
||||
|
||||
### 15. 确认开始执行
|
||||
|
||||
在开始执行前,Heicode 会用一张确认卡展示本次任务摘要:
|
||||
|
||||
- 本次要做什么。
|
||||
- 会启动哪些子 Agnet。
|
||||
- 每个子 Agnet 使用哪些资源。
|
||||
- 是否会访问密钥。
|
||||
- 是否会部署云资源。
|
||||
- 预计模型预算。
|
||||
- 哪些动作需要审批。
|
||||
|
||||
确认无误后,我点击开始执行。真实部署动作仍由任务过程触发,并在高危场景下要求客户端审批。
|
||||
|
||||
### 16. 客户端审批高危操作
|
||||
|
||||
如果任务过程中出现高危操作,客户端会弹出审批。
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
Ops Agnet 请求部署到生产环境。
|
||||
目标资源:aks-prod
|
||||
操作:cloud:deploy
|
||||
风险等级:高
|
||||
凭证:密钥保管器将派生 15 分钟短期凭证
|
||||
```
|
||||
|
||||
这时我可以批准或拒绝。
|
||||
|
||||
如果我批准,平台会使用密钥保管器派生短期、最小权限凭证。子 Agnet 不会拿到长期密钥。
|
||||
|
||||
### 17. 在客户端持续推进开发
|
||||
|
||||
任务启动后,我不会停留在网页上编码,而是回到客户端继续推进。
|
||||
|
||||
这里的真实闭环是:
|
||||
|
||||
```text
|
||||
我在客户端补充要求
|
||||
-> Heicode 判断下一步要推进哪个子环节
|
||||
-> Agnet 执行需求、开发、测试、修复或部署中的当前任务
|
||||
-> Agnet 按权限调用已绑定的 SK 工具
|
||||
-> 中间结果回到客户端
|
||||
-> 我继续修正方向或批准高危动作
|
||||
-> Agnet 继续推进直到交付和部署完成
|
||||
```
|
||||
|
||||
### 18. 查看执行状态
|
||||
|
||||
任务启动后,我在 Heicode 里查看执行状态。
|
||||
|
||||
我能看到:
|
||||
|
||||
- Product Agnet 是否完成需求。
|
||||
- Backend Agnet 是否正在写代码。
|
||||
- Frontend Agnet 是否等待后端接口。
|
||||
- Reviewer Agnet 是否发现问题。
|
||||
- Ops Agnet 是否等待审批或部署中。
|
||||
|
||||
如果失败,页面应该显示失败原因,而不是只显示一个错误码。
|
||||
|
||||
### 19. 查看执行记录和模型用量
|
||||
|
||||
我可以在当前任务里打开执行记录。
|
||||
|
||||
这里能看到:
|
||||
|
||||
- 子 Agnet 运行日志。
|
||||
- 模型调用日志。
|
||||
- 消耗了多少额度。
|
||||
- 哪个任务使用了哪个模型。
|
||||
- 哪些资源被访问。
|
||||
- 哪些高危操作被批准或拒绝。
|
||||
|
||||
模型和余额来自 CodeGW,但我不需要进入 CodeGW 后台。Heicode 会展示用户需要知道的信息。
|
||||
|
||||
### 19. 查看交付结果
|
||||
|
||||
当任务完成后,我查看交付结果。
|
||||
|
||||
结果可能包括:
|
||||
|
||||
- 产品文档。
|
||||
- 原型描述。
|
||||
- 代码变更。
|
||||
- 测试结果。
|
||||
- 部署结果。
|
||||
- 访问地址。
|
||||
- 审计记录。
|
||||
|
||||
如果部署到生产,我还可以看到部署时间、目标资源和审批记录。
|
||||
|
||||
### 20. 后续维护和升级
|
||||
|
||||
上线后,如果我想继续迭代,我可以直接输入新的需求。
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
给任务管理 SaaS 增加企业微信通知,
|
||||
并检查现有权限模型是否支持团队成员邀请。
|
||||
```
|
||||
|
||||
Heicode 会复用之前的项目上下文、资源绑定和 Agnet 角色,生成新的开发任务。
|
||||
|
||||
## 简短演示口述版
|
||||
|
||||
> 我先登录 Heicode 的浏览器控制台。这里不是 CodeGW 后台,而是资源、部署、状态和审计的辅助入口。登录后,我会在客户端输入一个产品想法,比如做一个小团队任务管理 SaaS。平台会生成需求草案、推荐资源和子 Agnet 团队。接下来我绑定 Git 仓库、项目文档、SK 和云资源。真实密钥会进入密钥保管器,Heicode 只保存 secret_ref。然后我确认每个子 Agnet 的角色和权限,比如 Backend 能写后端路径,Ops 可以部署测试环境,但生产部署需要客户端审批。任务运行后,Agnet 会持续推进开发、测试和部署,并按权限调用需要的 SK 工具;我可以看到每个子 Agnet 的状态、日志、模型用量和审计记录。客户端只登录 code.xinghanlab.com,不选择模型提供方,模型由 Heicode 提供。整个流程的重点是:从一个想法开始,把产品、代码、云资源、模型、密钥和审计组织成一个完整的软件生命周期。
|
||||
|
||||
## 极简销售口述版
|
||||
|
||||
> Heicode 让用户从一个想法开始,接入自己的代码和云资源,由 Heicode 生成 AI 开发团队。平台负责资源授权、密钥保管、模型用量和审计;子 Agnet 负责开发、检查和部署。用户只在 Heicode 和客户端中操作,不需要进入 CodeGW 后台,也不会把长期密钥交给子 Agnet。
|
||||
|
||||
## 口述时必须强调
|
||||
|
||||
1. Heicode 是用户主入口。
|
||||
2. 客户端只登录 Heicode。
|
||||
3. CodeGW 是内部模型网关,不是普通用户后台。
|
||||
4. 密钥进入密钥保管器,不进入 Git、Markdown 或日志。
|
||||
5. 高危操作在客户端审批。
|
||||
6. 子 Agnet 拿短期凭证,不拿长期密钥。
|
||||
7. 资源绑定和权限分配要尽量自动化和角色化。
|
||||
|
||||
## 口述时不要说
|
||||
|
||||
1. 让用户去 CodeGW 后台配置模型。
|
||||
2. 让用户去 OpenBao 控制台管理密钥。
|
||||
3. 让客户端选择模型提供方。
|
||||
4. 让用户手写复杂 manifest。
|
||||
5. 把 tenant/project 当作当前产品主轴。
|
||||
6. 把 Agnet 平台说成用户控制台。
|
||||
@@ -0,0 +1,392 @@
|
||||
# 13. 平台说明文档
|
||||
|
||||
## 文档目的
|
||||
|
||||
本文用于向用户、团队、客户和合作方说明 Heicode 平台是什么、由哪些部分组成、用户如何使用、各系统如何协作,以及平台如何处理模型、权限、密钥和审计。
|
||||
|
||||
产品说明文档重点回答“为什么需要 Heicode”;平台说明文档重点回答“Heicode 如何被使用、如何运转”。
|
||||
|
||||
## 一、平台概述
|
||||
|
||||
Heicode 是一款面向全流程智能开发的 SaaS 平台。用户注册登录后,可以从一个产品想法开始,接入自己的代码仓库、项目文档、SK 技能和云资源,由平台生成 AI 开发团队,完成需求、开发、检查、部署、观测和后续维护。
|
||||
|
||||
Heicode 平台由五个主要部分组成:
|
||||
|
||||
| 部分 | 用户理解 | 平台职责 |
|
||||
|------|----------|----------|
|
||||
| Heicode Manager | 浏览器辅助控制台 | 账号与安全、客户端下载、绑定资源、部署 Agnet、查看状态、余额和审计 |
|
||||
| Heicode 客户端 | 本地主体验和审批入口 | 登录 Heicode、输入任务、继续开发、查看反馈、接收交付结果、审批高危操作 |
|
||||
| Agnet 平台 | AI 开发团队执行层 | 在 AKS 上运行子 Agnet,回传状态、日志、事件和指标 |
|
||||
| CodeGW | 模型与用量底座 | 提供模型调用、余额、额度、用量和调用日志 |
|
||||
| 密钥保管器 | 凭证托管服务 | 保存长期密钥,按审批和权限生成短期访问能力 |
|
||||
|
||||
用户主要使用客户端和 Manager。CodeGW、密钥保管器和 Agnet 平台是底层能力,不作为普通用户日常操作后台。
|
||||
|
||||
## 二、平台适合谁
|
||||
|
||||
| 用户 | 使用场景 |
|
||||
|------|----------|
|
||||
| 独立开发者 | 从一个想法开始生成 MVP,并部署上线 |
|
||||
| 创业团队 | 用较少人力完成产品迭代、测试和部署 |
|
||||
| 企业创新团队 | 在已有代码仓库和云资源边界内使用 AI 开发 |
|
||||
| 技术负责人 | 控制资源权限、模型消耗、安全审批和审计 |
|
||||
| 运维负责人 | 管理部署、运行日志、资源访问和生产操作审批 |
|
||||
|
||||
## 三、平台核心能力
|
||||
|
||||
### 1. 想法输入
|
||||
|
||||
用户可以用自然语言描述产品想法或开发任务。平台会生成需求摘要、功能清单、原型描述、任务计划和需要的资源建议。
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
我想做一个小团队任务管理 SaaS,
|
||||
需要登录、项目、任务、评论、通知和后台管理,
|
||||
希望部署到 Azure。
|
||||
```
|
||||
|
||||
### 2. 资源绑定
|
||||
|
||||
用户可以把外部资源授权给 Heicode 使用。
|
||||
|
||||
资源类型包括:
|
||||
|
||||
- Git 仓库。
|
||||
- SK 仓库或技能包。
|
||||
- 项目文档。
|
||||
- 云账号。
|
||||
- 云资源,例如 VM、数据库、对象存储、Kubernetes。
|
||||
|
||||
资源绑定不是简单保存密钥,而是生成可分配、可撤销、可审计的资源授权基础。
|
||||
|
||||
### 3. AI 开发团队生成
|
||||
|
||||
平台根据任务目标推荐子 Agnet 角色。
|
||||
|
||||
常见角色:
|
||||
|
||||
- Product Agnet。
|
||||
- Architect Agnet。
|
||||
- Frontend Agnet。
|
||||
- Backend Agnet。
|
||||
- Reviewer Agnet。
|
||||
- Ops Agnet。
|
||||
|
||||
每个子 Agnet 都有明确职责、可用资源、权限范围、模型配置和审计记录。
|
||||
|
||||
### 3.1 Agnet 持续执行闭环
|
||||
|
||||
Heicode 不是把任务分发给 Agnet 一次就结束,而是在继续开发中持续调用 Agnet 完成子环节。
|
||||
|
||||
完整闭环应表达为:
|
||||
|
||||
```text
|
||||
客户端输入想法或追加需求
|
||||
-> Manager 准备资源和部署条件
|
||||
-> Heicode 调度 Agnet 执行当前子环节
|
||||
-> Agnet 完成需求/开发/测试/修复/部署中的一步
|
||||
-> Agnet 按权限调用 SK 工具
|
||||
-> 中间结果和状态回传给客户端与 Manager
|
||||
-> 用户继续补充、修正或审批
|
||||
-> 最终由 Agnet 完成交付整理和部署
|
||||
```
|
||||
|
||||
### 4. 权限分配
|
||||
|
||||
Heicode 使用 Resource Grant 描述“哪个角色能用哪个资源、能做什么、是否需要审批”。
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
Backend Agnet
|
||||
-> 可读项目文档
|
||||
-> 可读写后端代码路径
|
||||
-> 可访问开发数据库
|
||||
-> 生产数据库访问需要审批
|
||||
```
|
||||
|
||||
普通用户看到的是角色和权限摘要,高级用户可以预览 permission manifest。
|
||||
|
||||
### 5. 高危操作审批
|
||||
|
||||
高危操作必须在客户端审批。
|
||||
|
||||
高危操作包括:
|
||||
|
||||
- 生产部署。
|
||||
- 云资源创建、删除、扩缩容。
|
||||
- 数据库迁移或写入。
|
||||
- 访问生产密钥。
|
||||
- 大额模型预算消耗。
|
||||
|
||||
审批通过后,平台可以从密钥保管器派生短期、最小权限凭证给子 Agnet 使用。
|
||||
|
||||
### 6. 模型与余额
|
||||
|
||||
Heicode 展示用户可见的模型、余额、额度、用量和调用日志。这些能力来自 CodeGW,但普通用户不需要进入 CodeGW 后台。
|
||||
|
||||
用户能看到:
|
||||
|
||||
- 可用模型。
|
||||
- 当前余额。
|
||||
- 当前额度。
|
||||
- 今日消耗。
|
||||
- 调用日志。
|
||||
- 失败日志。
|
||||
|
||||
用户看不到:
|
||||
|
||||
- 渠道管理。
|
||||
- 模型供应商后台配置。
|
||||
- 价格配置。
|
||||
- CodeGW 管理员设置。
|
||||
|
||||
### 7. 日志与审计
|
||||
|
||||
Heicode 统一展示任务执行、模型调用、资源访问、高危审批和部署记录。
|
||||
|
||||
审计要能回答:
|
||||
|
||||
```text
|
||||
谁
|
||||
在什么时候
|
||||
为了哪个任务
|
||||
让哪个子 Agnet
|
||||
使用了哪个资源
|
||||
执行了什么操作
|
||||
是否经过审批
|
||||
消耗了多少模型额度
|
||||
```
|
||||
|
||||
### 8. 部署和维护
|
||||
|
||||
Agnet 平台负责执行开发、检查、测试、修复和部署任务。Heicode 展示部署状态、失败原因、日志、指标和审计。
|
||||
|
||||
上线后,用户可以继续输入维护和升级需求,平台复用已有项目上下文、资源绑定和权限规则。
|
||||
|
||||
## 四、用户使用流程
|
||||
|
||||
完整流程:
|
||||
|
||||
```text
|
||||
登录 Heicode
|
||||
-> 下载并登录客户端
|
||||
-> 客户端输入产品想法
|
||||
-> 查看任务草案
|
||||
-> 绑定 Git / 文档 / SK / 云资源
|
||||
-> 生成子 Agnet 团队
|
||||
-> 分配角色权限
|
||||
-> 预览 permission manifest
|
||||
-> 确认部署计划
|
||||
-> Manager 部署 Agnet
|
||||
-> 客户端持续推进任务
|
||||
-> 客户端审批高危操作
|
||||
-> Agnet 平台执行任务并调用 SK
|
||||
-> Heicode 查看日志、用量、审计和交付结果
|
||||
-> 后续维护和升级
|
||||
```
|
||||
|
||||
## 五、平台组成说明
|
||||
|
||||
### 5.1 Heicode Manager
|
||||
|
||||
Heicode Manager 是浏览器辅助控制台。
|
||||
|
||||
用户在 Manager 中完成:
|
||||
|
||||
- 登录和查看首页。
|
||||
- 绑定资源。
|
||||
- 分配角色和权限。
|
||||
- 创建或部署 Agnet 任务。
|
||||
- 查看模型和余额。
|
||||
- 查看日志与审计。
|
||||
- 下载客户端。
|
||||
|
||||
Manager 不应该变成 CodeGW 后台,也不应该要求用户直接管理底层密钥系统,更不应该承担网页编码主体验。
|
||||
|
||||
### 5.2 Heicode 客户端
|
||||
|
||||
客户端是用户本地交互入口。
|
||||
|
||||
客户端负责:
|
||||
|
||||
- 登录 Heicode。
|
||||
- 输入对话和任务。
|
||||
- 持续追加需求和修正方向。
|
||||
- 展示 Heicode 提供的模型。
|
||||
- 审批高危操作。
|
||||
- 查看执行反馈和交付结果。
|
||||
|
||||
客户端不负责:
|
||||
|
||||
- 选择模型提供方。
|
||||
- 配置 CodeGW 渠道。
|
||||
- 直接访问密钥保管器。
|
||||
- 保存长期云密钥。
|
||||
|
||||
### 5.3 Agnet 平台
|
||||
|
||||
Agnet 平台是运行时执行层。
|
||||
|
||||
它负责:
|
||||
|
||||
- 在 AKS 上部署子 Agnet。
|
||||
- 维护子 Agnet 状态。
|
||||
- 执行开发、检查、测试、修复、部署和维护任务。
|
||||
- 在执行过程中按权限调用 SK 工具。
|
||||
- 回传日志、事件、指标和审计数据。
|
||||
- 按 Resource Grant 和运行时身份访问资源。
|
||||
|
||||
普通用户不直接操作 Agnet 平台后台,而是在 Heicode 中查看 Agnet 状态和结果。
|
||||
|
||||
### 5.4 CodeGW
|
||||
|
||||
CodeGW 是内部模型网关和计费服务。
|
||||
|
||||
它负责:
|
||||
|
||||
- 模型调用。
|
||||
- 用户或 Token 维度的额度。
|
||||
- 余额。
|
||||
- 调用日志。
|
||||
- 模型可用性。
|
||||
|
||||
Heicode 通过服务端调用 CodeGW,并把普通用户需要的信息展示出来。CodeGW 后台不对普通用户开放。
|
||||
|
||||
### 5.5 密钥保管器
|
||||
|
||||
密钥保管器用于保存长期凭证。当前技术实现是 OpenBao。
|
||||
|
||||
它负责:
|
||||
|
||||
- 保存 Git token、SSH key、云 access key、数据库密码等长期凭证。
|
||||
- 为高危操作派生短期凭证。
|
||||
- 支持撤销、轮换、禁用和审计。
|
||||
|
||||
用户不会直接看到明文密钥。Heicode 服务端数据库只保存 `secret_ref`。
|
||||
|
||||
## 六、任务资源上下文说明
|
||||
|
||||
任务资源上下文的目标是让 Heicode 安全、可审计地使用用户授权的外部资源,同时不把用户拉进资源管理后台。
|
||||
|
||||
任务上下文准备流程:
|
||||
|
||||
```text
|
||||
Heicode 判断当前任务需要哪些上下文
|
||||
-> 用户完成授权或连接配置
|
||||
-> Heicode 保存资源元数据
|
||||
-> Secret Broker 把凭证写入密钥保管器
|
||||
-> Heicode 保存 secret_ref
|
||||
-> 用户确认本任务允许使用的资源范围
|
||||
```
|
||||
|
||||
云资源授权后应尽量自动发现资源。用户绑定 Azure、AWS 或 GCP 后,平台应展示可选择的 VM、数据库、对象存储、Kubernetes 或资源组,减少手工填写。
|
||||
|
||||
## 七、权限和审批说明
|
||||
|
||||
权限确认围绕当前任务和角色进行。
|
||||
|
||||
用户不需要手写复杂策略,只需要确认:
|
||||
|
||||
- 这个角色能看什么。
|
||||
- 这个角色能改什么。
|
||||
- 这个角色能部署到哪里。
|
||||
- 哪些操作需要审批。
|
||||
- 授权什么时候过期。
|
||||
|
||||
高危操作审批只在客户端完成。审批结果会进入任务上下文和审计记录。
|
||||
|
||||
## 八、模型和余额说明
|
||||
|
||||
用户在 Heicode 中查看模型与余额。
|
||||
|
||||
展示内容:
|
||||
|
||||
- 可用模型。
|
||||
- 余额。
|
||||
- 额度。
|
||||
- 调用量。
|
||||
- 调用日志。
|
||||
- 失败日志。
|
||||
|
||||
子 Agnet 的运行模型属于 Agnet 平台部署配置,不等同于 CodeGW 后台的模型供应商配置。
|
||||
|
||||
## 九、密钥保管说明
|
||||
|
||||
长期密钥不会进入:
|
||||
|
||||
- Git。
|
||||
- Markdown。
|
||||
- 前端响应。
|
||||
- 普通日志。
|
||||
- 子 Agnet 长期状态。
|
||||
|
||||
长期密钥进入密钥保管器。Heicode 保存 `secret_ref`。子 Agnet 使用资源时,只获取短期、最小权限、可审计凭证。
|
||||
|
||||
## 十、平台边界
|
||||
|
||||
用户需要使用:
|
||||
|
||||
- Heicode。
|
||||
- Heicode 客户端。
|
||||
|
||||
用户不需要直接使用:
|
||||
|
||||
- CodeGW 后台。
|
||||
- OpenBao 控制台。
|
||||
- Agnet 平台后台。
|
||||
|
||||
用户不应该看到:
|
||||
|
||||
- 模型提供方选择。
|
||||
- 旧服务入口。
|
||||
- 明文密钥。
|
||||
- OpenBao token。
|
||||
- CodeGW 管理员配置。
|
||||
|
||||
## 十一、常见问题
|
||||
|
||||
### 1. 我需要会写代码吗?
|
||||
|
||||
不一定。Heicode 的目标是让用户从自然语言想法开始。但如果用户已有代码仓库,平台可以更好地基于现有项目继续开发。
|
||||
|
||||
### 2. 我必须绑定 Git 吗?
|
||||
|
||||
如果要让子 Agnet 修改代码,建议绑定 Git 仓库。只做产品文档或原型描述时,可以先不绑定代码仓库。
|
||||
|
||||
### 3. 我必须绑定云资源吗?
|
||||
|
||||
如果需要部署、测试环境或生产环境操作,就需要绑定云资源。只做需求、代码或本地检查时,可以先不绑定云资源。
|
||||
|
||||
### 4. 密钥安全吗?
|
||||
|
||||
平台设计上不把明文密钥保存到 Heicode 服务端数据库、Git、Markdown、日志或前端响应中。真实凭证进入密钥保管器,子 Agnet 只使用短期、最小权限凭证。
|
||||
|
||||
### 5. 客户端必须安装吗?
|
||||
|
||||
客户端用于本地对话和高危操作审批。普通浏览器流程可以完成很多管理操作,但高危操作审批建议通过客户端完成。
|
||||
|
||||
### 6. CodeGW 是什么?
|
||||
|
||||
CodeGW 是 Heicode 的模型网关和计费服务。普通用户不需要进入 CodeGW 后台,只在 Heicode 中查看模型、余额、额度和调用日志。
|
||||
|
||||
### 7. Agnet 是什么?
|
||||
|
||||
Agnet 是平台生成的 AI 开发角色。不同 Agnet 负责不同任务,例如产品、架构、前端、后端、审查和部署。
|
||||
|
||||
### 8. 生产部署怎么保证安全?
|
||||
|
||||
生产部署属于高危操作,需要客户端审批。审批通过后,平台按权限和 TTL 派生短期凭证,并记录完整审计。
|
||||
|
||||
### 9. 如果授权错了资源怎么办?
|
||||
|
||||
用户可以在任务资源上下文或权限确认卡中禁用、撤销或调整授权。撤销后,新的 permission manifest 不应再包含对应授权。
|
||||
|
||||
### 10. 平台会不会自动删除我的云资源?
|
||||
|
||||
不会默认执行高危操作。删除、生产部署、数据库写入等高危动作必须经过客户端审批。
|
||||
|
||||
## 十二、平台说明标准话术
|
||||
|
||||
> Heicode 是一个从想法到上线的软件生命周期平台。用户在 Heicode 中输入产品想法,绑定代码、文档、SK 和云资源。Heicode 生成子 Agnet 团队和权限清单,客户端负责高危审批,Agnet 平台负责执行开发和部署,CodeGW 提供模型和用量,密钥保管器保存长期凭证。用户只需要使用 Heicode 和客户端,不需要直接进入 CodeGW 后台或密钥保管器后台。
|
||||
@@ -0,0 +1,48 @@
|
||||
# Heicode 产品资料包
|
||||
|
||||
版本:v0.1
|
||||
日期:2026-05-07
|
||||
用途:对外介绍、官网设计、销售沟通、内部产品对齐、演示和用户上手。
|
||||
|
||||
## 资料包目录
|
||||
|
||||
| 文档 | 用途 |
|
||||
|------|------|
|
||||
| [`01-product-overview.md`](./01-product-overview.md) | 产品说明文档,回答 Heicode 是什么、解决什么问题、系统边界是什么 |
|
||||
| [`02-homepage-design-brief.md`](./02-homepage-design-brief.md) | 产品首页设计文档,指导官网首页结构、文案和视觉重点 |
|
||||
| [`03-user-journey-and-core-flow.md`](./03-user-journey-and-core-flow.md) | 用户旅程与核心流程,描述从想法到上线的完整路径 |
|
||||
| [`04-platform-usage-guide.md`](./04-platform-usage-guide.md) | 登录平台和使用平台指南,面向真实用户上手 |
|
||||
| [`05-ppt-copy.md`](./05-ppt-copy.md) | 产品 PPT 文案,面向路演、客户介绍和团队同步 |
|
||||
| [`06-security-and-credential-management.md`](./06-security-and-credential-management.md) | 安全与凭证管理说明,解释密钥保管器、`secret_ref`、高危审批 |
|
||||
| [`07-integration-boundaries.md`](./07-integration-boundaries.md) | CodeGW、OpenBao、Agnet 平台边界说明 |
|
||||
| [`08-client-guide.md`](./08-client-guide.md) | Heicode 客户端说明,强调只登录 Heicode、只使用 Heicode 模型 |
|
||||
| [`09-demo-script.md`](./09-demo-script.md) | 5 分钟演示脚本,用于产品演示和录屏 |
|
||||
| [`10-frontend-detail-spec.md`](./10-frontend-detail-spec.md) | 前端细节说明,覆盖 Heicode 和客户端页面、组件、状态、文案规则 |
|
||||
| [`11-product-prototype-wireframes.md`](./11-product-prototype-wireframes.md) | 产品原型图,说明 Heicode 客户端主体验、Manager 辅助控制台与 Agnet 执行闭环的边界 |
|
||||
| [`12-narrated-user-operation-flow.md`](./12-narrated-user-operation-flow.md) | 口述用户操作流程,用于演示、培训、录屏旁白和销售讲解 |
|
||||
| [`13-platform-description.md`](./13-platform-description.md) | 平台说明文档,解释平台组成、使用方式、系统边界和常见问题 |
|
||||
|
||||
## 统一表述
|
||||
|
||||
Heicode 是一款面向全流程智能开发的 SaaS Code 工具。用户注册登录后,只需要输入想法,平台逐步完成需求澄清、产品文档、原型描述、代码开发、代码检查、生产部署、后续维护和升级。
|
||||
|
||||
对外一句话:
|
||||
|
||||
> Heicode 让用户从一个想法开始,组织 AI 开发团队,接入自己的代码和云资源,完成从产品设计到生产部署的软件生命周期。
|
||||
|
||||
## 命名规则
|
||||
|
||||
- 用户侧叫 `Heicode`,不要叫 CodeGW 后台。
|
||||
- `Heicode 客户端` 是用户主体验,用于对话、输入想法、推进开发任务、查看执行反馈、高危审批和接收交付结果。
|
||||
- `Heicode Manager` 是浏览器里的辅助控制台,负责账号与安全、客户端下载、Git/云资源绑定、Agnet 部署、任务状态、余额与审计。
|
||||
- 继续开发时,Heicode 会持续调用 Agnet 推进需求、开发、测试、修复和部署等子环节。
|
||||
- Agnet 在执行过程中可以调用已授权的 SK 工具,最终完成交付与部署并把结果回传给客户端和 Manager。
|
||||
- 用户侧叫 `密钥保管器`,技术实现可以说明是 OpenBao。
|
||||
- 用户侧叫 `资源绑定`,不要叫 Git 来源。
|
||||
- 客户端不出现 `模型提供方`、`旧服务入口`、`第三方路由入口`。
|
||||
- CodeGW 是内部模型网关和计费服务,不作为普通用户产品入口。
|
||||
- Agnet 平台是执行层,不替代 Heicode 的用户控制台。
|
||||
|
||||
## 当前产品边界
|
||||
|
||||
当前资料包以 `docs/heicode.md`、`docs/plan.md`、`docs/product-requirements.md` 为依据。旧 Agnet 草案、旧 M1-M5 计划和旧 UI 命名不作为产品主线。
|
||||
Reference in New Issue
Block a user