@cr1992/agentkit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.en.md +107 -0
- package/README.md +103 -0
- package/bin/agentkit.mjs +4 -0
- package/bin/cli.mjs +273 -0
- package/core/atomic-fs.mjs +23 -0
- package/core/cli-help.mjs +54 -0
- package/core/content-digest.mjs +66 -0
- package/core/digest.mjs +67 -0
- package/core/json-schema-lite.mjs +60 -0
- package/core/legacy-entry.mjs +37 -0
- package/core/reflection.mjs +142 -0
- package/core/runtime-bundle.mjs +101 -0
- package/docs/loop/embedded-review-adapter.md +41 -0
- package/docs/loop/loop-state-machine.md +43 -0
- package/docs/loop/recovery-and-fuses.md +34 -0
- package/docs/orchestrate/dispatch-contract.md +92 -0
- package/docs/orchestrate/failure-routing-and-recovery.md +46 -0
- package/docs/orchestrate/host-capability-cache.md +170 -0
- package/docs/orchestrate/isolation-fallback.md +18 -0
- package/docs/orchestrate/model-routing-config.md +186 -0
- package/docs/orchestrate/orchestration-runtime.md +261 -0
- package/docs/orchestrate/review-budget.md +90 -0
- package/docs/orchestrate/task-playbooks.md +85 -0
- package/docs/orchestrate/user-facing-reporting.md +14 -0
- package/docs/verify/evidence-schema.md +167 -0
- package/docs/verify/input-preparation.md +44 -0
- package/docs/verify/verification-protocol.md +76 -0
- package/docs/worktree/batch-integration.md +176 -0
- package/docs/worktree/delivery-identity.md +41 -0
- package/docs/worktree/profile.md +107 -0
- package/docs/worktree/reclaim-and-watch.md +96 -0
- package/docs/worktree/review-lifecycle.md +92 -0
- package/docs/worktree/spawn-and-stack.md +74 -0
- package/domains/loop/loop-runtime.mjs +1056 -0
- package/domains/orchestrate/contract-tool.mjs +169 -0
- package/domains/orchestrate/host_capability_cache.mjs +437 -0
- package/domains/orchestrate/orchestration-ledger.mjs +332 -0
- package/domains/orchestrate/orchestration-metadata.mjs +4 -0
- package/domains/orchestrate/orchestration-reflection.mjs +119 -0
- package/domains/orchestrate/resolve_model_policy.mjs +311 -0
- package/domains/orchestrate/review-budget.mjs +162 -0
- package/domains/orchestrate/worker-capability-preflight.mjs +227 -0
- package/domains/verify/verification-runtime.mjs +1638 -0
- package/domains/worktree/worktree-archive.mjs +135 -0
- package/domains/worktree/worktree-artifact.mjs +123 -0
- package/domains/worktree/worktree-batch-integrate.mjs +713 -0
- package/domains/worktree/worktree-batch-plan.mjs +198 -0
- package/domains/worktree/worktree-batch-result.mjs +241 -0
- package/domains/worktree/worktree-core.mjs +908 -0
- package/domains/worktree/worktree-doctor.mjs +493 -0
- package/domains/worktree/worktree-history.mjs +377 -0
- package/domains/worktree/worktree-learning.mjs +110 -0
- package/domains/worktree/worktree-lifecycle.mjs +786 -0
- package/domains/worktree/worktree-merge-preview.mjs +409 -0
- package/domains/worktree/worktree-mgr.mjs +261 -0
- package/domains/worktree/worktree-process.mjs +55 -0
- package/domains/worktree/worktree-profile.mjs +800 -0
- package/domains/worktree/worktree-provider-gitlab.mjs +59 -0
- package/domains/worktree/worktree-reclaim.mjs +683 -0
- package/domains/worktree/worktree-review-refresh.mjs +574 -0
- package/domains/worktree/worktree-review-watch.mjs +661 -0
- package/domains/worktree/worktree-scan.mjs +510 -0
- package/domains/worktree/worktree-trace-test-worker.mjs +23 -0
- package/domains/worktree/worktree-trace.mjs +478 -0
- package/manage-worktrees/SKILL.md +87 -0
- package/manage-worktrees/agents/openai.yaml +4 -0
- package/manage-worktrees/scripts/worktree-mgr.mjs +10 -0
- package/manage-worktrees/scripts/worktree-scan.mjs +10 -0
- package/orchestrate-subagents/SKILL.md +173 -0
- package/orchestrate-subagents/agents/openai.yaml +4 -0
- package/orchestrate-subagents/scripts/contract-tool.mjs +10 -0
- package/orchestrate-subagents/scripts/host_capability_cache.mjs +10 -0
- package/orchestrate-subagents/scripts/orchestration-ledger.mjs +10 -0
- package/orchestrate-subagents/scripts/orchestration-reflection.mjs +10 -0
- package/orchestrate-subagents/scripts/resolve_model_policy.mjs +10 -0
- package/orchestrate-subagents/scripts/review-budget.mjs +10 -0
- package/orchestrate-subagents/scripts/worker-capability-preflight.mjs +10 -0
- package/package.json +48 -0
- package/run-agent-verify-loop/SKILL.md +127 -0
- package/run-agent-verify-loop/agents/openai.yaml +4 -0
- package/run-agent-verify-loop/scripts/loop-runtime.mjs +10 -0
- package/schemas/artifact-ref-v1.schema.json +23 -0
- package/schemas/batch-result-v1.schema.json +138 -0
- package/schemas/controller-recheck-record-v1.schema.json +22 -0
- package/schemas/convergence-report-v1.schema.json +9 -0
- package/schemas/effective-worker-capability-v1.schema.json +36 -0
- package/schemas/embedded-verification-record-v1.schema.json +32 -0
- package/schemas/evidence-package-v1.schema.json +41 -0
- package/schemas/improvement-proposal-v1.schema.json +18 -0
- package/schemas/loop-state-v1.schema.json +34 -0
- package/schemas/model-policy-resolution-v1.schema.json +41 -0
- package/schemas/orchestration-ledger-v1.schema.json +110 -0
- package/schemas/reflection-record-v1.schema.json +24 -0
- package/schemas/review-result-v1.schema.json +37 -0
- package/schemas/task-contract-v1.schema.json +83 -0
- package/schemas/verification-profile-v1.schema.json +60 -0
- package/schemas/worker-capability-requirements-v1.schema.json +21 -0
- package/schemas/worktree-binding-v1.schema.json +14 -0
- package/shell-manifest.json +79 -0
- package/verify-agent-output/SKILL.md +119 -0
- package/verify-agent-output/agents/openai.yaml +4 -0
- package/verify-agent-output/scripts/verification-runtime.mjs +10 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 失败路由与 Controller 恢复
|
|
2
|
+
|
|
3
|
+
只在能力故障、业务验收失败、worker 中断、重派或 controller 接手时读取。正常 happy path 不加载。
|
|
4
|
+
|
|
5
|
+
## 能力故障
|
|
6
|
+
|
|
7
|
+
先归一为:
|
|
8
|
+
|
|
9
|
+
- `allowed`
|
|
10
|
+
- `denied_by_policy`
|
|
11
|
+
- `unavailable_or_unproven`
|
|
12
|
+
- `approval_channel_fault`
|
|
13
|
+
- `execution_fault`
|
|
14
|
+
|
|
15
|
+
错误字符串只作证据。策略拒绝后缩小 scope 或交 controller;审批通道故障停止同类派发并交人;执行
|
|
16
|
+
故障先诊断环境。不得扩大 scope、拿替代样本冒充目标对象,或用更强模型掩盖能力问题。
|
|
17
|
+
|
|
18
|
+
## 验收失败与重派
|
|
19
|
+
|
|
20
|
+
业务失败分为 `implementation_defect / reasoning_gap / context_gap / strategy_gap / environment_fault /
|
|
21
|
+
contract_gap / safety / undecidable`。前四类可在已授权的本地 envelope 内选择 `retry_same /
|
|
22
|
+
raise_effort / switch_model / promote_tier / fresh_context / change_strategy`;其余分别诊断环境、
|
|
23
|
+
re-contract、停止或升级。
|
|
24
|
+
|
|
25
|
+
每次重派创建新 attempt 和新 ledger 节点。前序先附稳定失败 report/Evidence 并进入 `failed`;新派发
|
|
26
|
+
绑定直接前序 `attempt_id`、连续序号、`failure_kind`、`failure_ref` 与新的选择理由。达到
|
|
27
|
+
`max_attempts`、连续同因熔断或需要越过已授权模型/effort envelope 时停止并交用户。模型动作的完整
|
|
28
|
+
约束见 [model-routing-config.md](model-routing-config.md)。
|
|
29
|
+
|
|
30
|
+
## Worker 中断
|
|
31
|
+
|
|
32
|
+
宿主标记 `interrupted` 后,先要求原 worker 只读回报原任务、进度、产物、改动和中断原因,不继续
|
|
33
|
+
业务写入。有稳定产物则验收并收养;无产物或不能恢复才判取消/未通过。模型与 effort 以 controller
|
|
34
|
+
保存的派发参数和宿主回执为准,不要求 worker 自省。
|
|
35
|
+
|
|
36
|
+
## Controller 接手
|
|
37
|
+
|
|
38
|
+
接手按“重建 → 收养 → 重派”:
|
|
39
|
+
|
|
40
|
+
1. 从仓库外快照、资源归属和宿主留痕重建任务图;冲突时以可观察证据为准。
|
|
41
|
+
2. 有产物的节点重新验收后收养,不采信旧台账中的待验收/通过叙述;无法对账的资源保持
|
|
42
|
+
`KEEP + owner + 原因`。
|
|
43
|
+
3. 无产物或验收失败的节点视为未派发,按现行合同创建新 attempt。
|
|
44
|
+
4. 收养的 worktree、分支、进程与外部资源进入当前回收清单,继续服从原安全边界。
|
|
45
|
+
|
|
46
|
+
递归派生默认禁止;只有 controller 明确给出目标、预算和最大深度时才允许,通常不超过两层。
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# 宿主能力缓存协议
|
|
2
|
+
|
|
3
|
+
能力快照用于复用已经验证过的宿主语义与限制;它是缓存,不是能力或授权的事实源。实时工具契约
|
|
4
|
+
始终优先。读取本文件后,使用 `scripts/host_capability_cache.mjs` 管理状态、刷新和观察事件。
|
|
5
|
+
|
|
6
|
+
宿主快照缓存只对 `orchestration_mode: full` 强制;worker 有效能力预检对所有档位生效。满足
|
|
7
|
+
`SKILL.md` 轻量档全部条件时,不为 cache `status` 构造完整宿主 descriptor,但仍须证明节点实际要求的
|
|
8
|
+
运行时能力。轻量档升级为完整档时,再按下文发现、检查和刷新宿主快照。
|
|
9
|
+
|
|
10
|
+
## 目录
|
|
11
|
+
|
|
12
|
+
- [存储与分层](#存储与分层)
|
|
13
|
+
- [实时描述](#实时描述)
|
|
14
|
+
- [Worker 有效能力](#worker-有效能力)
|
|
15
|
+
- [检查与刷新](#检查与刷新)
|
|
16
|
+
- [观察与沉淀](#观察与沉淀)
|
|
17
|
+
- [安全边界](#安全边界)
|
|
18
|
+
|
|
19
|
+
## 存储与分层
|
|
20
|
+
|
|
21
|
+
路径根与模型路由配置相同:用户级根跨项目复用,项目级根只承载该仓库或沙箱特有约束。
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
orchestrate-subagents/
|
|
25
|
+
├── hosts/<host>.json # 人工偏好
|
|
26
|
+
├── capabilities/<host>.json # 自动能力快照
|
|
27
|
+
└── observations/<host>/<event>.json # 只追加观察事件
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
默认使用 `--scope global`。只有项目工具、沙箱授权或仓库运行环境改变宿主行为时使用
|
|
31
|
+
`--scope project`。`--config-dir` 只用于测试或用户显式指定的配置根。
|
|
32
|
+
|
|
33
|
+
## 实时描述
|
|
34
|
+
|
|
35
|
+
`host` 是缓存命名空间,不是展示名。使用当前编排工具提供方 / 接口族的稳定、小写标识;不能只因
|
|
36
|
+
desktop、CLI、IDE、UI、会话、版本或模型不同就增添后缀。只有工具命名空间或契约族长期独立时,
|
|
37
|
+
才为运行表面使用稳定后缀。创建新 key 前,先把所选配置根已有 `capabilities/*.json` 当不可信数据
|
|
38
|
+
检查:只读取通过本协议校验的 `host`、工具接口指纹和版本;若已有快照属于同一提供方与接口族、
|
|
39
|
+
且实时工具接口指纹一致,复用其 `host`。不能仅凭指纹相同把两个不同提供方合并;来源仍有歧义时
|
|
40
|
+
使用当前提供方 / 接口族的稳定标识、记录歧义,不覆盖任一旧快照。
|
|
41
|
+
|
|
42
|
+
首次派发前,只从当前工具 schema 生成临时 observed descriptor;不能读取旧快照补齐字段。临时
|
|
43
|
+
文件放宿主 scratchpad 或平台临时目录,不提交到仓库。
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"schema_version": 1,
|
|
48
|
+
"host": "host-a",
|
|
49
|
+
"host_version": "unknown",
|
|
50
|
+
"tools": [
|
|
51
|
+
{
|
|
52
|
+
"name": "worker",
|
|
53
|
+
"parameters": ["message:required:string", "model:optional:enum[model-a,model-b]", "effort:optional:enum[low,medium,high]"],
|
|
54
|
+
"returns": ["agent_id:required:string"]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"capabilities": {
|
|
58
|
+
"dispatch.tools": ["worker"],
|
|
59
|
+
"model.explicit": true,
|
|
60
|
+
"model.discovery": "available"
|
|
61
|
+
},
|
|
62
|
+
"limits": {
|
|
63
|
+
"concurrency.max": 4
|
|
64
|
+
},
|
|
65
|
+
"unknown": ["hard-token-budget"]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`tools[].parameters` / `returns` 的字符串必须稳定编码字段名、必填性、类型和枚举范围,而不只抄字段
|
|
70
|
+
名;能力指纹只对这份规范化实时工具接口计算,所以模型列表、effort 档位或返回契约变化会使快照
|
|
71
|
+
过期,而 Agent 对语义能力的不同归纳不会制造假过期。`capabilities`、`limits` 和 `unknown` 是待实时
|
|
72
|
+
复核的建议性解释,不参与指纹;它们只接受扁平键与标量 / 字符串数组。脚本严格拒绝未知顶层
|
|
73
|
+
字段、重复工具、路径穿越 host 和超大 JSON。宿主未暴露版本时写 `unknown`,不得猜版本号。
|
|
74
|
+
|
|
75
|
+
能力键至少覆盖实际可见的 `dispatch.tools`、model / effort / budget 可调性、生命周期 wait / message /
|
|
76
|
+
interrupt、隔离方式、证据来源和授权门;并发上限等数值写入 `limits`。缺失或无法证明的项目写入
|
|
77
|
+
`unknown`,不能为了让快照完整而推断。`model.discovery` 只接受 `available / unavailable`;自由字符串
|
|
78
|
+
参数但没有候选枚举或可审计列举接口时写 `unavailable`,不以缺失的 `hosts/<host>.json` 代替该事实。
|
|
79
|
+
|
|
80
|
+
## Worker 有效能力
|
|
81
|
+
|
|
82
|
+
工具 schema 不证明 worker 能否执行命令、读哪些路径或完成审批往返。每个节点先生成
|
|
83
|
+
[Worker Capability Requirements v1](../../schemas/worker-capability-requirements-v1.schema.json),再用与当前
|
|
84
|
+
host、worker profile、接口指纹和 session / 配置 binding 相符的
|
|
85
|
+
[Effective Worker Capability v1](../../schemas/effective-worker-capability-v1.schema.json) 检查:
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
agentkit orchestrate preflight check \
|
|
89
|
+
--requirements <requirements.json> [--effective <effective.json>]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
有效记录默认放仓库外的当前 session state root;`session:<opaque>` 最长有效 24 小时,能稳定获得宿主
|
|
93
|
+
agent 配置摘要时可用 `config:sha256:<digest>`,最长 168 小时。配置或 session 无法绑定时不能把探针
|
|
94
|
+
结果跨会话当事实复用。结果只用以下语义,不把错误字符串写成规则:
|
|
95
|
+
|
|
96
|
+
| outcome | 含义与动作 |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `allowed` | 能满足该 required capability |
|
|
99
|
+
| `denied_by_policy` | 已知策略拒绝;缩小节点或交 controller |
|
|
100
|
+
| `unavailable_or_unproven` | 未证明;按成本选择最小探针、缩小范围或 controller 自做 |
|
|
101
|
+
| `approval_channel_fault` | 审批往返故障;停止同类派发并升级给人 |
|
|
102
|
+
| `execution_fault` | 执行环境故障;停止同类派发并诊断 |
|
|
103
|
+
|
|
104
|
+
最小探针只覆盖当前任务缺少的能力,不固定探测所有路径或命令。探针是实际 worker,计入 worker 数、
|
|
105
|
+
预算和台账。记录必须引用探针、schema 或 observation 的稳定摘要;接口指纹、binding 或有效期不匹配
|
|
106
|
+
时 fail closed。升级为 full 只增加 ledger、恢复和缓存,不改变这些能力结果。
|
|
107
|
+
|
|
108
|
+
## 检查与刷新
|
|
109
|
+
|
|
110
|
+
安装 Node.js 22+ 与 `agentkit` 后运行:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
agentkit host cache status --host host-a --repo <git-root> --observed <current-observed.json>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
状态语义:
|
|
117
|
+
|
|
118
|
+
- `fresh`:版本、有效期和能力指纹一致。仍须实时确认本次使用的工具与参数。
|
|
119
|
+
- `absent`:没有快照,执行完整发现后刷新。
|
|
120
|
+
- `stale`:快照过期、损坏,或版本 / 指纹变化,禁止继续依赖旧值。
|
|
121
|
+
|
|
122
|
+
刷新默认有效期 168 小时,可在 1–2160 小时内调整:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
agentkit host cache refresh --host host-a --repo <git-root> --observed <current-observed.json> --ttl-hours 168
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
快照使用规范化工具接口的 SHA-256 指纹和原子替换写入。宿主版本、有效期或工具接口变化会触发
|
|
129
|
+
重建;建议性 `capabilities / limits / unknown` 变化先按当轮实时契约复核,不单独触发重建。即使状态
|
|
130
|
+
是 `fresh`,实时调用返回“不支持”、参数拒绝或授权语义冲突时也必须立即判 `stale`,停止依赖缓存
|
|
131
|
+
并重新生成。
|
|
132
|
+
|
|
133
|
+
快照固定使用 `source: live-tool-schema`。`generated_at` 不得比检查时间超前五分钟以上;
|
|
134
|
+
`expires_at` 必须晚于生成时间,且两者间隔不得超过 2160 小时。来源、时间窗、缓存内 observed
|
|
135
|
+
descriptor 或其指纹任一无效时都返回 `stale`,不得仅因过期时间仍在未来而信任快照。
|
|
136
|
+
|
|
137
|
+
## 观察与沉淀
|
|
138
|
+
|
|
139
|
+
运行中发现与快照不一致的宿主能力事实(如参数名不同、并发超出限制、被静默降级)时,用脚本追加一条
|
|
140
|
+
结构化观察:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
agentkit host cache observe --host host-a --repo <git-root> --event <event.json>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
事件格式:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"schema_version": 1,
|
|
151
|
+
"category": "rate_limit",
|
|
152
|
+
"summary": "并发超过 4 时报 HTTP 429",
|
|
153
|
+
"confidence": "reproduced",
|
|
154
|
+
"evidence": {"observed_limit": 4},
|
|
155
|
+
"portable": true
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`confidence` 只能填 `observed-once`、`reproduced` 或 `schema-confirmed`。观察是待验证线索,
|
|
160
|
+
不直接改写能力快照,下一次 `refresh` 重新发现。落盘记录使用
|
|
161
|
+
`{ schema_version, host, recorded_at, capability_fingerprint, event }`;`event` 保存上述输入字段。只有格式
|
|
162
|
+
为 `sha256:<64 hex>` 的缓存指纹可绑定到观察,损坏或不可读快照一律记录 `null`。
|
|
163
|
+
|
|
164
|
+
`observations/<host>/` 只承载宿主能力事实。合同、路由、验收或 Skill 缺口使用编排 Reflection;轻量档
|
|
165
|
+
通过 `orchestration-reflection.mjs` 记录,不能为了绕过 ledger 要求把通用 reflection 伪装成 host 观察。
|
|
166
|
+
|
|
167
|
+
## 安全边界
|
|
168
|
+
|
|
169
|
+
能力快照和观察记录只应保存可公开的工具 schema 与运行指标;严禁在 `capabilities`、`limits` 或
|
|
170
|
+
`evidence` 中记录 token、凭证、私有 URL、设备标识或敏感 payload。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 无 manage-worktrees 时的隔离下限
|
|
2
|
+
|
|
3
|
+
仅在已经裁决需要 worktree、但 `manage-worktrees` 不可用时读取。专项 Skill 可用时服从其 runtime,
|
|
4
|
+
不要同时执行本 fallback。
|
|
5
|
+
|
|
6
|
+
1. **建树**:controller 按项目规则刷新 base,在仓库外的 durable 临时位置创建独立分支与 worktree。
|
|
7
|
+
已有目录或分支先判定归属并复用;禁止 `rm -rf` 重建,宿主临时树语义不明时不用。
|
|
8
|
+
2. **worker 边界**:合同固定 repository、workdir、branch 与 writable paths;worker 不换目录,不执行
|
|
9
|
+
merge、stash、push 或创建 MR,环境异常立即报告 `blocked`。
|
|
10
|
+
3. **共享资源**:worktree 只隔离 working directory 和 index,不隔离 refs、端口、进程、数据库或
|
|
11
|
+
外部服务;实际使用的共享资源必须分配 owner 并登记。
|
|
12
|
+
4. **验收集成**:controller 在 worker 树内重跑门禁,再在已确认目标分支的集成树中串行合回并重验;
|
|
13
|
+
重验 diff 使用 base 到 HEAD 的范围,不能依赖 merge 后为空的 staged diff。merge clean 不代表语义兼容。
|
|
14
|
+
5. **保守回收**:任务、路径、分支和 owner 可对账,树与 untracked 均 clean,成果已验收合入,仓库无
|
|
15
|
+
stash,四项全部满足才运行不带 `--force` 的 `git worktree remove`;否则 `KEEP + 原因`。
|
|
16
|
+
|
|
17
|
+
共享树写入时 controller 是唯一 integrator。worker 只能按归属 pathspec stage/commit,禁止切分支、
|
|
18
|
+
`git add -A`、`git commit -am`、裸 stash、`reset --hard`、`checkout -- .` 和并发 merge。
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# 本地模型路由与动态调整
|
|
2
|
+
|
|
3
|
+
模型路由只保存用户在当前宿主上的执行偏好。Skill 不内置具体模型名、供应商排序、价格、上下文长度,
|
|
4
|
+
也没有任何预设档位或按角色 / 任务的路由表;tier 只来自用户配置。
|
|
5
|
+
最强适配 Controller 根据节点难度和验收证据选择本地 tier;脚本只负责校验选择是否在用户配置、
|
|
6
|
+
宿主实时能力和动态调整上限内。
|
|
7
|
+
|
|
8
|
+
## 配置位置
|
|
9
|
+
|
|
10
|
+
每个宿主只有一个用户级文件:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
<user-config-root>/
|
|
14
|
+
└── hosts/
|
|
15
|
+
└── <host>.json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
用户配置根:
|
|
19
|
+
|
|
20
|
+
| 平台 | 默认位置 |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Windows | `%APPDATA%\agent-skills\orchestrate-subagents`;缺失时回退 `%USERPROFILE%\AppData\Roaming\...` |
|
|
23
|
+
| macOS | `~/Library/Application Support/agent-skills/orchestrate-subagents` |
|
|
24
|
+
| Linux | `$XDG_CONFIG_HOME/agent-skills/orchestrate-subagents`;未设置时 `~/.config/agent-skills/...` |
|
|
25
|
+
|
|
26
|
+
`ORCHESTRATE_SUBAGENTS_CONFIG` 可覆盖配置根。仓库内配置不参与模型与成本路由,避免项目文件静默
|
|
27
|
+
改变用户的模型消费偏好。不同宿主独立配置,不从另一宿主复制或猜测模型 ID。
|
|
28
|
+
|
|
29
|
+
## 配置结构
|
|
30
|
+
|
|
31
|
+
下面是贴近“强 Controller + 主力 + 杂活”偏好的**非规范性占位示例**。现场必须用当前宿主实际
|
|
32
|
+
暴露的精确 ID 替换 `provider-*`;示例名称不是内置型号:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"schema_version": 2,
|
|
37
|
+
"host": "host-a",
|
|
38
|
+
"effort_order": ["low", "medium", "high", "xhigh"],
|
|
39
|
+
"tier_order": ["utility", "primary", "frontier"],
|
|
40
|
+
"tiers": {
|
|
41
|
+
"utility": {
|
|
42
|
+
"models": ["provider-utility-current"],
|
|
43
|
+
"effort": {"default": "xhigh", "min": "medium", "max": "xhigh"},
|
|
44
|
+
"channel": "worker",
|
|
45
|
+
"dispatch": "explicit"
|
|
46
|
+
},
|
|
47
|
+
"primary": {
|
|
48
|
+
"models": ["provider-primary-current"],
|
|
49
|
+
"effort": {"default": "xhigh", "min": "medium", "max": "xhigh"},
|
|
50
|
+
"channel": "worker",
|
|
51
|
+
"dispatch": "explicit"
|
|
52
|
+
},
|
|
53
|
+
"frontier": {
|
|
54
|
+
"models": ["provider-frontier-current"],
|
|
55
|
+
"effort": {"default": "high", "min": "medium", "max": "xhigh"},
|
|
56
|
+
"channel": "worker",
|
|
57
|
+
"dispatch": "explicit"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"dynamic_adjustment": {
|
|
61
|
+
"enabled": true,
|
|
62
|
+
"max_attempts": 3,
|
|
63
|
+
"allowed_actions": [
|
|
64
|
+
"retry_same",
|
|
65
|
+
"raise_effort",
|
|
66
|
+
"switch_model",
|
|
67
|
+
"promote_tier",
|
|
68
|
+
"fresh_context",
|
|
69
|
+
"change_strategy"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- tier 名称和数量由用户定义;`tier_order` 从低到高排列,脚本不猜模型强弱。
|
|
76
|
+
- `models` 是有序候选;解析器选择当前宿主实时可用的第一个候选。
|
|
77
|
+
- `effort.default` 是普通派发默认值,Controller 可在 `min..max` 内按节点和失败证据调整。
|
|
78
|
+
- `channel / dispatch` 必须能由当前宿主工具契约验证。
|
|
79
|
+
- `max_attempts` 包含首次派发;达到上限后停止,不通过改配置现场绕过。
|
|
80
|
+
|
|
81
|
+
上述示例表达一种合理个人偏好:复杂、高模糊、高爆炸半径任务用 `frontier`,日常实现和评审用
|
|
82
|
+
`primary`,边界清楚的提取、扫描、格式化等工作用 `utility`。三个 tier 都可以使用较高 effort;
|
|
83
|
+
便宜来自模型选择,不强制来自低 effort。最终选哪个 tier、是否降低或提高 effort,由最强适配
|
|
84
|
+
Controller 根据任务证据判断。
|
|
85
|
+
|
|
86
|
+
## 首次配置与修改确认
|
|
87
|
+
|
|
88
|
+
配置文件不存在时,Controller 只根据宿主实时 schema 形成候选表,展示 tier、精确模型、effort
|
|
89
|
+
范围、默认值、成本/质量影响和目标文件。不得凭记忆写型号,也不得先保存再让用户追认。
|
|
90
|
+
|
|
91
|
+
以下动作需要用户确认:
|
|
92
|
+
|
|
93
|
+
- 首次写入本地配置;
|
|
94
|
+
- 增加新模型、提高 effort 上限或增加最大尝试数;
|
|
95
|
+
- 替换 tier 顺序或默认模型,且可能明显影响质量或成本;
|
|
96
|
+
- 宿主候选变化导致原配置失效。
|
|
97
|
+
|
|
98
|
+
已有合法配置就是用户授权的动态调整 envelope。在其模型候选、effort 范围、动作集合和尝试上限内,
|
|
99
|
+
Controller 可以根据当轮证据自主调整,不逐次询问;超出 envelope 时停止并展示待确认变更。
|
|
100
|
+
|
|
101
|
+
## Controller 选择 tier
|
|
102
|
+
|
|
103
|
+
Controller 不按 worker 的角色名机械路由,按节点实际决策杠杆选择:
|
|
104
|
+
|
|
105
|
+
| 节点特征 | 常见选择 |
|
|
106
|
+
|---|---|
|
|
107
|
+
| 输入完备、输出机械、错误容易由测试发现 | 较低 tier |
|
|
108
|
+
| 日常实现、局部评审、常规跨文件修改 | 中间或默认 tier |
|
|
109
|
+
| 高模糊、跨系统、隐蔽错误、高爆炸半径、关键对抗核验 | 较高 tier |
|
|
110
|
+
|
|
111
|
+
这只是启发式,不把 tier 名称写死成 `utility / primary / frontier`。Controller 必须记录
|
|
112
|
+
`selection_reason`,说明为何当前配置是最低可靠选择。
|
|
113
|
+
|
|
114
|
+
## 验收失败后的动态调整
|
|
115
|
+
|
|
116
|
+
先把失败归一为:
|
|
117
|
+
|
|
118
|
+
| `failure_kind` | 处置 |
|
|
119
|
+
|---|---|
|
|
120
|
+
| `implementation_defect` | 可定向重试、换策略或按证据提升配置 |
|
|
121
|
+
| `reasoning_gap` | 可提高 effort、切模型或提升 tier |
|
|
122
|
+
| `context_gap` | 优先新上下文;必要时切模型或提升 tier |
|
|
123
|
+
| `strategy_gap` | 改策略、切模型或提升 tier |
|
|
124
|
+
| `environment_fault` | 诊断工具、权限或依赖;不得用模型重路由掩盖 |
|
|
125
|
+
| `contract_gap` | 停止并 re-contract |
|
|
126
|
+
| `safety` | 停止或进入人工门 |
|
|
127
|
+
| `undecidable` | 停止并升级 Controller / 用户 |
|
|
128
|
+
|
|
129
|
+
允许的重路由动作:
|
|
130
|
+
|
|
131
|
+
- `retry_same`:配置不变,只携带精确 finding 定向重试;
|
|
132
|
+
- `raise_effort`:同 tier、同模型,effort 沿本地顺序提高;
|
|
133
|
+
- `switch_model`:切换到本地 envelope 内另一模型;
|
|
134
|
+
- `promote_tier`:沿 `tier_order` 向更高 tier 移动;
|
|
135
|
+
- `fresh_context`:模型参数不变,换干净 Worker 上下文;
|
|
136
|
+
- `change_strategy`:保留失败事实但替换实现策略。
|
|
137
|
+
|
|
138
|
+
不要固定成“第 N 次必升模型”。Controller 先判断失败是实现缺陷、推理、上下文还是策略问题;
|
|
139
|
+
环境、合同、安全和不可判定失败不能通过重路由继续试错。每次重派都必须绑定前序 attempt、失败类型、
|
|
140
|
+
稳定失败证据摘要和选择理由。
|
|
141
|
+
|
|
142
|
+
## 解析器
|
|
143
|
+
|
|
144
|
+
首次派发:
|
|
145
|
+
|
|
146
|
+
```text
|
|
147
|
+
agentkit host model-policy \
|
|
148
|
+
--host host-a \
|
|
149
|
+
--tier primary \
|
|
150
|
+
--selection-reason "常规跨文件实现使用本地主力层" \
|
|
151
|
+
--available-model <live-model-id> \
|
|
152
|
+
--available-effort <live-effort> \
|
|
153
|
+
--available-channel <live-channel>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
失败后由 Controller 选择调整方式,并把上一份解析结果作为 lineage:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
agentkit host model-policy \
|
|
160
|
+
--host host-a \
|
|
161
|
+
--tier frontier \
|
|
162
|
+
--attempt 2 \
|
|
163
|
+
--previous-dispatch <attempt-1.json> \
|
|
164
|
+
--action promote_tier \
|
|
165
|
+
--failure-kind reasoning_gap \
|
|
166
|
+
--failure-ref sha256:<digest> \
|
|
167
|
+
--selection-reason "验收显示跨模块推理遗漏,提升到更高本地 tier" \
|
|
168
|
+
--available-model <live-model-id> \
|
|
169
|
+
--available-effort <live-effort> \
|
|
170
|
+
--available-channel <live-channel>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
解析器验证配置 schema、实时候选、effort 上下限、tier 顺序、动作语义、前序 attempt、失败摘要和
|
|
174
|
+
最大尝试数。它不判断业务失败原因,也不直接派发 Agent;Controller 对分类与选择负责。
|
|
175
|
+
|
|
176
|
+
解析结果是独立的 [`model-policy-resolution` schema v1](../../schemas/model-policy-resolution-v1.schema.json),
|
|
177
|
+
不是 ledger 的 `dispatch-record` schema v2。
|
|
178
|
+
结果中的 `dispatch_record_patch` 已直接使用 dispatch 字段名。Controller 必须补齐
|
|
179
|
+
`schema_version: 2 / worker_id / orchestration_mode / capability_source / capability_fingerprint /
|
|
180
|
+
token_budget`,再与该 patch 合并后交给 `dispatch-record`;不得把整个解析结果或不完整 patch 直接
|
|
181
|
+
写入 ledger。解析结果顶层的 `host / channel / tier_rank / selection_source` 是派发控制信息,不属于
|
|
182
|
+
ledger dispatch。下一次重派的 `--previous-dispatch` 接收上一份完整解析结果,以校验 attempt lineage。
|
|
183
|
+
|
|
184
|
+
宿主无法列举模型时,持久本地配置不能验证并阻塞。只有用户当轮同时明确给出的精确 `--model` 与
|
|
185
|
+
`--effort` 才可配合 `--user-explicit` 继续,并标记 `user-explicit-unverifiable`;单独传 flag 或省略
|
|
186
|
+
任一显式值都拒绝,不得把旧配置静默标成用户授权。
|