@rong/agentscript 0.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/INSTALL.md +92 -0
  3. package/LICENSE +21 -0
  4. package/README.md +246 -0
  5. package/dist/ast/constants.js +1 -0
  6. package/dist/ast/format.js +41 -0
  7. package/dist/ast/types.js +1 -0
  8. package/dist/bin/agentscript.js +234 -0
  9. package/dist/bin/input.js +19 -0
  10. package/dist/bin/repl.js +290 -0
  11. package/dist/index.js +26 -0
  12. package/dist/parser/errors.js +8 -0
  13. package/dist/parser/parser.js +661 -0
  14. package/dist/parser/tokenizer.js +246 -0
  15. package/dist/providers/llm/anthropic.js +36 -0
  16. package/dist/providers/llm/index.js +3 -0
  17. package/dist/providers/llm/ollama.js +19 -0
  18. package/dist/providers/llm/openai.js +31 -0
  19. package/dist/providers/llm/protocol.js +45 -0
  20. package/dist/providers/llm/shared.js +147 -0
  21. package/dist/providers/llm/types.js +1 -0
  22. package/dist/providers/llm/uri.js +24 -0
  23. package/dist/providers/memory/file.js +44 -0
  24. package/dist/providers/memory/host.js +66 -0
  25. package/dist/providers/memory/index.js +1 -0
  26. package/dist/providers/memory/shared.js +56 -0
  27. package/dist/providers/memory/sqlite.js +98 -0
  28. package/dist/providers/mock/index.js +32 -0
  29. package/dist/providers/tools/env.js +11 -0
  30. package/dist/providers/tools/file.js +99 -0
  31. package/dist/providers/tools/host.js +34 -0
  32. package/dist/providers/tools/http.js +40 -0
  33. package/dist/providers/tools/index.js +2 -0
  34. package/dist/providers/tools/scheme.js +16 -0
  35. package/dist/providers/tools/shared.js +92 -0
  36. package/dist/providers/tools/shell.js +80 -0
  37. package/dist/runtime/context.js +160 -0
  38. package/dist/runtime/errors.js +14 -0
  39. package/dist/runtime/evaluator.js +276 -0
  40. package/dist/runtime/generate.js +175 -0
  41. package/dist/runtime/guards.js +39 -0
  42. package/dist/runtime/input.js +38 -0
  43. package/dist/runtime/interpreter.js +314 -0
  44. package/dist/runtime/json.js +59 -0
  45. package/dist/runtime/loader.js +146 -0
  46. package/dist/runtime/scope.js +47 -0
  47. package/dist/runtime/shape.js +132 -0
  48. package/dist/runtime/trace.js +54 -0
  49. package/dist/runtime/truth.js +13 -0
  50. package/dist/runtime/types.js +1 -0
  51. package/dist/runtime/uri.js +10 -0
  52. package/dist/semantic/analyzer.js +519 -0
  53. package/dist/semantic/diagnostics.js +16 -0
  54. package/dist/utils/assert.js +3 -0
  55. package/docs/cn/context-engineering.md +389 -0
  56. package/docs/cn/language.md +478 -0
  57. package/docs/design-history/v0-design.md +365 -0
  58. package/docs/design-history/v0-implement.md +274 -0
  59. package/docs/design-history/v1-design.md +323 -0
  60. package/docs/design-history/v1-implement.md +267 -0
  61. package/docs/design-history/v2-design.md +387 -0
  62. package/docs/design-history/v2-implement.md +399 -0
  63. package/docs/en/context-engineering.md +332 -0
  64. package/docs/en/language.md +478 -0
  65. package/examples/changelog.as +29 -0
  66. package/examples/extract.as +29 -0
  67. package/examples/review.as +38 -0
  68. package/examples/summarize.as +28 -0
  69. package/examples/translate.as +33 -0
  70. package/package.json +59 -0
  71. package/tutorials/cli.as +22 -0
  72. package/tutorials/helloworld.as +14 -0
  73. package/tutorials/memory.as +19 -0
  74. package/tutorials/plan-execute.as +155 -0
  75. package/tutorials/react.as +98 -0
  76. package/tutorials/repl.as +31 -0
  77. package/tutorials/self-improve.as +60 -0
@@ -0,0 +1,323 @@
1
+ # AgentScript V1 Design
2
+
3
+ V1 的目标不是把 AgentScript 扩展成通用工作流语言,而是在 V0 的小语言面上支持更多常见 Agent 模式。设计原则仍然是少关键词、强作用域、显式上下文。
4
+
5
+ V1 应优先增强普通数据、Agent 组合、工具能力和文件组织,而不是增加 `planner`、`executor`、`verifier`、`rollback`、`parallel` 这类模式专用关键词。
6
+
7
+ `use`、作用域和 prompt context 的基础语义见 [`Context Engineering`](../cn/context-engineering.md)。V1 的新能力必须保持这些核心语义,不应把 AgentScript 误扩展成会隐式捕获上下文的通用编程语言。
8
+
9
+ ## 目标
10
+
11
+ V1 支持的核心模式:
12
+
13
+ - ReAct:V0 已支持,V1 保持兼容。
14
+ - Plan-and-Execute:生成结构化计划,逐步执行,校验并按需重规划。
15
+ - Reflection / Self-improve:用短 insight 改进下一次尝试。
16
+ - Evaluator-Optimizer:生成候选结果,由 evaluator 校验,再改进。
17
+ - Multi-agent composition:不同 Agent 拆分职责,调用边界天然隔离上下文。
18
+
19
+ V1 不追求:
20
+
21
+ - 通用事务系统。
22
+ - 通用并行编排。
23
+ - Durable workflow。
24
+ - 完整类型系统。
25
+ - 内建 eval/harness DSL。
26
+ - 默认自动 repair。
27
+
28
+ ## 语言面收紧
29
+
30
+ V1 尽量不新增模式关键词。
31
+
32
+ 继续保持:
33
+
34
+ - `planner`、`executor`、`verifier`、`controller` 都是普通 Agent 或普通函数名。
35
+ - `plan`、`step`、`status`、`result` 都是普通 JSON/list 数据。
36
+ - `rollback` 不作为关键词。
37
+ - `parallel` 不作为 V1 核心关键词。
38
+
39
+ V1 可考虑新增的语言能力只有两类:
40
+
41
+ - 更自然的 list 遍历。
42
+ - 跨文件 import。
43
+
44
+ ## Plan-and-Execute
45
+
46
+ Plan-and-Execute 可以用普通 Agent 表达:
47
+
48
+ ```agentscript
49
+ import agent Planner from "./planner.as"
50
+ import agent Executor from "./executor.as"
51
+ import agent Verifier from "./verifier.as"
52
+
53
+ main agent PlanAndExecute {
54
+ main func(input {
55
+ goal string
56
+ }) {
57
+ plan = Planner(input)
58
+ results = []
59
+
60
+ for step in plan.steps < 12 {
61
+ result = Executor({
62
+ goal: input.goal
63
+ step: step
64
+ previous: results.summary
65
+ })
66
+
67
+ verdict = Verifier({
68
+ goal: input.goal
69
+ step: step
70
+ result: result
71
+ })
72
+
73
+ if verdict.ok {
74
+ results.add({
75
+ step: step.id
76
+ result: result
77
+ })
78
+ } else {
79
+ plan = Planner({
80
+ goal: input.goal
81
+ previous: results.summary
82
+ problem: verdict.reason
83
+ })
84
+ }
85
+ }
86
+
87
+ return {
88
+ ok: true
89
+ results: results
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ 这里新增的核心语法只有:
96
+
97
+ ```agentscript
98
+ for item in list < n {
99
+ ...
100
+ }
101
+ ```
102
+
103
+ 规则:
104
+
105
+ - `for` 每次迭代创建子作用域。
106
+ - `< n` 是硬上限。
107
+ - list 在循环开始时求值一次。
108
+ - 循环体内新建变量不会泄漏到外层。
109
+ - 外层已存在变量可以被更新,例如 `results.add(...)` 或 `plan = ...`。
110
+
111
+ ## Plan 数据约定
112
+
113
+ V1 不需要专门的 `plan` 类型。推荐结构:
114
+
115
+ ```agentscript
116
+ return generate({ input: "Create a short executable plan" }) {
117
+ return {
118
+ steps list[json]
119
+ }
120
+ }
121
+ ```
122
+
123
+ 每个 step 推荐包含:
124
+
125
+ ```json
126
+ {
127
+ "id": "step-1",
128
+ "task": "Search for current docs",
129
+ "kind": "search",
130
+ "status": "pending"
131
+ }
132
+ ```
133
+
134
+ `kind`、`status` 只是字符串,不需要枚举类型。
135
+
136
+ ## 回滚与补偿
137
+
138
+ V1 不引入 `rollback` 关键词。
139
+
140
+ 原因:Agent 的副作用通常来自工具,例如写文件、执行 shell、调用 API。语言层无法保证这些副作用都能严格回滚。V1 采用 effect record + compensation 的设计。
141
+
142
+ 有副作用的工具应返回 effect 信息:
143
+
144
+ ```json
145
+ {
146
+ "ok": true,
147
+ "value": "...",
148
+ "effects": [
149
+ {
150
+ "id": "effect-123",
151
+ "tool": "File",
152
+ "undoable": true
153
+ }
154
+ ]
155
+ }
156
+ ```
157
+
158
+ Agent 用普通函数处理补偿:
159
+
160
+ ```agentscript
161
+ func compensate(result) {
162
+ if result.effects {
163
+ return File.undo(result.effects)
164
+ }
165
+
166
+ return {
167
+ ok: true
168
+ }
169
+ }
170
+ ```
171
+
172
+ Controller 逻辑也用普通函数表达:
173
+
174
+ ```agentscript
175
+ if not verdict.ok {
176
+ compensate(result)
177
+ plan = revise(goal, plan, results, verdict)
178
+ }
179
+ ```
180
+
181
+ 这不是严格事务,而是可审计的补偿动作。
182
+
183
+ ## 并行
184
+
185
+ V1 核心不引入并行语法。
186
+
187
+ 原因:
188
+
189
+ - 并行会影响 trace 顺序。
190
+ - 并行会放大工具副作用风险。
191
+ - 并行需要 rate limit、错误聚合和预算控制。
192
+ - 当前 V0/V1 的作用域模型以顺序执行为基础,容易审计。
193
+
194
+ V1 可以在 runtime 实验层支持并行工具或并行 Agent 调用,但不进入核心语法。正式并行语法应等 Plan-and-Execute 顺序模型稳定后再设计。
195
+
196
+ ## Tool URI Scheme
197
+
198
+ V1 的 `import tool` 不应绑定到单一协议。MCP 可以作为一种工具来源,但 shell/io/http 这类常见能力不需要强行放进 `mcp://...`。
199
+
200
+ 推荐规则:
201
+
202
+ - `mcp://...` 表示外部 MCP 工具。
203
+ - `sh://...` 表示 host runtime 提供的具体 shell 命令。
204
+ - `file://...` 表示 host runtime 提供的文件能力。
205
+ - `env://...` 表示 host runtime 提供的环境变量读取能力。
206
+ - `http://...` / `https://...` 表示 HTTP 工具或远端服务。
207
+ - 自定义 runtime 可以注册更多 scheme。
208
+
209
+ URI scheme 只决定绑定到哪个 provider;具体方法仍通过普通成员调用表达。
210
+
211
+ ## 常用 Shell / IO 工具
212
+
213
+ V1 可以定义一组推荐 host tools,而不是把 shell/io 做成语言关键词,也不要求它们经过 MCP。
214
+
215
+ 推荐工具 import:
216
+
217
+ ```agentscript
218
+ import tool Find from "sh://find"
219
+ import tool Grep from "sh://grep"
220
+ import tool Sed from "sh://sed"
221
+ import tool File from "file://workspace"
222
+ import tool Env from "env://process"
223
+ import tool Http from "https://api.example.com"
224
+ ```
225
+
226
+ 推荐能力:
227
+
228
+ - `Find.run({ path, name, type, max })`
229
+ - `Grep.run({ path, pattern, include, max })`
230
+ - `Sed.run({ path, start, max })`
231
+ - `File.read({ path })`
232
+ - `File.write({ path, content })`
233
+ - `File.patch({ path, search, replace })`
234
+ - `File.list({ path })`
235
+ - `File.undo(effects)`
236
+ - `Env.get({ name })`
237
+ - `Http.get({ url, headers })`
238
+ - `Http.post({ url, headers, body })`
239
+
240
+ 示例:
241
+
242
+ ```agentscript
243
+ files = Find.run({
244
+ path: "."
245
+ name: "*.ts"
246
+ max: 50
247
+ })
248
+
249
+ matches = Grep.run({
250
+ path: "src"
251
+ pattern: "generate"
252
+ include: "*.ts"
253
+ max: 100
254
+ })
255
+ ```
256
+
257
+ 安全规则应由 host runtime 执行:
258
+
259
+ - `sh://...` 工具必须绑定到具体命令。
260
+ - 禁止 `sh://sh`、`sh://bash`、`sh://zsh`、`sh://fish` 这类通用 shell。
261
+ - 禁止通过 `sh://...` 传入任意命令字符串;参数必须是结构化字段。
262
+ - shell 工具默认需要工作目录、超时和输出上限。
263
+ - 文件工具默认限制在 workspace 内。
264
+ - 写文件工具必须返回 effect record。
265
+ - 网络工具可由 host 配置允许或禁止。
266
+
267
+ ## 文件引用
268
+
269
+ V1 增加文件资源 import:
270
+
271
+ ```agentscript
272
+ import file Requirements from "./requirements.md"
273
+ import file ApiSpec from "./openapi.json"
274
+ ```
275
+
276
+ 文件资源是只读上下文资源。使用方式:
277
+
278
+ ```agentscript
279
+ func answer(input) {
280
+ use Requirements < 4k
281
+ use input.question
282
+
283
+ return generate({ input: "Answer from the referenced file" }) {
284
+ return {
285
+ ok boolean
286
+ text string
287
+ }
288
+ }
289
+ }
290
+ ```
291
+
292
+ 规则:
293
+
294
+ - `file` 只在 `import file` 中作为资源类别。
295
+ - 文件内容默认不进入 prompt,必须 `use`。
296
+ - `use Requirements < 4k` 应用上下文预算。
297
+ - JSON 文件可以作为 json 读取;文本文件作为 string 读取。
298
+ - 文件路径相对当前 `.as` 文件解析。
299
+
300
+ ## 跨文件 Agent Import
301
+
302
+ V1 增加 Agent import:
303
+
304
+ ```agentscript
305
+ import agent Planner from "./agents/planner.as"
306
+ import agent Executor from "./agents/executor.as"
307
+ import agent Verifier from "./agents/verifier.as"
308
+ ```
309
+
310
+ 规则:
311
+
312
+ - 被 import 的文件可以包含一个或多个 Agent。
313
+ - `import agent Name from "./x.as"` 导入文件中名为 `Name` 的 Agent。
314
+ - 导入的 Agent 不自动成为入口。
315
+ - 当前程序仍然只能有一个 `main agent`。
316
+ - `Planner(input)` 调用 `Planner` 的 `main func`。
317
+ - `Planner.make(input)` 调用指定函数 `make`。
318
+ - 跨文件 Agent 调用保持独立函数作用域和嵌套 trace。
319
+
320
+ 开放问题:
321
+
322
+ - 是否允许 `import agent * from "./agents.as"`。V1 初期建议不支持。
323
+ - 是否允许 import alias。可用 `import agent Planner as PlanMaker from ...`,但这会增加语法,V1 初期建议不支持。
@@ -0,0 +1,267 @@
1
+ # AgentScript V1 实施计划
2
+
3
+ 本文档描述 V1 的分阶段实施方案。V1 设计见 `v1-design.md`。
4
+
5
+ V1 的实现目标是支持更多 Agent 模式,尤其是 Plan-and-Execute、Evaluator-Optimizer 和多 Agent 组合,同时保持语言小而清晰。
6
+
7
+ ## 原则
8
+
9
+ - 先实现普通数据和模块能力,再考虑新控制流。
10
+ - 不引入模式专用关键词。
11
+ - 不实现通用并行语法。
12
+ - 不实现通用事务系统。
13
+ - Shell / IO 工具必须具体、可审计、可授权。
14
+
15
+ ## 阶段 1:Plan-and-Execute 示例
16
+
17
+ 状态:已完成。
18
+
19
+ 目标:先用 V0 现有能力写出 Plan-and-Execute 示例,确认真实痛点。
20
+
21
+ 产物:
22
+
23
+ - `tutorials/plan-execute.as`
24
+ - Planner、Executor、Verifier 作为普通 Agent 或普通函数。
25
+ - 顺序执行 plan steps。
26
+ - verifier 失败时调用 planner 重新规划。
27
+
28
+ 验收:
29
+
30
+ - 示例能 parse/check/execute。
31
+ - trace 能看出 plan、step、verify、replan 的执行边界。
32
+
33
+ ## 阶段 2:List 遍历
34
+
35
+ 状态:已完成。
36
+
37
+ 新增语法:
38
+
39
+ ```agentscript
40
+ for item in list < n {
41
+ ...
42
+ }
43
+ ```
44
+
45
+ 实现项:
46
+
47
+ - AST 增加 `ForInStmt`。
48
+ - parser 支持 `for item in expr < n { ... }`。
49
+ - semantic analyzer 检查 item 作用域和 iterable 表达式。
50
+ - runtime 校验 iterable 是 list,顺序遍历,`< n` 作为硬上限。
51
+ - trace 可选记录 iteration。
52
+
53
+ 约束:
54
+
55
+ - `for` 每次迭代创建子作用域。
56
+ - list 在循环开始时求值一次。
57
+ - 外层已存在变量可以被更新。
58
+
59
+ ## 阶段 3:List / JSON 能力增强
60
+
61
+ 状态:已完成。
62
+
63
+ 补齐 Plan-and-Execute 后续可能需要的集合能力。当前已支持 `list.length`、`list.add(value)`、`list.summary` 和 `for item in list < n`。
64
+
65
+ 新增语法:
66
+
67
+ ```agentscript
68
+ item = list[0]
69
+ value = list[index].field
70
+ ```
71
+
72
+ 实现项:
73
+
74
+ - parser 支持 `expr[expr]` postfix 表达式。
75
+ - semantic analyzer 检查 list 和 index 两侧表达式。
76
+ - runtime 支持 list item 读取。
77
+ - 越界读取抛出运行时错误。
78
+ - 非 list 或非非负整数 index 报运行时错误。
79
+
80
+ 约束:
81
+
82
+ - 只支持读取,不支持 `list[0] = value`。
83
+ - 不支持切片。
84
+ - 不新增专用 JSON 操作关键词。
85
+
86
+ ## 阶段 4:File Import
87
+
88
+ 状态:已完成。
89
+
90
+ 新增资源类型:
91
+
92
+ ```agentscript
93
+ import file Requirements from "./requirements.md"
94
+ import file ApiSpec from "./openapi.json"
95
+ ```
96
+
97
+ 实现项:
98
+
99
+ - AST 扩展 `ImportResourceKind` 支持 `file`。
100
+ - parser 支持 `import file`。
101
+ - semantic analyzer 把 file 作为资源绑定。
102
+ - runtime 加载相对当前 `.as` 文件的文件内容。
103
+ - `use FileName < n` 将文件内容加入 context。
104
+
105
+ 约束:
106
+
107
+ - 文件默认不进入 prompt,必须显式 `use`。
108
+ - 文本文件作为 string。
109
+ - JSON 文件可作为 json。
110
+ - 路径解析和访问范围由 host runtime 控制。
111
+ - CLI 执行时相对路径基于当前 `.as` 文件目录解析。
112
+ - REPL 中相对路径基于当前工作目录解析。
113
+
114
+ ## 阶段 5:Agent Import
115
+
116
+ 状态:已完成。
117
+
118
+ 新增资源类型:
119
+
120
+ ```agentscript
121
+ import agent Planner from "./agents/planner.as"
122
+ ```
123
+
124
+ 实现项:
125
+
126
+ - parser 支持 `import agent`。
127
+ - loader 解析跨文件依赖图。
128
+ - semantic analyzer 合并导入 Agent 的符号。
129
+ - runtime 允许调用导入 Agent。
130
+ - trace 继续嵌套跨 Agent 调用。
131
+
132
+ 约束:
133
+
134
+ - `import agent Name from "./x.as"` 只导入文件中名为 `Name` 的 Agent。
135
+ - 导入 Agent 不自动成为入口。
136
+ - 当前程序仍然只能有一个 `main agent`。
137
+ - V1 初期不支持 wildcard import 和 alias。
138
+ - CLI 使用 loader 执行、检查和解析入口文件。
139
+
140
+ ## 阶段 6:Tool URI Provider
141
+
142
+ 状态:已完成。
143
+
144
+ 扩展 tool provider 分发:
145
+
146
+ - `mcp://...`
147
+ - `sh://具体命令`
148
+ - `file://workspace`
149
+ - `env://process`
150
+ - `http://...`
151
+ - `https://...`
152
+
153
+ 实现项:
154
+
155
+ - 根据 URI scheme 选择 provider。
156
+ - `ToolProvider` 可拆分为 registry。
157
+ - trace 记录 provider scheme。
158
+ - 错误消息包含 tool 名称、method 和 URI。
159
+
160
+ 约束:
161
+
162
+ - 本阶段只实现分发框架,不实现具体 shell/io/http 工具。
163
+ - 未注册 scheme 默认进入 fallback provider。
164
+
165
+ ## 阶段 7:具体 Shell / IO 工具
166
+
167
+ 状态:已完成。
168
+
169
+ 推荐先实现:
170
+
171
+ - `sh://find`
172
+ - `sh://grep`
173
+ - `sh://sed`
174
+ - `file://workspace`
175
+ - `env://process`
176
+
177
+ 已实现:
178
+
179
+ - `Find.run({ path, name, type, max })`
180
+ - `Grep.run({ path, pattern, include, max })`
181
+ - `Sed.run({ path, start, max })`
182
+ - `File.read({ path })`
183
+ - `File.list({ path })`
184
+ - `File.write({ path, content })`
185
+ - `File.undo(effects)`
186
+ - `Env.get({ name })`
187
+ - `Http.get({ url, headers, timeout })`
188
+ - `Http.post({ url, headers, body, timeout })`
189
+
190
+ 禁止:
191
+
192
+ - `sh://sh`
193
+ - `sh://bash`
194
+ - `sh://zsh`
195
+ - `sh://fish`
196
+ - 任意命令字符串入口。
197
+
198
+ 约束:
199
+
200
+ - 参数必须是结构化 JSON。
201
+ - 每个工具必须有超时和输出上限。
202
+ - 文件写入必须限制在 workspace。
203
+ - 有副作用的工具必须返回 effect record。
204
+ - `sh://sh`、`sh://bash` 等通用 shell 入口在 host provider 中被拒绝。
205
+
206
+ ## 阶段 8:Effect Record 和 Compensation
207
+
208
+ 状态:已完成。
209
+
210
+ 目标:支持可审计补偿,不做语言级 rollback。
211
+
212
+ 推荐 effect record:
213
+
214
+ ```json
215
+ {
216
+ "id": "effect-123",
217
+ "tool": "File",
218
+ "action": "write",
219
+ "undoable": true
220
+ }
221
+ ```
222
+
223
+ 实现项:
224
+
225
+ - File write/patch 返回 effects。
226
+ - 允许 `File.undo(effects)`。
227
+ - trace 记录 effects。
228
+ - 示例中用普通函数 `compensate(result)` 表达补偿。
229
+
230
+ 约束:
231
+
232
+ - 语言不新增 `rollback` 关键词。
233
+ - effect record 是普通 JSON,由工具返回。
234
+ - compensation 是普通函数调用,例如 `File.undo(result.effects)`。
235
+
236
+ ## 阶段 9:Trace 增强
237
+
238
+ 状态:已完成。
239
+
240
+ 增强内容:
241
+
242
+ - for iteration。
243
+ - step id。
244
+ - agent call tree。
245
+ - tool effects。
246
+ - replan 原因。
247
+
248
+ 已实现:
249
+
250
+ - agent call tree。
251
+ - for iteration。
252
+ - tool scheme、URI 和 effects。
253
+
254
+ 要求:
255
+
256
+ - trace 不进入 prompt。
257
+ - pretty trace 保持可读。
258
+ - JSON trace 保持可机器处理。
259
+
260
+ ## V1 完成标准
261
+
262
+ - 能用多个文件组织 Planner、Executor、Verifier。
263
+ - 能引用本地文件作为受预算控制的上下文。
264
+ - 能用具体 `sh://...`、File、Env、Http 工具完成有限任务。
265
+ - 能用 effect record + compensation 表达可审计补偿。
266
+ - 能用 `for item in list < n` 顺序执行 plan steps。
267
+ - 不引入 `planner`、`executor`、`verifier`、`rollback`、`parallel` 等模式关键词。