@alipay/alipay-aipay 1.5.1 → 1.5.2
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 +3 -2
- 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/alipay-sandbox-tool.md +1 -1
- package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +4 -4
- package/skill/references/normal/alipay-cli-env.md +2 -2
- 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/scripts/telemetry.mjs +27 -26
- package/skill/references/normal/self-update.md +2 -2
- package/skill/references/normal/telemetry.md +5 -5
- package/skill/references/onboarding/flow.md +67 -80
- 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
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
## 执行入口与重启原则
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
只通过当前 Skill 绝对路径下的统一 runtime 按 marker 加载阶段,本 flow 仍是唯一执行依据:`entry`;非阻塞方案后 `execute --product-type "$PRODUCT_TYPE"`;发现后 `branch-summary`;轮到分支时 `signing|service|application --product-type "$PRODUCT_TYPE"`;最后 `closeout`。禁止整份预读;统一单命令规则继承 `runtime-entry.md`。仅脚本异常、用户要求解释或 phase 明示缺少依据时读取当前一个模块,禁止预读全部分支、凭记忆拼 MCP 或绕过 `auth.sh`。原 flow 保留完整规则供校验。
|
|
11
11
|
|
|
12
12
|
每次开始都先校验登录、scope 和 MCC,再查询签约状态、应用候选和适用服务候选,并只依据当前真实结果继续。不得根据历史对话推定外部操作结果。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
步骤顺序固定为方案展示后自动进入授权,再执行全部适用只读查询,最后处理独立分支。查询失败只阻断对应分支,不得当作空列表;其他查询成功的分支可以继续。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
方案展示前只允许根据 `modules/mcc-reference.md` 当前匹配行陈述 MCC 名称、适用商家和特殊资质原文;特殊资质为 `-` 只表示当前表未列出,不代表对企业/个人签约资格作出结论。表内没有明确依据的主体资格、前提或材料结论统一说明无法确认,禁止补充常识推断。
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -46,20 +46,11 @@
|
|
|
46
46
|
|
|
47
47
|
### 标准消息执行规则
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
node ../normal/scripts/render_customer_message.mjs --schema <messageId> --variant <VARIANT>
|
|
53
|
-
node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIANT> --input-json "$MESSAGE_INPUT_JSON"
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
托管消息禁止改为临时 `jq+renderer`。失败停步且不手写兜底;stdout 和阻塞规则按 `SKILL.md` 执行。
|
|
57
|
-
|
|
58
|
-
**工作目录**:本文 Skill 相对命令以 `references/onboarding/` 为 workdir。Onboarding 不改用户项目;检查本机路径时显式传规范化绝对路径,不得切换到启动目录、用户项目或另一份 Skill。
|
|
49
|
+
继承已加载的 `runtime-entry.md` 对客 stdout、内部行、schema/renderer fallback 和统一单命令规则。动作有 runner/script 时只执行动作处完整命令,禁止拆回 `jq/printf/renderer` 或追加管道;失败停步且不手写兜底。统一 runtime 不依赖 cwd;Onboarding 不改用户项目,本机路径须显式传规范化绝对路径。
|
|
59
50
|
|
|
60
51
|
### 耗时事件规则
|
|
61
52
|
|
|
62
|
-
`start-run` 已确定 `run_id
|
|
53
|
+
`start-run` 已确定 `run_id`;stage 由登记动作异步记录,Agent 不手工上报。遥测失败不改变业务;诊断只按需读 `../normal/telemetry.md`。
|
|
63
54
|
|
|
64
55
|
---
|
|
65
56
|
|
|
@@ -85,20 +76,20 @@ Step 1: 方案规划 → Step 2: 环境检查 → Step 3: 登录授权
|
|
|
85
76
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:END -->
|
|
86
77
|
|
|
87
78
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:START -->
|
|
88
|
-
进入任何产品开通环境检查、产品/MCC
|
|
79
|
+
进入任何产品开通环境检查、产品/MCC 澄清或方案展示前,先执行一次确定性平台入口:
|
|
89
80
|
|
|
90
81
|
```bash
|
|
91
|
-
node
|
|
82
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message platform-entry
|
|
92
83
|
```
|
|
93
84
|
|
|
94
|
-
- Windows:runner stdout 是唯一对客正文,必须原文发送;发送后停止本 flow 的产品开通动作,不再执行 Step 1、MCC
|
|
85
|
+
- Windows:runner stdout 是唯一对客正文,必须原文发送;发送后停止本 flow 的产品开通动作,不再执行 Step 1、MCC 澄清、方案展示、登录或材料收集。`onboarding_only` 在根意图识别后进入本 flow 即执行;`full_process` 保留已完成的 Integration 实际结果,在衔接本 flow 时执行。
|
|
95
86
|
- 非 Windows:runner 成功且 stdout 为空,直接继续下方既有流程,不输出平台提示,不改变步骤、确认或完成条件。
|
|
96
87
|
- 命令失败或输出无法唯一判断时停止并核对 runner,禁止手写、改写或补发近似引导。
|
|
97
88
|
|
|
98
89
|
企业账号边界:如果用户明确表示当前要用企业账号通过 Skill 完成产品开通,必须执行下列标准消息命令并停止本 flow 的产品开通动作,引导前往支付宝商家平台。不得主动增加账号类型确认,也不得根据 MCC、营业执照字段或“公司”等泛化描述推断为企业账号;没有明确依据时继续按本 flow 执行。
|
|
99
90
|
|
|
100
91
|
```bash
|
|
101
|
-
node
|
|
92
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message enterprise-unsupported --variant <ONBOARDING_ONLY|FULL_PROCESS>
|
|
102
93
|
```
|
|
103
94
|
|
|
104
95
|
`onboarding_only` 固定使用 `ONBOARDING_ONLY`;`full_process` 只会在代码开发已通过后进入本 flow,固定使用 `FULL_PROCESS`。runner stdout 是该意图的最终产品开通消息,必须把 stdout 原文作为当前回复正文发给用户;命令面板、折叠输出或“已渲染/已展示”说明不能替代对客消息。发出 stdout 原文后直接停止本 flow,不再执行 Step 6 或追加第二份收口。
|
|
@@ -128,20 +119,20 @@ node ../normal/scripts/onboarding_message_runner.mjs enterprise-unsupported --va
|
|
|
128
119
|
产品能够从用户已提供的产品名称或业务描述中可靠映射时直接使用,不重复询问。仍无法唯一确定时,只执行下列固定消息命令;runner stdout 是本轮唯一对客正文,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止并等待用户回复产品名称或明确业务描述。回复后仍无法唯一确定时继续执行同一消息,禁止自由补问或推定产品。
|
|
129
120
|
|
|
130
121
|
```bash
|
|
131
|
-
node
|
|
122
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message product-clarify
|
|
132
123
|
```
|
|
133
124
|
|
|
134
|
-
产品明确后,若用户尚未提供经营描述或已知 MCC,只执行 `node
|
|
125
|
+
产品明确后,若用户尚未提供经营描述或已知 MCC,只执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message mcc-clarify --product-type "$PRODUCT_TYPE"`,把 stdout 原文作为当前回复正文发给用户并停止本轮。`mcc-clarify` 只用于首次缺少检索输入;用户已经提供任何可检索描述后不得再次调用。
|
|
135
126
|
|
|
136
|
-
已有经营描述或明确类目时,将其作为 `MCC_SEARCH_QUERY`
|
|
127
|
+
已有经营描述或明确类目时,将其作为 `MCC_SEARCH_QUERY` 执行唯一的本地确定性解析和方案展示入口;该命令不调用远程服务:
|
|
137
128
|
|
|
138
129
|
```bash
|
|
139
|
-
node
|
|
130
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message mcc-resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE"
|
|
140
131
|
```
|
|
141
132
|
|
|
142
|
-
只接受唯一 `ALIPAY_AIPAY_INTERNAL:MCC_RESOLUTION=<json>`:`matchType=UNIQUE` 时必须恰有一条候选,stdout 已直接渲染同一候选绑定的 `onboarding.plan.confirm
|
|
133
|
+
只接受唯一 `ALIPAY_AIPAY_INTERNAL:MCC_RESOLUTION=<json>`:`matchType=UNIQUE` 时必须恰有一条候选,stdout 已直接渲染同一候选绑定的 `onboarding.plan.confirm`,必须原文发送但不停止、不等待回复,随后立即进入 `execute`;`MULTIPLE` 时 runner stdout 已直接渲染固定候选消息,必须原文发送并停止,等待用户回复序号、MCC 二级类目名称或编码;`NONE` 时 runner stdout 已直接渲染独立 `onboarding.mcc.no_match`,必须原文发送并停止。禁止再次调用旧的 `mcc-search`/`mcc-candidates` 组合、自由拼候选表、解释、示例或“是否继续”等近似问法。
|
|
143
134
|
|
|
144
|
-
用户回复序号时,只能映射到上一条 `mcc-resolve-plan` stdout 中同一份候选表的对应行,并把该行完整 MCC 编码作为新的 `MCC_SEARCH_QUERY` 再执行同一 `mcc-resolve-plan`;用户回复 MCC 二级类目名称、编码或新的经营描述时也自动作为新查询执行同一入口。`UNIQUE`
|
|
135
|
+
用户回复序号时,只能映射到上一条 `mcc-resolve-plan` stdout 中同一份候选表的对应行,并把该行完整 MCC 编码作为新的 `MCC_SEARCH_QUERY` 再执行同一 `mcc-resolve-plan`;用户回复 MCC 二级类目名称、编码或新的经营描述时也自动作为新查询执行同一入口。`UNIQUE` 直接输出非阻塞方案;`MULTIPLE|NONE` 继续使用 runner 本次真实 stdout。无需固定重试口令,不得猜测或追加近似候选。
|
|
145
136
|
|
|
146
137
|
产品确定后,`salesCode`、`scope` 和材料要求统一取自“一、产品映射”,禁止在本步骤另建映射或改写固定值。
|
|
147
138
|
|
|
@@ -150,7 +141,7 @@ node ../normal/scripts/onboarding_message_runner.mjs mcc-resolve-plan --query "$
|
|
|
150
141
|
- 示例:互联网综合电商平台 (A0002_B0114)
|
|
151
142
|
- mccCode 格式:`Axxxx_Bxxxx`
|
|
152
143
|
|
|
153
|
-
|
|
144
|
+
**一次性方案展示**:
|
|
154
145
|
|
|
155
146
|
完成产品与 MCC 匹配后,在执行 `auth.sh init` 前一次性展示:
|
|
156
147
|
|
|
@@ -159,15 +150,11 @@ node ../normal/scripts/onboarding_message_runner.mjs mcc-resolve-plan --query "$
|
|
|
159
150
|
3. 当前产品在“未签约”或“需要新建应用”时可能需要的条件材料;不在状态查询前要求用户确认材料齐备状态。
|
|
160
151
|
4. 固定展示企业账号暂不支持通过 Skill 完成产品开通,并引导前往支付宝商家平台;这只是边界预告,不新增账号类型问题。用户已经明确表示使用企业账号时不得继续展示可确认方案,改走入口处的停止分支。
|
|
161
152
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
产品无法可靠识别时只使用上方 `product-clarify`;产品明确但尚无 MCC 检索输入时只使用一次 `mcc-clarify`;已有检索输入后统一使用 `mcc-resolve-plan`,由 runner 直接返回方案确认、候选或 `onboarding.mcc.no_match`。用户已经明确提供的信息不得重复询问,但未经用户明确确认不得执行 `login`。登录后必须先执行 Step 3.1 的只读查询,再根据实际结果收集签约、服务和应用分支的必要资料。
|
|
165
|
-
|
|
166
|
-
**阻塞规则(执行约束,不是对客正文)**:必须等待用户明确确认产品、MCC 和授权范围。确认信息有误时先更新并重新渲染标准消息;`full_process` 的项目状态回答、代码开发确认和服务声明确认均不能替代本确认。已经取得材料时继承实际图片引用、APP 名称、缺失项和校验结果,不重复采集,但仍需完成本步骤确认。缺少实际入参或校验证据时必须补齐;产品或 MCC 变化后旧回复失效。
|
|
153
|
+
方案必须由上方 `mcc-resolve-plan` 或已持有唯一 MCC 事实时的统一 runtime `onboarding-message plan-confirm` 动作生成;禁止直接调用 renderer 或用 `jq/printf` 拼输入。三个产品变体都固定展示企业账号边界和支付宝商家平台链接,不得删减或改写。MCC 名称、编码和特殊资质必须逐字来自 runner 唯一命中或 `mcc-reference.md` 的同一行,并通过 runner 内部 renderer 交叉校验;特殊资质为 `-` 时固定显示“当前类目参考表未列出”,不得解释为企业/个人资格结论。禁止自由补充主体资格、营业执照、审核规则或其他模板未列出的前提。用户明确表示企业账号要通过 Skill 完成产品开通时,改用 `enterprise-unsupported` 并停止产品开通,不得继续生成授权或收集材料。产品或 MCC 事实变化时重新校验并渲染完整方案。字段齐备后不得先输出产品判断、材料预告、企业账号提示或待办;runner stdout 是 Step 1 唯一对客消息,必须把 stdout 原文作为非阻塞消息发给用户,然后直接进入执行,不等待用户回复。
|
|
167
154
|
|
|
168
|
-
`
|
|
155
|
+
产品无法可靠识别时只使用上方 `product-clarify`;产品明确但尚无 MCC 检索输入时只使用一次 `mcc-clarify`;已有检索输入后统一使用 `mcc-resolve-plan`,由 runner 直接返回方案、候选或 `onboarding.mcc.no_match`。用户已经明确提供的信息不得重复询问;只有产品和唯一 MCC 事实都通过机器校验后才能执行 `login`。登录后必须先执行 Step 3.1 的只读查询,再根据实际结果收集签约、服务和应用分支的必要资料。
|
|
169
156
|
|
|
170
|
-
|
|
157
|
+
**自动推进规则(执行约束,不是对客正文)**:只有产品、MCC 名称、MCC 编码、特殊资质和固定授权范围都由同一条唯一匹配事实交叉校验通过,才允许输出方案并立即执行统一 runtime 的 `flow onboarding execute --product-type "$PRODUCT_TYPE"`。缺少实际入参、结果为多候选/无匹配、字段冲突或校验证据不足时必须停留在 Step 1 澄清,禁止靠默认值推进。产品或 MCC 在进入 loader 前发生变化时重新校验和渲染方案。loader 继续在相同转移位置记录兼容 stage `onboarding.user_confirmed`,该 stage 表示已基于完整确定事实进入执行,不表示收到额外确认回复;禁止手工上报或伪造用户回复。
|
|
171
158
|
|
|
172
159
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:END -->
|
|
173
160
|
|
|
@@ -175,10 +162,10 @@ node ../normal/scripts/onboarding_message_runner.mjs mcc-resolve-plan --query "$
|
|
|
175
162
|
<!-- ALIPAY_AIPAY_STAGE:onboarding.user_confirmed -->
|
|
176
163
|
### Step 2: 环境检查
|
|
177
164
|
|
|
178
|
-
|
|
165
|
+
Step 1 当前方案已基于完整确定事实输出后,立即进入本 flow 的 `execute` 阶段;阶段 loader 在原位置记录兼容 stage `onboarding.user_confirmed`。随后执行只读环境检查:
|
|
179
166
|
|
|
180
167
|
```bash
|
|
181
|
-
|
|
168
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env check --product-type "$PRODUCT_TYPE"
|
|
182
169
|
```
|
|
183
170
|
|
|
184
171
|
- 唯一 `CLI_ENV:READY`:直接进入 Step 3,不读取完整安装文档。
|
|
@@ -191,25 +178,25 @@ bash ../normal/scripts/alipay_cli_env.sh check --product-type "$PRODUCT_TYPE"
|
|
|
191
178
|
|
|
192
179
|
### Step 3: 登录授权
|
|
193
180
|
|
|
194
|
-
|
|
181
|
+
产品和唯一 MCC 事实已校验、方案送达且 Step 2 环境就绪后,只调用本节 `auth.sh init|open|wait|confirm|mismatch` 动作;脚本异常需要核对授权业务语义时才读取 `modules/authorization.md`。禁止直调 `alipay-cli login`、解析原始输出或展示 `verification_url`。
|
|
195
182
|
|
|
196
|
-
|
|
183
|
+
当前方案基于完整确定事实送达后,`execute` 阶段 loader 已在原位置记录兼容 stage `onboarding.user_confirmed`;`auth.sh init` 会在固定授权上下文机器校验通过、开始授权业务动作前记录 `onboarding.auth.start`。两者都不替代登录、scope 或 MCC 完成条件,也不表示收到额外用户回复;不得另行执行 telemetry 命令造成重复事件。
|
|
197
184
|
|
|
198
185
|
这些脚本是联网命令,首次执行即按 `../normal/alipay-cli-env.md` 申请权限。`AUTH_FLOW:RETRY_WITH_NETWORK` 只表示当前执行环境无法确认结果:取得权限后重试同一完整命令,不得解释为用户本机或支付宝业务失败,也不得改为手工 logout/login。
|
|
199
186
|
|
|
200
|
-
Step 1
|
|
187
|
+
Step 1 的产品/MCC 唯一事实校验和方案送达、Step 2 的环境 READY 都是授权前置;产品或 MCC 仍缺失、冲突、非唯一或环境未就绪时禁止 login,`full_process` 也不得绕过。
|
|
201
188
|
|
|
202
189
|
`auth.sh init --defer-open` 和本节登记的 `app.sh key` 命令先校验 URL 并输出页面说明;Agent 把 stdout 原文作为独立对客消息送达后,立即执行对应 open 子命令使用受控 opener,不新增确认。具体中性文案和兜底见对应模块,不改变 MCP 契约。
|
|
203
190
|
|
|
204
191
|
**完整流程**:
|
|
205
192
|
```
|
|
206
|
-
1.
|
|
193
|
+
1. node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" auth init --defer-open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
207
194
|
├─ AUTH_FLOW:SKIP → 进入 Step 3.1并复用合法签约查询事实
|
|
208
195
|
├─ AUTH_FLOW:READY_TO_OPEN → 输出非阻塞授权页,执行第 2 项
|
|
209
196
|
├─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH → 执行第 4 项
|
|
210
197
|
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
211
198
|
└─ AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止进入 Step 3.1
|
|
212
|
-
2. 仅 AUTH_FLOW:READY_TO_OPEN:把 init 的 stdout 原文作为独立对客消息送达后,立即执行
|
|
199
|
+
2. 仅 AUTH_FLOW:READY_TO_OPEN:把 init 的 stdout 原文作为独立对客消息送达后,立即执行 node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" auth open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME";open 无对客 stdout,打开失败不影响已交付 URL。随后执行 node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" auth wait --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
213
200
|
├─ open 返回 AUTH_FLOW:CONTEXT_MISMATCH → 不执行 wait;使用当前已确认的完整参数重新执行第 1 项
|
|
214
201
|
├─ open 返回 AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止执行 wait 或进入 Step 3.1
|
|
215
202
|
├─ open 返回 AUTH_OPEN:OPENED|OPEN_FAILED|GUI_UNAVAILABLE|LINK_ONLY → 继续执行 wait;后 3 种只表示 opener 结果,不影响已交付 URL
|
|
@@ -221,8 +208,8 @@ Step 1 的方案确认和 Step 2 的环境 READY 都是授权前置;产品或
|
|
|
221
208
|
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
222
209
|
├─ AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止进入 Step 3.1
|
|
223
210
|
└─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH → 执行第 4 项
|
|
224
|
-
3. 仅 PENDING 后把用户原始回复传给 `node
|
|
225
|
-
4.
|
|
211
|
+
3. 仅 PENDING 后把用户原始回复传给 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-recovery auth-confirm --reply "$USER_REPLY" --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"`;runner 复用统一肯定语义判定(包括 `1`、“继续”“好了”“已完成”“OK”等),接受后只执行一次原 `auth.sh confirm`。否定、疑问、取消、修改意见或含糊输入返回内部拒绝且不得查询;成功后的转移同第 2 项,PENDING 继续等待且不重启轮询
|
|
212
|
+
4. node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" auth mismatch --defer-open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
226
213
|
├─ AUTH_FLOW:READY_TO_OPEN → 输出非阻塞授权页并按第 2 项执行 open + wait
|
|
227
214
|
├─ AUTH_FLOW:CONTEXT_MISMATCH → 未执行 logout;使用当前已确认的完整参数重新执行第 1 项
|
|
228
215
|
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
@@ -247,12 +234,12 @@ Step 1 的方案确认和 Step 2 的环境 READY 都是授权前置;产品或
|
|
|
247
234
|
|
|
248
235
|
```bash
|
|
249
236
|
# auth.sh 已提供合法可复用签约事实时,追加同一组 --reuse-sign-status/--reuse-sign-flow;否则不传。
|
|
250
|
-
node
|
|
237
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-discovery run --product-type "$PRODUCT_TYPE" --sales-code "$SALES_CODE" [--reuse-sign-status "$SIGN_STATUS" --reuse-sign-flow "$SIGN_FLOW"]
|
|
251
238
|
```
|
|
252
239
|
|
|
253
240
|
只接受唯一 `ALIPAY_AIPAY_INTERNAL:DISCOVERY_RESULT=<json>`。runner stdout 保留底层脚本已有的受控错误正文,并在没有全局授权阻断时追加原 `onboarding.discovery.summary` 标准正文;必须原文送达,不得手写、压缩或再次调用 `discovery-summary`。envelope 中每个分支只允许 `SUCCESS|QUERY_FAILED|NOT_APPLICABLE`:成功分支携带原脚本的确定状态和候选,失败不得伪装为空列表;存在 `global_blocker=AUTHORIZATION_INVALID` 时停止查询组,按 Step 3 重新授权,不进入 Step 4。
|
|
254
241
|
|
|
255
|
-
不存在全局授权阻断时,执行 `node
|
|
242
|
+
不存在全局授权阻断时,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow onboarding branch-summary` 加载 Step 4 和三个分支共用的 Step 5 约束;共用区块只加载一次,不得整份读取后续 flow。
|
|
256
243
|
|
|
257
244
|
Step 5 直接使用对应 phase 的完整命令;仅出现脚本异常、需要解释登记业务语义或用户明确要求详情时读取当前分支模块,错误恢复时才读取 `error-handling.md`。不得提前加载其他分支,也不重复读取已经读过且未变化的章节。
|
|
258
245
|
|
|
@@ -281,18 +268,18 @@ Step 5 直接使用对应 phase 的完整命令;仅出现脚本异常、需要
|
|
|
281
268
|
|
|
282
269
|
Step 3.1 的 discovery runner 已在同一次 stdout 中展示签约、服务市场和应用发布摘要;网站支付和 APP 支付的服务市场固定为“无需处理”,查询失败显示“查询失败”。进入本阶段后只消费同一 `DISCOVERY_RESULT` envelope,禁止再次调用 `discovery-summary`、手写状态枚举或重复输出摘要。
|
|
283
270
|
|
|
284
|
-
随后按“签约 -> 服务 -> 应用”的默认顺序一次只处理一个实际适用且当前可推进的类别。三个适用分支均已处理,或其实际失败、未知、待生效、待审核和人工待办已经登记后,执行 `node
|
|
271
|
+
随后按“签约 -> 服务 -> 应用”的默认顺序一次只处理一个实际适用且当前可推进的类别。三个适用分支均已处理,或其实际失败、未知、待生效、待审核和人工待办已经登记后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow onboarding closeout` 加载 Step 6;仍有可推进分支未处理时不得提前收口。
|
|
285
272
|
|
|
286
|
-
轮到某类别且即将执行其业务动作时,先执行对应 loader:签约用 `node
|
|
273
|
+
轮到某类别且即将执行其业务动作时,先执行对应 loader:签约用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow onboarding signing --product-type "$PRODUCT_TYPE"`,仅按量付费服务用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow onboarding service --product-type "$PRODUCT_TYPE"`,应用用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow onboarding application --product-type "$PRODUCT_TYPE"`。loader 自动记录该分支 stage;未轮到或不适用的分支不得加载、不得记录。
|
|
287
274
|
|
|
288
275
|
轮到服务或应用类别时才执行对应 runner;其 stdout 一次生成候选事实和适用选择提示,是当前唯一对客正文。禁止提前展示、手工拼表、压缩为纯 ID、拆开渲染或改写:
|
|
289
276
|
|
|
290
277
|
```bash
|
|
291
278
|
# 仅按量付费,轮到服务类别时
|
|
292
|
-
node
|
|
279
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json "$SERVICE_CANDIDATES_JSON"
|
|
293
280
|
|
|
294
281
|
# 轮到应用类别时
|
|
295
|
-
node
|
|
282
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type "$APPLICATION_TYPE" --candidates-json "$APP_CANDIDATES_JSON"
|
|
296
283
|
```
|
|
297
284
|
|
|
298
285
|
空候选时直接进入新建资料分支;非空时发出 runner stdout 后等待当前候选允许的选择。
|
|
@@ -302,7 +289,7 @@ node ../normal/scripts/onboarding_message_runner.mjs application-candidates --ap
|
|
|
302
289
|
执行前根据当前已确认状态选择唯一 runner 枚举:`INITIAL` 对应“待补充”,`PARTIAL` 对应“部分已提供,待补充”,`INVALID` 对应“校验失败,需更正”。不在这三种状态时停止并核对,不执行展示命令。确定 `MATERIAL_CATEGORY` 和 `MATERIALS_STATE` 后,只执行下列单条命令:
|
|
303
290
|
|
|
304
291
|
```bash
|
|
305
|
-
node
|
|
292
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category "$MATERIAL_CATEGORY" --state "$MATERIALS_STATE" --product-type "$PRODUCT_TYPE" --missing-fields "$MISSING_FIELDS"
|
|
306
293
|
```
|
|
307
294
|
|
|
308
295
|
`INITIAL` 不展示内部状态;`PARTIAL` 固定使用“还需补充”;`INVALID` 固定使用“以下内容需要更正”。renderer 会校验变体与 `currentStatus` 一致,禁止 Agent 自由选用不匹配话术。
|
|
@@ -319,15 +306,15 @@ node ../normal/scripts/onboarding_message_runner.mjs material-collect --category
|
|
|
319
306
|
**应用分支**:
|
|
320
307
|
|
|
321
308
|
- `app.sh list` 只提供带统一前缀的内部候选事实;应用类别正文只能由上方 `application-candidates` runner 使用同一快照一次生成。`ON_LINE` 只接受完整 `appId` 或 `新建`;仅非上线候选时由用户选 `暂不新建` 或 `新建`。
|
|
322
|
-
- 列表确实为空或用户选择新建时,按量付费/网站支付一次说明应用公钥要求;APP 支付必须执行下方 `APP_MOBILE_INITIAL` 固定命令,一次展示三个可创建平台组合并要求用户在一条回复中提供所选组合全部资料,禁止先单独询问 `mobilePlatform`。iOS 对应内部值 `mobilePlatform=IOS` 和 `bundleId`,Android 对应 `mobilePlatform=ANDROID`、`appPackage`、`appSign`,iOS + Android 对应 `mobilePlatform=ALL` 及三项字段;这些内部名只用于参数映射,不得作为未解释的对客字段名。字段缺失时使用 `PARTIAL` 和中文字段名,校验失败时使用 `INVALID` 和中文字段名;已通过字段不得重复收集。这些字段可在签约提交前采集和校验,但只能在 Step 5.3 创建应用时使用。HarmonyOS 不收集或编造 `mobilePlatform`、审核材料或 MCP 字段,必须执行 `node
|
|
309
|
+
- 列表确实为空或用户选择新建时,按量付费/网站支付一次说明应用公钥要求;APP 支付必须执行下方 `APP_MOBILE_INITIAL` 固定命令,一次展示三个可创建平台组合并要求用户在一条回复中提供所选组合全部资料,禁止先单独询问 `mobilePlatform`。iOS 对应内部值 `mobilePlatform=IOS` 和 `bundleId`,Android 对应 `mobilePlatform=ANDROID`、`appPackage`、`appSign`,iOS + Android 对应 `mobilePlatform=ALL` 及三项字段;这些内部名只用于参数映射,不得作为未解释的对客字段名。字段缺失时使用 `PARTIAL` 和中文字段名,校验失败时使用 `INVALID` 和中文字段名;已通过字段不得重复收集。这些字段可在签约提交前采集和校验,但只能在 Step 5.3 创建应用时使用。HarmonyOS 不收集或编造 `mobilePlatform`、审核材料或 MCP 字段,必须执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-harmony-manual-create` 并等待当前消息后的明确肯定回复;回复先经 `interaction_reply.mjs` 校验,确认后重新查询 `MOBILEAPP` 列表。只有实际返回 `ON_LINE` 候选时进入复用路径,否则应用分支转为人工待办;该等待和待办都不阻断签约及其他事实明确的独立分支。
|
|
323
310
|
|
|
324
311
|
```bash
|
|
325
|
-
node
|
|
312
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
|
|
326
313
|
```
|
|
327
314
|
|
|
328
315
|
APP 支付后续补充提示只允许以下对客字段名,并按用户所选平台计算缺失项:`iOS Bundle ID(bundleId)`、`Android 应用包名(appPackage)`、`Android 应用签名摘要(appSign)`。用户在同一条回复中主动提供应用公钥时直接接收并按公钥红线处理;未提供公钥不阻止创建应用。
|
|
329
316
|
- 应用公钥原文只能由用户明确提供,不得生成、推断或改写;输入只用于当前 `app.sh key/verify-key/verify-key-and-audit` 调用,Agent 不得复述或写入状态/日志。资料状态只记录“已准备/未准备”。未准备公钥不阻止创建,但创建后停在设钥阶段。
|
|
330
|
-
- 目标 `appId` 已确定但用户尚未准备公钥时,自动执行 `
|
|
317
|
+
- 目标 `appId` 已确定但用户尚未准备公钥时,自动执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" key-tool`。macOS/Windows 下载到当前用户可写的默认 Downloads 目录并在脚本内部使用 `key_tool.download.result` 展示实际安装包路径、安装引导和 `https://opendocs.alipay.com/isv/02kipk` 手动下载兜底;Linux、目录不可用、网络不可达、依赖缺失、跳转不可信或包校验失败时在脚本内部使用 `key_tool.download.fallback`。该脚本 stdout 是当前动作唯一对客正文,不输出 `DOWNLOADED`、`PATH=`、`DOWNLOAD_FAILED`、`DOWNLOAD_REASON` 等机器标记;只下载,不安装、不启动、不生成密钥。本地 OpenSSL 命令生成方式仍为待定,禁止输出或执行。
|
|
331
318
|
|
|
332
319
|
**应用候选选择铁律**:存在 `ON_LINE` 候选时只接受当前完整 `appId` 或 `新建`;仅有非上线候选时只接受 `新建` 或 `暂不新建`;列表为空时进入新建资料分支。禁止序号、历史候选或 Agent 自报 ID。复用后始终使用所选完整 ID;`新建` 即为创建确认,不追加回复 `1`。创建前重查列表并用 `application-recheck` 比较前后快照:stdout 为空且资料齐备时创建,非空时旧选择失效并原文发出后重新选择。
|
|
333
320
|
|
|
@@ -340,7 +327,7 @@ APP 支付未签约时的签约字段:
|
|
|
340
327
|
| APP界面截图 | 必填 | 3张截图,支持拖拽上传或提供本地文件路径,顺序为首页、商品页、支付页 |
|
|
341
328
|
|
|
342
329
|
**脚本**:
|
|
343
|
-
- `
|
|
330
|
+
- `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" screenshots --product-type "$PRODUCT_TYPE" <img1> <img2> <img3>` - 上传3张截图;用户可拖拽上传图片,Agent 将拖拽后的本地文件路径传给脚本
|
|
344
331
|
|
|
345
332
|
上传成功时只把脚本 stdout 的“截图上传成功”原文对客;从带统一前缀的 `SCREENSHOT_HOME_REF`、`SCREENSHOT_SHOP_REF`、`SCREENSHOT_PAY_REF` 内部事实按首页、商品页、支付页顺序记录三个图片引用,严禁对客展示这些引用或 `collect_information` 等内部状态。APP 支付同时保留已校验的 APP 名称。
|
|
346
333
|
|
|
@@ -353,20 +340,20 @@ APP 支付未签约时的签约字段:
|
|
|
353
340
|
服务创建信息固定使用 `../normal/json/customer-messages.json` 的 `service.create.summary`。该消息非阻塞,只传入即将提交的五项服务资料;runner 成功后同一流程直接执行 5.2 创建命令。必须执行:
|
|
354
341
|
|
|
355
342
|
```bash
|
|
356
|
-
node
|
|
343
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-create-summary --service-name "$SERVICE_NAME" --service-description "$SERVICE_DESCRIPTION" --service-url "$SERVICE_URL" --service-pricing "$SERVICE_PRICING" --service-schema "$SERVICE_SCHEMA"
|
|
357
344
|
```
|
|
358
345
|
|
|
359
346
|
服务修改的外部写确认固定使用 `onboarding.write.confirm/SERVICE_UPDATE_ONLY`。必须由 runner 绑定当前摘要字段,禁止手写拼接包含用户值的 JSON:
|
|
360
347
|
|
|
361
348
|
```bash
|
|
362
|
-
node
|
|
349
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-update-confirm --session-summary "$SESSION_SUMMARY" --subject-summary "$SUBJECT_SUMMARY" --service-id "$SERVICE_ID" --service-name "$SERVICE_NAME" --service-description "$SERVICE_DESCRIPTION" --service-url "$SERVICE_URL" --service-pricing "$SERVICE_PRICING" --service-schema "$SERVICE_SCHEMA"
|
|
363
350
|
```
|
|
364
351
|
|
|
365
|
-
创建摘要和修改确认中的参数必须逐字来自本轮用户材料及即将执行的脚本参数;服务单价以 `service.sh validate` 输出的带统一前缀 `SERVICE_PRICING=<纯数字>` 内部事实为准并原样复用到 runner 和 `service.sh save`,不得重新追加 `元/次` 或说明文字,模板会展示单位。修改确认的会话、脱敏主体和 `serviceId` 还必须来自本轮实际查询。runner 必须拒绝 variant/动作不匹配、缺字段、多传无关字段、非按量付费服务修改、非法单价或非法 JSON。禁止加入未列动作。创建摘要不得要求用户回复或停止流程;修改时把用户原始回复交给 `node
|
|
352
|
+
创建摘要和修改确认中的参数必须逐字来自本轮用户材料及即将执行的脚本参数;服务单价以 `service.sh validate` 输出的带统一前缀 `SERVICE_PRICING=<纯数字>` 内部事实为准并原样复用到 runner 和 `service.sh save`,不得重新追加 `元/次` 或说明文字,模板会展示单位。修改确认的会话、脱敏主体和 `serviceId` 还必须来自本轮实际查询。runner 必须拒绝 variant/动作不匹配、缺字段、多传无关字段、非按量付费服务修改、非法单价或非法 JSON。禁止加入未列动作。创建摘要不得要求用户回复或停止流程;修改时把用户原始回复交给 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" reply confirm --reply "$USER_REPLY"`,唯一 `REPLY_DECISION=CONFIRMED` 后先核对摘要仍未变化,再执行固定修改命令。目标、参数、登录会话或主体变化时旧修改确认立即失效并重新展示。签约提交、服务创建、应用创建和应用提审不得使用 `onboarding.write.confirm` 重复确认。
|
|
366
353
|
|
|
367
354
|
脚本使用 `network_retry.sh` 时,业务错误只调用一次;网络/服务错误最多自动重试两次、每次间隔 3 秒。非幂等写结果为 `MAYBE_SENT` 时停止重试,使用现有只读查询核验;无法确认时明确输出未知结果,禁止盲目重复写入。自动重试预算耗尽后不立即询问“重试/退出”:记录失败动作、受影响分支和恢复方式,依赖允许时继续其他独立分支,并在 Step 6 一次收口所有仍未恢复的分支。
|
|
368
355
|
|
|
369
|
-
**阻塞规则(执行约束,不是对客正文)**:服务创建不进入阻塞确认;五项资料完整、格式校验通过且当前服务数量小于固定上限 `10` 后,展示 `service.create.summary` 并直接创建;达到 `10` 个时禁止调用保存方法。只有服务修改必须在同一有效登录会话、产品、动作和目标摘要后等待用户的明确肯定回复;`1` 只是快捷输入,`继续/确认/OK/好了` 等登记肯定表达语义等价。CLI
|
|
356
|
+
**阻塞规则(执行约束,不是对客正文)**:服务创建不进入阻塞确认;五项资料完整、格式校验通过且当前服务数量小于固定上限 `10` 后,展示 `service.create.summary` 并直接创建;达到 `10` 个时禁止调用保存方法。只有服务修改必须在同一有效登录会话、产品、动作和目标摘要后等待用户的明确肯定回复;`1` 只是快捷输入,`继续/确认/OK/好了` 等登记肯定表达语义等价。CLI 未返回主体标识时,标准摘要必须说明由用户确认当前登录账号就是操作目标。代码开发/产品开通方案展示、其他目标或动作的确认、沉默和仅提供资料均不能替代修改确认。签约提交不进入本阻塞确认:只有签约状态为 `NOT_SIGNED` 且当前产品所需材料全部完整并校验通过时才直接执行,缺失或校验失败继续材料提示。应用创建只接受本轮当前候选列表后的明确 `新建` 选择,候选变化必须重新选择;本节登记的 `app.sh key` 命令仅生成公钥确认页,用户提供完整公钥后直接调用,页面 stdout 独立送达后执行 `app.sh open-key-page`,最终设置仍由用户在官方页面确认;新建应用的公钥校验成功后直接提审。登录会话、主体、产品、服务修改目标或关键金额变化时必须重新确认。服务修改确认 runner stdout 是该动作唯一对客消息,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止本轮。
|
|
370
357
|
|
|
371
358
|
写失败或响应不明先按现有只读能力核验,禁止直接重复;尚不存在的 `appId`、公钥确认或审核结果不能提前授权。
|
|
372
359
|
|
|
@@ -388,17 +375,17 @@ node ../normal/scripts/onboarding_message_runner.mjs service-update-confirm --se
|
|
|
388
375
|
|
|
389
376
|
<!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
|
|
390
377
|
```bash
|
|
391
|
-
|
|
378
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sign --product aipay --sales-code "I1080300001000160457" --mcc-code "<mccCode>"
|
|
392
379
|
```
|
|
393
380
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
394
381
|
<!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
|
|
395
382
|
```bash
|
|
396
|
-
|
|
383
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sign --product webpay --sales-code "I1080300001000041203" --mcc-code "<mccCode>" --picurl1 "<imageRef1>" --picurl2 "<imageRef2>" --picurl3 "<imageRef3>"
|
|
397
384
|
```
|
|
398
385
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
399
386
|
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
400
387
|
```bash
|
|
401
|
-
|
|
388
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sign --product apppay --sales-code "I1080300001000041313" --mcc-code "<mccCode>" --app-name "<APP名称>" --picurl1 "<imageRef1>" --picurl2 "<imageRef2>" --picurl3 "<imageRef3>"
|
|
402
389
|
```
|
|
403
390
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
404
391
|
|
|
@@ -418,11 +405,11 @@ bash modules/scripts/ar_sign_apply.sh --product apppay --sales-code "I1080300001
|
|
|
418
405
|
**固定命令契约**:复用已有服务不调用 `save`;创建不传 `--service-id`,修改必须传入用户从 Step 3.1 候选中选定的实际 `serviceId` 和全部字段:
|
|
419
406
|
|
|
420
407
|
```bash
|
|
421
|
-
|
|
408
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service validate --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
422
409
|
# 创建:先成功渲染 service.create.summary/DEFAULT,再直接执行
|
|
423
|
-
|
|
410
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service save --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
424
411
|
# 修改:先取得 onboarding.write.confirm/SERVICE_UPDATE_ONLY 的有效确认,再执行
|
|
425
|
-
|
|
412
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service save --service-id "<serviceId>" --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
426
413
|
```
|
|
427
414
|
|
|
428
415
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SERVICE:END -->
|
|
@@ -443,50 +430,50 @@ APP 支付通过 Skill 创建只支持 `IOS`、`ANDROID` 和 `ALL`,其中 `ALL
|
|
|
443
430
|
|
|
444
431
|
<!-- ALIPAY_AIPAY_PRODUCT:aipay,webpay:START -->
|
|
445
432
|
```bash
|
|
446
|
-
|
|
433
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app create --product-type "<aipay|webpay>" --sales-code "<当前产品码>"
|
|
447
434
|
```
|
|
448
435
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
449
436
|
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
450
437
|
```bash
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
node
|
|
438
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform IOS --bundle-id "<bundleId>"
|
|
439
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform ANDROID --app-package "<appPackage>" --app-sign "<appSign>"
|
|
440
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform ALL --bundle-id "<bundleId>" --app-package "<appPackage>" --app-sign "<appSign>"
|
|
441
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-harmony-manual-create
|
|
455
442
|
```
|
|
456
443
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
457
444
|
|
|
458
445
|
```bash
|
|
459
446
|
# 下列子命令的 appId/publicKey 均为位置参数
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
447
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app reuse --product-type "$PRODUCT_TYPE" "<appId>"
|
|
448
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app key --product-type "$PRODUCT_TYPE" --defer-open "<appId>" "<用户明确提供的完整publicKey>"
|
|
449
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app open-key-page "<appId>"
|
|
463
450
|
# 新建应用:页面确认后校验并直接提审
|
|
464
|
-
|
|
451
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app verify-key-and-audit --product-type "$PRODUCT_TYPE" "<本轮create输出的appId>" "<同一publicKey>"
|
|
465
452
|
# 复用应用缺公钥恢复:校验后重新执行 reuse
|
|
466
|
-
|
|
453
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app verify-key --product-type "$PRODUCT_TYPE" "<appId>" "<同一publicKey>"
|
|
467
454
|
# 仅有限轮询耗尽且用户明确表示已完成页面操作:原分支只查询一次,不重启自动轮询
|
|
468
|
-
node
|
|
469
|
-
node
|
|
455
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-recovery application-key --reply "$USER_REPLY" --product-type "$PRODUCT_TYPE" --mode verify-key-and-audit --app-id "<本轮create输出的appId>" --public-key "<同一publicKey>"
|
|
456
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-recovery application-key --reply "$USER_REPLY" --product-type "$PRODUCT_TYPE" --mode verify-key --app-id "<appId>" --public-key "<同一publicKey>"
|
|
470
457
|
# 独立提审恢复入口仍保留完整密钥查询 guard
|
|
471
|
-
|
|
458
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app audit --product-type "$PRODUCT_TYPE" "<appId>"
|
|
472
459
|
```
|
|
473
460
|
|
|
474
|
-
**复用应用**:执行 `
|
|
461
|
+
**复用应用**:执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app reuse --product-type "$PRODUCT_TYPE" "<appId>"`,其中 `<appId>` 必须逐字来自本轮最近一次 `app.sh list` 的实际候选,并由用户按完整 ID 选定;不接受序号、历史候选或 Agent 转换值。复用已有 `MOBILEAPP` 时不需要采集 `mobilePlatform`、`bundleId`、`appPackage` 或 `appSign`;这些字段仅在新建 `MOBILEAPP` 时需要。
|
|
475
462
|
|
|
476
463
|
仅 `CREATE` 分支重查列表,将本次唯一快照记为 `RECHECK_APP_CANDIDATES_JSON` 后执行下列 runner,禁止 Agent 手工比较。stdout 为空且资料齐备时直接创建;非空时原文发出并重新选择;重查失败时禁止创建但不回滚其他分支。非 `ON_LINE` 不可复用,`FLOW:PENDING_APPLICATIONS` 不得当作空列表。
|
|
477
464
|
|
|
478
465
|
```bash
|
|
479
|
-
node
|
|
466
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-recheck --application-type "$APPLICATION_TYPE" --previous-candidates-json "$APP_CANDIDATES_JSON" --current-candidates-json "$RECHECK_APP_CANDIDATES_JSON"
|
|
480
467
|
```
|
|
481
468
|
|
|
482
469
|
公钥页 stdout 必须先作为独立对客消息送达,再执行 `app.sh open-key-page "<appId>"` 和对应校验;不得把后续 `application.key.pending` 或最终收口合并到同一条对客回复中。自动打开成功、后续轮询成功或后续 stdout 为空都不能替代实际 `confirmPageUrl` 交付。校验生产固定最多 20 次、间隔 2 秒,成功即停;新建分支复用最终安全密钥响应完成双公钥 guard 后提审,禁止重复查询,guard 失败不提审。耗尽才输出 `application.key.pending`;用户随后给出登记的明确肯定回复时,只执行上方对应的 `onboarding_recovery_runner.mjs application-key` 命令,由 runner 校验原始回复并触发一次查询。否定、疑问、取消、修改意见或含糊表达不得触发查询。没有准确依据时不得推定公钥确认页过期、有效期或旧链接失效;只有用户主动反馈当前页面或扫码有问题时,才重新执行上方 `app.sh key` 命令生成新页面并重新进入固定 open + 轮询。写文件失败记录 `MANUAL_CONFIGURATION_REQUIRED` 但不阻塞提审;HarmonyOS 仍只走人工分支。
|
|
483
470
|
|
|
484
471
|
用户提供完整公钥后直接调用上方 `app.sh key` 命令;脚本输出非阻塞 `application.key.page` 并校验 URL,Agent 送达 stdout 后立即调用 `app.sh open-key-page` 受控打开,失败只保留同一裸 URL、复制兜底和“扫码完成后请回到 Agent 对话页面”。Agent 不得代写/重渲染,响应不明进入 `UNKNOWN` 且不得生成第二页。
|
|
485
472
|
|
|
486
|
-
复用应用返回 `FLOW:REUSE_NO_KEY` 时,必须将应用分支标记为未完成,不得输出复用成功,并执行下列命令说明当前应用缺少已确认 RSA2 应用公钥。该消息不增加二次确认:目标 `appId` 已由用户从当前候选中选定,随后直接进入当前应用的设钥准备;如果用户在消息后明确要求重新选择或新建应用,再返回 Step 4 重新决策。取得用户明确提供的完整应用公钥后执行 `
|
|
473
|
+
复用应用返回 `FLOW:REUSE_NO_KEY` 时,必须将应用分支标记为未完成,不得输出复用成功,并执行下列命令说明当前应用缺少已确认 RSA2 应用公钥。该消息不增加二次确认:目标 `appId` 已由用户从当前候选中选定,随后直接进入当前应用的设钥准备;如果用户在消息后明确要求重新选择或新建应用,再返回 Step 4 重新决策。取得用户明确提供的完整应用公钥后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app key --product-type "$PRODUCT_TYPE" --defer-open "<同一appId>" "<用户明确提供的完整publicKey>"`;该脚本 stdout 独立送达后立即执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app open-key-page "<同一appId>"`,再执行带同一 `--product-type` 的 `verify-key` 有限轮询,确认成功后重新执行带同一 `--product-type` 的 `reuse`,不得跳过应用状态与支付宝公钥检查,也不得改变 `appId/publicKey` 的位置参数形式或替换 ID。
|
|
487
474
|
|
|
488
475
|
```bash
|
|
489
|
-
node
|
|
476
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-reuse-no-key --app-id "$APP_ID"
|
|
490
477
|
```
|
|
491
478
|
|
|
492
479
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_APPLICATION:END -->
|
|
@@ -503,7 +490,7 @@ node ../normal/scripts/onboarding_message_runner.mjs application-reuse-no-key --
|
|
|
503
490
|
`SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId`、公钥文件路径、错误码、截图证据或其他自由文本;这些证据只保留在脚本输出、内部事实或人工待办字段中,不能污染分支结果枚举。
|
|
504
491
|
|
|
505
492
|
```bash
|
|
506
|
-
node
|
|
493
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message closeout --product-name "$PRODUCT_NAME" --process-result-title "$PROCESS_RESULT_TITLE" --integration-result "$INTEGRATION_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --signing-result "$SIGNING_RESULT" --service-result "$SERVICE_RESULT" --application-result "$APPLICATION_RESULT" --remaining-actions "$REMAINING_ACTIONS" --manual-verification-items "$MANUAL_VERIFICATION_ITEMS" --application-operation-app-id "$APPLICATION_OPERATION_APP_ID" --application-operation-actual-status "$APPLICATION_OPERATION_ACTUAL_STATUS" --application-operation-next-action "$APPLICATION_OPERATION_NEXT_ACTION" --next-flow-reminder "$NEXT_FLOW_REMINDER"
|
|
507
494
|
```
|
|
508
495
|
|
|
509
496
|
`onboarding_only` 的代码开发栏写“不在本轮执行范围”,`SANDBOX_CONFIG_STATE` 传空字符串,`MANUAL_VERIFICATION_ITEMS` 传空字符串,并把 `nextFlowReminder` 固定为“还需完成支付产品-代码开发,才能在业务系统中实际发起支付。”。`full_process` 中,代码开发全部通过时填“已完成”并传 `READY`;只有沙箱待配置且其余代码与安全检查通过时填“部分完成,沙箱配置待完成”,并原样传 `CREATE_PENDING|VERIFY_PENDING`;沙箱为 `READY` 且代码开发只剩非阻塞人工待验证项时填“部分完成,人工待验证”,传 `READY`,把代码开发 checklist 的 `manualItems` 原样作为 `MANUAL_VERIFICATION_ITEMS` 传入,并在 `REMAINING_ACTIONS` 中写明“完成下方人工待验证项”或同等实际待办,禁止传“无”;把 `nextFlowReminder` 固定为“代码开发已在本轮执行;后续只按上表实际待办继续。”,该值仅用于 renderer 校验执行模式,`full_process` 最终对客不展示“后续衔接”行。renderer 会校验结果与沙箱状态、人工待验证项一致,并派生恢复口令或人工待验证展示行;该展示不增加确认点或用户回复要求。不得在其 stdout 前后单独追加衔接提醒,不伪造本轮代码修改、沙箱创建或测试结果,也不重复进入 integration。
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
- HarmonyOS 代码开发受支持,但 HarmonyOS 移动应用不通过 Skill 创建,也不得向脚本或 MCP 传 `HARMONY`。固定输出:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
node
|
|
38
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-harmony-manual-create
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
HarmonyOS 用户明确表示平台操作完成后重新查询列表;只有实际 `ON_LINE` 候选才进入复用,用户完成表达不能直接证明应用已创建、配置或上线。
|
|
@@ -43,20 +43,20 @@ HarmonyOS 用户明确表示平台操作完成后重新查询列表;只有实
|
|
|
43
43
|
列表只复用 `ON_LINE` 应用,其他状态按实际值展示。候选必须来自本轮唯一 `APP_CANDIDATE_ID`;存在上线候选时只接受当前完整 appId 或 `新建`,仅有未上线候选时只接受 `新建` 或 `暂不新建`。创建前必须重新查询并比较候选:
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
node
|
|
46
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-recheck --application-type "$APPLICATION_TYPE" --previous-candidates-json "$APP_CANDIDATES_JSON" --current-candidates-json "$RECHECK_APP_CANDIDATES_JSON"
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
候选未变化且资料齐备时,用户本轮的 `新建` 已构成创建意图确认,直接创建;变化时旧选择失效并重新选择。AI 移动应用收款首次缺少移动平台资料时使用:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
node
|
|
52
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
## 公钥边界
|
|
56
56
|
|
|
57
57
|
应用公钥必须由用户自行生成并明确提供。Agent 禁止生成密钥对、请求或处理私钥、补全/改写公钥、添加 PEM 头尾,或在缺少公钥时调用 `createKeyConfirmPage`。公钥输入只用于当前 `app.sh key|verify-key|verify-key-and-audit`,不得在回复、摘要、普通日志、跨会话状态或宽权限临时文件中复述或保存。
|
|
58
58
|
|
|
59
|
-
所有会调用 CLI 的应用子命令都传入当前 `--product-type`,由脚本映射并上报 CLI `PRODUCT`;`appId/publicKey` 继续使用原位置参数,不进入 MCP 业务 JSON 之外的新增字段。用户提供完整公钥后直接执行 flow
|
|
59
|
+
所有会调用 CLI 的应用子命令都传入当前 `--product-type`,由脚本映射并上报 CLI `PRODUCT`;`appId/publicKey` 继续使用原位置参数,不进入 MCP 业务 JSON 之外的新增字段。用户提供完整公钥后直接执行 flow 登记的统一 `runtime.mjs` 的 `app key --product-type "$PRODUCT_TYPE" --defer-open`,不增加写摘要确认。必须先把该命令剔除内部事实后的 stdout 作为独立对客消息送达,再通过同一入口执行 `app open-key-page` 和有限查询;Agent 不得手写或手动渲染该消息来替代脚本。自动打开成功、后续轮询成功或后续 stdout 为空都不能替代这次 URL 交付,pending 不得与 `application.key.page` 合并在同一条对客回复中。
|
|
60
60
|
|
|
61
61
|
确认页只展示脚本校验通过的实际 `confirmPageUrl` 裸 URL,禁止二维码链接和 `alipays://` 深链。没有依据时不得推定页面有效期或旧链接失效;只有用户主动反馈当前页面或扫码有问题时才重新生成。
|
|
62
62
|
|
|
@@ -71,7 +71,7 @@ RSA2 应用公钥状态只看应用公钥字段,支付宝公钥不能反向证
|
|
|
71
71
|
应用分支对客结果只使用:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
node
|
|
74
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-result --app-id "$APP_ID" --actual-status "$ACTUAL_STATUS" --next-action "$NEXT_ACTION"
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
输出实际 appId、实际状态和下一步;待审核、待设置公钥、需人工配置、失败或未知不得表述为应用发布完成。写操作只有明确 `NOT_SENT` 才自动重试;`MAYBE_SENT` 必须用当前列表或详情状态核验,无法确认进入 `UNKNOWN`,禁止按同名应用猜测或重复创建/提审。
|
|
@@ -29,7 +29,7 @@ CLI `login --complete` 成功只表示页面侧确认完成,不代表本机已
|
|
|
29
29
|
|
|
30
30
|
授权页只允许 `https://aipay.alipay.com/cli-auth`,必含唯一 `deviceCode/productCode/mccCode`,只允许可选 `platform`;禁止 CLI `verification_url`、额外参数、重复参数和 fragment。页面 stdout 必须先作为独立对客消息送达,再执行 `auth.sh open` 和 `auth.sh wait`,后续 pending 或收口不得合并进同一回复。
|
|
31
31
|
|
|
32
|
-
`wait` 生产最多查询 12 次,未成功的相邻查询间隔 5
|
|
32
|
+
`wait` 生产最多查询 12 次,未成功的相邻查询间隔 5 秒,成功或过期立即停止。耗尽后把用户原始回复交给统一 runtime 的 `onboarding-recovery auth-confirm`;runner 复用统一肯定语义判定器,接受 `继续`、`好了`、`已完成`、`确认`、`OK` 和兼容输入 `1`,每次接受只执行一次 `auth.sh confirm`,不重启自动轮询。否定、疑问、取消、修改意见或含糊输入不查询。
|
|
33
33
|
|
|
34
34
|
授权对客正文只由 `auth.sh` 调用消息目录生成。初始页面不得提前要求回复完成;pending 的自然语言提示、允许回复和授权页返回提示都不在本模块维护副本。
|
|
35
35
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
`a2a-pay-service.discoverBazaarServicesForMcp` 必须按 `offset/total` 完整分页。当前成功协议为 `code="10000"`、`data.items`、`data.pagination`,兼容旧 `success=true/resultObj.serviceList`;失败、异常或分页不完整不得输出空列表分支。
|
|
10
10
|
|
|
11
|
-
候选只取脚本唯一 `SERVICE_CANDIDATES_JSON
|
|
11
|
+
候选只取脚本唯一 `SERVICE_CANDIDATES_JSON`。轮到服务类别时,由统一 runtime 的 `onboarding-message service-candidates` 动作一次输出事实表与选择提示;禁止提前展示、手工拼表或仅输出 ID。列表为空可以创建;存在候选时只接受登记的复用、创建或 `修改:<serviceId>` 选择。
|
|
12
12
|
|
|
13
13
|
## 五项资料
|
|
14
14
|
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
资料由以下入口一次校验;缺失时仍由 flow 的材料 runner 收集:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
node
|
|
21
|
-
|
|
20
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category service --state "$MATERIALS_STATE" --product-type "$PRODUCT_TYPE" --missing-fields "$MISSING_FIELDS"
|
|
21
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service validate --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
用户可输入纯数字、`0.08元`、`0.08 元`、`0.08元/次` 或 `0.08 元/次`。后续 renderer 和 save 只复用脚本内部事实 `SERVICE_PRICING=0.08` 的纯数字值,模板负责展示单位;不得再次追加“元/次”。
|
|
@@ -34,7 +34,7 @@ bash scripts/service.sh validate --name "<name>" --desc "<desc>" --url "<url>" -
|
|
|
34
34
|
成功结果只用登记 renderer:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
node
|
|
37
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-result --service-id "$SERVICE_ID" --actual-result "$ACTUAL_RESULT"
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
脚本成功返回的服务状态如果未取得,只能写“状态未取得”;不得推定审核通过、可用或生产就绪。真实生产 `serviceId` 只能来自实际创建或复用结果,AI 按量付费沙箱固定 `api_mock_service_id` 不得用于生产。
|