@alipay/alipay-aipay 1.5.1-beta → 1.5.2-beta
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/package.json +1 -1
- package/skill/SKILL.md +1 -1
- package/skill/VERSION +1 -1
- package/skill/references/integration/flow.md +51 -73
- package/skill/references/integration/modules/checklist.md +3 -3
- package/skill/references/integration/modules/product-decision.md +1 -1
- package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +11 -22
- package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +4 -4
- package/skill/references/normal/alipay-cli-env.md +1 -1
- package/skill/references/normal/full-process-routing.md +17 -17
- package/skill/references/normal/json/customer-messages.json +13 -14
- package/skill/references/normal/rejection-guide.md +1 -1
- package/skill/references/normal/scripts/alipay_cli_env.mjs +8 -4
- package/skill/references/normal/scripts/flow_loader.mjs +2 -2
- package/skill/references/normal/scripts/integration_context_runner.mjs +3 -3
- package/skill/references/normal/scripts/integration_message_runner.mjs +3 -3
- package/skill/references/normal/scripts/interaction_reply.mjs +3 -3
- package/skill/references/normal/scripts/onboarding_discovery_runner.mjs +3 -3
- package/skill/references/normal/scripts/onboarding_message_runner.mjs +3 -3
- package/skill/references/normal/scripts/onboarding_recovery_runner.mjs +9 -7
- package/skill/references/normal/scripts/python_script_runner.mjs +10 -8
- package/skill/references/normal/scripts/render_customer_message.mjs +68 -59
- package/skill/references/normal/scripts/runtime.mjs +133 -0
- package/skill/references/normal/scripts/self_update.mjs +8 -6
- package/skill/references/normal/self-update.md +2 -2
- package/skill/references/normal/telemetry.md +1 -1
- package/skill/references/onboarding/flow.md +70 -88
- package/skill/references/onboarding/modules/app-release.md +5 -5
- package/skill/references/onboarding/modules/authorization.md +1 -1
- package/skill/references/onboarding/modules/service-registration.md +4 -4
- package/skill/references/runtime-entry.md +30 -30
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -14,7 +14,7 @@ description: >-
|
|
|
14
14
|
本次 Agent 对话首次使用 `alipay-aipay` 时,先把本文件所在目录解析为规范化绝对路径 `<SKILL_DIR>`,在当前 Agent 上下文记录一次性事实 `ALIPAY_AIPAY_SELF_UPDATE_CHECKED=true`,再直接执行以下单条命令。`<SKILL_DIR>` 是路径占位符,执行时替换为实际路径;禁止用 shell 变量赋值、命令替换或依赖特定 shell:
|
|
15
15
|
|
|
16
16
|
```text
|
|
17
|
-
node "<SKILL_DIR>/references/normal/scripts/
|
|
17
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" self-update check --skill-dir "<SKILL_DIR>"
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
`SKILL_DIR` 必须绑定刚触发的本份 Skill,且包含 `SKILL.md`、`VERSION` 和 `references/runtime-entry.md`;不得使用 Agent 启动目录、用户项目目录、用户 Home、npm 包源码根或另一份 Skill 副本。命令失败或 marker 无法唯一解析时按 `SELF_UPDATE:CHECK_FAILED` 处理。
|
package/skill/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.5.
|
|
1
|
+
1.5.2-beta
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## 按步读取
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
禁止整份预读,只通过当前 Skill 绝对路径下的统一 runtime 按 marker 加载阶段,本 flow 仍是唯一执行依据:`entry`;项目与技术栈唯一后 `prepare`;非阻塞方案送达后用 `development --product-type "$PRODUCT_TYPE" --project-confirm-receipt "$PROJECT_CONFIRM_RECEIPT"` 校验同一项目事实;其后依次加载 `implementation`、`verification`、`acceptance --product-type "$PRODUCT_TYPE"` 和 `checklist --product-type "$PRODUCT_TYPE" --project-path "$PROJECT_PATH"`。统一单命令规则继承 `runtime-entry.md`;用户项目命令仍以已确认项目根为 workdir。未到阶段、无关产品/语言、维护说明和模块不得提前读取,原 flow 保留完整规则供校验。
|
|
11
11
|
|
|
12
12
|
步骤 1 只有 `CLI_ENV:NEEDS_SETUP` 才读 `../normal/alipay-cli-env.md`;步骤 2 只有产品无法唯一确定时才读 `modules/product-decision.md`;沙箱正常路径只执行已封装脚本,协议异常或用户要求解释时才读沙箱指南;步骤 4 只按 `integration_context_runner.mjs` 的当前产品/语言事实读取 SDK、本地契约和示例,不读取接口索引本身;步骤 6 仅按量付费读 A2M 沙箱模块;步骤 8 只读当前产品适用 checklist。
|
|
13
13
|
|
|
@@ -15,26 +15,17 @@
|
|
|
15
15
|
|
|
16
16
|
## ⛔ 强制执行要点
|
|
17
17
|
|
|
18
|
-
先确认唯一项目和服务端语言,再在产品确定前执行步骤 1;匿名沙箱不传 `PRODUCT`,缺失时创建、存在时复核,待配置只阻止沙箱依赖动作。步骤 2
|
|
18
|
+
先确认唯一项目和服务端语言,再在产品确定前执行步骤 1;匿名沙箱不传 `PRODUCT`,缺失时创建、存在时复核,待配置只阻止沙箱依赖动作。步骤 2 的完整方案送达且同一次检查器 receipt 有效前不得改代码;`integration_only/full_process` 共用检查器事实和非阻塞 `integration.start.confirm`,一次只开发一个产品。网站支付/APP 支付必须实现下单、查询、退款、退款查询、关闭和异步通知;按量付费只实现 402、验付和履约确认。本流程不主动发起真实生产交易。
|
|
19
19
|
|
|
20
20
|
生产 `appId`、应用公钥、应用私钥和支付宝公钥必须属于同一生产应用,私钥格式必须匹配当前语言,格式转换只用支付宝官方密钥工具。网站支付/APP 支付本地无公网 `notify_url` 时仍实现通知代码,可暂不传地址并用查询验收;生产上线前必须恢复公网通知及验签、幂等、关键字段、`success` 回写和补偿查询,不得提前宣称生产就绪。
|
|
21
21
|
|
|
22
22
|
### 标准消息执行规则
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
node ../normal/scripts/render_customer_message.mjs --schema <messageId> --variant <VARIANT>
|
|
28
|
-
node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIANT> --input-json "$MESSAGE_INPUT_JSON"
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
直接调用 renderer 前先查同一 `messageId + variant` schema;托管消息必须用 `integration_message_runner.mjs` 或登记脚本。失败停步,不手写兜底或猜枚举;成功时 stdout 是唯一正文。脚本终态满足后立即转移,不追加命令复核。
|
|
32
|
-
|
|
33
|
-
**工作目录**:本文 Skill 相对命令以 `references/integration/` 为 workdir;项目命令以 runner 确认的规范化绝对项目根为 workdir。两者不得共享隐含 cwd,Skill 脚本需要项目时显式传绝对路径。
|
|
24
|
+
继承已加载的 `runtime-entry.md` 对客 stdout、内部行、schema/renderer fallback 和统一单命令规则。动作有 runner/script 时只执行动作处完整命令,禁止拆回 `jq/printf/renderer` 或追加管道;失败停步且不手写兜底,终态满足即转移。统一 runtime 不依赖 cwd;项目命令只以 runner 确认的规范化项目根为 workdir。
|
|
34
25
|
|
|
35
26
|
### 耗时事件规则
|
|
36
27
|
|
|
37
|
-
`start-run`
|
|
28
|
+
`start-run` 已确定 `run_id`;stage 由登记动作异步记录,Agent 不手工上报。遥测失败不改变业务;诊断只按需读 `../normal/telemetry.md`。
|
|
38
29
|
|
|
39
30
|
### 服务声明执行护栏
|
|
40
31
|
|
|
@@ -42,7 +33,7 @@ node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIAN
|
|
|
42
33
|
|
|
43
34
|
---
|
|
44
35
|
|
|
45
|
-
##
|
|
36
|
+
## 用户阻塞点索引
|
|
46
37
|
|
|
47
38
|
<!-- GENERATED:INTEGRATION-GUARDS:START -->
|
|
48
39
|
<!-- 此区块由 scripts/generate-skill-guards.mjs 生成,禁止手改 -->
|
|
@@ -58,9 +49,7 @@ node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIAN
|
|
|
58
49
|
- `P-DETERMINISTIC-HANDOFF`:flow 已登记脚本或 renderer 时只执行动作发生位置的固定命令;退出码和登记终态标记满足后立即按 flow 转移,禁止追加 jq、cat、grep、curl 或临时脚本重复解析、复核或解释同一结果。失败只走登记恢复分支;项目代码实现和运行验证除外,但不得把沙箱配置或其他敏感文件打印到工具输出。
|
|
59
50
|
<!-- GENERATED:INTEGRATION-GUARDS:END -->
|
|
60
51
|
|
|
61
|
-
|
|
62
|
-
|------|----------|----------|
|
|
63
|
-
| 步骤 2 | 产品决策后 | 用户同意服务声明并确认开发特定支付产品 |
|
|
52
|
+
代码开发方案不再构成阻塞确认点。产品、项目路径或技术栈缺失、冲突或无法唯一确定时,仍在步骤 1/2 使用登记澄清消息等待用户补齐;事实完整且唯一时展示方案并自动推进。用户另行要求删除具体文件时,仍执行下方破坏性操作二次确认。
|
|
64
53
|
|
|
65
54
|
> 步骤 6 中,按量付费沙箱测试是沙箱配置就绪后默认自动执行的完成质量门;网站支付在沙箱配置就绪时必须在收尾前向用户提供人工沙箱付款入口和操作说明,但不强制用户当场付款;APP 支付跳过步骤 6。沙箱为 `CREATE_PENDING|VERIFY_PENDING` 时跳过全部沙箱依赖动作,不增加用户确认。步骤 8 的代码开发校验默认自动执行,不作为可选阻塞确认;无法自动验证的项目必须逐项标记为人工待验证。步骤 1 的沙箱字段完整性校验只证明配置可用,不是沙箱支付测试,三类产品都不得据此输出“沙箱测试通过”或等价结论。
|
|
66
55
|
|
|
@@ -96,12 +85,12 @@ node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIAN
|
|
|
96
85
|
|
|
97
86
|
### 目标项目执行上下文
|
|
98
87
|
|
|
99
|
-
进入步骤 1 前先确定唯一的规范化目标项目根目录和服务端语言,后续所有用户项目检测、依赖安装、代码与配置写入、服务启动和项目校验命令都必须以该目录为工作目录。`PROJECT_INPUT` 必须保留用户选择项目时的原始表达,不得先改写成“当前项目/当前目录”。用户不需要手写绝对路径;可以选择新建项目,或复用已有项目。新建项目可以说明尚不存在或为空的新目录;若用户明确要新建但不想指定位置,runner 使用用户目录下的默认安全目录并返回规范化地址。复用已有项目必须说明具体项目文件夹,或先让 Agent 在当前目录或用户给出的子目录下定位候选项目。“当前项目/当前目录”只有在 runner 确认当前目录本身是可识别项目根时才接受;否则不得把大目录交给代码扫描。Agent
|
|
88
|
+
进入步骤 1 前先确定唯一的规范化目标项目根目录和服务端语言,后续所有用户项目检测、依赖安装、代码与配置写入、服务启动和项目校验命令都必须以该目录为工作目录。`PROJECT_INPUT` 必须保留用户选择项目时的原始表达,不得先改写成“当前项目/当前目录”。用户不需要手写绝对路径;可以选择新建项目,或复用已有项目。新建项目可以说明尚不存在或为空的新目录;若用户明确要新建但不想指定位置,runner 使用用户目录下的默认安全目录并返回规范化地址。复用已有项目必须说明具体项目文件夹,或先让 Agent 在当前目录或用户给出的子目录下定位候选项目。“当前项目/当前目录”只有在 runner 确认当前目录本身是可识别项目根时才接受;否则不得把大目录交给代码扫描。Agent 必须通过统一 runtime 的 `integration-message resolve-project` 或 `locate-projects` 取得规范化事实,再继续检查器和方案展示链路。Skill 内置 renderer、脚本和参考文件按上方规则从当前 Skill 目录定位,不受目标项目 cwd 影响。禁止因为 Agent 的原始工作目录更方便而改用其他项目,也禁止把临时目录中的产物误报为目标项目产物。
|
|
100
89
|
|
|
101
|
-
- `full_process`:步骤 1 前置准备先继承 `../normal/full-process-routing.md`
|
|
90
|
+
- `full_process`:步骤 1 前置准备先继承 `../normal/full-process-routing.md` 已选定的项目来源、规范化项目路径和服务端语言,此时代码开发启动方案尚未展示,不得要求目标产品或代码状态;产品确定、项目扫描并完成唯一方案展示后,进入步骤 2 时继承同一摘要中的目标产品、项目选择分类、目标产品集成状态、其他支付产品、语言和框架。两个阶段都不得重新猜测或静默改选项目。
|
|
102
91
|
- `integration_only`:优先从当前可访问业务项目确定根目录;当前目录不是可识别项目根、存在多个候选或用户要求其他/新项目时,先让用户选定并确认规范化路径,不得自行选择或扫描上层大目录。当前目录内已选定的现有项目分类为 `CURRENT_PROJECT`,用户指定的其他现有路径分类为 `OTHER_PROJECT`;本轮按下条规则初始化成功的新项目在完成步骤 1 后分类为 `PREPARED_NEW_PROJECT`。该分类只用于本轮检查器输入,不持久化。
|
|
103
92
|
- 已有项目:进入任何写操作前确认目标路径可读、在当前 Agent 权限范围内可写、包含可识别项目根标记,且仍对应用户选定的业务项目;需要环境文件权限时按当前权限机制申请,无法取得权限、路径失效或实际项目不符时停止,要求用户提供可访问路径或重新选择项目。完整保留项目结构、已有文件和其他支付能力,只对当前目标产品需要的位置做可审查的局部修改,禁止先删除文件再重建。
|
|
104
|
-
- 新项目:用户可以说明“在当前目录新建 pay-demo”、当前目录下的新子目录名、绝对路径,或只说“新建/新建项目/帮我新建默认项目”。目标路径必须先从本 flow 所在目录执行 `node
|
|
93
|
+
- 新项目:用户可以说明“在当前目录新建 pay-demo”、当前目录下的新子目录名、绝对路径,或只说“新建/新建项目/帮我新建默认项目”。目标路径必须先从本 flow 所在目录执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --base-path "$USER_WORKSPACE_ROOT" --intent new`;该 runner 内部调用固定检查器 `prepare-new`。用户明确要新建但未指定地址时,runner 默认选择用户目录下的 `alipay-aipay-projects/pay-demo`;若已被非空目录占用,则自动选择安全后缀,不清空或覆盖。只有退出码 0 且唯一 JSON 同时满足 `projectSelection=NEW_PROJECT`、`projectOrigin=NEW_PROJECT`、`projectOriginLabel=本轮新建项目`、`preparationStatus=READY`,才能继续确认目标路径或其最近已有父目录在当前 Agent 权限范围内可写。路径非空、预检失败或无法取得写权限时停止,保留其中全部内容,让用户改选明确的空子目录、空同级目录、默认项目或其他尚不存在或为空的目录,禁止清空、覆盖或把该目录强行当作新项目。步骤 1 前只确认创建项目必需的技术栈,不要求用户先确定支付产品;收到针对当前路径和技术栈的明确回复后,才能按确认方式创建目录和初始化项目。创建命令只能来自用户指定方式、可访问模板/项目中的既有命令或本轮已读取的官方文档,且不得使用 `--force` 等覆盖既有文件的选项;禁止凭记忆编造脚手架、依赖或默认工程结构。初始化并完成步骤 1 后,当前会话分类单向转为 `PREPARED_NEW_PROJECT`;重新进入时只按现有项目重新分类,不读取历史状态。
|
|
105
94
|
- 项目准备失败时停留在步骤 1 前置准备,输出实际错误和待补条件;不得进入沙箱准备。目标项目准备成功后记录实际根目录,步骤 1、步骤 3 的沙箱配置和后续代码必须落入该项目;沙箱配置不得降级写入系统临时目录、Agent 原始工作目录或其他项目。
|
|
106
95
|
|
|
107
96
|
**项目选择保护规则**:当前目录已包含项目时,只能让用户选择“保留并在该项目新增目标支付能力”“保留并在指定的新子目录创建独立项目”或“保留并使用指定的其他路径”,不得展示清空或删除选项。用户明确要求“新建/创建”项目、网站、商城、应用或同类新产物时,必须保留完整原始表达并执行 `resolve-project --intent new`;当前目录中恰好已有项目不能把该意图改写为 `--intent existing`。用户未指定地址时走用户目录默认项目规则并返回规范化地址,不得反复要求用户补绝对路径。对 `full_process`,此时必须留在或返回 `../normal/full-process-routing.md` 主编排,取得 `NEW_PROJECT` 的规范化路径、技术栈和初始化结果前不得进入子流程;对 `integration_only`,取得可安全创建的新项目路径前不得进入沙箱准备或代码开发。取得并确认尚不存在或为空的精确路径前不得执行文件操作。
|
|
@@ -109,22 +98,22 @@ node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIAN
|
|
|
109
98
|
**启动前上下文补问**:缺少项目位置或技术栈时,必须从本 flow 所在目录执行下列标准消息,一次补齐;只缺少新项目精确位置时仍使用上方 `integration.project_path.required`。禁止使用 AskUserQuestion、request_user_input、宿主超时默认值、Agent 自创选项或自由话术替代;用户未明确补齐前不得创建目录、初始化项目、安装依赖或修改文件。
|
|
110
99
|
|
|
111
100
|
```bash
|
|
112
|
-
node
|
|
101
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message context-required --missing-items "$MISSING_ITEMS"
|
|
113
102
|
```
|
|
114
103
|
|
|
115
|
-
`MISSING_ITEMS` 只允许由 `项目路径`、`技术栈` 按缺失项用顿号连接生成。产品不明确时使用 `product.clarify`,不得混入本消息。该消息必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止并等待用户自由回复;用户回复后重新计算缺失项,不得靠超时或默认值推进。用户回复“当前项目”、相对路径或新建子目录时,先执行 `resolve-project` 得到规范化绝对路径和 `projectSelection
|
|
104
|
+
`MISSING_ITEMS` 只允许由 `项目路径`、`技术栈` 按缺失项用顿号连接生成。产品不明确时使用 `product.clarify`,不得混入本消息。该消息必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止并等待用户自由回复;用户回复后重新计算缺失项,不得靠超时或默认值推进。用户回复“当前项目”、相对路径或新建子目录时,先执行 `resolve-project` 得到规范化绝对路径和 `projectSelection`,再进入后续检查器、沙箱准备和启动方案展示;相对路径必须位于 `--base-path` 内,目录外项目必须由用户提供绝对路径。
|
|
116
105
|
|
|
117
106
|
用户回复“不知道项目在哪”“帮我找项目”、提供子目录但该目录不是项目根,或当前目录解析失败且需要候选时,从本 flow 所在目录执行下列轻量定位命令。`SEARCH_INPUT` 取用户给出的搜索范围;未给出时固定为 `当前目录`。该命令只查找项目标记文件并跳过常见重目录,不扫描源码内容;stdout 是本动作唯一对客消息,发出后立即停止并等待用户选择候选序号、具体目录或新建目录。用户选择候选后,仍必须再执行 `resolve-project --intent existing` 取得规范化绝对路径;候选列表不能直接替代项目确认。
|
|
118
107
|
|
|
119
108
|
```bash
|
|
120
|
-
node
|
|
109
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message locate-projects --base-path "$USER_WORKSPACE_ROOT" --search-input "$SEARCH_INPUT" --format message
|
|
121
110
|
```
|
|
122
111
|
|
|
123
|
-
|
|
112
|
+
**破坏性操作二次确认**:本支付产品-代码开发流程本身不得删除用户既有文件。用户另行主动要求删除具体文件时,先停止代码开发,列出每个精确规范化路径和不可逆影响,再在独立轮次等待用户逐项确认该清单;此前的项目/技术栈补充、代码开发方案展示、服务声明送达及任何含糊回复均无效。未取得二次明确确认时严禁调用删除、清空、强制覆盖或等价命令;即使确认,也禁止删除项目根目录、`.git`、使用通配符或触及清单外文件。
|
|
124
113
|
|
|
125
114
|
**执行边界**:本流程只操作用户当前确认的项目路径、语言、框架、产品和范围。步骤 1 只使用项目路径和语言,不依赖产品;步骤 2 后的代码修改才依赖已确认产品。沙箱配置与测试结论来自本轮实际脚本结果,不得被 onboarding 的正式 `appId`、支付宝公钥或 `productionServiceId` 覆盖。
|
|
126
115
|
|
|
127
|
-
项目路径和技术栈已由 runner 唯一解析后,执行 `node
|
|
116
|
+
项目路径和技术栈已由 runner 唯一解析后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration prepare`;不得提前读取步骤 1/2。
|
|
128
117
|
|
|
129
118
|
---
|
|
130
119
|
|
|
@@ -145,17 +134,17 @@ node ../normal/scripts/integration_message_runner.mjs locate-projects --base-pat
|
|
|
145
134
|
**执行规则**:
|
|
146
135
|
|
|
147
136
|
1. 只确认创建和保存沙箱所需的目标项目路径、服务端语言与操作系统;不得为了创建匿名沙箱先要求用户确定支付产品。缺少多个字段时使用“启动前上下文补问”的固定标准消息一次补齐;字段已能从用户输入和项目事实确定时,不发送环境、项目识别或准备进度消息。
|
|
148
|
-
2. Unix/macOS/Linux 从本 flow 目录执行 `
|
|
137
|
+
2. Unix/macOS/Linux 从本 flow 目录执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env integration-check`;Windows 执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env integration-check`。该入口在检查开始时自动记录 `integration.env_prepare.start`。Windows 只检查本 Integration Node runner 所需运行时,不要求 Bash、jq 或当前流程不会调用的 alipay-cli。唯一 `CLI_ENV:READY` 时继续且不读取完整安装文档;`CLI_ENV:NEEDS_SETUP` 时才读取 `../normal/alipay-cli-env.md` 并按当前系统分支补齐后重跑;其他输出、非 0 或 marker 冲突停在本步骤。
|
|
149
138
|
3. Unix/macOS/Linux 从本 flow 所在的 `references/integration/` 目录执行唯一准备入口:
|
|
150
139
|
|
|
151
140
|
```bash
|
|
152
|
-
|
|
141
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox ensure "<规范化项目路径>" "<已确认服务端语言>"
|
|
153
142
|
```
|
|
154
143
|
|
|
155
144
|
4. Windows 不调用快速沙箱脚本。普通代码开发或完整接入请求没有明确要求当前配置沙箱时,不展示申领消息、不补问,直接记录 `sandboxConfigState=VERIFY_PENDING` 并继续步骤 2。只有用户明确要求现在配置/恢复 Windows 沙箱时,才执行下列既有标准消息 `sandbox.windows.manual_setup`;该消息使用自由资料回复,不要求用户输入 `1` 或自行执行脚本。随后只处理用户针对本轮该消息提供的资料:完整有效时写入目标项目的受保护本机配置并记录 `READY`,部分或错误时使用既有受控失败分支补问实际缺失/错误字段:
|
|
156
145
|
|
|
157
146
|
```bash
|
|
158
|
-
node
|
|
147
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-setup
|
|
159
148
|
```
|
|
160
149
|
|
|
161
150
|
资料校验通过后必须建立适用的版本控制忽略和访问保护。该例外只适用于当前沙箱资料;生产环境应用私钥和密码禁止提供给 Agent。Agent 不得在回复、摘要或普通日志中复述收到的值。
|
|
@@ -172,14 +161,14 @@ node ../normal/scripts/integration_message_runner.mjs windows-sandbox-setup
|
|
|
172
161
|
|
|
173
162
|
### 步骤 2:产品决策
|
|
174
163
|
|
|
175
|
-
|
|
164
|
+
**任务**:根据用户场景和目标项目确定接入产品与执行范围,展示完整方案后直接启动当前支付产品的代码开发
|
|
176
165
|
|
|
177
166
|
**完成条件**:
|
|
178
167
|
- [INT.CONTEXT.LANGUAGE] 已在步骤 1 前确认用户服务端开发语言(Java / Python / Node.js / C# / PHP 五选一)
|
|
179
168
|
- [INT.CONTEXT.PROJECT] 已在步骤 1 前确认唯一的规范化目标项目路径;已有项目已验证可访问且保持原有内容,新项目路径已验证为尚不存在或为空并确认框架和项目创建方式
|
|
180
169
|
- [INT.PRODUCT.CONFIRMED] 已根据用户场景决策出支付产品
|
|
181
|
-
- [INT.START.
|
|
182
|
-
- [INT.SERVICE_STATEMENT.
|
|
170
|
+
- [INT.START.PLAN_DELIVERED] 已基于确定的产品、项目和技术栈输出完整代码开发方案
|
|
171
|
+
- [INT.SERVICE_STATEMENT.DELIVERED] 已随方案输出完整服务声明
|
|
183
172
|
|
|
184
173
|
| 场景关键词 | 产品 |
|
|
185
174
|
|------------|------|
|
|
@@ -193,18 +182,18 @@ node ../normal/scripts/integration_message_runner.mjs windows-sandbox-setup
|
|
|
193
182
|
- `integration_only`:字段齐备后不得先输出产品判断、选择理由、待办、服务声明、执行进度或“即将确认”等内容。必须用步骤 1 确定的 `PROJECT_SELECTION` 对同一项目执行固定 runner,由 runner 内部完成检查器扫描、字段转换和 `integration.start.confirm` 渲染;项目来源、代码状态和其他支付产品不得由 Agent、用户描述或历史状态提供。下列 Node 单行命令在 Unix/macOS/Linux 与 Windows PowerShell 使用相同参数,必须执行:
|
|
194
183
|
|
|
195
184
|
```bash
|
|
196
|
-
node
|
|
185
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message start-confirm --product-type "$PRODUCT_TYPE" --product-name "$PRODUCT_NAME" --project-path "$PROJECT_PATH" --project-selection "$PROJECT_SELECTION" --language "$SERVER_LANGUAGE" --framework "$FRAMEWORK"
|
|
197
186
|
```
|
|
198
187
|
|
|
199
|
-
runner
|
|
188
|
+
runner 失败时不得展示手写方案或进入步骤 3。成功时必须同时取得唯一 `ALIPAY_AIPAY_INTERNAL:PROJECT_CONFIRM_RECEIPT=<receipt>`;缺失、重复或不可解析都视为失败。stdout 是步骤 2 唯一对客消息;Agent 必须把 stdout 原文作为非阻塞消息发给用户,不能用命令面板里的 stdout、折叠输出或“已渲染/已展示”说明替代。禁止添加 `<...>` 标签、“已输出完整方案”“服务声明已打印”、重复摘要或任何前后缀。发送后不停止、不等待回复,立即执行统一 runtime 的 `flow integration development --product-type "$PRODUCT_TYPE" --project-confirm-receipt "$PROJECT_CONFIRM_RECEIPT"`。loader 返回 `PROJECT_CONFIRMATION=VALID` 才能进入步骤 3;返回 `STALE` 时 stdout 已重新渲染当前标准方案并给出新 receipt,必须原文发送后使用新 receipt 立即重试一次;连续变化说明项目事实不稳定,停在步骤 2 核对,不要求用户输入确认口令。
|
|
200
189
|
|
|
201
|
-
- `full_process`:`../normal/full-process-routing.md` 已使用同一个 `integration.start.confirm
|
|
190
|
+
- `full_process`:`../normal/full-process-routing.md` 已使用同一个 `integration.start.confirm`,在同一方案中绑定检查器产生的项目来源、代码状态和其他产品,以及产品、项目路径、语言/框架和服务声明;消息送达后已经直接通过 receipt 进入本步骤,禁止再次渲染或要求确认。该消息不展示步骤清单,也不缩减执行范围;后续仍必须按当前产品完成本 flow 的全部适用接口、完成条件和 checklist。任一方案字段变化时必须返回完整接入 router 重新扫描、渲染并自动校验新的单条方案。该方案仍禁止提前展示 MCC、授权范围、产品开通材料或 onboarding 待办。
|
|
202
191
|
|
|
203
|
-
|
|
192
|
+
方案与 receipt 校验通过后,只通过上述 development loader 进入步骤 3;loader 仍在原位置记录兼容 stage `integration.user_confirmed` 和 `integration.pre_dev_reading.start`。前者表示已基于完整确定事实自动进入执行,不表示收到额外确认回复;不得另行执行 telemetry 命令或伪造用户回复。
|
|
204
193
|
|
|
205
|
-
|
|
194
|
+
**方案后的上下文锁定**:已有项目保持步骤 1 前已经唯一解析的实际根目录和原有工程结构;新项目必须已经在步骤 1 前按用户明确选择的方式完成初始化并通过构建标识检查。此处不重复准备、初始化或探测项目。路径内容与步骤 1 成功时不一致则停止并重新澄清;只有目标项目或服务端语言变化时返回步骤 1,其他情况直接进入步骤 3。
|
|
206
195
|
|
|
207
|
-
完整接入固定在本流程步骤 3 至步骤 8 完成后再进入 onboarding;onboarding
|
|
196
|
+
完整接入固定在本流程步骤 3 至步骤 8 完成后再进入 onboarding;onboarding 自身仍输出非阻塞产品开通方案,外部写入边界继续按 Onboarding flow 执行。
|
|
208
197
|
|
|
209
198
|
---
|
|
210
199
|
|
|
@@ -217,7 +206,7 @@ runner 失败时不得展示手写确认或进入步骤 3。成功时必须同
|
|
|
217
206
|
|
|
218
207
|
**任务**:步骤 1 已就绪时复核同一沙箱配置;步骤 1 已待配置时保持该状态并继续代码开发
|
|
219
208
|
|
|
220
|
-
> 步骤 1 已完成 CLI
|
|
209
|
+
> 步骤 1 已完成 CLI、操作系统和首次配置校验。本步骤只复核方案生成和 receipt 校验期间配置是否仍然安全可用,不重新创建沙箱,也不重新执行环境探测。
|
|
221
210
|
|
|
222
211
|
**完成条件**:
|
|
223
212
|
- [INT.SANDBOX.UNIX_TERMINAL] Unix/macOS/Linux:`READY` 时已用 `reverify` 复核同一配置;步骤 1 或本步骤得到 `CREATE_PENDING|VERIFY_PENDING` 时,未读取或使用无效配置,已保留待配置状态并继续步骤 4
|
|
@@ -232,7 +221,7 @@ runner 失败时不得展示手写确认或进入步骤 3。成功时必须同
|
|
|
232
221
|
4. Unix/macOS/Linux 仅在 `sandboxConfigState=READY` 时执行以下唯一复核命令,不先检查文件、不读取字段、不运行其他诊断:
|
|
233
222
|
|
|
234
223
|
```bash
|
|
235
|
-
|
|
224
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox reverify "<规范化项目路径>" "<已确认服务端语言>"
|
|
236
225
|
```
|
|
237
226
|
|
|
238
227
|
5. `reverify` 只接受与步骤 1 相同的三个互斥终态。`READY` 更新 `sandboxConfigState=READY` 并立即进入步骤 4;`VERIFY_PENDING` 已由脚本输出唯一待配置正文,更新状态后立即进入步骤 4。`reverify` 不允许创建分支,若异常出现 `CREATED|CREATE_PENDING` 标记必须按协议失败停止。所有终态之后禁止追加任何 `jq`、`cat`、`grep`、`ls`、`stat` 或临时脚本。
|
|
@@ -244,7 +233,7 @@ bash modules/scripts/sandbox_config.sh reverify "<规范化项目路径>" "<已
|
|
|
244
233
|
|
|
245
234
|
**任务**:阅读 SDK 要点、本地契约和当前语言示例
|
|
246
235
|
|
|
247
|
-
读取本地依据前执行 `node
|
|
236
|
+
读取本地依据前执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-context resolve --product-type "$PRODUCT_TYPE" --server-language "$SERVER_LANGUAGE"`。只接受唯一 `ALIPAY_AIPAY_INTERNAL:INTEGRATION_CONTEXT=<json>`,并只读取其中列出的 SDK 参考、当前产品本地契约、当前语言示例、适用 checklist 章节和沙箱验收入口;缺失、重复、路径不存在或产品/语言不一致时停止,不回退到跨产品预读。
|
|
248
237
|
|
|
249
238
|
本步骤只加载和核对代码开发依据;成功时不发送“文档已读取”“准备完成”等对客进度,直接进入步骤 5。本地依据缺失时输出实际缺口,禁止猜测。在线文档只在 fallback 条件下读取,不作为默认必读材料。
|
|
250
239
|
|
|
@@ -281,7 +270,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
281
270
|
| 6 | 遇到 `invalid-signature` 报错 | 严禁凭猜测归因到私钥格式;先核对实际发送、参与签名和服务端验签的参数是否完全一致 |
|
|
282
271
|
| 7 | 配置接入后必须后置校验 | Unix/macOS/Linux 必须确认服务端加载器直接读取已验证文件、字段映射正确且 SDK 配置匹配;Windows 必须确认项目读取同一套本机沙箱应用配置;失败时禁止继续联调 |
|
|
283
272
|
|
|
284
|
-
步骤 4 的本地依据全部取得后,执行 `node
|
|
273
|
+
步骤 4 的本地依据全部取得后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration implementation --product-type "$PRODUCT_TYPE"` 加载步骤 5;不得直接读取后续整段 flow。
|
|
285
274
|
|
|
286
275
|
---
|
|
287
276
|
|
|
@@ -308,7 +297,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
308
297
|
|
|
309
298
|
**Node.js 项目前置核对**:目标语言为 Node.js 时,生成或修改代码前必须先读取目标项目 `package.json`,确认 `type`、启动脚本、已安装依赖和框架版本;安装或发现 `alipay-sdk` 后,必须按 `modules/alipay-sdk-reminder.md` 读取实际 `node_modules/alipay-sdk/package.json` 与类型定义来确定导入方式、`pageExec`/`sdkExecute`/`checkNotifySign` 等方法名。不得凭本地示例中的 `require`/`import` 行、历史记忆或其他项目版本推断当前项目写法。
|
|
310
299
|
|
|
311
|
-
代码修改完成后,执行 `node
|
|
300
|
+
代码修改完成后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration verification --product-type "$PRODUCT_TYPE"` 加载配置后置校验;不得把代码写入直接当作验证通过。
|
|
312
301
|
|
|
313
302
|
<!-- ALIPAY_AIPAY_FLOW:INTEGRATION_IMPLEMENTATION:END -->
|
|
314
303
|
|
|
@@ -324,7 +313,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
324
313
|
**沙箱摘要展示入口**:只有 `sandboxConfigState=READY`、本步骤的代码实现和支付配置后置校验都已完成,才允许对客展示沙箱环境配置。待配置状态跳过本入口,不另写摘要或失败话术。Unix/macOS/Linux 从本 flow 所在目录执行:
|
|
325
314
|
|
|
326
315
|
```bash
|
|
327
|
-
|
|
316
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox summary "<productType>" "<规范化项目路径>" "<已确认服务端语言>"
|
|
328
317
|
```
|
|
329
318
|
|
|
330
319
|
该命令 stdout 只渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder`;带 `ALIPAY_AIPAY_INTERNAL:` 前缀的配置路径和 `FLOW:SANDBOX_CONFIGURED` 只用于流程转移,严禁对客。命令不重新创建沙箱,不调用 `createAnonymousSandbox`。`productType` 只能来自步骤 2 已确认的 `aipay|webpay|apppay`;配置路径和语言必须与步骤 1/3 一致。摘要展示失败时不得进入沙箱测试或付款体验,也不得改用 Agent 自写表格。
|
|
@@ -332,7 +321,7 @@ bash modules/scripts/sandbox_config.sh summary "<productType>" "<规范化项目
|
|
|
332
321
|
Windows 从项目实际读取的同一本机配置构造不含密码和密钥原文的 `ENVIRONMENT_ROWS`,再从本 flow 所在目录执行以下固定命令;不得重新索取或复述步骤 1 已提供的敏感值,也不得改用 Unix 快速沙箱脚本:
|
|
333
322
|
|
|
334
323
|
```powershell
|
|
335
|
-
node
|
|
324
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-summary --product-name "$PRODUCT_NAME" --config-path "$CONFIG_PATH" --environment-rows "$ENVIRONMENT_ROWS"
|
|
336
325
|
```
|
|
337
326
|
|
|
338
327
|
Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 只包含实际取得的非敏感应用、商家、买家和沙箱标识,缺失可选项直接省略。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。
|
|
@@ -345,7 +334,7 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
|
|
|
345
334
|
**本地生产参数验收模式**:用户项目尚未上线、无法提供真实公网地址,或当前自定义域名/TLS 检查失败时,网站支付/APP 支付可以进入本模式。要求如下:
|
|
346
335
|
|
|
347
336
|
1. 代码层必须已经实现异步通知处理入口、验签、关键字段校验、幂等和成功响应 `success`,只是当前环境不对外联调。
|
|
348
|
-
2. 运行层可以临时关闭异步通知发起配置或不传 `notify_url`;如项目已有显式开关,也可使用项目内已有的 `notify_enabled=false` 等等价配置,并执行 `node
|
|
337
|
+
2. 运行层可以临时关闭异步通知发起配置或不传 `notify_url`;如项目已有显式开关,也可使用项目内已有的 `notify_enabled=false` 等等价配置,并执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message local-acceptance-notice`,不得另写近似话术。
|
|
349
338
|
3. 本地模式下,网站支付保留 `localhost` 或当前可访问开发地址的 `return_url`/结果页,APP 支付保留本地订单查询链路,并统一提供服务端交易查询或订单查询页作为结果确认兜底。
|
|
350
339
|
4. 任何本地模式结果都只能表述为“本地正式验收完成”或“本地生产参数验收完成,公网异步通知待补齐”,不得表述为“生产就绪”。
|
|
351
340
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
@@ -358,7 +347,7 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
|
|
|
358
347
|
> ⚠️ **按量付费**:代码生成后启动本地服务,后续步骤 6 将默认进行端到端沙箱服务端联调。服务需实现 402 协议(无 `Payment-Proof` 时返回 HTTP 402 + `Payment-Needed` 头)。
|
|
359
348
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
360
349
|
|
|
361
|
-
配置后置校验结束后,执行 `node
|
|
350
|
+
配置后置校验结束后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration acceptance --product-type "$PRODUCT_TYPE"` 加载当前产品适用验收和步骤 7;APP 支付 loader 不记录沙箱验收 stage,但仍加载步骤 7。
|
|
362
351
|
|
|
363
352
|
---
|
|
364
353
|
|
|
@@ -432,9 +421,9 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
|
|
|
432
421
|
|
|
433
422
|
```bash
|
|
434
423
|
# GET
|
|
435
|
-
node
|
|
424
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message a2m-execution-guard --project-path "$PROJECT_PATH" --service-url "$SERVICE_URL" --http-method GET [--prior-receipt "$A2M_EXECUTION_RECEIPT"]
|
|
436
425
|
# POST
|
|
437
|
-
node
|
|
426
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message a2m-execution-guard --project-path "$PROJECT_PATH" --service-url "$SERVICE_URL" --http-method POST --request-body-file "$POST_BODY_FILE" [--prior-receipt "$A2M_EXECUTION_RECEIPT"]
|
|
438
427
|
```
|
|
439
428
|
|
|
440
429
|
只接受唯一 `ALIPAY_AIPAY_INTERNAL:A2M_EXECUTION=<json>`。`decision=RUN` 时保存新 receipt 并继续;`REUSE_PASSED` 复用同一项目和输入的本轮通过证据,不重复联调;`BLOCK_UNCHANGED` 表示失败后代码、配置和输入均未变化,禁止重跑;`UNKNOWN_PREVIOUS_EXECUTION` 表示上次命令可能已发出但未登记终态,禁止自动重跑,先核对实际结果。项目、服务 URL、方法或 POST body 变化时 runner 才会产生新的 `RUN` receipt。receipt 只保留在当前会话,不写跨会话业务进度。
|
|
@@ -442,56 +431,45 @@ node ../normal/scripts/integration_message_runner.mjs a2m-execution-guard --proj
|
|
|
442
431
|
4. 仅 `decision=RUN` 时执行下列固定 runner 命令,输出固定联调说明后立即继续,不等待用户确认;禁止另写开始话术。服务地址和 HTTP 方法只用于后续实际命令,不在本消息中展示:
|
|
443
432
|
|
|
444
433
|
```bash
|
|
445
|
-
node
|
|
434
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message a2m-test-start
|
|
446
435
|
```
|
|
447
436
|
|
|
448
437
|
5. Unix/macOS/Linux 按实际 HTTP 方法从本 flow 所在目录继续执行且只执行以下既有命令。POST body 必须来自已确认目标项目中的实际文件,不把动态 JSON 拼进命令文本:
|
|
449
438
|
|
|
450
439
|
```bash
|
|
451
440
|
# GET
|
|
452
|
-
|
|
453
|
-
--url "$SERVICE_URL" \
|
|
454
|
-
--method GET \
|
|
455
|
-
--buyer-id "$BUYER_2088" \
|
|
456
|
-
--auto-complete \
|
|
457
|
-
--require-payment-validation
|
|
441
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method GET --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
458
442
|
|
|
459
443
|
# POST
|
|
460
|
-
|
|
461
|
-
--url "$SERVICE_URL" \
|
|
462
|
-
--method POST \
|
|
463
|
-
--body "@$POST_BODY_FILE" \
|
|
464
|
-
--buyer-id "$BUYER_2088" \
|
|
465
|
-
--auto-complete \
|
|
466
|
-
--require-payment-validation
|
|
444
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE" --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
467
445
|
```
|
|
468
446
|
|
|
469
447
|
Windows 使用 Node 启动器选择 `py -3|python|python3`,不依赖 Bash 命令解析。先按实际 HTTP 方法执行只读预检的对应单行命令:
|
|
470
448
|
|
|
471
449
|
```powershell
|
|
472
450
|
# GET
|
|
473
|
-
node
|
|
451
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m precheck --url "$SERVICE_URL" --method GET
|
|
474
452
|
|
|
475
453
|
# POST
|
|
476
|
-
node
|
|
454
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m precheck --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE"
|
|
477
455
|
```
|
|
478
456
|
|
|
479
457
|
预检通过后再执行对应联调单行命令:
|
|
480
458
|
|
|
481
459
|
```powershell
|
|
482
460
|
# GET
|
|
483
|
-
node
|
|
461
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method GET --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
484
462
|
|
|
485
463
|
# POST
|
|
486
|
-
node
|
|
464
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE" --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
487
465
|
```
|
|
488
466
|
|
|
489
|
-
只传已确认的本机服务 URL、GET/POST、实际沙箱买家 userId 和项目内 POST body 文件;禁止传入自定义收银端点、`Payment-Proof` 或 attestation。只有同一次命令退出码为 0,且输出包含实际资源交付校验通过和敏感产物已清理,才能记录联调通过;204、空响应、空资源、明确验付/履约失败或异常 `Payment-Validation` 均不得通过。命令结束后立即执行 `node
|
|
467
|
+
只传已确认的本机服务 URL、GET/POST、实际沙箱买家 userId 和项目内 POST body 文件;禁止传入自定义收银端点、`Payment-Proof` 或 attestation。只有同一次命令退出码为 0,且输出包含实际资源交付校验通过和敏感产物已清理,才能记录联调通过;204、空响应、空资源、明确验付/履约失败或异常 `Payment-Validation` 均不得通过。命令结束后立即执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message a2m-execution-result --receipt "$A2M_EXECUTION_RECEIPT" --outcome <PASSED|FAILED>` 并保存返回的新 receipt;进程被中断且无法登记时保留原 receipt,由下次 guard 返回 `UNKNOWN_PREVIOUS_EXECUTION`。失败后只有项目代码、配置或执行输入实际变化并取得新 `RUN` receipt 才能重新联调。
|
|
490
468
|
|
|
491
469
|
服务未就绪时固定使用 `integration.service.not_ready` 输出实际缺口和恢复动作;必须执行下列命令。不得运行测试、登记 `INT.A2M.SERVICE_READY=PASS` 或临场改写近似话术。
|
|
492
470
|
|
|
493
471
|
```bash
|
|
494
|
-
node
|
|
472
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message service-not-ready --recovery-action "$RECOVERY_ACTION"
|
|
495
473
|
```
|
|
496
474
|
|
|
497
475
|
> 详细测试流程见 `modules/sandbox/a2m-sandbox-test.md`
|
|
@@ -509,7 +487,7 @@ node ../normal/scripts/integration_message_runner.mjs service-not-ready --recove
|
|
|
509
487
|
**安全与上线提醒(必须明文打印给用户)**:使用 `../normal/json/customer-messages.json` 的 `integration.safety.closeout`,按已确认 `PRODUCT_TYPE` 固定映射 `PRODUCT_VARIANT`:`aipay=AIPAY`、`webpay=WEBPAY`、`apppay=APPPAY`,并传入实际验收口径。模板一次覆盖服务端私钥、日志/公共仓库、支付结果依据、重复付款、异步通知或 `Payment-Proof`/履约确认、沙箱到生产配置替换、同套生产密钥、按量付费真实 `serviceId` 和语言私钥格式;不得临场删减、拆成第二条消息或维护近似话术。必须执行:
|
|
510
488
|
|
|
511
489
|
```bash
|
|
512
|
-
node
|
|
490
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message safety-closeout --variant "$PRODUCT_VARIANT" --acceptance-summary "$ACCEPTANCE_SUMMARY"
|
|
513
491
|
```
|
|
514
492
|
|
|
515
493
|
生产密钥的一致性、语言格式、官方工具转换、沙箱/生产配置替换、`notify_url` 公网联调边界、按量付费 `api_mock_service_id` 替换和生产就绪表述限制均由上述一条标准消息统一输出。实际写入配置时仍使用不带 PEM 头尾、包装行或说明文字的原始私钥字符串;该执行细节不得省略或改写密钥内容。
|
|
@@ -518,7 +496,7 @@ node ../normal/scripts/integration_message_runner.mjs safety-closeout --variant
|
|
|
518
496
|
- 如果当前意图是 `integration_only`:提醒用户正式上线前还需要完成对应支付产品的产品开通。
|
|
519
497
|
- 如果当前意图是 `full_process`:本步骤只说明仍需完成步骤 8 集成校验;此时不展示签约待办、MCC、授权范围或材料。全部适用步骤通过时进入 onboarding;只有沙箱待配置且其余检查通过,或沙箱 `READY` 且仅剩非阻塞人工待验证项时,也以“部分通过”继续 onboarding;其他阻塞缺口仍停在代码开发。
|
|
520
498
|
|
|
521
|
-
步骤 7 完成后执行 `node
|
|
499
|
+
步骤 7 完成后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration checklist --product-type "$PRODUCT_TYPE" --project-path "$PROJECT_PATH"`;只接受该命令生成的本轮 `CHECKLIST_SCOPE_RECEIPT`,不得使用修复前或其他项目的 receipt。
|
|
522
500
|
|
|
523
501
|
---
|
|
524
502
|
|
|
@@ -551,17 +529,17 @@ node ../normal/scripts/integration_message_runner.mjs safety-closeout --variant
|
|
|
551
529
|
|
|
552
530
|
<!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
|
|
553
531
|
```bash
|
|
554
|
-
node
|
|
532
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant AIPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-result "$SANDBOX_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
555
533
|
```
|
|
556
534
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
557
535
|
<!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
|
|
558
536
|
```bash
|
|
559
|
-
node
|
|
537
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant WEBPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --webpay-experience-result "$WEBPAY_EXPERIENCE_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
560
538
|
```
|
|
561
539
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
562
540
|
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
563
541
|
```bash
|
|
564
|
-
node
|
|
542
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant APPPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
565
543
|
```
|
|
566
544
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
567
545
|
|
|
@@ -135,9 +135,9 @@ Unix/macOS/Linux 的 `sandboxConfigState` 必须复用 integration flow 的固
|
|
|
135
135
|
按当前产品执行对应单行 runner,禁止管道、临时 JSON 包装或二次渲染:
|
|
136
136
|
|
|
137
137
|
```bash
|
|
138
|
-
node
|
|
139
|
-
node
|
|
140
|
-
node
|
|
138
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant AIPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-result "$SANDBOX_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
139
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant WEBPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --webpay-experience-result "$WEBPAY_EXPERIENCE_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
140
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --variant APPPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
只有 `AIPAY` 传入独立 `sandboxResult`;`WEBPAY` 必须按步骤 6 的实际证据传入消息目录登记的 `webpayExperienceResult` 枚举。禁止跨产品传入其他产品结论。这些字段只用于校验代码开发总结果与实际沙箱事实一致,不在最终精简消息中重复展示。内部必须保留所有适用项的检查结论和依据;用户要求完整明细时,再从实际证据输出逐项表格,不维护第二份固定模板。
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
用户描述模糊或关键词匹配不明确时,执行下列命令固定渲染 `product.clarify`,等待用户以自然语言回复产品名称和业务需求。本模块不维护第二份澄清模板;不得临场增加不支持产品、改写 AI 网页应用收款接口或省略三种支持产品。
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
node
|
|
68
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message product-clarify
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
### 不支持场景回复
|
|
@@ -58,8 +58,8 @@ POST 服务将首行 curl 替换为 `curl -s -D - -o /dev/null -X POST -H "Conte
|
|
|
58
58
|
Windows 不使用管道或固定的 `python3` 命令名,从本文件所在目录按实际方法执行对应单行命令;`precheck` 只请求本地服务和校验 HTTP 402/字段,不调用沙箱收银:
|
|
59
59
|
|
|
60
60
|
```powershell
|
|
61
|
-
node
|
|
62
|
-
node
|
|
61
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m precheck --url "$SERVICE_URL" --method GET
|
|
62
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m precheck --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE"
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
---
|
|
@@ -67,10 +67,10 @@ node ../../../normal/scripts/python_script_runner.mjs ../scripts/local_402_sandb
|
|
|
67
67
|
## 测试脚本路径
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
|
|
70
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
Windows 使用 `node
|
|
73
|
+
Windows 使用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m`;启动器只允许该内置脚本,并按系统选择可用的 Python 3 命令。
|
|
74
74
|
|
|
75
75
|
脚本只提供 `run` 子命令,并要求使用 `--auto-complete` 在同一次命令内获取 Payment-Needed、调用沙箱收银和携带 Payment-Proof 重试原始服务。不存在跨轮 `complete` 或恢复命令。
|
|
76
76
|
|
|
@@ -106,10 +106,10 @@ Windows 使用 `node ../../../normal/scripts/python_script_runner.mjs ../scripts
|
|
|
106
106
|
|
|
107
107
|
**⚠️ 脚本的收银接口地址和付款链接前缀已硬编码在脚本中(`PAY_ENDPOINT`、`PAY_URL_PREFIX`),执行时无需额外指定。**
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
先按统一 runtime 的 `integration-message a2m-execution-guard` 当前会话 receipt 契约校验项目快照、服务 URL、HTTP 方法和可选 POST body。只有 `decision=RUN` 才使用 `../../../normal/json/customer-messages.json` 的 `a2m.test.start` 渲染固定联调说明并立即运行脚本;`REUSE_PASSED|BLOCK_UNCHANGED|UNKNOWN_PREVIOUS_EXECUTION` 均不得重复发起完整联调。服务地址和 HTTP 方法只用于实际命令,不在开始消息中展示。
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
node
|
|
112
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message a2m-test-start
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
不得在模块或 Agent 回复中维护第二份近似开始话术。
|
|
@@ -117,31 +117,20 @@ node ../../../normal/scripts/integration_message_runner.mjs a2m-test-start
|
|
|
117
117
|
GET 请求:
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
|
-
|
|
121
|
-
--url "$SERVICE_URL" \
|
|
122
|
-
--method GET \
|
|
123
|
-
--buyer-id "$BUYER_2088" \
|
|
124
|
-
--auto-complete \
|
|
125
|
-
--require-payment-validation
|
|
120
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method GET --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
126
121
|
```
|
|
127
122
|
|
|
128
123
|
POST 请求:
|
|
129
124
|
|
|
130
125
|
```bash
|
|
131
|
-
|
|
132
|
-
--url "$SERVICE_URL" \
|
|
133
|
-
--method POST \
|
|
134
|
-
--body "$BODY" \
|
|
135
|
-
--buyer-id "$BUYER_2088" \
|
|
136
|
-
--auto-complete \
|
|
137
|
-
--require-payment-validation
|
|
126
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method POST --body "$BODY" --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
138
127
|
```
|
|
139
128
|
|
|
140
129
|
Windows 从本文件所在目录按实际 HTTP 方法执行对应单行命令:
|
|
141
130
|
|
|
142
131
|
```powershell
|
|
143
|
-
node
|
|
144
|
-
node
|
|
132
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method GET --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
133
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" a2m run --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE" --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
|
|
145
134
|
```
|
|
146
135
|
|
|
147
136
|
**脚本执行步骤**:
|
|
@@ -218,7 +207,7 @@ Payment-Proof 参考结构:
|
|
|
218
207
|
|
|
219
208
|
测试结束后使用 `a2m.test.result`:只有脚本退出码和本模块要求的组合证据都成立时选择 `PASSED`;其他情况选择 `FAILED` 并传入实际证据与确定恢复动作。不得把用户付款体验、沙箱配置落盘或任意 2xx 响应替代通过证据。
|
|
220
209
|
|
|
221
|
-
输出测试结论后,使用 `a2m.payment.experience/FULL` 展示付款链接和已经通过快速沙箱字段校验的实际买家账号。缺少任一账号字段时,当前沙箱配置必须已经在前置校验进入待配置状态,不得执行本联调或输出付款体验,也不得编造缺失凭据。随后执行 `node
|
|
210
|
+
输出测试结论后,使用 `a2m.payment.experience/FULL` 展示付款链接和已经通过快速沙箱字段校验的实际买家账号。缺少任一账号字段时,当前沙箱配置必须已经在前置校验进入待配置状态,不得执行本联调或输出付款体验,也不得编造缺失凭据。随后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message sandbox-android-client` 统一输出 Android-only 官方下载与失败兜底。两条消息都不增加阻塞点,也不反向改变服务端联调结论。
|
|
222
211
|
|
|
223
212
|
最后必须提醒用户:
|
|
224
213
|
|