@alipay/alipay-aipay 1.5.8 → 1.5.9

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alipay/alipay-aipay",
3
- "version": "1.5.8",
3
+ "version": "1.5.9",
4
4
  "description": "支付宝 AI 付 Skill 安装包 - 优先安装 Agent Skill,并在 macOS/Linux 后台准备用户级 CLI 工具",
5
5
  "type": "module",
6
6
  "bin": {
package/skill/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.8
1
+ 1.5.9
@@ -78,5 +78,5 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message sta
78
78
  - Integration 先完整执行和校验。只有沙箱待配置,或 READY 且仅剩非阻塞人工待验证项时,保持“部分通过”进入 Onboarding;其他代码、安全或依据缺口停在 Integration,不提前登录或收集开通材料。
79
79
  - 阶段间只复用有效的产品、项目、代码产物和 CLI 检查,不再询问是否进入 Onboarding;Onboarding 只保留非阻塞方案展示。
80
80
  - 授权后分别查询签约、应用和适用服务;分支独立,单分支失败不回滚其他成功,认证/授权不匹配或主体变化全局阻断。一次只收集一个类别,提前材料直接校验且不重复索取。
81
- - 签约材料通过后直接提交;服务创建摘要后直接创建,修改仍确认;当前候选列表选择“新建”且重查未变化后直接创建,用户公钥直接生成官方确认页,校验成功后直接提审。均不增加额外确认点;按量付费沙箱测试仍属 Integration 默认动作。
81
+ - 签约材料通过后直接提交;服务创建摘要后直创、修改仍确认;空应用候选材料完整或非空候选明确新建,重查未变即创建,以用户公钥生成官方确认页,校验成功后直接提审。均不增加额外确认点;按量付费沙箱测试仍属 Integration 默认动作。
82
82
  - 当前终点汇总代码、沙箱、签约、服务、应用和待办;人工待验证项带入 Onboarding Step 6,不增加确认。有待生效/审核/验证或配置缺口时不得宣称生产就绪。
@@ -1 +1 @@
1
- {"schemaVersion":1,"interactionPrompts":{"confirmInputHint":"如确认,可以回复“继续”“确认”“OK”,也可以输入 1;如需调整,请直接说明。","planAdjustmentHint":"如需调整方案,请中断 Agent 执行并进行补充说明。","authorizationCompletionInputHint":"授权完成后可回复“继续”“好了”“OK”或输入 1","publicKeyConfirmationCompletionInputHint":"支付宝扫码确认应用公钥完成后可回复“继续”“好了”“OK”或输入 1","completionInputHint":"完成后可回复“继续”“好了”“已完成”“OK”或输入 1;如需调整,请直接说明。","scanReturnHint":"扫码完成后请回到 Agent 对话页面"},"interactionReplySets":{"affirmative":["1","继续","继续推进","继续执行","继续处理","继续下一步","请继续","请继续推进","继续吧","确认","确认继续","确定","同意","可以","可以继续","可以继续推进","没问题","好","好的","好了","好的继续","已完成","完成","完成了","操作完成","操作好了","已经完成","已经好了","处理好了","确认好了","弄好了","OK","Okay","Yes","Y"]},"messages":[{"messageId":"product.unsupported","owner":"catalog_owned","trigger":"route.unsupported_product","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"singleLine","required":true}],"requiredPolicyIds":["P-MCP-CONTRACT-FROZEN"],"variants":{"DEFAULT":{"templateLines":["当前 Skill 只支持接入 AI 按量付费、AI 网页应用收款和 AI 移动应用收款,不支持 `{{productName}}`。","","- 查看支付宝其他收单产品请前往:[支付宝开放平台](https://open.alipay.com)","- 开通支付宝其他收单产品请前往:[支付宝商家平台](https://b.alipay.com/page/portal/home)"]}}},{"messageId":"onboarding.enterprise.unsupported","owner":"catalog_owned","trigger":"onboarding.enterprise_account","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"ONBOARDING_ONLY":{"templateLines":["暂不支持企业账号通过 Skill 完成产品开通。","","请前往支付宝商家平台开通:https://b.alipay.com/page/portal/home","","如需继续进行代码开发,试试对 Agent 说:为我集成 AI 网页应用收款/AI 移动应用收款/AI 按量付费"]},"FULL_PROCESS":{"templateLines":["暂不支持企业账号通过 Skill 完成产品开通。","","请前往支付宝商家平台开通:https://b.alipay.com/page/portal/home"]}}},{"messageId":"onboarding.windows.redirect","owner":"catalog_owned","trigger":"onboarding.windows_platform","blocking":false,"allowedReplies":[],"variables":[{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"windowsOnboardingRedirect"}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前为 Windows 系统,请您暂时前往支付宝 AI 付站点完成产品开通:","{{officialUrl}}"]}}},{"messageId":"product.clarify","owner":"catalog_owned","trigger":"route.product_unclear","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["请确认您的业务场景:","","1. AI 按量付费:买家通过 Agent 使用支付宝完成支付,适用于 API、MCP、算力资源等按调用付费。","2. AI 网页应用收款:买家在电脑网页或手机浏览器页面使用支付宝付款。","3. AI 移动应用收款:买家在 APP 内调起支付宝完成付款。"]}}},{"messageId":"onboarding.mcc.clarify","owner":"catalog_owned","trigger":"onboarding.mcc_unclear","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["MCC 与经营类目强相关,无法仅从“{{productName}}”确定。","","请补充本次接入的经营内容,例如:","","- 电商购物(实物商品销售)","- 宠物用品","- 在线工具","- 软件开发服务","","也可以直接提供你已知的 MCC 二级类目名称或编码。"]}}},{"messageId":"onboarding.mcc.no_match","owner":"catalog_owned","trigger":"onboarding.mcc_search.none","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前经营描述未能匹配到 MCC 参考表中的二级类目,请调整。"]}}},{"messageId":"onboarding.mcc.candidates","owner":"catalog_owned","trigger":"onboarding.mcc_candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"runtime_enum","variables":[{"name":"mccCandidates","type":"mccCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["我找到了几个可能匹配的经营类目,请选择最接近的一项:","","{{candidateTable}}","","请回复序号、MCC 二级类目名称或编码;如果都不匹配,请补充实际销售的商品或服务类型。"]}}},{"messageId":"integration.start.confirm","owner":"catalog_owned","trigger":"integration.step2.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"planAdjustment","variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"projectPath","type":"path","required":true},{"name":"projectOriginLabel","type":"enum","required":true,"values":["现有项目","本轮新建项目"]},{"name":"integrationStatus","type":"enum","required":true,"values":["TARGET_PARTIAL","OTHER_PRODUCT_ONLY","NO_PAYMENT"]},{"name":"otherProducts","type":"singleLine","required":false},{"name":"language","type":"singleLine","required":true},{"name":"framework","type":"singleLine","required":true},{"name":"nextFlow","type":"enum","required":true,"values":["integration"]}],"requiredPolicyIds":["P-PROJECT-PROTECT","P-SENSITIVE-STATE"],"variants":{"AIPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | {{productName}} |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]},"WEBPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | AI 网页应用收款 |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]},"APPPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | AI 移动应用收款 |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","【前置提醒】接 AI 移动应用收款需要你有自己的 APP,本轮代码开发主要覆盖商家服务端支付接口的实现,APP 还需接入支付宝客户端 SDK 后才能调起支付。你可以在当前 AI 移动应用收款服务端代码开发完毕后,对 Agent 说:“给我做个 APP /给我的 APP 接支付宝客户端 SDK /把我的 APP 客户端和接了支付宝的服务端联动起来”。","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]}}},{"messageId":"onboarding.plan.confirm","owner":"catalog_owned","trigger":"onboarding.step2.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"planAdjustment","variables":[{"name":"mccCode","type":"mccCode","required":true},{"name":"mccName","type":"singleLine","required":true},{"name":"mccQualification","type":"singleLine","required":true}],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING","P-URL-AUTO-OPEN"],"variants":{"AIPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 按量付费 |","| 产品码 | `I1080300001000160457` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,machine_pay:write,agmnt:write` |","| 材料预告 | 1、签约申请无需页面截图;2、新建或修改服务时收集服务资料;3、新建应用设置应用公钥时由用户提供 |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]},"WEBPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 网页应用收款 |","| 产品码 | `I1080300001000041203` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,fast_instant_trade_pay:write` |","| 材料预告 | 1、未签约时收集首页、商品页、支付页 3 张截图;支付页是展示支付宝付款方式,等待用户去支付的页面;2、新建应用设置应用公钥时由用户提供 |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]},"APPPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 移动应用收款 |","| 产品码 | `I1080300001000041313` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,auth_alipay_apppay:write` |","| 材料预告 | 1、未签约时收集 APP 名称和首页、商品页、支付页 3 张截图;支付页是展示支付宝付款方式,等待用户去支付的页面;2、新建应用支持 iOS、Android 或 ALL(二者同时);3、新建应用设置应用公钥时由用户提供 |","| 特别提醒 | 鸿蒙系统移动应用暂不支持通过 Skill 创建,请前往支付宝开放平台-控制台手动创建:https://open.alipay.com/ |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]}}},{"messageId":"auth.page","owner":"catalog_owned","trigger":"AUTH_FLOW:READY_TO_OPEN","blocking":false,"allowedReplies":[],"postRenderHintType":"scanReturn","expiresWithPrompt":true,"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"deviceCode","type":"singleLine","required":true},{"name":"mccCode","type":"mccCode","required":true},{"name":"mccName","type":"singleLine","required":true},{"name":"verificationCode","type":"singleLine","required":true},{"name":"expiresDisplay","type":"singleLine","required":true},{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"authorization"}],"requiredPolicyIds":["P-AUTH-URL","P-URL-AUTO-OPEN"],"variants":{"READY":{"templateLines":["接下来会自动打开支付宝扫码授权页面,请在页面中扫码完成授权。","","| 授权信息 | 内容 |","|---|---|","| 产品类型 | {{productName}} |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 确认码 | {{verificationCode}} |","| 授权链接有效期 | {{expiresDisplay}} |","","安全提示:支付宝扫码后,请核对授权页面显示的确认码是否与上方一致;如不一致,请勿授权并立即停止操作。确认码只用于核对,不需要输入。","","如果自动跳转失败,请复制下方链接到网页浏览器打开。","授权链接:","{{officialUrl}}"]}}},{"messageId":"auth.open.manual","owner":"catalog_owned","trigger":"AUTH_OPEN:OPEN_FAILED|GUI_UNAVAILABLE|LINK_ONLY","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-URL-AUTO-OPEN"],"variants":{"DEFAULT":{"templateLines":["未能自动打开支付宝授权页面,请手动打开上一条消息中的授权链接并完成扫码。我会继续检查授权结果,无需回复。"]}}},{"messageId":"application.key.page","owner":"catalog_owned","trigger":"application.key_page.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"scanReturn","expiresWithPrompt":true,"variables":[{"name":"appId","type":"singleLine","required":true},{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"publicKeyConfirmation"}],"requiredPolicyIds":["P-KEY-URL","P-URL-AUTO-OPEN"],"variants":{"READY":{"templateLines":["接下来会自动打开应用 `{{appId}}` 的公钥确认页面,请打开支付宝扫码确认应用公钥。","","如果自动跳转失败,请复制下方链接到网页浏览器打开。","公钥确认链接:","{{officialUrl}}"]}}},{"messageId":"application.key.pending","owner":"catalog_owned","trigger":"FLOW:KEY_NOT_CONFIRMED","blocking":true,"allowedReplySet":"affirmative","inputHintType":"publicKeyConfirmationComplete","variables":[],"requiredPolicyIds":["P-KEY-PUBLIC-USER"],"variants":{"DEFAULT":{"templateLines":["应用公钥尚未确认,请先完成公钥设置确认。"]}}},{"messageId":"onboarding.discovery.summary","owner":"catalog_owned","trigger":"onboarding.discovery.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"signingStatus","type":"enum","required":true,"values":["未签约","已提交待生效","已生效","其他状态待核验","查询失败"]},{"name":"serviceStatus","type":"enum","required":false,"values":["无已有服务","已有服务候选","查询失败"]},{"name":"applicationStatus","type":"enum","required":true,"values":["无同类型应用","有上线应用可复用","仅有未上线应用","查询失败"]}],"requiredPolicyIds":["P-PARTIAL-RESULT","P-MATERIAL-CATEGORY"],"variants":{"AIPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | {{serviceStatus}} |","| 应用发布 | {{applicationStatus}} |"]},"WEBPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | 无需处理 |","| 应用发布 | {{applicationStatus}} |"]},"APPPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | 无需处理 |","| 应用发布 | {{applicationStatus}} |"]}}},{"messageId":"materials.category.collect","owner":"catalog_owned","trigger":"materials.category.ready","blocking":true,"allowedReplies":[],"replyMode":"freeform","expiresWithPrompt":true,"variables":[{"name":"categoryName","type":"enum","required":true,"values":["签约材料","服务资料","应用资料"]},{"name":"currentStatus","type":"enum","required":true,"values":["待补充","部分已提供,待补充","校验失败,需更正"]},{"name":"missingFields","type":"enumList","required":true,"values":["APP名称","首页截图","商品页截图","支付页截图","服务名称","服务描述","服务地址","服务单价","请求示例JSON","应用平台和对应资料","iOS Bundle ID(bundleId)","Android 应用包名(appPackage)","Android 应用签名摘要(appSign)","应用公钥"]},{"name":"paymentPageHint","type":"string","derived":true,"values":["支付页说明:支付页是展示支付宝付款方式,等待用户去支付的页面,不是支付成功页。"]},{"name":"serviceUrlHint","type":"string","derived":true,"values":["请提供有效的 URL 地址(以 http:// 或 https:// 开头)"]},{"name":"servicePricingHint","type":"string","derived":true,"values":["请提供不低于 0.01 元的有效服务单价,可输入 0.03、0.03元或 0.03 元/次。"]}],"requiredPolicyIds":["P-MATERIAL-CATEGORY"],"variants":{"INITIAL":{"templateLines":["当前收集类别:{{categoryName}}","","请在一条回复中提供:{{missingFields}}。","{{paymentPageHint}}","你也可以提前提供后续类别材料,我会直接接收并在对应类别复用。"]},"APP_MOBILE_INITIAL":{"templateLines":["当前收集类别:应用资料","","请在一条回复中选择要创建的应用平台,并提供对应资料:","","- iOS:回复 `IOS`,并提供 iOS Bundle ID(bundleId)。","- Android:回复 `ANDROID`,并提供 Android 应用包名(appPackage)和 Android 应用签名摘要(appSign,不是应用公钥)。","- iOS + Android:回复 `ALL`,并提供以上三项资料。","","如已准备应用公钥,也可以在同一条回复中一并提供;未准备不影响创建应用。请勿提供应用私钥。","","鸿蒙系统移动应用暂不支持通过 Skill 创建,请前往支付宝开放平台-控制台手动创建:https://open.alipay.com/"]},"PARTIAL":{"templateLines":["当前收集类别:{{categoryName}}","","还需补充:{{missingFields}}。","{{paymentPageHint}}","已校验字段无需重复提供;你也可以提前提供后续类别材料,我会直接接收并在对应类别复用。"]},"INVALID":{"templateLines":["当前收集类别:{{categoryName}}","","以下内容需要更正:{{missingFields}}。","{{serviceUrlHint}}","{{servicePricingHint}}","{{paymentPageHint}}","已校验字段无需重复提供;你也可以提前提供后续类别材料,我会直接接收并在对应类别复用。"]}}},{"messageId":"service.create.summary","owner":"catalog_owned","trigger":"service.create.ready","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceName","type":"singleLine","required":true},{"name":"serviceDescription","type":"singleLine","required":true},{"name":"serviceUrl","type":"runtimeUrl","required":true},{"name":"servicePricing","type":"singleLine","required":true},{"name":"serviceSchema","type":"string","required":true}],"requiredPolicyIds":["P-WRITE-CONFIRM","P-WRITE-UNKNOWN"],"variants":{"DEFAULT":{"templateLines":["将创建以下 AI 按量付费服务:","","服务名称:{{serviceName}}","服务描述:{{serviceDescription}}","服务地址:`{{serviceUrl}}`","服务单价:{{servicePricing}} 元/次","请求示例 JSON:","```json","{{serviceSchema}}","```"]}}},{"messageId":"onboarding.write.confirm","owner":"catalog_owned","trigger":"external_write.ready","blocking":true,"allowedReplySet":"affirmative","inputHintType":"confirm","expiresWithPrompt":true,"variables":[{"name":"sessionSummary","type":"singleLine","required":true},{"name":"subjectSummary","type":"singleLine","required":true},{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"actionTypes","type":"enumList","required":true,"values":["服务修改"]},{"name":"serviceId","type":"singleLine","required":false},{"name":"serviceName","type":"singleLine","required":false},{"name":"serviceDescription","type":"singleLine","required":false},{"name":"serviceUrl","type":"runtimeUrl","required":false},{"name":"servicePricing","type":"singleLine","required":false},{"name":"serviceSchema","type":"string","required":false}],"requiredPolicyIds":["P-WRITE-CONFIRM","P-WRITE-UNKNOWN"],"variants":{"SERVICE_UPDATE_ONLY":{"templateLines":["请确认以下支付宝操作:","","- 当前会话:{{sessionSummary}}","- 操作主体:{{subjectSummary}}","- 产品:AI 按量付费","- 动作:服务修改","","服务ID:`{{serviceId}}`","服务名称:{{serviceName}}","服务描述:{{serviceDescription}}","服务地址:`{{serviceUrl}}`","服务单价:{{servicePricing}} 元/次","请求示例 JSON:","```json","{{serviceSchema}}","```","","本次只执行上述服务修改;签约、应用创建、公钥设置和应用提审不包含在本确认中。"]}}},{"messageId":"process.partial_result","owner":"catalog_owned","trigger":"process.current_endpoint","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"processResultTitle","type":"enum","required":true,"values":["支付产品-产品开通已完成","流程进展"]},{"name":"integrationResult","type":"enum","required":true,"values":["不在本轮执行范围","已完成","部分完成,沙箱配置待完成","部分完成,人工待验证","未完成","结果未知"]},{"name":"sandboxConfigState","type":"enum","required":false,"values":["READY","CREATE_PENDING","VERIFY_PENDING"]},{"name":"signingResult","type":"enum","required":true,"values":["未签约","已提交,等待生效","已生效","失败","结果未知"]},{"name":"serviceResult","type":"enum","required":true,"values":["无需处理","已复用","创建成功,状态未取得","修改成功,状态未取得","已完成","失败","结果未知"]},{"name":"applicationResult","type":"enum","required":true,"values":["待选择","已创建,待设置公钥","公钥待确认","HarmonyOS 应用待平台侧创建、配置或上线","已提交审核,等待上线","已上线且配置完整","需人工配置","失败","结果未知"]},{"name":"remainingActions","type":"singleLine","required":true},{"name":"manualVerificationItems","type":"singleLine","required":false},{"name":"applicationOperationAppId","type":"singleLine","required":false},{"name":"applicationOperationActualStatus","type":"singleLine","required":false},{"name":"applicationOperationNextAction","type":"singleLine","required":false},{"name":"applicationManualConfigurationNextAction","type":"string","required":false,"derived":true,"values":["前往支付宝 AI 付站点,进入一站式接入 → 密钥配置,按当前 appId 获取对应的支付宝公钥,并手动配置到项目:https://aipay.alipay.com/?from=alipay-aipay-skill"]},{"name":"applicationOperationBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"manualVerificationLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"productionReadinessBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"statusQueryHint","type":"enum","required":false,"derived":true,"values":["。这期间,你也可以试着对 Agent 说:“帮我查询产品签约状态”或“帮我查询应用状态”。"]},{"name":"sandboxRecoveryHint","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"nextFlowReminderLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"nextFlowReminder","type":"enum","required":true,"values":["还需完成支付产品-代码开发,才能在业务系统中实际发起支付。","代码开发已在本轮执行;后续只按上表实际待办继续。"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["{{processResultTitle}}:","","| 分支 | 实际结果 |","|---|---|","| 产品 | {{productName}} |","| 代码开发 | {{integrationResult}} |","| 产品开通 | {{signingResult}} |","| 服务市场 | {{serviceResult}} |","| 应用发布 | {{applicationResult}} |","","本轮流程仍需处理:{{remainingActions}}{{statusQueryHint}}","{{manualVerificationLine}}","{{sandboxRecoveryHint}}","{{applicationOperationBlock}}","","{{productionReadinessBlock}}","","{{nextFlowReminderLine}}"]}}},{"messageId":"key_tool.download.result","owner":"catalog_owned","trigger":"key_tool.download.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"downloadPath","type":"existingPath","required":true}],"requiredPolicyIds":["P-KEY-TOOL-DOWNLOAD"],"fallbackMessageId":"key_tool.download.fallback","variants":{"DOWNLOADED":{"templateLines":["支付宝开放平台密钥工具已下载到:`{{downloadPath}}`。","","请打开该安装包并按页面引导完成安装;Agent 不会自动安装、启动工具或生成密钥。生成后只向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。","","如未找到安装包或自动下载未成功,请前往支付宝开放平台自行下载安装:","","https://opendocs.alipay.com/isv/02kipk"]}}},{"messageId":"key_tool.download.fallback","owner":"catalog_owned","trigger":"key_tool.download.fallback","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-KEY-TOOL-DOWNLOAD"],"variants":{"DEFAULT":{"templateLines":["未能完成自动下载,可能是当前环境不支持、无法访问下载源、本地目录不可写或安装包校验未通过。请访问支付宝开放平台手动下载支付宝开放平台密钥工具:","","https://opendocs.alipay.com/isv/02kipk","","仅向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。"]}}},{"messageId":"sandbox.windows.manual_setup","owner":"catalog_owned","trigger":"integration.sandbox.windows.manual_setup","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["当前 Windows 环境暂不支持自动创建快速沙箱,请前往支付宝 AI 付站点-选择产品-一站式接入-技术集成页面获取沙箱配置:https://aipay.alipay.com/?from=alipay-aipay-skill","","请把沙箱应用的 APPID、支付宝公钥、应用公钥、与当前开发语言(JAVA语言/非JAVA语言)匹配的应用私钥、沙箱账号信息告诉我,我会帮你完成项目配置,并继续进行支付产品代码开发。","","生产环境应用私钥和密码切勿暴露给 Agent。"]}}},{"messageId":"sandbox.environment.summary","owner":"catalog_owned","trigger":"integration.sandbox.persisted","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"configPath","type":"existingPath","required":true},{"name":"environmentRows","type":"sandboxTableRows","required":true}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["沙箱环境摘要","","| 项目 | 信息 |","|---|---|","| 产品 | {{productName}} |","| 配置文件目录 | `{{configPath}}` |","{{environmentRows}}","| 密钥字段 | 已写入本地配置文件,默认不在对话中展开 |"]}}},{"messageId":"sandbox.configuration.pending","owner":"catalog_owned","trigger":"integration.sandbox.pending","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"CREATE":{"templateLines":["快速沙箱暂未创建成功,当前沙箱配置尚未完成。","","本轮将继续代码开发。代码开发完成后,请对 Agent 说:“重新创建并配置沙箱”。"]},"VERIFY":{"templateLines":["快速沙箱配置复核未通过,当前沙箱配置尚未完成。","","本轮将继续代码开发。代码开发完成后,请对 Agent 说:“重新创建并配置沙箱”。"]}}},{"messageId":"sandbox.create.failure","owner":"catalog_owned","trigger":"integration.sandbox.failed","blocking":false,"allowedReplies":[],"variables":[{"name":"failureReason","type":"singleLine","required":true},{"name":"recoveryAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"WINDOWS":{"templateLines":["Windows 沙箱本地配置未准备完成:{{failureReason}}","","恢复动作:{{recoveryAction}}","","字段缺失、来源不明或本地保护未完成时不能继续,也不能把当前配置表述为可用。"]}}},{"messageId":"sandbox.environment.reminder","owner":"catalog_owned","trigger":"integration.sandbox.persisted.reminder","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-A2M-SANDBOX","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["快速沙箱环境配置已准备完成。","","- 当前环境仅供测试,不涉及真实资金。","- 完整配置已写入本地文件;不要在项目日志、对话总结或公共代码仓库中打印或提交密钥和沙箱账号。","- 迁移配置时从受限权限的本地文件读取,不通过对话传递密钥原文。","- 正式上线前使用同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并按开发语言确认私钥格式;格式不匹配时只使用支付宝官方密钥工具转换。","- 沙箱网关为 https://openapi-sandbox.dl.alipaydev.com/gateway.do,生产网关为 https://openapi.alipay.com/gateway.do;禁止在沙箱配置中提前使用生产网关。","- AI 按量付费沙箱 `serviceId` 固定为 `api_mock_service_id`,生产前必须替换为服务市场实际 `serviceId`。"]},"WINDOWS":{"templateLines":["Windows 沙箱本地配置已准备完成。","","- 当前环境仅供测试,不涉及真实资金。","- 不要在项目日志、对话总结或公共代码仓库中打印或提交密钥和沙箱账号。","- 本轮提供的沙箱密钥和账号只用于当前项目配置;Agent 不得在回复中复述。","- 生产环境应用私钥和密码切勿暴露给 Agent。","- 正式上线前使用同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并按开发语言确认私钥格式;格式不匹配时只使用支付宝官方密钥工具转换。","- 沙箱网关为 https://openapi-sandbox.dl.alipaydev.com/gateway.do,生产网关为 https://openapi.alipay.com/gateway.do;禁止在沙箱配置中提前使用生产网关。","- AI 按量付费沙箱 `serviceId` 固定为 `api_mock_service_id`,生产前必须替换为服务市场实际 `serviceId`。"]}}},{"messageId":"a2m.test.start","owner":"catalog_owned","trigger":"integration.a2m.test.start","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-A2M-SANDBOX","P-A2M-SUCCESS"],"variants":{"DEFAULT":{"templateLines":["开始执行 AI 按量付费沙箱服务端联调。","","我将连续验证 `402 Payment-Needed`、沙箱收银、`Payment-Proof` 重试和资源交付,完成后输出实际结论;这里不需要额外确认。"]}}},{"messageId":"a2m.test.result","owner":"catalog_owned","trigger":"integration.a2m.test.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"evidenceSummary","type":"singleLine","required":true},{"name":"recoveryAction","type":"singleLine","required":false}],"requiredPolicyIds":["P-A2M-SUCCESS","P-SENSITIVE-STATE"],"variants":{"PASSED":{"templateLines":["AI 按量付费沙箱服务端联调通过。","","通过证据:{{evidenceSummary}}"]},"FAILED":{"templateLines":["AI 按量付费沙箱服务端联调未通过。","","实际证据:{{evidenceSummary}}","","恢复动作:{{recoveryAction}}"]}}},{"messageId":"a2m.payment.experience","owner":"catalog_owned","trigger":"integration.a2m.optional_payment_experience","blocking":false,"allowedReplies":[],"variables":[{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"buyerAccount","type":"singleLine","required":true},{"name":"buyerLoginPassword","type":"sandboxCredential","required":true},{"name":"buyerPayPassword","type":"sandboxCredential","required":true}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION"],"variants":{"FULL":{"templateLines":["可选:体验 AI 按量付费沙箱付款","","付款链接(复制到网页浏览器打开):{{paymentUrl}}","沙箱买家账号:{{buyerAccount}}","登录密码:{{buyerLoginPassword}}","支付密码:{{buyerPayPassword}}"]}}},{"messageId":"webpay.sandbox.experience","owner":"catalog_owned","trigger":"integration.webpay.sandbox_experience","blocking":false,"allowedReplies":[],"variables":[{"name":"startCommand","type":"command","required":true},{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"buyerAccount","type":"singleLine","required":true},{"name":"buyerLoginPassword","type":"sandboxCredential","required":true},{"name":"buyerPayPassword","type":"sandboxCredential","required":true},{"name":"resultPageInstruction","type":"enum","required":true,"values":["付款后确认浏览器自动返回商户结果页,页面可正常展示并通过服务端查询呈现订单状态。","付款后不会自动返回商户网站;请手动返回商户订单查询页并刷新或查询订单状态。"]}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION"],"variants":{"DEFAULT":{"templateLines":["AI 网页应用收款沙箱付款指引","","1. 启动服务:`{{startCommand}}`","2. 在浏览器打开:{{paymentUrl}}","3. 在沙箱收银台二选一:使用沙箱买家账号登录,或仅在 Android 沙箱支付宝中扫描收银台页面二维码。","4. 沙箱买家账号:{{buyerAccount}}","5. 登录密码:{{buyerLoginPassword}}","6. 支付密码:{{buyerPayPassword}}","7. {{resultPageInstruction}}","","沙箱测试环境不稳定,可能出现跳转到支付宝收银台页面后报错,如:504 Gateway Time-out;输入完测试买家账号后展示系统繁忙;输入完测试买家支付密码后展示系统繁忙。您可以回到支付页重新发起支付以完成沙箱测试。","","前台页面和同步回跳参数不是支付成功依据,最终以验签通过的异步通知或交易查询为准。用户暂不付款只记为待体验,不得表述为沙箱测试通过。"]}}},{"messageId":"sandbox.android.client","owner":"catalog_owned","trigger":"integration.sandbox_android_client","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["沙箱支付宝当前仅支持 Android。请复制以下支付宝官方地址到网页浏览器打开,并扫描屏幕二维码下载沙箱版支付宝安装包:","","https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","如果直链或页面二维码无法打开,请前往支付宝开放平台-沙箱工具页下载:","","https://open.alipay.com/develop/sandbox/tool"]}}},{"messageId":"webpay.sandbox.experience.windows","owner":"catalog_owned","trigger":"integration.webpay.sandbox_experience.windows","blocking":false,"allowedReplies":[],"variables":[{"name":"startCommand","type":"command","required":true},{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"resultPageInstruction","type":"enum","required":true,"values":["付款后确认浏览器自动返回商户结果页,页面可正常展示并通过服务端查询呈现订单状态。","付款后不会自动返回商户网站;请手动返回商户订单查询页并刷新或查询订单状态。"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["AI 网页应用收款沙箱付款指引","","1. 启动服务:`{{startCommand}}`","2. 在浏览器打开:{{paymentUrl}}","3. 在沙箱收银台使用支付宝开放平台控制台中的沙箱买家账号登录,或仅在 Android 沙箱支付宝中扫描收银台页面二维码。","4. 登录密码和支付密码请直接从本机保存的信息或支付宝开放平台控制台取得,无需再次提供给 Agent。","5. {{resultPageInstruction}}","","沙箱测试环境不稳定,可能出现跳转到支付宝收银台页面后报错,如:504 Gateway Time-out;输入完测试买家账号后展示系统繁忙;输入完测试买家支付密码后展示系统繁忙。您可以回到支付页重新发起支付以完成沙箱测试。","","前台页面和同步回跳参数不是支付成功依据,最终以验签通过的异步通知或交易查询为准。用户暂不付款只记为待体验,不得表述为沙箱测试通过。"]}}},{"messageId":"integration.safety.closeout","owner":"catalog_owned","trigger":"integration.step7.safety","blocking":false,"allowedReplies":[],"variables":[{"name":"acceptanceSummary","type":"singleLine","required":true}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"AIPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入客户端、日志或公共仓库。","- `Payment-Proof` 必须调用 `alipay.aipay.agent.payment.verify` 验证;无效或过期凭证拒绝服务,结果不明时不得要求用户重复付款。","- 资源交付后必须调用 `alipay.aipay.agent.fulfillment.confirm`;履约确认失败必须可重试且保持幂等。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并将 `api_mock_service_id` 替换为真实 `serviceId`。`serviceId` 获取方式:支付宝扫码登录支付宝 AI 付站点 → 控制台 → 服务管理 → 复制审核已通过的服务 ID:https://aipay.alipay.com/?from=alipay-aipay-skill","- 收款商户 PID/2088 用于 AI 按量付费 `seller_id` 和 `seller_unique_id`,不由 Agent 猜测。获取方式:支付宝扫码登录支付宝商家平台 → 点击头像 → 复制账户名下方 2088 开头的商家 ID:https://b.alipay.com/page/portal/home","- 生产环境必须严格校验本地订单、金额与资源关系;AI 按量付费不使用 AI 网页应用收款/AI 移动应用收款的 `notify_url`,正式收款依赖 `Payment-Proof` 验付和异步履约回执确认。","- 上线前必须完成人工代码审查;Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载。下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","当前验收口径:{{acceptanceSummary}}"]},"WEBPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入客户端、日志或公共仓库。","- 同步回跳和前台结果不作为支付成功依据;必须以验签通过的异步通知或交易查询为准。","- 异步通知必须先验签、校验关键字段、幂等处理并返回 `success`;支付结果不明时不得要求用户重复付款。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥。","- AI 网页应用收款生产上线必须配置公网 HTTPS `notify_url`,完成验签、幂等、关键字段校验、成功回写和补偿查询;localhost、局域网地址或其他不可公网访问的地址只能标记为人工待验证。","- 本地生产参数验收可暂缓公网通知联调;未完成公网 HTTPS `notify_url` 联调时,只能表述为“本地正式验收 / 本地生产参数验收,公网异步通知待补齐”,不能表述为生产就绪。","- Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载。下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","当前验收口径:{{acceptanceSummary}}"]},"APPPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入 APP 客户端、日志或公共仓库。","- 客户端支付结果不作为成功依据;必须以验签通过的异步通知或服务端交易查询为准。","- 异步通知必须先验签、校验关键字段、幂等处理并返回 `success`;支付结果不明时不得要求用户重复付款。","- AI 移动应用收款生产上线必须配置公网 HTTPS `notify_url`,完成验签、幂等、关键字段校验、成功回写和补偿查询;localhost、局域网地址或其他不可公网访问的地址只能标记为人工待验证。","- 本地生产参数验收可暂缓公网通知联调;未完成公网 HTTPS `notify_url` 联调时,只能表述为“本地正式验收 / 本地生产参数验收,公网异步通知待补齐”,不能表述为生产就绪。","- Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥。","- 本轮代码开发覆盖商家服务端支付能力;APP 客户端还需接入支付宝客户端 SDK,使用服务端返回的 `orderStr` 调起支付,并完成客户端支付结果展示与服务端异步通知/交易查询的联动测试。若 APP 尚未接入,可以试试继续对 Agent 说:“给我的 APP 接支付宝客户端 SDK,我要做服务端和客户端的联调”(请确保此时你已经有一个开发完毕的 APP)。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载;或试试让 Agent 帮你解析该地址包含的二维码并下载沙箱版支付宝,下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","- 【友情提醒】如果你当前还没有开发 APP,可以试着让 Agent 帮你安装手机客户端模拟器、开发 APP、接入支付宝客户端 SDK 并安装沙箱版支付宝供测试使用。","","当前验收口径:{{acceptanceSummary}}"]}}},{"messageId":"integration.checklist.result","owner":"catalog_owned","trigger":"integration.checklist.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"overallResult","type":"enum","required":true,"values":["通过","部分通过","未通过"]},{"name":"failedItems","type":"singleLine","required":true},{"name":"manualItems","type":"singleLine","required":true},{"name":"sandboxResult","type":"enum","required":false,"values":["AI 按量付费沙箱服务端联调通过","AI 按量付费沙箱服务端联调未通过"]},{"name":"webpayExperienceResult","type":"enum","required":false,"values":["已提供浏览器付款入口和操作指引,实际付款及结果验证仍以用户完成情况为准","未提供浏览器付款入口或完整操作指引,需先补齐","已提供浏览器付款入口和操作指引;用户已完成一笔沙箱付款,结果只按实际核验证据记录"]},{"name":"sandboxConfigState","type":"enum","required":true,"values":["READY","CREATE_PENDING","VERIFY_PENDING"]},{"name":"blockingDefectState","type":"enum","required":true,"values":["NONE","PRESENT"]},{"name":"executionMode","type":"enum","required":true,"values":["仅代码开发","完整接入"]},{"name":"nextFlowReminder","type":"enum","required":true,"values":["正式上线前还需完成支付产品-产品开通。","代码开发校验通过后将自动进入支付产品-产品开通;未通过时停留在代码开发。","沙箱配置尚未完成,但不阻塞本轮继续支付产品-产品开通;完成配置后再进行沙箱测试。","代码开发自动校验已完成,仍有人工待验证项;本轮继续产品开通。"]}],"requiredPolicyIds":[],"variants":{"AIPAY_PASSED":{"templateLines":["AI 按量付费代码开发校验通过。","","{{nextFlowReminder}}"]},"AIPAY_INCOMPLETE":{"templateLines":["AI 按量付费代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]},"WEBPAY_PASSED":{"templateLines":["AI 网页应用收款代码开发校验通过。","","{{nextFlowReminder}}"]},"WEBPAY_INCOMPLETE":{"templateLines":["AI 网页应用收款代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]},"APPPAY_PASSED":{"maintenanceTodo":"TODO: 后续确定 AI 移动应用收款沙箱测试的对客引导动作后,在本变体补充;同步 integration flow、checklist 和测试。","templateLines":["AI 移动应用收款代码开发校验通过。","","{{nextFlowReminder}}"]},"APPPAY_INCOMPLETE":{"maintenanceTodo":"TODO: 后续确定 AI 移动应用收款沙箱测试的对客引导动作后,在本变体补充;同步 integration flow、checklist 和测试。","templateLines":["AI 移动应用收款代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]}}},{"messageId":"auth.pending","owner":"catalog_owned","trigger":"AUTH_FLOW:PENDING","blocking":true,"allowedReplySet":"affirmative","inputHintType":"authorizationComplete","variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["支付宝授权尚未完成,当前流程保持等待,请在已打开的网页二维码页面完成扫码确认后,再回复当前授权提示。"]}}},{"messageId":"auth.expired","owner":"catalog_owned","trigger":"AUTH_FLOW:EXPIRED","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["本次支付宝授权链接已过期,旧链接和旧回复均已失效。正在重新生成授权链接,请使用新的授权页面完成授权。"]}}},{"messageId":"auth.mismatch","owner":"catalog_owned","trigger":"AUTH_FLOW:SCOPE_MISMATCH|MCC_MISMATCH","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["当前授权范围或经营类目不匹配,需要退出当前登录并重新生成授权页面。"]}}},{"messageId":"error.mcp.auth","owner":"catalog_owned","trigger":"error.mcp_auth","blocking":false,"allowedReplies":[],"variables":[{"name":"errorMessage","type":"customerErrorText","required":false}],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING","P-SENSITIVE-STATE"],"variants":{"START":{"templateLines":["🔐 未登录或授权已过期","","当前登录状态已失效,无法继续操作。MCP 调用返回认证错误,正在退出当前登录。"]},"LOGOUT_UNCONFIRMED":{"templateLines":["无法确认退出当前登录结果,已停止重新授权。","","这通常表示当前 Agent 执行环境缺少联网权限、CLI wrapper 混入输出,或 stdout/stderr 无法唯一解析;不代表用户本机 logout 失败,也不能据此判断支付宝业务失败。","","Agent 应申请可联网权限后重试同一动作;不要要求用户手动 logout 代替本轮事实。"]},"LOGOUT_FAILED":{"templateLines":["退出当前登录失败,已停止重新授权。","错误信息:{{errorMessage}}","","请先重试退出登录;确认退出成功后再重新授权。"]},"LOGOUT_SUCCESS":{"templateLines":["已退出登录状态。","","请重新执行登录授权流程:生成授权链接后,使用支付宝扫码授权,授权成功后继续当前操作。","","产品、MCC 和授权范围未变化时,沿用已有确认立即重新生成授权链接;发生变化时先重新确认受影响内容。"]}}},{"messageId":"error.mcp.service","owner":"catalog_owned","trigger":"error.mcp_service","blocking":false,"allowedReplies":[],"variables":[{"name":"errorDetail","type":"customerErrorText","required":false}],"requiredPolicyIds":["P-PARTIAL-RESULT","P-SENSITIVE-STATE"],"variants":{"AGENT_NETWORK":{"templateLines":["MCP 服务暂时不可用。","","当前命令需要访问支付宝服务,但当前 Agent 执行环境可能没有外网权限。Agent 应申请可联网权限后重试同一条命令,不要要求用户排查本机网络,也不要更换业务参数。","","请授权 Agent 联网重试,或稍后重新执行当前命令。"]},"GENERIC":{"templateLines":["MCP 服务暂时不可用。","","无法连接到支付宝服务,请稍后重试。","错误详情:{{errorDetail}}","","当前动作已停止重试;由主流程记录受影响分支,并在不受其依赖的情况下继续其他分支。本轮收口时将一次说明未恢复的动作、受影响分支和后续恢复方式。"]}}},{"messageId":"error.backend","owner":"catalog_owned","trigger":"error.backend_business","blocking":false,"allowedReplies":[],"variables":[{"name":"errorCode","type":"customerErrorText","required":true},{"name":"errorMessage","type":"customerErrorText","required":true},{"name":"errorScene","type":"customerErrorText","required":false},{"name":"errorSpecific","type":"customerErrorText","required":false},{"name":"checkedErrors","type":"customerErrorDetails","required":false},{"name":"bizTips","type":"customerErrorText","required":false},{"name":"appMax","type":"enum","required":true,"values":["YES","NO"]},{"name":"errorSceneLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"checkedErrorsBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"bizTipsLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"appMaxLine","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["业务处理失败。","","错误码:{{errorCode}}","错误信息:{{errorMessage}}","{{errorSceneLine}}","","{{checkedErrorsBlock}}","","{{bizTipsLine}}","","{{appMaxLine}}","","当前业务错误不会自动重试;请先按以上错误信息修正受影响分支的业务条件。","如需帮助,请联系技术支持并提供以上脱敏错误信息。"]}}},{"messageId":"error.service.unstable","owner":"catalog_owned","trigger":"error.service_unstable","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["MCP 服务暂时不稳定。","","当前动作已停止重试;由主流程记录受影响分支,并在不受其依赖的情况下继续其他分支。","本轮收口时将一次说明未恢复的动作、受影响分支和后续恢复方式。"]}}},{"messageId":"error.cli","owner":"catalog_owned","trigger":"error.cli_output","blocking":false,"allowedReplies":[],"variables":[{"name":"errorMessage","type":"customerErrorText","required":true},{"name":"bizTips","type":"customerErrorText","required":false},{"name":"checkedErrors","type":"customerErrorDetails","required":false},{"name":"bizTipsLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"checkedErrorsBlock","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["命令执行失败:{{errorMessage}}","{{bizTipsLine}}","{{checkedErrorsBlock}}"]}}},{"messageId":"integration.service.not_ready","owner":"catalog_owned","trigger":"integration.a2m.service_not_ready","blocking":false,"allowedReplies":[],"variables":[{"name":"recoveryAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-A2M-SUCCESS"],"variants":{"DEFAULT":{"templateLines":["AI 按量付费本地服务尚未达到自动联调前置条件。","","需要处理:{{recoveryAction}}","","该条件未满足前不会运行自动联调,也不会把服务标记为可用。"]}}},{"messageId":"integration.project_path.required","owner":"catalog_owned","trigger":"integration.project_path.unresolved","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["现有项目及文件保持不变。请在一条回复中说明新项目要放在哪里;可以说“在当前目录新建 pay-demo”、提供当前目录下的新子目录名,或提供电脑上的完整路径。若不想指定位置,可以说“新建项目”或“帮我新建默认项目”,我会在用户目录下选择安全的新目录并告知项目地址。路径解析和确认完成前不会创建或修改文件。"]}}},{"messageId":"integration.context.required","owner":"catalog_owned","trigger":"integration.context.unresolved","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"missingItems","type":"enumList","required":true,"values":["项目路径","技术栈"]}],"requiredPolicyIds":["P-PROJECT-PROTECT"],"variants":{"DEFAULT":{"templateLines":["为继续代码开发,请先确定:{{missingItems}}。","","- 要新建项目:可以说“在当前目录新建 pay-demo”,或提供一个新的文件夹位置;不想指定位置时,可以说“新建项目”或“帮我新建默认项目”。","- 要复用已有项目:请告诉我项目文件夹;如果不知道在哪,可以说“帮我在当前目录下找项目”;如果大概知道在哪,可以说“帮我在 server 下找项目”。我会先定位候选目录,再让你选择。","- “当前项目/当前目录”只有在当前目录本身就是可识别项目根时才会使用;否则不会扫描整个大目录。","- 技术栈:例如 Node.js + Express、Java + Spring Boot、Python + Flask、PHP + Laravel、C# + ASP.NET;不确定时可以说“请推荐默认技术栈”。","","项目和技术栈明确前,不会创建或修改文件。"]}}},{"messageId":"integration.project_candidates.select","owner":"catalog_owned","trigger":"integration.project_candidates.located","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"searchBasePath","type":"existingPath","required":true},{"name":"candidateRows","type":"string","required":true}],"requiredPolicyIds":["P-PROJECT-PROTECT"],"variants":{"DEFAULT":{"templateLines":["我先在 `{{searchBasePath}}` 下做了轻量项目定位;这里只看项目标记文件,不扫描代码内容。","","{{candidateRows}}","","如果要复用已有项目,请回复候选序号或具体项目文件夹。","如果要新建项目,可以回复“在当前目录新建 pay-demo”,或直接回复“新建项目”使用用户目录下的默认安全目录。","","选定具体项目目录前,不会扫描整个大目录,也不会创建或修改文件。"]}}},{"messageId":"integration.local_acceptance.notice","owner":"catalog_owned","trigger":"integration.local_acceptance.enabled","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前使用本地生产参数验收模式:本轮可以暂不发起公网异步通知,但生产上线前必须恢复并验证 `notify_url`。这不是生产最终配置,也不能据此宣称生产就绪。"]}}},{"messageId":"application.reuse.no_key","owner":"catalog_owned","trigger":"FLOW:REUSE_NO_KEY","blocking":false,"allowedReplies":[],"variables":[{"name":"appId","type":"singleLine","required":true}],"requiredPolicyIds":["P-KEY-PUBLIC-USER"],"variants":{"DEFAULT":{"templateLines":["应用 `{{appId}}` 当前为可复用的上线应用,但尚未确认 RSA2 应用公钥,应用分支仍未完成。","","接下来需要为该应用设置应用公钥;如果你已经准备好应用公钥,请直接提供。","","如果不想继续复用这个应用,请说明要重新选择或新建应用。"]}}},{"messageId":"application.candidates.facts","owner":"catalog_owned","trigger":"application.candidates.queried","blocking":false,"allowedReplies":[],"variables":[{"name":"applicationType","type":"enum","required":true,"values":["WEBAPP","MOBILEAPP"]},{"name":"applicationCandidates","type":"applicationCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"EMPTY":{"templateLines":["📋 暂无 {{applicationType}} 应用。"]},"PENDING_ONLY":{"templateLines":["📋 当前已有以下尚未上线的 {{applicationType}} 应用:","","{{candidateTable}}","","以上应用当前不可复用。"]},"ONLINE_WITH_OPTIONAL_PENDING":{"templateLines":["📋 发现您已有以下上线 {{applicationType}} 应用:","","{{candidateTable}}"]}}},{"messageId":"application.candidate.select","owner":"catalog_owned","trigger":"application.candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"runtime_enum","variables":[],"requiredPolicyIds":[],"variants":{"ONLINE_OR_NEW":{"templateLines":["请选择应用分支下一步:","","- 回复上方事实表中的完整 `appId`:复用对应上线应用。","- 回复 `新建`:创建新应用。","","候选、状态或目标变化后旧回复自动失效;不接受序号、历史候选或其他 `appId`。"]},"PENDING_OR_NEW":{"templateLines":["当前同类型应用均未上线,不能复用。","","- 回复 `新建`:创建新应用。","- 回复 `暂不新建`:本轮应用分支保持待办。"]}}},{"messageId":"application.operation.result","owner":"catalog_owned","trigger":"application.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"appId","type":"singleLine","required":true},{"name":"actualStatus","type":"singleLine","required":true},{"name":"nextAction","type":"singleLine","required":false},{"name":"manualConfigurationNextAction","type":"string","required":false,"derived":true,"values":["前往支付宝 AI 付站点,进入一站式接入 → 密钥配置,按当前 appId 获取对应的支付宝公钥,并手动配置到项目:https://aipay.alipay.com/?from=alipay-aipay-skill"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["应用 `{{appId}}` 的实际状态:{{actualStatus}}。","","下一步:{{nextAction}}","","待审核、待设置公钥或待人工配置时不会表述为应用发布完成。"]},"ALIPAY_PUBLIC_KEY_MANUAL_CONFIGURATION":{"templateLines":["应用 `{{appId}}` 的实际状态:需人工配置。","","下一步:{{manualConfigurationNextAction}}","","待人工配置时不会表述为应用发布完成。"]}}},{"messageId":"application.harmony.manual_create","owner":"catalog_owned","trigger":"application.harmony.manual_create","blocking":true,"allowedReplySet":"affirmative","inputHintType":"complete","variables":[],"requiredPolicyIds":["P-MCP-CONTRACT-FROZEN"],"variants":{"DEFAULT":{"templateLines":["当前 Skill 不支持创建 HarmonyOS 移动应用。","","请前往支付宝开放平台,进入“控制台” → “创建移动应用”,完成平台要求的创建、配置和审核:https://open.alipay.com/","","完成后将重新查询移动应用列表。"]}}},{"messageId":"service.operation.result","owner":"catalog_owned","trigger":"service.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceId","type":"singleLine","required":true},{"name":"actualResult","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["服务市场实际结果:{{actualResult}}。","已确认的 `serviceId`:`{{serviceId}}`。","","查看服务状态和服务详情:请前往支付宝 AI 付站点,登录后进入控制台 → 服务管理。","https://aipay.alipay.com/?from=alipay-aipay-skill","","该结果只代表服务分支,不会覆盖签约或应用分支的实际状态。"]}}},{"messageId":"signing.operation.result","owner":"catalog_owned","trigger":"signing.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"actualStatus","type":"singleLine","required":true},{"name":"feeDisplay","type":"singleLine","required":false},{"name":"nextAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"WITHOUT_FEE":{"templateLines":["产品当前签约状态:{{actualStatus}}。","","下一步:{{nextAction}}"]},"WITH_FEE":{"templateLines":["产品当前签约状态:{{actualStatus}}。","费率:{{feeDisplay}}","","下一步:{{nextAction}}"]}}},{"messageId":"service.candidates.facts","owner":"catalog_owned","trigger":"service.candidates.queried","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceCandidates","type":"serviceCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"EMPTY":{"templateLines":["📋 暂无已有服务。"]},"DEFAULT":{"templateLines":["📋 发现您已有以下服务:","","{{candidateTable}}"]}}},{"messageId":"service.candidate.select","owner":"catalog_owned","trigger":"service.candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"runtime_enum","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["请选择下一步:","","- 回复上方事实表中的完整 `serviceId`:复用对应服务。","- 回复 `新建`:创建新服务。","- 回复 `修改:<serviceId>`:修改对应服务。","","如需核对服务状态或服务详情,可前往支付宝 AI 付站点,登录后进入控制台 → 服务管理查看。","https://aipay.alipay.com/?from=alipay-aipay-skill"]}}},{"messageId":"service.id.missing","owner":"catalog_owned","trigger":"service.save.id_missing","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceName","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["服务 `{{serviceName}}` 的创建或修改调用已返回成功,但未解析到 `serviceId`,因此服务分支尚未完成。接下来会重新查询完整服务列表,并使用本次实际提交资料与列表可见字段做唯一匹配;没有唯一结果时保持未知。在取得实际 `serviceId` 前不会宣称 AI 按量付费产品开通完成。","","如需自行核对服务状态或服务详情,可前往支付宝 AI 付站点,登录后进入控制台 → 服务管理查看。","https://aipay.alipay.com/?from=alipay-aipay-skill"]}}}]}
1
+ {"schemaVersion":1,"interactionPrompts":{"confirmInputHint":"如确认,可以回复“继续”“确认”“OK”,也可以输入 1;如需调整,请直接说明。","planAdjustmentHint":"如需调整方案,请中断 Agent 执行并进行补充说明。","authorizationCompletionInputHint":"授权完成后可回复“继续”“好了”“OK”或输入 1","publicKeyConfirmationCompletionInputHint":"支付宝扫码确认应用公钥完成后可回复“继续”“好了”“OK”或输入 1","completionInputHint":"完成后可回复“继续”“好了”“已完成”“OK”或输入 1;如需调整,请直接说明。","scanReturnHint":"扫码完成后请回到 Agent 对话页面"},"interactionReplySets":{"affirmative":["1","继续","继续推进","继续执行","继续处理","继续下一步","请继续","请继续推进","继续吧","确认","确认继续","确定","同意","可以","可以继续","可以继续推进","没问题","好","好的","好了","好的继续","已完成","完成","完成了","操作完成","操作好了","已经完成","已经好了","处理好了","确认好了","弄好了","OK","Okay","Yes","Y"]},"messages":[{"messageId":"product.unsupported","owner":"catalog_owned","trigger":"route.unsupported_product","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"singleLine","required":true}],"requiredPolicyIds":["P-MCP-CONTRACT-FROZEN"],"variants":{"DEFAULT":{"templateLines":["当前 Skill 只支持接入 AI 按量付费、AI 网页应用收款和 AI 移动应用收款,不支持 `{{productName}}`。","","- 查看支付宝其他收单产品请前往:[支付宝开放平台](https://open.alipay.com)","- 开通支付宝其他收单产品请前往:[支付宝商家平台](https://b.alipay.com/page/portal/home)"]}}},{"messageId":"onboarding.enterprise.unsupported","owner":"catalog_owned","trigger":"onboarding.enterprise_account","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"ONBOARDING_ONLY":{"templateLines":["暂不支持企业账号通过 Skill 完成产品开通。","","请前往支付宝商家平台开通:https://b.alipay.com/page/portal/home","","如需继续进行代码开发,试试对 Agent 说:为我集成 AI 网页应用收款/AI 移动应用收款/AI 按量付费"]},"FULL_PROCESS":{"templateLines":["暂不支持企业账号通过 Skill 完成产品开通。","","请前往支付宝商家平台开通:https://b.alipay.com/page/portal/home"]}}},{"messageId":"onboarding.windows.redirect","owner":"catalog_owned","trigger":"onboarding.windows_platform","blocking":false,"allowedReplies":[],"variables":[{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"windowsOnboardingRedirect"}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前为 Windows 系统,请您暂时前往支付宝 AI 付站点完成产品开通:","{{officialUrl}}"]}}},{"messageId":"product.clarify","owner":"catalog_owned","trigger":"route.product_unclear","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["请确认您的业务场景:","","1. AI 按量付费:买家通过 Agent 使用支付宝完成支付,适用于 API、MCP、算力资源等按调用付费。","2. AI 网页应用收款:买家在电脑网页或手机浏览器页面使用支付宝付款。","3. AI 移动应用收款:买家在 APP 内调起支付宝完成付款。"]}}},{"messageId":"onboarding.mcc.clarify","owner":"catalog_owned","trigger":"onboarding.mcc_unclear","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["MCC 与经营类目强相关,无法仅从“{{productName}}”确定。","","请补充本次接入的经营内容,例如:","","- 电商购物(实物商品销售)","- 宠物用品","- 在线工具","- 软件开发服务","","也可以直接提供你已知的 MCC 二级类目名称或编码。"]}}},{"messageId":"onboarding.mcc.no_match","owner":"catalog_owned","trigger":"onboarding.mcc_search.none","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前经营描述未能匹配到 MCC 参考表中的二级类目,请调整。"]}}},{"messageId":"onboarding.mcc.candidates","owner":"catalog_owned","trigger":"onboarding.mcc_candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"runtime_enum","variables":[{"name":"mccCandidates","type":"mccCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["我找到了几个可能匹配的经营类目,请选择最接近的一项:","","{{candidateTable}}","","请回复序号、MCC 二级类目名称或编码;如果都不匹配,请补充实际销售的商品或服务类型。"]}}},{"messageId":"integration.start.confirm","owner":"catalog_owned","trigger":"integration.step2.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"planAdjustment","variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"projectPath","type":"path","required":true},{"name":"projectOriginLabel","type":"enum","required":true,"values":["现有项目","本轮新建项目"]},{"name":"integrationStatus","type":"enum","required":true,"values":["TARGET_PARTIAL","OTHER_PRODUCT_ONLY","NO_PAYMENT"]},{"name":"otherProducts","type":"singleLine","required":false},{"name":"language","type":"singleLine","required":true},{"name":"framework","type":"singleLine","required":true},{"name":"nextFlow","type":"enum","required":true,"values":["integration"]}],"requiredPolicyIds":["P-PROJECT-PROTECT","P-SENSITIVE-STATE"],"variants":{"AIPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | {{productName}} |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]},"WEBPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | AI 网页应用收款 |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]},"APPPAY":{"templateLines":["代码开发方案:","","| 项目 | 内容 |","|---|---|","| 目标产品 | AI 移动应用收款 |","| 项目路径 | `{{projectPath}}` |","| 项目来源 | {{projectOriginLabel}} |","| 代码开发状态 | {{integrationStatus}} |","| 检测到的其他支付产品 | {{otherProducts}} |","| 语言 / 框架 | {{language}} / {{framework}} |","","【前置提醒】接 AI 移动应用收款需要你有自己的 APP,本轮代码开发主要覆盖商家服务端支付接口的实现,APP 还需接入支付宝客户端 SDK 后才能调起支付。你可以在当前 AI 移动应用收款服务端代码开发完毕后,对 Agent 说:“给我做个 APP /给我的 APP 接支付宝客户端 SDK /把我的 APP 客户端和接了支付宝的服务端联动起来”。","","服务声明:","1. 使用本服务需遵守法律法规、自行审核测试并承担使用责任,我方不对使用效果、正确性担保。","2. 生产环境账号密码、API Keys、应用私钥等敏感信息切勿暴露给 Agent;仅沙箱环境信息可按本 Skill 的沙箱配置流程提供和使用。"]}}},{"messageId":"onboarding.plan.confirm","owner":"catalog_owned","trigger":"onboarding.step2.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"planAdjustment","variables":[{"name":"mccCode","type":"mccCode","required":true},{"name":"mccName","type":"singleLine","required":true},{"name":"mccQualification","type":"singleLine","required":true}],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING","P-URL-AUTO-OPEN"],"variants":{"AIPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 按量付费 |","| 产品码 | `I1080300001000160457` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,machine_pay:write,agmnt:write` |","| 材料预告 | 1、签约申请无需页面截图;2、新建或修改服务时收集服务资料;3、新建应用设置应用公钥时由用户提供 |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]},"WEBPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 网页应用收款 |","| 产品码 | `I1080300001000041203` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,fast_instant_trade_pay:write` |","| 材料预告 | 1、未签约时收集首页、商品页、支付页 3 张截图;支付页是展示支付宝付款方式,等待用户去支付的页面;2、新建应用设置应用公钥时由用户提供 |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]},"APPPAY":{"templateLines":["产品开通方案:","","| 项目 | 内容 |","|---|---|","| 产品 | AI 移动应用收款 |","| 产品码 | `I1080300001000041313` |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 特殊资质 | {{mccQualification}} |","| 授权范围 | `app:all,auth_alipay_apppay:write` |","| 材料预告 | 1、未签约时收集 APP 名称和首页、商品页、支付页 3 张截图;支付页是展示支付宝付款方式,等待用户去支付的页面;2、新建应用支持 iOS、Android 或 ALL(二者同时);3、新建应用设置应用公钥时由用户提供 |","| 特别提醒 | 鸿蒙系统移动应用暂不支持通过 Skill 创建,请前往支付宝开放平台-控制台手动创建:https://open.alipay.com/ |","","你也可以选择前往支付宝 AI 付站点完成产品开通:","https://aipay.alipay.com/?from=alipay-aipay-skill","","暂不支持企业账号通过 Skill 完成产品开通,企业账号如需开通请前往支付宝商家平台(https://b.alipay.com/page/portal/home)"]}}},{"messageId":"auth.page","owner":"catalog_owned","trigger":"AUTH_FLOW:READY_TO_OPEN","blocking":false,"allowedReplies":[],"postRenderHintType":"scanReturn","expiresWithPrompt":true,"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"deviceCode","type":"singleLine","required":true},{"name":"mccCode","type":"mccCode","required":true},{"name":"mccName","type":"singleLine","required":true},{"name":"verificationCode","type":"singleLine","required":true},{"name":"expiresDisplay","type":"singleLine","required":true},{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"authorization"}],"requiredPolicyIds":["P-AUTH-URL","P-URL-AUTO-OPEN"],"variants":{"READY":{"templateLines":["接下来会自动打开支付宝扫码授权页面,请在页面中扫码完成授权。","","| 授权信息 | 内容 |","|---|---|","| 产品类型 | {{productName}} |","| 经营类目 | {{mccName}} (`{{mccCode}}`) |","| 确认码 | {{verificationCode}} |","| 授权链接有效期 | {{expiresDisplay}} |","","安全提示:支付宝扫码后,请核对授权页面显示的确认码是否与上方一致;如不一致,请勿授权并立即停止操作。确认码只用于核对,不需要输入。","","如果自动跳转失败,请复制下方链接到网页浏览器打开。","授权链接:","{{officialUrl}}"]}}},{"messageId":"auth.open.manual","owner":"catalog_owned","trigger":"AUTH_OPEN:OPEN_FAILED|GUI_UNAVAILABLE|LINK_ONLY","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-URL-AUTO-OPEN"],"variants":{"DEFAULT":{"templateLines":["未能自动打开支付宝授权页面,请手动打开上一条消息中的授权链接并完成扫码。我会继续检查授权结果,无需回复。"]}}},{"messageId":"application.key.page","owner":"catalog_owned","trigger":"application.key_page.ready","blocking":false,"allowedReplies":[],"postRenderHintType":"scanReturn","expiresWithPrompt":true,"variables":[{"name":"appId","type":"singleLine","required":true},{"name":"officialUrl","type":"officialTemporaryUrl","required":true,"urlKind":"publicKeyConfirmation"}],"requiredPolicyIds":["P-KEY-URL","P-URL-AUTO-OPEN"],"variants":{"READY":{"templateLines":["接下来会自动打开应用 `{{appId}}` 的公钥确认页面,请打开支付宝扫码确认应用公钥。","","如果自动跳转失败,请复制下方链接到网页浏览器打开。","公钥确认链接:","{{officialUrl}}"]}}},{"messageId":"application.key.pending","owner":"catalog_owned","trigger":"FLOW:KEY_NOT_CONFIRMED","blocking":true,"allowedReplySet":"affirmative","inputHintType":"publicKeyConfirmationComplete","variables":[],"requiredPolicyIds":["P-KEY-PUBLIC-USER"],"variants":{"DEFAULT":{"templateLines":["应用公钥尚未确认,请先完成公钥设置确认。"]}}},{"messageId":"onboarding.discovery.summary","owner":"catalog_owned","trigger":"onboarding.discovery.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"signingStatus","type":"enum","required":true,"values":["未签约","已提交待生效","已生效","其他状态待核验","查询失败"]},{"name":"serviceStatus","type":"enum","required":false,"values":["无已有服务","已有服务候选","查询失败"]},{"name":"applicationStatus","type":"enum","required":true,"values":["无同类型应用","有上线应用可复用","仅有未上线应用","查询失败"]}],"requiredPolicyIds":["P-PARTIAL-RESULT","P-MATERIAL-CATEGORY"],"variants":{"AIPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | {{serviceStatus}} |","| 应用发布 | {{applicationStatus}} |"]},"WEBPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | 无需处理 |","| 应用发布 | {{applicationStatus}} |"]},"APPPAY":{"templateLines":["当前查询结果:","","| 流程 | 当前状态 |","|---|---|","| 产品签约 | {{signingStatus}} |","| 服务市场 | 无需处理 |","| 应用发布 | {{applicationStatus}} |"]}}},{"messageId":"materials.category.collect","owner":"catalog_owned","trigger":"materials.category.ready","blocking":true,"allowedReplies":[],"replyMode":"freeform","expiresWithPrompt":true,"variables":[{"name":"categoryName","type":"enum","required":true,"values":["签约材料","服务资料","应用资料"]},{"name":"currentStatus","type":"enum","required":true,"values":["待补充","部分已提供,待补充","校验失败,需更正"]},{"name":"missingFields","type":"enumList","required":true,"values":["APP名称","首页截图","商品页截图","支付页截图","服务名称","服务描述","服务地址","服务单价","请求示例JSON","应用平台和对应资料","iOS Bundle ID(bundleId)","Android 应用包名(appPackage)","Android 应用签名摘要(appSign)","应用公钥"]},{"name":"paymentPageHint","type":"string","derived":true,"values":["支付页说明:支付页是展示支付宝付款方式,等待用户去支付的页面,不是支付成功页。"]},{"name":"serviceUrlHint","type":"string","derived":true,"values":["请提供有效的 URL 地址(以 http:// 或 https:// 开头)"]},{"name":"servicePricingHint","type":"string","derived":true,"values":["请提供不低于 0.01 元的有效服务单价,可输入 0.03、0.03元或 0.03 元/次。"]}],"requiredPolicyIds":["P-MATERIAL-CATEGORY"],"variants":{"INITIAL":{"templateLines":["当前收集类别:{{categoryName}}","","请在一条回复中提供:{{missingFields}}。","{{paymentPageHint}}"]},"APP_WEB_INITIAL":{"templateLines":["当前收集类别:应用资料","","请在一条回复中提供应用公钥;请勿提供应用私钥。无需另行回复 `新建`。","","填写示例(请替换为实际内容):","```text","应用公钥:<你自行生成的完整应用公钥>","```",""]},"APP_MOBILE_INITIAL":{"templateLines":["当前收集类别:应用资料","","请在一条回复中选择应用平台、提供对应客户端资料和应用公钥:","","- iOS:`IOS`、iOS Bundle ID(bundleId)、应用公钥。","- Android:`ANDROID`、Android 应用包名(appPackage)、Android 应用签名摘要(appSign,不是应用公钥)、应用公钥。","- iOS + Android:`ALL`、以上三项客户端资料、应用公钥。","","填写示例(请替换为实际内容):","```text","ANDROID","Android 应用包名(appPackage):com.example.app","Android 应用签名摘要(appSign):<你的 Android 应用签名摘要>","应用公钥:<你自行生成的完整应用公钥>","```","","请勿提供应用私钥。无需另行回复 `新建`。","","鸿蒙系统移动应用暂不支持通过 Skill 创建,请前往支付宝开放平台-控制台手动创建:https://open.alipay.com/"]},"PARTIAL":{"templateLines":["当前收集类别:{{categoryName}}","","还需补充:{{missingFields}}。","{{paymentPageHint}}","已校验字段无需重复提供。"]},"INVALID":{"templateLines":["当前收集类别:{{categoryName}}","","以下内容需要更正:{{missingFields}}。","{{serviceUrlHint}}","{{servicePricingHint}}","{{paymentPageHint}}","已校验字段无需重复提供。"]},"SERVICE_INITIAL":{"templateLines":["当前收集类别:服务资料","","请在一条回复中提供:服务名称、服务描述、服务地址、服务单价、请求示例JSON。","","填写示例(请替换为实际内容):","```text","服务名称:天气查询","服务描述:按城市查询天气","服务地址:以 http:// 或 https:// 开头的实际服务地址","服务单价:0.08 元/次","请求示例 JSON:{\"city\":\"杭州\"}","```"]}}},{"messageId":"service.create.summary","owner":"catalog_owned","trigger":"service.create.ready","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceName","type":"singleLine","required":true},{"name":"serviceDescription","type":"singleLine","required":true},{"name":"serviceUrl","type":"runtimeUrl","required":true},{"name":"servicePricing","type":"singleLine","required":true},{"name":"serviceSchema","type":"string","required":true}],"requiredPolicyIds":["P-WRITE-CONFIRM","P-WRITE-UNKNOWN"],"variants":{"DEFAULT":{"templateLines":["将创建以下 AI 按量付费服务:","","服务名称:{{serviceName}}","服务描述:{{serviceDescription}}","服务地址:`{{serviceUrl}}`","服务单价:{{servicePricing}} 元/次","请求示例 JSON:","```json","{{serviceSchema}}","```"]}}},{"messageId":"onboarding.write.confirm","owner":"catalog_owned","trigger":"external_write.ready","blocking":true,"allowedReplySet":"affirmative","inputHintType":"confirm","expiresWithPrompt":true,"variables":[{"name":"sessionSummary","type":"singleLine","required":true},{"name":"subjectSummary","type":"singleLine","required":true},{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"actionTypes","type":"enumList","required":true,"values":["服务修改"]},{"name":"serviceId","type":"singleLine","required":false},{"name":"serviceName","type":"singleLine","required":false},{"name":"serviceDescription","type":"singleLine","required":false},{"name":"serviceUrl","type":"runtimeUrl","required":false},{"name":"servicePricing","type":"singleLine","required":false},{"name":"serviceSchema","type":"string","required":false}],"requiredPolicyIds":["P-WRITE-CONFIRM","P-WRITE-UNKNOWN"],"variants":{"SERVICE_UPDATE_ONLY":{"templateLines":["请确认以下支付宝操作:","","- 当前会话:{{sessionSummary}}","- 操作主体:{{subjectSummary}}","- 产品:AI 按量付费","- 动作:服务修改","","服务ID:`{{serviceId}}`","服务名称:{{serviceName}}","服务描述:{{serviceDescription}}","服务地址:`{{serviceUrl}}`","服务单价:{{servicePricing}} 元/次","请求示例 JSON:","```json","{{serviceSchema}}","```","","本次只执行上述服务修改;签约、应用创建、公钥设置和应用提审不包含在本确认中。"]}}},{"messageId":"process.partial_result","owner":"catalog_owned","trigger":"process.current_endpoint","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"processResultTitle","type":"enum","required":true,"values":["支付产品-产品开通已完成","流程进展"]},{"name":"integrationResult","type":"enum","required":true,"values":["不在本轮执行范围","已完成","部分完成,沙箱配置待完成","部分完成,人工待验证","未完成","结果未知"]},{"name":"sandboxConfigState","type":"enum","required":false,"values":["READY","CREATE_PENDING","VERIFY_PENDING"]},{"name":"signingResult","type":"enum","required":true,"values":["未签约","已提交,等待生效","已生效","失败","结果未知"]},{"name":"serviceResult","type":"enum","required":true,"values":["无需处理","已复用","创建成功,状态未取得","修改成功,状态未取得","已完成","失败","结果未知"]},{"name":"applicationResult","type":"enum","required":true,"values":["待选择","已创建,待设置公钥","公钥待确认","HarmonyOS 应用待平台侧创建、配置或上线","已提交审核,等待上线","已上线且配置完整","需人工配置","失败","结果未知"]},{"name":"remainingActions","type":"singleLine","required":true},{"name":"manualVerificationItems","type":"singleLine","required":false},{"name":"applicationOperationAppId","type":"singleLine","required":false},{"name":"applicationOperationActualStatus","type":"singleLine","required":false},{"name":"applicationOperationNextAction","type":"singleLine","required":false},{"name":"applicationManualConfigurationNextAction","type":"string","required":false,"derived":true,"values":["前往支付宝 AI 付站点,进入一站式接入 → 密钥配置,按当前 appId 获取对应的支付宝公钥,并手动配置到项目:https://aipay.alipay.com/?from=alipay-aipay-skill"]},{"name":"applicationOperationBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"manualVerificationLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"productionReadinessBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"statusQueryHint","type":"enum","required":false,"derived":true,"values":["。这期间,你也可以试着对 Agent 说:“帮我查询产品签约状态”或“帮我查询应用状态”。"]},{"name":"sandboxRecoveryHint","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"nextFlowReminderLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"nextFlowReminder","type":"enum","required":true,"values":["还需完成支付产品-代码开发,才能在业务系统中实际发起支付。","代码开发已在本轮执行;后续只按上表实际待办继续。"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["{{processResultTitle}}:","","| 分支 | 实际结果 |","|---|---|","| 产品 | {{productName}} |","| 代码开发 | {{integrationResult}} |","| 产品开通 | {{signingResult}} |","| 服务市场 | {{serviceResult}} |","| 应用发布 | {{applicationResult}} |","","本轮流程仍需处理:{{remainingActions}}{{statusQueryHint}}","{{manualVerificationLine}}","{{sandboxRecoveryHint}}","{{applicationOperationBlock}}","","{{productionReadinessBlock}}","","{{nextFlowReminderLine}}"]}}},{"messageId":"key_tool.download.result","owner":"catalog_owned","trigger":"key_tool.download.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"downloadPath","type":"existingPath","required":true}],"requiredPolicyIds":["P-KEY-TOOL-DOWNLOAD"],"fallbackMessageId":"key_tool.download.fallback","variants":{"DOWNLOADED":{"templateLines":["支付宝开放平台密钥工具已下载到:`{{downloadPath}}`。","","请打开该安装包并按页面引导完成安装;Agent 不会自动安装、启动工具或生成密钥。生成后只向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。","","如未找到安装包或自动下载未成功,请前往支付宝开放平台自行下载安装:","","https://opendocs.alipay.com/isv/02kipk"]}}},{"messageId":"key_tool.download.fallback","owner":"catalog_owned","trigger":"key_tool.download.fallback","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-KEY-TOOL-DOWNLOAD"],"variants":{"DEFAULT":{"templateLines":["未能完成自动下载,可能是当前环境不支持、无法访问下载源、本地目录不可写或安装包校验未通过。请访问支付宝开放平台手动下载支付宝开放平台密钥工具:","","https://opendocs.alipay.com/isv/02kipk","","仅向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。"]}}},{"messageId":"sandbox.windows.manual_setup","owner":"catalog_owned","trigger":"integration.sandbox.windows.manual_setup","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["当前 Windows 环境暂不支持自动创建快速沙箱,请前往支付宝 AI 付站点-选择产品-一站式接入-技术集成页面获取沙箱配置:https://aipay.alipay.com/?from=alipay-aipay-skill","","请把沙箱应用的 APPID、支付宝公钥、应用公钥、与当前开发语言(JAVA语言/非JAVA语言)匹配的应用私钥、沙箱账号信息告诉我,我会帮你完成项目配置,并继续进行支付产品代码开发。","","生产环境应用私钥和密码切勿暴露给 Agent。"]}}},{"messageId":"sandbox.environment.summary","owner":"catalog_owned","trigger":"integration.sandbox.persisted","blocking":false,"allowedReplies":[],"variables":[{"name":"productName","type":"enum","required":true,"values":["AI 按量付费","AI 网页应用收款","AI 移动应用收款"]},{"name":"configPath","type":"existingPath","required":true},{"name":"environmentRows","type":"sandboxTableRows","required":true}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["沙箱环境摘要","","| 项目 | 信息 |","|---|---|","| 产品 | {{productName}} |","| 配置文件目录 | `{{configPath}}` |","{{environmentRows}}","| 密钥字段 | 已写入本地配置文件,默认不在对话中展开 |"]}}},{"messageId":"sandbox.configuration.pending","owner":"catalog_owned","trigger":"integration.sandbox.pending","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"CREATE":{"templateLines":["快速沙箱暂未创建成功,当前沙箱配置尚未完成。","","本轮将继续代码开发。代码开发完成后,请对 Agent 说:“重新创建并配置沙箱”。"]},"VERIFY":{"templateLines":["快速沙箱配置复核未通过,当前沙箱配置尚未完成。","","本轮将继续代码开发。代码开发完成后,请对 Agent 说:“重新创建并配置沙箱”。"]}}},{"messageId":"sandbox.create.failure","owner":"catalog_owned","trigger":"integration.sandbox.failed","blocking":false,"allowedReplies":[],"variables":[{"name":"failureReason","type":"singleLine","required":true},{"name":"recoveryAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"WINDOWS":{"templateLines":["Windows 沙箱本地配置未准备完成:{{failureReason}}","","恢复动作:{{recoveryAction}}","","字段缺失、来源不明或本地保护未完成时不能继续,也不能把当前配置表述为可用。"]}}},{"messageId":"sandbox.environment.reminder","owner":"catalog_owned","trigger":"integration.sandbox.persisted.reminder","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-A2M-SANDBOX","P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["快速沙箱环境配置已准备完成。","","- 当前环境仅供测试,不涉及真实资金。","- 完整配置已写入本地文件;不要在项目日志、对话总结或公共代码仓库中打印或提交密钥和沙箱账号。","- 迁移配置时从受限权限的本地文件读取,不通过对话传递密钥原文。","- 正式上线前使用同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并按开发语言确认私钥格式;格式不匹配时只使用支付宝官方密钥工具转换。","- 沙箱网关为 https://openapi-sandbox.dl.alipaydev.com/gateway.do,生产网关为 https://openapi.alipay.com/gateway.do;禁止在沙箱配置中提前使用生产网关。","- AI 按量付费沙箱 `serviceId` 固定为 `api_mock_service_id`,生产前必须替换为服务市场实际 `serviceId`。"]},"WINDOWS":{"templateLines":["Windows 沙箱本地配置已准备完成。","","- 当前环境仅供测试,不涉及真实资金。","- 不要在项目日志、对话总结或公共代码仓库中打印或提交密钥和沙箱账号。","- 本轮提供的沙箱密钥和账号只用于当前项目配置;Agent 不得在回复中复述。","- 生产环境应用私钥和密码切勿暴露给 Agent。","- 正式上线前使用同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并按开发语言确认私钥格式;格式不匹配时只使用支付宝官方密钥工具转换。","- 沙箱网关为 https://openapi-sandbox.dl.alipaydev.com/gateway.do,生产网关为 https://openapi.alipay.com/gateway.do;禁止在沙箱配置中提前使用生产网关。","- AI 按量付费沙箱 `serviceId` 固定为 `api_mock_service_id`,生产前必须替换为服务市场实际 `serviceId`。"]}}},{"messageId":"a2m.test.start","owner":"catalog_owned","trigger":"integration.a2m.test.start","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-A2M-SANDBOX","P-A2M-SUCCESS"],"variants":{"DEFAULT":{"templateLines":["开始执行 AI 按量付费沙箱服务端联调。","","我将连续验证 `402 Payment-Needed`、沙箱收银、`Payment-Proof` 重试和资源交付,完成后输出实际结论;这里不需要额外确认。"]}}},{"messageId":"a2m.test.result","owner":"catalog_owned","trigger":"integration.a2m.test.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"evidenceSummary","type":"singleLine","required":true},{"name":"recoveryAction","type":"singleLine","required":false}],"requiredPolicyIds":["P-A2M-SUCCESS","P-SENSITIVE-STATE"],"variants":{"PASSED":{"templateLines":["AI 按量付费沙箱服务端联调通过。","","通过证据:{{evidenceSummary}}"]},"FAILED":{"templateLines":["AI 按量付费沙箱服务端联调未通过。","","实际证据:{{evidenceSummary}}","","恢复动作:{{recoveryAction}}"]}}},{"messageId":"a2m.payment.experience","owner":"catalog_owned","trigger":"integration.a2m.optional_payment_experience","blocking":false,"allowedReplies":[],"variables":[{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"buyerAccount","type":"singleLine","required":true},{"name":"buyerLoginPassword","type":"sandboxCredential","required":true},{"name":"buyerPayPassword","type":"sandboxCredential","required":true}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION"],"variants":{"FULL":{"templateLines":["可选:体验 AI 按量付费沙箱付款","","付款链接(复制到网页浏览器打开):{{paymentUrl}}","沙箱买家账号:{{buyerAccount}}","登录密码:{{buyerLoginPassword}}","支付密码:{{buyerPayPassword}}"]}}},{"messageId":"webpay.sandbox.experience","owner":"catalog_owned","trigger":"integration.webpay.sandbox_experience","blocking":false,"allowedReplies":[],"variables":[{"name":"startCommand","type":"command","required":true},{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"buyerAccount","type":"singleLine","required":true},{"name":"buyerLoginPassword","type":"sandboxCredential","required":true},{"name":"buyerPayPassword","type":"sandboxCredential","required":true},{"name":"resultPageInstruction","type":"enum","required":true,"values":["付款后确认浏览器自动返回商户结果页,页面可正常展示并通过服务端查询呈现订单状态。","付款后不会自动返回商户网站;请手动返回商户订单查询页并刷新或查询订单状态。"]}],"requiredPolicyIds":["P-SANDBOX-CREDENTIAL-EXCEPTION"],"variants":{"DEFAULT":{"templateLines":["AI 网页应用收款沙箱付款指引","","1. 启动服务:`{{startCommand}}`","2. 在浏览器打开:{{paymentUrl}}","3. 在沙箱收银台二选一:使用沙箱买家账号登录,或仅在 Android 沙箱支付宝中扫描收银台页面二维码。","4. 沙箱买家账号:{{buyerAccount}}","5. 登录密码:{{buyerLoginPassword}}","6. 支付密码:{{buyerPayPassword}}","7. {{resultPageInstruction}}","","沙箱测试环境不稳定,可能出现跳转到支付宝收银台页面后报错,如:504 Gateway Time-out;输入完测试买家账号后展示系统繁忙;输入完测试买家支付密码后展示系统繁忙。您可以回到支付页重新发起支付以完成沙箱测试。","","前台页面和同步回跳参数不是支付成功依据,最终以验签通过的异步通知或交易查询为准。用户暂不付款只记为待体验,不得表述为沙箱测试通过。"]}}},{"messageId":"sandbox.android.client","owner":"catalog_owned","trigger":"integration.sandbox_android_client","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["沙箱支付宝当前仅支持 Android。请复制以下支付宝官方地址到网页浏览器打开,并扫描屏幕二维码下载沙箱版支付宝安装包:","","https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","如果直链或页面二维码无法打开,请前往支付宝开放平台-沙箱工具页下载:","","https://open.alipay.com/develop/sandbox/tool"]}}},{"messageId":"webpay.sandbox.experience.windows","owner":"catalog_owned","trigger":"integration.webpay.sandbox_experience.windows","blocking":false,"allowedReplies":[],"variables":[{"name":"startCommand","type":"command","required":true},{"name":"paymentUrl","type":"runtimeUrl","required":true},{"name":"resultPageInstruction","type":"enum","required":true,"values":["付款后确认浏览器自动返回商户结果页,页面可正常展示并通过服务端查询呈现订单状态。","付款后不会自动返回商户网站;请手动返回商户订单查询页并刷新或查询订单状态。"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["AI 网页应用收款沙箱付款指引","","1. 启动服务:`{{startCommand}}`","2. 在浏览器打开:{{paymentUrl}}","3. 在沙箱收银台使用支付宝开放平台控制台中的沙箱买家账号登录,或仅在 Android 沙箱支付宝中扫描收银台页面二维码。","4. 登录密码和支付密码请直接从本机保存的信息或支付宝开放平台控制台取得,无需再次提供给 Agent。","5. {{resultPageInstruction}}","","沙箱测试环境不稳定,可能出现跳转到支付宝收银台页面后报错,如:504 Gateway Time-out;输入完测试买家账号后展示系统繁忙;输入完测试买家支付密码后展示系统繁忙。您可以回到支付页重新发起支付以完成沙箱测试。","","前台页面和同步回跳参数不是支付成功依据,最终以验签通过的异步通知或交易查询为准。用户暂不付款只记为待体验,不得表述为沙箱测试通过。"]}}},{"messageId":"integration.safety.closeout","owner":"catalog_owned","trigger":"integration.step7.safety","blocking":false,"allowedReplies":[],"variables":[{"name":"acceptanceSummary","type":"singleLine","required":true}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"AIPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入客户端、日志或公共仓库。","- `Payment-Proof` 必须调用 `alipay.aipay.agent.payment.verify` 验证;无效或过期凭证拒绝服务,结果不明时不得要求用户重复付款。","- 资源交付后必须调用 `alipay.aipay.agent.fulfillment.confirm`;履约确认失败必须可重试且保持幂等。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥,并将 `api_mock_service_id` 替换为真实 `serviceId`。`serviceId` 获取方式:支付宝扫码登录支付宝 AI 付站点 → 控制台 → 服务管理 → 复制审核已通过的服务 ID:https://aipay.alipay.com/?from=alipay-aipay-skill","- 收款商户 PID/2088 用于 AI 按量付费 `seller_id` 和 `seller_unique_id`,不由 Agent 猜测。获取方式:支付宝扫码登录支付宝商家平台 → 点击头像 → 复制账户名下方 2088 开头的商家 ID:https://b.alipay.com/page/portal/home","- 生产环境必须严格校验本地订单、金额与资源关系;AI 按量付费不使用 AI 网页应用收款/AI 移动应用收款的 `notify_url`,正式收款依赖 `Payment-Proof` 验付和异步履约回执确认。","- 上线前必须完成人工代码审查;Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载。下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","当前验收口径:{{acceptanceSummary}}"]},"WEBPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入客户端、日志或公共仓库。","- 同步回跳和前台结果不作为支付成功依据;必须以验签通过的异步通知或交易查询为准。","- 异步通知必须先验签、校验关键字段、幂等处理并返回 `success`;支付结果不明时不得要求用户重复付款。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥。","- AI 网页应用收款生产上线必须配置公网 HTTPS `notify_url`,完成验签、幂等、关键字段校验、成功回写和补偿查询;localhost、局域网地址或其他不可公网访问的地址只能标记为人工待验证。","- 本地生产参数验收可暂缓公网通知联调;未完成公网 HTTPS `notify_url` 联调时,只能表述为“本地正式验收 / 本地生产参数验收,公网异步通知待补齐”,不能表述为生产就绪。","- Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载。下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","","当前验收口径:{{acceptanceSummary}}"]},"APPPAY":{"templateLines":["代码开发安全与上线提醒","","- 私钥只保存在商家服务端,禁止写入 APP 客户端、日志或公共仓库。","- 客户端支付结果不作为成功依据;必须以验签通过的异步通知或服务端交易查询为准。","- 异步通知必须先验签、校验关键字段、幂等处理并返回 `success`;支付结果不明时不得要求用户重复付款。","- AI 移动应用收款生产上线必须配置公网 HTTPS `notify_url`,完成验签、幂等、关键字段校验、成功回写和补偿查询;localhost、局域网地址或其他不可公网访问的地址只能标记为人工待验证。","- 本地生产参数验收可暂缓公网通知联调;未完成公网 HTTPS `notify_url` 联调时,只能表述为“本地正式验收 / 本地生产参数验收,公网异步通知待补齐”,不能表述为生产就绪。","- Java 使用 `PKCS#8` 私钥,非 Java 使用 `PKCS#1` 私钥,格式不匹配时只用支付宝官方密钥工具转换。","- 沙箱配置仅用于开发调试;正式上线前必须替换为同一套生产 `appId`、应用公钥、应用私钥和支付宝公钥。","- 本轮代码开发覆盖商家服务端支付能力;APP 客户端还需接入支付宝客户端 SDK,使用服务端返回的 `orderStr` 调起支付,并完成客户端支付结果展示与服务端异步通知/交易查询的联动测试。若 APP 尚未接入,可以试试继续对 Agent 说:“给我的 APP 接支付宝客户端 SDK,我要做服务端和客户端的联调”(请确保此时你已经有一个开发完毕的 APP)。","","补充说明:","- 若忘记代码开发过程中获取的沙箱配置,可以试试对 Agent 说:“沙箱测试买家账号和密码是什么?”。","- 当前沙箱版支付宝【仅支持 Android 端】,可自行前往网页浏览器打开链接,扫码下载;或试试让 Agent 帮你解析该地址包含的二维码并下载沙箱版支付宝,下载地址:https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","- 【友情提醒】如果你当前还没有开发 APP,可以试着让 Agent 帮你安装手机客户端模拟器、开发 APP、接入支付宝客户端 SDK 并安装沙箱版支付宝供测试使用。","","当前验收口径:{{acceptanceSummary}}"]}}},{"messageId":"integration.checklist.result","owner":"catalog_owned","trigger":"integration.checklist.finished","blocking":false,"allowedReplies":[],"variables":[{"name":"overallResult","type":"enum","required":true,"values":["通过","部分通过","未通过"]},{"name":"failedItems","type":"singleLine","required":true},{"name":"manualItems","type":"singleLine","required":true},{"name":"sandboxResult","type":"enum","required":false,"values":["AI 按量付费沙箱服务端联调通过","AI 按量付费沙箱服务端联调未通过"]},{"name":"webpayExperienceResult","type":"enum","required":false,"values":["已提供浏览器付款入口和操作指引,实际付款及结果验证仍以用户完成情况为准","未提供浏览器付款入口或完整操作指引,需先补齐","已提供浏览器付款入口和操作指引;用户已完成一笔沙箱付款,结果只按实际核验证据记录"]},{"name":"sandboxConfigState","type":"enum","required":true,"values":["READY","CREATE_PENDING","VERIFY_PENDING"]},{"name":"blockingDefectState","type":"enum","required":true,"values":["NONE","PRESENT"]},{"name":"executionMode","type":"enum","required":true,"values":["仅代码开发","完整接入"]},{"name":"nextFlowReminder","type":"enum","required":true,"values":["正式上线前还需完成支付产品-产品开通。","代码开发校验通过后将自动进入支付产品-产品开通;未通过时停留在代码开发。","沙箱配置尚未完成,但不阻塞本轮继续支付产品-产品开通;完成配置后再进行沙箱测试。","代码开发自动校验已完成,仍有人工待验证项;本轮继续产品开通。"]}],"requiredPolicyIds":[],"variants":{"AIPAY_PASSED":{"templateLines":["AI 按量付费代码开发校验通过。","","{{nextFlowReminder}}"]},"AIPAY_INCOMPLETE":{"templateLines":["AI 按量付费代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]},"WEBPAY_PASSED":{"templateLines":["AI 网页应用收款代码开发校验通过。","","{{nextFlowReminder}}"]},"WEBPAY_INCOMPLETE":{"templateLines":["AI 网页应用收款代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]},"APPPAY_PASSED":{"maintenanceTodo":"TODO: 后续确定 AI 移动应用收款沙箱测试的对客引导动作后,在本变体补充;同步 integration flow、checklist 和测试。","templateLines":["AI 移动应用收款代码开发校验通过。","","{{nextFlowReminder}}"]},"APPPAY_INCOMPLETE":{"maintenanceTodo":"TODO: 后续确定 AI 移动应用收款沙箱测试的对客引导动作后,在本变体补充;同步 integration flow、checklist 和测试。","templateLines":["AI 移动应用收款代码开发校验:{{overallResult}}。","","未完成项:{{failedItems}}","人工待验证:{{manualItems}}","","{{nextFlowReminder}}"]}}},{"messageId":"auth.pending","owner":"catalog_owned","trigger":"AUTH_FLOW:PENDING","blocking":true,"allowedReplySet":"affirmative","inputHintType":"authorizationComplete","variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["支付宝授权尚未完成,当前流程保持等待,请在已打开的网页二维码页面完成扫码确认后,再回复当前授权提示。"]}}},{"messageId":"auth.expired","owner":"catalog_owned","trigger":"AUTH_FLOW:EXPIRED","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["本次支付宝授权链接已过期,旧链接和旧回复均已失效。正在重新生成授权链接,请使用新的授权页面完成授权。"]}}},{"messageId":"auth.mismatch","owner":"catalog_owned","trigger":"AUTH_FLOW:SCOPE_MISMATCH|MCC_MISMATCH","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING"],"variants":{"DEFAULT":{"templateLines":["当前授权范围或经营类目不匹配,需要退出当前登录并重新生成授权页面。"]}}},{"messageId":"error.mcp.auth","owner":"catalog_owned","trigger":"error.mcp_auth","blocking":false,"allowedReplies":[],"variables":[{"name":"errorMessage","type":"customerErrorText","required":false}],"requiredPolicyIds":["P-AUTH-BEFORE-ONBOARDING","P-SENSITIVE-STATE"],"variants":{"START":{"templateLines":["🔐 未登录或授权已过期","","当前登录状态已失效,无法继续操作。MCP 调用返回认证错误,正在退出当前登录。"]},"LOGOUT_UNCONFIRMED":{"templateLines":["无法确认退出当前登录结果,已停止重新授权。","","这通常表示当前 Agent 执行环境缺少联网权限、CLI wrapper 混入输出,或 stdout/stderr 无法唯一解析;不代表用户本机 logout 失败,也不能据此判断支付宝业务失败。","","Agent 应申请可联网权限后重试同一动作;不要要求用户手动 logout 代替本轮事实。"]},"LOGOUT_FAILED":{"templateLines":["退出当前登录失败,已停止重新授权。","错误信息:{{errorMessage}}","","请先重试退出登录;确认退出成功后再重新授权。"]},"LOGOUT_SUCCESS":{"templateLines":["已退出登录状态。","","请重新执行登录授权流程:生成授权链接后,使用支付宝扫码授权,授权成功后继续当前操作。","","产品、MCC 和授权范围未变化时,沿用已有确认立即重新生成授权链接;发生变化时先重新确认受影响内容。"]}}},{"messageId":"error.mcp.service","owner":"catalog_owned","trigger":"error.mcp_service","blocking":false,"allowedReplies":[],"variables":[{"name":"errorDetail","type":"customerErrorText","required":false}],"requiredPolicyIds":["P-PARTIAL-RESULT","P-SENSITIVE-STATE"],"variants":{"AGENT_NETWORK":{"templateLines":["MCP 服务暂时不可用。","","当前命令需要访问支付宝服务,但当前 Agent 执行环境可能没有外网权限。Agent 应申请可联网权限后重试同一条命令,不要要求用户排查本机网络,也不要更换业务参数。","","请授权 Agent 联网重试,或稍后重新执行当前命令。"]},"GENERIC":{"templateLines":["MCP 服务暂时不可用。","","无法连接到支付宝服务,请稍后重试。","错误详情:{{errorDetail}}","","当前动作已停止重试;由主流程记录受影响分支,并在不受其依赖的情况下继续其他分支。本轮收口时将一次说明未恢复的动作、受影响分支和后续恢复方式。"]}}},{"messageId":"error.backend","owner":"catalog_owned","trigger":"error.backend_business","blocking":false,"allowedReplies":[],"variables":[{"name":"errorCode","type":"customerErrorText","required":true},{"name":"errorMessage","type":"customerErrorText","required":true},{"name":"errorScene","type":"customerErrorText","required":false},{"name":"errorSpecific","type":"customerErrorText","required":false},{"name":"checkedErrors","type":"customerErrorDetails","required":false},{"name":"bizTips","type":"customerErrorText","required":false},{"name":"appMax","type":"enum","required":true,"values":["YES","NO"]},{"name":"errorSceneLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"checkedErrorsBlock","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"bizTipsLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"appMaxLine","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["业务处理失败。","","错误码:{{errorCode}}","错误信息:{{errorMessage}}","{{errorSceneLine}}","","{{checkedErrorsBlock}}","","{{bizTipsLine}}","","{{appMaxLine}}","","当前业务错误不会自动重试;请先按以上错误信息修正受影响分支的业务条件。","如需帮助,请联系技术支持并提供以上脱敏错误信息。"]}}},{"messageId":"error.service.unstable","owner":"catalog_owned","trigger":"error.service_unstable","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["MCP 服务暂时不稳定。","","当前动作已停止重试;由主流程记录受影响分支,并在不受其依赖的情况下继续其他分支。","本轮收口时将一次说明未恢复的动作、受影响分支和后续恢复方式。"]}}},{"messageId":"error.cli","owner":"catalog_owned","trigger":"error.cli_output","blocking":false,"allowedReplies":[],"variables":[{"name":"errorMessage","type":"customerErrorText","required":true},{"name":"bizTips","type":"customerErrorText","required":false},{"name":"checkedErrors","type":"customerErrorDetails","required":false},{"name":"bizTipsLine","type":"string","required":false,"derived":true,"values":["renderer"]},{"name":"checkedErrorsBlock","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-SENSITIVE-STATE"],"variants":{"DEFAULT":{"templateLines":["命令执行失败:{{errorMessage}}","{{bizTipsLine}}","{{checkedErrorsBlock}}"]}}},{"messageId":"integration.service.not_ready","owner":"catalog_owned","trigger":"integration.a2m.service_not_ready","blocking":false,"allowedReplies":[],"variables":[{"name":"recoveryAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-A2M-SUCCESS"],"variants":{"DEFAULT":{"templateLines":["AI 按量付费本地服务尚未达到自动联调前置条件。","","需要处理:{{recoveryAction}}","","该条件未满足前不会运行自动联调,也不会把服务标记为可用。"]}}},{"messageId":"integration.project_path.required","owner":"catalog_owned","trigger":"integration.project_path.unresolved","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["现有项目及文件保持不变。请在一条回复中说明新项目要放在哪里;可以说“在当前目录新建 pay-demo”、提供当前目录下的新子目录名,或提供电脑上的完整路径。若不想指定位置,可以说“新建项目”或“帮我新建默认项目”,我会在用户目录下选择安全的新目录并告知项目地址。路径解析和确认完成前不会创建或修改文件。"]}}},{"messageId":"integration.context.required","owner":"catalog_owned","trigger":"integration.context.unresolved","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"missingItems","type":"enumList","required":true,"values":["项目路径","技术栈"]}],"requiredPolicyIds":["P-PROJECT-PROTECT"],"variants":{"DEFAULT":{"templateLines":["为继续代码开发,请先确定:{{missingItems}}。","","- 要新建项目:可以说“在当前目录新建 pay-demo”,或提供一个新的文件夹位置;不想指定位置时,可以说“新建项目”或“帮我新建默认项目”。","- 要复用已有项目:请告诉我项目文件夹;如果不知道在哪,可以说“帮我在当前目录下找项目”;如果大概知道在哪,可以说“帮我在 server 下找项目”。我会先定位候选目录,再让你选择。","- “当前项目/当前目录”只有在当前目录本身就是可识别项目根时才会使用;否则不会扫描整个大目录。","- 技术栈:例如 Node.js + Express、Java + Spring Boot、Python + Flask、PHP + Laravel、C# + ASP.NET;不确定时可以说“请推荐默认技术栈”。","","项目和技术栈明确前,不会创建或修改文件。"]}}},{"messageId":"integration.project_candidates.select","owner":"catalog_owned","trigger":"integration.project_candidates.located","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[{"name":"searchBasePath","type":"existingPath","required":true},{"name":"candidateRows","type":"string","required":true}],"requiredPolicyIds":["P-PROJECT-PROTECT"],"variants":{"DEFAULT":{"templateLines":["我先在 `{{searchBasePath}}` 下做了轻量项目定位;这里只看项目标记文件,不扫描代码内容。","","{{candidateRows}}","","如果要复用已有项目,请回复候选序号或具体项目文件夹。","如果要新建项目,可以回复“在当前目录新建 pay-demo”,或直接回复“新建项目”使用用户目录下的默认安全目录。","","选定具体项目目录前,不会扫描整个大目录,也不会创建或修改文件。"]}}},{"messageId":"integration.local_acceptance.notice","owner":"catalog_owned","trigger":"integration.local_acceptance.enabled","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["当前使用本地生产参数验收模式:本轮可以暂不发起公网异步通知,但生产上线前必须恢复并验证 `notify_url`。这不是生产最终配置,也不能据此宣称生产就绪。"]}}},{"messageId":"key_tool.manual.guide","owner":"catalog_owned","trigger":"key_tool.download.not_automatic","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":["P-KEY-TOOL-DOWNLOAD"],"variants":{"DEFAULT":{"templateLines":["支付宝开放平台密钥工具可用于生成应用公私钥对;本次不会自动下载。如需我下载请直接说明,或访问官方地址手动下载:","","https://opendocs.alipay.com/isv/02kipk","","只向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。"]}}},{"messageId":"application.reuse.no_key","owner":"catalog_owned","trigger":"FLOW:REUSE_NO_KEY","blocking":false,"allowedReplies":[],"variables":[{"name":"appId","type":"singleLine","required":true}],"requiredPolicyIds":["P-KEY-PUBLIC-USER"],"variants":{"DEFAULT":{"templateLines":["应用 `{{appId}}` 当前为可复用的上线应用,但尚未确认 RSA2 应用公钥,应用分支仍未完成。","","接下来需要为该应用设置应用公钥;如果你已经准备好应用公钥,请直接提供。","","本次不会自动下载支付宝开放平台密钥工具。如需我下载请直接说明,或访问官方地址手动下载:https://opendocs.alipay.com/isv/02kipk","只向 Agent 提供【应用公钥】,应用私钥请自行妥善保管。","","如果不想继续复用这个应用,请说明要重新选择或新建应用。"]}}},{"messageId":"application.candidates.facts","owner":"catalog_owned","trigger":"application.candidates.queried","blocking":false,"allowedReplies":[],"variables":[{"name":"applicationType","type":"enum","required":true,"values":["WEBAPP","MOBILEAPP"]},{"name":"applicationCandidates","type":"applicationCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"EMPTY":{"templateLines":["📋 暂无 {{applicationType}} 应用。"]},"PENDING_ONLY":{"templateLines":["📋 当前已有以下尚未上线的 {{applicationType}} 应用:","","{{candidateTable}}","","以上应用当前不可复用。"]},"ONLINE_WITH_OPTIONAL_PENDING":{"templateLines":["📋 发现您已有以下上线 {{applicationType}} 应用:","","{{candidateTable}}"]}}},{"messageId":"application.candidate.invalid","owner":"catalog_owned","trigger":"application.candidates.selection_invalid","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["上一次回复未匹配当前应用候选或支持的选择格式。已重新展示当前候选,请按下方方式重新选择。","序号、非上线、历史或候选外 `appId` 均不会触发应用操作。"]}}},{"messageId":"application.candidate.select","owner":"catalog_owned","trigger":"application.candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"ONLINE_WEB_OR_NEW":{"templateLines":["请选择应用分支下一步:","","- 回复上方事实表中状态为“已上线”的完整 `appId`:复用对应应用。","- 新建应用:在同一条回复中提供 `新建` 和应用公钥,材料完整后将创建应用、设置公钥并进入公钥确认。","","新建回复示例(请替换为实际内容):","```text","新建","应用公钥:<你自行生成的完整应用公钥>","```","","支付宝开放平台密钥工具可用于生成应用公私钥对;本分支不会自动下载。如需我下载请直接说明,或访问:https://opendocs.alipay.com/isv/02kipk","只向 Agent 提供【应用公钥】,请勿提供应用私钥。","","候选、状态或目标变化后旧回复自动失效;不接受序号、历史候选或其他 `appId`。"]},"PENDING_WEB_OR_NEW":{"templateLines":["当前同类型应用均未上线,不能复用。","","- 新建应用:在同一条回复中提供 `新建` 和应用公钥,材料完整后将创建应用、设置公钥并进入公钥确认。","- 回复 `暂不新建`:本轮应用分支保持待办。","","新建回复示例(请替换为实际内容):","```text","新建","应用公钥:<你自行生成的完整应用公钥>","```","","支付宝开放平台密钥工具可用于生成应用公私钥对;本分支不会自动下载。如需我下载请直接说明,或访问:https://opendocs.alipay.com/isv/02kipk","只向 Agent 提供【应用公钥】,请勿提供应用私钥。"]},"ONLINE_MOBILE_OR_NEW":{"templateLines":["请选择应用分支下一步:","","- 回复上方事实表中状态为“已上线”的完整 `appId`:复用对应应用。","- 新建应用:在同一条回复中提供 `新建`、`IOS|ANDROID|ALL`、对应客户端资料和应用公钥。","","新建回复示例(请替换为实际内容):","```text","新建 ANDROID","Android 应用包名(appPackage):com.example.app","Android 应用签名摘要(appSign):<你的 Android 应用签名摘要>","应用公钥:<你自行生成的完整应用公钥>","```","","`IOS` 需 bundleId;`ANDROID` 需 appPackage、appSign;`ALL` 需三项客户端资料。","支付宝开放平台密钥工具可用于生成应用公私钥对;本分支不会自动下载。如需我下载请直接说明,或访问:https://opendocs.alipay.com/isv/02kipk","只向 Agent 提供【应用公钥】,请勿提供应用私钥。","","候选、状态或目标变化后旧回复自动失效;不接受序号、历史候选或其他 `appId`。"]},"PENDING_MOBILE_OR_NEW":{"templateLines":["当前同类型应用均未上线,不能复用。","","- 新建应用:在同一条回复中提供 `新建`、`IOS|ANDROID|ALL`、对应客户端资料和应用公钥。","- 回复 `暂不新建`:本轮应用分支保持待办。","","新建回复示例(请替换为实际内容):","```text","新建 ANDROID","Android 应用包名(appPackage):com.example.app","Android 应用签名摘要(appSign):<你的 Android 应用签名摘要>","应用公钥:<你自行生成的完整应用公钥>","```","","`IOS` 需 bundleId;`ANDROID` 需 appPackage、appSign;`ALL` 需三项客户端资料。","支付宝开放平台密钥工具可用于生成应用公私钥对;本分支不会自动下载。如需我下载请直接说明,或访问:https://opendocs.alipay.com/isv/02kipk","只向 Agent 提供【应用公钥】,请勿提供应用私钥。"]}}},{"messageId":"application.operation.result","owner":"catalog_owned","trigger":"application.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"appId","type":"singleLine","required":true},{"name":"actualStatus","type":"singleLine","required":true},{"name":"nextAction","type":"singleLine","required":false},{"name":"manualConfigurationNextAction","type":"string","required":false,"derived":true,"values":["前往支付宝 AI 付站点,进入一站式接入 → 密钥配置,按当前 appId 获取对应的支付宝公钥,并手动配置到项目:https://aipay.alipay.com/?from=alipay-aipay-skill"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["应用 `{{appId}}` 的实际状态:{{actualStatus}}。","","下一步:{{nextAction}}","","待审核、待设置公钥或待人工配置时不会表述为应用发布完成。"]},"ALIPAY_PUBLIC_KEY_MANUAL_CONFIGURATION":{"templateLines":["应用 `{{appId}}` 的实际状态:需人工配置。","","下一步:{{manualConfigurationNextAction}}","","待人工配置时不会表述为应用发布完成。"]}}},{"messageId":"application.harmony.manual_create","owner":"catalog_owned","trigger":"application.harmony.manual_create","blocking":true,"allowedReplySet":"affirmative","inputHintType":"complete","variables":[],"requiredPolicyIds":["P-MCP-CONTRACT-FROZEN"],"variants":{"DEFAULT":{"templateLines":["当前 Skill 不支持创建 HarmonyOS 移动应用。","","请前往支付宝开放平台,进入“控制台” → “创建移动应用”,完成平台要求的创建、配置和审核:https://open.alipay.com/","","完成后将重新查询移动应用列表。"]}}},{"messageId":"service.operation.result","owner":"catalog_owned","trigger":"service.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceId","type":"singleLine","required":true},{"name":"actualResult","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["服务市场实际结果:{{actualResult}}。","已确认的 `serviceId`:`{{serviceId}}`。","","查看服务状态和服务详情:请前往支付宝 AI 付站点,登录后进入控制台 → 服务管理。","https://aipay.alipay.com/?from=alipay-aipay-skill","","该结果只代表服务分支,不会覆盖签约或应用分支的实际状态。"]}}},{"messageId":"signing.operation.result","owner":"catalog_owned","trigger":"signing.operation.completed","blocking":false,"allowedReplies":[],"variables":[{"name":"actualStatus","type":"singleLine","required":true},{"name":"feeDisplay","type":"singleLine","required":false},{"name":"nextAction","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"WITHOUT_FEE":{"templateLines":["产品当前签约状态:{{actualStatus}}。","","下一步:{{nextAction}}"]},"WITH_FEE":{"templateLines":["产品当前签约状态:{{actualStatus}}。","费率:{{feeDisplay}}","","下一步:{{nextAction}}"]}}},{"messageId":"service.candidates.facts","owner":"catalog_owned","trigger":"service.candidates.queried","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceCandidates","type":"serviceCandidates","required":true},{"name":"candidateTable","type":"string","required":false,"derived":true,"values":["renderer"]}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"EMPTY":{"templateLines":["📋 暂无已有服务。"]},"DEFAULT":{"templateLines":["📋 发现您已有以下服务:","","{{candidateTable}}"]}}},{"messageId":"service.candidate.invalid","owner":"catalog_owned","trigger":"service.candidates.selection_invalid","blocking":false,"allowedReplies":[],"variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["上一次回复没有匹配到有效的服务操作。","仅回复序号,或提供不在当前事实表中的 `serviceId`,均不会触发服务操作。"]}}},{"messageId":"service.candidate.select","owner":"catalog_owned","trigger":"service.candidates.selection_required","blocking":true,"allowedReplies":[],"replyMode":"freeform","variables":[],"requiredPolicyIds":[],"variants":{"DEFAULT":{"templateLines":["请选择下一步:","","- 回复上方事实表中的完整 `serviceId`:复用对应服务。","- 新建服务:回复 `新建`,并在同一条回复中提供服务名称、服务描述、服务地址、服务单价、请求示例 JSON。","- 回复 `修改:<serviceId>`:修改对应服务。","","- 如果只回复 `新建` 或材料不完整,我会再提示补充缺失项。","","新建回复示例(请替换为实际内容):","```text","新建","服务名称:天气查询","服务描述:按城市查询天气","服务地址:以 http:// 或 https:// 开头的实际服务地址","服务单价:0.08 元/次","请求示例 JSON:{\"city\":\"杭州\"}","```","","如需核对服务状态或服务详情,可前往支付宝 AI 付站点,登录后进入控制台 → 服务管理查看。","https://aipay.alipay.com/?from=alipay-aipay-skill"]}}},{"messageId":"service.id.missing","owner":"catalog_owned","trigger":"service.save.id_missing","blocking":false,"allowedReplies":[],"variables":[{"name":"serviceName","type":"singleLine","required":true}],"requiredPolicyIds":["P-PARTIAL-RESULT"],"variants":{"DEFAULT":{"templateLines":["服务 `{{serviceName}}` 的创建或修改调用已返回成功,但未解析到 `serviceId`,因此服务分支尚未完成。接下来会重新查询完整服务列表,并使用本次实际提交资料与列表可见字段做唯一匹配;没有唯一结果时保持未知。在取得实际 `serviceId` 前不会宣称 AI 按量付费产品开通完成。","","如需自行核对服务状态或服务详情,可前往支付宝 AI 付站点,登录后进入控制台 → 服务管理查看。","https://aipay.alipay.com/?from=alipay-aipay-skill"]}}}]}
@@ -1 +1 @@
1
- {"schemaVersion":1,"rules":[{"policyId":"P-MCP-CONTRACT-FROZEN","scope":"all","severity":"critical","text":"只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。"},{"policyId":"P-AUTH-BEFORE-ONBOARDING","scope":"onboarding","severity":"critical","text":"登录、scope 和 MCC 全部校验通过前,禁止执行任何 onboarding 查询或写操作。"},{"policyId":"P-WRITE-CONFIRM","scope":"onboarding.write","severity":"critical","text":"签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用创建由用户针对当前应用候选列表明确选择新建来确认,候选重查未变化且条件字段齐备时不再追加确认;用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;新建应用的公钥校验成功后直接提交应用审核,不增加额外确认点。"},{"policyId":"P-WRITE-UNKNOWN","scope":"onboarding.write","severity":"critical","text":"非幂等写操作结果不明时先用现有只读能力核验;无法确认时进入 UNKNOWN,禁止盲目重试。"},{"policyId":"P-PARTIAL-RESULT","scope":"onboarding","severity":"critical","text":"签约、服务和应用分支独立记录结果,不回滚已成功动作,不用整体失败或整体成功覆盖部分结果。"},{"policyId":"P-MATERIAL-CATEGORY","scope":"onboarding.materials","severity":"required","text":"每轮只展示一个材料类别,同类一次收齐;提前提供的后续材料直接接收并校验,之后不重复索取。"},{"policyId":"P-KEY-NO-PRIVATE","scope":"onboarding.application","severity":"critical","text":"不得请求、读取、处理、保存或输出生产应用私钥;本轮不提供本地命令生成密钥能力。"},{"policyId":"P-KEY-PUBLIC-USER","scope":"onboarding.application","severity":"critical","text":"应用公钥只能由用户自行生成并明确提供;缺少公钥时禁止调用 createKeyConfirmPage,不补全、不改写、不加 PEM 头尾。"},{"policyId":"P-AUTH-URL","scope":"onboarding.authorization","severity":"critical","text":"授权链接只能由 auth.sh 在固定产品/MCC 上下文校验通过后构造;只允许 https://aipay.alipay.com/cli-auth、deviceCode/productCode/mccCode 和可选 platform,禁止其他域名、路径、参数、重复参数、fragment 或 verification_url。"},{"policyId":"P-KEY-URL","scope":"onboarding.application","severity":"critical","text":"公钥确认只展示 createKeyConfirmPage 返回的 confirmPageUrl 裸 URL;禁止展示二维码链接和 alipays:// 深链。"},{"policyId":"P-URL-AUTO-OPEN","scope":"official-url","severity":"critical","text":"授权页和公钥确认页在 URL 完整校验通过后默认调用受控 opener;失败、无 GUI 或宿主要求权限时保留同一裸 URL 和复制访问兜底。"},{"policyId":"P-KEY-TOOL-DOWNLOAD","scope":"onboarding.application","severity":"critical","text":"缺少应用公钥时按当前操作系统自动下载官方密钥工具并输出实际安装包路径、安装引导和官方文档兜底;只下载,不安装、不启动、不生成密钥,失败或系统不支持时只输出官方文档手动下载引导。"},{"policyId":"P-A2M-SANDBOX","scope":"integration.aipay","severity":"critical","text":"AI 按量付费沙箱 serviceId 固定为 api_mock_service_id,SDK 使用沙箱网关;生产网关和真实 serviceId 只用于正式配置。"},{"policyId":"P-A2M-SUCCESS","scope":"integration.aipay","severity":"critical","text":"自动联调只有在 HTTP 200、非空可归属资源、无明确业务失败且适用 Payment-Validation 有效时通过。"},{"policyId":"P-SANDBOX-CREDENTIAL-EXCEPTION","scope":"integration.sandbox","severity":"critical","text":"Unix/macOS/Linux 只允许快速沙箱实际返回且已校验的买家登录/支付密码在沙箱摘要和付款体验中经 stdin 临时渲染。Windows 手工沙箱允许用户在 sandbox.windows.manual_setup 后提供当前沙箱应用的 APPID、支付宝公钥、应用公钥、与当前开发语言匹配的应用私钥和沙箱账号信息;Agent 只能将其用于已确认目标项目的受保护配置,不得在回复、摘要、普通日志或业务状态中复述或另存原文。两类例外均不得扩展到生产环境账号、应用私钥或密码。"},{"policyId":"P-SENSITIVE-STATE","scope":"all","severity":"critical","text":"用户可以为当前应用设钥明确提供应用公钥,但该输入只用于本次 app.sh key/verify-key/verify-key-and-audit 调用;Agent 回复、对话摘要、普通日志、跨会话状态和宽权限临时文件禁止复述或保存公钥原文。除 P-SANDBOX-CREDENTIAL-EXCEPTION 明确允许的 Windows 手工沙箱当前资料输入外,私钥、token、Payment-Proof、签名串、完整支付表单和未脱敏 MCP 响应同样禁止进入这些位置。临时 URL 只有在 flow 明确登记、已由脚本或 renderer 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。"},{"policyId":"P-PROJECT-PROTECT","scope":"integration","severity":"critical","text":"不得清空、覆盖或删除用户既有项目;只在已确认目标路径和范围内做必要修改。"},{"policyId":"P-CUSTOMER-OUTPUT-EXCLUSIVE","scope":"all","severity":"critical","text":"flow 指定 renderer 或托管脚本时,其 stdout 是该动作唯一对客正文;工具输出记录、折叠面板或日志不等于已对客发送,Agent 必须把 stdout 原文作为当前回复正文发给用户。禁止在前后添加执行说明、消息 ID、控制标记、摘要、转述或近似话术。阻塞消息发出后立即停止本轮并等待用户。"},{"policyId":"P-ONBOARDING-CONTROL-CHANNEL","scope":"onboarding","severity":"critical","text":"Onboarding 登记脚本的内部事实行统一以 ALIPAY_AIPAY_INTERNAL: 开头;即使宿主合并 stdout/stderr,也必须整行剔除后再判断对客正文。内部行严禁对客;成功且剔除内部行后正文为空时直接转移,不补写话术。"},{"policyId":"P-SCAN-PAGE-DELIVERY-BARRIER","scope":"onboarding","severity":"critical","text":"所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障,当前包括 `auth.page` 和 `application.key.page`。脚本产生页面 stdout 后,Agent 必须先把剔除内部事实后的 stdout 作为独立对客消息送达,再执行对应 opener 和后续有限轮询;不得把后续 `auth.pending`、`application.key.pending`、`process.partial_result` 或其他 stdout 合并在同一条对客回复中。该屏障不等待用户确认,不新增确认或其他用户操作。"},{"policyId":"P-DETERMINISTIC-HANDOFF","scope":"all","severity":"critical","text":"flow 已登记脚本或 renderer 时只执行动作发生位置的固定命令;退出码和登记终态标记满足后立即按 flow 转移,禁止追加 jq、cat、grep、curl 或临时脚本重复解析、复核或解释同一结果。失败只走登记恢复分支;项目代码实现和运行验证除外,但不得把沙箱配置或其他敏感文件打印到工具输出。"}],"officialUrls":{"aipaySite":"https://aipay.alipay.com/","aipaySkillSite":"https://aipay.alipay.com/?from=alipay-aipay-skill","merchantPlatform":"https://b.alipay.com/page/portal/home","openPlatform":"https://open.alipay.com/","openPlatformHome":"https://open.alipay.com","technicalSupport":"https://opensupport.alipay.com/support/intelligent-services?form=payskill","keyToolManual":"https://opendocs.alipay.com/isv/02kipk","keyToolMac":"https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=mac&channelType=WEB","keyToolWindows":"https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=win&channelType=WEB","androidSandboxAlipay":"https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","sandboxToolFallback":"https://open.alipay.com/develop/sandbox/tool","sandboxGateway":"https://openapi-sandbox.dl.alipaydev.com/gateway.do","productionGateway":"https://openapi.alipay.com/gateway.do","openPlatformPaySkill":"https://open.alipay.com?form=payskill","traditionalPaymentSkill":"https://github.com/alipay/ai/tree/main/skills"},"authorizationProducts":[{"productName":"AI 按量付费","salesCode":"I1080300001000160457","scope":"app:all,machine_pay:write,agmnt:write"},{"productName":"AI 网页应用收款","salesCode":"I1080300001000041203","scope":"app:all,fast_instant_trade_pay:write"},{"productName":"AI 移动应用收款","salesCode":"I1080300001000041313","scope":"app:all,auth_alipay_apppay:write"}],"temporaryUrlAllowlist":{"authorization":{"host":"aipay.alipay.com","path":"/cli-auth","requiredQueryParams":["deviceCode","productCode","mccCode"],"optionalQueryParams":["platform"]},"publicKeyConfirmation":{"host":"aipay.alipay.com","path":"/public-key-confirm","requiredQueryParams":["keyConfirmToken"],"optionalQueryParams":[]},"windowsOnboardingRedirect":{"host":"aipay.alipay.com","path":"/","requiredQueryParams":["from","reason","platform_id"],"optionalQueryParams":[]}}}
1
+ {"schemaVersion":1,"rules":[{"policyId":"P-MCP-CONTRACT-FROZEN","scope":"all","severity":"critical","text":"只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。"},{"policyId":"P-AUTH-BEFORE-ONBOARDING","scope":"onboarding","severity":"critical","text":"登录、scope 和 MCC 全部校验通过前,禁止执行任何 onboarding 查询或写操作。"},{"policyId":"P-WRITE-CONFIRM","scope":"onboarding.write","severity":"critical","text":"签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用空候选时用户提交完整新建材料,或非空候选时明确新建,均构成创建确认;候选重查未变化且材料齐备时不再追加确认。用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;公钥校验成功后直接提交新建应用审核,不增加额外确认点。"},{"policyId":"P-WRITE-UNKNOWN","scope":"onboarding.write","severity":"critical","text":"非幂等写操作结果不明时先用现有只读能力核验;无法确认时进入 UNKNOWN,禁止盲目重试。"},{"policyId":"P-PARTIAL-RESULT","scope":"onboarding","severity":"critical","text":"签约、服务和应用分支独立记录结果,不回滚已成功动作,不用整体失败或整体成功覆盖部分结果。"},{"policyId":"P-MATERIAL-CATEGORY","scope":"onboarding.materials","severity":"required","text":"每轮只展示一个材料类别,同类一次收齐;提前提供的后续材料直接接收并校验,之后不重复索取。"},{"policyId":"P-KEY-NO-PRIVATE","scope":"onboarding.application","severity":"critical","text":"不得请求、读取、处理、保存或输出生产应用私钥;本轮不提供本地命令生成密钥能力。"},{"policyId":"P-KEY-PUBLIC-USER","scope":"onboarding.application","severity":"critical","text":"应用公钥只能由用户自行生成并明确提供;缺少公钥时禁止调用 createKeyConfirmPage,不补全、不改写、不加 PEM 头尾。"},{"policyId":"P-AUTH-URL","scope":"onboarding.authorization","severity":"critical","text":"授权链接只能由 auth.sh 在固定产品/MCC 上下文校验通过后构造;只允许 https://aipay.alipay.com/cli-auth、deviceCode/productCode/mccCode 和可选 platform,禁止其他域名、路径、参数、重复参数、fragment 或 verification_url。"},{"policyId":"P-KEY-URL","scope":"onboarding.application","severity":"critical","text":"公钥确认只展示 createKeyConfirmPage 返回的 confirmPageUrl 裸 URL;禁止展示二维码链接和 alipays:// 深链。"},{"policyId":"P-URL-AUTO-OPEN","scope":"official-url","severity":"critical","text":"授权页和公钥确认页在 URL 完整校验通过后默认调用受控 opener;失败、无 GUI 或宿主要求权限时保留同一裸 URL 和复制访问兜底。"},{"policyId":"P-KEY-TOOL-DOWNLOAD","scope":"onboarding.application","severity":"critical","text":"应用候选为空且当前 Agent 会话尚无用户公钥时,按当前系统自动下载官方密钥工具并展示实际路径、安装引导和官方链接;候选非空时只提示,不自动下载,用户明确要求时才下载。下载均只获取安装包,不安装、不启动、不生成密钥;失败或系统不支持时展示官方手动下载引导。"},{"policyId":"P-A2M-SANDBOX","scope":"integration.aipay","severity":"critical","text":"AI 按量付费沙箱 serviceId 固定为 api_mock_service_id,SDK 使用沙箱网关;生产网关和真实 serviceId 只用于正式配置。"},{"policyId":"P-A2M-SUCCESS","scope":"integration.aipay","severity":"critical","text":"自动联调只有在 HTTP 200、非空可归属资源、无明确业务失败且适用 Payment-Validation 有效时通过。"},{"policyId":"P-SANDBOX-CREDENTIAL-EXCEPTION","scope":"integration.sandbox","severity":"critical","text":"Unix/macOS/Linux 只允许快速沙箱实际返回且已校验的买家登录/支付密码在沙箱摘要和付款体验中经 stdin 临时渲染。Windows 手工沙箱允许用户在 sandbox.windows.manual_setup 后提供当前沙箱应用的 APPID、支付宝公钥、应用公钥、与当前开发语言匹配的应用私钥和沙箱账号信息;Agent 只能将其用于已确认目标项目的受保护配置,不得在回复、摘要、普通日志或业务状态中复述或另存原文。两类例外均不得扩展到生产环境账号、应用私钥或密码。"},{"policyId":"P-SENSITIVE-STATE","scope":"all","severity":"critical","text":"用户可以为当前应用设钥明确提供应用公钥,但该输入只用于本次 app.sh key/verify-key/verify-key-and-audit 调用;Agent 回复、对话摘要、普通日志、跨会话状态和宽权限临时文件禁止复述或保存公钥原文。除 P-SANDBOX-CREDENTIAL-EXCEPTION 明确允许的 Windows 手工沙箱当前资料输入外,私钥、token、Payment-Proof、签名串、完整支付表单和未脱敏 MCP 响应同样禁止进入这些位置。临时 URL 只有在 flow 明确登记、已由脚本或 renderer 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。"},{"policyId":"P-PROJECT-PROTECT","scope":"integration","severity":"critical","text":"不得清空、覆盖或删除用户既有项目;只在已确认目标路径和范围内做必要修改。"},{"policyId":"P-CUSTOMER-OUTPUT-EXCLUSIVE","scope":"all","severity":"critical","text":"flow 指定 renderer 或托管脚本时,其 stdout 是该动作唯一对客正文;工具输出记录、折叠面板或日志不等于已对客发送,Agent 必须把 stdout 原文作为当前回复正文发给用户。禁止在前后添加执行说明、消息 ID、控制标记、摘要、转述或近似话术。阻塞消息发出后立即停止本轮并等待用户。"},{"policyId":"P-ONBOARDING-CONTROL-CHANNEL","scope":"onboarding","severity":"critical","text":"Onboarding 登记脚本的内部事实行统一以 ALIPAY_AIPAY_INTERNAL: 开头;即使宿主合并 stdout/stderr,也必须整行剔除后再判断对客正文。内部行严禁对客;成功且剔除内部行后正文为空时直接转移,不补写话术。"},{"policyId":"P-SCAN-PAGE-DELIVERY-BARRIER","scope":"onboarding","severity":"critical","text":"所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障,当前包括 `auth.page` 和 `application.key.page`。脚本产生页面 stdout 后,Agent 必须先把剔除内部事实后的 stdout 作为独立对客消息送达,再执行对应 opener 和后续有限轮询;不得把后续 `auth.pending`、`application.key.pending`、`process.partial_result` 或其他 stdout 合并在同一条对客回复中。该屏障不等待用户确认,不新增确认或其他用户操作。"},{"policyId":"P-DETERMINISTIC-HANDOFF","scope":"all","severity":"critical","text":"flow 已登记脚本或 renderer 时只执行动作发生位置的固定命令;退出码和登记终态标记满足后立即按 flow 转移,禁止追加 jq、cat、grep、curl 或临时脚本重复解析、复核或解释同一结果。失败只走登记恢复分支;项目代码实现和运行验证除外,但不得把沙箱配置或其他敏感文件打印到工具输出。"}],"officialUrls":{"aipaySite":"https://aipay.alipay.com/","aipaySkillSite":"https://aipay.alipay.com/?from=alipay-aipay-skill","merchantPlatform":"https://b.alipay.com/page/portal/home","openPlatform":"https://open.alipay.com/","openPlatformHome":"https://open.alipay.com","technicalSupport":"https://opensupport.alipay.com/support/intelligent-services?form=payskill","keyToolManual":"https://opendocs.alipay.com/isv/02kipk","keyToolMac":"https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=mac&channelType=WEB","keyToolWindows":"https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=win&channelType=WEB","androidSandboxAlipay":"https://mdn.alipayobjects.com/sandboxsys/afts/img/_itHRrdOD9oAAAAAAAAAAAAADgSLAQBr/original","sandboxToolFallback":"https://open.alipay.com/develop/sandbox/tool","sandboxGateway":"https://openapi-sandbox.dl.alipaydev.com/gateway.do","productionGateway":"https://openapi.alipay.com/gateway.do","openPlatformPaySkill":"https://open.alipay.com?form=payskill","traditionalPaymentSkill":"https://github.com/alipay/ai/tree/main/skills"},"authorizationProducts":[{"productName":"AI 按量付费","salesCode":"I1080300001000160457","scope":"app:all,machine_pay:write,agmnt:write"},{"productName":"AI 网页应用收款","salesCode":"I1080300001000041203","scope":"app:all,fast_instant_trade_pay:write"},{"productName":"AI 移动应用收款","salesCode":"I1080300001000041313","scope":"app:all,auth_alipay_apppay:write"}],"temporaryUrlAllowlist":{"authorization":{"host":"aipay.alipay.com","path":"/cli-auth","requiredQueryParams":["deviceCode","productCode","mccCode"],"optionalQueryParams":["platform"]},"publicKeyConfirmation":{"host":"aipay.alipay.com","path":"/public-key-confirm","requiredQueryParams":["keyConfirmToken"],"optionalQueryParams":[]},"windowsOnboardingRedirect":{"host":"aipay.alipay.com","path":"/","requiredQueryParams":["from","reason","platform_id"],"optionalQueryParams":[]}}}
@@ -51,13 +51,14 @@ const categoryNames = {
51
51
  const materialFieldsByCategory = Object.freeze({
52
52
  signing: ['APP名称', '首页截图', '商品页截图', '支付页截图'],
53
53
  service: ['服务名称', '服务描述', '服务地址', '服务单价', '请求示例JSON'],
54
- application: ['iOS Bundle ID(bundleId)', 'Android 应用包名(appPackage)', 'Android 应用签名摘要(appSign)', '应用公钥']
54
+ application: ['应用平台和对应资料', 'iOS Bundle ID(bundleId)', 'Android 应用包名(appPackage)', 'Android 应用签名摘要(appSign)', '应用公钥']
55
55
  });
56
56
 
57
57
  const materialStates = {
58
58
  INITIAL: { variant: 'INITIAL', currentStatus: '待补充' },
59
59
  PARTIAL: { variant: 'PARTIAL', currentStatus: '部分已提供,待补充' },
60
60
  INVALID: { variant: 'INVALID', currentStatus: '校验失败,需更正' },
61
+ APP_WEB_INITIAL: { variant: 'APP_WEB_INITIAL', currentStatus: '待补充' },
61
62
  APP_MOBILE_INITIAL: { variant: 'APP_MOBILE_INITIAL', currentStatus: '待补充' }
62
63
  };
63
64
 
@@ -526,34 +527,44 @@ async function runMaterialCollect(args) {
526
527
 
527
528
  const state = required(args, 'state').toUpperCase().replace(/-/g, '_');
528
529
  const stateRule = materialStates[state];
529
- if (!stateRule) throw new Error('state 非法,仅支持 INITIAL、PARTIAL、INVALID、APP_MOBILE_INITIAL');
530
+ if (!stateRule) throw new Error('state 非法,仅支持 INITIAL、PARTIAL、INVALID、APP_WEB_INITIAL、APP_MOBILE_INITIAL');
530
531
 
531
- if (state === 'APP_MOBILE_INITIAL') {
532
- if (category !== 'application') throw new Error('APP_MOBILE_INITIAL 只适用于 application 类别');
532
+ if (state === 'APP_WEB_INITIAL' || state === 'APP_MOBILE_INITIAL') {
533
+ if (category !== 'application') throw new Error(`${state} 只适用于 application 类别`);
534
+ if (state === 'APP_WEB_INITIAL' && productType === 'apppay') {
535
+ throw new Error('APP_WEB_INITIAL 只适用于 aipay、webpay');
536
+ }
537
+ if (state === 'APP_MOBILE_INITIAL' && productType !== 'apppay') {
538
+ throw new Error('APP_MOBILE_INITIAL 只适用于 apppay');
539
+ }
533
540
  return renderMessage('materials.category.collect', stateRule.variant, {
534
541
  categoryName: '应用资料',
535
542
  currentStatus: stateRule.currentStatus,
536
- missingFields: '应用平台和对应资料'
543
+ missingFields: state === 'APP_WEB_INITIAL' ? '应用公钥' : '应用平台和对应资料、应用公钥'
537
544
  }, { productType });
538
545
  }
539
546
 
540
547
  const input = optional(args, 'missing-fields') !== undefined
541
548
  ? { missingFields: args['missing-fields'] }
542
549
  : await readStdin();
543
- return renderMessage('materials.category.collect', stateRule.variant, {
550
+ const variant = state === 'INITIAL' && category === 'service'
551
+ ? 'SERVICE_INITIAL'
552
+ : stateRule.variant;
553
+ const missingFields = normalizeMissingFields(category, input.missingFields);
554
+ if (category === 'application' && productType !== 'apppay') {
555
+ const incompatibleFields = missingFields.split('、').filter((field) => field !== '应用公钥');
556
+ if (incompatibleFields.length > 0) {
557
+ throw new Error(`${productType} 的应用资料只允许应用公钥`);
558
+ }
559
+ }
560
+ return renderMessage('materials.category.collect', variant, {
544
561
  categoryName,
545
562
  currentStatus: stateRule.currentStatus,
546
- missingFields: normalizeMissingFields(category, input.missingFields)
563
+ missingFields
547
564
  }, { productType });
548
565
  }
549
566
 
550
- async function runApplicationCandidates(args) {
551
- const applicationType = required(args, 'application-type');
552
- if (!['WEBAPP', 'MOBILEAPP'].includes(applicationType)) throw new Error('application-type 非法,仅支持 WEBAPP、MOBILEAPP');
553
- const applicationCandidates = optional(args, 'candidates-json') !== undefined
554
- ? parseJsonArg(args, 'candidates-json', '应用候选输入')
555
- : await readStdin();
556
- if (!Array.isArray(applicationCandidates)) throw new Error('应用候选输入必须是 JSON 数组');
567
+ function renderApplicationCandidates(applicationType, applicationCandidates, selectionState = 'initial') {
557
568
  const onlineCount = applicationCandidates.filter((candidate) => candidate?.status === 'ON_LINE').length;
558
569
  const variant = applicationCandidates.length === 0
559
570
  ? 'EMPTY'
@@ -562,20 +573,46 @@ async function runApplicationCandidates(args) {
562
573
  : 'ONLINE_WITH_OPTIONAL_PENDING';
563
574
  const facts = renderMessage('application.candidates.facts', variant, { applicationType, applicationCandidates });
564
575
  if (applicationCandidates.length === 0) return facts;
565
- const selectionVariant = onlineCount === 0 ? 'PENDING_OR_NEW' : 'ONLINE_OR_NEW';
576
+ const selectionVariant = `${onlineCount === 0 ? 'PENDING' : 'ONLINE'}_${applicationType === 'WEBAPP' ? 'WEB' : 'MOBILE'}_OR_NEW`;
566
577
  const selection = renderMessage('application.candidate.select', selectionVariant, {});
567
- return `${facts}\n\n${selection}`;
578
+ if (selectionState === 'initial') return `${facts}\n\n${selection}`;
579
+ return `${facts}\n\n${renderMessage('application.candidate.invalid', 'DEFAULT', {})}\n\n${selection}`;
580
+ }
581
+
582
+ async function runApplicationCandidates(args) {
583
+ const applicationType = required(args, 'application-type');
584
+ if (!['WEBAPP', 'MOBILEAPP'].includes(applicationType)) throw new Error('application-type 非法,仅支持 WEBAPP、MOBILEAPP');
585
+ const selectionState = optional(args, 'selection-state') ?? 'initial';
586
+ if (!['initial', 'invalid'].includes(selectionState)) throw new Error('selection-state 非法,仅支持 initial、invalid');
587
+ const applicationCandidates = optional(args, 'candidates-json') !== undefined
588
+ ? parseJsonArg(args, 'candidates-json', '应用候选输入')
589
+ : await readStdin();
590
+ if (!Array.isArray(applicationCandidates)) throw new Error('应用候选输入必须是 JSON 数组');
591
+ if (selectionState === 'invalid' && applicationCandidates.length === 0) {
592
+ throw new Error('应用候选为空时不得使用 invalid 选择状态');
593
+ }
594
+ return renderApplicationCandidates(applicationType, applicationCandidates, selectionState);
568
595
  }
569
596
 
570
597
  async function runServiceCandidates(args) {
598
+ const selectionState = optional(args, 'selection-state') ?? 'initial';
599
+ if (!['initial', 'invalid'].includes(selectionState)) {
600
+ throw new Error('selection-state 非法,仅支持 initial、invalid');
601
+ }
571
602
  const serviceCandidates = optional(args, 'candidates-json') !== undefined
572
603
  ? parseJsonArg(args, 'candidates-json', '服务候选输入')
573
604
  : await readStdin();
574
605
  if (!Array.isArray(serviceCandidates)) throw new Error('服务候选输入必须是 JSON 数组');
606
+ if (selectionState === 'invalid' && serviceCandidates.length === 0) {
607
+ throw new Error('服务候选为空时不得使用 invalid 选择状态');
608
+ }
575
609
  const variant = serviceCandidates.length === 0 ? 'EMPTY' : 'DEFAULT';
576
610
  const facts = renderMessage('service.candidates.facts', variant, { serviceCandidates });
577
611
  if (serviceCandidates.length === 0) return facts;
578
- return `${facts}\n\n${renderMessage('service.candidate.select', 'DEFAULT', {})}`;
612
+ const selection = renderMessage('service.candidate.select', 'DEFAULT', {});
613
+ if (selectionState === 'initial') return `${facts}\n\n${selection}`;
614
+ const invalid = renderMessage('service.candidate.invalid', 'DEFAULT', {});
615
+ return `${facts}\n\n${invalid}\n\n${selection}`;
579
616
  }
580
617
 
581
618
  function canonicalCandidates(candidates) {
@@ -597,18 +634,14 @@ async function runApplicationRecheck(args) {
597
634
  }
598
635
  : await readStdin();
599
636
  if (!input || typeof input !== 'object' || Array.isArray(input)) throw new Error('应用候选重查输入必须是 JSON 对象');
600
- if (canonicalCandidates(input.previousCandidates) === canonicalCandidates(input.currentCandidates)) return '';
601
- const applicationCandidates = input.currentCandidates;
602
- const onlineCount = applicationCandidates.filter((candidate) => candidate?.status === 'ON_LINE').length;
603
- const variant = applicationCandidates.length === 0
604
- ? 'EMPTY'
605
- : onlineCount === 0
606
- ? 'PENDING_ONLY'
607
- : 'ONLINE_WITH_OPTIONAL_PENDING';
608
- const facts = renderMessage('application.candidates.facts', variant, { applicationType, applicationCandidates });
609
- if (applicationCandidates.length === 0) return facts;
610
- const selectionVariant = onlineCount === 0 ? 'PENDING_OR_NEW' : 'ONLINE_OR_NEW';
611
- return `${facts}\n\n${renderMessage('application.candidate.select', selectionVariant, {})}`;
637
+ if (canonicalCandidates(input.previousCandidates) === canonicalCandidates(input.currentCandidates)) {
638
+ process.stderr.write(`${internalPrefix}APPLICATION_RECHECK_RESULT=UNCHANGED\n`);
639
+ return '';
640
+ }
641
+ const output = renderApplicationCandidates(applicationType, input.currentCandidates);
642
+ const result = input.currentCandidates.length === 0 ? 'CHANGED_EMPTY' : 'CHANGED_NONEMPTY';
643
+ process.stderr.write(`${internalPrefix}APPLICATION_RECHECK_RESULT=${result}\n`);
644
+ return output;
612
645
  }
613
646
 
614
647
  function closeoutInputFromArgs(args) {
@@ -718,6 +751,10 @@ function runApplicationReuseNoKey(args) {
718
751
  });
719
752
  }
720
753
 
754
+ function runKeyToolGuide() {
755
+ return renderMessage('key_tool.manual.guide', 'DEFAULT', {});
756
+ }
757
+
721
758
  function runSigningResult(args) {
722
759
  const variables = {
723
760
  actualStatus: required(args, 'actual-status'),
@@ -816,6 +853,10 @@ export async function runOnboardingMessageCli(argv = process.argv) {
816
853
  console.log(runApplicationReuseNoKey(args));
817
854
  return;
818
855
  }
856
+ if (command === 'key-tool-guide') {
857
+ console.log(runKeyToolGuide());
858
+ return;
859
+ }
819
860
  if (command === 'signing-result') {
820
861
  console.log(runSigningResult(args));
821
862
  return;
@@ -828,7 +869,7 @@ export async function runOnboardingMessageCli(argv = process.argv) {
828
869
  console.log(runApplicationResult(args));
829
870
  return;
830
871
  }
831
- throw new Error('用法: onboarding_message_runner.mjs <platform-entry|product-clarify|enterprise-unsupported|mcc-resolve-plan|plan-confirm|mcc-clarify|material-collect|application-candidates|service-candidates|application-recheck|closeout|service-create-summary|service-update-confirm|application-harmony-manual-create|application-reuse-no-key|signing-result|service-result|application-result> ...');
872
+ throw new Error('用法: onboarding_message_runner.mjs <platform-entry|product-clarify|enterprise-unsupported|mcc-resolve-plan|plan-confirm|mcc-clarify|material-collect|application-candidates|service-candidates|application-recheck|closeout|service-create-summary|service-update-confirm|application-harmony-manual-create|application-reuse-no-key|key-tool-guide|signing-result|service-result|application-result> ...');
832
873
  }
833
874
 
834
875
  if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
@@ -640,7 +640,7 @@ const managedEntrypoints = {
640
640
  reason: '方案展示必须由 runner 绑定本轮唯一 MCC 事实和产品变体生成,避免 Agent 用 jq/printf/管道手写 renderer 输入。'
641
641
  },
642
642
  'materials.category.collect': {
643
- command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category <signing|service|application> --state <INITIAL|PARTIAL|INVALID|APP_MOBILE_INITIAL> --product-type <aipay|webpay|apppay> [--missing-fields <字段列表>]',
643
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category <signing|service|application> --state <INITIAL|PARTIAL|INVALID|APP_WEB_INITIAL|APP_MOBILE_INITIAL> --product-type <aipay|webpay|apppay> [--missing-fields <字段列表>]',
644
644
  reason: '运行时禁止手写 categoryName/currentStatus/missingFields;runner 会归一化“签约资料”“AI 网页应用收款签约截图”“mobilePlatform”等常见别名后再调用 renderer。'
645
645
  },
646
646
  'service.create.summary': {
@@ -672,19 +672,31 @@ const managedEntrypoints = {
672
672
  reason: '应用分支结果必须由 Onboarding runner 输出;actual-status=需人工配置 时下一步由消息目录固定,禁止直调 renderer 或手写状态。'
673
673
  },
674
674
  'application.candidates.facts': {
675
- command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type <WEBAPP|MOBILEAPP> --candidates-json <APP_CANDIDATES_JSON>',
675
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type <WEBAPP|MOBILEAPP> --candidates-json <APP_CANDIDATES_JSON> [--selection-state <initial|invalid>]',
676
676
  reason: '应用候选事实和适用选择提示必须由 runner 接收结构化候选数组并统一生成,禁止脚本或 Agent 拼接 Markdown 行。'
677
677
  },
678
678
  'application.candidate.select': {
679
- command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type <WEBAPP|MOBILEAPP> --candidates-json <APP_CANDIDATES_JSON>',
679
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type <WEBAPP|MOBILEAPP> --candidates-json <APP_CANDIDATES_JSON> [--selection-state <initial|invalid>]',
680
680
  reason: '应用候选选择必须由 runner 绑定同一份结构化候选快照生成,禁止脚本或 Agent 单独调用。'
681
681
  },
682
+ 'application.candidate.invalid': {
683
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type <WEBAPP|MOBILEAPP> --candidates-json <APP_CANDIDATES_JSON> --selection-state invalid',
684
+ reason: '无效应用选择必须绑定当前非空候选快照,重显事实、恢复提示和完整选择说明。'
685
+ },
686
+ 'key_tool.manual.guide': {
687
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message key-tool-guide',
688
+ reason: '不自动下载密钥工具时使用固定说明和官方链接,禁止把下载失败文案冒充手动提示。'
689
+ },
682
690
  'service.candidates.facts': {
683
- command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json <SERVICE_CANDIDATES_JSON>',
691
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json <SERVICE_CANDIDATES_JSON> [--selection-state <initial|invalid>]',
684
692
  reason: '服务候选事实和适用选择提示必须由 runner 接收结构化候选数组并统一生成,禁止脚本或 Agent 拼接 Markdown 行。'
685
693
  },
694
+ 'service.candidate.invalid': {
695
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json <SERVICE_CANDIDATES_JSON> --selection-state invalid',
696
+ reason: '无效服务选择必须由 runner 绑定当前非空候选快照,重显事实表、受控恢复提示和选择说明。'
697
+ },
686
698
  'service.candidate.select': {
687
- command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json <SERVICE_CANDIDATES_JSON>',
699
+ command: 'node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json <SERVICE_CANDIDATES_JSON> [--selection-state <initial|invalid>]',
688
700
  reason: '服务候选选择必须由 runner 绑定同一份结构化候选快照生成,禁止脚本或 Agent 单独调用。'
689
701
  },
690
702
  'process.partial_result': {
@@ -817,6 +829,8 @@ export function getMessageSchema(messageId, variantName = 'DEFAULT') {
817
829
  if (messageId === 'materials.category.collect') {
818
830
  const expectedStatus = {
819
831
  INITIAL: '待补充',
832
+ SERVICE_INITIAL: '待补充',
833
+ APP_WEB_INITIAL: '待补充',
820
834
  APP_MOBILE_INITIAL: '待补充',
821
835
  PARTIAL: '部分已提供,待补充',
822
836
  INVALID: '校验失败,需更正'
@@ -824,16 +838,22 @@ export function getMessageSchema(messageId, variantName = 'DEFAULT') {
824
838
  if (!expectedStatus) throw new Error(`${messageId} 不支持 variant ${variantName}`);
825
839
  setVariableRule(inputVariables, 'currentStatus', { values: [expectedStatus] });
826
840
  variantRules.push(`${variantName} 的 currentStatus 固定为“${expectedStatus}”。`);
827
- if (variantName === 'APP_MOBILE_INITIAL') {
841
+ if (variantName === 'SERVICE_INITIAL') {
842
+ setVariableRule(inputVariables, 'categoryName', { values: ['服务资料'] });
843
+ setVariableRule(inputVariables, 'missingFields', { values: ['服务名称、服务描述、服务地址、服务单价、请求示例JSON'] });
844
+ variantRules.push('SERVICE_INITIAL 只允许 categoryName=服务资料 且收集全部五项服务资料。');
845
+ } else if (variantName === 'APP_WEB_INITIAL') {
828
846
  setVariableRule(inputVariables, 'categoryName', { values: ['应用资料'] });
829
- setVariableRule(inputVariables, 'missingFields', { values: ['应用平台和对应资料'] });
830
- variantRules.push('APP_MOBILE_INITIAL 只允许 categoryName=应用资料 且 missingFields=应用平台和对应资料。');
831
- } else {
847
+ setVariableRule(inputVariables, 'missingFields', { values: ['应用公钥'] });
848
+ variantRules.push('APP_WEB_INITIAL 只允许收集应用公钥。');
849
+ } else if (variantName === 'APP_MOBILE_INITIAL') {
850
+ setVariableRule(inputVariables, 'categoryName', { values: ['应用资料'] });
851
+ setVariableRule(inputVariables, 'missingFields', { values: ['应用平台和对应资料、应用公钥'] });
852
+ variantRules.push('APP_MOBILE_INITIAL 只允许一次收集应用平台对应资料和应用公钥。');
853
+ } else if (variantName === 'INITIAL') {
832
854
  const missingFields = inputVariables.find((variable) => variable.name === 'missingFields');
833
- if (missingFields?.values) {
834
- missingFields.values = missingFields.values.filter((value) => value !== '应用平台和对应资料');
835
- }
836
- variantRules.push('应用平台首次收集必须使用 APP_MOBILE_INITIAL,不得在其他变体传入“应用平台和对应资料”。');
855
+ if (missingFields?.values) missingFields.values = missingFields.values.filter((value) => value !== '应用平台和对应资料');
856
+ variantRules.push('移动应用首次收集必须使用 APP_MOBILE_INITIAL。');
837
857
  }
838
858
  }
839
859
 
@@ -1160,6 +1180,8 @@ export function renderMessage(messageId, variantName, variables, telemetryContex
1160
1180
  if (messageId === 'materials.category.collect') {
1161
1181
  const expectedStatus = {
1162
1182
  INITIAL: '待补充',
1183
+ SERVICE_INITIAL: '待补充',
1184
+ APP_WEB_INITIAL: '待补充',
1163
1185
  APP_MOBILE_INITIAL: '待补充',
1164
1186
  PARTIAL: '部分已提供,待补充',
1165
1187
  INVALID: '校验失败,需更正'
@@ -1167,12 +1189,23 @@ export function renderMessage(messageId, variantName, variables, telemetryContex
1167
1189
  if (!expectedStatus || variables.currentStatus !== expectedStatus) {
1168
1190
  throw new Error('materials.category.collect variant 与材料状态不匹配');
1169
1191
  }
1192
+ const isServiceInitial = variantName === 'SERVICE_INITIAL';
1193
+ if (isServiceInitial && (
1194
+ variables.categoryName !== '服务资料'
1195
+ || variables.missingFields !== '服务名称、服务描述、服务地址、服务单价、请求示例JSON'
1196
+ )) {
1197
+ throw new Error('SERVICE_INITIAL 只允许收集全部五项服务资料');
1198
+ }
1199
+ const isWebInitial = variantName === 'APP_WEB_INITIAL';
1200
+ if (isWebInitial && (variables.categoryName !== '应用资料' || variables.missingFields !== '应用公钥')) {
1201
+ throw new Error('APP_WEB_INITIAL 只允许收集应用公钥');
1202
+ }
1170
1203
  const isMobileInitial = variantName === 'APP_MOBILE_INITIAL';
1171
- if (isMobileInitial && (variables.categoryName !== '应用资料' || variables.missingFields !== '应用平台和对应资料')) {
1172
- throw new Error('APP_MOBILE_INITIAL 只允许收集应用平台和对应资料');
1204
+ if (isMobileInitial && (variables.categoryName !== '应用资料' || variables.missingFields !== '应用平台和对应资料、应用公钥')) {
1205
+ throw new Error('APP_MOBILE_INITIAL 只允许一次收集应用平台对应资料和应用公钥');
1173
1206
  }
1174
- if (!isMobileInitial && variables.missingFields.split('、').includes('应用平台和对应资料')) {
1175
- throw new Error('应用平台首次收集必须使用 APP_MOBILE_INITIAL');
1207
+ if (variantName === 'INITIAL' && variables.missingFields.split('、').includes('应用平台和对应资料')) {
1208
+ throw new Error('移动应用首次收集必须使用 APP_MOBILE_INITIAL');
1176
1209
  }
1177
1210
  normalized.paymentPageHint = variables.missingFields.split('、').includes('支付页截图')
1178
1211
  ? definitions.get('paymentPageHint')?.values?.[0] || ''
@@ -25,7 +25,7 @@
25
25
 
26
26
  - `P-MCP-CONTRACT-FROZEN`:只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。
27
27
  - `P-AUTH-BEFORE-ONBOARDING`:登录、scope 和 MCC 全部校验通过前,禁止执行任何 onboarding 查询或写操作。
28
- - `P-WRITE-CONFIRM`:签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用创建由用户针对当前应用候选列表明确选择新建来确认,候选重查未变化且条件字段齐备时不再追加确认;用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;新建应用的公钥校验成功后直接提交应用审核,不增加额外确认点。
28
+ - `P-WRITE-CONFIRM`:签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用空候选时用户提交完整新建材料,或非空候选时明确新建,均构成创建确认;候选重查未变化且材料齐备时不再追加确认。用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;公钥校验成功后直接提交新建应用审核,不增加额外确认点。
29
29
  - `P-WRITE-UNKNOWN`:非幂等写操作结果不明时先用现有只读能力核验;无法确认时进入 UNKNOWN,禁止盲目重试。
30
30
  - `P-PARTIAL-RESULT`:签约、服务和应用分支独立记录结果,不回滚已成功动作,不用整体失败或整体成功覆盖部分结果。
31
31
  - `P-MATERIAL-CATEGORY`:每轮只展示一个材料类别,同类一次收齐;提前提供的后续材料直接接收并校验,之后不重复索取。
@@ -34,7 +34,7 @@
34
34
  - `P-AUTH-URL`:授权链接只能由 auth.sh 在固定产品/MCC 上下文校验通过后构造;只允许 https://aipay.alipay.com/cli-auth、deviceCode/productCode/mccCode 和可选 platform,禁止其他域名、路径、参数、重复参数、fragment 或 verification_url。
35
35
  - `P-KEY-URL`:公钥确认只展示 createKeyConfirmPage 返回的 confirmPageUrl 裸 URL;禁止展示二维码链接和 alipays:// 深链。
36
36
  - `P-URL-AUTO-OPEN`:授权页和公钥确认页在 URL 完整校验通过后默认调用受控 opener;失败、无 GUI 或宿主要求权限时保留同一裸 URL 和复制访问兜底。
37
- - `P-KEY-TOOL-DOWNLOAD`:缺少应用公钥时按当前操作系统自动下载官方密钥工具并输出实际安装包路径、安装引导和官方文档兜底;只下载,不安装、不启动、不生成密钥,失败或系统不支持时只输出官方文档手动下载引导。
37
+ - `P-KEY-TOOL-DOWNLOAD`:应用候选为空且当前 Agent 会话尚无用户公钥时,按当前系统自动下载官方密钥工具并展示实际路径、安装引导和官方链接;候选非空时只提示,不自动下载,用户明确要求时才下载。下载均只获取安装包,不安装、不启动、不生成密钥;失败或系统不支持时展示官方手动下载引导。
38
38
  - `P-SENSITIVE-STATE`:用户可以为当前应用设钥明确提供应用公钥,但该输入只用于本次 app.sh key/verify-key/verify-key-and-audit 调用;Agent 回复、对话摘要、普通日志、跨会话状态和宽权限临时文件禁止复述或保存公钥原文。除 P-SANDBOX-CREDENTIAL-EXCEPTION 明确允许的 Windows 手工沙箱当前资料输入外,私钥、token、Payment-Proof、签名串、完整支付表单和未脱敏 MCP 响应同样禁止进入这些位置。临时 URL 只有在 flow 明确登记、已由脚本或 renderer 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。
39
39
  - `P-CUSTOMER-OUTPUT-EXCLUSIVE`:flow 指定 renderer 或托管脚本时,其 stdout 是该动作唯一对客正文;工具输出记录、折叠面板或日志不等于已对客发送,Agent 必须把 stdout 原文作为当前回复正文发给用户。禁止在前后添加执行说明、消息 ID、控制标记、摘要、转述或近似话术。阻塞消息发出后立即停止本轮并等待用户。
40
40
  - `P-ONBOARDING-CONTROL-CHANNEL`:Onboarding 登记脚本的内部事实行统一以 ALIPAY_AIPAY_INTERNAL: 开头;即使宿主合并 stdout/stderr,也必须整行剔除后再判断对客正文。内部行严禁对客;成功且剔除内部行后正文为空时直接转移,不补写话术。
@@ -295,12 +295,18 @@ Step 3.1 通常已在同一次 stdout 展示三分支摘要;网站支付和 AP
295
295
  ```bash
296
296
  # 仅按量付费,轮到服务类别时
297
297
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json "$SERVICE_CANDIDATES_JSON"
298
+ # 无效选择
299
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-candidates --candidates-json "$SERVICE_CANDIDATES_JSON" --selection-state invalid
298
300
 
299
301
  # 轮到应用类别时
300
302
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type "$APPLICATION_TYPE" --candidates-json "$APP_CANDIDATES_JSON"
303
+ # 非空候选收到无效选择时
304
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-candidates --application-type "$APPLICATION_TYPE" --candidates-json "$APP_CANDIDATES_JSON" --selection-state invalid
301
305
  ```
302
306
 
303
- 只有成功分支的实际 `candidates.length === 0` 才进入新建;非空时发送 runner stdout 并等待选择。`QUERY_FAILED`、候选缺失或类型非法均阻断该分支,禁止候选 runner、创建资料和写动作,不影响其他成功分支。
307
+ 只有成功分支的实际 `candidates.length === 0` 才直接进入新建资料;非空时发送 runner stdout 并等待选择。`QUERY_FAILED`、候选缺失或类型非法均阻断该分支,禁止候选 runner、创建资料和写动作,不影响其他成功分支。
308
+
309
+ 服务候选非空时,`新建` 可同条附五项资料;应用候选非空时可同条提交 `新建` 和完整应用材料。缺失或错误时保留新建意图并只补对应项;无效选择执行同类别 `invalid` 命令,原文送达后等待,禁止写操作。空候选禁用默认或猜值。
304
310
 
305
311
  每次只展示一个类别,同类一次收齐且只补问缺失或错误字段。`MATERIAL_CATEGORY` 固定为 `signing|service|application`;`INITIAL` 对应“待补充”,`PARTIAL` 对应“部分已提供,待补充”,`INVALID` 对应“校验失败,需更正”,其他状态停止核对。字段别名只交给 runner 归一化;禁止使用 `签约资料` 等同义词,正常路径禁止调用 `render --schema`、`jq` 或读取消息目录。只执行:
306
312
 
@@ -308,7 +314,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message appl
308
314
  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"
309
315
  ```
310
316
 
311
- `INITIAL|PARTIAL|INVALID` 的固定状态文案由 runner 校验。用户提前提供后续类别材料时立即校验并保留,轮到时不得重复索取;签约状态未取得时不得猜测签约材料需求。各分支的材料、确认、固定参数、写入未知和恢复规则只在随后对应 phase 加载并执行。
317
+ `INITIAL|PARTIAL|INVALID` 文案由 runner 校验;材料提示不展示跨类别说明。服务 `INITIAL` 展示五项示例且不要求重发 `新建`。提前提供的后续材料仍校验复用;签约状态未取得时不得猜测材料需求。分支规则只在对应 phase 加载。
312
318
 
313
319
  ### Step 5: 产品开通推进
314
320
 
@@ -359,7 +365,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sign --product apppay -
359
365
  <!-- ALIPAY_AIPAY_STAGE:onboarding.service.start products=aipay -->
360
366
  #### 5.2 服务市场注册(仅按量付费)
361
367
 
362
- 仅 Step 3.1 服务查询成功且候选数组为空时新建;查询失败、缺失或非法时阻断。存在候选只接受当前完整 `serviceId`、`新建` 或 `修改:<当前serviceId>`,不接受序号、候选外/历史 ID 或自由格式修改。创建/修改必须用服务名称、描述、地址、单价、请求示例 JSON 五项资料通过 `validate`。单价可输入纯数字或带 `元`/`元/次` 后缀(可空格),后续只复用脚本 `SERVICE_PRICING=<纯数字>` 内部事实。复用不写;创建由 `save` 内部重查完整列表,只有当前服务数量小于固定上限 `10` 才调用保存方法;达到 `10` 个时禁止调用保存方法,调用次数必须为 0。校验通过先输出非阻塞摘要后直接创建。只有修改必须取得 `SERVICE_UPDATE_ONLY` 当前摘要确认;会话、主体、产品、目标或参数变化即失效。成功实际 `serviceId` 记为 `productionServiceId`;状态未返回只能写“状态未取得”,不得推断或重复 `save`。
368
+ 仅 Step 3.1 查询成功且候选数组为空时直接新建;失败、缺失或非法时阻断。非空只接受当前完整 `serviceId`、`新建`(可附五项资料)或 `修改:<当前serviceId>`;序号、候选外/历史 ID、非法 `修改:` 或其他输入走 `invalid` 恢复,禁止复用或写入。创建/修改五项资料须通过 `validate`;单价可输入纯数字或带 `元`/`元/次` 后缀(可空格),后续只用 `SERVICE_PRICING=<纯数字>`。复用不写。创建时 `save` 重查全量,当前服务数量小于固定上限 `10` 才保存;达到 `10` 个时禁止调用保存方法,调用为 0 并输出 `SERVICE_SAVE_RESULT=FAILED`。校验通过先输出非阻塞摘要后创建;修改还须取得绑定当前会话、主体、产品、目标和参数的 `SERVICE_UPDATE_ONLY` 确认,变化即失效。成功实际 `serviceId` 记为 `productionServiceId`;未返回状态只写“状态未取得”,不得推断或重复 `save`。
363
369
 
364
370
  ```bash
365
371
  # 创建摘要后不等待回复
@@ -388,17 +394,22 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service save --service-
388
394
  <!-- ALIPAY_AIPAY_STAGE:onboarding.application.start -->
389
395
  #### 5.3 应用发布
390
396
 
391
- **应用分支**:按量付费/网站支付使用 `WEBAPP`,APP 支付使用 `MOBILEAPP`。仅 Step 3.1 查询成功、类型合法且候选为数组时继续;失败、缺失或非法时阻断。复用候选和 Step 4 资料后按固定命令执行复用/新建、设钥/验钥和提审;上下文、平台字段、`appSign`、MCP 参数和返回由 `app.sh` 托管,仅异常诊断或业务解释时读取 `modules/app-release.md`。
397
+ **应用分支**:按量付费/网站支付使用 `WEBAPP`,APP 支付使用 `MOBILEAPP`。仅 Step 3.1 查询成功、类型合法且候选为数组时继续;失败、缺失或非法时阻断。上下文、移动字段、`appSign`、MCP 参数和返回由 `app.sh` 托管。
398
+
399
+ 候选为空:送达事实后收集材料,无需回复 `新建`,禁用默认/占位/猜测值。本会话未收到用户公钥时依次送达 `key-tool` 和材料消息;已收到则不下载,材料未齐由材料消息提示工具,已齐先送达 `key-tool-guide` 再重查。只有本会话用户输入可证明公钥已提供。
392
400
 
393
- 候选正文只由 Step 4 的同快照 runner 输出:存在 `ON_LINE` 时只接受当前完整 `appId` 或 `新建`;仅非上线候选时只接受 `新建|暂不新建`;禁止序号、历史/自报 ID。`新建` 已构成创建确认,候选复查不变且资料齐备时不追加确认。按量付费/网站支付新建时说明应用公钥要求;APP 支付首次资料只执行下列固定消息,一次收集 `IOS` 的 `bundleId`、`ANDROID` 的 `appPackage+appSign` 或 `ALL` 的三项组合,补问只用消息中的中文字段名:
401
+ 候选非空:有 `ON_LINE` 时接受当前完整 `appId` 或 `新建+材料`;仅非上线时另接受 `暂不新建`。候选消息展示示例和工具链接但不自动下载。只回复 `新建` 或材料缺失/错误时保留意图并补对应项;其他输入走 Step 4 `invalid`,不写入。明确要求下载时送达 `key-tool` 后返回原等待态。
402
+
403
+ `WEBAPP` 新建需公钥;`MOBILEAPP` 需 `IOS+bundleId`、`ANDROID+appPackage+appSign` 或 `ALL+三项`,并提供公钥。接口无名称/描述。`APP_WEB_INITIAL` 仅限 `aipay|webpay`,`APP_MOBILE_INITIAL` 仅限 `apppay`,错配即拒绝。`PARTIAL|INVALID` 只补中文字段;平台未定时用“应用平台和对应资料”:
394
404
 
395
405
  ```bash
406
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" key-tool
407
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message key-tool-guide
408
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE"
396
409
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
397
410
  ```
398
411
 
399
- 用户提前提供应用公钥时按公钥红线接收;未提供不阻止创建,但创建后停在设钥。目标 `appId` 已确定但尚无公钥时执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" key-tool`;只送达脚本登记正文,只下载官方工具,不安装、启动或生成密钥,禁止输出 OpenSSL 生成方案。
400
-
401
- 新建应用在页面确认后按固定命令执行 `app.sh verify-key-and-audit`,复用最终安全密钥响应完成 guard 并提审,不增加回复 `1`。
412
+ 缺公钥禁止创建或调用 `createKeyConfirmPage`。材料完整且重查允许后创建,以实际 `appId` 和同一公钥生成确认页;页面确认后执行 `verify-key-and-audit`,复用安全响应 guard 提审。工具只下载,不安装、启动或生成密钥;禁用 OpenSSL。
402
413
 
403
414
  <!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
404
415
  APP 支付通过 Skill 创建只支持 `IOS`、`ANDROID` 和 `ALL`,其中 `ALL` 只表示 iOS + Android。HarmonyOS 移动应用不得调用 `app.sh create`;执行固定 runner 命令输出 `application.harmony.manual_create`,用户在开放平台完成创建及平台要求的后续配置后明确表示操作完成,只重新执行下方同一条轻量 `app list` 查询,不得重新运行 Step 3.1 全量 discovery。只有实际查询到 `ON_LINE` 候选后才能按既有复用路径继续,否则应用分支保持人工待办。
@@ -438,15 +449,15 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-recovery app
438
449
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app audit --product-type "$PRODUCT_TYPE" "<appId>"
439
450
  ```
440
451
 
441
- **复用应用**:执行 `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` 时需要。
452
+ **复用应用**:执行上方 `app reuse`;`appId` 必须是用户选定的本轮最新完整候选,不接受序号、历史值或转换值。复用 `MOBILEAPP` 不收集移动创建字段。
442
453
 
443
- 仅 `CREATE` 分支以及 HarmonyOS 平台操作完成后的复查使用下列轻量列表命令;只接受其唯一 `APPLICATION_TYPE`、`APP_CANDIDATES_JSON` 和 `FLOW:*` 内部事实,剔除内部行后 stdout 必须为空。禁止为应用复查重新执行 Step 3.1 全量 discovery、签约查询、服务查询或 discovery 摘要:
454
+ 仅 `CREATE` 和 HarmonyOS 完成后执行下列轻量列表命令;只接受唯一 `APPLICATION_TYPE`、`APP_CANDIDATES_JSON`、`FLOW:*`,剔除内部行后 stdout 须为空。禁止重跑全量 discovery、签约或服务查询:
444
455
 
445
456
  ```bash
446
457
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app list --product-type "$PRODUCT_TYPE" --sales-code "$SALES_CODE"
447
458
  ```
448
459
 
449
- `CREATE` 分支将该命令本次唯一候选快照记为 `RECHECK_APP_CANDIDATES_JSON` 后执行下列 runner,禁止 Agent 手工比较。stdout 为空且资料齐备时直接创建;非空时原文发出并重新选择;重查失败时禁止创建但不回滚其他分支。非 `ON_LINE` 不可复用,`FLOW:PENDING_APPLICATIONS` 不得当作空列表。HarmonyOS 分支直接使用同一次轻量查询的实际候选进入既有候选展示/复用判断,不执行 CREATE 快照比较。
460
+ `CREATE` 以本次快照为 `RECHECK_APP_CANDIDATES_JSON` 运行比较器,只接受唯一内部事实 `APPLICATION_RECHECK_RESULT=UNCHANGED|CHANGED_EMPTY|CHANGED_NONEMPTY`。`UNCHANGED` stdout 为空并创建;`CHANGED_EMPTY` 只送达最新空事实,再沿用新建意图和材料创建;`CHANGED_NONEMPTY` 送达最新候选/提示后重选。marker、正文、候选矛盾或比较失败只阻断应用分支。非 `ON_LINE` 不可复用;HarmonyOS 不比较。
450
461
 
451
462
  ```bash
452
463
  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"
@@ -38,38 +38,41 @@
38
38
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-harmony-manual-create
39
39
  ```
40
40
 
41
- HarmonyOS 用户明确表示平台操作完成后只使用下方同一条轻量 `app list` 重新查询列表,不重新运行全量 discovery;只有实际 `ON_LINE` 候选才进入复用,用户完成表达不能直接证明应用已创建、配置或上线。
41
+ HarmonyOS 用户完成平台操作后只重查下方列表,不跑全量 discovery;仅实际 `ON_LINE` 可复用,用户表达不证明创建、配置或上线。
42
42
 
43
- 列表只复用 `ON_LINE` 应用,其他状态按实际值展示。候选必须来自本轮唯一 `APP_CANDIDATE_ID`;存在上线候选时只接受当前完整 appId 或 `新建`,仅有未上线候选时只接受 `新建` 或 `暂不新建`。创建前必须先执行轻量列表查询,再比较候选;HarmonyOS 平台操作完成后也只执行同一列表查询,不查询签约、服务或重复输出 discovery 摘要:
43
+ `ON_LINE` 才可复用。空候选收材料;非空接受当前 appId 或 `新建+材料`;仅未上线时可 `暂不新建`;无效选择不写。创建前重查:`UNCHANGED` 直创,`CHANGED_EMPTY` 送达新事实后沿用意图创建,`CHANGED_NONEMPTY` 重选:
44
44
 
45
45
  ```bash
46
46
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app list --product-type "$PRODUCT_TYPE" --sales-code "$SALES_CODE"
47
47
  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"
48
48
  ```
49
49
 
50
- 候选未变化且资料齐备时,用户本轮的 `新建` 已构成创建意图确认,直接创建;变化时旧选择失效并重新选择。AI 移动应用收款首次缺少移动平台资料时使用:
50
+ 材料齐或非空明确新建即确认创建;之后只补缺项。`WEBAPP` 需公钥;`MOBILEAPP` 需平台资料和公钥,平台未定时补“应用平台和对应资料”,`mobilePlatform` 由 runner 归一化。`APP_WEB_INITIAL` 仅限 `aipay|webpay`,`APP_MOBILE_INITIAL` 仅限 `apppay`:
51
51
 
52
52
  ```bash
53
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE"
53
54
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
54
55
  ```
55
56
 
57
+ 空候选且未收到公钥时执行 `runtime.mjs key-tool`;非空提示,明确要求下载。只下载,不安装/启动/生成密钥。材料齐且重查允许才创建,以 appId 和同一公钥进入确认页、校验和提审。
58
+
56
59
  ## 公钥边界
57
60
 
58
61
  应用公钥必须由用户自行生成并明确提供。Agent 禁止生成密钥对、请求或处理私钥、补全/改写公钥、添加 PEM 头尾,或在缺少公钥时调用 `createKeyConfirmPage`。公钥输入只用于当前 `app.sh key|verify-key|verify-key-and-audit`,不得在回复、摘要、普通日志、跨会话状态或宽权限临时文件中复述或保存。
59
62
 
60
- CLI 应用子命令均传当前 `--product-type`,由脚本上报 `PRODUCT`;`appId/publicKey` 保持位置参数,不新增 MCP 字段。用户提供公钥后直接执行 `runtime.mjs` 的 `app key --product-type "$PRODUCT_TYPE" --defer-open`,不加确认;必须先把该命令剔除内部事实后的 stdout 作为独立对客消息送达,再执行 `app open-key-page`。Agent 不得手写或手动渲染该消息来替代脚本。系统 opener 失败时,宿主内置浏览器可用则打开已交付的同一 URL 一次,仍失败保留复制兜底,再有限查询。禁止搜索或改写 URL、自动填写或代替扫码;自动打开成功、后续轮询成功或后续 stdout 为空都不能替代这次 URL 交付,pending 不得与 `application.key.page` 合并在同一条对客回复中。
63
+ CLI 子命令均传 `--product-type` 并由脚本上报 `PRODUCT`;`appId/publicKey` 保持位置参数。用户给公钥后直接执行 `runtime.mjs` 的 `app key --product-type "$PRODUCT_TYPE" --defer-open`;先独立送达 stdout,再执行 `app open-key-page`。Agent 不得手写或手动渲染该消息来替代脚本。opener 失败时可用宿主浏览器打开已交付 URL 一次,仍失败保留复制兜底再查询;禁止搜索、改写、填写或代扫码。自动打开/轮询不能替代 URL 交付,pending 不得与 `application.key.page` 合并在同一条对客回复中。
61
64
 
62
- 确认页只展示脚本校验通过的实际 `confirmPageUrl` 裸 URL,禁止二维码链接和 `alipays://` 深链。没有依据时不得推定页面有效期或旧链接失效;只有用户主动反馈当前页面或扫码有问题时才重新生成。
65
+ 只展示校验后的实际 `confirmPageUrl` 裸 URL,禁二维码链接和 `alipays://`。不推定有效期;仅用户反馈页面/扫码问题时重建。
63
66
 
64
- `app.sh key` 成功必须输出 `KEY_PAGE_RESULT=READY_TO_OPEN` 和 `KEY_PAGE:READY_TO_OPEN`;响应不明、缺少合法 URL 或页面已生成但标准消息无法安全输出时输出 `KEY_PAGE_RESULT=UNKNOWN`,禁止自动生成第二个页面。若页面 stdout 已交付但本地状态保存失败,脚本输出 `KEY_PAGE_STATE:SAVE_FAILED`,后续 `open-key-page` 只能降级为 `KEY_OPEN:LINK_ONLY`,不影响显式 `appId/publicKey` 的后续查询。
67
+ `app.sh key` 成功须输出 `KEY_PAGE_RESULT=READY_TO_OPEN` 和 `KEY_PAGE:READY_TO_OPEN`;响应不明、URL 非法或消息失败为 `UNKNOWN`,禁生成第二页。页面已交付但状态保存失败输出 `KEY_PAGE_STATE:SAVE_FAILED`,`open-key-page` 降级 `KEY_OPEN:LINK_ONLY`,显式参数仍可查询。
65
68
 
66
- RSA2 应用公钥状态只看应用公钥字段,支付宝公钥不能反向证明应用公钥已生效。`verify-key|verify-key-and-audit` 生产最多查询 20 次,未成功的相邻查询间隔 2 秒;耗尽后把明确完成表达交给 `onboarding_recovery_runner.mjs application-key`,每次只查询一次,不重启轮询。
69
+ RSA2 状态只看应用公钥字段,支付宝公钥不能反证。`verify-key|verify-key-and-audit` 最多 20 次、间隔 2 秒;耗尽后明确完成表达交给 `onboarding_recovery_runner.mjs application-key`,每次只查一次。
67
70
 
68
71
  ## 提审与结果
69
72
 
70
- 新建应用公钥确认后使用 `verify-key-and-audit`,复用最终成功的密钥响应完成双公钥 guard 并直接提审,不重复查询、不增加额外确认点。复用应用缺公钥时执行 `verify-key` 后重新 `reuse`。公钥未确认或 guard 失败禁止提审。
73
+ 新建确认后用 `verify-key-and-audit` 复用最终密钥响应完成双公钥 guard 并提审;复用缺钥时 `verify-key` 后再 `reuse`。公钥未确认或 guard 失败禁提审。
71
74
 
72
- `APPLICATION_CREATE_RESULT=SUCCESS|FAILED|UNKNOWN` 区分创建结果;未知或缺合法 `appId` 不得设钥。`APPLICATION_AUDIT_RESULT=SUBMITTED|FAILED|UNKNOWN` 区分提审结果;未知不得重复提审。`FLOW:AUDIT_SUBMITTED` 仅在提审成功或只读核验已审核/上线后输出;公钥成功但提审失败不得输出组合成功 marker。支付宝公钥写入成功才输出路径;config 探针失败时 stdout 为空,只输出 `APP_FLOW:RETRY_WITH_LOCAL_CONFIG_PERMISSION` 和 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=RETRY_WITH_LOCAL_CONFIG_PERMISSION`,取权后原样重试当前 app 命令一次,不重开公钥页。仍失败才输出 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=MANUAL_CONFIGURATION_REQUIRED`,记“需人工配置”,并由 `customer-messages.json` 的应用人工配置目录文案引导。
75
+ `APPLICATION_CREATE_RESULT=SUCCESS|FAILED|UNKNOWN` 区分创建;未知或无合法 `appId` 不设钥。`APPLICATION_AUDIT_RESULT=SUBMITTED|FAILED|UNKNOWN` 区分提审;未知不重提。`FLOW:AUDIT_SUBMITTED` 仅来自成功或只读核验,公钥成功不能掩盖提审失败。支付宝公钥写入成功才输出路径;config 探针失败时 stdout 空,仅输出 `APP_FLOW:RETRY_WITH_LOCAL_CONFIG_PERMISSION` 和 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=RETRY_WITH_LOCAL_CONFIG_PERMISSION`,取权后原样重试一次且不重开页面;仍失败输出 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=MANUAL_CONFIGURATION_REQUIRED` 并由 `customer-messages.json` 的应用人工配置目录文案引导。
73
76
 
74
77
  应用分支对客结果只使用:
75
78
 
@@ -329,6 +329,7 @@ service_save() {
329
329
  if [ "$SERVICE_COUNT" -ge "$SERVICE_CREATE_LIMIT" ]; then
330
330
  echo "❌ 已达到服务数量上限(${SERVICE_CREATE_LIMIT}个),无法创建新服务"
331
331
  echo "📋 您当前已有 $SERVICE_COUNT 个服务,请选择复用已有服务或修改已有服务"
332
+ emit_control "SERVICE_SAVE_RESULT=FAILED"
332
333
  exit 1
333
334
  fi
334
335
 
@@ -1,20 +1,20 @@
1
1
  # 服务市场业务语义
2
2
 
3
- 服务市场仅适用于 AI 按量付费。本模块解释候选、资料和保存边界;运行时命令以 `../flow.md` 为准,分页、校验、请求和解析由 `scripts/service.sh` 实现。
3
+ 服务市场仅适用于 AI 按量付费;命令见 `../flow.md`,实现见 `scripts/service.sh`。
4
4
 
5
- `service.sh` 的全部 CLI 调用固定上报 `PRODUCT=AIPAY`,不把该上下文字段加入服务 MCP 请求 JSON。
5
+ `service.sh` 固定 `PRODUCT=AIPAY`,不加入服务 MCP 请求。
6
6
 
7
7
  ## 查询与候选
8
8
 
9
- `a2a-pay-service.discoverBazaarServicesForMcp` 必须按 `offset/total` 完整分页。当前成功协议为 `code="10000"`、`data.items`、`data.pagination`,兼容旧 `success=true/resultObj.serviceList`;失败、异常或分页不完整不得输出空列表分支。
9
+ `a2a-pay-service.discoverBazaarServicesForMcp` 必须按 `offset/total` 完整分页。当前成功协议为 `code="10000"`、`data.items`、`data.pagination`,兼容旧 `success=true/resultObj.serviceList`;失败、异常或分页不完整不得作为空列表。
10
10
 
11
- 候选只取脚本唯一 `SERVICE_CANDIDATES_JSON`。轮到服务类别时,由统一 runtime 的 `onboarding-message service-candidates` 动作一次输出事实表与选择提示;禁止提前展示、手工拼表或仅输出 ID。列表为空可以创建;存在候选时只接受登记的复用、创建或 `修改:<serviceId>` 选择。
11
+ `SERVICE_CANDIDATES_JSON` 是唯一候选源。轮到服务类别时,`onboarding-message service-candidates` 输出事实表和提示;禁止提前展示、手工拼表或仅输出 ID。空列表收集资料;非空只接受复用、新建或 `修改:<serviceId>`。`新建` 可附五项资料,完整则创建,否则沿用意图补缺。无效选择以同一命令加 `--selection-state invalid` 重显候选和受控提示,等待重选且禁止写入。禁用默认或猜值。
12
12
 
13
13
  ## 五项资料
14
14
 
15
15
  创建和修改都需要:服务名称、服务描述、资源 URL、单次价格、序列化 JSON 请求示例。`schemaUrl` 当前承载 JSON 示例,不是网页 URL。
16
16
 
17
- 资料由以下入口一次校验;缺失时仍由 flow 的材料 runner 收集:
17
+ 资料由下列入口校验;缺失由材料 runner 收集,`INITIAL` 展示五项示例且不要求重发 `新建`:
18
18
 
19
19
  ```bash
20
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"
@@ -29,7 +29,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service validate --name
29
29
  - 修改:必须传当前候选完整 `serviceId` 和全部五项资料;保存前使用 `onboarding.write.confirm/SERVICE_UPDATE_ONLY` 绑定当前登录会话、脱敏主体、产品、动作、目标与参数,并等待当前摘要后的明确肯定回复;`1` 只是兼容快捷输入。
30
30
  - 任何目标、参数、主体或会话变化都使旧修改确认失效。创建不得进入修改确认。
31
31
 
32
- 保存写操作调用 `a2a-pay-service.saveBazaarServiceForMcp`。明确 `NOT_SENT` 才能自动重试;`MAYBE_SENT` 时用列表按 `serviceId` 和完整五项资料核验,不能靠同名服务猜测。创建结果未解析到实际 `serviceId` 时禁止宣称完成。脚本必须输出 `SERVICE_SAVE_RESULT=SUCCESS|FAILED|UNKNOWN`;`UNKNOWN` 只表示禁止自动重复保存并进入服务分支待办,不清除其他分支事实。
32
+ 保存调用 `a2a-pay-service.saveBazaarServiceForMcp`。明确 `NOT_SENT` 才自动重试;`MAYBE_SENT` 用列表按 `serviceId` 和五项资料核验,不靠同名猜测。未解析到实际 `serviceId` 时禁止宣称完成。脚本必须输出 `SERVICE_SAVE_RESULT=SUCCESS|FAILED|UNKNOWN`,10 个服务上限也输出 `FAILED`;`UNKNOWN` 禁止自动重复保存并进入服务分支待办,不清除其他分支事实。
33
33
 
34
34
  成功结果只用登记 renderer:
35
35