 FastheiandClaude Opus 4.8
|
efa865cac4
|
fix(launcher/#63): 拉起 agent 注入 git 绑定(GIT_REPO_URL + azkv 凭据)— 修 HM #92
现象(HM #92):蜂群"需绑定 git 仓库才能使用",但 agent 实际拿不到仓库。
根因:HM 已在 swarm create 的 resource_grants 下发 git 绑定(resource_type=git +
metadata.repo_url + secret_ref=azkv://),但 swarm 拉起侧只把 grant 用于校验/脱敏/审批,
launcher 从不消费它 → 被拉起 agent 的 env 没有 GIT_REPO_URL/凭据 → 无法 clone。
(agent 侧 agent/main.py + agent/git_operations.py 早已读取这些 env,缺的纯是注入。)
修复(仅 launcher 注入,比照模型 key 的服务端解析路径):
- 新增 resolve_git_grant(body):从 resource_grants(含 per-agent)取首个 git grant,
repo_url(metadata) → GIT_REPO_URL(非密文 inline);secret_ref(azkv) 服务端解析 →
GIT_USERNAME/GIT_PASSWORD。复用 azkv 读取(workload identity;dev/CI 用
HEICODE_SECRET_<name>)。有 repo 无凭据仍注入 GIT_REPO_URL(公有仓可 clone;私有仓
报错,不伪造)。
- plan_launch_specs 增加 git_env 合并;create 路径解析并透传。
- k8s 后端:GIT_PASSWORD 与模型 key 同走 per-swarm Secret 的 secretKeyRef,绝不内联
PodSpec;GIT_REPO_URL/GIT_USERNAME 为非密文 inline。SENSITIVE_ENV_KEYS 统一管控。
- git KV secret 值约定 JSON {"git_username","git_password"}(接受 git_token/token 形式
+ 裸 token),待 HM #92 对齐。
git 凭据不入 create 请求体/回调/日志/argv(_reject_plaintext_secrets 已覆盖
resource_grants)。
文档:runtime-contract §3.3 env 表 + 约束、security-boundary §6 增 git 绑定解析口径。
测试:scripts/test-agent-launcher.py 增 resolve_git_grant/凭据提取/k8s git secret 用例。
影响:仅 agent_swarm(Swarm/Agent + 密钥/secret_ref + 文档);不改 Manager/客户端/release/
契约状态机/计费/审计字段。HM 侧 binding_id(B 路径)解析另在 HM #92 处理,与本 PR 无关。
验收:
python scripts/test-runtime-contract.py
python scripts/test-contract-freeze.py
REDIS_FAKE=1 python scripts/test-key-injection-contract.py
python scripts/test-security-boundary.py
python scripts/test-agent-launcher.py
python scripts/test-git-workflow.py
python scripts/test-merge-smoke.py
python scripts/test-workflow-e2e.py
(全部通过)
Refs HM #92, Closes #63
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 12:17:51 +08:00 |
|
gongzhiyong
|
a117c02e3f
|
docs(#56): 更正模型 key 库名 heicode-kv → heicode-vault(HM 实测口径)
agent_swarm#56 评论:模型 key 的真实 Key Vault 库名是 `heicode-vault`
(`https://heicode-vault.vault.azure.net`),早期契约文档误写为 `heicode-kv`;
且生产 `SECRET_RESOLVER` 须指向 `heicode-vault`。
- runtime-contract.md §3.3.1 A.3:库名更正 + 标注 SECRET_RESOLVER 指向 heicode-vault
+ 明确 Swarm 需提供 Pod 身份的 clientId+objectId 给 HM 授权(只读、限 swarm-model-key-*)。
- security-boundary.md:secret_ref 示例 host 同步更正。
- test-key-injection-contract.py:模型 key fixture host 同步更正(resolver 仅取末段名,
功能不变;测试仍全绿)。
纯文档/fixture 更名,无事件 schema/契约字段改动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-14 17:12:27 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
af26455a8b
|
agent_launcher:新增一等 kubernetes 后端(每 agent 一 Pod,key 经 Secret 引用不内联)(Refs #16)
回应「我们跑在 k8s pods 上」——此前 launcher 只有 dev 的 subprocess + 通用 command hook,
未把 k8s 作为一等后端,且把 OPENAI_API_KEY 内联进 env(在 k8s 会落 etcd)。本次:
- 新增 AGENT_LAUNCH_BACKEND=kubernetes:每 agent 一个 Pod(build_pod_manifest)——资源
requests/limits、标签 heicode-swarm-id/heicode-user-id(GC/teardown)、restartPolicy OnFailure、
serviceAccountName;非敏感 env 内联,**OPENAI_API_KEY 经 secretKeyRef 引用每-swarm k8s Secret
(build_secret_manifest,via kubectl apply -f - stdin),绝不内联进 PodSpec(不落 etcd/argv)**。
- stop_launched:k8s 按标签 kubectl delete pod,secret;subprocess 仍 terminate。
- config:AGENT_POD_IMAGE/NAMESPACE/SERVICE_ACCOUNT/CPU|MEM_REQUEST|LIMIT;ORCHESTRATOR_URL=
集群内 Service DNS。文档注明前置(kubectl + 最小 RBAC ServiceAccount + NetworkPolicy)与
硬化替代(azkv CSI SecretProviderClass,编排器全程不碰明文)。
文档:runtime-contract §3.3 后端列表加 kubernetes(含密钥/RBAC/Service DNS/CSI);
security-boundary §6 增 K8s pod 边界(Secret 引用不内联、最小 RBAC、NetworkPolicy、CSI 硬化)。
测试:test-agent-launcher 增 k8s manifest 断言(标签、secretKeyRef 非内联、原文不在 Pod manifest、
资源限额、无 secret 则省略 key)。
影响范围:仅 agent_swarm(launcher + 文档 + 测试)。默认仍 backend=none,CI/e2e 不变。
Refs #16
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-11 17:19:35 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
9516b5c696
|
Swarm 负责拉起 agent + 执行限额(team 决议,反转 AM 拉起)(Refs #16)
团队决议:由 Swarm 运行时(非 AM)拉起专家 agent 池并执行每用户限额。
代码:
- orchestrator/agent_launcher.py(新):plan_launch_specs(纯,按 min(池大小, MAX_AGENTS_PER_USER
−已连) 限额 + 组装每 agent env)、resolve_model_key(override→azkv secret_ref 解析(部署
SecretResolver/dev HEICODE_SECRET_<name>)→OPENAI_API_KEY 兜底,解析不到不伪造)、可插拔后端
launch()(none 默认/subprocess/command 模板,fail-soft)、stop_launched。
- orchestrator/main.py:create 播种后调 launch_swarm_agents(仅去中心化、非 Manager 显式 agent;
从 create x-user-id 取 user_id;key 服务端解析,不入 create 体);stop_swarm_run 调 stop_launched。
文档:runtime-contract §3.3 由「AM 拉起(提案待确认)」改为「Swarm 拉起 + 限额(已定)」,
更新 env 来源列(key=Swarm 从 secret_ref 解析、AGENT_ID/CAPABILITIES=Swarm launcher、
HEICODE_USER_ID=从 create 透传)+ 后端/限额/解析约束;security-boundary §6 增 Swarm 拉起 +
服务端解析 key(不上 argv/日志)说明。
测试:scripts/test-agent-launcher.py(限额封顶、env 组装、key 解析优先级、command 模板、
none no-op)接入 CI。e2e/contract 回归通过(默认 backend=none,行为不变)。
影响范围:仅 agent_swarm(orchestrator + docs + 测试 + CI)。默认 backend=none 不自动拉起、
向后兼容;密钥仅服务端 env 注入、不入 create 体/回调/日志/argv(满足 §3.1 + security-boundary)。
不改 Manager↔Swarm 契约鉴权/计费账本/审批链。
Refs #16
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-11 15:07:23 +08:00 |
|
 FastheiandGitHub
|
5e29618bf5
|
Merge pull request #32 from xmindlab-heicode/feat/max-agents-per-user
每用户并发 Agent 上限:MAX_AGENTS_PER_USER 默认 10
|
2026-06-10 22:44:39 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
56bff469c1
|
每用户并发 Agent 上限:MAX_AGENTS_PER_USER 默认 10
需求:限制每个用户在 swarm 中并发的 Agent 数为 10。按「并发 WS 连接数/用户」口径实现,env 可调(默认 10)。
orchestrator/main.py:ConnectionManager 新增 per-user 记账(agent_user / user_agents + user_agent_count / can_bind_user / bind_user / unbind);max_agents_per_user() 读 MAX_AGENTS_PER_USER(默认 10)。WS register 携带 user_id 且该用户已达上限时回 registration_rejected(reason,limit) 并 close(1008),不注册;同 agent_id 重连放行;断开 unbind 释放名额。未带 user_id 的 Agent 为 unbound、不受限。
agent/main.py:新增 user_id 构造参数 + HEICODE_USER_ID 环境回退,并在 register 载荷中带上(仅在设置时)。
测试 scripts/test-max-agents-per-user.py:单元 + WS 集成(MAX_AGENTS_PER_USER=3)。接入 CI。docs/integration/security-boundary.md §6 记录该配额。
影响范围:仅 agent_swarm;不改 Manager↔Swarm 契约、计费、审批链、密钥处理。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 22:01:22 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
727737dd9b
|
安全边界强制点:可验证边界 FROZEN v1 + 契约测试(Refs #19)
issue #19 要求「secret 仅 ref/不落明文;workspace/tool/MCP/tenant 沙箱强制;边界可验证 + 测试」。
本仓**已强制**的三类边界此前散落、缺统一验证;本 PR 把它们合为一套可验证测试并冻结文档。
测试:scripts/test-security-boundary.py(hermetic,19 断言)覆盖本仓强制边界:
- secret:billing_context.secret_ref 非 azkv:// 入口拒绝;明文 password/access_token 等字段
在任意层级拒绝;非 azkv 的 *_ref 拒绝(validate_create_request / _reject_plaintext_secrets)。
- 脱敏:明文凭据 → [redacted];azkv secret_ref 透传(HM 对客户端再脱敏)(_redact_sensitive)。
- workspace:绝对路径 / `..` 逃逸 / 空路径拒绝,合法相对路径落在 workspace 根内
(task_executor._resolve_workspace_path)。
- 沙箱 fail-closed:未确认隔离时 assert_isolated 抛 SandboxIsolationError,确认后放行。
文档:docs/integration/security-boundary.md → FROZEN v1:§9 覆盖表标注「✅✔ 已实现+测试」
三类强制边界;其余按规则 #9 据实标 ⏸「本次不做」并给理由——tool/MCP 权限引擎(无工具层可治理)、
allowed_paths 按 grant 强制(待资源授权链)、Pod 强化沙箱(Infra)、租户隔离(有意不引入,
按 user/channelId 归因)。CI 新增该测试步。
影响范围:仅 agent_swarm(新增测试 + 文档冻结 + CI)。无运行时逻辑改动;不改 Manager↔Swarm
契约、计费、审批链、密钥处理(仅为既有强制点补可验证测试)。
Refs #19
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 18:11:25 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
a289495823
|
复审整改(PR #24):沙箱 fail-closed 隔离门控 + 可回放 DecisionTrace
回应 Fasthei 的 Request changes 两个阻塞项:
1) 安全 / fail-closed 沙箱隔离(原仅靠 ENABLE_QUALITY_EVAL + 运维约定):
- 新增第二道显式确认 HEICODE_SANDBOX_ISOLATED(断言运行在隔离 Pod 内)。
- sandbox.run_tests() 与 quality.evaluate_run_quality() 执行任何代码前调用
assert_isolated(),未确认即抛 SandboxIsolationError——不写文件、不起子进程。
- 启动期 assert_quality_eval_safe():ENABLE_QUALITY_EVAL 开但隔离未确认 → 拒绝启动
(平台级硬失败,非运维口头约定)。
- 文档(security-boundary §8.1/§9、CLAUDE.md)与测试同步:test-sandbox/test-quality
先断言未确认时硬失败,再显式确认后继续。
2) #10 DecisionTrace 可回放(原仅存被选中任务的标量):
- Decision 现记录完整重放上下文:整个候选集(每候选 tau/eta/weight/p_norm/dependents)、
alpha/beta/epsilon、seed、free_slots、total_weight、explore_draw、select_pick、
select_index、explored 分支。
- 新增 DecisionEngine.replay_decision(trace):仅凭一条 trace(无 RNG/活体状态)复现被选任务;
test-decision-engine 断言「重放==实选」跨 50 次决策(探索+利用)成立。
- decision-engine.md §3.3 更新为可回放 DecisionTrace。
附:新增 docs/TESTING.md(reviewer 速查:依赖安装 + 每套测试命令,复审者此前因缺 fakeredis
未能跑到断言)。本地 11 项 gate 全绿。
影响范围:Swarm(orchestrator + 测试 + 文档)。不改 Manager↔Swarm 契约;新增开关
HEICODE_SANDBOX_ISOLATED(默认未设=拒绝执行)。仍非验收:gain/Benchmark_Agent 仍 NaN。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 13:22:54 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
d487923646
|
benchmark: 落地决策层(τ/η/P)、质量(Q_quality)、通信遥测;关闭 #10 #23
四块互相交织的 benchmark 覆盖增量,统一提交:
1) 通信遥测(#23):orchestrator 路由 peer 消息时按 correlation_id 计请求/应答到
SwarmRun.collaboration(内部状态,不进 Manager 事件流);collector 算 s_communication。
治理计数由 run.approvals 派生(合规/总数)→ s_governance。
2) Q_quality 掩码归一(v2.1 裁定):metrics.quality_score 改为对 present 输入加权归一,
非编码任务自动忽略 TestPassRate,全缺 → NaN(不伪造)。
3) 质量插桩 / Group B:新增 Pod 内代码测试沙箱(orchestrator/sandbox.py,环境清洗 +
超时强杀 + 资源限额 + 路径越界校验,门控 ENABLE_QUALITY_EVAL)与 held-out fixture
(benchmark/fixtures/);run 完成时用留出测试评分得 TestPassRate → Q_quality →
collector 合成 reward。安全边界见 docs/integration/security-boundary.md §8.1。
4) 决策引擎 / Group A(#10,Option A score-at-pull):新增 orchestrator/decision_engine.py
—— 信息素 τ(Redis 持久、(role,agent) 键控、冷启动 0.5、ρ 蒸发、夹紧、学习常开)+
η 启发式评分 + ε-greedy 概率采样;每次 dispatch 产一条 DecisionTrace →
SwarmRun.decisions;collector 算 tau/eta/p_decision。概率选择门控 ENABLE_ACO_DISPATCH
(默认关,CI 用 ACO_SEED 固定)。
覆盖:单次 run 真实可算字段由 4 提升至最多 10/15(新增 communication/reward/tau/eta/
p_decision,外加 governance 有条件)。
测试:新增 test-sandbox / test-quality / test-decision-engine;扩充 collector/metrics 用例;
CI 纳入全部 benchmark 套件 + flag-on 的 ACO e2e。本地 11 项 gate 全绿。
诚实边界(未越界声称):
- Group A 为单边匹配(Option B 待 Group C);概率派发优于贪心未证;默认关闭。
- reward 的 CodeReview/UserAcceptance 未采集(掩码忽略);P_risk 为审批派生低估。
- s_gain/s_swarm/g_e/g_e_cost/benchmark 仍 NaN —— 需基线(#21/#13),本 PR 不动验收。
影响范围:Swarm(orchestrator + benchmark + docs + CI)。不改 Manager↔Swarm 事件契约
(遥测均为运行时内部状态);不影响 Client/计费/密钥/发布链路。新增 ENABLE_QUALITY_EVAL /
ENABLE_ACO_DISPATCH 两个开关,默认关闭。
Closes #10
Closes #23
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 12:51:32 +08:00 |
|
 Songhaoz666andClaude Opus 4.8
|
54cb327348
|
Agent Swarm v6:基准 v2.1、主控 Agent、实质性对等回复、客户端指南
- 基准标准 v2.1:SwarmMetrics(15 字段)、τ/η/P_decision/reward 公式、对称 G_E,c(修正 C_base=1.0 退化)、Σλ=1.0 校验;新增基线对比与运行记录 schema;指标覆盖缺口分析;参考系数暂留为元数据(待量化)。
- 主控 Agent 实体(分解 / 评审决策 / 汇总);事件契约修正(timeline.title、budget.threshold_pct、handoff 角色、task.released)+ 契约校验脚本。
- 实质性 LLM 对等回复(含降级回退);集成契约(runtime / event / usage / audit / frontend / capability / security);CLIENT_GUIDE 客户端指南;CI 工作流;治理与交付文档。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-09 16:21:18 +08:00 |
|