按桌面客户端统一方案 v0.1 + agent_management Sub Mode Runtime 对接,强制全量统一,不留兼容。
命名统一(强制,无兼容):
- 全仓 agnet/Agnet/AGNET → agent/Agent/AGENT:后端 Go(路由 /api/agent/*、env AGENT_*、
结构体/函数、19 个文件改名)、前端(agent-console/agent-hub、/api/agent 调用、i18n)、
DB(表 agent_*、列 agent_id)、compose/.env、文档、脚本。
- DB 加幂等迁移 renameAgnetTablesToAgent():启动时 rename 老 agnet_* 表/列,保住生产数据。
统一方案核心(10 项):
- callback 统一 /api/agent/callbacks/runtime-events(路由/广播URL/函数名)。
- artifact 兜底判定改用 Runtime 权威信号 metadata.synthesized(§7.2)+ 结构化 artifact_type。
- Manager→Runtime 路径对齐 /api/agent/sub-agile/deployments(§2.2),{deployment_id} 回退 swarm_id。
- 状态裁决 display_status:Manager 唯一裁判,completed 无有效产物→needs_codegen/
completed_without_deliverable(§10.6),接入 detail/timeline/workflow。
- GET /api/heicode/capabilities 能力发现(§6)。
- 模型策略 per_role(role_models)+ 收集 allowed_model_ids(§9)。
- resource_binding_id→secret_ref 服务端解析,客户端不再 inline secret_ref(§17.6)。
- 客户端统一路由层 /api/heicode/sub-agile|swarm/*(task≡deployment,复用控制面)+ workflow 投影。
- 日志分层 user_logs/debug_logs(§13)。
验证:go build ./... + go test(controller/router/model/middleware)全绿;前端 tsc -b + rsbuild build 通过。
待部署:VM .env 的 AGNET_*→AGENT_*;启动迁移自动 rename 表;其他三仓库需同步切到 /api/agent。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
83 lines
4.1 KiB
YAML
83 lines
4.1 KiB
YAML
# Azure VM:只跑 heicode 容器;PostgreSQL / Redis 使用 Azure 托管实例。
|
|
# 代码更新:在 VM 上对完整 heicode 仓库 git pull,勿用 scp 同步源码(见仓库根 CLAUDE.md)。
|
|
# 容器产生的数据(/data 上传与持久文件、/app/logs)绑定到 VM 本地磁盘,避免仅用匿名卷导致难备份或重建丢失。
|
|
#
|
|
# 1. 在 VM 上准备目录(示例)
|
|
# export HEICODE_DATA_ROOT=/var/lib/heicode/heicode
|
|
# sudo mkdir -p "$HEICODE_DATA_ROOT"/{data,logs}
|
|
# sudo chown -R "$USER":"$USER" "$HEICODE_DATA_ROOT"
|
|
#
|
|
# 2. 在本目录放置 .env(勿提交仓库),至少包含由运维注入的:
|
|
# SQL_DSN=postgresql://...@heicode.postgres.database.azure.com:5432/heicode?sslmode=require
|
|
# REDIS_CONN_STRING=rediss://:...@heicode.redis.cache.windows.net:6380
|
|
# SESSION_SECRET=...
|
|
# AZURE_KEY_VAULT_URL=https://<vault-name>.vault.azure.net
|
|
# (以及项目要求的其它密钥,见官方 heicode 文档)
|
|
#
|
|
# 3. 构建 Heicode 定制镜像时与本地 override 一致:
|
|
# docker compose -f docker-compose.azure-vm.yml -f docker-compose.override.yml --env-file .env up -d --build
|
|
# 4. 构建完成后删除悬空旧镜像层:sudo docker image prune -f
|
|
#
|
|
# 若只用上游镜像、无 override,可去掉第二个 -f 文件,并把下方 image 改为 calciumion/heicode:latest。
|
|
|
|
version: '3.4'
|
|
|
|
services:
|
|
heicode:
|
|
image: ${IMAGE_TAG:-heicode-manager:local}
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: heicode
|
|
restart: always
|
|
command: --log-dir /app/logs
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- ${HEICODE_DATA_ROOT}/data:/data
|
|
- ${HEICODE_DATA_ROOT}/logs:/app/logs
|
|
env_file:
|
|
- ${ENV_FILE:-.env}
|
|
environment:
|
|
- TZ=Asia/Shanghai
|
|
- ERROR_LOG_ENABLED=true
|
|
- BATCH_UPDATE_ENABLED=true
|
|
- NODE_NAME=heicode-node-1
|
|
# 默认与 docs/integration/Heicode-登录接口对接文档.md §2.1 一致;覆盖仅用于非标准网关。
|
|
- HEICODE_AUTH_BASE_URL=${HEICODE_AUTH_BASE_URL:-https://apimtaiji.azure-api.net/api/mcp}
|
|
# Agent 登录后 JIT 同步:邮箱命中以下白名单则自动提权
|
|
- HEICODE_ROOT_EMAILS=${HEICODE_ROOT_EMAILS:-}
|
|
- HEICODE_ADMIN_EMAILS=${HEICODE_ADMIN_EMAILS:-}
|
|
# Long-lived resource credentials are written to Azure Key Vault via
|
|
# the VM managed identity. No static secret-store token is required.
|
|
- AZURE_KEY_VAULT_URL=${AZURE_KEY_VAULT_URL:-}
|
|
- AZURE_CLIENT_ID=${AZURE_CLIENT_ID:-}
|
|
# Agent Manager Runtime: use the current production IP directly.
|
|
# The public domain is not used until DNS/HTTPS is fixed.
|
|
- AGENT_RUNTIME_ENABLED=${AGENT_RUNTIME_ENABLED:-false}
|
|
- AGENT_RUNTIME_BASE_URL=${AGENT_RUNTIME_BASE_URL:-http://20.212.121.126}
|
|
- AGENT_RUNTIME_CREATE_PATH=${AGENT_RUNTIME_CREATE_PATH:-/api/agent/deployments}
|
|
- AGENT_RUNTIME_HEALTH_PATH=${AGENT_RUNTIME_HEALTH_PATH:-/api/agent/health}
|
|
- AGENT_RUNTIME_STOP_PATH=${AGENT_RUNTIME_STOP_PATH:-/api/agent/deployments/{deployment_id}/stop}
|
|
- AGENT_RUNTIME_SERVICE_TOKEN=${AGENT_RUNTIME_SERVICE_TOKEN:-}
|
|
- AGENT_RUNTIME_CALLBACK_SIGNING_SECRET_REF=${AGENT_RUNTIME_CALLBACK_SIGNING_SECRET_REF:-}
|
|
# HeiCode-Swarm Runtime is separate from ordinary sub Agent Runtime.
|
|
- SWARM_RUNTIME_ENABLED=${SWARM_RUNTIME_ENABLED:-false}
|
|
- SWARM_RUNTIME_BASE_URL=${SWARM_RUNTIME_BASE_URL:-}
|
|
- SWARM_RUNTIME_CREATE_PATH=${SWARM_RUNTIME_CREATE_PATH:-/api/swarms}
|
|
- SWARM_RUNTIME_HEALTH_PATH=${SWARM_RUNTIME_HEALTH_PATH:-/api/agent/health}
|
|
- SWARM_RUNTIME_STOP_PATH=${SWARM_RUNTIME_STOP_PATH:-/api/swarms/{swarm_id}/stop}
|
|
- SWARM_RUNTIME_APPROVAL_DECISION_PATH=${SWARM_RUNTIME_APPROVAL_DECISION_PATH:-/api/swarms/{swarm_id}/approvals/{approval_id}}
|
|
- SWARM_RUNTIME_SERVICE_TOKEN=${SWARM_RUNTIME_SERVICE_TOKEN:-}
|
|
networks:
|
|
- heicode-network
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
networks:
|
|
heicode-network:
|
|
driver: bridge
|