universal-dev-standards 5.1.0-beta.7 → 5.1.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/README.md +6 -0
- package/bin/uds.js +2 -0
- package/bundled/ai/standards/translation-lifecycle-standards.ai.yaml +145 -0
- package/bundled/core/translation-lifecycle-standards.md +162 -0
- package/bundled/locales/zh-CN/CHANGELOG.md +32 -3
- package/bundled/locales/zh-CN/README.md +1 -1
- package/bundled/locales/zh-CN/core/anti-hallucination.md +22 -3
- package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +192 -0
- package/bundled/locales/zh-CN/core/capability-declaration.md +123 -0
- package/bundled/locales/zh-CN/core/circuit-breaker.md +106 -0
- package/bundled/locales/zh-CN/core/dual-phase-output.md +103 -0
- package/bundled/locales/zh-CN/core/failure-source-taxonomy.md +99 -0
- package/bundled/locales/zh-CN/core/frontend-design-standards.md +289 -0
- package/bundled/locales/zh-CN/core/health-check-standards.md +144 -0
- package/bundled/locales/zh-CN/core/immutability-first.md +96 -0
- package/bundled/locales/zh-CN/core/packaging-standards.md +224 -0
- package/bundled/locales/zh-CN/core/recovery-recipe-registry.md +146 -0
- package/bundled/locales/zh-CN/core/retry-standards.md +131 -0
- package/bundled/locales/zh-CN/core/security-decision.md +104 -0
- package/bundled/locales/zh-CN/core/skill-standard-alignment-check.md +112 -0
- package/bundled/locales/zh-CN/core/standard-admission-criteria.md +104 -0
- package/bundled/locales/zh-CN/core/standard-lifecycle-management.md +116 -0
- package/bundled/locales/zh-CN/core/timeout-standards.md +117 -0
- package/bundled/locales/zh-CN/core/token-budget.md +108 -0
- package/bundled/locales/zh-CN/core/translation-lifecycle-standards.md +159 -0
- package/bundled/locales/zh-TW/CHANGELOG.md +32 -3
- package/bundled/locales/zh-TW/README.md +1 -1
- package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +8 -0
- package/bundled/locales/zh-TW/core/capability-declaration.md +111 -0
- package/bundled/locales/zh-TW/core/circuit-breaker.md +111 -0
- package/bundled/locales/zh-TW/core/dual-phase-output.md +132 -0
- package/bundled/locales/zh-TW/core/failure-source-taxonomy.md +146 -0
- package/bundled/locales/zh-TW/core/frontend-design-standards.md +460 -0
- package/bundled/locales/zh-TW/core/health-check-standards.md +144 -0
- package/bundled/locales/zh-TW/core/immutability-first.md +159 -0
- package/bundled/locales/zh-TW/core/recovery-recipe-registry.md +146 -0
- package/bundled/locales/zh-TW/core/retry-standards.md +140 -0
- package/bundled/locales/zh-TW/core/security-decision.md +120 -0
- package/bundled/locales/zh-TW/core/skill-standard-alignment-check.md +112 -0
- package/bundled/locales/zh-TW/core/standard-admission-criteria.md +104 -0
- package/bundled/locales/zh-TW/core/standard-lifecycle-management.md +116 -0
- package/bundled/locales/zh-TW/core/timeout-standards.md +117 -0
- package/bundled/locales/zh-TW/core/token-budget.md +143 -0
- package/bundled/locales/zh-TW/core/translation-lifecycle-standards.md +159 -0
- package/package.json +2 -1
- package/src/commands/check.js +6 -0
- package/src/commands/init.js +6 -0
- package/src/commands/update.js +6 -0
- package/src/utils/detect-self-adoption.js +173 -0
- package/standards-registry.json +15 -4
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/capability-declaration.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-04-20
|
|
6
|
+
status: current
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fail-Closed 能力声明标准
|
|
10
|
+
|
|
11
|
+
> **语言**: [English](../../../core/capability-declaration.md) | 简体中文
|
|
12
|
+
|
|
13
|
+
**版本**: 1.0.0
|
|
14
|
+
**最后更新**: 2026-04-17
|
|
15
|
+
**状态**: Trial(到期 2026-10-17)
|
|
16
|
+
**适用范围**: universal
|
|
17
|
+
**来源**: XSPEC-068(DEC-043 Wave 1 可靠性套件)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 目的
|
|
22
|
+
|
|
23
|
+
Fail-Closed 能力声明:工具 / Adapter 默认不安全,必须明确声明才视为安全。
|
|
24
|
+
|
|
25
|
+
各工具和 Adapter 的并发安全性、只读性等能力未明确声明,导致 Agent 编排时无法判断是否可并发调用。本标准要求所有工具和 Adapter 必须在接口中明确声明其能力属性,未声明的属性默认为 false(Fail-Closed)。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心规范
|
|
30
|
+
|
|
31
|
+
- 所有工具(Tool)和 Adapter 必须声明能力接口(`CapabilityDeclaration`)
|
|
32
|
+
- `isConcurrencySafe` 默认 `false`(未声明 = 不可并发)
|
|
33
|
+
- `isReadOnly` 默认 `false`(未声明 = 可能修改状态)
|
|
34
|
+
- `supportsPartialFailure` 默认 `false`
|
|
35
|
+
- Agent 编排器在并发调用前必须检查 `isConcurrencySafe`
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## CapabilityDeclaration 接口
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
interface CapabilityDeclaration {
|
|
43
|
+
toolId: string;
|
|
44
|
+
|
|
45
|
+
// 并发安全性:未声明默认 false
|
|
46
|
+
isConcurrencySafe: boolean;
|
|
47
|
+
|
|
48
|
+
// 只读性:未声明默认 false(可能有副作用)
|
|
49
|
+
isReadOnly: boolean;
|
|
50
|
+
|
|
51
|
+
// 是否支持部分失败(单个操作失败不影响其他)
|
|
52
|
+
supportsPartialFailure: boolean;
|
|
53
|
+
|
|
54
|
+
// 最大并发数(isConcurrencySafe=true 时有效)
|
|
55
|
+
maxConcurrency?: number;
|
|
56
|
+
|
|
57
|
+
// 能力声明版本
|
|
58
|
+
declarationVersion: string;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Fail-Closed 规则
|
|
65
|
+
|
|
66
|
+
| 属性 | 默认值 | 含义 |
|
|
67
|
+
|------|--------|------|
|
|
68
|
+
| `isConcurrencySafe` | `false` | 未声明则禁止并发调用 |
|
|
69
|
+
| `isReadOnly` | `false` | 未声明则假设有副作用,需额外谨慎 |
|
|
70
|
+
| `supportsPartialFailure` | `false` | 未声明则任意失败视为全部失败 |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 编排器检查流程
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
调用工具前:
|
|
78
|
+
1. 读取工具的 CapabilityDeclaration
|
|
79
|
+
2. 若需要并发调用且 isConcurrencySafe=false → 拒绝并发,改为串行
|
|
80
|
+
3. 若工具未提供 CapabilityDeclaration → 视为 isConcurrencySafe=false
|
|
81
|
+
4. 记录 capability_check_result 遥测事件
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 遥测事件
|
|
87
|
+
|
|
88
|
+
**`capability_check_result`**(每次能力检查时上报)
|
|
89
|
+
|
|
90
|
+
| 字段 | 类型 |
|
|
91
|
+
|------|------|
|
|
92
|
+
| `toolId` | `string` |
|
|
93
|
+
| `checkType` | `concurrency\|readonly\|partial_failure` |
|
|
94
|
+
| `declared` | `boolean` |
|
|
95
|
+
| `decision` | `allowed\|denied` |
|
|
96
|
+
| `timestamp` | `string` |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 情境示例
|
|
101
|
+
|
|
102
|
+
**情境 1:并发安全检查**
|
|
103
|
+
- 条件:Agent 编排器需要并发调用 `file-writer` 工具
|
|
104
|
+
- `file-writer` 的 `isConcurrencySafe=false`
|
|
105
|
+
- 结果:编排器改为串行调用,记录 `capability_check_result`(decision=denied)
|
|
106
|
+
|
|
107
|
+
**情境 2:未声明能力(Fail-Closed)**
|
|
108
|
+
- 条件:旧版工具未提供 `CapabilityDeclaration`
|
|
109
|
+
- 结果:视为 `isConcurrencySafe=false, isReadOnly=false`,采用最保守策略
|
|
110
|
+
|
|
111
|
+
**情境 3:只读工具并发**
|
|
112
|
+
- 条件:`search-tool` 声明 `isReadOnly=true, isConcurrencySafe=true, maxConcurrency=5`
|
|
113
|
+
- 结果:允许最多 5 个并发调用
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 错误码
|
|
118
|
+
|
|
119
|
+
| 代码 | 说明 |
|
|
120
|
+
|------|------|
|
|
121
|
+
| `CAP-001` | `MISSING_CAPABILITY_DECLARATION` — 工具未提供能力声明,采用 Fail-Closed |
|
|
122
|
+
| `CAP-002` | `CONCURRENCY_DENIED` — isConcurrencySafe=false 但请求并发调用 |
|
|
123
|
+
| `CAP-003` | `MAX_CONCURRENCY_EXCEEDED` — 并发数超过 maxConcurrency 限制 |
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/circuit-breaker.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-04-20
|
|
6
|
+
status: current
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 断路器标准
|
|
10
|
+
|
|
11
|
+
> **语言**: [English](../../../core/circuit-breaker.md) | 简体中文
|
|
12
|
+
|
|
13
|
+
**版本**: 1.0.0
|
|
14
|
+
**最后更新**: 2026-04-17
|
|
15
|
+
**状态**: Trial(到期 2026-10-17)
|
|
16
|
+
**适用范围**: universal
|
|
17
|
+
**来源**: XSPEC-068(DEC-043 Wave 1 可靠性套件)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 目的
|
|
22
|
+
|
|
23
|
+
通用断路器标准:三态状态机(CLOSED/HALF_OPEN/OPEN)、阈值配置、与遥测整合。
|
|
24
|
+
|
|
25
|
+
各模块各自实现断路器导致行为不一致(阈值不同、HALF_OPEN 探针逻辑各异、遥测事件命名混乱)。本标准提供统一的状态机定义、配置键名,以及必须上报的遥测事件,确保 DevAP/VibeOps/telemetry 三端可互相理解断路器状态。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心规范
|
|
30
|
+
|
|
31
|
+
- 断路器必须实现三态:CLOSED / HALF_OPEN / OPEN
|
|
32
|
+
- `failureThreshold`、`successThreshold`、`cooldownMs` 必须可配置,有默认值
|
|
33
|
+
- 触发转换时必须上报 `circuit_state_change` 遥测事件
|
|
34
|
+
- HALF_OPEN 状态下只允许单次探针请求(不允许并发探针)
|
|
35
|
+
- 所有断路器实例必须可通过 `circuitId` 唯一标识
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 状态机
|
|
40
|
+
|
|
41
|
+
| 状态 | 说明 |
|
|
42
|
+
|------|------|
|
|
43
|
+
| **CLOSED** | 正常状态,放行所有请求;连续失败计数 |
|
|
44
|
+
| **HALF_OPEN** | 冷却后的探针状态;放行单次探针请求 |
|
|
45
|
+
| **OPEN** | 开路状态,拒绝所有请求;等待冷却期 |
|
|
46
|
+
|
|
47
|
+
### 状态转换规则
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
CLOSED → OPEN : 连续失败 >= failureThreshold
|
|
51
|
+
OPEN → HALF_OPEN : 冷却期(cooldownMs)到期
|
|
52
|
+
HALF_OPEN → CLOSED : 探针成功 >= successThreshold
|
|
53
|
+
HALF_OPEN → OPEN : 探针失败(立即重新开路)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 配置参数
|
|
59
|
+
|
|
60
|
+
| 参数 | 默认值 | 说明 |
|
|
61
|
+
|------|--------|------|
|
|
62
|
+
| `failureThreshold` | `3` | 触发 OPEN 的连续失败次数 |
|
|
63
|
+
| `successThreshold` | `1` | 从 HALF_OPEN 恢复到 CLOSED 所需的成功次数 |
|
|
64
|
+
| `cooldownMs` | `30000` | OPEN 状态冷却时间(毫秒)|
|
|
65
|
+
| `circuitId` | 必填 | 断路器唯一标识符 |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 遥测事件
|
|
70
|
+
|
|
71
|
+
**`circuit_state_change`**(每次状态转换时上报)
|
|
72
|
+
|
|
73
|
+
| 字段 | 类型 |
|
|
74
|
+
|------|------|
|
|
75
|
+
| `circuitId` | `string` |
|
|
76
|
+
| `fromState` | `CLOSED\|HALF_OPEN\|OPEN` |
|
|
77
|
+
| `toState` | `CLOSED\|HALF_OPEN\|OPEN` |
|
|
78
|
+
| `reason` | `string` |
|
|
79
|
+
| `failureCount` | `number` |
|
|
80
|
+
| `timestamp` | `string` |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 情境示例
|
|
85
|
+
|
|
86
|
+
**情境 1:CLOSED → OPEN**
|
|
87
|
+
- 条件:连续 3 次调用下游 API 失败(failureThreshold=3)
|
|
88
|
+
- 结果:断路器转 OPEN,后续请求立即回传 `CircuitOpenError`
|
|
89
|
+
|
|
90
|
+
**情境 2:OPEN → HALF_OPEN → CLOSED**
|
|
91
|
+
- 条件:冷却 30s 后放行探针请求,探针成功
|
|
92
|
+
- 结果:断路器恢复 CLOSED,失败计数重置
|
|
93
|
+
|
|
94
|
+
**情境 3:HALF_OPEN → OPEN(探针失败)**
|
|
95
|
+
- 条件:探针请求失败
|
|
96
|
+
- 结果:立即重新开路,重新进入冷却期
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 错误码
|
|
101
|
+
|
|
102
|
+
| 代码 | 说明 |
|
|
103
|
+
|------|------|
|
|
104
|
+
| `CB-001` | `CIRCUIT_OPEN` — 断路器为 OPEN 状态,请求被拒绝 |
|
|
105
|
+
| `CB-002` | `PROBE_REJECTED` — HALF_OPEN 状态下拒绝并发探针 |
|
|
106
|
+
| `CB-003` | `CONFIG_INVALID` — 断路器配置参数无效 |
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/dual-phase-output.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-04-20
|
|
6
|
+
status: current
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 双阶段输出标准
|
|
10
|
+
|
|
11
|
+
> **语言**: [English](../../../core/dual-phase-output.md) | 简体中文
|
|
12
|
+
|
|
13
|
+
**版本**: 1.0.0
|
|
14
|
+
**最后更新**: 2026-04-17
|
|
15
|
+
**状态**: Trial(到期 2026-10-17)
|
|
16
|
+
**适用范围**: universal
|
|
17
|
+
**来源**: XSPEC-068(DEC-043 Wave 1 可靠性套件)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 目的
|
|
22
|
+
|
|
23
|
+
双阶段 LLM 输出标准:`<analysis>` 丢弃 + `<summary>` 保留,统一 Agent 的输出过滤行为。
|
|
24
|
+
|
|
25
|
+
Agent 的推理过程(chain-of-thought)不应直接暴露给下游消费者:它消耗 token、包含中间假设、对机器不友好。本标准要求所有 Agent 输出分为两个阶段,`<analysis>` 标签内容在传递给下游前丢弃,只保留 `<summary>` 内容。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心规范
|
|
30
|
+
|
|
31
|
+
- 所有 Agent 必须在输出中明确区分 `<analysis>` 与 `<summary>` 两个阶段
|
|
32
|
+
- `<analysis>` 内容为推理过程,不得传递给下游消费者(丢弃)
|
|
33
|
+
- `<summary>` 内容为最终结论,必须保留并传递
|
|
34
|
+
- 若 Agent 输出缺少 `<summary>` 标签,视为格式错误(DUAL-001)
|
|
35
|
+
- 下游模块在消费 Agent 输出前必须执行过滤步骤
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 输出格式
|
|
40
|
+
|
|
41
|
+
```xml
|
|
42
|
+
<analysis>
|
|
43
|
+
[Agent 的推理过程、假设检验、中间步骤]
|
|
44
|
+
[此区段会被丢弃,不传递给下游]
|
|
45
|
+
</analysis>
|
|
46
|
+
|
|
47
|
+
<summary>
|
|
48
|
+
[最终结论、可执行的建议、结构化数据]
|
|
49
|
+
[此区段会被保留并传递给下游消费者]
|
|
50
|
+
</summary>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 过滤规则
|
|
56
|
+
|
|
57
|
+
| 规则 | 说明 |
|
|
58
|
+
|------|------|
|
|
59
|
+
| 规则 1 | 解析输出时,提取 `<summary>...</summary>` 内容 |
|
|
60
|
+
| 规则 2 | 丢弃 `<analysis>...</analysis>` 及其内容 |
|
|
61
|
+
| 规则 3 | 若两个标签都缺失,回传错误 `DUAL-001` |
|
|
62
|
+
| 规则 4 | 若只有 `<analysis>` 无 `<summary>`,回传错误 `DUAL-001` |
|
|
63
|
+
| 规则 5 | 允许 `<summary>` 内嵌套结构化数据(JSON、YAML、代码块)|
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 遥测事件
|
|
68
|
+
|
|
69
|
+
**`dual_phase_filter_applied`**(每次执行过滤时上报)
|
|
70
|
+
|
|
71
|
+
| 字段 | 类型 |
|
|
72
|
+
|------|------|
|
|
73
|
+
| `agentId` | `string` |
|
|
74
|
+
| `analysisTokens` | `number` |
|
|
75
|
+
| `summaryTokens` | `number` |
|
|
76
|
+
| `filterSuccess` | `boolean` |
|
|
77
|
+
| `timestamp` | `string` |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 情境示例
|
|
82
|
+
|
|
83
|
+
**情境 1:正常双阶段输出**
|
|
84
|
+
- Agent 输出包含 `<analysis>` 和 `<summary>` 标签
|
|
85
|
+
- 过滤后只保留 `<summary>` 内容传递给下游
|
|
86
|
+
|
|
87
|
+
**情境 2:缺少 `<summary>` 标签**
|
|
88
|
+
- Agent 输出只有 `<analysis>` 内容
|
|
89
|
+
- 回传 `DUAL-001` 错误,不传递任何内容给下游
|
|
90
|
+
|
|
91
|
+
**情境 3:`<summary>` 内嵌套 JSON**
|
|
92
|
+
- `<summary>` 内包含结构化 JSON 数据
|
|
93
|
+
- 过滤后完整保留 JSON,可被下游直接解析
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 错误码
|
|
98
|
+
|
|
99
|
+
| 代码 | 说明 |
|
|
100
|
+
|------|------|
|
|
101
|
+
| `DUAL-001` | `MISSING_SUMMARY_TAG` — 输出缺少 `<summary>` 标签 |
|
|
102
|
+
| `DUAL-002` | `EMPTY_SUMMARY` — `<summary>` 标签内容为空 |
|
|
103
|
+
| `DUAL-003` | `MALFORMED_OUTPUT` — 输出格式无法解析 |
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/failure-source-taxonomy.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-04-20
|
|
6
|
+
status: current
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 失败来源分类法
|
|
10
|
+
|
|
11
|
+
> **语言**: [English](../../../core/failure-source-taxonomy.md) | 简体中文
|
|
12
|
+
|
|
13
|
+
**版本**: 1.0.0
|
|
14
|
+
**最后更新**: 2026-04-17
|
|
15
|
+
**状态**: Trial(到期 2026-10-17)
|
|
16
|
+
**适用范围**: universal
|
|
17
|
+
**来源**: XSPEC-045(DEC-035 Recovery Recipe Registry)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 目的
|
|
22
|
+
|
|
23
|
+
失败来源分类法:8 类 `failureSource`,补充 `TaskStatus` 的 why 维度。
|
|
24
|
+
|
|
25
|
+
`TaskStatus`(succeeded/failed/partial)只描述「是什么」,不描述「为什么失败」。本分类法定义 8 类失败来源,让 Recovery Recipe Registry(XSPEC-046)可以根据 `failureSource` 精准选择恢复策略,而不是对所有失败套用同一个回退逻辑。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心规范
|
|
30
|
+
|
|
31
|
+
- 所有失败事件必须附带 `failureSource`(8 类之一)
|
|
32
|
+
- `failureSource` 决定是否可重试(见下表)
|
|
33
|
+
- Recovery Recipe 以 `failureSource` 为匹配键
|
|
34
|
+
- 无法分类的失败标记为 `unknown`,触发人工检查点
|
|
35
|
+
- 单次失败事件只能有一个 `failureSource`(不可多选)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 8 类失败来源
|
|
40
|
+
|
|
41
|
+
| failureSource | 可重试 | 说明 |
|
|
42
|
+
|---------------|--------|------|
|
|
43
|
+
| `transient_network` | ✅ | 短暂网络抖动,如 TCP 超时、DNS 解析失败 |
|
|
44
|
+
| `rate_limit` | ✅ | 速率限制,如 429 Too Many Requests |
|
|
45
|
+
| `upstream_unavailable` | ✅ | 上游服务不可达,断路器可处理 |
|
|
46
|
+
| `tool_failure` | ✅ | 工具层失败,如 CLI 工具崩溃 |
|
|
47
|
+
| `prompt_delivery` | ✅ | 提示词传递失败,可切换模型重试 |
|
|
48
|
+
| `authentication` | ❌ | 凭证错误,重试不会变对 |
|
|
49
|
+
| `validation` | ❌ | 输入验证失败,重试结果不变 |
|
|
50
|
+
| `policy_violation` | ❌ | 安全策略拒绝,禁止绕过 |
|
|
51
|
+
| `quota_exhausted` | ❌ | 配额耗尽,等待刷新 |
|
|
52
|
+
| `model_degradation` | ✅ | 模型质量降级,可切换备用模型 |
|
|
53
|
+
| `resource_exhaustion` | ❌ | 资源耗尽(内存/磁盘),需人工介入 |
|
|
54
|
+
| `branch_divergence` | ✅ | 分支漂移,可 rebase 重试 |
|
|
55
|
+
| `compilation` | ✅ | 编译错误,Fix Loop 可处理 |
|
|
56
|
+
| `test_failure` | ✅ | 测试失败,Fix Loop 可处理 |
|
|
57
|
+
| `unknown` | ❌ | 未能分类,触发人工检查点 |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 与 Recovery Recipe 的对应
|
|
62
|
+
|
|
63
|
+
| failureSource | 推荐 Recovery Strategy |
|
|
64
|
+
|---------------|----------------------|
|
|
65
|
+
| `compilation` | `fix_loop` |
|
|
66
|
+
| `test_failure` | `fix_loop` |
|
|
67
|
+
| `model_degradation` | `model_switch` |
|
|
68
|
+
| `branch_divergence` | `rebase_and_retry` |
|
|
69
|
+
| `resource_exhaustion` | `degraded_mode` |
|
|
70
|
+
| `policy_violation` | `human_checkpoint` |
|
|
71
|
+
| `authentication` | `human_checkpoint` |
|
|
72
|
+
| `transient_network` | `circuit_breaker` + retry |
|
|
73
|
+
| `tool_failure` | `circuit_breaker` |
|
|
74
|
+
| `prompt_delivery` | `model_switch` |
|
|
75
|
+
| `unknown` | `human_checkpoint` |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 遥测事件
|
|
80
|
+
|
|
81
|
+
**`failure_classified`**(每次失败分类时上报)
|
|
82
|
+
|
|
83
|
+
| 字段 | 类型 |
|
|
84
|
+
|------|------|
|
|
85
|
+
| `taskId` | `string` |
|
|
86
|
+
| `failureSource` | `FailureSource` |
|
|
87
|
+
| `isRetryable` | `boolean` |
|
|
88
|
+
| `originalError` | `string` |
|
|
89
|
+
| `timestamp` | `string` |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 错误码
|
|
94
|
+
|
|
95
|
+
| 代码 | 说明 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| `FST-001` | `UNCLASSIFIED_FAILURE` — 失败来源无法分类,标记为 unknown |
|
|
98
|
+
| `FST-002` | `INVALID_FAILURE_SOURCE` — failureSource 不在 8 类定义内 |
|
|
99
|
+
| `FST-003` | `MULTIPLE_SOURCES` — 单次失败标记了多个 failureSource(违规)|
|