@alipay/alipay-aipay 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/bin/alipay-aipay.js +6 -0
  2. package/dist/commands/install.d.ts +11 -0
  3. package/dist/commands/install.d.ts.map +1 -0
  4. package/dist/commands/install.js +182 -0
  5. package/dist/commands/install.js.map +1 -0
  6. package/dist/commands/prepare-tools.d.ts +5 -0
  7. package/dist/commands/prepare-tools.d.ts.map +1 -0
  8. package/dist/commands/prepare-tools.js +29 -0
  9. package/dist/commands/prepare-tools.js.map +1 -0
  10. package/dist/commands/uninstall.d.ts +10 -0
  11. package/dist/commands/uninstall.d.ts.map +1 -0
  12. package/dist/commands/uninstall.js +82 -0
  13. package/dist/commands/uninstall.js.map +1 -0
  14. package/dist/commands/update.d.ts +10 -0
  15. package/dist/commands/update.d.ts.map +1 -0
  16. package/dist/commands/update.js +155 -0
  17. package/dist/commands/update.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +65 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types.d.ts +43 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +2 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils/alipay-cli.d.ts +15 -0
  27. package/dist/utils/alipay-cli.d.ts.map +1 -0
  28. package/dist/utils/alipay-cli.js +221 -0
  29. package/dist/utils/alipay-cli.js.map +1 -0
  30. package/dist/utils/config.d.ts +48 -0
  31. package/dist/utils/config.d.ts.map +1 -0
  32. package/dist/utils/config.js +207 -0
  33. package/dist/utils/config.js.map +1 -0
  34. package/dist/utils/file.d.ts +55 -0
  35. package/dist/utils/file.d.ts.map +1 -0
  36. package/dist/utils/file.js +154 -0
  37. package/dist/utils/file.js.map +1 -0
  38. package/dist/utils/gpg.d.ts +14 -0
  39. package/dist/utils/gpg.d.ts.map +1 -0
  40. package/dist/utils/gpg.js +247 -0
  41. package/dist/utils/gpg.js.map +1 -0
  42. package/dist/utils/jq.d.ts +14 -0
  43. package/dist/utils/jq.d.ts.map +1 -0
  44. package/dist/utils/jq.js +221 -0
  45. package/dist/utils/jq.js.map +1 -0
  46. package/dist/utils/npm.d.ts +17 -0
  47. package/dist/utils/npm.d.ts.map +1 -0
  48. package/dist/utils/npm.js +42 -0
  49. package/dist/utils/npm.js.map +1 -0
  50. package/dist/utils/shell.d.ts +11 -0
  51. package/dist/utils/shell.d.ts.map +1 -0
  52. package/dist/utils/shell.js +54 -0
  53. package/dist/utils/shell.js.map +1 -0
  54. package/package.json +48 -7
  55. package/skill/SKILL.md +118 -0
  56. package/skill/references/integration/flow.md +487 -0
  57. package/skill/references/integration/modules/alipay-sdk-reminder.md +256 -0
  58. package/skill/references/integration/modules/checklist.md +122 -0
  59. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +68 -0
  60. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +77 -0
  61. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +74 -0
  62. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +73 -0
  63. package/skill/references/integration/modules/code-examples/csharp/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +58 -0
  64. package/skill/references/integration/modules/code-examples/csharp/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +128 -0
  65. package/skill/references/integration/modules/code-examples/csharp/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.cs +500 -0
  66. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +72 -0
  67. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +80 -0
  68. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +78 -0
  69. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +77 -0
  70. package/skill/references/integration/modules/code-examples/java/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +66 -0
  71. package/skill/references/integration/modules/code-examples/java/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +135 -0
  72. package/skill/references/integration/modules/code-examples/java/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemoController.java +610 -0
  73. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +51 -0
  74. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +57 -0
  75. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +55 -0
  76. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +54 -0
  77. package/skill/references/integration/modules/code-examples/nodejs/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +77 -0
  78. package/skill/references/integration/modules/code-examples/nodejs/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +65 -0
  79. package/skill/references/integration/modules/code-examples/nodejs/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.js +461 -0
  80. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +59 -0
  81. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +67 -0
  82. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +66 -0
  83. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +65 -0
  84. package/skill/references/integration/modules/code-examples/php/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +56 -0
  85. package/skill/references/integration/modules/code-examples/php/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +107 -0
  86. package/skill/references/integration/modules/code-examples/php/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.php +444 -0
  87. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +57 -0
  88. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +65 -0
  89. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +63 -0
  90. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +62 -0
  91. package/skill/references/integration/modules/code-examples/python/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +48 -0
  92. package/skill/references/integration/modules/code-examples/python/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +43 -0
  93. package/skill/references/integration/modules/code-examples/python/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.py +465 -0
  94. package/skill/references/integration/modules/interface-guide.md +90 -0
  95. package/skill/references/integration/modules/product-decision.md +90 -0
  96. package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +270 -0
  97. package/skill/references/integration/modules/sandbox/alipay-sandbox-tool.md +133 -0
  98. package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +218 -0
  99. package/skill/references/integration/modules/scripts/local_402_sandbox_pay.py +659 -0
  100. package/skill/references/normal/alipay-cli-env.md +214 -0
  101. package/skill/references/normal/rejection-guide.md +37 -0
  102. package/skill/references/normal/scripts/common.sh +32 -0
  103. package/skill/references/normal/scripts/detect_dev_tool.sh +46 -0
  104. package/skill/references/onboarding/flow.md +573 -0
  105. package/skill/references/onboarding/modules/app-release.md +415 -0
  106. package/skill/references/onboarding/modules/authorization.md +269 -0
  107. package/skill/references/onboarding/modules/error-handling.md +251 -0
  108. package/skill/references/onboarding/modules/mcc-reference.md +209 -0
  109. package/skill/references/onboarding/modules/product-sign.md +304 -0
  110. package/skill/references/onboarding/modules/scripts/app.sh +705 -0
  111. package/skill/references/onboarding/modules/scripts/ar_sign_apply.sh +248 -0
  112. package/skill/references/onboarding/modules/scripts/auth.sh +505 -0
  113. package/skill/references/onboarding/modules/scripts/error_handler.sh +452 -0
  114. package/skill/references/onboarding/modules/scripts/query_sign_status.sh +146 -0
  115. package/skill/references/onboarding/modules/scripts/service.sh +267 -0
  116. package/skill/references/onboarding/modules/scripts/upload_screenshots.sh +152 -0
  117. package/skill/references/onboarding/modules/service-registration.md +294 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Skill 元数据
3
+ */
4
+ export interface SkillMeta {
5
+ name: string;
6
+ displayName: string;
7
+ description: string;
8
+ }
9
+ /**
10
+ * 版本记录文件内容
11
+ */
12
+ export interface VersionRecord {
13
+ version: string;
14
+ installedAt: string;
15
+ skills: string[];
16
+ gpgInstalled: boolean;
17
+ alipayCliInstalled: boolean;
18
+ jqInstalled?: boolean;
19
+ }
20
+ /**
21
+ * CLI 命令上下文
22
+ */
23
+ export interface CommandContext {
24
+ cwd: string;
25
+ targetDir: string;
26
+ versionFile: string;
27
+ legacyVersionFile: string;
28
+ targetDirLabel: string;
29
+ }
30
+ /**
31
+ * 工具检查结果
32
+ */
33
+ export interface ToolCheckResult {
34
+ name: string;
35
+ installed: boolean;
36
+ version?: string;
37
+ path?: string;
38
+ }
39
+ /**
40
+ * 平台类型
41
+ */
42
+ export type PlatformType = 'macos' | 'linux-apt' | 'linux-yum' | 'unsupported';
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { ToolCheckResult } from '../types.js';
2
+ /**
3
+ * 检查 alipay-cli 是否已安装
4
+ */
5
+ export declare function checkAlipayCli(): Promise<ToolCheckResult>;
6
+ /**
7
+ * 安装 alipay-cli
8
+ * 统一安装到 ~/.local/bin,无需 sudo
9
+ */
10
+ export declare function installAlipayCli(): Promise<boolean>;
11
+ /**
12
+ * 确保 alipay-cli 已安装,未安装则自动安装
13
+ */
14
+ export declare function ensureAlipayCli(): Promise<boolean>;
15
+ //# sourceMappingURL=alipay-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alipay-cli.d.ts","sourceRoot":"","sources":["../../src/utils/alipay-cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwCnD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAoB/D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA+EzD;AAyED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAQxD"}
@@ -0,0 +1,221 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import os from 'os';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { execInteractive, isInteractive } from './shell.js';
7
+ import { constants } from 'fs';
8
+ import fs from 'fs/promises';
9
+ import path from 'path';
10
+ const execAsync = promisify(exec);
11
+ function formatErrorTail(error) {
12
+ const message = error instanceof Error ? error.message : String(error);
13
+ return message
14
+ .split('\n')
15
+ .map((line) => line.trimEnd())
16
+ .filter((line) => line.length > 0)
17
+ .slice(-6)
18
+ .join('\n');
19
+ }
20
+ /**
21
+ * 确保 ~/.local/bin 存在
22
+ */
23
+ async function ensureLocalBin() {
24
+ const home = process.env.HOME || os.homedir();
25
+ if (!home) {
26
+ throw new Error('无法确定用户主目录(HOME 环境变量未设置)');
27
+ }
28
+ const localBin = path.join(home, '.local', 'bin');
29
+ await fs.mkdir(localBin, { recursive: true });
30
+ return localBin;
31
+ }
32
+ async function isWritableDir(dir) {
33
+ try {
34
+ await fs.access(dir, constants.W_OK);
35
+ return true;
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /**
42
+ * 检查 alipay-cli 是否已安装
43
+ */
44
+ export async function checkAlipayCli() {
45
+ try {
46
+ const { stdout } = await execAsync('alipay-cli version', { timeout: 5000 });
47
+ const version = stdout.trim();
48
+ let cliPath = '';
49
+ try {
50
+ const { stdout: whichOut } = await execAsync('which alipay-cli', { timeout: 3000 });
51
+ cliPath = whichOut.trim();
52
+ }
53
+ catch {
54
+ // ignore
55
+ }
56
+ return {
57
+ name: 'alipay-cli',
58
+ installed: true,
59
+ version: version || 'unknown',
60
+ path: cliPath || undefined,
61
+ };
62
+ }
63
+ catch {
64
+ return { name: 'alipay-cli', installed: false };
65
+ }
66
+ }
67
+ /**
68
+ * 安装 alipay-cli
69
+ * 统一安装到 ~/.local/bin,无需 sudo
70
+ */
71
+ export async function installAlipayCli() {
72
+ let localBin;
73
+ try {
74
+ localBin = await ensureLocalBin();
75
+ }
76
+ catch (error) {
77
+ console.log(chalk.red(' ✗ 无法创建 alipay-cli 安装目录'));
78
+ const detail = formatErrorTail(error);
79
+ if (detail)
80
+ console.log(chalk.gray(` 失败原因: ${detail}`));
81
+ console.log(chalk.gray(' 请在可写终端环境中重试,或手动指定可写目录安装。'));
82
+ console.log(chalk.cyan(' mkdir -p /path/to/writable/bin'));
83
+ console.log(chalk.cyan(' export ALIPAY_CLI_BIN="/path/to/writable/bin" && curl -fsSL https://opengw.alipay.com/alipaycli/install | bash'));
84
+ return false;
85
+ }
86
+ if (!(await isWritableDir(localBin))) {
87
+ console.log(chalk.red(` ✗ ${localBin} 不可写,无法自动安装 alipay-cli`));
88
+ console.log(chalk.gray(' 请在可写终端环境中重试,或手动指定可写目录安装。'));
89
+ console.log(chalk.cyan(' mkdir -p /path/to/writable/bin'));
90
+ console.log(chalk.cyan(' export ALIPAY_CLI_BIN="/path/to/writable/bin" && curl -fsSL https://opengw.alipay.com/alipaycli/install | bash'));
91
+ return false;
92
+ }
93
+ const spinner = ora('正在安装 alipay-cli 到 ~/.local/bin(无需 sudo)...').start();
94
+ try {
95
+ if (isInteractive()) {
96
+ spinner.stop();
97
+ }
98
+ // ALIPAY_CLI_BIN 环境变量控制安装脚本的目标目录
99
+ // 必须 export,否则 pipe 右侧的 bash 子进程拿不到
100
+ await execInteractive(`export ALIPAY_CLI_BIN="${localBin}" && curl -fsSL https://opengw.alipay.com/alipaycli/install | bash`, 300000);
101
+ console.log('');
102
+ spinner.start('正在验证 alipay-cli 安装...');
103
+ // 验证方式 1:通过 PATH 检查
104
+ const check = await checkAlipayCli();
105
+ if (check.installed) {
106
+ const inPath = await isDirInPath(localBin);
107
+ if (!inPath) {
108
+ await addDirToPath(localBin);
109
+ }
110
+ spinner.succeed(chalk.green(`alipay-cli 安装成功 (${check.version})`));
111
+ return true;
112
+ }
113
+ // 验证方式 2:直接用绝对路径检查(可能 ~/.local/bin 还没在 PATH 中)
114
+ const localCli = path.join(localBin, 'alipay-cli');
115
+ if (await checkCliAtPath(localCli)) {
116
+ spinner.succeed(chalk.green('alipay-cli 安装成功'));
117
+ const inPath = await isDirInPath(localBin);
118
+ if (!inPath) {
119
+ await addDirToPath(localBin);
120
+ }
121
+ return true;
122
+ }
123
+ // 安装完但 PATH 中找不到时,只检查当前安装目标目录。
124
+ if (await checkLocalBinPath(localBin)) {
125
+ return true;
126
+ }
127
+ spinner.fail(chalk.red('alipay-cli 安装后未找到'));
128
+ }
129
+ catch (error) {
130
+ spinner.fail(chalk.red('alipay-cli 安装失败'));
131
+ const detail = formatErrorTail(error);
132
+ if (detail)
133
+ console.log(chalk.gray(` 失败原因: ${detail}`));
134
+ }
135
+ // 安装失败,打印手动安装指引
136
+ console.log(chalk.gray(' 请手动执行以下命令安装:'));
137
+ console.log(chalk.cyan(' mkdir -p ~/.local/bin'));
138
+ console.log(chalk.cyan(' export ALIPAY_CLI_BIN="$HOME/.local/bin" && curl -fsSL https://opengw.alipay.com/alipaycli/install | bash'));
139
+ console.log(chalk.cyan(' echo \'export PATH="$HOME/.local/bin:$PATH"\' >> ~/.zshrc && source ~/.zshrc'));
140
+ return false;
141
+ }
142
+ /**
143
+ * 检查指定路径的 alipay-cli 是否可用
144
+ */
145
+ async function checkCliAtPath(cliPath) {
146
+ try {
147
+ const { stdout } = await execAsync(`"${cliPath}" version`, { timeout: 5000 });
148
+ return !!stdout.trim();
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * 检查 alipay-cli 是否已安装到当前目标目录但不在 PATH 中。
156
+ */
157
+ async function checkLocalBinPath(localBin) {
158
+ const cliPath = path.join(localBin, 'alipay-cli');
159
+ if (await checkCliAtPath(cliPath)) {
160
+ console.log(chalk.yellow(' ⚠ alipay-cli 已安装但不在 PATH 中'));
161
+ console.log(chalk.gray(` 安装路径: ${cliPath}`));
162
+ await addDirToPath(localBin);
163
+ return true;
164
+ }
165
+ return false;
166
+ }
167
+ /**
168
+ * 检查目录是否在 PATH 中
169
+ */
170
+ async function isDirInPath(dir) {
171
+ try {
172
+ const { stdout } = await execAsync('echo $PATH', { timeout: 3000 });
173
+ const pathDirs = stdout.trim().split(':');
174
+ return pathDirs.some((p) => p === dir);
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ /**
181
+ * 将目录添加到 PATH(写入 shell 配置文件)
182
+ */
183
+ async function addDirToPath(dir) {
184
+ const home = process.env.HOME || os.homedir() || '~';
185
+ const exportLine = `export PATH="${dir}:\$PATH"`;
186
+ // 检测 shell 配置文件
187
+ const shellRc = process.env.SHELL?.includes('zsh') ? '.zshrc' : '.bashrc';
188
+ const rcPath = path.join(home, shellRc);
189
+ try {
190
+ // 检查是否已添加
191
+ const content = await fs.readFile(rcPath, 'utf-8').catch(() => '');
192
+ if (content.includes(exportLine) || content.includes(dir)) {
193
+ console.log(chalk.gray(` ${dir} 已在 ${shellRc} 的 PATH 配置中`));
194
+ return;
195
+ }
196
+ // 追加到配置文件
197
+ await fs.appendFile(rcPath, `\n# Added by alipay-aipay\n${exportLine}\n`);
198
+ console.log(chalk.green(` ✓ 已将 ${dir} 添加到 ${shellRc}`));
199
+ console.log(chalk.gray(' 请运行以下命令使其生效:'));
200
+ console.log(chalk.cyan(` source ~/.${shellRc === '.bashrc' ? 'bashrc' : 'zshrc'}`));
201
+ }
202
+ catch {
203
+ // 写入失败,直接提示手动添加
204
+ console.log(chalk.yellow(` ⚠ alipay-cli 已安装但不在 PATH 中`));
205
+ console.log(chalk.gray(' 请运行以下命令添加到 PATH:'));
206
+ console.log(chalk.cyan(` echo '${exportLine}' >> ~/${shellRc} && source ~/${shellRc}`));
207
+ }
208
+ }
209
+ /**
210
+ * 确保 alipay-cli 已安装,未安装则自动安装
211
+ */
212
+ export async function ensureAlipayCli() {
213
+ const check = await checkAlipayCli();
214
+ if (check.installed) {
215
+ console.log(chalk.green(` ✓ alipay-cli 已安装 (${check.version})`));
216
+ return true;
217
+ }
218
+ console.log(chalk.yellow(' ⚠ alipay-cli 未安装,正在自动安装...'));
219
+ return await installAlipayCli();
220
+ }
221
+ //# sourceMappingURL=alipay-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alipay-cli.js","sourceRoot":"","sources":["../../src/utils/alipay-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { SkillMeta, CommandContext } from '../types.js';
2
+ export declare const PACKAGE_ROOT: string;
3
+ export declare const VERSION_FILE = ".alipay-aipay-version";
4
+ export declare const TARGET_DIRS: {
5
+ readonly codex: ".codex/skills";
6
+ readonly claude: ".claude/skills";
7
+ readonly agents: ".agents/skills";
8
+ };
9
+ export type InstallTargetName = keyof typeof TARGET_DIRS;
10
+ export type InstallTarget = InstallTargetName | 'auto' | 'all';
11
+ export declare const DEFAULT_TARGET: InstallTargetName;
12
+ export declare const EXTRA_SKILL_DIRS_ENV = "ALIPAY_AIPAY_EXTRA_SKILL_DIRS";
13
+ export declare const SKILL_NAME = "alipay-aipay";
14
+ export declare const SKILL_DIR = "skill";
15
+ /**
16
+ * 可安装的 skills 列表
17
+ */
18
+ export declare const SKILLS: SkillMeta[];
19
+ /**
20
+ * 根据环境变量和父进程识别当前 Agent。
21
+ */
22
+ export declare function detectCurrentAgentTarget(): InstallTargetName | null;
23
+ /**
24
+ * 解析安装目标
25
+ */
26
+ export declare function resolveInstallTarget(cwd: string, target?: Exclude<InstallTarget, 'all'>): InstallTargetName;
27
+ /**
28
+ * 获取内置支持的目标目录名。
29
+ */
30
+ export declare function getAllInstallTargetNames(): InstallTargetName[];
31
+ /**
32
+ * 读取用户追加的兼容 Skill 目录。
33
+ */
34
+ export declare function getExtraSkillDirs(): string[];
35
+ /**
36
+ * 获取批量安装目标上下文。默认扫描已存在的内置 Agent 目录;
37
+ * 若没有任何已存在目录,则回退到 .agents/skills。环境变量可追加兼容 Skill 目录。
38
+ */
39
+ export declare function getAllCommandContexts(cwd: string): CommandContext[];
40
+ /**
41
+ * 获取命令上下文
42
+ */
43
+ export declare function getCommandContext(cwd: string, target?: Exclude<InstallTarget, 'all'>): CommandContext;
44
+ /**
45
+ * 获取包版本
46
+ */
47
+ export declare function getPackageVersion(): string;
48
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7D,eAAO,MAAM,YAAY,QAAoC,CAAC;AAG9D,eAAO,MAAM,YAAY,0BAA0B,CAAC;AAGpD,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAQX,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,WAAW,CAAC;AACzD,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/D,eAAO,MAAM,cAAc,EAAE,iBAA4B,CAAC;AAG1D,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AAGpE,eAAO,MAAM,UAAU,iBAAiB,CAAC;AAGzC,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,SAAS,EAM7B,CAAC;AA2BF;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,GAAG,IAAI,CAgCnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAU,GAC7C,iBAAiB,CA4BnB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAQ5C;AAyBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAkBnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAU,GAC7C,cAAc,CAIhB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
@@ -0,0 +1,207 @@
1
+ import path from 'path';
2
+ import os from 'os';
3
+ import { createHash } from 'crypto';
4
+ import { fileURLToPath } from 'url';
5
+ import fs from 'fs';
6
+ import { execFileSync } from 'child_process';
7
+ // 获取当前包的根目录
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ export const PACKAGE_ROOT = path.resolve(__dirname, '../../');
10
+ // 版本文件名
11
+ export const VERSION_FILE = '.alipay-aipay-version';
12
+ // 目标目录。auto 会优先识别当前 Agent,识别不到再回退到已有目录或默认目录。
13
+ export const TARGET_DIRS = {
14
+ codex: '.codex/skills',
15
+ claude: '.claude/skills',
16
+ agents: '.agents/skills',
17
+ };
18
+ const TARGET_ROOT_DIRS = {
19
+ codex: '.codex',
20
+ claude: '.claude',
21
+ agents: '.agents',
22
+ };
23
+ export const DEFAULT_TARGET = 'agents';
24
+ // 用户可通过环境变量追加兼容 SKILL.md 的 skills 目录,多个目录用英文逗号分隔。
25
+ export const EXTRA_SKILL_DIRS_ENV = 'ALIPAY_AIPAY_EXTRA_SKILL_DIRS';
26
+ // Skill 名称
27
+ export const SKILL_NAME = 'alipay-aipay';
28
+ // Skill 内容所在目录(包内的相对路径)
29
+ export const SKILL_DIR = 'skill';
30
+ /**
31
+ * 可安装的 skills 列表
32
+ */
33
+ export const SKILLS = [
34
+ {
35
+ name: SKILL_NAME,
36
+ displayName: '支付宝AI支付',
37
+ description: '支付宝AI支付技能包 - 按量付费、网站支付、APP支付集成与签约入驻',
38
+ },
39
+ ];
40
+ /**
41
+ * 读取父进程命令名。仅作为辅助判断,失败时不影响安装。
42
+ */
43
+ function getParentProcessName(pid) {
44
+ try {
45
+ const result = fs
46
+ .readFileSync(`/proc/${pid}/comm`, 'utf-8')
47
+ .trim();
48
+ return result || null;
49
+ }
50
+ catch {
51
+ // macOS 没有 /proc,或沙箱环境禁止读取时走 ps 兜底
52
+ }
53
+ try {
54
+ const result = execFileSync('ps', ['-p', String(pid), '-o', 'comm='], {
55
+ encoding: 'utf-8',
56
+ stdio: ['ignore', 'pipe', 'ignore'],
57
+ timeout: 1000,
58
+ }).trim();
59
+ return result || null;
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ /**
66
+ * 根据环境变量和父进程识别当前 Agent。
67
+ */
68
+ export function detectCurrentAgentTarget() {
69
+ const env = process.env;
70
+ const envKeys = Object.keys(env);
71
+ if (envKeys.some((key) => key.startsWith('CODEX_'))) {
72
+ return 'codex';
73
+ }
74
+ const hasClaudeEnv = envKeys.some((key) => key.startsWith('CLAUDE_CODE_'));
75
+ if (hasClaudeEnv) {
76
+ return 'claude';
77
+ }
78
+ let pid = process.ppid;
79
+ for (let depth = 0; pid && depth < 8; depth++) {
80
+ const name = getParentProcessName(pid);
81
+ if (!name)
82
+ break;
83
+ const normalized = name.toLowerCase();
84
+ if (normalized.includes('codex'))
85
+ return 'codex';
86
+ if (normalized.includes('claude'))
87
+ return 'claude';
88
+ try {
89
+ const stat = fs.readFileSync(`/proc/${pid}/stat`, 'utf-8');
90
+ const parts = stat.trim().split(/\s+/);
91
+ pid = Number(parts[3]);
92
+ }
93
+ catch {
94
+ break;
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+ /**
100
+ * 解析安装目标
101
+ */
102
+ export function resolveInstallTarget(cwd, target = 'auto') {
103
+ if (target === 'agents' || target === 'claude') {
104
+ return target;
105
+ }
106
+ if (target === 'codex') {
107
+ return target;
108
+ }
109
+ const currentAgentTarget = detectCurrentAgentTarget();
110
+ if (currentAgentTarget && currentAgentTarget !== 'agents') {
111
+ return currentAgentTarget;
112
+ }
113
+ const agentsSkillDir = path.join(cwd, TARGET_DIRS.agents, SKILL_NAME);
114
+ const codexSkillDir = path.join(cwd, TARGET_DIRS.codex, SKILL_NAME);
115
+ const claudeSkillDir = path.join(cwd, TARGET_DIRS.claude, SKILL_NAME);
116
+ if (fs.existsSync(codexSkillDir))
117
+ return 'codex';
118
+ if (fs.existsSync(agentsSkillDir))
119
+ return 'agents';
120
+ if (fs.existsSync(claudeSkillDir))
121
+ return 'claude';
122
+ const agentsDir = path.join(cwd, TARGET_DIRS.agents);
123
+ const codexDir = path.join(cwd, TARGET_DIRS.codex);
124
+ const claudeDir = path.join(cwd, TARGET_DIRS.claude);
125
+ if (fs.existsSync(codexDir))
126
+ return 'codex';
127
+ if (fs.existsSync(agentsDir))
128
+ return 'agents';
129
+ if (fs.existsSync(claudeDir))
130
+ return 'claude';
131
+ return DEFAULT_TARGET;
132
+ }
133
+ /**
134
+ * 获取内置支持的目标目录名。
135
+ */
136
+ export function getAllInstallTargetNames() {
137
+ return Object.keys(TARGET_DIRS);
138
+ }
139
+ /**
140
+ * 读取用户追加的兼容 Skill 目录。
141
+ */
142
+ export function getExtraSkillDirs() {
143
+ const raw = process.env[EXTRA_SKILL_DIRS_ENV];
144
+ if (!raw)
145
+ return [];
146
+ return raw
147
+ .split(',')
148
+ .map((item) => item.trim())
149
+ .filter((item) => item.length > 0 && !item.includes('\0'));
150
+ }
151
+ function createCommandContext(cwd, targetDirLabel) {
152
+ const targetDir = path.isAbsolute(targetDirLabel)
153
+ ? targetDirLabel
154
+ : path.join(cwd, targetDirLabel);
155
+ const skillDir = path.join(targetDir, SKILL_NAME);
156
+ const resolvedTargetDir = path.resolve(targetDir);
157
+ const versionFileName = `${createHash('sha256').update(resolvedTargetDir).digest('hex')}.json`;
158
+ return {
159
+ cwd,
160
+ targetDir,
161
+ versionFile: path.join(os.homedir(), '.config', 'alipay-aipay', 'install-records', versionFileName),
162
+ legacyVersionFile: path.join(skillDir, VERSION_FILE),
163
+ targetDirLabel,
164
+ };
165
+ }
166
+ function getExistingInstallTargetNames(cwd) {
167
+ return getAllInstallTargetNames().filter((targetName) => fs.existsSync(path.join(cwd, TARGET_ROOT_DIRS[targetName])));
168
+ }
169
+ /**
170
+ * 获取批量安装目标上下文。默认扫描已存在的内置 Agent 目录;
171
+ * 若没有任何已存在目录,则回退到 .agents/skills。环境变量可追加兼容 Skill 目录。
172
+ */
173
+ export function getAllCommandContexts(cwd) {
174
+ const targetNames = getExistingInstallTargetNames(cwd);
175
+ if (targetNames.length === 0) {
176
+ targetNames.push(DEFAULT_TARGET);
177
+ }
178
+ const contexts = targetNames.map((targetName) => getCommandContext(cwd, targetName));
179
+ const seen = new Set(contexts.map((ctx) => path.resolve(ctx.targetDir)));
180
+ for (const extraDir of getExtraSkillDirs()) {
181
+ const ctx = createCommandContext(cwd, extraDir);
182
+ const resolved = path.resolve(ctx.targetDir);
183
+ if (seen.has(resolved))
184
+ continue;
185
+ seen.add(resolved);
186
+ contexts.push(ctx);
187
+ }
188
+ return contexts;
189
+ }
190
+ /**
191
+ * 获取命令上下文
192
+ */
193
+ export function getCommandContext(cwd, target = 'auto') {
194
+ const targetName = resolveInstallTarget(cwd, target);
195
+ const targetDirLabel = TARGET_DIRS[targetName];
196
+ return createCommandContext(cwd, targetDirLabel);
197
+ }
198
+ /**
199
+ * 获取包版本
200
+ */
201
+ export function getPackageVersion() {
202
+ const pkgPath = path.join(PACKAGE_ROOT, 'package.json');
203
+ const content = fs.readFileSync(pkgPath, 'utf-8');
204
+ const pkg = JSON.parse(content);
205
+ return pkg.version;
206
+ }
207
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { CommandContext, VersionRecord } from '../types.js';
2
+ /**
3
+ * 检查目录是否存在
4
+ */
5
+ export declare function dirExists(dir: string): Promise<boolean>;
6
+ /**
7
+ * 确保目录存在
8
+ */
9
+ export declare function ensureDir(dir: string): Promise<void>;
10
+ /**
11
+ * 递归复制目录(保留 .sh 文件执行权限)
12
+ */
13
+ export declare function copyDirWithPerms(src: string, dest: string): Promise<void>;
14
+ /**
15
+ * 递归复制目录(通用,不处理权限)
16
+ */
17
+ export declare function copyDir(src: string, dest: string): Promise<void>;
18
+ /**
19
+ * 递归删除目录
20
+ */
21
+ export declare function removeDir(dir: string): Promise<void>;
22
+ /**
23
+ * 删除文件
24
+ */
25
+ export declare function removeFile(filePath: string): Promise<void>;
26
+ /**
27
+ * 读取版本记录文件
28
+ */
29
+ export declare function readVersionFile(versionFilePath: string): Promise<VersionRecord | null>;
30
+ /**
31
+ * 读取安装记录。兼容旧版本曾写入 skill 目录内的隐藏记录文件。
32
+ */
33
+ export declare function readVersionRecord(ctx: CommandContext): Promise<VersionRecord | null>;
34
+ /**
35
+ * 将旧版 skill 目录内的隐藏安装记录迁移到用户配置目录。
36
+ */
37
+ export declare function migrateVersionRecord(ctx: CommandContext, record: VersionRecord): Promise<void>;
38
+ /**
39
+ * 写入版本记录文件
40
+ */
41
+ export declare function writeVersionFile(versionFilePath: string, record: VersionRecord): Promise<void>;
42
+ /**
43
+ * 安装 Skill 文件到目标目录
44
+ * 从包内 skill/ 目录复制 SKILL.md + references/ 到目标 skills 目录
45
+ */
46
+ export declare function installSkillFiles(packageRoot: string, targetDir: string): Promise<void>;
47
+ /**
48
+ * 检查 skill 是否已安装
49
+ */
50
+ export declare function isSkillInstalled(targetDir: string, skillName: string): Promise<boolean>;
51
+ /**
52
+ * 获取目标目录中已存在的 skills
53
+ */
54
+ export declare function getExistingSkills(targetDir: string, skillNames: string[]): Promise<string[]>;
55
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/E;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAetE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAO/B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB"}