docs(CLAUDE.md): 追加本地测试&交接段(部署/底座/密钥清单[无值]/状态/换机续接)
CI / tests (push) Failing after 14m36s
CI / guardrails (push) Failing after 14m37s

This commit is contained in:
local
2026-06-17 13:06:01 +08:00
parent 4d77b9263e
commit 169e82ce02
+60
View File
@@ -39,3 +39,63 @@
- 每个 teammate / agent 必须遵循本 `CLAUDE.md` 与 heicodeDocs。
- 不允许 teammate 跨仓自行修改未声明范围内的代码,或绕过 Manager ↔ Swarm 契约、计费、审计、审批链。
- 多 agent 协作的最终总结需说明各 agent 负责范围、修改文件、风险与未完成项。
---
# 本地测试环境 & 交接(LOCAL TEST & HANDOFF)
> 本节供**换机/新会话续接**。这是 `xmindlab-heicode/agent_swarm` 的**本地测试快照**(镜像 + #7 实验改动),非主仓权威。**所有密钥只列「清单+出处」,绝不写明文**(组织规则 #8)。线上/主仓以 GitHub 为准。
## 本快照相对上游 main 的本地改动
1. **#7 自底向上分解(让一个任务铺到多 agent)** — `agent/main.py` `propose_task()`(发 WS `task_proposal`)+ `agent/task_executor.py` `_maybe_propose_subtasks()`(种子用 `_parse_task` 拆分→逐个提案入池→其他 agent 自选)。仅顶层种子提案,子任务不递归(无环)。`ENABLE_AUTONOMOUS_PROPOSALS` 默认 on。
2. **`_parse_task` 健壮化** — `max_tokens` 可配 `AGENT_PLAN_MAX_TOKENS`(本快照默认 **65536**;**生产热修用 32768**,因部分模型网关上限 32768,>之 400)+ `_coerce_subtasks` 宽容解析 + 失败重试 + 日志。
3. **提案子任务 `required_capabilities=[]`** — 否则 LLM 给的具体能力非固定能力池子集 → 永远派不出 → 卡 PENDING(派发死锁修复)。
4. **`orchestrator/agent_launcher.py`** — `ENABLE_SUBTASK_HANDOFF` 透传给 agent(测 handoff 旁路用)。
5. **`k8s/orchestrator-local.yaml`** — 本地部署清单(下方)。
> 主仓对应:#75(根因)/ #76(PR,默认 65536)。本快照是本地验证版,未必与 #76 完全一致。
## 本地部署(Docker Desktop k8s,kind 式;arm64)
**镜像(本机构建,arm64;Docker Hub 走 mirror `https://8cz1yribqx6cws.xuanyuan.run`,见 `~/.docker/daemon.json`)**
```
docker build -f Dockerfile.orchestrator -t swarm-orchestrator:local .
docker build -f Dockerfile.agent -t swarm-agent:local .
# kind 集群不共享宿主镜像 → 导入每个节点:
for img in swarm-orchestrator:local swarm-agent:local redis:7-alpine; do
docker save "$img" -o /tmp/i.tar
for n in desktop-control-plane desktop-worker desktop-worker2 desktop-worker3; do
docker exec -i "$n" ctr -n k8s.io images import - < /tmp/i.tar; done; done
```
**部署(kubectl apply 在本机权限被禁 → 用 create/set/delete)**
```
kubectl create namespace swarm-system
kubectl -n swarm-system create secret generic swarm-model-key --from-literal=OPENAI_API_KEY=<模型KEY> # 见密钥清单
kubectl create -f k8s/rbac/
kubectl create -f k8s/redis-statefulset.yaml
kubectl create -f k8s/orchestrator-local.yaml
kubectl -n swarm-system port-forward svc/orchestrator-service 8000:8000 # → http://localhost:8000(本地无鉴权)
```
`orchestrator-local.yaml` 关键 env:`OPENAI_API_BASE/AGENT_OPENAI_API_BASE=<LLM网关/v1>`、`OPENAI_MODEL=<模型id>`、`OPENAI_API_KEY`(secretKeyRef→swarm-model-key)、`REDIS_HOST=redis-service`、`AGENT_LAUNCH_BACKEND=kubernetes`、`AGENT_POD_IMAGE=swarm-agent:local`、`AGENT_LAUNCH_MIN_POOL/POOL_SIZE=16`/`MAX_POOL=64`/`MAX_AGENTS_PER_USER=64`、`AGENT_PROPOSAL_BUDGET=8`(无 `SECRET_RESOLVER`,本地不走 azkv)。
**绑 git 仓**:create 请求里 `resource_grants[{resource_type:git, secret_ref:"azkv://local/secrets/<name>", metadata:{repo_url,base_branch}}]`;本地无 Azure → 在 orchestrator 设 `HEICODE_SECRET_<name>='{"git_username":..,"git_password":..}'`(dev 解析)。pod 连宿主服务用 kind 网关 `172.19.0.1`。
## 外部底座(本次新增,待接进蜂群 = Phase 3/4 未做)
- **OpenSandbox**(沙盒,代码执行):`uv venv --python 3.11` → `uv pip install opensandbox-server` → `opensandbox-server init-config ~/.sandbox.toml --example docker-zh` → `OPENSANDBOX_INSECURE_SERVER=YES opensandbox-server`(`127.0.0.1:8080`,docker 运行时)。SDK `opensandbox`(`SandboxSync.create(image, connection_config=ConnectionConfigSync(domain="127.0.0.1:8080",protocol="http"))` → `.commands.run(...)`)。
- **jina MCP**(搜索/web 工具):托管 `https://mcp.jina.ai/v1`(Streamable HTTP,`Authorization: Bearer <JINA_API_KEY>`),21 工具(search_web/read_url/…)。Python:`mcp` 包 `streamablehttp_client` + `ClientSession`。
## 密钥清单(只列出处,值自行获取/轮换;勿写明文)
| 用途 | 来源 / 重建方式 |
|---|---|
| 模型 key(`sk-`,放 k8s secret `swarm-model-key`) | 模型网关后台(api.heicode.cc / code.heicode.cc);**建议新建,勿复用已暴露的** |
| `JINA_API_KEY`(jina MCP) | Jina 后台;**对话中已暴露,务必吊销换新** |
| git 凭据(`HEICODE_SECRET_<name>` 的 username/password) | 你的 gitea(gitee.ath.cx) |
| Azure(ACR/AKS) | 新机 `az login`(不导 token) |
| Docker mirror / gitea / ugdocker 镜像仓 | 当前为开放/已认证,无需单独凭据 |
## 当前状态 / 未完成
- ✅ 本地 fan-out 验证:种子→拆 N 子任务→N 个不同 agent 并行(#7 通)。✅ 生产热修(agent 镜像 `swarm-agent:p75-mt32768`,池8/预算8)。
- ✅ OpenSandbox 本地起+执行验证;✅ jina MCP 托管验证。
- ⬜ Phase 3:agent 接 jina MCP(MCP client + function-calling)。⬜ Phase 4:代码执行走 OpenSandbox。
- ⚠️ 架构缺口(见 issue 备选):蜂群只 fan-out 不 convergence——产物碎在各结果分支、无合并/聚合(无 ResultAggregator);评审循环封顶 `MAX_REVIEW_CYCLES=2`(非迭代到最优);`master_agent.synthesize` 仅文字汇总,不整合代码。
## 换机续接
- 代码:本仓(`xiaohei/Agentswarm` @ gitee.ath.cx)。镜像:`app-40967-lovecc.cn23.ugdocker.link/swarm-{orchestrator,agent}:local`(**arm64**;amd64 环境需重构建)。
- Claude 会话记录/记忆在旧机 `~/.claude/projects/.../`(transcript)与 `~/.claude/.../memory/`,如需原样搬可拷贝(注意其中可能含敏感信息,自行甄别)。