@istuen/openxenon 0.1.7
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/LICENSE +21 -0
- package/README.md +231 -0
- package/dist/SKILL-5pahrma4.md +199 -0
- package/dist/SKILL-hrggx7hc.md +423 -0
- package/dist/SKILL-jpk4r1n0.md +366 -0
- package/dist/cli.js +76362 -0
- package/package.json +82 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 istuen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# OpenXenon
|
|
2
|
+
|
|
3
|
+
> **OpenXenon — 工程师与 AI 协作工作台**
|
|
4
|
+
> 工程师定义意图,AI 执行对齐,OXN 证明结果。
|
|
5
|
+
>
|
|
6
|
+
> **Proof 的结果反馈驱动 Intent 演化,IAP 形成闭环,让 Token 成为有效投入。**
|
|
7
|
+
|
|
8
|
+
[](https://www.npmjs.com/package/@istuen/openxenon)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://nodejs.org)
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @istuen/openxenon
|
|
16
|
+
# 命令名: oxn
|
|
17
|
+
oxn --version
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
或临时跑:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx -y @istuen/openxenon --version
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> 仓库源码是 dist/cli.js 的**开发基底**,不是 npm install 的目标。普通用户请走 `npm install -g` 路径。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 解决什么问题
|
|
31
|
+
|
|
32
|
+
当前 AI 模型虽然越来越强,但在**注意力机制做推理**的原理下,其依然是**概率性的输出**。在长上下文、长时间推理后,AI 必然会漂移重点并陷入**自我推理满足**。
|
|
33
|
+
|
|
34
|
+
由此带来三个核心问题:
|
|
35
|
+
|
|
36
|
+
1. 如何**验证** AI 的执行结果,而非盲目信任?
|
|
37
|
+
2. 如何让 AI 减少长上下文依赖,保持**高效推理**与对齐?
|
|
38
|
+
3. 如何降低 AI 陷入无效推理引起的 **Token 无用消耗**?
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 5 分钟 Quick Start — Proof-First 体验
|
|
43
|
+
|
|
44
|
+
> **入口即核心**:OpenXenon 的第一次体验是 `oxn proof`,不要求先学 Domain/Blueprint。
|
|
45
|
+
> 这本质是 IAP 范式中 **P 轴(Proof 轴)的独立运作模式**——工程师跳过 Intent/Align 资产化,直接使用 Probe 声明验收标准,由 OXN 产出 `frozen.json`。
|
|
46
|
+
|
|
47
|
+
### 克隆与构建(开发者)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git clone https://github.com/istuen/openxenon.git && cd openxenon
|
|
51
|
+
bun install --frozen-lockfile && bun run build
|
|
52
|
+
# 产物:dist/cli.js(单文件 Node bundle,~2.7MB)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 初始化工作台
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# 源码构建版 (./dist/oxn)
|
|
59
|
+
./dist/oxn init
|
|
60
|
+
|
|
61
|
+
# npm 安装版 (oxn 在 PATH 中)
|
|
62
|
+
oxn init
|
|
63
|
+
|
|
64
|
+
# 支持 -f 强制初始化
|
|
65
|
+
# 支持指定 AI 助手,自动生成对应 Skill 配置:
|
|
66
|
+
oxn init --ai opencode # 生成 OpenCode Skill
|
|
67
|
+
oxn init --ai cursor # 生成 Cursor Skill
|
|
68
|
+
oxn init --ai codex # 生成 Codex Skill
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 第一次证明
|
|
72
|
+
|
|
73
|
+
**方式 A:CLI 直接执行**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
./dist/oxn proof create check-deploy
|
|
77
|
+
./dist/oxn proof probe add fs-exists --target ./dist/index.js
|
|
78
|
+
./dist/oxn proof run check-deploy
|
|
79
|
+
# → Verdict: FAIL / PASS
|
|
80
|
+
# → Proof saved: .openxenon/proofs/check-deploy/frozen.json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**方式 B:AI 助手中用 Skill 执行**
|
|
84
|
+
|
|
85
|
+
在 Cursor / OpenCode / Codex 中输入:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
/oxn-proof 验证 dist/index.js 是否存在并导出 handler
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
AI 通过 Skill 调用 CLI,结果回流到 `frozen.json`。
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 进阶使用 — 升级到完整 IAP 协作
|
|
96
|
+
|
|
97
|
+
当 Probe 重复到一定程度时,自然涌现出对 Intent 轴(Blueprint / Domain)的需求。
|
|
98
|
+
|
|
99
|
+
| 进阶步骤 | 模块 | 解决的问题 |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| 1. 定义业务词典 | **Domain** | 锁定团队统一语言(term)、禁令(ban)与不变式(invariant) |
|
|
102
|
+
| 2. 定义技术图纸 | **Blueprint** | 编排 slot 拓扑、Part 选件、Probe 验收标准 |
|
|
103
|
+
| 3. 驱动 AI 作业 | **Work / Task** | 让 AI 在 Blueprint 边界内对齐执行,产出 Artifact 供 OXN 证明 |
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 1. 定义业务 Domain
|
|
107
|
+
./dist/oxn domain create MemberContext
|
|
108
|
+
# 编辑 .openxenon/domains/member-context.oxn
|
|
109
|
+
./dist/oxn domain validate MemberContext
|
|
110
|
+
|
|
111
|
+
# 2. 定义技术 Blueprint
|
|
112
|
+
./dist/oxn blueprint create onboarding --domain MemberContext
|
|
113
|
+
# 编辑 .openxenon/blueprints/onboarding.oxn
|
|
114
|
+
|
|
115
|
+
# 3. 驱动 AI 作业
|
|
116
|
+
./dist/oxn work create --name onboarding
|
|
117
|
+
./dist/oxn work add-task --work-name onboarding --task-name register \
|
|
118
|
+
--blueprint onboarding --domain MemberContext
|
|
119
|
+
./dist/oxn work context --work onboarding --task register --json
|
|
120
|
+
# AI 写代码 → Probe 验证 → frozen.json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## IAP 范式与 OXN Engine
|
|
126
|
+
|
|
127
|
+
> **IAP(Intent-Align-Proof)** 是 OpenXenon 的架构灵魂。**OXN** 是工作台的运转引擎。
|
|
128
|
+
|
|
129
|
+
### 三轴主导权
|
|
130
|
+
|
|
131
|
+
| 主导轴 | 主导者 | 职责 | 对抗机制 |
|
|
132
|
+
|---|---|---|---|
|
|
133
|
+
| **Intent 轴** | **工程师** | 定义 Domain / Blueprint,锁定业务语言与技术拓扑 | Domain term 锁定边界 |
|
|
134
|
+
| **Align 轴** | **AI** | 编排 Work / Task / Part,在 Blueprint slot 边界内执行 | Blueprint slot 锁定路径 |
|
|
135
|
+
| **Proof 轴** | **OXN** | 产出不可篡改的 Proof(`frozen.json`) | Daemon 逃逸机制阻止假完成 |
|
|
136
|
+
|
|
137
|
+
**IAP 第一法则**:**主导权不交叉,证明不可绕过**。无 `--force` 绕过。
|
|
138
|
+
|
|
139
|
+
### 闭环流转
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Intent轴 Align轴
|
|
143
|
+
Domain(.oxn) Work(.oxn)
|
|
144
|
+
│ │
|
|
145
|
+
▼ ▼
|
|
146
|
+
Blueprint(.oxn) Task → Artifact
|
|
147
|
+
│ Probe标准 │ Artifact事实
|
|
148
|
+
└────────────┬───────────────┘
|
|
149
|
+
│
|
|
150
|
+
▼
|
|
151
|
+
Proof轴
|
|
152
|
+
Proof(Verdict)
|
|
153
|
+
OXN Engine
|
|
154
|
+
│
|
|
155
|
+
│ 反馈(P → I)
|
|
156
|
+
│ Verdict 驱动 Intent 演化
|
|
157
|
+
└───▶ Intent 演化
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
- **I → A → P 正向推导**:工程师定义 Intent,AI 在 Align 中执行,OXN 给出 Proof
|
|
161
|
+
- **P → I 反馈闭环**:Proof 的 Verdict 反馈驱动 Intent 演化(精准化 / 业务化 / 资产化)
|
|
162
|
+
- **A → I 反馈**:Align 偏差反馈修正 Intent 定义(slot 越界、term 漂移)
|
|
163
|
+
|
|
164
|
+
三轴形成 **I → A → P → I** 闭环,下一轮的 Intent 比上一轮更精准。
|
|
165
|
+
|
|
166
|
+
### OXN Engine = DSL + Runtime + CLI
|
|
167
|
+
|
|
168
|
+
| 层 | 作用 |
|
|
169
|
+
|---|---|
|
|
170
|
+
| **DSL** | OXL 领域特定语言(Langium 实现)—— Domain / Blueprint / Work 的语法与解析 |
|
|
171
|
+
| **Runtime** | 执行核心(Kernel / Infra / Daemon)—— 详见下节 |
|
|
172
|
+
| **CLI** | 工程师与 AI 的唯一操作入口(`oxn init / proof / domain / blueprint / work`) |
|
|
173
|
+
|
|
174
|
+
### OXN Runtime 纯洁性约束
|
|
175
|
+
|
|
176
|
+
OXN Runtime 由三个模块协同执行证明权,每个模块只做自己的事:
|
|
177
|
+
|
|
178
|
+
| 模块 | 中文 | 职责 | 约束 |
|
|
179
|
+
|---|---|---|---|
|
|
180
|
+
| **Kernel** | 内核 | 纯逻辑校验,零 IO | 不得执行任何副作用(如 `fs.existsSync`) |
|
|
181
|
+
| **Infra** | 底座 | 副作用 / IO 执行,获取事实 | 只回答事实,不得做出 PASS/FAIL 判定 |
|
|
182
|
+
| **Daemon** | 守护进程 | 生命周期管理 + 逃逸机制 | 不得修改 Kernel 规则;Probe FAIL 时阻止 Work 进入 done |
|
|
183
|
+
|
|
184
|
+
**纯洁性第一法则**:
|
|
185
|
+
|
|
186
|
+
- **Infra(底座)不能**绕过 Daemon(守护进程)自我宣布完成
|
|
187
|
+
- **Daemon(守护进程)不能**修改 Kernel(内核)规则
|
|
188
|
+
- **Kernel(内核)不能**直接执行 Task
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 文档
|
|
193
|
+
|
|
194
|
+
- 📖 **[OpenXenon 完整文档](docs/introduction.md)** — 12 章 + 3 附录的 SSOT
|
|
195
|
+
- 📖 **[OXL DSL 语法指南](docs/intent.md#blueprint技术蓝图)** — Domain / Blueprint / Work 完整语法
|
|
196
|
+
- 📖 **[Probe 类型参考](docs/proof.md#内置-probe-类型)** — 内置 11 个 Probe
|
|
197
|
+
- 🟦 **[AI 协作者入口](docs/llm-prompt.md)** — AI 模型专用协议
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 开发路线
|
|
202
|
+
|
|
203
|
+
| 阶段 | 目标 | 状态 |
|
|
204
|
+
|---|---|---|
|
|
205
|
+
| **P0: Proof 轴独立** | Proof 闭环 | ✅ |
|
|
206
|
+
| **P1: Intent 轴技术化** | Program Domain + Blueprint | ✅ |
|
|
207
|
+
| **P2: Intent 轴业务化** | Business Domain + DDD | 🔜 进行中 |
|
|
208
|
+
| **P3: Intent 轴资产化** | 意图涌现 + Hall(研讨厅) | 📋 规划中 |
|
|
209
|
+
|
|
210
|
+
详见 [docs/roadmap.md](docs/roadmap.md)
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 自举验证与测试
|
|
215
|
+
|
|
216
|
+
OpenXenon 用 OpenXenon 管理自己的开发过程——**自举**(self-bootstrapping)是质量基线。
|
|
217
|
+
|
|
218
|
+
| 级别 | 定义 | 状态 |
|
|
219
|
+
|---|---|---|
|
|
220
|
+
| L1 编译自举 | `bun run build` → `oxn` 可执行 | ✅ |
|
|
221
|
+
| L2 资产自举 | Domain / Blueprint / Work / Task 全链路跑通 | ✅ |
|
|
222
|
+
| L2+ DSL 自举 | Grammar → Schema → Validator → Generator 联动 | ✅ |
|
|
223
|
+
| L3 质量自举 | OpenXenon 自身开发过程通过 OpenXenon 管理 | 🔜 P2 目标 |
|
|
224
|
+
|
|
225
|
+
**测试**:运行 `bun test` 查看当前数据;权威源为 `bunfig.toml` + `lefthook.yml`。
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## License
|
|
230
|
+
|
|
231
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oxn-proof
|
|
3
|
+
description: v0.1.2 Proof-First 入口:5 命令闭环(create / probe add / run / list / show),用 Probe 声明验收标准,OXN 产出不可篡改的 frozen.json
|
|
4
|
+
---
|
|
5
|
+
# /oxn-proof — Proof-First 入口(v0.1.2 catalog 封装)
|
|
6
|
+
|
|
7
|
+
> **让 OXN 验收,不让人验收。** 这是 IAP 三轴中 **Proof 轴的独立运作**——跳过 Domain/Blueprint 资产化,用 Probe 声明验收标准。
|
|
8
|
+
|
|
9
|
+
## 目标
|
|
10
|
+
|
|
11
|
+
让 AI 通过 **语义化白名单** 完成验收:
|
|
12
|
+
1. AI 调 `oxn proof probe list` 知道有哪些 probe 可用
|
|
13
|
+
2. AI 调 `oxn proof probe describe <name>` 知道每个 probe 接受什么输入
|
|
14
|
+
3. AI 调 `oxn proof probe add <proof> <probe> --input-json '{...}'` 追加 probe
|
|
15
|
+
4. AI 让 AI 工作(写代码 / 跑命令)
|
|
16
|
+
5. 调 `oxn proof run` 让 OXN 跑物理观测 → 写 frozen.json
|
|
17
|
+
|
|
18
|
+
**封装边界**:AI 永远只看到**语义层**(probe 名称 + 描述 + 输入契约),**不**知道 OXN 内部用什么 ref / param / verdict 逻辑。CLI 帮你翻译。
|
|
19
|
+
|
|
20
|
+
## 何时用
|
|
21
|
+
|
|
22
|
+
| 场景 | 用 proof 还是 work? |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 「AI 说做完了?让 OXN 验收才算」 | **用 `oxn proof`** ← 本 skill |
|
|
25
|
+
| 单个验收场景(dist 产物 + 跑测试) | **用 `oxn proof`** |
|
|
26
|
+
| 多 stage 流水线 | 用 `oxn work` + Blueprint |
|
|
27
|
+
| 跨域业务 | 用 `oxn work` + Domain |
|
|
28
|
+
|
|
29
|
+
## 5 个命令(白名单)
|
|
30
|
+
|
|
31
|
+
| 子命令 | 用途 | AI 看到什么 |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `oxn proof create <name>` | 立 proof 空间 | 文件路径 |
|
|
34
|
+
| `oxn proof probe list` | **列出所有 probe** | `{name, description, requiredInputs[]}[]` |
|
|
35
|
+
| `oxn proof probe describe <name>` | **详述 probe 输入契约** | `{name, description, inputs[], examples[]}` |
|
|
36
|
+
| `oxn proof probe add <proof> <probe> --input-json '{...}'` | 追加 probe | 翻译后的内部存储(不直接显示) |
|
|
37
|
+
| `oxn proof run <name>` | 调 OXN 跑探测 → 写 frozen.json | verdict + 详情 + 签名 |
|
|
38
|
+
| `oxn proof list` | 列所有 proof | 名称 + verdict |
|
|
39
|
+
| `oxn proof show <name>` | 读 frozen.json | 完整 verdict + 签名 |
|
|
40
|
+
|
|
41
|
+
## 标准 workflow(spec-first)
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Step 1: AI 先用 probe list / describe 知道 OXN 能验收什么
|
|
45
|
+
oxn proof probe list
|
|
46
|
+
oxn proof probe describe fs-exists
|
|
47
|
+
|
|
48
|
+
Step 2: AI 创建 proof.oxn(验收规约)
|
|
49
|
+
oxn proof create check-deploy
|
|
50
|
+
|
|
51
|
+
Step 3: AI 追加 probe(按 describe 给的契约)
|
|
52
|
+
oxn proof probe add check-deploy fs-exists --input-json '{"path":"./dist/index.js"}'
|
|
53
|
+
oxn proof probe add check-deploy shell-exec --input-json '{"command":"bun test","timeout":60000}'
|
|
54
|
+
|
|
55
|
+
Step 4: AI 工作(写代码 / 跑命令)—— 不调 OXN
|
|
56
|
+
→ 注意:AI 看到的是"验收规约",不会知道 OXN 怎么判 PASS/FAIL
|
|
57
|
+
|
|
58
|
+
Step 5: AI 调 proof run 让 OXN 验收
|
|
59
|
+
oxn proof run check-deploy
|
|
60
|
+
→ Kernel 校验 + Infra 物理观测 + 写 frozen.json
|
|
61
|
+
|
|
62
|
+
Step 6: AI 读 verdict
|
|
63
|
+
oxn proof show check-deploy
|
|
64
|
+
→ FAIL → AI 修复 → 再 run → PASS
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 物理边界
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
.openxenon/proofs/
|
|
71
|
+
└── check-deploy/
|
|
72
|
+
├── proof.oxn ← Probe 声明(OXN 翻译后的内部表示)
|
|
73
|
+
└── frozen.json ← 判决书(chmod 0o444 + SHA-256,不可改)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 不可篡改性
|
|
77
|
+
|
|
78
|
+
| 层 | 机制 | 绕过成本 |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| OS 层 | chmod 0o444(覆盖前 owner 自动抬位 0o644 → 写 → try/finally 回锁 0o444) | writer 内部完成,AI / 工程师无感 |
|
|
81
|
+
| 内容层 | `_xenon_meta.content_hash` = SHA-256 | 改内容 hash 对不上 |
|
|
82
|
+
|
|
83
|
+
**AI 约束**(CLI 白名单):
|
|
84
|
+
- ✅ 允许:`oxn proof create / list / show / probe list / probe describe / probe add / run`
|
|
85
|
+
- ❌ 禁止:直接 `vim .openxenon/proofs/*/frozen.json` / `echo ... > frozen.json` / 任何直写
|
|
86
|
+
|
|
87
|
+
## IAP 范式对照
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Proof-First 入口 = IAP 中 Proof 轴的独立运作
|
|
91
|
+
├─ Intent 轴被跳过(不写 Domain / Blueprint)
|
|
92
|
+
├─ Align 轴被简化(不写 Work / Task / Part DAG)
|
|
93
|
+
└─ Proof 轴被激活(probe 声明 → 物理观测 → 纯函数判定 → frozen.json)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**核心价值**:让工程师 5 分钟内就感受到 OXN 的核心价值——**AI 假完成,OXN 不会骗自己**。
|
|
97
|
+
|
|
98
|
+
## 完成标准
|
|
99
|
+
|
|
100
|
+
- `oxn proof probe list` 返回可用 probe(语义名 + 描述 + 必填输入)
|
|
101
|
+
- `oxn proof probe describe <name>` 返回输入契约 + 示例
|
|
102
|
+
- `oxn proof probe add <proof> <name> --input-json '{...}'` 成功追加
|
|
103
|
+
- `oxn proof run` 返回 verdict + readOnly: true
|
|
104
|
+
- `oxn proof show` 返回完整 frozen.json(含签名)
|
|
105
|
+
|
|
106
|
+
把 `frozenPath` 给工程师审核。**禁止**改 frozen.json。
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## AI 错误处理:读 `error.action` 字段
|
|
111
|
+
|
|
112
|
+
`oxn proof *` 命令出错时,CLI 输出 JSON 包含 `error.action` 字段。**AI 读这个字段决策下一步**,不要解析 `message` 字符串。
|
|
113
|
+
|
|
114
|
+
### Verdict: FAIL 怎么读?
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
oxn proof show check-deploy
|
|
118
|
+
```
|
|
119
|
+
读 `frozen.json.verdict` 字段:
|
|
120
|
+
- `verdict === 'PASSED'` → 任务通过,AI 可继续
|
|
121
|
+
- `verdict === 'FAILED'` → 任务失败(**正常业务结果,不是异常**),AI 自己改代码重 run
|
|
122
|
+
|
|
123
|
+
### 业务异常(IAPError)怎么读?
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"ok": false,
|
|
128
|
+
"error": {
|
|
129
|
+
"code": "IAP_PROOF_INFRA_FAIL",
|
|
130
|
+
"axis": "PROOF",
|
|
131
|
+
"action": "YIELD_TO_HUMAN",
|
|
132
|
+
"message": "Probe 无法访问目标资源",
|
|
133
|
+
"context": { "path": "./dist", "systemError": "EACCES" }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**AI 决策表**(按 `action` 字段):
|
|
139
|
+
|
|
140
|
+
| `action` 值 | AI 下一步动作 |
|
|
141
|
+
|---|---|
|
|
142
|
+
| `AUTONOMOUS_RETRY` | AI 自己改代码/参数重试(不改 proof) |
|
|
143
|
+
| `YIELD_TO_HUMAN` | AI 停止当前任务,让人类修(环境/需求问题 AI 改不了) |
|
|
144
|
+
|
|
145
|
+
**两个 `action` 值之外的字段**(AI 不需要关心,但要知道存在):
|
|
146
|
+
- `code` — 错误全名(`IAP_<AXIS>_<CODE>`)
|
|
147
|
+
- `axis` — 哪个 IAP 轴(INTENT/ALIGN/PROOF)
|
|
148
|
+
- `message` — 人类可读描述
|
|
149
|
+
- `context` — 机器可读字段(test/debug 用)
|
|
150
|
+
|
|
151
|
+
### 引擎崩溃(OXNCrash)AI 看不到
|
|
152
|
+
|
|
153
|
+
`OXN_CRASH_*` 错误走 stderr 通道,AI Skill 收不到。**如果你的命令莫名其妙 exit 2 没输出,那是引擎崩了,AI 应停止工作,通知工程师**。
|
|
154
|
+
|
|
155
|
+
### 实战示例
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# 1. AI 跑 proof
|
|
159
|
+
$ oxn proof run check-deploy
|
|
160
|
+
{
|
|
161
|
+
"ok": false,
|
|
162
|
+
"error": {
|
|
163
|
+
"code": "IAP_PROOF_INFRA_FAIL",
|
|
164
|
+
"axis": "PROOF",
|
|
165
|
+
"action": "YIELD_TO_HUMAN",
|
|
166
|
+
"message": "无法访问 ./dist/index.js",
|
|
167
|
+
"context": { "path": "./dist/index.js", "systemError": "EACCES" }
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
# 2. AI 读 action = YIELD_TO_HUMAN → 知道不能自己改
|
|
172
|
+
# 3. AI 通知用户:"dist/index.js 没有读权限,请运行 chmod +r ./dist/index.js"
|
|
173
|
+
# 4. 用户修后 AI 重新跑
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 1. AI 跑 proof
|
|
178
|
+
$ oxn proof run check-deploy
|
|
179
|
+
{
|
|
180
|
+
"ok": false,
|
|
181
|
+
"error": {
|
|
182
|
+
"code": "IAP_ALIGN_CHECKLIST_MISSING",
|
|
183
|
+
"axis": "ALIGN",
|
|
184
|
+
"action": "YIELD_TO_HUMAN",
|
|
185
|
+
"message": "task 'scaffold' 的 part 'scaffold' 缺少必填的 intent_checklist 字段",
|
|
186
|
+
"context": { "taskName": "scaffold", "partName": "scaffold", "missingField": "intent_checklist" }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
# 2. AI 读 action = YIELD_TO_HUMAN → 知道不能自己改
|
|
191
|
+
# 3. AI 通知用户:"part.scaffold 缺 intent_checklist,请在 task.oxn 补上开工前的 4 问对齐"
|
|
192
|
+
# 4. 用户补后 AI 重新跑
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**不要**:
|
|
196
|
+
- ❌ 用正则解析 `message` 字符串
|
|
197
|
+
- ❌ 看到 `code: 'IAP_*'` 就 assume 是 YIELD_TO_HUMAN
|
|
198
|
+
- ✅ 永远先读 `action` 字段
|
|
199
|
+
|