@itpay/cli 2.1.47 → 2.1.49

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 (60) hide show
  1. package/README.md +1 -1
  2. package/dist/src/main.js +9497 -9269
  3. package/dist/src/state/config.js +2 -2
  4. package/docs/agent/buyer/cart-checkout.json +9 -50
  5. package/docs/agent/buyer/catalog-list.json +11 -52
  6. package/docs/agent/buyer/identity-and-sessions.json +9 -81
  7. package/docs/agent/buyer/install-and-setup.json +7 -47
  8. package/docs/agent/buyer/orders-refunds.json +9 -81
  9. package/docs/agent/buyer/payment-flow.json +9 -50
  10. package/docs/agent/buyer/purchased-content.json +1 -25
  11. package/docs/agent/buyer/rail-booking.json +25 -152
  12. package/docs/agent/buyer/render-hosts.json +21 -57
  13. package/docs/agent/buyer/service-feedback.json +6 -42
  14. package/docs/cli-reference/agent-types.md +17 -97
  15. package/docs/cli-reference/commands/auth.md +6 -87
  16. package/docs/cli-reference/commands/buy.md +23 -168
  17. package/docs/cli-reference/commands/cart/add.md +3 -1
  18. package/docs/cli-reference/commands/cart/index.md +2 -2
  19. package/docs/cli-reference/commands/cart/next.md +2 -0
  20. package/docs/cli-reference/commands/cart/show.md +2 -22
  21. package/docs/cli-reference/commands/catalog/index.md +1 -1
  22. package/docs/cli-reference/commands/catalog/list.md +4 -38
  23. package/docs/cli-reference/commands/checkout.md +3 -17
  24. package/docs/cli-reference/commands/device.md +7 -36
  25. package/docs/cli-reference/commands/docs/list.md +1 -1
  26. package/docs/cli-reference/commands/docs/show.md +1 -19
  27. package/docs/cli-reference/commands/feedback/submit.md +5 -17
  28. package/docs/cli-reference/commands/install.md +3 -39
  29. package/docs/cli-reference/commands/orders.md +3 -13
  30. package/docs/cli-reference/commands/pay.md +6 -27
  31. package/docs/cli-reference/commands/readyz.md +3 -61
  32. package/docs/cli-reference/commands/refund/cancel.md +1 -21
  33. package/docs/cli-reference/commands/refund/create.md +4 -28
  34. package/docs/cli-reference/commands/refund/get.md +3 -3
  35. package/docs/cli-reference/commands/refund/index.md +3 -3
  36. package/docs/cli-reference/commands/refund/list.md +1 -14
  37. package/docs/cli-reference/commands/refund/watch.md +5 -25
  38. package/docs/cli-reference/commands/services/action.md +6 -35
  39. package/docs/cli-reference/commands/services/checkout.md +15 -112
  40. package/docs/cli-reference/commands/services/get.md +4 -39
  41. package/docs/cli-reference/commands/services/index.md +5 -42
  42. package/docs/cli-reference/commands/services/invoke.md +6 -147
  43. package/docs/cli-reference/commands/services/list.md +3 -55
  44. package/docs/cli-reference/commands/services/next.md +9 -270
  45. package/docs/cli-reference/commands/services/page.md +4 -37
  46. package/docs/cli-reference/commands/services/purchase.md +21 -0
  47. package/docs/cli-reference/commands/services/quote.md +12 -57
  48. package/docs/cli-reference/commands/services/read-result.md +5 -72
  49. package/docs/cli-reference/commands/services/run.md +15 -144
  50. package/docs/cli-reference/commands/services/start.md +7 -49
  51. package/docs/cli-reference/commands/skill.md +1 -2
  52. package/docs/cli-reference/commands/vault/access.md +2 -20
  53. package/docs/cli-reference/commands/vault/list.md +3 -16
  54. package/docs/cli-reference/commands/vault/read.md +1 -1
  55. package/docs/cli-reference/conventions.md +2 -2
  56. package/docs/cli-reference/index.md +2 -1
  57. package/package.json +3 -4
  58. package/skills/itpay/SKILL.md +32 -130
  59. package/docs/agent/buyer/quickstart.json +0 -112
  60. package/docs/agent/buyer/rail-fast-checkout.json +0 -48
@@ -113,44 +113,8 @@ OpenClaw 额外明确没有默认入口:
113
113
 
114
114
  `next` 保持为空,因为 CLI 不能替 Agent 猜测其宿主平台;Agent 必须自行完成这次选择并继续执行,不得把技术选择或命令转交给用户。
115
115
 
116
- ## Agent Type / Host
116
+ ## 宿主与限制
117
117
 
118
- | Agent Type | 默认 Host | instruction 重点 |
119
- | --- | --- | --- |
120
- | `codex-desktop` | `codex` | 桌面对话必须实际展示二维码和付款链接。 |
121
- | `codex-cli` | `terminal` | 只在用户可见终端展示付款交接。 |
122
- | `claude-code-desktop` | `claude-code` | 桌面对话必须实际展示二维码和付款链接。 |
123
- | `claude-code-cli` | `terminal` | 只在用户可见终端展示付款交接。 |
124
- | `workbuddy` | `plain-chat` | 为 `~/.itpay-v3` 申请正常持久化权限;拒绝时报告受阻操作。Checkout 原样执行返回的 `present_files` action,打开渲染后的 Card Link。 |
125
- | `zcode` | `plain-chat` | Checkout 或授权返回后立即用 ZCode 内置浏览器打开 `handoff.url`;只有浏览器不可用时才展示同一个可点击链接。 |
126
- | `doubao-work` | `plain-chat` | Checkout 或授权时同时展示 `handoff.url` 和 `handoff.qr_image_url` 两个有标签的官方入口;优先让手机直接打开链接,二维码供保存或另一台设备扫码。 |
127
- | `kimi-code` | `terminal` | 使用标准 CLI 流程和终端展示,不增加 Kimi 专属命令。 |
128
- | `openclaw` | 无 | 必须显式提供当前入口;Telegram 使用原生 action,其他入口展示标准二维码和链接。 |
129
-
130
- 显式 `--host` 可以在后续 commerce 命令覆盖默认 Host,但不会改变 Agent Type 或设备归属。
131
-
132
- 同一类型的不同窗口、任务和聊天复用当前 Backend 下的同一个 Agent Instance。切换 Backend 会在同一本地私钥下建立独立服务端登记,不会把 dev/test/app 的 Device ID 混用。
133
-
134
- ## 异常处理
135
-
136
- 未知 target 返回:
137
-
138
- ```json
139
- {
140
- "status": "error",
141
- "error": {
142
- "code": "unsupported_agent_type",
143
- "message": "unsupported install target: codex"
144
- },
145
- "instruction": "target 只接受:codex-desktop, codex-cli, claude-code-desktop, claude-code-cli, workbuddy, zcode, doubao-work, kimi-code, openclaw。",
146
- "next": null,
147
- "recovery": [
148
- {
149
- "command": "itpay install --json",
150
- "reason": "列出正式支持的 Agent Type"
151
- }
152
- ]
153
- }
154
- ```
118
+ 使用当前真实 Agent Type;同类型窗口复用当前 Backend 下的同一实例。显式 host 只改变展示,不改变身份、业务或同意。正式 Skill 与 render-hosts 拥有当前可用展示指引;原生工具不可用时同轮展示原官方URL,不为了图片或按钮反复排障。
155
119
 
156
- 错误不会写入本地状态。不要把 `codex`、`terminal` 或 `claude-code` 等 Host 名称当成 Agent Type。
120
+ 未知 target 或参数错误按实际返回修正;本命令不写身份。准备设备统一使用 setup,不把 install、readyz、auth status 串成重复初始化链。
@@ -48,18 +48,8 @@ itpay orders [--limit <n>] [--status <status>] [--cursor <cursor>] [--host <host
48
48
 
49
49
  ## Agent 授权缺失
50
50
 
51
- ```json
52
- {
53
- "status": "human_authorization_required",
54
- "result": { "intent": "list_purchase_history" },
55
- "instruction": "需要用户确认一次身份和只读权限;执行 next.command 生成入口。",
56
- "next": {
57
- "command": "itpay vault access --json",
58
- "reason": "创建一次账号读取授权"
59
- },
60
- "recovery": []
61
- }
62
- ```
51
+ 授权缺失返回 human_authorization_required。上下文完整时只执行当次完整的账号授权 next 一次;缺 host/target 时 next=null,使用返回的不可执行完整模板从当前可信会话补齐,不把通用示例套到所有宿主。真实交付入口后停止,授权不等于购买或付款。
52
+
63
53
 
64
54
  用户完成后重新执行原始 `orders` 命令。CLI 不要求 Agent构造或粘贴 Buyer
65
55
  token,也不改用 Service Execution 猜测账号历史。
@@ -67,7 +57,7 @@ token,也不改用 Service Execution 猜测账号历史。
67
57
  当 `next_cursor` 非空时,`next.command` 使用同一 limit/status 和 Backend 返回的
68
58
  cursor 读取下一页。Agent 只在用户需要查看更多订单时执行,不能修改或猜测
69
59
  cursor。OpenClaw 的授权下一步必须保留原命令的 `--host` 和所需 `--target`;
70
- 若原命令未提供,CLI 会用明确占位符要求 Agent 从当前可信会话补齐。
60
+ 若原命令未提供,next=null,并返回不可执行的完整输入模板,由Agent从当前可信会话补齐。
71
61
 
72
62
  无匹配订单使用 `status=no_orders`、`orders=[]` 和 `next=null`。无效 limit
73
63
  和 status 必须在 HTTP 前返回稳定合同错误。
@@ -8,7 +8,7 @@
8
8
 
9
9
  本命令不能创建 Cart、Checkout、订单或付款证明,也不能把 Payment Intent 的渠道状态当作订单已付款。
10
10
 
11
- **直接上游:** `buy`、`services checkout` 或 `checkout` 返回的同一组 `checkout_id` 与 display token。
11
+ **直接上游:** 当前官方入口或原 `checkout` reader 返回的同一组 `checkout_id` 与 display token。
12
12
 
13
13
  **直接下游:** `checkout` 读取同一 Checkout 的权威付款、订单和履约状态。
14
14
 
@@ -82,29 +82,8 @@ API 安全合同要求后端验证 display token 是该 Checkout 当前有效的
82
82
  - `--refresh` 只更新该 Intent 的渠道动作;不能创建第二个 Intent 或 Checkout。
83
83
  - 响应丢失时重跑同一命令,不换 token 或 method。
84
84
 
85
- ## 异常处理
86
-
87
- | 错误码 | Agent 处理 |
88
- |---|---|
89
- | `payment_method_invalid` | 改用 `alipay` 或 `wechatpay`;本次没有 HTTP 请求。 |
90
- | `checkout_token_required` | 从 `itpay next --json` 恢复同一 Checkout;禁止拼接其他 token。 |
91
- | `target_required` | 为当前 IM Host 补充真实 target。 |
92
- | `not_found` / token invalid | 视为同一个不透明资源错误,不探测 Checkout 是否属于他人。 |
93
- | `invalid_state` | 回到 `checkout` 读取当前终态,不创建替代资源。 |
94
- | `provider_payment_failed` | 保留同一 Checkout,稍后恢复;不声称已付款。 |
95
- | `payment_intent_failed` | 执行 `itpay next --json` 恢复现有句柄。 |
96
-
97
- ## Agent Type / Host
98
-
99
- | Agent Type | 默认 Host | Instruction |
100
- |---|---|---|
101
- | `codex-desktop` | `codex` | 把安全 handoff 实际发到当前 Codex 对话,然后查询 Checkout。 |
102
- | `codex-cli` | `terminal` | 只在用户可见终端展示渠道动作。 |
103
- | `claude-code-desktop` | `claude-code` | 把安全 handoff 发到当前桌面对话。 |
104
- | `claude-code-cli` | `terminal` | 只在用户可见终端展示渠道动作。 |
105
- | `workbuddy` | `plain-chat` | 受控逃生入口返回 `handoff.url` 和可原样执行的 `present_files` action;打开一次后停止,不立即查询或创建替代付款。 |
106
- | `zcode` | `plain-chat` | 受控逃生入口返回 `handoff.url`;同时存在渠道动作时优先使用浏览器可打开的 `qr_image_url`,只有它缺失时才回退到 `mobile_wallet_url`。立即用内置浏览器打开并停止,浏览器不可用时才展示同一个链接。 |
107
- | `kimi-code` | `terminal` | 使用标准 CLI 终端展示渠道动作。 |
108
- | `openclaw` | 必须显式提供 | 按显式 Host 返回安全渠道动作;IM Host 仍要求真实 target。 |
109
-
110
- Host 只改变 instruction;Payment Intent ID、金额、状态、重试语义和权限必须一致。
85
+ ## 保护与展示
86
+
87
+ 仅在有明确授权的受控集成恢复中使用当前返回动作;普通 Agent 不自动调用 pay 或 buy --pay。错误按真实原因及原 Checkout 状态处理,不猜 token、换渠道掩盖未知结果或创建替代资源。
88
+
89
+ 当前 handoff 按正式 Skill 与 render-hosts 展示;没有原生工具或可选图片时直接展示原始官方URL,不把按钮/二维码当付款事实。Host 不改变金额、Payment Intent、权限、幂等和状态保护。
@@ -1,69 +1,11 @@
1
1
  # `itpay readyz`
2
2
 
3
- > **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The public package provides Buyer workflows; Seller authoring source is maintained separately.
4
-
5
- ## 范围与意义
6
-
7
- 检查当前官方 Backend 是否可用。默认使用生产环境 `https://app.itpay.ai`;仅测试时可通过 `ITPAY_BACKEND_URL=https://sandbox.itpay.ai` 选择官方沙箱环境。它只调用 `/v1/readyz` 做 liveness 诊断,不执行平台兼容性 gate、不登记设备、不创建业务资源;需要服务端合同的命令仍会在各自入口严格检查 compatibility。
8
-
9
- **上游:** CLI 安装;Backend 只能是官方 `https://app.itpay.ai` 、`https://sandbox.itpay.ai` 或 `https://dev.itpay.ai`,其他 override 在网络或本地状态写入前被拒绝。
10
- **下游:** 实际宿主已声明时,执行同 Backend/type 的 `setup`;未声明时先 `install` 识别实际宿主。setup 后读取并启用同包 Skill,同版本不重复读取。
11
-
12
- ## 语法与参数
3
+ 只检查官方 Backend 存活,不证明设备、登录或业务合同就绪,也不是业务失败后的必跑排障步骤。
13
4
 
14
5
  ```bash
15
6
  itpay readyz [--json]
16
7
  ```
17
8
 
18
- | 参数 | 必填 | 说明 |
19
- |---|---:|---|
20
- | `--json` | 否 | 返回标准 JSON。 |
21
-
22
- ## 标准输出
23
-
24
- ```json
25
- {
26
- "status": "ready",
27
- "result": { "backend": "available", "backend_url": "https://app.itpay.ai", "environment": "production" },
28
- "instruction": "ItPay 正式环境 https://app.itpay.ai 可用。只证明后端存活;首次使用或更新后运行 setup,不自动登录或开始业务。",
29
- "next": { "command": "itpay install --json", "reason": "识别实际宿主类型后执行 setup" },
30
- "recovery": []
31
- }
32
- ```
33
-
34
- 沙箱环境返回同一 envelope,但明确标记环境并在每个后续命令中保留 sandbox Backend:
35
-
36
- ```json
37
- {
38
- "status": "ready",
39
- "result": { "backend": "available", "backend_url": "https://sandbox.itpay.ai", "environment": "development" },
40
- "instruction": "ItPay 开发环境 https://sandbox.itpay.ai 可用。只证明后端存活;首次使用或更新后运行 setup,不自动登录或开始业务。",
41
- "next": { "command": "ITPAY_BACKEND_URL=https://sandbox.itpay.ai itpay install --json", "reason": "识别实际宿主类型后执行 setup" },
42
- "recovery": []
43
- }
44
- ```
45
-
46
- ## 异常处理
47
-
48
- 已收到 Backend 不可用响应等非传输异常时返回 `backend_unavailable`。尚未收到完整 HTTP 响应的临时传输失败使用 conventions 中对应的稳定 `network_*` 错误码;`readyz` 是 GET,按全局安全传输合同最多自动重试两次。有限尝试结束后本轮检查未完成,next=null、recovery=[];网络恢复后可以重新检查,不得在失败时切换环境或继续下单。
49
-
50
- 非官方 URL 返回 `backend_override_forbidden`,且不提供自动 recovery:
51
-
52
- ```json
53
- {
54
- "status": "error",
55
- "error": {
56
- "code": "backend_override_forbidden",
57
- "message": "ITPAY_BACKEND_URL only supports https://app.itpay.ai or https://sandbox.itpay.ai"
58
- },
59
- "instruction": "移除 ITPAY_BACKEND_URL 使用正式环境,或准确设置为 https://sandbox.itpay.ai。",
60
- "next": null,
61
- "recovery": []
62
- }
63
- ```
64
-
65
- 业务命令取得兼容性合同但不匹配时,返回 `backend_contract_incompatible`;readyz 本身只证明存活。输出保留 `current_cli_version`、`current_api_contract_revision`、`platform_api_contract_revision`、`minimum_cli_version`、`maximum_cli_major`。minimum 是协议门槛,不是推荐制品。所有分发渠道均停止本轮、next=null、recovery=[],由维护方提供已核验的配套制品;不要猜版本、降级或改变身份。
66
-
67
- ## Agent Type / Host
9
+ 生产默认 app.itpay.ai,明确测试可选择 sandbox.itpay.ai 或 dev.itpay.ai;不切环境掩盖失败。返回 backend、backend_url、environment;声明 Agent Type 时保留该事实。首次安装或升级后用当前宿主的 setup,之后读取同包Skill。
68
10
 
69
- 本命令不渲染 Host 内容。若已声明 Agent Type,`result.agent_type` 会确认该类型,且返回的 `setup` 命令保留同一 `--agent-type` 与 Backend;未声明时返回 `install`。只有 authenticated 或成功 login_required 才证明设备可用,后者不代表已登录。权限拒绝或未知状态停止准备,不宣称 ready。
11
+ 不可用、网络或兼容问题按当次错误说明处理;有限尝试结束即停止,不循环检测、不登录或下单。minimum_cli_version 是协议门槛,不是已验证推荐包;兼容失败须维护方提供配套制品,不猜版本、不降级、不改身份。文本和JSON相同,不输出凭据。
@@ -37,27 +37,7 @@ itpay refund cancel <refund_request_id> [--reason <reason>] [--json]
37
37
  }
38
38
  ```
39
39
 
40
- 不可取消时输出到 `stderr` 并以非零状态退出:
41
-
42
- ```json
43
- {
44
- "status": "error",
45
- "error": {
46
- "code": "refund_cancellation_too_late",
47
- "message": "refund cancellation is too late"
48
- },
49
- "instruction": "取消未生效;以 Refund Owner 当前状态为准,不要重复退款或自行解除交付锁。",
50
- "next": null,
51
- "recovery": [
52
- {
53
- "command": "itpay refund get <refund_request_id> --json",
54
- "reason": "读取当前权威状态"
55
- }
56
- ]
57
- }
58
- ```
59
-
60
- 出现 `not_found` 时同样只恢复到同一退款的 `refund get`,不借错误差异探测其他账号。取消成功只恢复重新申请交付授权的资格;旧 grant 永远不会复活。
40
+ 取消是否生效按当次服务端状态说明;结构化错误在当前文本/JSON出口返回,不承诺一定已取消,不重复提交或自行解除锁。取消成功只恢复按当前订单核对权限的资格,旧grant不自动复活。
61
41
 
62
42
  ## Agent Type / Host
63
43
 
@@ -7,7 +7,7 @@
7
7
  为一笔订单提交退款意图。Refund Owner 从订单推导 Buyer、支付、金额、币种、消费事实和审核策略;Agent 只提交订单和用户原因。
8
8
 
9
9
  **上游:** `order <id>` 或用户明确提出退款。
10
- **下游:** `refund watch <refund_request_id>`,或在 `can_cancel=true` 时由用户选择取消。
10
+ **下游:** 当前返回的同一退款get,按需读取且不自动循环等待,或在 `can_cancel=true` 时由用户选择取消。
11
11
 
12
12
  退款成功落库与交付冻结是同一事务;CLI 不自行锁单,也不预测自动退款结果。
13
13
 
@@ -41,7 +41,7 @@ CLI 使用 Device Authority 或已有 Buyer bearer,并用订单+原因生成
41
41
  },
42
42
  "instruction": "先告诉用户退款申请已经记录,原交付已冻结;自动路径表示系统会继续处理,但只有最终 succeeded 才能确认退款成功。然后只跟踪同一退款,不要重复申请、reveal、授权或读取结果。",
43
43
  "next": {
44
- "command": "itpay refund watch <refund_id> --json",
44
+ "command": "itpay refund get <refund_id> --json",
45
45
  "reason": "跟踪同一退款"
46
46
  },
47
47
  "recovery": []
@@ -54,33 +54,9 @@ CLI 使用 Device Authority 或已有 Buyer bearer,并用订单+原因生成
54
54
 
55
55
  重复提交同一活跃退款时 Backend 返回已有请求,不创建第二笔;CLI 继续跟踪该 `refund_request_id`。
56
56
 
57
- ## 异常处理
57
+ ## 输入与原单保护
58
58
 
59
- 缺少 `--order` 时在 HTTP 前返回 `order_required`,要求恢复当前 Service Execution,不猜订单 ID。
60
-
61
- 订单不可见、已退款、无可退款支付或状态不允许时 fail closed:
62
-
63
- ```json
64
- {
65
- "status": "error",
66
- "error": {
67
- "code": "<server_error_code>",
68
- "message": "<server reason>"
69
- },
70
- "instruction": "确认订单属于当前账号且可退款;不要修改金额、支付或消费事实。",
71
- "next": null,
72
- "recovery": [
73
- {
74
- "command": "itpay order <order_id> --json",
75
- "reason": "检查订单和交付锁"
76
- },
77
- {
78
- "command": "itpay refund list --order <order_id> --json",
79
- "reason": "检查已有退款"
80
- }
81
- ]
82
- }
83
- ```
59
+ 创建来自用户真实退款意图;缺少订单或状态不允许时按当次错误和原订单读取处理,不猜ID、不改变金额或消费事实。技术格式由 Agent 修正,退款范围/选择缺失才问用户。没有当前合法动作就停止,不用新申请掩盖原请求结果未知。
84
60
 
85
61
  ## Agent Type / Host
86
62
 
@@ -7,7 +7,7 @@
7
7
  读取一笔当前身份可见退款的权威快照、交付锁和可取消性。它只请求一次,不轮询、不改变退款状态。
8
8
 
9
9
  **上游:** `refund create`、`refund list` 或之前的 `refund watch`。
10
- **下游:** 非终态进入 `refund watch`;终态结束;`can_cancel=true` 时用户可另行选择取消。
10
+ **下游:** 非终态按需读取返回的同一退款get,不自动watch;终态结束;`can_cancel=true` 时用户可另行选择取消。
11
11
 
12
12
  ## 语法与参数
13
13
 
@@ -36,7 +36,7 @@ itpay refund get <refund_request_id> [--json]
36
36
  },
37
37
  "instruction": "先告诉用户退款申请已经记录,原交付已冻结;自动路径表示系统会继续处理,但只有最终 succeeded 才能确认退款成功。然后只跟踪同一退款,不要重复申请、reveal、授权或读取结果。",
38
38
  "next": {
39
- "command": "itpay refund watch <refund_id> --json",
39
+ "command": "itpay refund get <refund_id> --json",
40
40
  "reason": "跟踪同一退款"
41
41
  },
42
42
  "recovery": []
@@ -47,7 +47,7 @@ itpay refund get <refund_request_id> [--json]
47
47
 
48
48
  ## 终态
49
49
 
50
- - `succeeded`:先告诉用户退款已由 ItPay 确认成功,交付永久关闭,`next=null`。
50
+ - `succeeded`:退款钱款已由ItPay确认成功;按原订单核对实际金额范围、履约和访问锁,不能推断整单全部退款或线下服务已使用,`next=null`。
51
51
  - `cancelled/rejected`:说明退款没有执行,交付资格依当前订单和 owner 状态判断;旧 grant 不复活,按返回动作决定是否需要新的授权,`next=null` 时不自行创建。
52
52
  - `failed + known_no_effect`:说明退款请求确认未发送;Agent 不重试,由平台管理员决定是否重新执行,`next=null`。
53
53
  - `failed + retryable`:说明渠道明确返回可重试失败但 Agent 不会自行重试;等待平台管理员处理,`next=null`。
@@ -17,7 +17,7 @@
17
17
  - [`refund watch`](watch.md)
18
18
  - [`refund cancel`](cancel.md)
19
19
 
20
- 兼容别名 `itpay refund --order <id>` 等价于 `refund create`,文档和 instruction 统一推荐子命令形式。
20
+ 普通退款统一使用 `refund create` 子命令;铁路退款/改签使用原订单返回的 aftercare 完整模板。
21
21
 
22
22
  退款创建成功即锁定对应交付;旧 Agent grant 不得继续读取。直接运行无参数 `itpay refund` 显示 help,不创建请求。
23
23
 
@@ -32,11 +32,11 @@
32
32
  ## 语法、参数与标准输出
33
33
 
34
34
  ```bash
35
- itpay refund --order <order_id> [--reason <reason>] [--json]
35
+ itpay refund create --order <order_id> [--reason <reason>] [--json]
36
36
  itpay refund --help
37
37
  ```
38
38
 
39
- 兼容别名的参数、输出、instruction 和异常合同与 [`refund create`](create.md) 完全相同。无 `--order` 时只显示 help 和推荐的 `refund create` 语法,不发送请求。
39
+ 创建参数与边界见 refund create;无参数的分组只显示help,不发送请求。
40
40
 
41
41
  ## Agent Type / Host
42
42
 
@@ -44,20 +44,7 @@ itpay refund list --order <order_id> [--json]
44
44
 
45
45
  列表只返回选择退款所需的 ID、状态、金额和创建时间,不返回退款原因、消费证据、Admin 信息或支付渠道元数据。服务端按 `created_at DESC` 排序;CLI 优先引导至第一笔活跃退款,否则引导至最新记录。
46
46
 
47
- 无记录时:
48
-
49
- ```json
50
- {
51
- "status": "empty",
52
- "result": { "order_id": "<order_id>", "refunds": [] },
53
- "instruction": "该订单没有退款记录;确认用户确实要求退款后再创建。",
54
- "next": {
55
- "command": "itpay refund create --order <order_id> --json",
56
- "reason": "为该订单创建退款"
57
- },
58
- "recovery": []
59
- }
60
- ```
47
+ 无记录时 status=empty、refunds=[]、next=null。空列表不代表用户已同意退款;只有真实退款请求才按当前订单事实使用完整创建入口,不能自动提交。
61
48
 
62
49
  ## 鉴权与异常处理
63
50
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 范围与意义
6
6
 
7
- 轮询同一退款直到终态或 timeout。命令内部可以读取多次,但对外只输出一个最终信封,不把无变化轮询刷入 Agent 上下文。中断后可无副作用重跑。
7
+ 有界读取同一退款,直到状态变化、人工/结果未知、终态或 timeout。命令内部可以读取多次,但对外只输出一个最终信封,不把无变化轮询刷入 Agent 上下文。中断后可无副作用重跑。
8
8
 
9
9
  **上游:** active refund。
10
10
  **下游:** `succeeded`、`failed`、`cancelled`、`rejected` 等终态,或稍后继续 watch。
@@ -19,7 +19,7 @@ itpay refund watch <refund_request_id> [--interval <seconds>] [--timeout <second
19
19
  | --- | --- | --- |
20
20
  | `refund_request_id` | 无 | 必填。 |
21
21
  | `--interval <seconds>` | `2` | 必须至少 1 秒。 |
22
- | `--timeout <seconds>` | `120` | 必须为正数;可使用小数。 |
22
+ | `--timeout <seconds>` | `20` | 必须为正数;可使用小数。 |
23
23
  | `--json` | 关闭 | 输出一个可直接解析的 JSON 信封。 |
24
24
 
25
25
  非法轮询参数在第一次 HTTP 请求前失败。
@@ -38,7 +38,7 @@ itpay refund watch <refund_request_id> [--interval <seconds>] [--timeout <second
38
38
  "access_locked": true,
39
39
  "can_cancel": false
40
40
  },
41
- "instruction": "先告诉用户退款已由 ItPay 确认成功,原交付永久关闭;不需要继续跟踪或重复申请。",
41
+ "instruction": "先说明本次退款钱款已由ItPay确认成功;按原订单核对实际金额范围、履约及访问锁,不推断整单全部退款,不恢复旧授权或重复申请。",
42
42
  "next": null,
43
43
  "recovery": []
44
44
  }
@@ -46,29 +46,9 @@ itpay refund watch <refund_request_id> [--interval <seconds>] [--timeout <second
46
46
 
47
47
  其他终态使用与 `refund get` 相同的锁、恢复资格和旧 grant 规则。特别是 `failed` 必须按 `failure_class` 区分 `known_no_effect`、`retryable`、`outcome_unknown` 和 `permanent`;任何一种都不向 Agent 返回重试命令。
48
48
 
49
- ## Timeout 输出
49
+ ## 等待边界
50
50
 
51
- Timeout 只表示本次 CLI 等待结束,不表示退款失败:
52
-
53
- ```json
54
- {
55
- "status": "watch_timeout",
56
- "result": {
57
- "refund_request_id": "<id>",
58
- "last_status": "<status>",
59
- "access_locked": true,
60
- "can_cancel": true
61
- },
62
- "instruction": "先告诉用户退款仍在处理,Timeout 只表示本次等待结束,并不表示退款失败;稍后继续跟踪同一退款,不要重复申请或承诺结果。",
63
- "next": {
64
- "command": "itpay refund watch <refund_id> --json",
65
- "reason": "恢复轮询"
66
- },
67
- "recovery": []
68
- }
69
- ```
70
-
71
- 网络、ID 或参数错误返回错误信封,并只建议 `itpay refund get <id> --json` 检查当前状态。
51
+ 人工审核、outcome_unknown或关键状态变化立即交回权威快照,不继续等待,也不把人工审核覆盖成超时。等待到期只说明本次等待结束;非终态的next只读同一退款一次 get,不自动接力watch。只有用户需要时沿当次条件读取原退款。失败按failure_class保留停止和对账边界,不重复申请或承诺到账。
72
52
 
73
53
  ## Agent Type / Host
74
54
 
@@ -1,13 +1,6 @@
1
1
  # `itpay services action`
2
2
 
3
- > **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The public package provides Buyer workflows; Seller authoring source is maintained separately.
4
-
5
- ## 范围与意义
6
-
7
- 记录用户或 Agent 对 Service Execution 的结构化动作,例如选择候选、批准、拒绝或取消。它不直接调用付费 Provider。
8
-
9
- **上游:** `services invoke/next` 返回需要 action。
10
- **下游:** 候选选择成功时直接进入服务端允许的下一动作;其他动作通过更新后的 `services next` 恢复。
3
+ 只记录当前执行明确允许的结构化选择、批准、拒绝或取消,不直接调用付费供应商。使用返回的完整输入模板;真实委托由 Agent 如实转述,不冒充 human。
11
4
 
12
5
  ## 语法与参数
13
6
 
@@ -36,36 +29,14 @@ itpay services action <service_execution_id> --action <action_type>
36
29
  | `workflow:expand_search` | 有界新增查询 | 仅在扩展暂停(`expansion_status=paused`)时可用;必须带服务端下发的 `action_request_id`(`pa_…`)与 `expected_query_revision`,一轮一柄、用完作废。 |
37
30
  | `workflow:refine_preferences` | 无(本地重排) | 用 `--input-json` 提交偏好补丁,对已保存证据重排序。 |
38
31
  | `workflow:stop_search` | 无 | 停止未发送的扩展任务;不影响已开始或已完成的出票。 |
39
- | `select_journey` | 无 | 用户亲自选定用 `--actor-type human`;用户已明确委托按规则代选用 `--actor-type agent --input selection_mode=delegated`。两者都带服务端返回的 `journey_id`,仅记录选择,后续购买仍走既有报价与受保护 Checkout。 |
32
+ | `select_journey` | 无 | 用户亲自选定用 `--actor-type human`;用户已明确委托按规则代选用 `--actor-type agent --input selection_mode=delegated`。两者都带服务端返回的 `journey_id`,仅记录选择,后续购买使用当前完整 purchase 确认与官方页面。 |
40
33
 
41
34
  同一 `action_request_id` 相同内容重放返回原受理结果;相同 ID 不同内容会被判冲突。过期 `expected_query_revision` 的新动作被拒绝。
42
35
 
43
- ## 标准输出
44
-
45
- ```json
46
- {
47
- "status": "candidate_selected",
48
- "result": {
49
- "service_execution_id": "<id>",
50
- "candidate": { "rank": 2, "title": "<title>" },
51
- "checkout": {
52
- "capability_id": "<paid_capability_id>",
53
- "price": { "amount_minor": 50, "currency": "CNY" },
54
- "delivery_email_required": true
55
- }
56
- },
57
- "instruction": "已选择 <title>。后续服务尚未购买。只向用户说明继续购买的价格和邮箱用途,请确认是否购买并提供邮箱,然后停止。用户明确同意并提供真实邮箱前,Agent 不执行 next.command,也不创建新的服务或付款页面。",
58
- "next": { "command": "itpay services checkout <id> --capability <capability_id> --email <email> --json", "reason": "仅在用户明确同意价格并提供真实邮箱后执行" },
59
- "recovery": [{ "command": "itpay services next <id> --json", "reason": "重新读取服务端允许的动作" }]
60
- }
61
- ```
62
-
63
- `next` 来自 action 写入后重新读取的类型化 `allowed_actions`,不是 CLI 根据服务名猜测。普通单 Execution 的付费 continuation 使用 `services checkout`;候选选择本身不代表用户已经同意购买。没有合法动作时返回 `next: null`。非候选 action 仍返回 `action_recorded` 并引导 `services next`。
64
-
65
- rank 不存在、属于旧结果集或其他 Execution、action 不允许、status 非法时均不写 action;返回结构化错误并且只引导同一 Execution 的 `services next`。不得新建 Execution、重新 invoke 或构造候选 ID。相同候选重试幂等;同一结果集改选另一个候选返回冲突,不覆盖已批准事实。
36
+ ## 当前输出与购买
66
37
 
67
- 订票类 `workflow:confirm_booking` 动作要求嵌套输入(`passengers`、`seat_type`、逐乘客 `seat_preferences`、`draft_revision`、`notice_version` 等),一律经 `--input-json <file>` 提交完整 JSON 对象。`draft_revision` 必须等于 `services next` 投影的 `context.review.draft_revision`;服务端拒绝 `booking_review_changed` 时重新读取后重试,不得自行递增。乘客姓名、证件号等身份信息不在此提交,仍由受保护 Checkout 页收集。
38
+ 候选选择成功时,若当前合同支持购买准备,直接返回原执行的完整 purchase review。已有明确同意覆盖当前主体、范围、人数、价格策略和条款就沿用;仅补缺失同意,不要求重复确认或先给邮箱。联系资料在受保护官方页填写。
68
39
 
69
- ## Agent Type / Host
40
+ `next` 必须是当前适用的完整命令;仍有待填字段则是 `executable:false` 的完整 `file_content` 模板。没有合法动作就停止。普通购买不由 Agent 串联 quote、approve、cart 或 services checkout。
70
41
 
71
- 所有正式支持的 Local Agent Type 行为相同。真实条款同意仍需人确认;在用户已明确委托选择且规则未变时,Agent 可执行返回的委托选择动作,不得冒充 human。
42
+ 同一选择、报价、付款未知和已有批准的幂等保护由服务端执行;不能新建 execution、猜候选ID或覆盖批准事实。订票技术修正使用原 selection 和当前 review;仅代码写法修正且购买内容未变时沿用已有真实同意。草稿实质变化或真实同意缺失才补确认,不自行递增 revision。旅客身份资料只在受保护页面提交。
@@ -1,119 +1,22 @@
1
- # `itpay services checkout`
1
+ # itpay services checkout
2
2
 
3
- > **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The public package provides Buyer workflows; Seller authoring source is maintained separately.
3
+ 恢复已知服务的原 Checkout 时,使用当次返回的具体命令。普通已选服务通过 services purchase 准备官方入口,不手工编排报价和购物车。
4
4
 
5
- ## 服务报价的批准边界
5
+ 参数以 --help 及当前模板为准。保留同意范围、付款期限和未知结果保护;展示权威原入口,不创建替代购买。缺材料/过期/存储故障按当前返回处理,不自行切换路径。
6
6
 
7
- 服务支持的 Quote/Cart/Checkout 共用服务端范围校验。缺少有效价格批准时返回完整 `approve_purchase` 模板,默认 `user_approved:false`;Agent 只在真实会话已同意当前主体、内容、价格或预算和条款时提交 true。选择候选或完成席别 review 不代替价格批准。同条件有效批准复用,已有 Checkout/未知付款先恢复原单,不补事后批准或创建替代订单。
8
-
9
- ## 范围与意义
10
-
11
- 为单个 Service Execution 快速创建或恢复 Checkout,并按 Host 向人交接付款入口。它是 `services quote -> cart add --quote -> buy --cart` 的单项快捷方式,必须复用相同的 Quote、Cart 和 Checkout Use Case。
12
-
13
- 未注册/未登录用户不要求先执行 `itpay auth login`(Path B):官方 checkout 页内完成必要的钱包认证、创建或复用账号并取得页面权限;人在页面上确认旅客、通知联系方式和最终报价后付款。支付确认沿用既有设备绑定机制,不再独立绑定。checkout 内完成账号认证不等于账号已通过手机号验证;钱包显示名、账号手机号与乘车人身份互相独立。
14
-
15
- **通知联系方式(铁路单):** 订单级联系策略要求至少一个可用通道——邮箱,或在 checkout 页内经验证的大陆手机号(order-contact 验证码只校验收件人,不创建/合并登录身份)。有效邮箱即可独立完成 checkout;SMS 不是必填项,SMS 能力未配置时不得阻塞邮箱通道。该策略仅适用于铁路订单,企知道等既有服务的联系策略不变。乘客证件手机号、账号登录手机号与通知收件人是三个独立事实,互不替代。
16
-
17
- **上游:** `services next` 返回的 `prepare_quote` capability 和已验证输入。铁路购票执行必须先通过 `workflow:confirm_booking` review(见 `services next` 的 `booking_review_required`),后端才生成可支付报价;review 开放期间不创建 Checkout。
18
- **下游:** 人完成 Checkout,随后 `checkout` 或 `services next`。
19
-
20
- ## 语法与参数
21
-
22
- ```bash
23
- itpay services checkout <service_execution_id> --capability <capability_id>
24
- [--input <key=value> ...] [--email <delivery_email>]
25
- [--host <host>] [--target <target>] [--locale <zh-CN|en>]
26
- [--qr-format <format>] [--qr-file <path>] [--json]
27
-
28
- itpay services checkout <service_execution_id> --resume
29
- [--host <host>] [--target <target>] [--locale <zh-CN|en>] [--json]
30
- ```
31
-
32
- 创建时 `--capability` 必填。最终 locked input 必须满足 capability schema:显式输入来自 `--input`,服务端也可以按已发布 contract 从当前 Execution 的已批准 action 解析输入。解析后仍缺字段时,必须在创建 Quote、Cart 或 Checkout 前失败。只有 `delivery_email_required=true` 才要求 `--email`,并必须先向用户解释邮箱用于发送可 claim 的交付链接。`--resume` 复用同一个 Checkout 并轮换 handoff token,不再索取输入或邮箱。
33
-
34
- ## 标准输出
35
-
36
- ```json
37
- {
38
- "status": "human_checkout_required",
39
- "result": {
40
- "service_execution_id": "<id>",
41
- "checkout_id": "<checkout_id>",
42
- "capability_id": "<logical_capability_id>",
43
- "locked_input": { "<required_key>": "<value>" },
44
- "amount": "<amount> <currency>"
45
- },
46
- "handoff": { "url": "<checkout_url>", "qr_local_path": "<desktop_optional_path>", "qr_image_url": "<chat_optional_absolute_https_png>", "markdown": "<desktop_optional_markdown>", "agent_action": "<openclaw_telegram_optional_native_message_action>" },
47
- "instruction": "<exact_agent_type_instruction>",
48
- "next": { "command": "itpay checkout --id <checkout_id> --token <display_token> --json", "reason": "仅在用户完成付款操作或要求查询后,读取同一 Checkout 的权威状态" },
49
- "recovery": []
50
- }
51
- ```
52
-
53
- `capability_id` 是 service contract 中 Agent 可调用的逻辑 ID,不是 `scc_...` 数据库记录 ID。`locked_input` 是后端按 capability policy 最终解析并校验后的输入,不由 CLI 根据服务名称推断。
54
-
55
- 普通文本输出保持同一事实顺序。桌面 Host 输出可直接转发的 `handoff.markdown`;终端 Host 额外渲染一个可扫码终端二维码;`--json` 不内嵌终端二维码或图片二进制。
56
-
57
- 不得返回 quote lock、单独 token、重复 next actions、镜像路径数组或渲染器内部原因。缺输入、缺必填邮箱、phase 不允许时不得创建任何付款资源。恢复时 token 失效应重发同一 Checkout handoff,不创建第二个 Checkout。
58
-
59
- ## 异常处理
60
-
61
- 缺少付费 capability 输入:
62
-
63
- ```json
64
- {
65
- "status": "error",
66
- "error": { "code": "capability_input_invalid", "message": "missing required capability input: <field>" },
67
- "instruction": "补齐付费 capability 的 required_input;本次没有创建 quote、Checkout 或订单。",
68
- "next": null,
69
- "recovery": [{ "command": "itpay services checkout <service_execution_id> --capability <capability_id> --input <field>=<value> --json", "reason": "提交完整且会被锁定的服务输入" }]
70
- }
71
- ```
72
-
73
- 缺少交付邮箱:
74
-
75
- ```json
76
- {
77
- "status": "error",
78
- "error": { "code": "delivery_email_required", "message": "delivery email is required before creating this service checkout" },
79
- "instruction": "该 capability 的交付链接会发送到用户邮箱;先向用户说明用途并询问邮箱,不要代填。",
80
- "next": null,
81
- "recovery": [{ "command": "itpay services checkout <service_execution_id> --capability <capability_id> --email <email> --json", "reason": "使用用户提供的邮箱创建 Checkout" }]
82
- }
83
- ```
84
-
85
- ## Agent Type / Host
86
-
87
- | Agent Type | Instruction |
88
- |---|---|
89
- | `codex-desktop` | `handoff={url,qr_local_path,markdown}`;把 `handoff.markdown` 原样发送到当前桌面对话。 |
90
- | `codex-cli` | `handoff={url}`;普通文本模式在用户可见终端渲染二维码。 |
91
- | `claude-code-desktop` | `handoff={url,qr_local_path,markdown}`;把 `handoff.markdown` 原样发送到当前桌面对话。 |
92
- | `claude-code-cli` | `handoff={url}`;普通文本模式在用户可见终端渲染二维码。 |
93
- | `workbuddy` | `handoff={url,agent_action}`;原样执行一次 `present_files(files=[url])` 打开完整渲染的 HTML Card Link,然后停止;不得检查或生成本地文件。 |
94
- | `zcode` | `handoff={url}`;立即用 ZCode 内置浏览器打开,然后停止;只有浏览器不可用时才展示同一个可点击链接。 |
95
- | `doubao-work` | `handoff={url,qr_image_url}`;在当前对话中展示手机直达收银台链接和官方二维码图片链接,说明金额后停止。 |
96
- | `kimi-code` | `handoff={url}`;复用标准 CLI 终端展示。 |
97
- | `openclaw` | 必须显式传 Host;Telegram 还必须传 OpenClaw 原生 Target,并返回必须原样执行的 `message` action;其他入口返回标准 `url,qr_image_url`。 |
98
-
99
- WorkBuddy 的准确 instruction 语义必须完整包含:
7
+ ## 当前参数
100
8
 
101
9
  ```text
102
- Backend 尚未确认付款。立即严格按 handoff.agent_action.tool 和 handoff.agent_action.arguments 原样执行一次,在右侧打开 handoff.url;确认工具调用成功后说明金额,然后停止等待。若工具失败,只发送原始 handoff.url,报告未自动打开并停止。不要用 present_files 打开本地文件或二维码 PNG,不要下载或重建二维码,不要调用 pay,不要创建新 Checkout、Payment Intent 或 Execution。只有用户明确表示已付款或要求查询状态时,才执行 next.command;用户的话不是付款成功证明。
10
+ --capability <capability_id>
11
+ --input <key=value> input to lock into the paid service quote
12
+ --email <delivery_email>
13
+ --resume reissue the existing checkout handoff without
14
+ --host <host> client host (terminal, codex, telegram, feishu,
15
+ --target <target> chat id / channel id / open id for IM hosts
16
+ --qr-format <format> unicode|utf8|ansi|terminal
17
+ --qr-file <path> explicit QR file path
18
+ --locale <locale> payment card language: zh-CN|en (default:
19
+ --json output JSON instead of terminal text
103
20
  ```
104
21
 
105
- ZCode 的准确 instruction 语义必须完整包含:
106
-
107
- ```text
108
- Backend 尚未确认付款。立即用 ZCode 内置浏览器打开 handoff.url,让用户完成付款;确认已发起打开后说明金额,然后停止等待。不要只粘贴文字链接,不要下载、解析或重建二维码,不要创建新 Checkout、Payment Intent 或 Execution。只有内置浏览器明确不可用时,才展示同一个可点击 handoff.url。只有用户明确表示已付款或要求查询状态时,才执行 next.command;用户的话不是付款成功证明。
109
- ```
110
-
111
- Doubao Work 的准确 instruction 语义必须完整包含:
112
-
113
- ```text
114
- Backend 尚未确认付款。在当前豆包工作对话中展示两个有标签的官方入口:将 handoff.url 标为“手机直接打开收银台”,将 handoff.qr_image_url 标为“二维码图片(保存或用另一台设备扫码)”。说明金额后停止等待。不要解析或单独输出 URL credential,不要下载或重建二维码,不要调用 pay,不要创建新 Checkout、Payment Intent 或 Execution。只有用户明确表示已付款或要求查询状态时,才执行 next.command;用户的话不是付款成功证明。
115
- ```
116
-
117
- `--locale` 默认 `zh-CN`,可显式使用 `--locale en`。语言只影响 Card 渲染,不改变 Checkout、付款或恢复状态。
118
-
119
- OpenClaw 的 Host/Target 校验必须发生在读取 execution 后、创建 Checkout 前;校验失败不能调用 Checkout 创建接口。Telegram `agent_action.arguments.presentation` 只使用 `blocks.buttons`,其中 `📱 手机点这儿支付` 使用扁平 `url`,`📋 已授权给我读` 使用 `value=itp:grant_confirmed:<checkout_id>`。准确 instruction 必须要求 Agent 立即用原生 `message` tool 原样执行 `handoff.agent_action`,不得改写 Presentation、换工具或用普通回复冒充按钮已发送。收到该 callback 表示用户声明已在收银台授权读取;Agent 立即执行 `next.command` 查询同一 Checkout,再只按 Backend 返回的 `next.command` 进入同一 Execution grant 流程。callback 不包含 display token,也不证明付款或 grant active;Backend 未返回 `grant_active` 前不得读取结果。
22
+ `--input-json <file>` accepts the complete flat input returned in `file_content`; use it instead of `--input`, never together.