From cc7a0bc6dff2e1d773ec18fbfb4d8f6e23e34842 Mon Sep 17 00:00:00 2001 From: randypanding <66171646+randypanding@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:15:36 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20archetype=20v2=20=E5=8D=81=E5=8E=9F?= =?UTF-8?q?=E5=9E=8B=EF=BC=88AR-8/ADR-0008=EF=BC=89+=20gh-app-token=20?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E6=94=B9=E5=90=8D=20AGENT=5FAPP=5FSECRET?= =?UTF-8?q?=EF=BC=88=E4=B8=8E=20org=20secret=20=E5=90=8C=E5=90=8D=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- governance/GOVERNANCE.yaml | 2 +- governance/expected-state.json | 2 +- scripts/gh-app-token.sh | 14 +++++++------- standards/agent/agent.schema.yaml | 20 ++++++++++++++------ 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/governance/GOVERNANCE.yaml b/governance/GOVERNANCE.yaml index f399174..f4c312f 100644 --- a/governance/GOVERNANCE.yaml +++ b/governance/GOVERNANCE.yaml @@ -176,7 +176,7 @@ domains: strength: enforced schema: standards/agent/event.schema.yaml - id: AR-8 - intent: "agent 必须声明 archetype(builder/checker/orchestrator/curator/interface/observer/operator);同一声明不得兼任 builder 与 checker;checker 强制 private workspace;分类决定权限基线与审计强度" + intent: "agent 必须声明 archetype(十原型封顶:builder/planner/checker/judge/orchestrator/curator/interface/observer/researcher/operator,ADR-0008);builder↔checker、planner↔builder 不得同一声明;checker 强制 private workspace;judge 模型别名须异于争议双方;新增第 11 原型须 ADR 论证" strength: enforced validate: agent-registry/scripts/validate.py - id: AR-9 diff --git a/governance/expected-state.json b/governance/expected-state.json index 01254b5..5248912 100644 --- a/governance/expected-state.json +++ b/governance/expected-state.json @@ -25,7 +25,7 @@ "delete_branch_on_merge": true, "exclude_repos": ["AI_Web_School"] }, - "org_secrets_required": ["CB_APP_ID", "CB_APP_KEY"], + "org_secrets_required": ["CB_APP_ID", "AGENT_APP_SECRET"], "github_app": { "name": "cloudbrid-agent", "id": 4632704, diff --git a/scripts/gh-app-token.sh b/scripts/gh-app-token.sh index b92a482..ee58c97 100755 --- a/scripts/gh-app-token.sh +++ b/scripts/gh-app-token.sh @@ -11,8 +11,8 @@ # # 用法: # export CB_APP_ID=123456 # App 详情页的 App ID -# export CB_APP_KEY_FILE=~/.config/cloudbird/cloudbird-agent.pem -# # CI / secret 场景改用字面量: export CB_APP_KEY="" +# export AGENT_APP_SECRET_FILE=~/.config/cloudbird/cloudbird-agent.pem +# # CI / secret 场景改用字面量(org secret 同名注入): export AGENT_APP_SECRET="" # # GH_TOKEN=$(bash gh-app-token.sh) # 作用域=安装的全部仓库 # GH_TOKEN=$(REPO=template-service bash gh-app-token.sh) # 作用域=单仓库(推荐) @@ -24,12 +24,12 @@ ORG="${ORG:-Cloudbird-Software}" APP_ID="${CB_APP_ID:?需要环境变量 CB_APP_ID(GitHub App 设置页的 App ID)}" # 私钥:优先文件,其次字面量(CI secret 里通常存 PEM 全文) -if [[ -n "${CB_APP_KEY_FILE:-}" && -f "$CB_APP_KEY_FILE" ]]; then - KEY=$(cat "$CB_APP_KEY_FILE") -elif [[ -n "${CB_APP_KEY:-}" ]]; then - KEY="$CB_APP_KEY" +if [[ -n "${AGENT_APP_SECRET_FILE:-}" && -f "$AGENT_APP_SECRET_FILE" ]]; then + KEY=$(cat "$AGENT_APP_SECRET_FILE") +elif [[ -n "${AGENT_APP_SECRET:-}" ]]; then + KEY="$AGENT_APP_SECRET" else - echo "错误:需要 CB_APP_KEY_FILE(私钥文件路径)或 CB_APP_KEY(PEM 内容)" >&2 + echo "错误:需要 AGENT_APP_SECRET_FILE(私钥文件路径)或 AGENT_APP_SECRET(PEM 内容)" >&2 exit 1 fi diff --git a/standards/agent/agent.schema.yaml b/standards/agent/agent.schema.yaml index 98295bd..ea237e0 100644 --- a/standards/agent/agent.schema.yaml +++ b/standards/agent/agent.schema.yaml @@ -12,17 +12,25 @@ properties: version: {type: string, pattern: "^[0-9]+\\.[0-9]+\\.[0-9]+$"} status: {enum: [proposed, approved, deprecated, rejected]} archetype: - enum: [builder, checker, orchestrator, curator, interface, observer, operator] + enum: [builder, planner, checker, judge, orchestrator, curator, interface, observer, researcher, operator] description: | - 原型(信任边界分类,AR-8)。分类决定默认权限基线/凭据策略/审计强度: - builder 生产者:写代码/文档/artifacts;产出必须被独立 checker 验收 - checker 检查者:只读为主,输出=判决(pass/fail+理由);强制 private workspace - orchestrator 编排者:任务分解/分配/汇总,不直接产 artifacts;高审计 + 原型(信任边界分类,AR-8 v2,ADR-0008)。分类决定默认权限基线/凭据策略/审计强度: + builder 生产者:写实现代码/产品文档;产出必须被独立 checker 验收;永不写自身验收测试 + planner 计划者(设计时):意图→波次计划+工作卡+测试规格;只写计划产物不写实现; + 下游毒化风险高→高审计;计划须过 checker 评审方可执行 + checker 检查者:验收判决(pass/fail+理由)+测试作者权(从 planner 规格转译为测试代码, + 只可写 tests/** 不可写实现);强制 private workspace + strict + judge 仲裁者:域内分歧裁决(测试抖动/评审分歧/规格歧义);管辖权由团队声明授权, + 越域必上升人类;模型别名须与争议双方(builder/checker)均不同;判决可被 owner 推翻 + orchestrator 编排者(运行时):分配/监控/汇总,不产 artifacts;高审计 curator 保管者:治理仓/registry 维护、归档审核(persistent 团队主力) interface 接口者:对外通道接收需求/汇报;低权限转发+翻译 observer 观测者:只读采集度量/事件分析;只写数据层 + researcher 检索者:读外部网络/代码库/文档,产出结构化引用报告;常以 as_tool 被 worker + 调用实现上下文经济(全文留在 researcher,worker 只收结论+引用);不写仓库不碰生产 operator 运维者:部署/回滚;strict 模式,生产动作全 ask+人工审批(RL-1) - 约束:同一声明单 archetype;builder 与 checker 不得同一声明(利益分离) + 约束:同一声明单 archetype;builder 与 checker 不得同一声明(利益分离); + planner 与 builder 不得同一声明(标准制定者不可施工) role: {type: string, description: "一句话职责;决定团队装配"} identity: type: object