@itpay/cli 2.1.48 → 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 +277 -161
  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 -50
  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 -49
  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 +18 -55
  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 -43
  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 +1 -1
  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 +1 -1
  57. package/package.json +2 -4
  58. package/skills/itpay/SKILL.md +32 -147
  59. package/docs/agent/buyer/quickstart.json +0 -112
  60. package/docs/agent/buyer/rail-fast-checkout.json +0 -48
@@ -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
- 普通新服务使用 `services purchase` 完整确认与官方入口。此命令保留历史合同和高级兼容,为单个 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.
@@ -22,48 +22,13 @@ itpay services get <service_execution_id> [--json]
22
22
 
23
23
  命令使用当前签名 Agent Device session;可见范围由 Backend 按设备和已绑定 Buyer account 决定。
24
24
 
25
- ## 标准输出
25
+ ## 当前状态与恢复
26
26
 
27
- ```json
28
- {
29
- "status": "shown",
30
- "result": {
31
- "service_execution_id": "<id>",
32
- "service_id": "<service_id>",
33
- "status": "<status>",
34
- "phase": "<phase>",
35
- "current_capability_id": "<optional capability>",
36
- "updated_at": "<time>",
37
- "timeline": [
38
- {
39
- "sequence": 1,
40
- "step": "<public step>",
41
- "status": "<status>",
42
- "phase": "<phase>",
43
- "occurred_at": "<time>"
44
- }
45
- ],
46
- "delivery_mode": "<optional mode>"
47
- },
48
- "instruction": "时间线仅用于解释和恢复;按当前首选动作继续,不要重放已完成步骤。",
49
- "next": { "command": "<state-derived command>", "reason": "继续当前首选动作" },
50
- "recovery": [
51
- { "command": "itpay services events <service_execution_id> --json", "reason": "仅在需要完整诊断事件时使用" }
52
- ]
53
- }
54
- ```
55
-
56
- 当 execution 为 `failed`、`refunded` 或 `cancelled` 时,`next` 必须是 `null`;只允许通过 `services events` 诊断终止原因,不得建议重放 capability 或创建 Checkout。
57
-
58
- `timeline` 只保留最近 20 个公开节点;超过时增加 `timeline_truncated: true`。它不返回 event ID 或 `redacted_summary`。交付存在时可增加 `delivery_mode`;退款锁存在时增加 `access_locked` 和退款 ID/status,并优先返回锁定 instruction。
59
-
60
- 订票类 Execution 的 `workflow:confirm_booking` 待确认/待修订状态不在 timeline 中展开细节——行程、`seat_options` 与当前 `draft_revision` 一律通过 `services next` 的 `booking_review_required` 投影读取;`get` 只用于确认执行仍处于可继续状态。
61
-
62
- ## 异常处理
27
+ 返回原执行的安全状态、当前动作和最近20个公开节点;超出时 timeline_truncated=true。没有动作就停止,不从时间线推导重放步骤。需要诊断且当次明确建议时才读取 services events。
63
28
 
64
- 默认不返回原始 events、Provider metadata、内部 bindings、Arazzo workflow、capability schema、candidate hash、client context 或完整 payload。需要完整但仍经服务端脱敏的事件时才运行 `services events`。
29
+ 购买材料、完整 review 和待填输入使用当次返回的完整模板,不手拼字段。缺合同、材料过期、权限拒绝或读取失败按实际原因处理,不能自动切到旧购买链或创建替代执行。
65
30
 
66
- execution 不存在或不属于当前身份时保留不透明 `not_found`,只恢复到 `itpay services list --json`;不得通过错误差异探测其他账号。
31
+ 退款访问锁优先于交付;failed/refunded/cancelled 等终态不创建 Checkout。历史已交付记录不证明当前授权仍有效。默认不返回供应商原始数据、凭据、内部binding或完整事件DTO。
67
32
 
68
33
  ## Agent Type / Host
69
34
 
@@ -1,49 +1,11 @@
1
- # `itpay services`
1
+ # Service commands
2
2
 
3
- > **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. Seller-published workflows enter the same Buyer execution, Checkout, delivery, and refund state machine as ItPay services.
3
+ 发现公开服务与完整输入 → run原操作 → read-result/page读取保存结果 → 按委托选择 → purchase仅补必要同意 → 展示官方页面 → 读原订单。
4
4
 
5
- ## 命令范围
5
+ start的公开overview为定义发现;已有任务使用get/next。选择、输入、继续、购买及售后均以当前返回的完整模板和事实为准。CLI通用能力由锁定业务适配器解释,不按服务名称猜字段。明确多服务组合见cart-checkout;不是普通下单备用链。
6
6
 
7
- 操作通用 Service Execution。CLI 不知道某个服务的业务流程;它读取服务合同中的 capability、input schema、价格、交付模式和服务端 next action。
7
+ ## 当前参数
8
8
 
9
- **上游:** Catalog 的 `service_id`。
10
- **下游:** 免费能力、人工动作、付费 Checkout、Agent-visible 交付或 Vault 授权交付。
9
+ ```text
11
10
 
12
- ## 核心不变量
13
-
14
- - Execution 的边界由服务合同决定;铁路查询和购票使用不同 Execution,已有执行的等待与恢复保持原 ID。其他独立服务分别执行,其 Quote 可进入同一 Cart。
15
- - 任何 capability 输入都必须在状态写入、锁价、订单创建和 Provider 调用前通过 schema 校验。
16
- - `invoke` 只运行当前阶段允许且不需付款的 Agent-visible capability。
17
- - 依赖候选的付费 capability 必须继续来源 Execution;`action --candidate` 不能跨 Execution 搬运候选。
18
- - 普通已选服务使用 `services purchase` 读取完整确认、提交真实同意并交付官方页面;此操作不请求支付。
19
- - `services quote`、`cart add --quote`、`buy --cart` 保留为用户明确要求多服务组合的高级路径;旧 `services checkout` 保留已有执行兼容。
20
- - `agent_visible_result` 从 `services next` 读取;`vault_artifact` 只有人授权后才能 `read-result`。
21
-
22
- ## 子命令
23
-
24
- - [`start`](start.md)
25
- - [`run`](run.md)
26
- - [`invoke`](invoke.md)
27
- - [`action`](action.md)
28
- - [`quote`](quote.md)
29
- - [`purchase`](purchase.md)
30
- - [`checkout`](checkout.md)
31
- - [`list`](list.md)
32
- - [`get`](get.md)
33
- - [`next`](next.md)
34
- - [`read-result`](read-result.md)
35
- - [`events`](events.md)
36
-
37
- 直接运行 `itpay services` 显示 help。
38
-
39
- ## 语法、输出与异常
40
-
41
- ```bash
42
- itpay services --help
43
11
  ```
44
-
45
- 输出当前子命令:运行已发布服务使用 `run`,查询推进使用 `next`,选定后的完整购买确认使用 `purchase`,深度诊断才使用 `get/events`。未知子命令返回参数错误和本 help,不创建 Execution。
46
-
47
- ## Agent Type / Host
48
-
49
- 所有正式支持的 Local Agent Type 共享状态机;Agent Type 只影响身份归属和 Host instruction,不允许影响 quota 规则或服务能力。