@itpay/cli 2.1.34 → 2.1.40
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/dist/src/client/backend.js +5 -0
- package/dist/src/commands/aftercare.js +12 -0
- package/dist/src/commands/buy.js +12 -56
- package/dist/src/commands/cart.js +2 -0
- package/dist/src/commands/catalog.js +24 -9
- package/dist/src/commands/checkout_handoff.js +11 -99
- package/dist/src/commands/guidance.js +1 -184
- package/dist/src/commands/order.js +20 -2
- package/dist/src/commands/rail_catalog.js +1 -261
- package/dist/src/commands/readyz.js +2 -2
- package/dist/src/commands/refund.js +10 -54
- package/dist/src/commands/services/actions.js +133 -0
- package/dist/src/commands/services/commerce.js +197 -0
- package/dist/src/commands/services/lifecycle.js +418 -0
- package/dist/src/commands/services/results.js +130 -0
- package/dist/src/commands/services.js +14 -2613
- package/dist/src/main.js +81 -30
- package/dist/src/render/checkout_handoff.js +101 -0
- package/dist/src/render/checkout_plan.js +47 -0
- package/dist/src/services/adapter.js +1 -0
- package/dist/src/services/presentation.js +198 -0
- package/dist/src/services/rail/actions.js +51 -0
- package/dist/src/services/rail/adapter.js +27 -0
- package/dist/src/services/rail/aftercare.js +45 -0
- package/dist/src/services/rail/catalog.js +261 -0
- package/dist/src/services/rail/checkout.js +19 -0
- package/dist/src/services/rail/fulfillment.js +76 -0
- package/dist/src/services/rail/guide.js +110 -0
- package/dist/src/services/rail/invocation.js +54 -0
- package/dist/src/services/rail/page.js +76 -0
- package/dist/src/services/rail/pagination.js +6 -0
- package/dist/src/services/rail/query.js +71 -0
- package/dist/src/services/rail/readers.js +107 -0
- package/dist/src/services/rail/reading.js +125 -0
- package/dist/src/services/rail/recovery.js +51 -0
- package/dist/src/services/rail/results.js +378 -0
- package/dist/src/services/rail/review.js +268 -0
- package/dist/src/services/rail/saved.js +49 -0
- package/dist/src/services/rail/wait.js +11 -0
- package/dist/src/services/registry.js +31 -0
- package/dist/src/services/schema.js +21 -0
- package/dist/src/services/shared/envelope.js +184 -0
- package/dist/src/services/shared/input.js +39 -0
- package/dist/src/services/shared/pagination.js +28 -0
- package/dist/src/services/shared/platform.js +365 -0
- package/dist/src/services/shared/refund.js +40 -0
- package/dist/src/services/shared/workflow.js +28 -0
- package/dist/src/state/account_auth.js +25 -10
- package/dist/src/state/config.js +2 -2
- package/docs/agent/buyer/cart-checkout.json +2 -1
- package/docs/agent/buyer/catalog-list.json +6 -4
- package/docs/agent/buyer/identity-and-sessions.json +3 -2
- package/docs/agent/buyer/install-and-setup.json +8 -3
- package/docs/agent/buyer/orders-refunds.json +14 -5
- package/docs/agent/buyer/payment-flow.json +2 -1
- package/docs/agent/buyer/quickstart.json +3 -2
- package/docs/agent/buyer/rail-booking.json +38 -24
- package/docs/agent/buyer/service-feedback.json +2 -2
- package/docs/cli-reference/commands/aftercare.md +15 -0
- package/docs/cli-reference/commands/cart/add.md +4 -0
- package/docs/cli-reference/commands/cart/next.md +4 -0
- package/docs/cli-reference/commands/readyz.md +2 -50
- package/docs/cli-reference/commands/services/checkout.md +4 -0
- package/docs/cli-reference/commands/services/next.md +8 -35
- package/docs/cli-reference/commands/services/quote.md +1 -1
- package/docs/cli-reference/commands/services/run.md +8 -12
- package/docs/cli-reference/commands/services/start.md +3 -1
- package/docs/cli-reference/conventions.md +1 -1
- package/docs/cli-reference/index.md +2 -0
- package/package.json +4 -3
- package/skills/itpay/SKILL.md +37 -25
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"The agent needs to confirm its stable runtime identity and default output Host."
|
|
11
11
|
],
|
|
12
12
|
"commands": [
|
|
13
|
+
{
|
|
14
|
+
"intent": "read this installed package Skill before network checks",
|
|
15
|
+
"command": "itpay skill show itpay --json",
|
|
16
|
+
"success_signal": "complete packaged Skill is read; the same version need not be read twice"
|
|
17
|
+
},
|
|
13
18
|
{
|
|
14
19
|
"intent": "list supported Agent Types",
|
|
15
20
|
"command": "itpay install --json",
|
|
@@ -32,12 +37,12 @@
|
|
|
32
37
|
}
|
|
33
38
|
],
|
|
34
39
|
"agent_rules": [
|
|
35
|
-
"For first setup
|
|
40
|
+
"For first setup, read the complete Skill from this installed package before network checks. Select the actual Agent Type once through install and retain the same launcher and Backend. Do not reread the same version Skill, repeat initialization for ordinary tasks, or start login or business to prove setup.",
|
|
36
41
|
"After setup, tell the human only that ItPay is ready; never ask them to run setup commands or explain technical setup steps.",
|
|
37
42
|
"Use the CLI distribution already provided by the current npm package, Skill, or plugin; update only through that distribution's own instructions.",
|
|
38
43
|
"Production defaults to https://app.itpay.ai. Testing may set ITPAY_BACKEND_URL to the exact official URL the configured official test Backend only when explicitly requested; follow the CLI allowlist.",
|
|
39
|
-
"If
|
|
40
|
-
"
|
|
44
|
+
"If Backend compatibility cannot be verified, stop this round. minimum_cli_version is a protocol floor, not a verified matching artifact. Ask the maintainer for the matching distribution; do not guess a version or downgrade.",
|
|
45
|
+
"Only install a replacement when its exact artifact and Backend contract have been verified; then reread that package Skill. Never change Agent Type or Device identity to recover compatibility.",
|
|
41
46
|
"Use one exact type: codex-desktop, codex-cli, claude-code-desktop, claude-code-cli, workbuddy, zcode, doubao-work, kimi-code, or openclaw.",
|
|
42
47
|
"For compatibility, a global --agent-type codex declaration is normalized immediately to codex-desktop; all registration, output, and returned commands use codex-desktop. Never generate the alias, and do not use codex as an install target.",
|
|
43
48
|
"One local private key is reused, while Device registrations and quota lineage remain separate for app.itpay.ai, sandbox.itpay.ai and dev.itpay.ai.",
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"command": "itpay --agent-type <agent_type> order <order_id> --json",
|
|
17
17
|
"success_signal": "one compact owned-order summary and one current next step are returned"
|
|
18
18
|
},
|
|
19
|
+
{
|
|
20
|
+
"intent": "read railway refund/change targets and complete current input templates",
|
|
21
|
+
"command": "itpay --agent-type <agent_type> aftercare list --order <order_id> --json",
|
|
22
|
+
"success_signal": "safe original itinerary, available leg/passenger targets, requests and full refund/change templates"
|
|
23
|
+
},
|
|
19
24
|
{
|
|
20
25
|
"intent": "request a refund",
|
|
21
26
|
"command": "itpay --agent-type <agent_type> refund create --order <order_id> --reason buyer_requested --json",
|
|
@@ -45,9 +50,12 @@
|
|
|
45
50
|
"Read this order’s current refund policy. Railway return depends on supplier ticket facts and may require manual review; platform refund status alone does not prove a train ticket was returned.",
|
|
46
51
|
"A refund request freezes all delivery paths and revokes existing grants immediately.",
|
|
47
52
|
"Cancellation or rejection follows the returned order policy and never reactivates an old grant automatically.",
|
|
48
|
-
"Use get
|
|
53
|
+
"Use get after interruption; explicit watch defaults to a bounded 20-second window and returns on change or manual attention. Do not restart watch automatically or infer success from elapsed time.",
|
|
49
54
|
"Never switch CLI/MCP lanes or identities to recover an order or refund error.",
|
|
50
|
-
"A read-only MCP Agent may explain policy and order facts, but directs refund actions to the ItPay Dashboard or a full Local CLI Agent."
|
|
55
|
+
"A read-only MCP Agent may explain policy and order facts, but directs refund actions to the ItPay Dashboard or a full Local CLI Agent.",
|
|
56
|
+
"Railway refund or manual change: use aftercare list for structured ticket targets. Match the user’s explicit legs/passengers; only ask when that scope is missing. Explain the scope and manual handling before create using the returned complete JSON. No supplier reference or amount is needed from the user.",
|
|
57
|
+
"Aftercare acceptance, supplier completion and platform money status are separate. Only real scope consent may set user_confirmed_scope=true. A concrete change proposal requires fresh approval of the current proposal revision and fees; the original purchase consent cannot approve it. This release has no automatic change payment link.",
|
|
58
|
+
"Partial refunds do not mean every ticket was returned. The platform delivery lock remains; use the safe aftercare journey for remaining-ticket facts, never promise validity from historical issued state. Protected ticket numbers still require account authorization."
|
|
51
59
|
],
|
|
52
60
|
"human_explanations": {
|
|
53
61
|
"payment_verified": "Payment is confirmed and the Order is recorded. Do not ask the human to pay again; continue the same delivery.",
|
|
@@ -56,11 +64,11 @@
|
|
|
56
64
|
"refund_automatic": "The request is on the automatic policy path because the delivery is reported unconsumed; only the final server status proves success.",
|
|
57
65
|
"refund_manual": "The request requires human review, commonly because delivery was consumed. Manual review is not a rejection.",
|
|
58
66
|
"refund_unknown": "The payment channel outcome is unknown. Delivery stays locked while ItPay reconciles; never submit or replay another refund.",
|
|
59
|
-
"refund_succeeded": "ItPay confirms
|
|
67
|
+
"refund_succeeded": "ItPay confirms this request’s money refund succeeded. Verify its scope and the remaining-ticket facts separately; only the order’s full refunded state establishes all platform money returned."
|
|
60
68
|
},
|
|
61
69
|
"forbidden": [
|
|
62
70
|
"Do not fabricate Buyer sessions, Device IDs or payment references.",
|
|
63
|
-
"Do not
|
|
71
|
+
"Do not consume locked platform delivery; authorized safe remaining-ticket status reads are separate.",
|
|
64
72
|
"Do not claim a refund succeeded before the Refund Owner says succeeded.",
|
|
65
73
|
"Do not promise an unconditional refund, instant arrival, or a channel result that ItPay has not confirmed.",
|
|
66
74
|
"Do not blame the human for a Provider, delivery, platform, or payment-channel failure."
|
|
@@ -99,5 +107,6 @@
|
|
|
99
107
|
"status_read": "Use the current returned reader for ticket state; order summaries do not expose per-leg notification delivery records. Do not infer a sent or delivered notification.",
|
|
100
108
|
"truthfulness": "Provider acceptance is not delivery; an uncertain send outcome is reconciled, not silently retried. A notification failure never changes ticket or refund state; report it as a delivery detail, not an order failure.",
|
|
101
109
|
"unavailable": "If SMS is not configured or a recipient is unverified, email still satisfies the contact policy — never present an unverified phone as enabled."
|
|
102
|
-
}
|
|
110
|
+
},
|
|
111
|
+
"consumption_and_access": "Platform content consumption is not train usage; access_locked freezes platform delivery and does not prove ticket validity. Read actual refund/ticket facts; a future departure does not guarantee eligibility."
|
|
103
112
|
}
|
|
@@ -66,5 +66,6 @@
|
|
|
66
66
|
"付款后",
|
|
67
67
|
"不要重复付款",
|
|
68
68
|
"支付确认"
|
|
69
|
-
]
|
|
69
|
+
],
|
|
70
|
+
"purchase_consent": "Candidate selection is not price approval. Service-backed quote/cart/checkout requires a current scoped approve_purchase record; use the complete server template, default false. Only genuine matching approval allows true; material price/subject/terms changes invalidate it. Restore an existing Checkout before creating anything."
|
|
70
71
|
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"previous_content": "Use vault list, optionally with the subject as --query.",
|
|
26
26
|
"purchase_history": "Use orders.",
|
|
27
27
|
"refund_or_paid_problem": "Resume the known Order or Refund before creating anything new.",
|
|
28
|
-
"service_feedback": "Finish the original order outcome first, then submit one safe Agent postmortem; include a rating or comment only when the human explicitly gives it.",
|
|
28
|
+
"service_feedback": "Finish the original order outcome first, then optionally submit one safe Agent postmortem; include a rating or comment only when the human explicitly gives it.",
|
|
29
29
|
"ambiguous": "Ask whether the human wants an earlier purchase or a new query before calling ItPay.",
|
|
30
30
|
"railway": "Known railway intent: itpay docs show rail-booking. Read once, then follow its Exact/Smart route."
|
|
31
31
|
},
|
|
@@ -107,5 +107,6 @@
|
|
|
107
107
|
"target",
|
|
108
108
|
"input"
|
|
109
109
|
],
|
|
110
|
-
"reading_results": "Read normal CLI text directly, or parse the complete --json envelope with the host file reader. If saving stdout to a file, first check the command exit code, then read the whole file with cat or the existing file tool. Keep stderr separate; do not use head, tail, regex or a custom script to recover truncated results. Write complex input as a small JSON file and use --input-json."
|
|
110
|
+
"reading_results": "Read normal CLI text directly, or parse the complete --json envelope with the host file reader. If saving stdout to a file, first check the command exit code, then read the whole file with cat or the existing file tool. Keep stderr separate; do not use head, tail, regex or a custom script to recover truncated results. Write complex input as a small JSON file and use --input-json.",
|
|
111
|
+
"purchase_consent": "Candidate selection is not price approval. Service-backed quote/cart/checkout requires a current scoped approve_purchase record; use the complete server template, default false. Only genuine matching approval allows true; material price/subject/terms changes invalidate it. Restore an existing Checkout before creating anything."
|
|
111
112
|
}
|
|
@@ -11,18 +11,20 @@
|
|
|
11
11
|
"goal_and_overview": {
|
|
12
12
|
"route": "Understand endpoints and constraints → 2–4 line route brief → Exact or Smart → read enough saved results for the goal → select under delegation → missing real consent only → official payment entry; show and stop.",
|
|
13
13
|
"query_vs_booking": "Exact/Smart returns a query execution and saved evidence. Booking creates a separate execution from a server-issued selection; it is not a repeated search.",
|
|
14
|
-
"comparison": "If the human only asked to compare, answer within the searched scope and stop without a buy-or-not question. Reuse already-read unchanged Skill/docs in this context; do not repeat install/readyz/docs at each step. A clear purchase delegation permits selection under their rules, subject to required human terms."
|
|
14
|
+
"comparison": "If the human only asked to compare, answer within the searched scope and stop without a buy-or-not question. Reuse already-read unchanged Skill/docs in this context; do not repeat install/readyz/docs at each step. A clear purchase delegation permits selection under their rules, subject to required human terms.",
|
|
15
|
+
"public_entry": "One public service itpay-rail declares query_exact, query_smart and prepare_purchase. Query, booking, Checkout and order remain separate identities. Legacy IDs are only for recovering their pinned historical executions.",
|
|
16
|
+
"price_approval": "Choosing a candidate or confirming seat/whole-journey terms is not approving price. Read the current scoped approve_purchase template after quote; record true only for genuine matching exact-price or capped-budget approval, or an explicitly authorized official-page confirmation. Reuse matching approval; never fabricate it."
|
|
15
17
|
},
|
|
16
18
|
"flow_at_a_glance": [
|
|
17
19
|
{
|
|
18
20
|
"step": "search Exact",
|
|
19
|
-
"command": "itpay services run itpay-rail
|
|
21
|
+
"command": "itpay services run itpay-rail --operation query_exact --input-json <query-file> --json",
|
|
20
22
|
"returns": "one station-pair query execution, resolved scope and either useful results or a same-execution wait action",
|
|
21
23
|
"next": "follow the current next command when still working; compare results and stop if the request is satisfied"
|
|
22
24
|
},
|
|
23
25
|
{
|
|
24
26
|
"step": "search Smart",
|
|
25
|
-
"command": "itpay services run itpay-rail
|
|
27
|
+
"command": "itpay services run itpay-rail --operation query_smart --input-json <query-file> --json",
|
|
26
28
|
"returns": "one broader planning execution, observed coverage and either useful results or a same-execution wait action",
|
|
27
29
|
"next": "follow the current next command when still working; compare results and stop if the request is satisfied"
|
|
28
30
|
},
|
|
@@ -40,7 +42,7 @@
|
|
|
40
42
|
},
|
|
41
43
|
{
|
|
42
44
|
"step": "book",
|
|
43
|
-
"command": "itpay services run itpay-rail
|
|
45
|
+
"command": "itpay services run itpay-rail --operation prepare_purchase --input-json <file> --json",
|
|
44
46
|
"returns": "a separate booking execution using the returned selection token, seat code and party size",
|
|
45
47
|
"next": "follow its review or waiting action on that same booking execution"
|
|
46
48
|
},
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
"step": "review",
|
|
49
51
|
"command": "itpay services next <booking_execution_id> --json",
|
|
50
52
|
"returns": "current review revision, material terms and a non-executable confirm_booking input_template",
|
|
51
|
-
"next": "submit the returned actor-type
|
|
53
|
+
"next": "submit the returned actor-type agent template only after genuine consent; reuse an unchanged explicit consent for code-only correction"
|
|
52
54
|
},
|
|
53
55
|
{
|
|
54
56
|
"step": "checkout",
|
|
@@ -81,39 +83,44 @@
|
|
|
81
83
|
},
|
|
82
84
|
"input_and_expected_result": {
|
|
83
85
|
"exact": {
|
|
84
|
-
"command": "itpay services run itpay-rail
|
|
86
|
+
"command": "itpay services run itpay-rail --operation query_exact --input-json <query-file> --json",
|
|
85
87
|
"example": {
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
"input": {
|
|
89
|
+
"origin": "<已核实出发站>",
|
|
90
|
+
"destination": "<已核实到达站>",
|
|
91
|
+
"travel_date": "<用户出行日期 YYYY-MM-DD>"
|
|
92
|
+
}
|
|
89
93
|
},
|
|
90
94
|
"contract": "Only origin, destination and travel_date are accepted. Use station names, not an undocumented station-code field. Filter time, seat and quantity against returned rows. Date is illustrative; use the actual requested queryable date."
|
|
91
95
|
},
|
|
92
96
|
"smart": {
|
|
93
|
-
"command": "itpay services run itpay-rail
|
|
97
|
+
"command": "itpay services run itpay-rail --operation query_smart --input-json <query-file> --json",
|
|
94
98
|
"example": {
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
+
"input": {
|
|
100
|
+
"endpoints": {
|
|
101
|
+
"origin": {
|
|
102
|
+
"kind": "area",
|
|
103
|
+
"text": "<用户出发市县镇完整名称>"
|
|
104
|
+
},
|
|
105
|
+
"destination": {
|
|
106
|
+
"kind": "station",
|
|
107
|
+
"text": "<已核实到达站名>"
|
|
108
|
+
}
|
|
99
109
|
},
|
|
100
|
-
"
|
|
101
|
-
|
|
102
|
-
"text": "<已核实到达站名>"
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
"travel_date": "<用户出行日期 YYYY-MM-DD>"
|
|
110
|
+
"travel_date": "<用户出行日期 YYYY-MM-DD>"
|
|
111
|
+
}
|
|
106
112
|
},
|
|
107
113
|
"contract": "The current published input_schema is authoritative: use endpoints only when it exposes endpoints. Each side independently accepts kind area/place/station and a full text; fill kind when supported by endpoint understanding; omit it only when the object meaning is clear but its category genuinely awaits verification, explicitly recorded in the brief. An unknown city is not resolved by omitting kind. A complete named place is legal; coordinates are optional. Area centers choose nearby stations without claiming door-to-door ground travel; place uses verified POI/coordinates when available; station locks exactly one verified railway station and does not mean the traveler is already there. All nine origin/destination combinations follow this same rule. Province-only areas need a narrower location. Never mix endpoints with legacy origin/destination or send a station lock/confirmed flag. Adult passengers is an integer 1–5. arrive_before maps to arrive_by; conflicting aliases are rejected. preference_context is unsupported."
|
|
108
114
|
},
|
|
109
115
|
"result": "Read the resolved station pair or area scope, observed coverage, complete compact train rows, fare/inventory evidence and stable references. The recommendation card is not the full catalog. Unknown cost and unverified address ground facts remain unknown. Eligible means usable, not equally preferable. Prefer existing default_layer, roles, dominance and tradeoffs; show at most three meaningful representatives. A same-arrival, earlier-departing and more expensive dominated option stays in the saved catalog rather than taking the first screen.",
|
|
110
116
|
"waiting": "Use the same execution and returned bounded wait command. next is a read; background work may still proceed. Do not resubmit, sleep/get/events repeatedly, or reread the whole guide.",
|
|
111
|
-
"followup": "Read the saved result for the original execution. Smart: itpay services read-result <execution_id> --snapshot <snapshot_id> --json. Exact: use its returned saved-result reader. Read the relevant same-snapshot pages first; unread does not mean nonexistent. Do not automatically enumerate every theoretical combination. For a new Smart query, restore the original area/place/station intent, passengers, deadlines and preferences; an Exact pair is verified evidence, not proof of user station locks. Only a user-locked station change or scope expansion needs new consent. After a changed endpoint or date, supply the original intent and a same-owner reuse_from reference to an unexpired snapshot; unchanged resolved endpoints and matching fresh station-pair facts may be reused. Date change never reuses old inventory. Preference, party-size or deadline changes within the same scope use refine_preferences on the existing plan. Planning deadline does not erase saved facts; an old selection token is not refreshed by rereading. For expiry, use only the server safe fresh-query template once within the original authorization, preserving all conditions and omitting reuse_from; it may consume query quota. Existing or unknown purchases resume the same booking/order, never new queries. Refresh does not guarantee inventory or original price; confirm materially changed terms. Change to a named station: kind station with matching text/code. Original-station vicinity: kind place with verified station text, remove station_code, resolve normally or use verified POI/coordinates (existing 30 km/5 candidates). Whole city only with explicit consent: kind area with full administrative name, remove POI/location/station_code. Preserve date, passengers, time limits and preferences; refuse cross-owner reuse. The public Smart input does not expose overnight layover. A home or specific address remains the destination; nearby railway stations are candidates, never implicit station locks. Report the rail arrival station separately from any unknown last-mile connection. Preserve the endpoint brief; update only affected facts. A terminal location failure follows its explicit complete new-query template only after new evidence."
|
|
117
|
+
"followup": "Read the saved result for the original execution. Smart: itpay services read-result <execution_id> --snapshot <snapshot_id> --json. Exact: use its returned saved-result reader. Read the relevant same-snapshot pages first; unread does not mean nonexistent. Do not automatically enumerate every theoretical combination. For a new Smart query, restore the original area/place/station intent, passengers, deadlines and preferences; an Exact pair is verified evidence, not proof of user station locks. Only a user-locked station change or scope expansion needs new consent. After a changed endpoint or date, supply the original intent and a same-owner reuse_from reference to an unexpired snapshot; unchanged resolved endpoints and matching fresh station-pair facts may be reused. Date change never reuses old inventory. Preference, party-size or deadline changes within the same scope use refine_preferences on the existing plan. Planning deadline does not erase saved facts; an old selection token is not refreshed by rereading. For expiry, use only the server safe fresh-query template once within the original authorization, preserving all conditions and omitting reuse_from; it may consume query quota. Existing or unknown purchases resume the same booking/order, never new queries. Refresh does not guarantee inventory or original price; confirm materially changed terms. Change to a named station: kind station with matching text/code. Original-station vicinity: kind place with verified station text, remove station_code, resolve normally or use verified POI/coordinates (existing 30 km/5 candidates). Whole city only with explicit consent: kind area with full administrative name, remove POI/location/station_code. Preserve date, passengers, time limits and preferences; refuse cross-owner reuse. The public Smart input does not expose overnight layover. A home or specific address remains the destination; nearby railway stations are candidates, never implicit station locks. Report the rail arrival station separately from any unknown last-mile connection. Preserve the endpoint brief; update only affected facts. A terminal location failure follows its explicit complete new-query template only after new evidence.",
|
|
118
|
+
"public_envelope": "New public operation files contain input plus, for prepare_purchase, the exact continuation supplied by saved result detail. Do not invent source execution/snapshot IDs. Historical executions use their own pinned schema."
|
|
112
119
|
},
|
|
113
120
|
"select_and_book": {
|
|
114
121
|
"delegation": "Apply existing seat/price/delegation rules. Exact fastest requires enough coverage to compare the station-pair candidates; without ordering/coverage evidence the first page is not proof. Smart can present up to three eligible representatives once full connections meet the goal, or continue under delegation; no routine full-catalog or all-seat paging. If an unapproved seat choice changes the price, combine that decision and missing terms into one question. Do not default to second class or require a three-tier menu. No match does not permit loosening conditions.",
|
|
115
122
|
"input": "Copy the complete current booking_template.input_example; retain passenger count, every ordered token and the returned seat_type code matched to seat_name. Never use a seat display name as the code, mix selections/selection/legs or guess missing credentials. Technical JSON errors are repaired by the Agent using current input_schema/input_errors/template, preserving original user requirements; ask the human only for a genuinely missing business choice.",
|
|
116
|
-
"command": "itpay services run itpay-rail
|
|
123
|
+
"command": "itpay services run itpay-rail --operation prepare_purchase --input-json <file> --json",
|
|
117
124
|
"identity": "Passenger name, ID and phone are entered on the official protected checkout page, not in query or booking JSON.",
|
|
118
125
|
"whole_journey": "Use the returned complete ticket plan booking_template: ordered selections (2–3 legs) from one owner/snapshot/revision/plan, or selection for one leg. One booking, one refreshed whole quote, one checkout, one order and one payment; each leg issues separately without connection or joint-seat guarantees. Raw legs are single-leg compatibility only; never hand-compose multi-leg legs when complete selections are missing or expired. Do not combine different plans or choose per-leg payment by default. Historical details without a whole-journey template do not prove whole-journey support."
|
|
119
126
|
},
|
|
@@ -125,7 +132,7 @@
|
|
|
125
132
|
"continue_and_aftercare": {
|
|
126
133
|
"same_execution": "Read the same booking/checkout/order. Report issued only when every leg is confirmed issued; partial or unknown outcomes keep the same order and successful tickets, reconcile before retry, and explain the affected leg. No automatic rebuy or full-refund promise.",
|
|
127
134
|
"saved_vs_live": "A saved snapshot remains historical evidence after expiry. Real-time booking or quote credentials may expire and require the documented fresh validation path; rereading an old token does not renew it.",
|
|
128
|
-
"refund": "
|
|
135
|
+
"refund": "For railway refund/change use itpay aftercare list --order <order_id> --json. Select returned leg/passenger targets from the user’s request, explain scope and manual processing, submit the complete current template. Request acceptance is not supplier success or money returned. Read the same case; concrete change proposals need current-revision consent and actual fee facts. No automatic change payment or replacement purchase."
|
|
129
136
|
},
|
|
130
137
|
"exceptional_branches": {
|
|
131
138
|
"login_required": "Use itpay auth login --json, complete the official handoff, then execute the returned recovery command for the same paused query. Login returning a command does not execute it.",
|
|
@@ -158,5 +165,12 @@
|
|
|
158
165
|
"rail-booking"
|
|
159
166
|
],
|
|
160
167
|
"reading_and_writing": "Use the formal Skill Follow one envelope rules for direct text/file reading, truncation and small JSON input; no parsing scripts.",
|
|
161
|
-
"restore_old_execution": "Only when resuming an existing v4 execution, follow its own declared legacy schema; new queries use the current three-endpoint contract."
|
|
168
|
+
"restore_old_execution": "Only when resuming an existing v4 execution, follow its own declared legacy schema; new queries use the current three-endpoint contract.",
|
|
169
|
+
"saved_followup": "Use returned refine_preferences with expected_query_revision for arrival/departure times, passengers, seat preference or priority; rerank uses existing facts. Only endpoints/date/new scope require a new query. Profiles compare within one journey, not the whole catalog. Fares and service fees are whole-journey totals for the stated people; observed available is not proof of ample inventory. Page limit is 1-20; follow next_offset exactly, never infer full-catalog optimality from the visible page. Byte-limited pages may contain fewer rows than limit. Area station candidates are not guaranteed nearest; transfer wait/minimum are facts, not a low-risk guarantee.",
|
|
170
|
+
"actor_conventions": {
|
|
171
|
+
"location_confirmation": "Use the returned human template only for the user's real place choice; no delegated human action.",
|
|
172
|
+
"journey_terms": "workflow:confirm_booking and booking_review_invalid recovery accept agent-reported genuine consent; default false, never infer from purchase delegation.",
|
|
173
|
+
"ordinary_human_action": "Use its published actor rule; do not generalize railway permission.",
|
|
174
|
+
"price_approval": "approve_purchase uses actor-type agent with the unchanged server-scoped approval template and genuine matching approval; candidate choice is not price approval."
|
|
175
|
+
}
|
|
162
176
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"purpose": "Finish the original order outcome first, then persist safe process context and any explicit human rating or comment without exposing commands or internal identifiers.",
|
|
8
8
|
"when_to_use": [
|
|
9
9
|
"The human asks to rate a service, leave feedback, report a blocker, or says how many stars the experience deserves.",
|
|
10
|
-
"A paid result has actually been delivered and the CLI instruction
|
|
10
|
+
"A paid result has actually been delivered and the CLI instruction offers an optional safe Agent postmortem.",
|
|
11
11
|
"A paid service failed and its order, delivery, and refund path have already been explained or recovered."
|
|
12
12
|
],
|
|
13
13
|
"intent_routing": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"agent_rules": [
|
|
28
28
|
"A rating is optional. Normalize an explicit 1-5 rating to an integer; sentiment never implies a score. Preserve an explicit human comment without inventing one.",
|
|
29
29
|
"Run every command yourself. Speak to the human only about the service, their rating, whether feedback was recorded, and any original order rights.",
|
|
30
|
-
"
|
|
30
|
+
"Optionally submit one baseline Agent postmortem after presenting the outcome; it never blocks delivery. Do not pressure the human for a score; an empty repeat is a no-op, while a later explicit rating or comment updates the same feedback.",
|
|
31
31
|
"Use only the human's own words plus safe order context. Never upload the conversation, prompt, diagnostics, contact details, tokens, internal identities, provider responses, or purchased payload.",
|
|
32
32
|
"A successful feedback submission does not promise a reply, resolution, refund, or order change.",
|
|
33
33
|
"If submission outcome is unknown, stop and explain that recording could not be confirmed; never retry automatically.",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# `itpay aftercare`
|
|
2
|
+
|
|
3
|
+
Railway manual refund/change intake; ordinary service refunds retain `itpay refund`.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
itpay aftercare list --order <order_id> --json
|
|
7
|
+
itpay aftercare create --order <order_id> --input-json <file> --json
|
|
8
|
+
itpay aftercare get <case_id> --json
|
|
9
|
+
itpay aftercare respond <case_id> --input-json <file> --json
|
|
10
|
+
itpay aftercare cancel <case_id> --input-json <file> --json
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`list` returns the complete current JSON templates, original safe journey and available ticket targets. Indices start at zero. Use user-selected targets; do not guess supplier IDs or money. Only real scope consent sets `user_confirmed_scope=true`.
|
|
14
|
+
|
|
15
|
+
`get` shows original immutable request, history, supplier facts and separate money state. Pending/manual intake does not authorize financial execution. A current change proposal must be explicitly accepted using its returned revision; the original purchase consent is insufficient. Fees are coordinated manually, with no automatic payment link. Cancellation cannot undo supplier or money operations already started. Platform content locks remain; safe remaining-ticket status is a separate authorized read.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The same entry point supports Buyer workflows and the existing `itpay sell` Seller workflow.
|
|
4
4
|
|
|
5
|
+
## 服务报价的批准边界
|
|
6
|
+
|
|
7
|
+
服务支持的 Quote/Cart/Checkout 共用服务端范围校验。缺少有效价格批准时返回完整 `approve_purchase` 模板,默认 `user_approved:false`;Agent 只在真实会话已同意当前主体、内容、价格或预算和条款时提交 true。选择候选或完成席别 review 不代替价格批准。同条件有效批准复用,已有 Checkout/未知付款先恢复原单,不补事后批准或创建替代订单。
|
|
8
|
+
|
|
5
9
|
## 范围与意义
|
|
6
10
|
|
|
7
11
|
把一个已发布 Catalog offer 或一个已准备的 Service Quote 加入 canonical server Cart。Catalog 服务行先进入 `services next`;Quote 行已经锁定输入和价格,可以与其他独立 Execution 的 Quote 一起结算。
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The same entry point supports Buyer workflows and the existing `itpay sell` Seller workflow.
|
|
4
4
|
|
|
5
|
+
## 服务报价的批准边界
|
|
6
|
+
|
|
7
|
+
服务支持的 Quote/Cart/Checkout 共用服务端范围校验。缺少有效价格批准时返回完整 `approve_purchase` 模板,默认 `user_approved:false`;Agent 只在真实会话已同意当前主体、内容、价格或预算和条款时提交 true。选择候选或完成席别 review 不代替价格批准。同条件有效批准复用,已有 Checkout/未知付款先恢复原单,不补事后批准或创建替代订单。
|
|
8
|
+
|
|
5
9
|
## 范围与意义
|
|
6
10
|
|
|
7
11
|
读取当前 canonical cart 对应的唯一首选动作。它不修改 cart。
|
|
@@ -45,7 +45,7 @@ itpay readyz [--json]
|
|
|
45
45
|
|
|
46
46
|
## 异常处理
|
|
47
47
|
|
|
48
|
-
已收到 Backend 不可用响应等非传输异常时返回 `backend_unavailable`。尚未收到完整 HTTP 响应的临时传输失败使用 conventions 中对应的稳定 `network_*` 错误码;`readyz` 是 GET
|
|
48
|
+
已收到 Backend 不可用响应等非传输异常时返回 `backend_unavailable`。尚未收到完整 HTTP 响应的临时传输失败使用 conventions 中对应的稳定 `network_*` 错误码;`readyz` 是 GET,按全局安全传输合同最多自动重试两次。有限尝试结束后本轮检查未完成,next=null、recovery=[];网络恢复后可以重新检查,不得在失败时切换环境或继续下单。
|
|
49
49
|
|
|
50
50
|
非官方 URL 返回 `backend_override_forbidden`,且不提供自动 recovery:
|
|
51
51
|
|
|
@@ -62,55 +62,7 @@ itpay readyz [--json]
|
|
|
62
62
|
}
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```json
|
|
68
|
-
{
|
|
69
|
-
"status": "error",
|
|
70
|
-
"error": {
|
|
71
|
-
"code": "backend_contract_incompatible",
|
|
72
|
-
"message": "CLI 2.0.15 contract sha256:client is incompatible with platform v3.example contract sha256:server (minimum CLI 2.0.16, maximum major 2)"
|
|
73
|
-
},
|
|
74
|
-
"result": {
|
|
75
|
-
"current_cli_version": "2.0.15",
|
|
76
|
-
"required_cli_version": "2.0.16"
|
|
77
|
-
},
|
|
78
|
-
"instruction": "当前 CLI 与 Backend 合约不兼容。停止所有 ItPay 业务命令;只执行 recovery.command,将 @itpay/cli 更新到 Backend 指定的精确版本。安装完成后确认 itpay --version 与 result.required_cli_version 完全一致,再重新运行 readyz。不要安装 latest、猜测版本、切换 Agent Type 或删除 Device 身份。",
|
|
79
|
-
"next": null,
|
|
80
|
-
"recovery": [
|
|
81
|
-
{
|
|
82
|
-
"command": "npm install -g @itpay/cli@2.0.16",
|
|
83
|
-
"reason": "安装 Backend 指定的兼容 CLI 版本"
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
OpenClaw bundle 的同一错误改为:
|
|
90
|
-
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"status": "error",
|
|
94
|
-
"error": {
|
|
95
|
-
"code": "backend_contract_incompatible",
|
|
96
|
-
"message": "<same compatibility fact>"
|
|
97
|
-
},
|
|
98
|
-
"result": {
|
|
99
|
-
"current_cli_version": "2.0.15",
|
|
100
|
-
"required_cli_version": "2.0.16"
|
|
101
|
-
},
|
|
102
|
-
"instruction": "当前 OpenClaw Skill bundle 与 Backend 合约不兼容。停止所有 ItPay 业务命令;只执行 recovery.command,更新 Skill 后启动新会话并确认 itpay --version 与 result.required_cli_version 完全一致,再重新运行 readyz。不要运行 npm、切换 Agent Type 或删除 Device 身份。",
|
|
103
|
-
"next": null,
|
|
104
|
-
"recovery": [
|
|
105
|
-
{
|
|
106
|
-
"command": "openclaw skills update itpay",
|
|
107
|
-
"reason": "更新包含 Backend 指定 CLI 版本的 ItPay Skill bundle"
|
|
108
|
-
}
|
|
109
|
-
]
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Kimi bundle 使用其 plugin 更新入口,不返回 npm 命令。只允许使用 Backend 返回的 `minimum_cli_version` 生成精确版本要求;兼容性合同不可用、缺少合法版本或仅有无法验证的错误文本时,仍须停止且不得猜测安装版本。
|
|
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=[],由维护方提供已核验的配套制品;不要猜版本、降级或改变身份。
|
|
114
66
|
|
|
115
67
|
## Agent Type / Host
|
|
116
68
|
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> **Product boundary:** `itpay` is the single public CLI entry point, and `$itpay` is its user-facing Skill invocation. The same entry point supports Buyer workflows and the existing `itpay sell` Seller workflow.
|
|
4
4
|
|
|
5
|
+
## 服务报价的批准边界
|
|
6
|
+
|
|
7
|
+
服务支持的 Quote/Cart/Checkout 共用服务端范围校验。缺少有效价格批准时返回完整 `approve_purchase` 模板,默认 `user_approved:false`;Agent 只在真实会话已同意当前主体、内容、价格或预算和条款时提交 true。选择候选或完成席别 review 不代替价格批准。同条件有效批准复用,已有 Checkout/未知付款先恢复原单,不补事后批准或创建替代订单。
|
|
8
|
+
|
|
5
9
|
## 范围与意义
|
|
6
10
|
|
|
7
11
|
为单个 Service Execution 快速创建或恢复 Checkout,并按 Host 向人交接付款入口。它是 `services quote -> cart add --quote -> buy --cart` 的单项快捷方式,必须复用相同的 Quote、Cart 和 Checkout Use Case。
|
|
@@ -242,44 +242,17 @@ itpay services next <service_execution_id> [--timeout <seconds>] [--since-snapsh
|
|
|
242
242
|
}
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
|
|
245
|
+
有购买委托时,读取所选完整行程详情,使用其返回的 `itpay-rail --operation prepare_purchase` 完整模板;保留 continuation 的原 execution/snapshot 与完整 selections。上面的 booking_offer 是历史兼容事实,不将它改造成新公共承接或手拼多腿。
|
|
246
246
|
|
|
247
|
-
|
|
248
|
-
itpay services run itpay-rail-booking --input-json booking.json --json
|
|
249
|
-
# booking.json: {"passengers": 1, "selection": {"token": "<selection_token>", "seat_type": "O"}}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
`booking_offer` 只是受条件约束的可选承接:查询完成本身已满足查询目标,不自动购买。过期 token 不会因重读保存结果而恢复;按当前 owner 错误与用户原请求取得新的实时选择证据,不手工拼装 `legs` 绕过失效凭据。
|
|
253
|
-
|
|
254
|
-
## 订票确认(booking review)
|
|
255
|
-
|
|
256
|
-
`itpay-rail-booking` 在报价前停在 `workflow:confirm_booking` 人工确认节点。`services next` 返回 `booking_review_required`,`human_action.context.review` 携带服务端投影:`draft_revision`、`legs`(含可编码的 `seat_options`)、`notice_version` 等。乘客身份信息永不在此投影,也不经 CLI 提交。
|
|
257
|
-
|
|
258
|
-
```json
|
|
259
|
-
{
|
|
260
|
-
"status": "booking_review_required",
|
|
261
|
-
"result": {
|
|
262
|
-
"service_execution_id": "<id>",
|
|
263
|
-
"service_id": "itpay-rail-booking",
|
|
264
|
-
"human_action": {
|
|
265
|
-
"action_type": "workflow:confirm_booking",
|
|
266
|
-
"context": { "review": { "draft_revision": 1, "legs": [], "seat_options": {} } }
|
|
267
|
-
},
|
|
268
|
-
"required_fields": ["draft_revision", "passengers", "seat_type", "seat_preferences", "party_preference", "fallback", "notice_version", "accept_non_guaranteed"]
|
|
269
|
-
},
|
|
270
|
-
"instruction": "向用户展示行程与可选席别/座位偏好词表,并明确告知:座位偏好仅为请求、不保证分配。收集后经 --input-json 提交完整 JSON;draft_revision 以服务端当前值为准。",
|
|
271
|
-
"next": null,
|
|
272
|
-
"interaction": { "input_template": { "command": "itpay services action <id> --action workflow:confirm_booking --actor-type human --status approved --input-json <file> --json", "executable": false } },
|
|
273
|
-
"recovery": [{ "command": "itpay services next <id> --json", "reason": "重新读取当前 draft_revision 后重试" }]
|
|
274
|
-
}
|
|
275
|
-
```
|
|
247
|
+
## 整程订票确认与价格批准
|
|
276
248
|
|
|
277
|
-
|
|
249
|
+
当前 `booking_review_required` 返回完整整程 review、每段席别代码/名称、人数、偏好词表、notice_version 与 draft_revision。直接读写返回的完整 JSON,不需要解析脚本;模板的 accept_non_guaranteed 默认 false。只补用户尚未明确同意的实质内容;仅修席别代码而车次、实际席别、人数、价格、条款未变时沿用原真实确认。
|
|
278
250
|
|
|
279
|
-
-
|
|
280
|
-
- `
|
|
281
|
-
-
|
|
282
|
-
-
|
|
251
|
+
- 每段保留相连行程、对应席别、每位乘客偏好;不要恢复固定单腿 scalar 模板。
|
|
252
|
+
- `booking_review_changed` 重新读取当前服务端 revision,不自行递增、不重放旧 revision。
|
|
253
|
+
- 候选/条款确认不等于价格批准;实时报价后使用完整有范围 approve_purchase 模板,仅真实匹配批准允许 true。
|
|
254
|
+
- 未付且允许修改时修订同一 booking 重新报价;支付已在途/完成、结果未知或退款锁定时按原单读取,不新建替代购买。
|
|
255
|
+
- 乘客身份、电话、邮箱修改只在保护页完成,不在聊天或 workflow 输入收集。
|
|
283
256
|
|
|
284
257
|
## 异常处理
|
|
285
258
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
**上游:** 用户明确要求合并多个独立 Execution,且每个 Execution 的 Arazzo workflow 当前都允许 `prepare_quote`。
|
|
12
12
|
|
|
13
|
-
**下游:** `cart add --quote
|
|
13
|
+
**下游:** 读取当前服务器返回的有范围 `approve_purchase` 完整 JSON,默认 false;仅已有真实匹配批准时置 true 并记录。批准成功后再 `cart add --quote`,多个已批准 Quote 可加入同一 Cart。候选选择不等于价格批准。
|
|
14
14
|
|
|
15
15
|
## 语法与参数
|
|
16
16
|
|
|
@@ -124,23 +124,19 @@ itpay services run <service_id> --execution <execution_id> --json
|
|
|
124
124
|
|
|
125
125
|
限流不是收费、不是试用耗尽、不需要重新登录。等待中不得重复扣试用或发起新的供应商请求。
|
|
126
126
|
|
|
127
|
-
##
|
|
127
|
+
## 公开操作与完整购买承接
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
铁路是一项 `itpay-rail` 服务,`query_exact`、`query_smart`、`prepare_purchase` 是固定定义内的操作。查询输入按返回模板填写 `{ "input": { ... } }`;不要把内部实现当三项公开服务重新发现。
|
|
130
130
|
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
"passengers": 1,
|
|
134
|
-
"selection": {
|
|
135
|
-
"token": "<查询结果项中的 booking_offer.selection_token>",
|
|
136
|
-
"seat_type": "O"
|
|
137
|
-
}
|
|
138
|
-
}
|
|
131
|
+
```sh
|
|
132
|
+
itpay services run itpay-rail --operation query_exact --input-json query.json --json
|
|
139
133
|
```
|
|
140
134
|
|
|
141
|
-
`
|
|
135
|
+
所选行程详情返回完整准备购买模板,含 `continuation.service_execution_id`、`continuation.snapshot_id` 和 `input.selections`。原样保留当前 owner、快照、完整段数、席别代码和人数,写入文件并执行其命令。不要手拼腿、站码、时刻、付款批准或缺失的 snapshot。一次整程对应一个 booking、一个官方付款入口,各段分别出票。
|
|
136
|
+
|
|
137
|
+
旧 `itpay-rail-exact/smart/booking` ID 仅用于已有执行和历史模板的兼容恢复;新公共模板与旧凭据共用原购买去重。存在或未知购买先恢复,过期库存不等于能新建购买。
|
|
142
138
|
|
|
143
|
-
|
|
139
|
+
候选选择和席别条款确认不等于价格批准。实时报价返回完整有范围的 `approve_purchase` JSON,默认 `user_approved:false`。仅已有真实、匹配价格/上限/条款/主体同意才改 true;内容未变可复用。付款与出票事实仍由后端及官方页确认。
|
|
144
140
|
|
|
145
141
|
## 终态和异常
|
|
146
142
|
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
## 范围与意义
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
公开 service_definition 入口只返回固定版本的服务总览与操作,未创建 execution、未调用 Provider。铁路总览指向 rail-booking:首次实际查询前理解端点并写短摘要。使用返回的操作模板执行 `services run --operation … --input-json <file>`。
|
|
8
|
+
|
|
9
|
+
旧内部 service_id 仍兼容启动一次 Service Execution,并返回当前合法动作,不创建 Checkout 或订单。以下执行示例属于旧入口。
|
|
8
10
|
|
|
9
11
|
**上游:** `catalog list` 或服务端明确要求新 execution。
|
|
10
12
|
**下游:** `services invoke`、`action`、`checkout` 或 `next`。
|
|
@@ -80,7 +80,7 @@ next: <one command>
|
|
|
80
80
|
- `device_state_unwritable` 表示当前运行环境不能可靠持久化 `~/.itpay-v3`;保持同一 Agent Type 与 CLI/Node launcher,恢复 Host 写权限后重试原命令,不得手工造 lock、删除身份或换运行时碰运气。
|
|
81
81
|
- WorkBuddy 需通过宿主的正常权限机制允许 CLI 持久化 `~/.itpay-v3`。若被拦截,报告受阻操作和宿主原因;不切换 Node、删除 identity 或猜测性处理活跃 lock。
|
|
82
82
|
- `provider_input_rejected` 只表示 Provider 明确声明输入无效;`provider_contract_mismatch` 表示响应无法按已发布契约解释,绝不能归咎于用户输入。两者都必须停止且没有自动 recovery。
|
|
83
|
-
- `backend_contract_incompatible`
|
|
83
|
+
- `backend_contract_incompatible` 返回当前 CLI/API、平台 API 与 minimum/major 事实;minimum 不是已验证的推荐包。无配套制品证据时 next=null、recovery=[],停止本轮并请求维护方提供匹配制品,禁止猜版本、降级或变更身份。
|
|
84
84
|
|
|
85
85
|
## 网络传输失败与自动重试
|
|
86
86
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itpay/cli",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.40",
|
|
4
4
|
"description": "The ItPay CLI for services, orders, and human-authorized purchased content.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
],
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public",
|
|
28
|
-
"tag": "
|
|
28
|
+
"tag": "candidate-dev"
|
|
29
29
|
},
|
|
30
30
|
"keywords": [
|
|
31
31
|
"itpay",
|
|
@@ -76,5 +76,6 @@
|
|
|
76
76
|
"repository": {
|
|
77
77
|
"type": "git",
|
|
78
78
|
"url": "git+https://github.com/itpay-ai/cli.git"
|
|
79
|
-
}
|
|
79
|
+
},
|
|
80
|
+
"gitHead": "c83c252d8799ae75f036c81738addd44026f191d"
|
|
80
81
|
}
|