Commit Graph
38 Commits
Author SHA1 Message Date
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
FastheiandGitHub 719fe80b98 Merge pull request #61 from xmindlab-heicode/fix/56-k8s-deploy-artifacts
docs+feat(benchmark): 环境变量清单 & 默认启用 Cosmos+Blob 导出
2026-06-15 00:29:19 +08:00
FastheiandGitHub 9beecf982b Merge pull request #60 from xmindlab-heicode/fix/56-k8s-deploy-artifacts
docs: 新增全量环境变量清单 ENV_VARS.md
2026-06-15 00:14:22 +08:00
FastheiandGitHub ae7afc4525 Merge pull request #58 from xmindlab-heicode/fix/56-surface-stuck-run-diagnosis
feat(#56): 补 azkv SECRET_RESOLVER —— 用 Pod workload identity 从 heicod…
2026-06-14 19:31:39 +08:00
FastheiandGitHub 893352fcf5 Merge pull request #57 from xmindlab-heicode/fix/56-surface-stuck-run-diagnosis
Fix/56 surface stuck run diagnosis
2026-06-14 18:26:22 +08:00
FastheiandGitHub 43479dbb86 Merge pull request #54 from xmindlab-heicode/docs/reconcile-hmac-callback-status
docs: 统一 HMAC 签名回调状态口径(README ↔ event-schema)
2026-06-14 14:40:30 +08:00
FastheiandGitHub 9852df8cb4 Merge pull request #53 from xmindlab-heicode/docs/benchmark-collector-landed
docs(README): benchmark 采集器已落地,仅评分标准待定
2026-06-14 13:05:24 +08:00
FastheiandGitHub 1faa407aed Merge pull request #52 from xmindlab-heicode/feat/sse-events-stream-51
feat(#51): SSE 实时事件流 GET /api/swarms/{id}/events/stream(驾驶舱实时流,HM 反代给客户端)
2026-06-13 23:45:58 +08:00
FastheiandGitHub a978244cdd Merge pull request #50 from xmindlab-heicode/fix/rbac-naming-swarm-system-44
fix(k8s/#44): RBAC 清单对齐 swarm-system + swarm-orchestrator (Bug2)
2026-06-12 18:37:41 +08:00
FastheiandClaude Opus 4.8 f8b42d373b fix(k8s/#44): RBAC 清单对齐 swarm-system + swarm-orchestrator(修 #44 Bug2)
orchestrator-deployment.yaml 用 ns swarm-system + SA swarm-orchestrator,但
rbac/* 仍是 ns default + SA orchestrator-sa → 按官方清单 apply 后 SA 不匹配,
orchestrator 无权拉 agent pod(#44 Bug2)。

统一三件套到 swarm-system + swarm-orchestrator(= 生产实际运行的命名):
- serviceaccount: swarm-orchestrator / swarm-system
- role: orchestrator-role / swarm-system
- rolebinding: subject swarm-orchestrator/swarm-system, roleRef orchestrator-role

至此「从仓库 apply」可复现生产 RBAC。

影响范围:agent_swarm k8s 部署物料。不改契约/计费/审计/密钥/运行时代码。
注:agent-deployment-*/orchestrator-deployment-simple 等备用清单仍引用旧 orchestrator-sa,
属独立清理项(非 #44 Bug2 范围),另行跟进。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 18:37:04 +08:00
FastheiandGitHub b8dec09054 Merge pull request #49 from xmindlab-heicode/feat/redis-tls-auth-url
fix(redis/#44): 补回漏合的 keys() 集群 fan-out + Dockerfile COPY benchmark/ (2b0f2fe)
2026-06-12 18:26:22 +08:00
FastheiandClaude Opus 4.8 27739af446 feat(benchmark): 导出器接入 Cosmos NoSQL + Blob 存储账户(可组合多 target)
阶段3 数据落库:BENCHMARK_EXPORT_TARGET 支持逗号组合 cosmos,blob(默认 none)。
- CosmosExporter:Cosmos DB for NoSQL,一 run 一文档(id=swarm_id,分区键 /swarm_id)。
- BlobExporter:存储账户归档 <scenario>/<swarm_id>.json。
- get_exporters() 解析多 target;某 target 缺凭据/未知则跳过+告警,不影响其它与 run。
- capture 对每个 exporter 独立 to_thread 导出,互不影响。
- orchestrator/requirements:加 azure-cosmos/azure-storage-blob/azure-identity(懒导入)。

安全:所有连接串/AccountKey 仅从环境读(经 Secret/secret_ref 注入),
绝不写进代码/日志/提交(组织安全规则)。

验证:新增 test-benchmark-export.py(target 解析/隔离/doc 成形) + capture/selfcert/
collector 回归全 PASS。

影响范围:agent_swarm benchmark 导出层 + 依赖;运行时只读钩子不变;导出默认关、无密钥落地。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 18:12:46 +08:00
FastheiandClaude Opus 4.8 94ef894ace feat(benchmark): 阶段2 数据采集 — 真实 run 终态自动采集 SwarmMetrics 并落库(+可选导出)
把采集器接进真实运行,让数据自己累积,为后续【经验标定】O/系数/S_gain 攒真实
用户数据(这些量只能由真实运行事后标定,不能先验写死)。本阶段不编任何公式。

- orchestrator/main.py:run 终态(completed/failed)在终态事件后调 capture_run_metrics。
  只读 run 状态、try/except 包裹绝不失败 run;默认开,BENCHMARK_CAPTURE=0 可关。
- orchestrator/swarm_runtime.py:record_benchmark_metrics → 落 run.metadata['benchmark']。
- benchmark/collectors/capture.py:collect(run_collector) → 持久化 → 可选导出(to_thread)。
- benchmark/export/:MetricsExporter;默认 NoopExporter(无依赖/无凭据);
  BENCHMARK_EXPORT_TARGET=blob 启用 Azure Blob(连接串或 Workload/Managed Identity,
  凭据经环境注入,绝不写进代码),归档 <scenario>/<swarm_id>.json。

诚实:缺项指标 NaN→null,不伪造(规则#9)。

验证:新增 test-benchmark-capture.py + 现有 collector/selfcert + 契约冒烟(runtime/
merge/freeze)全 PASS。

影响范围:agent_swarm。运行时新增**只读**终态钩子(不改派发/执行/契约/计费/审计字段);
导出默认关,无密钥落地。Client/Manager/Agnet/CodeGW/发布链路不涉及。
依赖:benchmark/ 需在镜像内(quality.py 早已 import benchmark;由 #44 Dockerfile 修复覆盖)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:57:59 +08:00
FastheiandClaude Opus 4.8 b5cc68c977 feat(benchmark): 落地自证采集器(阶段0+1)— S_gain≡G_E 接通 S_swarm + leaderboard
阶段0(定口径,docs/benchmark/emergence-evaluation.md §6 v2.1-impl):
- S_gain ≡ G_E(差值,不强制归一 [0,100],与标准「见涌现增益」字面一致)。
- 聚合 S_gain 取对最强基线(Q_base 最大)的 G_E(最保守,避免挑弱基线虚高)。
- Q ≡ Q_quality;swarm_valid 仍要求对全部基线 G_E>0 且 G_E,c>0。

阶段1(采集器):
- 新增 benchmark/collectors/selfcert_collector.py:把套件 5 份 BenchmarkRunRecord
  (swarm+4基线)+ 可选活体 SwarmMetrics 合流,经 baselines.compare 算 G_E/G_E,c,
  补全 run_collector 无法自算的 s_gain/g_e/g_e_cost/s_swarm,可能时产出 Benchmark_Agent。
- benchmark/leaderboard:实现排行榜聚合+渲染(标准 §11 字段)。
- run-benchmark-suite.py 接入自证 + leaderboard 输出。

诚实纪律(组织规则 #9):缺真实输入一律 NaN+coverage False,不伪造。
- O(可观测性)标准无公式 → 恒 NaN;Gov 计数器未实现 → 无活体治理则 NaN。
- 故完整 Benchmark_Agent 数字仍待 O 公式 + Gov 计数器(阶段2),采集器明列缺口。

验证:新增 test-benchmark-selfcert.py(17 项)+ 现有 benchmark 测试(metrics/
collector/comparison/runners)+ offline suite + 契约冒烟(runtime/merge/freeze)全 PASS。

影响范围:仅 agent_swarm benchmark 模块 + docs;不改 Manager↔Swarm 契约/计费/审计/密钥/发布链路。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:38:19 +08:00
FastheiandClaude Opus 4.8 2b0f2fe6f2 fix(redis): cluster 模式 keys() 跨所有主分片 fan-out + 修 Dockerfile 漏拷 benchmark/(#44)
实测 heicode-rd(OSSCluster,2 分片):默认 keys() 只命中单节点,
漏掉其它分片上的 key → agent_registry/task_queue 枚举不全。
cluster 模式下改用 target_nodes=PRIMARIES,redis-py 合并各节点结果。

附带修 agent_swarm#44 Bug1:Dockerfile.orchestrator 漏 COPY benchmark/
(orchestrator/quality.py 启动即 import benchmark.fixtures/metrics)→
原镜像 CrashLoopBackOff。新增 .dockerignore 控制构建上下文。

影响范围:仅 agent_swarm orchestrator(连接层 + 构建物料);
不改契约/计费/审计/密钥落地。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:11:28 +08:00
FastheiandGitHub 161a369c0e Merge pull request #46 from xmindlab-heicode/feat/redis-tls-auth-url
feat(redis): 支持 TLS + 密码 + REDIS_URL(接托管 Redis,如 heicode-rd)
2026-06-12 17:01:10 +08:00
FastheiandClaude Opus 4.8 35aab3a643 feat(redis): 加 REDIS_CLUSTER 支持 OSS Cluster 端点(heicode-rd 必需)
heicode-rd(Azure Redis Enterprise)database clusteringPolicy=OSSCluster,
裸 redis.Redis 客户端在多分片下 keys()/跨 slot 操作会误路由/抛 MOVED。

- REDIS_CLUSTER truthy → 用 redis.asyncio.cluster.RedisCluster(URL 或
  host/port 两种入参,密码/TLS 同样支持)。cluster 模式无 DB select,
  REDIS_DB 被忽略(仅逻辑 DB0)。
- 不设时维持 standalone 行为,完全向后兼容。
- 测试加 cluster 用例;manifest/DELIVERY 补 REDIS_CLUSTER 说明。

验证:连接配置单测 4 项 + REDIS_FAKE 回退 + test-runtime-contract /
test-contract-freeze / test-merge-smoke 全 PASS。

影响范围:仅 agent_swarm orchestrator 连接层;不改契约/计费/审计/密钥落地。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:00:37 +08:00
FastheiandClaude Opus 4.8 aa498fc318 feat(redis): 支持 TLS + 密码 + REDIS_URL(接托管 Redis,如 heicode-rd)
orchestrator/redis_client.py 之前只支持裸 redis.Redis(host,port,db)
明文连接,无法连 Azure Redis Enterprise(强制 TLS + access key)。

改动:
- 新增 REDIS_URL(优先),rediss:// 自动启用 TLS,凭据写在 URL;
  否则用离散 REDIS_HOST/PORT/DB + 可选 REDIS_PASSWORD / REDIS_SSL。
- 完全向后兼容:都不设时维持现有明文 redis-service:6379 行为。
- 凭据只读 env(经 Secret/secret_ref 注入),日志只打脱敏目标,
  绝不输出 URL / 密码。
- 新增 scripts/test-redis-connection-config.py(无需真实 redis)。
- k8s manifest 补 Secret 引用示例;DELIVERY.md 补环境变量表。

验证:新单测 3 项 + REDIS_FAKE 回退 + test-runtime-contract /
test-contract-freeze / test-merge-smoke 全 PASS。

影响范围:仅 agent_swarm(orchestrator 连接层)。
不改 Manager↔Swarm 契约 / 计费 / 审计字段 / 发布链路。
涉及密钥:仅新增「从环境读取」路径,无任何密钥写入代码或日志。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 16:50:27 +08:00
FastheiandGitHub b83638a475 Merge pull request #42 from xmindlab-heicode/feat/agent-launcher-k8s-backend
agent_launcher:补回一等 kubernetes 后端(每 agent 一 Pod,key 经 Secret 引用不内联)(Refs #16)
2026-06-11 23:05:38 +08:00
FastheiandGitHub d7c9cd64b6 Merge branch 'main' into feat/agent-launcher-k8s-backend 2026-06-11 23:05:02 +08:00
FastheiandGitHub 0d6dec18eb Merge pull request #43 from xmindlab-heicode/feat/key-injection-contract
模型 key 注入对接:定死 HM #60 参数(KV value JSON + per-user 吊销握手)(Refs #16 #60)
2026-06-11 23:04:15 +08:00
FastheiandGitHub 1480146e07 Merge pull request #41 from xmindlab-heicode/feat/swarm-io
Swarm I/O:接收用户 prompt(追加输入)+ 返回结果(Refs #40)
2026-06-11 17:06:04 +08:00
FastheiandGitHub 02b8b08ab3 Merge branch 'main' into feat/swarm-io 2026-06-11 17:03:58 +08:00
FastheiandGitHub c04c306d78 Merge pull request #38 from xmindlab-heicode/feat/frontend-api-freeze
frontend-event-api:明确 run/task/event 稳定 API + Agent 调度入口已统一(Refs #18)
2026-06-11 17:03:36 +08:00
FastheiandGitHub 282df74f94 Merge pull request #37 from xmindlab-heicode/feat/usage-cost-phase
用量按 review-retry 成本归属:usage 事件标 cost_phase(Refs #16)
2026-06-11 16:49:37 +08:00
FastheiandGitHub 10d54fee61 Merge pull request #35 from xmindlab-heicode/feat/runtime-contract-agent-env
Swarm 负责拉起 agent + 执行限额 + runtime-contract §3.3(Refs #16)
2026-06-11 16:45:36 +08:00
FastheiandGitHub 5138d9a370 Merge pull request #33 from xmindlab-heicode/feat/client-guide-billing
CLIENT_GUIDE 校正:计费口径挑明 + §5/§7 去除已删除的 ENABLE_* 开关(Refs #16)
2026-06-10 22:48:45 +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
FastheiandGitHub e64ce6144a Merge pull request #30 from xmindlab-heicode/feat/audit-trace-freeze
审计/链路追踪落地:可回放审计记录 FROZEN v1(Refs #17)
2026-06-10 21:39:53 +08:00
FastheiandGitHub eb643c9b02 Merge branch 'main' into feat/audit-trace-freeze 2026-06-10 21:39:22 +08:00
FastheiandGitHub 5a3296e7d1 Merge pull request #28 from xmindlab-heicode/feat/contract-freeze
契约冻结 v1:Manager/客户端 Swarm Run 查询契约(Refs #2 #14 #15)
2026-06-10 18:36:38 +08:00
FastheiandGitHub 4bc98cf177 Merge pull request #31 from xmindlab-heicode/feat/security-boundary-freeze
安全边界强制点:可验证边界 FROZEN v1 + 契约测试(Refs #19)
2026-06-10 18:26:46 +08:00
FastheiandGitHub 59df538511 Merge pull request #29 from xmindlab-heicode/feat/benchmark-group-c-reland
benchmark Group C 重新落地到 main(基线运行器 + 统一记录 + 报告/回放)(Refs #21 #20 #22 #13)
2026-06-10 18:02:27 +08:00
FastheiandGitHub 8b5eea296a Merge pull request #26 from xmindlab-heicode/feat/decentralized-swarm-rework
去中心化蜂群重构:播种+自组织为唯一行为(Refs #6 #7 #8 #11 #12 #18)
2026-06-10 17:18:04 +08:00
FastheiandGitHub 8d71cc0ee0 Merge pull request #25 from xmindlab-heicode/feat/issue-9-dispatch-scoring
调度评分:多维可解释打分匹配(Closes #9)
2026-06-10 15:39:45 +08:00
FastheiandGitHub 423cc6fdc7 Merge pull request #24 from xmindlab-heicode/feat/benchmark-groups-a-b-telemetry
benchmark: 决策层(τ/η/P)+质量(Q_quality)+通信遥测(Closes #10 #23)
2026-06-10 13:35:27 +08:00
FastheiandGitHub 369c8fc43a Merge pull request #4 from xmindlab-heicode/fix/ci-all-suites
CI:7 套测试全部纳入 gate + 修复 e2e 退出竞态(非验收)
2026-06-09 17:50:58 +08:00
FastheiandGitHub 6bed064117 Merge pull request #3 from xmindlab-heicode/feature/v6-benchmark-v2
Agent Swarm v6:基准 v2.1、主控 Agent、对等回复与客户端指南
2026-06-09 17:12:33 +08:00