@alipay/alipay-aipay 1.6.7-beta → 1.6.7-beta1
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/README.md +1 -1
- package/dist/commands/uninstall.js +2 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/config.js +2 -2
- package/dist/utils/config.js.map +1 -1
- package/package.json +2 -2
- package/skill/SKILL.md +2 -2
- package/skill/VERSION +1 -1
- package/skill/references/integration/flow.md +5 -5
- package/skill/references/normal/full-process-routing.md +3 -3
- package/skill/references/normal/scripts/integration_message_runner.mjs +11 -1
- package/skill/references/normal/scripts/onboarding_message_runner.mjs +7 -0
- package/skill/references/normal/scripts/render_customer_message.mjs +6 -0
- package/skill/references/normal/scripts/telemetry.mjs +154 -89
- package/skill/references/normal/telemetry.md +3 -2
- package/skill/references/onboarding/flow.md +9 -9
- package/skill/references/onboarding/modules/app-release.md +3 -3
- package/skill/references/onboarding/modules/scripts/mcc.sh +9 -3
- package/skill/references/runtime-entry.md +4 -4
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ async function uninstallResolvedContext(ctx) {
|
|
|
19
19
|
// 检查是否有安装记录
|
|
20
20
|
const record = await readVersionRecord(ctx);
|
|
21
21
|
if (!record) {
|
|
22
|
-
console.log(chalk.yellow('\n未检测到已安装的支付宝 AI
|
|
22
|
+
console.log(chalk.yellow('\n未检测到已安装的支付宝 AI 付接入 Skill。\n'));
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
let installedSkillPaths;
|
|
@@ -32,7 +32,7 @@ async function uninstallResolvedContext(ctx) {
|
|
|
32
32
|
process.exitCode = 1;
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
console.log(chalk.cyan.bold('\n🗑️ 卸载支付宝 AI
|
|
35
|
+
console.log(chalk.cyan.bold('\n🗑️ 卸载支付宝 AI 付接入 Skill\n'));
|
|
36
36
|
// 显示将要删除的 skills
|
|
37
37
|
console.log('将删除以下 Skill 文件:\n');
|
|
38
38
|
for (const { skillName } of installedSkillPaths) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAsB,MAAM,oBAAoB,CAAC;AAE1G,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAU5F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAmC,EAAE;IAErC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,wBAAwB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,wBAAwB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAmB;IACzD,YAAY;IACZ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -22,7 +22,7 @@ async function updateResolvedContext(ctx) {
|
|
|
22
22
|
// 检查是否有安装记录
|
|
23
23
|
const record = await readVersionRecord(ctx);
|
|
24
24
|
if (!record) {
|
|
25
|
-
console.log(chalk.yellow('\n未检测到已安装的支付宝 AI
|
|
25
|
+
console.log(chalk.yellow('\n未检测到已安装的支付宝 AI 付接入 Skill。'));
|
|
26
26
|
console.log(chalk.gray(`请先运行 \`npx -y @alipay/alipay-aipay@latest install\` 安装到 ${ctx.targetDir}/。\n`));
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,UAAU,GAEX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAU/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAmB;IACtD,MAAM,qBAAqB,GAAG,iBAAiB,EAAE,CAAC;IAElD,YAAY;IACZ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,UAAU,GAEX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAU/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAmB;IACtD,MAAM,qBAAqB,GAAG,iBAAiB,EAAE,CAAC;IAElD,YAAY;IACZ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE/C,cAAc;IACd,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAE5C,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;YAC7C,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,qBAAqB,UAAU,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;YAEzF,SAAS;YACT,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO;YACP,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,OAAO;YACP,MAAM,aAAa,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;YACtD,MAAM,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,iBAAiB,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAErD,uCAAuC;YACvC,MAAM,SAAS,GAAG;gBAChB,OAAO,EAAE,qBAAqB;gBAC9B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC;YACF,MAAM,8BAA8B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAErD,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,WAAW;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;QAE7C,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,MAAM,OAAO,EAAE;YACjB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,eAAe;QACf,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,kBAAkB,GAAG,WAAW,CAAC;YAC/C,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;YACjC,MAAM,8BAA8B,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+KAA+K,CAAC,CAAC,CAAC;YACzM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,12 +17,12 @@ function parseTarget(value) {
|
|
|
17
17
|
}
|
|
18
18
|
program
|
|
19
19
|
.name('alipay-aipay')
|
|
20
|
-
.description('支付宝 AI
|
|
20
|
+
.description('支付宝 AI 付接入 Skill - 一键安装 Agent Skill,并后台准备 alipay-cli 环境')
|
|
21
21
|
.version(getPackageVersion());
|
|
22
22
|
// install 命令
|
|
23
23
|
program
|
|
24
24
|
.command('install')
|
|
25
|
-
.description('安装支付宝 AI
|
|
25
|
+
.description('安装支付宝 AI 付接入 Skill(Skill 文件优先完成,工具准备不阻塞安装)')
|
|
26
26
|
.option('--target <target>', '安装目标: all | agents | codex | claude | auto', 'all')
|
|
27
27
|
.option('--with-jq', '兼容参数;macOS/Linux 缺少 jq 时默认已在 detached 后台准备')
|
|
28
28
|
.option('--skip-tools', '只安装 Skill 文件,跳过 alipay-cli、jq 检查与安装')
|
|
@@ -35,7 +35,7 @@ program
|
|
|
35
35
|
// uninstall 命令
|
|
36
36
|
program
|
|
37
37
|
.command('uninstall')
|
|
38
|
-
.description('卸载已安装的支付宝 AI
|
|
38
|
+
.description('卸载已安装的支付宝 AI 付接入 Skill')
|
|
39
39
|
.option('--target <target>', '卸载目标: all | agents | codex | claude | auto', 'auto')
|
|
40
40
|
.action(async (options) => {
|
|
41
41
|
await uninstallCommand(process.cwd(), { target: parseTarget(options.target) });
|
|
@@ -43,7 +43,7 @@ program
|
|
|
43
43
|
// update 命令
|
|
44
44
|
program
|
|
45
45
|
.command('update')
|
|
46
|
-
.description('检查并更新支付宝 AI
|
|
46
|
+
.description('检查并更新支付宝 AI 付接入 Skill')
|
|
47
47
|
.option('--target <target>', '更新目标: all | agents | codex | claude | auto', 'auto')
|
|
48
48
|
.action(async (options) => {
|
|
49
49
|
await updateCommand(process.cwd(), { target: parseTarget(options.target) });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACzG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -33,8 +33,8 @@ export const SKILL_DIR = 'skill';
|
|
|
33
33
|
export const SKILLS = [
|
|
34
34
|
{
|
|
35
35
|
name: SKILL_NAME,
|
|
36
|
-
displayName: '支付宝 AI
|
|
37
|
-
description: '支付宝 AI
|
|
36
|
+
displayName: '支付宝 AI 付接入 Skill',
|
|
37
|
+
description: '支付宝 AI 付接入 Skill - 按量付费、网站支付、APP 支付集成与产品开通',
|
|
38
38
|
},
|
|
39
39
|
];
|
|
40
40
|
/**
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,YAAY;AACZ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE9D,QAAQ;AACR,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAEX,MAAM,gBAAgB,GAA6C;IACjE,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CAClB,CAAC;AAKF,MAAM,CAAC,MAAM,cAAc,GAAsB,QAAQ,CAAC;AAE1D,kDAAkD;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAEpE,WAAW;AACX,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC;AAEzC,wBAAwB;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAgB;IACjC;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alipay/alipay-aipay",
|
|
3
|
-
"version": "1.6.7-
|
|
4
|
-
"description": "支付宝 AI
|
|
3
|
+
"version": "1.6.7-beta1",
|
|
4
|
+
"description": "支付宝 AI 付接入 Skill 安装包 - 优先安装 Agent Skill,并在 macOS/Linux 后台准备用户级 CLI 工具",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"alipay-aipay": "bin/alipay-aipay.js"
|
package/skill/SKILL.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: alipay-aipay
|
|
3
3
|
description: >-
|
|
4
|
-
支付宝 AI
|
|
4
|
+
支付宝 AI 付接入 Skill。当用户选择完成 AI 按量付费、AI 网页应用收款、AI 移动应用收款三类支付宝收单产品的代码开发、产品开通或全流程同时完成两者时,使用此 Skill。
|
|
5
5
|
触发关键词:"AI支付"、"接支付宝"、"一站式接支付宝"、"接个支付"、"开发支付"、"402收款"、"AI按量付费"、"AI网页应用收款"、"AI移动应用收款"、"按量付费"、"快捷收款"、"快捷收单"、"网站支付"、"APP 支付"、"产品开通"、"商家开通"、"签约入驻"等。
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# 支付宝 AI
|
|
8
|
+
# 支付宝 AI 付接入 Skill 启动器
|
|
9
9
|
|
|
10
10
|
本文件只负责在加载业务规则前确定本轮实际使用的 Skill 版本,并刷新本机 `alipay-cli`。禁止在完成下列启动协议前读取 `references/runtime-entry.md`、任一 flow、模块、消息目录或业务脚本。
|
|
11
11
|
|
package/skill/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.6.7-
|
|
1
|
+
1.6.7-beta1
|
|
@@ -86,11 +86,11 @@
|
|
|
86
86
|
- 新项目:Agent 确定 `PROJECT_PATH`,`PROJECT_INPUT` 保留原话;runner 只调用 `prepare-new`,缺 `--project-path` 则未解析,禁止从原话猜测路径。默认新建由 Agent 选用户目录下 `alipay-aipay-projects/pay-demo`,非空占用则加安全后缀,并显式传入。仅退出码 0 且唯一 JSON 满足 `projectSelection/projectOrigin=NEW_PROJECT`、`projectOriginLabel=本轮新建项目`、`preparationStatus=READY` 才继续,并确认目标或最近父目录可写。路径非空、预检/权限失败时保留内容并改选空或不存在目录,禁止清空/覆盖。服务端语言缺失才补问;框架使用下方 runner。创建命令只来自用户指定、已有模板/项目或本轮已读官方文档,禁用覆盖选项和臆造脚手架。初始化并完成步骤 1 后转为 `PREPARED_NEW_PROJECT`,重入按现有项目重扫。
|
|
87
87
|
|
|
88
88
|
```bash
|
|
89
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent new
|
|
89
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent new --input-id "$USER_INPUT_ID"
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent existing
|
|
93
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent existing --input-id "$USER_INPUT_ID"
|
|
94
94
|
```
|
|
95
95
|
- 项目准备失败时停留在步骤 1 前置准备,输出实际错误和待补条件;不得进入沙箱准备。目标项目准备成功后记录实际根目录,步骤 1、步骤 3 的沙箱配置和后续代码必须落入该项目;沙箱配置不得降级写入系统临时目录、Agent 原始工作目录或其他项目。
|
|
96
96
|
|
|
@@ -119,7 +119,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message fra
|
|
|
119
119
|
用户回复“不知道项目在哪”“帮我找项目”、提供子目录但该目录不是项目根,或当前目录解析失败且需要候选时,从本 flow 所在目录执行下列轻量定位命令。`SEARCH_INPUT` 取用户给出的搜索范围;未给出时固定为 `当前目录`。该命令只查找项目标记文件并跳过常见重目录,不扫描源码内容;stdout 是本动作唯一对客消息,发出后立即停止并等待用户选择候选序号、具体目录或新建目录。用户选择候选后,仍必须再执行 `resolve-project --intent existing` 取得规范化绝对路径;候选列表不能直接替代项目确认。
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message locate-projects --base-path "$USER_WORKSPACE_ROOT" --search-input "$SEARCH_INPUT" --format message
|
|
122
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message locate-projects --base-path "$USER_WORKSPACE_ROOT" --search-input "$SEARCH_INPUT" --format message --input-id "$USER_INPUT_ID"
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
**破坏性操作二次确认**:本支付产品-代码开发流程本身不得删除用户既有文件。用户另行主动要求删除具体文件时,先停止代码开发,列出每个精确规范化路径和不可逆影响,再在独立轮次等待用户逐项确认该清单;此前的项目/技术栈补充、代码开发方案展示、服务声明送达及任何含糊回复均无效。未取得二次明确确认时严禁调用删除、清空、强制覆盖或等价命令;即使确认,也禁止删除项目根目录、`.git`、使用通配符或触及清单外文件。
|
|
@@ -205,7 +205,7 @@ runner 失败时不得展示手写方案或进入步骤 3。成功时必须取
|
|
|
205
205
|
|
|
206
206
|
- `full_process`:`../normal/full-process-routing.md` 已用同一方案绑定检查器事实、产品、项目、语言/框架和服务声明;送达后按该路由选择唯一 Integration Worker 或当前 Agent 执行,禁止重显或确认。两者都须完成本 flow 全部适用接口、条件和 checklist。用户中断后事实变化则返回 router 重新澄清、扫描和展示。方案仍禁止提前展示 MCC、授权范围、开通材料或 onboarding 待办。
|
|
207
207
|
|
|
208
|
-
方案送达后只通过上述 development loader 进入步骤 3;loader 只继承 `clarify_intent` 已记录的正式 run 事实,不再单独记录开始态 stage
|
|
208
|
+
方案送达后只通过上述 development loader 进入步骤 3;loader 只继承 `clarify_intent` 已记录的正式 run 事实,不再单独记录开始态 stage。它不表示收到额外确认回复;不得伪造用户回复。Agent 在收到每条聊天框用户消息时,必须先按 `runtime-entry.md` 的统一前置命令计数,再处理消息;不按 Skill 相关性筛选,`summary` 收口后不再计入当前 run,方案本身不是用户输入。
|
|
209
209
|
|
|
210
210
|
**方案后的上下文锁定**:已有项目保持步骤 1 前已经唯一解析的实际根目录和原有工程结构;新项目必须已经在步骤 1 前按用户明确选择的方式完成初始化并通过构建标识检查。此处不重复准备、初始化或探测项目。路径内容与步骤 1 成功时不一致则停止并重新澄清;只有目标项目或服务端语言变化时返回步骤 1,其他情况直接进入步骤 3。
|
|
211
211
|
|
|
@@ -570,7 +570,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message che
|
|
|
570
570
|
```
|
|
571
571
|
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
572
572
|
|
|
573
|
-
用户输入计数只统计 `clarify_intent` 之后、当前 active run
|
|
573
|
+
用户输入计数只统计 `clarify_intent` 之后、当前 active run 内 Agent 收到的每条聊天框用户消息,不按是否与 Skill 相关筛选。Agent 必须在任何解释、分类、路由、runner 或回复前执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry count-user-input --input-id "$USER_INPUT_ID"`;登记 runner 的输入参数只作同一消息的幂等兜底。只有本地计数状态不可用且已重新核对时,才在 checklist 命令末尾追加 `--user-input-after-clarify-intent <count>`;runner 会拒绝明显不合理计数。
|
|
574
574
|
|
|
575
575
|
同一次代码开发流程只渲染一次最终 checklist 结果;renderer stdout 是本次默认收口的唯一对客正文,禁止在前后追加风险说明、通过项摘要、执行说明、衔接提醒或第二份待办。
|
|
576
576
|
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
`NEW_PROJECT` 只用于初始化前,新建时执行:
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent new
|
|
22
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent new --input-id "$USER_INPUT_ID"
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
复用现有项目时执行:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent existing
|
|
28
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message resolve-project --project-input "$PROJECT_INPUT" --project-path "$PROJECT_PATH" --base-path "$USER_WORKSPACE_ROOT" --intent existing --input-id "$USER_INPUT_ID"
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
`--project-input` 不得代替真实路径;缺 `--project-path` 则未解析。默认新建由 Agent 选用户目录下 `alipay-aipay-projects/pay-demo`,非空占用则加安全后缀,并显式传入。仅 `preparationStatus=READY` 才继续;框架由 Integration 的 `framework-resolve` 按语言默认或用户明确值初始化,其他结果不得清空/覆盖。初始化且沙箱终态确定后成为本轮 `PREPARED_NEW_PROJECT`;不持久化,重入重扫。`NEW_PROJECT` 不扫描代码。
|
|
@@ -63,7 +63,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message con
|
|
|
63
63
|
`MISSING_ITEMS` 只由 `项目路径`、`技术栈` 组成,其中 `技术栈` 仅表示服务端语言缺失;产品不明确仍用 `product.clarify`。stdout 原文发出后等待,未补齐前不得初始化、安装或修改。路径输入均先 `resolve-project`;未知位置或需候选时执行:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message locate-projects --base-path "$USER_WORKSPACE_ROOT" --search-input "$SEARCH_INPUT" --format message
|
|
66
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message locate-projects --base-path "$USER_WORKSPACE_ROOT" --search-input "$SEARCH_INPUT" --format message --input-id "$USER_INPUT_ID"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
字段齐备后执行唯一 runner;禁止拆开执行项目扫描、`jq` 或 renderer,也不得附加解析。runner stdout 是本动作唯一对客消息;只有取得唯一 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED=integration.start.confirm` 才能继续。命令后的下一个动作必须把 stdout 作为可见进行中消息原文送达,不得作为最终答复结束当前回合,送达前禁止调用工具;送达后同一回合立即进入 development loader,不得总结、询问、等待回复或再次校验项目快照。用户中断后若方案事实变化,重新澄清、扫描并输出当前方案;静态扫描只决定进入验证,不证明完成。
|
|
@@ -10,7 +10,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
10
10
|
|
|
11
11
|
import { isWindowsPlatform } from './platform_compat.mjs';
|
|
12
12
|
import { renderMessage } from './render_customer_message.mjs';
|
|
13
|
-
import { emitStageMetricAsync, startTelemetryRun } from './telemetry.mjs';
|
|
13
|
+
import { emitStageMetricAsync, recordTelemetryUserInput, startTelemetryRun } from './telemetry.mjs';
|
|
14
14
|
|
|
15
15
|
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
16
16
|
const inspectorPath = path.join(scriptDir, 'project_route_inspector.sh');
|
|
@@ -121,6 +121,15 @@ function required(args, name) {
|
|
|
121
121
|
return value;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
function optional(args, name) {
|
|
125
|
+
return typeof args[name] === 'string' && args[name].length > 0 ? args[name] : undefined;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function countUserInput(args) {
|
|
129
|
+
const inputId = optional(args, 'input-id');
|
|
130
|
+
if (inputId) recordTelemetryUserInput(inputId);
|
|
131
|
+
}
|
|
132
|
+
|
|
124
133
|
function stripWrappingQuotes(value) {
|
|
125
134
|
const trimmed = value.trim();
|
|
126
135
|
if (
|
|
@@ -1350,6 +1359,7 @@ async function runChecklistResult(args) {
|
|
|
1350
1359
|
|
|
1351
1360
|
export async function runIntegrationMessageCli(argv = process.argv) {
|
|
1352
1361
|
const { command, args } = parseArgs(argv);
|
|
1362
|
+
countUserInput(args);
|
|
1353
1363
|
if (command === 'resolve-project') {
|
|
1354
1364
|
console.log(runResolveProject(args));
|
|
1355
1365
|
return;
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
currentRunContext,
|
|
16
16
|
startTelemetryRun,
|
|
17
|
+
recordTelemetryUserInput,
|
|
17
18
|
} from './telemetry.mjs';
|
|
18
19
|
|
|
19
20
|
const internalPrefix = 'ALIPAY_AIPAY_INTERNAL:';
|
|
@@ -134,6 +135,11 @@ function optional(args, name) {
|
|
|
134
135
|
return typeof args[name] === 'string' && args[name].length > 0 ? args[name] : undefined;
|
|
135
136
|
}
|
|
136
137
|
|
|
138
|
+
function countUserInput(args) {
|
|
139
|
+
const inputId = optional(args, 'input-id');
|
|
140
|
+
if (inputId) recordTelemetryUserInput(inputId);
|
|
141
|
+
}
|
|
142
|
+
|
|
137
143
|
function productFor(args) {
|
|
138
144
|
const productType = required(args, 'product-type');
|
|
139
145
|
const mapping = productTypes[productType];
|
|
@@ -1217,6 +1223,7 @@ function runApplicationResult(args) {
|
|
|
1217
1223
|
|
|
1218
1224
|
export async function runOnboardingMessageCli(argv = process.argv) {
|
|
1219
1225
|
const { command, args } = parseArgs(argv);
|
|
1226
|
+
countUserInput(args);
|
|
1220
1227
|
if (command === 'platform-entry') {
|
|
1221
1228
|
const message = runPlatformEntry(args);
|
|
1222
1229
|
if (message) console.log(message);
|
|
@@ -1373,6 +1373,9 @@ export function renderMessage(messageId, variantName, variables, telemetryContex
|
|
|
1373
1373
|
} else if (!variables.nextAction) {
|
|
1374
1374
|
throw new Error('application.operation.result 默认变体必须传入 nextAction');
|
|
1375
1375
|
}
|
|
1376
|
+
if (variables.actualStatus === '已上线且配置完整' && (variables.appKeySavePath === undefined || variables.appKeySavePath === '')) {
|
|
1377
|
+
throw new Error('application.operation.result 在已上线且配置完整时必须传入支付宝公钥保存路径');
|
|
1378
|
+
}
|
|
1376
1379
|
normalized.appKeySaveLine = appKeySaveLine(normalized.appId, variables.appKeySavePath);
|
|
1377
1380
|
}
|
|
1378
1381
|
if (messageId === 'error.backend') {
|
|
@@ -1600,6 +1603,9 @@ export function renderMessage(messageId, variantName, variables, telemetryContex
|
|
|
1600
1603
|
if (variables.applicationResult === '需人工配置' && hasApplicationOperationAppKeySavePath) {
|
|
1601
1604
|
throw new Error('需人工配置表示支付宝公钥未本地保存,禁止传入应用操作保存路径');
|
|
1602
1605
|
}
|
|
1606
|
+
if (variables.applicationResult === '已上线且配置完整' && !hasApplicationOperationAppKeySavePath) {
|
|
1607
|
+
throw new Error('process.partial_result 在应用已上线且配置完整时必须传入应用操作保存路径');
|
|
1608
|
+
}
|
|
1603
1609
|
const operationAppKeySaveLine = appKeySaveLine(
|
|
1604
1610
|
normalized.applicationOperationAppId,
|
|
1605
1611
|
variables.applicationOperationAppKeySavePath
|
|
@@ -20,6 +20,8 @@ const syncLogYuyanID = '180020010001290755';
|
|
|
20
20
|
const uploadTimeoutMs = 2500;
|
|
21
21
|
const permissionedForegroundFlushLimit = 5;
|
|
22
22
|
const localWriteMaxAttempts = 2;
|
|
23
|
+
const runStateLockWaitMs = 5000;
|
|
24
|
+
const runStateLockStaleMs = 30000;
|
|
23
25
|
const outboxFlushLimit = 50;
|
|
24
26
|
const outboxClaimTtlMs = 5 * 60 * 1000;
|
|
25
27
|
const outboxMaxRecords = 1000;
|
|
@@ -217,43 +219,57 @@ function shouldCloseRunAfterStage(event, state = {}) {
|
|
|
217
219
|
}
|
|
218
220
|
|
|
219
221
|
function closeRunLifecycleAfterStage(event, env = process.env) {
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
222
|
+
const transaction = withRunStateLock(env, () => {
|
|
223
|
+
const existing = readRunState(env);
|
|
224
|
+
if (!existing?.run_id || existing.run_id !== event.run_id) return false;
|
|
225
|
+
if (!shouldCloseRunAfterStage(event, existing)) return true;
|
|
226
|
+
const nowMs = Number.isFinite(Number(event.timestamp)) ? Number(event.timestamp) : Date.now();
|
|
227
|
+
return persistRunState({
|
|
228
|
+
...existing,
|
|
229
|
+
terminal: true,
|
|
230
|
+
terminal_at: nowMs,
|
|
231
|
+
updated_at: nowMs
|
|
232
|
+
}, env);
|
|
233
|
+
});
|
|
234
|
+
if (!transaction.acquired) {
|
|
235
|
+
recordLocalTelemetryFailure('LOCAL_RUN_STATE_WRITE_FAILED', 'failed to lock local telemetry run state', env);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
return transaction.value;
|
|
230
239
|
}
|
|
231
240
|
|
|
232
241
|
function updateExistingRunStateFromMessage(messageId, context = {}, env = process.env) {
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
if (
|
|
239
|
-
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
+
const transaction = withRunStateLock(env, () => {
|
|
243
|
+
const existing = readRunState(env);
|
|
244
|
+
if (!existing?.run_id) return false;
|
|
245
|
+
if (!runStateCompatibleWithEventContext(existing, context)) return true;
|
|
246
|
+
const rootIntent = context.rootIntent || context.root_intent || existing.root_intent || '';
|
|
247
|
+
if (messageId === 'integration.checklist.result') {
|
|
248
|
+
if (rootIntent !== 'integration_only') return true;
|
|
249
|
+
} else if (messageId === 'process.partial_result') {
|
|
250
|
+
if (!['integration_only', 'onboarding_only', 'full_process'].includes(rootIntent)) return true;
|
|
251
|
+
} else if (!terminalMessageIds.has(messageId)) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
const nowMs = Date.now();
|
|
255
|
+
const next = {
|
|
256
|
+
...existing,
|
|
257
|
+
schema_ver: 1,
|
|
258
|
+
run_id: existing.run_id,
|
|
259
|
+
root_intent: existing.root_intent || rootIntent,
|
|
260
|
+
product_type: existing.product_type || productTypeFrom({ context, env }),
|
|
261
|
+
created_at: existing.created_at || nowMs,
|
|
262
|
+
updated_at: nowMs,
|
|
263
|
+
terminal: true,
|
|
264
|
+
terminal_at: nowMs
|
|
265
|
+
};
|
|
266
|
+
return persistRunState(next, env);
|
|
267
|
+
});
|
|
268
|
+
if (!transaction.acquired) {
|
|
269
|
+
recordLocalTelemetryFailure('LOCAL_RUN_STATE_WRITE_FAILED', 'failed to lock local telemetry run state', env);
|
|
242
270
|
return false;
|
|
243
271
|
}
|
|
244
|
-
|
|
245
|
-
const next = {
|
|
246
|
-
...existing,
|
|
247
|
-
schema_ver: 1,
|
|
248
|
-
run_id: existing.run_id,
|
|
249
|
-
root_intent: existing.root_intent || rootIntent,
|
|
250
|
-
product_type: existing.product_type || productTypeFrom({ context, env }),
|
|
251
|
-
created_at: existing.created_at || nowMs,
|
|
252
|
-
updated_at: nowMs,
|
|
253
|
-
terminal: true,
|
|
254
|
-
terminal_at: nowMs
|
|
255
|
-
};
|
|
256
|
-
return persistRunState(next, env);
|
|
272
|
+
return transaction.value;
|
|
257
273
|
}
|
|
258
274
|
|
|
259
275
|
const outboxRecordFields = new Set(['schema_ver', 'created_at', 'event']);
|
|
@@ -361,6 +377,10 @@ function runStatePath(env = process.env) {
|
|
|
361
377
|
return path.join(stateDir(env), `${stableStateKey(env)}.json`);
|
|
362
378
|
}
|
|
363
379
|
|
|
380
|
+
function runStateLockPath(env = process.env) {
|
|
381
|
+
return `${runStatePath(env)}.lock`;
|
|
382
|
+
}
|
|
383
|
+
|
|
364
384
|
function outboxDir(env = process.env) {
|
|
365
385
|
if (env.ALIPAY_AIPAY_TELEMETRY_OUTBOX_DIR) return env.ALIPAY_AIPAY_TELEMETRY_OUTBOX_DIR;
|
|
366
386
|
return path.join(stateDir(env), 'outbox');
|
|
@@ -413,6 +433,41 @@ function writePrivateJson(file, value) {
|
|
|
413
433
|
return false;
|
|
414
434
|
}
|
|
415
435
|
|
|
436
|
+
function acquireRunStateLock(env = process.env) {
|
|
437
|
+
const lockPath = runStateLockPath(env);
|
|
438
|
+
const startedAt = Date.now();
|
|
439
|
+
try {
|
|
440
|
+
ensurePrivateDir(path.dirname(lockPath));
|
|
441
|
+
while (Date.now() - startedAt < runStateLockWaitMs) {
|
|
442
|
+
try {
|
|
443
|
+
const descriptor = fs.openSync(lockPath, 'wx', 0o600);
|
|
444
|
+
fs.closeSync(descriptor);
|
|
445
|
+
return lockPath;
|
|
446
|
+
} catch (error) {
|
|
447
|
+
if (error?.code !== 'EEXIST') return '';
|
|
448
|
+
try {
|
|
449
|
+
const lockStat = fs.statSync(lockPath);
|
|
450
|
+
if (Date.now() - lockStat.mtimeMs >= runStateLockStaleMs) fs.unlinkSync(lockPath);
|
|
451
|
+
} catch {}
|
|
452
|
+
sleepSync(10);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
} catch {}
|
|
456
|
+
return '';
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
function withRunStateLock(env = process.env, operation) {
|
|
460
|
+
const lockPath = acquireRunStateLock(env);
|
|
461
|
+
if (!lockPath) return { acquired: false, value: null };
|
|
462
|
+
try {
|
|
463
|
+
return { acquired: true, value: operation() };
|
|
464
|
+
} finally {
|
|
465
|
+
try {
|
|
466
|
+
fs.unlinkSync(lockPath);
|
|
467
|
+
} catch {}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
416
471
|
function readRunState(env = process.env) {
|
|
417
472
|
try {
|
|
418
473
|
const statePath = runStatePath(env);
|
|
@@ -681,21 +736,6 @@ function stageExtInfoFromPayload(payload = {}, env = process.env) {
|
|
|
681
736
|
});
|
|
682
737
|
}
|
|
683
738
|
|
|
684
|
-
function stageExtInfoFromEvent(event) {
|
|
685
|
-
const withEventRoot = (payload) => stageExtInfoFromPayload({
|
|
686
|
-
rootIntent: event.root_intent || event.rootIntent,
|
|
687
|
-
...(payload && typeof payload === 'object' && !Array.isArray(payload) ? payload : {})
|
|
688
|
-
}, {});
|
|
689
|
-
if (typeof event?.ext_info === 'string') {
|
|
690
|
-
try {
|
|
691
|
-
return withEventRoot(JSON.parse(event.ext_info));
|
|
692
|
-
} catch {
|
|
693
|
-
return '';
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
return withEventRoot(event?.ext_info);
|
|
697
|
-
}
|
|
698
|
-
|
|
699
739
|
export function stageMetricEvent(stage, context = {}, nowMs = Date.now(), env = process.env) {
|
|
700
740
|
const rule = stageRules.get(stage);
|
|
701
741
|
if (!rule) return null;
|
|
@@ -854,12 +894,23 @@ export async function startTelemetryRun(rootIntent, productType, inputId = '', {
|
|
|
854
894
|
}
|
|
855
895
|
const canonicalProduct = canonicalProductType(productType);
|
|
856
896
|
if (!canonicalProduct || canonicalProduct === 'UNKNOWN') return null;
|
|
857
|
-
const
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
897
|
+
const transaction = withRunStateLock(env, () => {
|
|
898
|
+
const run = createOrReuseRunState({
|
|
899
|
+
'root-intent': rootIntent,
|
|
900
|
+
'product-type': canonicalProduct,
|
|
901
|
+
'run-id': runId
|
|
902
|
+
}, env, nowMs);
|
|
903
|
+
return {
|
|
904
|
+
run,
|
|
905
|
+
persisted: Boolean(run?.state && persistRunState(run.state, env))
|
|
906
|
+
};
|
|
907
|
+
});
|
|
908
|
+
if (!transaction.acquired) {
|
|
909
|
+
recordLocalTelemetryFailure('LOCAL_RUN_STATE_WRITE_FAILED', 'failed to lock local telemetry run state', env);
|
|
910
|
+
return null;
|
|
911
|
+
}
|
|
912
|
+
const { run, persisted } = transaction.value || {};
|
|
913
|
+
if (run?.state && persisted && run.reused !== true) {
|
|
863
914
|
const event = stageMetricEvent('clarify_intent', {
|
|
864
915
|
runId: run.state.run_id,
|
|
865
916
|
rootIntent: run.state.root_intent,
|
|
@@ -1003,46 +1054,60 @@ export function recordTelemetryUserInput(inputId, env = process.env, nowMs = Dat
|
|
|
1003
1054
|
if (!telemetryEnabled(env)) return null;
|
|
1004
1055
|
const normalizedInputId = normalizeUserInputId(inputId);
|
|
1005
1056
|
if (!normalizedInputId) throw new Error('用户输入计数必须提供本地幂等 --input-id,且不得包含用户输入原文或敏感信息');
|
|
1006
|
-
const
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1057
|
+
const transaction = withRunStateLock(env, () => {
|
|
1058
|
+
const existing = readRunState(env);
|
|
1059
|
+
if (!existing?.run_id || existing.terminal) return null;
|
|
1060
|
+
const counts = normalizeUserInputCounts(existing.user_input_counts);
|
|
1061
|
+
const inputHash = userInputHash(normalizedInputId, existing.run_id);
|
|
1062
|
+
if (!inputHash) throw new Error('用户输入计数 input-id 无法生成本地幂等键');
|
|
1063
|
+
if (counts.input_hashes.includes(inputHash)) return counts;
|
|
1064
|
+
const nextCounts = addUserInputCount(counts, normalizedInputId, existing.run_id, nowMs);
|
|
1065
|
+
const next = {
|
|
1066
|
+
...existing,
|
|
1067
|
+
user_input_counts: nextCounts,
|
|
1068
|
+
updated_at: nowMs
|
|
1069
|
+
};
|
|
1070
|
+
return persistRunState(next, env) ? nextCounts : null;
|
|
1071
|
+
});
|
|
1072
|
+
if (!transaction.acquired) {
|
|
1073
|
+
recordLocalTelemetryFailure('LOCAL_RUN_STATE_WRITE_FAILED', 'failed to lock local telemetry run state', env);
|
|
1074
|
+
return null;
|
|
1075
|
+
}
|
|
1076
|
+
return transaction.value;
|
|
1019
1077
|
}
|
|
1020
1078
|
|
|
1021
1079
|
function updateExistingRunStateFromStageEvent(event, env = process.env) {
|
|
1022
1080
|
if (!event || !stageRules.has(event.stage)) return false;
|
|
1023
|
-
const
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1081
|
+
const transaction = withRunStateLock(env, () => {
|
|
1082
|
+
const existing = readRunState(env);
|
|
1083
|
+
if (!existing) return true;
|
|
1084
|
+
if (existing.run_id !== event.run_id) return true;
|
|
1085
|
+
if (!runStateCompatibleWithEventContext(existing, {
|
|
1086
|
+
rootIntent: event.root_intent,
|
|
1087
|
+
productType: event.product_type
|
|
1088
|
+
})) return true;
|
|
1089
|
+
const counts = normalizeUserInputCounts(existing.user_input_counts);
|
|
1090
|
+
const route = routeStages(existing.root_intent, existing.product_type);
|
|
1091
|
+
if (route.length > 0 && !route.includes(event.stage) && !summaryStages.has(event.stage)) return true;
|
|
1092
|
+
const next = withCompletedStage({
|
|
1093
|
+
...existing,
|
|
1094
|
+
schema_ver: 1,
|
|
1095
|
+
run_id: event.run_id,
|
|
1096
|
+
root_intent: existing.root_intent || event.root_intent || '',
|
|
1097
|
+
product_type: event.product_type && event.product_type !== 'UNKNOWN'
|
|
1098
|
+
? event.product_type
|
|
1099
|
+
: existing.product_type || 'UNKNOWN',
|
|
1100
|
+
created_at: existing.created_at || Date.now(),
|
|
1101
|
+
updated_at: Date.now(),
|
|
1102
|
+
user_input_counts: counts
|
|
1103
|
+
}, event.stage, Number.isFinite(Number(event.timestamp)) ? Number(event.timestamp) : Date.now());
|
|
1104
|
+
return persistRunState(next, env);
|
|
1105
|
+
});
|
|
1106
|
+
if (!transaction.acquired) {
|
|
1107
|
+
recordLocalTelemetryFailure('LOCAL_RUN_STATE_WRITE_FAILED', 'failed to lock local telemetry run state', env);
|
|
1108
|
+
return false;
|
|
1109
|
+
}
|
|
1110
|
+
return transaction.value;
|
|
1046
1111
|
}
|
|
1047
1112
|
|
|
1048
1113
|
function normalizeOS(platform = process.platform) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
- 字段白名单:stage/flow、产品、根意图、时间戳、Skill 版本、宿主/模型、匿名机器哈希、`run_id`、`user_input_after_clarify_intent` 和 `progress_pct`;禁密钥/账号密码/订单/交易号/截图/凭证/用户输入/路径/URL/响应/命令输出/堆栈原文;失败不影响业务,内部行 `ALIPAY_AIPAY_INTERNAL:`。
|
|
2
|
-
- run:`start-run` 只在 `root_intent + product_type` 都唯一确定后创建/复用 `run_id`,并把 `clarify_intent` 作为新 run 的第一条事件上报;`UNKNOWN` 不进入正式 telemetry。脚本继承 `PLATFORM_ID=<run_id>`;`COZE_PROJECT_ID`、`MEOO_PROJECT_ID`、`VITE_APP_ID`/`PLATFORM_ID` 优先;`current-run-id` 只查看,不新建 run。私有 JSON 原子写失败后无等待重试一次,state
|
|
3
|
-
- 计数:只统计 `clarify_intent` 之后、当前 active run
|
|
2
|
+
- run:`start-run` 只在 `root_intent + product_type` 都唯一确定后创建/复用 `run_id`,并把 `clarify_intent` 作为新 run 的第一条事件上报;`UNKNOWN` 不进入正式 telemetry。脚本继承 `PLATFORM_ID=<run_id>`;`COZE_PROJECT_ID`、`MEOO_PROJECT_ID`、`VITE_APP_ID`/`PLATFORM_ID` 优先;`current-run-id` 只查看,不新建 run。私有 JSON 原子写失败后无等待重试一次,state 落盘后才返回成功;run state 的读改写由私有锁串行化,避免 detached stage 覆盖刚写入的输入计数。收口事件先入 outbox 再标记,失败均不阻塞业务。outbox 仅接受低敏 event 和严格字段/type,拒绝 `report.item/options` 直通,2xx 后才删除;维护/测试进程不上传。
|
|
3
|
+
- 计数:只统计 `clarify_intent` 之后、当前 active run 内的用户输入。Agent 每收到一条聊天框用户消息都必须先分配不含消息内容的 `USER_INPUT_ID`,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry count-user-input --input-id "$USER_INPUT_ID"`,再解释、分类、路由、调用 runner 或回复;不按是否与 Skill 相关筛选。文字、图片/文件、空白或短确认消息、材料补充、确认回复和中途插话都按一条用户消息计,同一条消息同时包含文字和图片/文件时仍只计一条;不计宿主/系统/网页授权、扫码、Skill stage、runner、工具调用或自动轮询。`USER_INPUT_ID` 同一消息重试必须复用,运行时按 `run_id + USER_INPUT_ID` 的本地 hash 幂等去重且不上报;登记 runner 携带的同一 `--input-id` 只是兜底,不是第二条计数。宿主聊天总入口不在本仓库,Skill 无法从未交给 Agent 的消息恢复计数;Agent 收到消息后的前置命令是完整统计所必需的动作。`summary` 收口后不再计入当前 run;收口前的计数值由当前 state 直接写入每个 stage 的 `c4`。
|
|
4
|
+
- 上传与重试:业务进程先同步写入私有 outbox,再启动 detached worker 异步 POST 到 `collect.alipay.com:443/yuyan/`;worker 每次最多处理 50 条,遇到首个失败停止并保留未成功记录,只有 HTTP 2xx 才删除记录。网络失败通过 `permissioned-flush-needed` 暴露补传候选;`flush-outbox` 前台最多补传 5 条并优先 terminal stage,失败或仍有积压时保留 outbox,并可启动后台 worker。遥测失败不改变业务、消息或确认;collector 结果非业务条件;本地 outbox 仍受 7 天/1000 条保留上限约束。维护/测试进程不上传。
|
|
@@ -108,7 +108,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message prod
|
|
|
108
108
|
`queryMcc` 树和多候选快照使用默认 1800 秒、本轮 run 私有缓存;无有效 run 不缓存。快照绑定产品、salesCode、原查询、规范化语义词、选择回执、候选树事实及按需取得的资格详情;有效命中原样复用,失效才重查。runner 只接受最多 12 项、单项 2 到 40 字符、总计不超过 240 字符的 JSON 字符串数组并拒绝 MCC 编码;Agent 参数错误时基于原话更正或省略,不要求用户重述。两种 MCP 请求体不变;`batchQueryMcc` 最多一次,只传树内命中且 `needSpecialQual=true` 的候选编码。
|
|
109
109
|
|
|
110
110
|
```bash
|
|
111
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"]
|
|
111
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"] --input-id "$USER_INPUT_ID"
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
只收唯一 `ALIPAY_AIPAY_INTERNAL:MCC_QUERY_RESULT=SUCCESS` 与 `ALIPAY_AIPAY_INTERNAL:MCC_RESOLUTION=<json>`。`UNIQUE` 恰一项,并有唯一 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED=onboarding.plan.confirm`、`MCC_CONTEXT_RECEIPT`;先把 stdout 作为可见进行中消息原文送达,随后同一回合进入 `execute`,不等待回复。`MULTIPLE|NONE` 送候选/无匹配后等待。禁止旧 `mcc-search`/`mcc-candidates`、手写候选或近似追问。
|
|
@@ -117,11 +117,11 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --quer
|
|
|
117
117
|
|
|
118
118
|
`ALIPAY_AIPAY_INTERNAL:MCC_QUERY_RESULT=FAILED` 且无 `MCC_FLOW:RETRY_WITH_NETWORK`:送stdout,停MCC;非无匹配,禁候选/方案/授权/签约。
|
|
119
119
|
|
|
120
|
-
`MULTIPLE` 还须取得唯一 `MCC_SELECTION_RECEIPT`。用户回复序号、当前候选完整名称或编码时,以原始 `MCC_SEARCH_QUERY` 和首次检索使用的同一 `MCC_SEMANTIC_TERMS_JSON` 重跑同一入口:`node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"] --select "$SELECTED_MCC_CODE" --selection-receipt "$MCC_SELECTION_RECEIPT"`。有效详情快照直接生成方案,不再调用 `queryMcc` 或 `batchQueryMcc`;runner 仍校验当前 run、产品、原话、规范化语义词、候选和事实哈希。receipt 或快照失效时不得沿用或自动套用旧选择,必须基于完整当前产品目录重新召回并至少重新展示一次当前候选。
|
|
120
|
+
`MULTIPLE` 还须取得唯一 `MCC_SELECTION_RECEIPT`。用户回复序号、当前候选完整名称或编码时,以原始 `MCC_SEARCH_QUERY` 和首次检索使用的同一 `MCC_SEMANTIC_TERMS_JSON` 重跑同一入口:`node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"] --select "$SELECTED_MCC_CODE" --selection-receipt "$MCC_SELECTION_RECEIPT" --input-id "$USER_INPUT_ID"`。有效详情快照直接生成方案,不再调用 `queryMcc` 或 `batchQueryMcc`;runner 仍校验当前 run、产品、原话、规范化语义词、候选和事实哈希。receipt 或快照失效时不得沿用或自动套用旧选择,必须基于完整当前产品目录重新召回并至少重新展示一次当前候选。
|
|
121
121
|
|
|
122
122
|
`salesCode`、`scope` 和基础材料只取“产品映射”。方案只由 `mcc resolve-plan` 或已有唯一 MCC 事实时的 `onboarding-message plan-confirm --root-intent "$ROOT_INTENT" --mcc-context-receipt` 生成,展示产品/scope、MCC、特殊资质、企业账号边界及商家平台链接。`ROOT_INTENT` 取当前路线根意图,只能是 `onboarding_only` 或 `full_process`。特殊资质只来自 `qualificationGroups`:多个 group 是 OR 关系;同一 group 内多个 qualifications 是 AND 关系;`attaType` 为空或 null 的 qualification 只展示 `qualName`,不生成上传项。禁止补充模板外资格或审核规则。
|
|
123
123
|
|
|
124
|
-
不得保留“先运行旧字符串搜索,无匹配后再临时让 Agent 猜”的两阶段流程,或重复询问已知信息;语义概念与原话必须在同一次 `resolve-plan` 中提交并统一校验。唯一事实校验通过、方案 marker 唯一且 stdout 已送达后,执行 `onboarding-execute-ready --product-type "$PRODUCT_TYPE"`;缺值/冲突/非唯一继续澄清,产品/MCC 变更重渲染。`execute` loader 只继承 `clarify_intent` 已记录的正式 run 事实,不再单独记录 stage
|
|
124
|
+
不得保留“先运行旧字符串搜索,无匹配后再临时让 Agent 猜”的两阶段流程,或重复询问已知信息;语义概念与原话必须在同一次 `resolve-plan` 中提交并统一校验。唯一事实校验通过、方案 marker 唯一且 stdout 已送达后,执行 `onboarding-execute-ready --product-type "$PRODUCT_TYPE"`;缺值/冲突/非唯一继续澄清,产品/MCC 变更重渲染。`execute` loader 只继承 `clarify_intent` 已记录的正式 run 事实,不再单独记录 stage,不代表新增用户回复,禁手工上报;Agent 在收到每条聊天框用户消息时,必须先按 `runtime-entry.md` 的统一前置命令计数,不按是否与 Skill 相关筛选,`summary` 收口后不再计入当前 run,`full_process` 不重置。
|
|
125
125
|
|
|
126
126
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:END -->
|
|
127
127
|
|
|
@@ -287,7 +287,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message appl
|
|
|
287
287
|
每次只展示一个类别,同类一次收齐且只补问缺失或错误字段。`MATERIAL_CATEGORY` 固定为 `signing|service|application`;`INITIAL` 对应“待补充”,`PARTIAL` 对应“部分已提供,待补充”,`INVALID` 对应“校验失败,需更正”,其他状态停止核对。字段别名只交给 runner 归一化;禁止使用 `签约资料` 等同义词,正常路径禁止调用 `render --schema`、`jq` 或读取消息目录。只执行:
|
|
288
288
|
|
|
289
289
|
```bash
|
|
290
|
-
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" [--special-qualification-json "$QUALIFICATION_GROUPS_JSON"]
|
|
290
|
+
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" [--special-qualification-json "$QUALIFICATION_GROUPS_JSON"] --input-id "$USER_INPUT_ID"
|
|
291
291
|
```
|
|
292
292
|
|
|
293
293
|
`INITIAL|PARTIAL|INVALID` 文案由 runner 校验;材料提示不展示跨类别说明。签约类目需特殊资质时,`MISSING_FIELDS` 必含 `特殊资质材料`,并把本轮唯一 MCC 的 `qualificationGroups` 原样传入 `--special-qualification-json`,runner 展示 OR 组合、AND 材料和上传顺序。服务 `INITIAL` 展示五项示例且不要求重发 `新建`。提前材料仍校验复用;签约状态未取得时不得猜测材料需求。分支规则只在对应 phase 加载。
|
|
@@ -413,8 +413,8 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service save --service-
|
|
|
413
413
|
|
|
414
414
|
```bash
|
|
415
415
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" key-tool
|
|
416
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE"
|
|
417
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
|
|
416
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE" --input-id "$USER_INPUT_ID"
|
|
417
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE" --input-id "$USER_INPUT_ID"
|
|
418
418
|
```
|
|
419
419
|
|
|
420
420
|
缺公钥禁创建或调用 `createKeyConfirmPage`。材料齐后用下方组合命令完成重查、比较、创建和公钥页生成;页面确认后 `verify-key-and-audit` 复用安全响应 guard 提审。工具只下载,不安装、启动或生成密钥;禁用 OpenSSL。
|
|
@@ -504,17 +504,17 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message appl
|
|
|
504
504
|
|
|
505
505
|
使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出并原文发送 stdout。禁止 Agent 手写短摘要、删减 `productionReadinessBlock`、删减 AI 网页应用收款限制引导或改写后续衔接;AI 网页应用收款收口缺少“【上线前有以下关键点】”和“AI 网页应用收款限制”时视为标准收口未送达,必须重发同一次 stdout。自动重试耗尽、业务错误或查询失败且仍未恢复的动作,统一写入分支结果和 `remainingActions`,只说明一次,不在收口后追问是否重试。必须执行:
|
|
506
506
|
|
|
507
|
-
`SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId
|
|
507
|
+
`SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId`、公钥文件路径、错误码、截图证据或其他自由文本;本轮 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=EXPORTED` 时,`APP_KEY_SAVE_PATH` 或 `APPLICATION_OPERATION_APP_KEY_SAVE_PATH` 必须同时传入结果 runner。这些证据不能污染分支结果枚举。
|
|
508
508
|
|
|
509
509
|
```bash
|
|
510
510
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message closeout --product-type "$PRODUCT_TYPE" --root-intent "$ROOT_INTENT" --signing-result "$SIGNING_RESULT" --application-result "$APPLICATION_RESULT" --remaining-actions "$REMAINING_ACTIONS" [--integration-result "$INTEGRATION_RESULT"] [--service-result "$SERVICE_RESULT"] [--sandbox-config-state "$SANDBOX_CONFIG_STATE"] [--manual-verification-items "$MANUAL_VERIFICATION_ITEMS"] [--application-operation-app-id "$APPLICATION_OPERATION_APP_ID" [--application-operation-next-action "$APPLICATION_OPERATION_NEXT_ACTION"] [--application-operation-app-key-save-path "$APPLICATION_OPERATION_APP_KEY_SAVE_PATH"]]
|
|
511
511
|
```
|
|
512
512
|
|
|
513
|
-
用户输入计数只统计 `clarify_intent` 之后、当前 active run
|
|
513
|
+
用户输入计数只统计 `clarify_intent` 之后、当前 active run 内 Agent 收到的每条聊天框用户消息,不按是否与 Skill 相关筛选,也不在 closeout 事后回溯。Agent 必须在任何解释、分类、路由、runner 或回复前执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry count-user-input --input-id "$USER_INPUT_ID"`;登记 runner 的输入参数只作同一消息的幂等兜底。只有本地计数状态不可用且已重新核对时,才在 closeout 命令末尾追加 `--user-input-after-clarify-intent <count>`;runner 会拒绝明显不合理计数。
|
|
514
514
|
|
|
515
515
|
runner 从 `PRODUCT_TYPE` 派生产品名,网站支付/APP 支付派生服务结果“无需处理”,从 `ROOT_INTENT` 派生代码开发栏和后续衔接;标题只按完成条件派生。`onboarding_only` 省略 `--integration-result`、`--sandbox-config-state` 和 `--manual-verification-items`。`full_process`:代码开发通过填“已完成”并传 `READY`;仅沙箱待配置且其余代码与安全检查通过填“部分完成,沙箱配置待完成”并传 `CREATE_PENDING|VERIFY_PENDING`;沙箱 `READY` 且只剩非阻塞人工待验证项时填“部分完成,人工待验证”,传 `READY`,把 checklist `manualItems` 原样作为 `MANUAL_VERIFICATION_ITEMS`,并在 `REMAINING_ACTIONS` 写明实际待办,禁止传“无”。runner 拒绝旧完整参数、stdin JSON、`--input-json`、可派生字段和空字符串伪值。renderer 校验结果与沙箱状态/人工待验证项一致,并派生恢复口令或人工待验证展示;不增加确认点。不得在 stdout 前后追加衔接提醒,不伪造本轮代码修改、沙箱创建或测试结果,也不重复进入 integration。
|
|
516
516
|
|
|
517
|
-
若 `full_process` 最后一跳紧接应用创建、审核提交或复用,不再先输出 `application.operation.result` 再立刻 closeout;只记录同一 `APPLICATION_OPERATION_APP_ID`,runner 复用 `APPLICATION_RESULT`,非“需人工配置”还记录 `APPLICATION_OPERATION_NEXT_ACTION`;“需人工配置”的下一步由 runner
|
|
517
|
+
若 `full_process` 最后一跳紧接应用创建、审核提交或复用,不再先输出 `application.operation.result` 再立刻 closeout;只记录同一 `APPLICATION_OPERATION_APP_ID`,runner 复用 `APPLICATION_RESULT`,非“需人工配置”还记录 `APPLICATION_OPERATION_NEXT_ACTION`;“需人工配置”的下一步由 runner 派生。若本轮 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=EXPORTED`,必须同时传 `APPLICATION_OPERATION_APP_KEY_SAVE_PATH`,收口必须展示“当前 appId: xxx 对应的支付宝公钥保存在:xxx”;“需人工配置”禁止传该路径。已上线且无保存路径时不展开“应用分支结果”;已上线且有保存路径时只展开 appId、状态和路径;其他应用结果合并展示并保留完成态红线。`onboarding_only`、应用分支仍需用户补材料/确认,或应用操作结果不是紧邻 Step 6 收口时,仍按应用模块输出 `application.operation.result`。合并展示不得改写完成条件,待审核、待设置公钥或待人工配置仍不得表述为应用发布完成。
|
|
518
518
|
|
|
519
519
|
当且仅当签约结果为“已提交,等待生效”且应用结果为“已提交审核,等待上线”时,renderer 从消息目录自动在 `remainingActions` 后追加状态查询提示;该提示不是 flow 入参,Agent 禁止自行传入、拼接或在模板外重复输出。其他结果组合不展示该提示。
|
|
520
520
|
|
|
@@ -51,8 +51,8 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" app create-from-snapsho
|
|
|
51
51
|
材料齐或非空明确新建即确认创建;`新建/我要新建` 只是示例,不要求逐字回复,等价明确意图均接受;之后只补缺项。`WEBAPP` 需公钥;`MOBILEAPP` 需平台资料和公钥。Agent 按明确语义归一化:仅 iOS→`IOS`,仅 Android→`ANDROID`,两类→`ALL`;原枚举兼容,含糊/矛盾时不猜。脚本只传这三个枚举。`APP_WEB_INITIAL` 仅限 `aipay|webpay`,`APP_MOBILE_INITIAL` 仅限 `apppay`:
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE"
|
|
55
|
-
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
|
|
54
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_WEB_INITIAL --product-type "$PRODUCT_TYPE" --input-id "$USER_INPUT_ID"
|
|
55
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE" --input-id "$USER_INPUT_ID"
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Skill 新建 `WEBAPP` 或 `MOBILEAPP IOS|ANDROID|ALL` 时,首次等待或创建写操作前必须展示 `https://opendocs.alipay.com/isv/02kipk`。空候选由事实消息展示,缺公钥再执行 `runtime.mjs key-tool`;应用资料首次收集消息也保留同一入口以覆盖恢复场景。非空由选择消息展示,用户要求才下载。只下载,不安装/启动/生成密钥。材料齐且重查允许才创建、设钥和提审。HarmonyOS 保持人工引导,不适用本门禁。
|
|
@@ -83,4 +83,4 @@ RSA2 状态只看应用公钥字段,支付宝公钥不能反证。`verify-key|
|
|
|
83
83
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message application-result --app-id "$APP_ID" --actual-status "$ACTUAL_STATUS" [--next-action "$NEXT_ACTION"] [--app-key-save-path "$APP_KEY_SAVE_PATH"]
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
输出实际 appId
|
|
86
|
+
输出实际 appId、状态和下一步;若本轮 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=EXPORTED`,必须把该路径原样作为 `APP_KEY_SAVE_PATH` 传入,runner 会对客展示“当前 appId: xxx 对应的支付宝公钥保存在:xxx”。只展示路径,禁止复述支付宝公钥内容。待审核、待设钥、需人工配置、失败或未知不得称发布完成。`APP_FLOW:RETRY_WITH_LOCAL_CONFIG_PERMISSION` 不渲染结果;`MANUAL_CONFIGURATION_REQUIRED` 固定传“需人工配置”且省略 `--next-action` 和 `--app-key-save-path`,由目录派生。写操作仅 `NOT_SENT` 自动重试;`MAYBE_SENT` 查询核验,无法确认进入 `UNKNOWN`,禁止同名猜测或重复创建/提审。
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# 功能描述: 查询当前产品支持的 MCC 经营类目并托管 MCC 匹配与方案展示
|
|
5
5
|
# 调用位置: Step 1 方案规划
|
|
6
6
|
# 用法:
|
|
7
|
-
# bash mcc.sh resolve-plan --query <经营描述|MCC编码> --product-type <aipay|webpay|apppay> [--semantic-terms-json <JSON数组>] [--select <MCC编码> --selection-receipt <receipt>]
|
|
7
|
+
# bash mcc.sh resolve-plan --query <经营描述|MCC编码> --product-type <aipay|webpay|apppay> [--semantic-terms-json <JSON数组>] [--select <MCC编码> --selection-receipt <receipt>] [--input-id <USER_INPUT_ID>]
|
|
8
8
|
#=============================================================================
|
|
9
9
|
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
@@ -549,7 +549,7 @@ validate_mcc_selection_cache() {
|
|
|
549
549
|
}
|
|
550
550
|
|
|
551
551
|
run_resolve_plan() {
|
|
552
|
-
local query="" product_type="" semantic_terms_json='[]' select_value="" selection_receipt="" sales_code tree rows tree_catalog resolution match_type full_codes candidate_rows qualification_rows details catalog selection_cache="" used_selection_cache=false stale_selection=false resolved_semantic_terms='[]'
|
|
552
|
+
local query="" product_type="" semantic_terms_json='[]' select_value="" selection_receipt="" input_id="" sales_code tree rows tree_catalog resolution match_type full_codes candidate_rows qualification_rows details catalog selection_cache="" used_selection_cache=false stale_selection=false resolved_semantic_terms='[]'
|
|
553
553
|
shift
|
|
554
554
|
while [[ $# -gt 0 ]]; do
|
|
555
555
|
case "$1" in
|
|
@@ -568,6 +568,9 @@ run_resolve_plan() {
|
|
|
568
568
|
--selection-receipt)
|
|
569
569
|
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
570
570
|
selection_receipt="$2"; shift 2 ;;
|
|
571
|
+
--input-id)
|
|
572
|
+
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
573
|
+
input_id="$2"; shift 2 ;;
|
|
571
574
|
*)
|
|
572
575
|
echo "❌ 未知参数: $1"; exit 1 ;;
|
|
573
576
|
esac
|
|
@@ -649,6 +652,9 @@ run_resolve_plan() {
|
|
|
649
652
|
--mcc-catalog-json "$catalog"
|
|
650
653
|
--semantic-terms-json "$semantic_terms_json"
|
|
651
654
|
)
|
|
655
|
+
if [ -n "$input_id" ]; then
|
|
656
|
+
node_args+=(--input-id "$input_id")
|
|
657
|
+
fi
|
|
652
658
|
if [ "$stale_selection" = true ]; then
|
|
653
659
|
node_args+=(--selection-state STALE)
|
|
654
660
|
elif [ -n "$select_value" ] || [ -n "$selection_receipt" ]; then
|
|
@@ -686,7 +692,7 @@ case "${1:-}" in
|
|
|
686
692
|
run_resolve_plan "$@"
|
|
687
693
|
;;
|
|
688
694
|
*)
|
|
689
|
-
echo "用法: bash mcc.sh resolve-plan --query <经营描述|MCC编码> --product-type <aipay|webpay|apppay> [--semantic-terms-json <JSON数组>] [--select <MCC编码> --selection-receipt <receipt>]"
|
|
695
|
+
echo "用法: bash mcc.sh resolve-plan --query <经营描述|MCC编码> --product-type <aipay|webpay|apppay> [--semantic-terms-json <JSON数组>] [--select <MCC编码> --selection-receipt <receipt>] [--input-id <USER_INPUT_ID>]"
|
|
690
696
|
exit 1
|
|
691
697
|
;;
|
|
692
698
|
esac
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# 支付宝 AI
|
|
1
|
+
# 支付宝 AI 付接入 Skill
|
|
2
2
|
## 支持范围
|
|
3
3
|
|
|
4
4
|
仅支持 AI 按量付费、AI 网页应用收款、AI 移动应用收款;“按量付费”“网站支付”“APP 支付”等旧称仅作输入别名,对客仍用新名称。明确要求当面付、付款码、订单码支付、JSAPI 支付、预授权支付或商家扣款时不得改判,按 `normal/rejection-guide.md` 受控拒绝。
|
|
@@ -54,11 +54,11 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" render <messageId> --va
|
|
|
54
54
|
|
|
55
55
|
遥测默认开启,`ALIPAY_AIPAY_TELEMETRY=0|false|off|no` 关闭事件/outbox/上传/flush;私有 run context 仍供 `PLATFORM_ID` 与 run 生命周期。失败静默,不改变业务/消息/确认,stdout 空且 stderr 内部行不对客。`integration_only` 由 `integration_summary` 终结;`onboarding_only` 由 `onboarding_summary` 终结;`full_process` 由 `all_summary` 终结。上报权限不新增网络探针;实际低敏上传就是自然探测,collector 可达时不申请。任一收口后若 telemetry outbox 因 DNS、连接或超时失败积压,按 `normal/telemetry.md` 先本地状态判断,确实需要时按需申请补传权限;`flush-outbox` 前台小批量补传,失败仍不影响业务收口。
|
|
56
56
|
|
|
57
|
-
用户输入计数是入口前置职责,只从 `clarify_intent`
|
|
57
|
+
用户输入计数是入口前置职责,只从 `clarify_intent` 之后开始,到当前 `run_id` 的 `summary` 收口为止。当前 active run 期间,聊天框里**每收到一条用户消息都必须先计一次**,再做任何 Skill 相关或非 Skill 相关处理;计数不按是否与 Skill 流程强相关筛选。只要是用户在 Agent 对话框发送的消息,就按一条计,不计宿主/系统/网页授权、扫码、Skill stage、runner、工具调用或自动轮询。文字、图片/文件、空白/短确认、材料补充、确认回复和中途插话都按一条用户消息计;同一条消息含文字和图片/文件仍只计一条。`USER_INPUT_ID` 是当前 active run 内用户消息的本地幂等键:Agent 给每条新用户消息分配对话内单调序号,同一消息重试复用同一值。`USER_INPUT_ID` 不得包含或派生自用户输入内容、文件名、路径、截图/OCR、业务材料、stage 名或工具调用序号;运行时只保存其本地 hash,不上报。
|
|
58
58
|
|
|
59
|
-
`start-run` 只在 `root_intent + product_type` 都唯一确定后创建或复用 `run_id`,并把 `clarify_intent` 作为新 run 的第一条事件上报;产品尚未唯一确定时不创建 `run_id`。后续用户输入只按当前 active run 的 `user_input_after_clarify_intent` 计数,确认回复、补材料、候选选择和中途插话都按一次输入计,`summary` 收口后不再计入当前 run。阻塞确认统一通过 `reply confirm --reply "$USER_REPLY" --input-id "$USER_INPUT_ID"`,该 runner 只登记一次用户输入,不再使用旧 phase
|
|
59
|
+
`start-run` 只在 `root_intent + product_type` 都唯一确定后创建或复用 `run_id`,并把 `clarify_intent` 作为新 run 的第一条事件上报;产品尚未唯一确定时不创建 `run_id`。后续用户输入只按当前 active run 的 `user_input_after_clarify_intent` 计数,确认回复、补材料、候选选择和中途插话都按一次输入计,`summary` 收口后不再计入当前 run。阻塞确认统一通过 `reply confirm --reply "$USER_REPLY" --input-id "$USER_INPUT_ID"`,该 runner 只登记一次用户输入,不再使用旧 phase 计数。Agent 每收到一条聊天框用户消息,都必须先分配不含消息内容的 `USER_INPUT_ID`,执行一次 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry count-user-input --input-id "$USER_INPUT_ID"`,再解释、分类、路由、调用 runner 或回复;不论消息是否与 Skill 相关,文字、图片/文件、空白、确认和中途插话都执行。重复同一 `USER_INPUT_ID` 不加计;登记 runner 携带的同一 `--input-id` 只是兼容兜底,不是另一条计数。由于宿主聊天总入口不在本仓库,Skill 无法从未交给 Agent 的宿主消息中自行恢复计数,Agent 收到消息后的这条前置命令是完整统计所必需的唯一动作。`c4` 只承载 `user_input_after_clarify_intent`、`root_intent` 和 `progress_pct`。不新增业务确认点或独立上报;当前实现将事件先同步写入本地 outbox,再启动 detached worker 异步上传,失败保留 outbox 并不影响业务收口;维护诊断/outbox/上传/flush 见 `normal/telemetry.md`。
|
|
60
60
|
|
|
61
|
-
三种入口均只在无法确定产品时执行 `product-clarify` runner;产品明确但缺 MCC 用 `mcc-clarify`。已有经营描述、名称或编码时只执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"]`。非精确编码时,Agent 在首次调用中最多补充 12 个有原话依据的行业概念、经营对象或同义表达,只传概念、不传 MCC 编码且不新增确认;禁止硬编码映射、全表判断、远程语义或手拼候选。runner 按 Onboarding entry 严格校验当前产品 `queryMcc` 目录、联合排序原话与语义证据,只为命中且 `needSpecialQual=true` 的候选调用一次 `batchQueryMcc`,并复用有效的同 run/产品候选快照。
|
|
61
|
+
三种入口均只在无法确定产品时执行 `product-clarify` runner;产品明确但缺 MCC 用 `mcc-clarify`。已有经营描述、名称或编码时只执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"] --input-id "$USER_INPUT_ID"`。非精确编码时,Agent 在首次调用中最多补充 12 个有原话依据的行业概念、经营对象或同义表达,只传概念、不传 MCC 编码且不新增确认;禁止硬编码映射、全表判断、远程语义或手拼候选。runner 按 Onboarding entry 严格校验当前产品 `queryMcc` 目录、联合排序原话与语义证据,只为命中且 `needSpecialQual=true` 的候选调用一次 `batchQueryMcc`,并复用有效的同 run/产品候选快照。
|
|
62
62
|
|
|
63
63
|
代码开发或完整接入缺项目位置/服务端语言时,使用 `integration.context.required` 或 `integration.project_path.required` 标准消息;框架缺失不触发补问。先区分新建/复用,`PROJECT_INPUT` 保留原话。Agent 确定两类项目的真实 `PROJECT_PATH`,以 `resolve-project --project-path "$PROJECT_PATH" --intent <existing|new>` 交 runner 校验;`PROJECT_INPUT` 不得代替路径。默认新建也先选安全路径并显式传入。现有项目位置未知时先定位候选;路径经 `resolve-project` 后再用 `framework-resolve`。补齐前不初始化、装依赖或改文件。
|
|
64
64
|
|