@alipay/alipay-aipay 1.7.3 → 1.7.4
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/dist/commands/install.js +24 -17
- package/package.json +3 -3
- package/skill/SKILL.md +24 -2
- package/skill/VERSION +1 -1
- package/skill/references/normal/json/customer-messages.json +1 -1
- package/skill/references/normal/scripts/channel_offer.mjs +83 -0
- package/skill/references/normal/scripts/runtime.mjs +3 -1
- package/skill-pre/SKILL.md +23 -3
- package/skill-pre/VERSION +1 -1
- package/skill-pre/references/integration/flow.md +43 -25
- package/skill-pre/references/integration/modules/checklist.md +4 -4
- package/skill-pre/references/integration/modules/sandbox/sandbox-setup-guide.md +33 -33
- package/skill-pre/references/integration/modules/scripts/local_402_sandbox_pay.py +3 -3
- package/skill-pre/references/integration/modules/scripts/sandbox_config.sh +12 -2
- package/skill-pre/references/normal/alipay-cli-env.md +3 -1
- package/skill-pre/references/normal/conversation-telemetry.md +2 -2
- package/skill-pre/references/normal/full-process-routing.md +2 -2
- package/skill-pre/references/normal/json/policy-rules.json +1 -1
- package/skill-pre/references/normal/scripts/alipay_cli_env.mjs +9 -0
- package/skill-pre/references/normal/scripts/alipay_cli_refresh.mjs +10 -1
- package/skill-pre/references/normal/scripts/auth_runtime_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/common.sh +11 -1
- package/skill-pre/references/normal/scripts/onboarding_discovery_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/onboarding_message_runner.mjs +10 -1
- package/skill-pre/references/normal/scripts/onboarding_recovery_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/open_official_url.sh +10 -2
- package/skill-pre/references/normal/scripts/python_script_runner.mjs +9 -4
- package/skill-pre/references/normal/scripts/render_customer_message.mjs +4 -2
- package/skill-pre/references/normal/scripts/runtime.mjs +50 -6
- package/skill-pre/references/normal/scripts/telemetry.mjs +9 -0
- package/skill-pre/references/normal/scripts/windows/acl-native.mjs +3 -0
- package/skill-pre/references/normal/scripts/windows/acl.mjs +41 -0
- package/skill-pre/references/normal/scripts/windows/bin/alipay-cli +4 -0
- package/skill-pre/references/normal/scripts/windows/bootstrap-node.ps1 +140 -0
- package/skill-pre/references/normal/scripts/windows/cli-install.mjs +51 -0
- package/skill-pre/references/normal/scripts/windows/cli-process.mjs +11 -0
- package/skill-pre/references/normal/scripts/windows/execution.mjs +51 -0
- package/skill-pre/references/normal/scripts/windows/git-discovery.mjs +42 -0
- package/skill-pre/references/normal/scripts/windows/policy.json +13 -0
- package/skill-pre/references/normal/scripts/windows/preflight.mjs +182 -0
- package/skill-pre/references/normal/scripts/windows/prepare.mjs +83 -0
- package/skill-pre/references/normal/scripts/windows/probe.sh +14 -0
- package/skill-pre/references/normal/scripts/windows/python-execution.mjs +38 -0
- package/skill-pre/references/normal/scripts/windows/python-runtime.mjs +85 -0
- package/skill-pre/references/normal/scripts/windows/routing.mjs +83 -0
- package/skill-pre/references/normal/scripts/windows/shell_helpers.sh +83 -0
- package/skill-pre/references/normal/windows-environment.md +82 -0
- package/skill-pre/references/onboarding/flow.md +4 -1
- package/skill-pre/references/onboarding/modules/scripts/app.sh +1 -0
- package/skill-pre/references/onboarding/modules/scripts/ar_sign_apply.sh +10 -6
- package/skill-pre/references/onboarding/modules/scripts/auth.sh +1 -0
- package/skill-pre/references/runtime-entry.md +13 -4
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Windows 兼容环境
|
|
2
|
+
|
|
3
|
+
仅真实 Windows 加载本层。目标为 Windows 10/11 原生 Intel/AMD x64,Node >=18(沿用仓库最低版本声明);不通过 OS build 白名单推定能力,不承诺 ARM64、x86 或 WSL。当前移植依据是 Windows 工程验证交付包,尚不能宣称 Windows 10、干净安装或全部真实业务分支已验收。
|
|
4
|
+
|
|
5
|
+
Windows 原生 Node 调度明确选定的 Git for Windows Bash,原 Shell 脚本使用 Windows 原生 jq 与 alipay-cli。兼容层只处理依赖、路径、进程和 NTFS 权限;产品映射、CLI/MCP 命令、请求、业务确认、失败恢复和完成条件仍以真实 flow 和原脚本为准。Windows 的 Integration 继续由当前 Agent 串行执行,不启用 Worker。
|
|
6
|
+
|
|
7
|
+
## 启动与分流
|
|
8
|
+
|
|
9
|
+
Windows 首次使用时先按根 `SKILL.md` 直接探测 PATH 中的原生 Node;未找到合格 Node 才使用固定 PowerShell 引导检查其他安装位置,并在必要且获授权时有限准备。随后按根 `SKILL.md` 完成原自更新、内测声明、服务/采集选择和唯一 SESSION_ID 和本对话首次 CLI 刷新(或命中同路径/版本的成功事实)。Windows 刷新通过原生 PowerShell 完成,不依赖 Bash/jq;随后在 `runtime-entry.md` 中识别三种原根意图后、bootstrap/start-run 前执行一次:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" windows-entry --root-intent "<ROOT_INTENT>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
当前任务已有准备依赖授权时追加 `--prepare-authorized true`,无授权则只检查;不新增必答安装确认,也不把依赖准备当作登录、签约或应用写入授权。宿主权限边界保持不变。
|
|
16
|
+
|
|
17
|
+
退出 0 只表示分流已完成。必须取得唯一 `ALIPAY_AIPAY_INTERNAL:WINDOWS_ROUTE=<JSON>`,校验 schemaVersion=1、rootIntent 等于当前根意图、route 为 READY 或 LEGACY;非零、超时、缺失或冲突按 LEGACY,不猜测就绪。所有后续 Windows runtime 命令附加 `--windows-route "<READY|LEGACY>"`。普通回复、切换业务阶段和 Full Process 衔接不重新安装。只有下文明确修复后的复检成功可更新该事实;READY 只用于选择原 flow 分支,实际 Shell/CLI 业务前仍复检能力。
|
|
18
|
+
|
|
19
|
+
- READY:Integration 使用 flow 登记的快速沙箱 ensure/reverify/summary;Onboarding 平台入口复检通过、stdout 为空后执行原本地流程。
|
|
20
|
+
- LEGACY:Integration 的 `env integration-check` 仅检查原生 Node,保留原手工沙箱/VERIFY_PENDING 和独立代码开发;Onboarding 仍由 `onboarding-message platform-entry` 渲染原登记站点消息并按原规则收口。Full Process 必须先完成 Integration 及原衔接门禁,保留其实际结果。
|
|
21
|
+
|
|
22
|
+
环境失败不关闭遥测,不改 SESSION_ID、run_id、计数、stage 或采集授权。Native Node 的声明、消息、项目检查和遥测不要求 Bash/jq/CLI。站点引导仍使用原 runner 的平台标识与 summary 规则;缺少必要上下文时按原错误分支停止,不编造标识或另写消息。
|
|
23
|
+
|
|
24
|
+
## Windows CLI 安装契约
|
|
25
|
+
|
|
26
|
+
Agent 仍只调用根启动器登记的 `env refresh-alipay-cli`。封装在独立、无 profile、非交互的系统 PowerShell 子进程中设置 `$env:ALIPAY_CLI_BIN = "$HOME\.local\bin"`、`$env:ALIPAY_CLI_SKIP_VERIFY = "true"`,执行 `irm https://opengw.alipay.com/alipaycli/install_ps1 | iex`。正式安装器按其 manifest 选择当前 release,不固定 `alipay-cli.exe` 版本;封装在成功后另用绝对路径执行已安装 EXE 的 `version`。`ALIPAY_CLI_SKIP_VERIFY=true` 会跳过安装器的 SHA-256 校验,这不是文件哈希校验的替代品。
|
|
27
|
+
|
|
28
|
+
不传业务 PLATFORM/PLATFORM_ID/PRODUCT/ALIPAYCLI_BIZ_INFO,清除子进程继承的 CLI 版本、渠道、清单和跳过校验覆盖。没有 Git Bash/jq 前置,不提权、不修改系统 PATH;正式安装器会尝试把目标目录加入用户 PATH,当前父进程的 PATH 不会因子进程更新而改变。父进程 HOME/TEMP、会话与采集环境不变。
|
|
29
|
+
|
|
30
|
+
stdout 为空、原始安装器输出不对客,只映射根协议的唯一刷新终态:成功并独立启动验证通过为 READY;网络、用户目录权限分别为 RETRY_WITH_NETWORK / RETRY_WITH_LOCAL_FS_PERMISSION;校验失败为 VERIFY_FAILED;其他失败为 FAILED。沿用根协议的有限同命令重试,不在封装内部循环。安装器报权限错误也不自动提权。
|
|
31
|
+
|
|
32
|
+
## 有限环境准备
|
|
33
|
+
|
|
34
|
+
CLI 刷新策略与非 Windows 保持同一会话预算,不锁定 0.1.7 或其哈希;Windows 交由正式 PowerShell 安装器选择版本。jq 优先复用能通过版本和实际 filter 检查的既有原生工具;缺失或不可用时安装固定 1.7.1,官方 HTTPS 资产和 SHA-256 位于 `scripts/windows/policy.json`。Node 优先复用当前原生 x64 Node >=18;缺失时由根启动器的 PowerShell 引导准备官方 LTS 用户级 ZIP,SHA-256 验证后返回绝对可执行路径,首次一次、明确修复最多一次。Git Bash 从常见目录和本机 PATH 的 Git 安装布局定位,也可由 `ALIPAY_GIT_BASH` 指定绝对路径;必须验证 Git for Windows 版本、cygpath 和 Bash 的 MINGW/MSYS 平台,不使用 System32/WSL Bash,显式指定错误时停止而不偷偷换工具。
|
|
35
|
+
|
|
36
|
+
初次仅缺依赖或本机 `alipay-cli.exe` 无法启动且已有授权时,按 Git Bash → jq → 必要的 CLI 修复 → 完整复检准备一次。CLI 已可用时不重复安装;仅缺失/不可用时由同一正式 PowerShell 安装器修复。Git 仅在本机有 winget 时使用登记的用户级安装,最多 120 秒;winget 不是 Windows 必备组件,缺失时转下述 Git 官方手动安装指引。jq 单次资产下载最多 60 秒,验证 SHA-256 后落盘并检查实际启动;CLI 整次刷新最多 60 秒,完成后由 Node 单独验证目标 `.exe version`,限时 5 秒。jq 托管安装只替换用户目录中缺失或不可用的 jq,不覆盖健康的其他版本;网络、架构、权限或完整性失败不靠重装解决。失败即 LEGACY,不轮换镜像、包管理器、WSL 或 shell,不提权、不修改执行策略、系统级 PATH 或 HOME。Windows CLI 安装器可能持久更新用户 PATH。
|
|
37
|
+
|
|
38
|
+
环境诊断及次数保存在 `%LOCALAPPDATA%/alipay-aipay-pre/windows/environment.json`,不含业务材料。重载和普通回复不清零;短期锁最多等待 2 秒。锁持续占用或诊断状态损坏时,已通过完整工具检查的只读 READY 仍可继续;自动安装保持阻断,不删除锁或状态绕过预算。
|
|
39
|
+
|
|
40
|
+
用户明确修复并要求重试后,可再次只读复检当前环境;每次复检仍完整检查工具执行、路径和 ACL,成功才解除已有阻断。复检不执行安装、不清零安装次数,后续再次发生故障时也可在用户修好后复检。自动安装仍仅首次一次、明确修复后最多额外一次。手工修复后的复检:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env retry --repair-confirmed true --root-intent "<ROOT_INTENT>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>" --windows-route LEGACY
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
需要再次安装且已有依赖准备授权时:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env prepare --authorized true --repair-confirmed true --root-intent "<ROOT_INTENT>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>" --windows-route LEGACY
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
必须退出 0,同时取得唯一 `CLI_ENV:READY` 和唯一 `ALIPAY_AIPAY_INTERNAL:WINDOWS_ROUTE=<JSON>`,且 JSON 的 schemaVersion=1、rootIntent 等于本轮根意图、route=READY,才将本轮后续 runtime 命令的 `--windows-route` 更新为 READY。缺失、冲突、非零或仅有 `CLI_ENV:READY` 时保持 LEGACY 并停止依赖动作;不重建 SESSION_ID/run_id,不重计用户输入或重跑 `windows-entry`。旧阻断只记录最近失败原因,不代替当前完整本地检查;当前复检失败仍阻断,成功才允许更新为 READY,准备/安装次数不重置。winget 不可用、用户级 Git 安装不适用或版本冲突时,由用户按 [Git for Windows 官方入口](https://gitforwindows.org/)及实际失败项手工修复,不自动改为系统级安装,也不因缺少 winget 循环尝试。
|
|
53
|
+
|
|
54
|
+
## 路径、权限与进程
|
|
55
|
+
|
|
56
|
+
Skill 自有动作始终执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" ...`;不要把 Bash 脚本、环境变量赋值或 Unix 管道贴到 PowerShell。命令中的值占位符由 Agent 替换,JSON 通过宿主参数数组传递或按当前 shell 正确引用;不要把 `$RUN_ID` 等说明占位符当作已存在的 PowerShell 变量。
|
|
57
|
+
|
|
58
|
+
只转换登记的项目、配置、上传文件和脚本路径;JSON、URL、scope、公钥和业务上下文保持原样。禁用 MSYS 隐式参数转换后,适配器显式转换 `git -C` 和 native Node/jq/CLI 文件参数。快速沙箱终态的路径由 gateway 归一化为原生盘符绝对路径,脚本内部比较不变。
|
|
59
|
+
|
|
60
|
+
大 jq `--argjson` 值使用受保护临时文件,MCC 目录使用 Node stdin,原 CLI 的 `-d/--data` 不改写;超出原生进程参数预算时明确失败,不能换未经确认的 CLI 参数。同步/异步 Shell 执行共享同一 Git Bash 适配器;CLI 最多 60 秒、业务 Shell 最多 180 秒,超时不等于未发送或业务成功,仍按原只读核验/UNKNOWN 规则处理。
|
|
61
|
+
|
|
62
|
+
敏感存储要求本地 NTFS。icacls 设置 DACL,固定系统 PowerShell 只读回权限;仅允许当前用户、SYSTEM、Administrators。拒绝符号链接和根目录,不能用 chmod 成功替代 ACL 证据。沙箱敏感内容写入前先保护临时文件,保护失败不得写入或使用字段。
|
|
63
|
+
|
|
64
|
+
Shell 业务子进程的临时文件放在上述环境目录的私有 tmp 中;gateway 本身不切换 TEMP/TMP,不改变现有遥测目录。Shell 子进程用原 `telemetryStoragePaths()` 明确绑定原来的遥测目录及既有覆盖项,保证声明选择、会话、run、outbox 和上传状态连续。遥测文件仅增加 Windows 权限适配,业务计数、采集及上传逻辑不变;权限失败沿用原静默失败语义。
|
|
65
|
+
|
|
66
|
+
402 联调仍由原生 Python 3 执行,不依赖 Git Bash。其 Node 启动器在系统临时目录下创建本次命令的独立空目录,经同一 NTFS ACL 设置和读回验证后才启动 Python;仅该子进程的 TEMP/TMP/TMPDIR 与 Python `tempfile.tempdir` 指向此目录,禁止不可用时回退到其他目录。过程产物及 curl 响应文件继承受限 ACL;ACL 失败不启动联调,子进程结束或启动异常后尽力清理本次目录,清理失败只输出内部诊断且不覆盖原始执行结果,不重放请求。父进程环境、原 Python 业务脚本、参数和退出码不变;强制终止父进程可能留下受保护目录,不作为恢复依据。
|
|
67
|
+
|
|
68
|
+
Windows 签约请求的 UUID 使用已有 Node 生成,仅此步骤不要求 python3/uuidgen;Unix/macOS/Linux 保留原依赖检查与生成方式。402 联调仍需 Python 3,此项依赖未被取消。
|
|
69
|
+
|
|
70
|
+
## 失败处理
|
|
71
|
+
|
|
72
|
+
所有兼容层内部 marker 只写 stderr 且以 `ALIPAY_AIPAY_INTERNAL:` 开头,不对客。`WINDOWS_ENV_RESULT` 表示环境诊断;`WINDOWS_BUSINESS_BLOCKED=ENVIRONMENT_UNAVAILABLE` 表示 gateway 在启动本次业务脚本前阻断,退出非零,本次业务 CLI 调用为零。
|
|
73
|
+
|
|
74
|
+
Integration 在上述明确的调用前阻断时按 flow 转 LEGACY,继续独立代码开发,沙箱及依赖动作保持未完成。沙箱脚本已经启动后,只接受原 flow 的 READY、CREATE_PENDING、VERIFY_PENDING 和精确 LOCAL_FS_RECOVERY;非零、超时、协议冲突仍停止核对,不将异常伪装成待配置、不重放原 MCP、不读取敏感配置补造成功证据。
|
|
75
|
+
|
|
76
|
+
Onboarding 的环境失败停止依赖动作;修复后先按原只读入口查询实际状态。授权、材料、资格和审核错误仍归原业务分支,不能统一解释为 Windows 失败。所有原有交付屏障、阻塞确认、未知写结果规则和最终收口仍有效。
|
|
77
|
+
|
|
78
|
+
## 402 的 Python 依赖
|
|
79
|
+
|
|
80
|
+
仅按量付费联调前由真实 Integration flow 登记的 `env check-python` / `env prepare-python` 准备。优先复用 `py -3`、`python`、`python3` 和常见用户/系统 Python 安装;以实际 Python 3、Windows 平台及当前脚本无 main 加载验证可用性,取得绝对解释器路径供同一启动器使用。缺失且已获依赖准备授权时只调用 winget 官方源的 `Python.Python.3.14` 用户级 x64 安装,超时 180 秒,随后重新发现并验证。winget 包的用户安装条目与官方 python.org 产物已只读核验;具体安装器按其既有行为可能更新用户 PATH,不修改系统 PATH、不主动提权。
|
|
81
|
+
|
|
82
|
+
Python 安装次数保存在独立 `python-environment.json`,首次一次、明确修复最多一次;不消耗或重置 Git/jq/CLI 预算、不影响遥测状态。安装失败不启动联调,不自动尝试其他来源;网站支付、APP 支付及单独开通不准备 Python。正式版依赖策略保持原样。
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:START -->
|
|
2
2
|
# 支付产品-产品开通流程说明
|
|
3
3
|
|
|
4
|
+
Windows 的 READY/LEGACY 取根入口唯一分流,或 Windows 环境文档明确修复后唯一、根意图匹配的新 READY 事实;后续 runtime 命令追加当前有效的 `--windows-route`。READY 通过兼容层执行本 flow 原授权、查询、材料、写操作和收口;LEGACY 只执行原站点引导。环境检查失败不修改业务状态、遥测开关或会话采集选择。业务调用前若返回非零及 `WINDOWS_BUSINESS_BLOCKED=ENVIRONMENT_UNAVAILABLE`,停止依赖该环境的动作,不重放写入;修复后按 Windows 环境文档有限复检,再按原只读查询核验实际状态。未知业务结果仍沿用原恢复规则。
|
|
5
|
+
|
|
4
6
|
> ⚠️ **前置声明**:本 flow 仅支持 **AI 网页应用收款、AI 移动应用收款、AI 按量付费**三种产品的产品开通。原有“网站支付”“APP 支付”“按量付费”仍作为输入别名和资源目录名。**其他产品(当面付、订单码支付、JSAPI支付、预授权支付、商家扣款等)暂不支持**,如需开通请前往[支付宝商家平台](https://b.alipay.com/page/portal/home)完成。
|
|
5
7
|
|
|
6
8
|
---
|
|
@@ -62,7 +64,7 @@ Step 1: 方案规划 → Step 2: 环境检查 → Step 3: 登录授权
|
|
|
62
64
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message platform-entry --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
63
65
|
```
|
|
64
66
|
|
|
65
|
-
- Windows:runner 优先从正式 run 取 `run_id` 生成 `platform_id`,没有正式 run 时退回当前会话可用的平台标识;禁止 Agent
|
|
67
|
+
- Windows READY:平台入口复检通过且 stdout 为空时继续本地 Onboarding。Windows LEGACY:runner 优先从正式 run 取 `run_id` 生成 `platform_id`,没有正式 run 时退回当前会话可用的平台标识;禁止 Agent 传入或拼接;沿用原消息遥测映射,不额外生成 summary 或关闭 run;送达唯一 stdout 后停止 Onboarding;`full_process` 保留 Integration 结果。
|
|
66
68
|
- 非 Windows:成功且 stdout 为空即继续;失败或输出不唯一时停止核对,禁止手写引导。
|
|
67
69
|
|
|
68
70
|
用户明确要用企业账号通过 Skill 开通时执行下列消息并停止 Onboarding;不得主动询问账号类型,也不得从 MCC、营业执照或“公司”等描述推断。
|
|
@@ -148,6 +150,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-execute-read
|
|
|
148
150
|
```
|
|
149
151
|
|
|
150
152
|
- 唯一 `CLI_ENV:READY`:直接进入 Step 3,不读取完整安装文档。
|
|
153
|
+
- Windows 环境不就绪:停止本地业务,依照 `../normal/windows-environment.md` 有限恢复;不执行下面的 Unix 包管理器安装链。
|
|
151
154
|
- `CLI_ENV:NEEDS_SETUP`:此时才读取 `../normal/alipay-cli-env.md`。若唯一 `CLI_ENV_MISSING` 含 `jq`,先以所需网络和 `~/.local/bin` 写权限执行一次 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env prepare-jq --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;唯一 `ALIPAY_AIPAY_INTERNAL:JQ_PREPARE=READY` 后原样重跑 `env check`。`FAILED|UNSUPPORTED`,或 `READY` 后复检仍缺 jq 时,由 Agent 按环境文档执行当前系统首选包管理器兜底并再次复检;macOS 必须从清华镜像开始,明确失败后才依次选阿里云、中科大和直连,不并发、不回到 `prepare-jq`。其他缺失项按既有安装、PATH、联网权限和验证规则补齐后重跑同一检查;不得重复执行 `prepare-jq` 或新增确认,未取得 `CLI_ENV:READY` 不得进 Step 3。
|
|
152
155
|
- 其他输出、非 0 或 marker 冲突:停在本步骤核对脚本,不得猜测环境已就绪。
|
|
153
156
|
|
|
@@ -31,6 +31,7 @@ fi
|
|
|
31
31
|
|
|
32
32
|
app_key_secure_mode() {
|
|
33
33
|
local target="$1" expected="$2" mode
|
|
34
|
+
if declare -F windows_protect >/dev/null; then windows_protect "$target"; return $?; fi
|
|
34
35
|
if mode=$(stat -f '%Lp' "$target" 2>/dev/null); then
|
|
35
36
|
:
|
|
36
37
|
elif mode=$(stat -c '%a' "$target" 2>/dev/null); then
|
|
@@ -27,13 +27,17 @@ source "${SCRIPT_DIR}/network_retry.sh"
|
|
|
27
27
|
require_command jq || exit 1
|
|
28
28
|
require_command alipay-cli || exit 1
|
|
29
29
|
|
|
30
|
-
if ! command -v python3 >/dev/null 2>&1 && ! command -v uuidgen >/dev/null 2>&1; then
|
|
31
|
-
echo "❌ 缺少依赖命令: python3 或 uuidgen"
|
|
32
|
-
exit 1
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
30
|
# 生成 UUID 作为 bizRequestNo
|
|
36
|
-
|
|
31
|
+
if declare -F windows_protect >/dev/null; then
|
|
32
|
+
require_command node || exit 1
|
|
33
|
+
BIZ_REQUEST_NO=$(node -e 'console.log(require("node:crypto").randomUUID())') || exit 78
|
|
34
|
+
else
|
|
35
|
+
if ! command -v python3 >/dev/null 2>&1 && ! command -v uuidgen >/dev/null 2>&1; then
|
|
36
|
+
echo "❌ 缺少依赖命令: python3 或 uuidgen"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
BIZ_REQUEST_NO=$(python3 -c "import uuid; print(uuid.uuid4())" 2>/dev/null || uuidgen | tr '[:upper:]' '[:lower:]')
|
|
40
|
+
fi
|
|
37
41
|
|
|
38
42
|
# 优先使用 --product 参数,未传时从环境变量继承
|
|
39
43
|
PRODUCT_TYPE="${PRODUCT_TYPE:-}"
|
|
@@ -78,6 +78,7 @@ fi
|
|
|
78
78
|
|
|
79
79
|
secure_mode() {
|
|
80
80
|
local target="$1" expected="$2" mode
|
|
81
|
+
if declare -F windows_protect >/dev/null; then windows_protect "$target"; return $?; fi
|
|
81
82
|
if mode=$(stat -f '%Lp' "$target" 2>/dev/null); then
|
|
82
83
|
:
|
|
83
84
|
elif mode=$(stat -c '%a' "$target" 2>/dev/null); then
|
|
@@ -54,7 +54,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
|
|
|
54
54
|
|
|
55
55
|
从首条 bootstrap/start-run 起,本文件及所有 flow 登记的每条 runtime 命令均追加 `--agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`,将两个占位符分别替换为当前工具名称和根入口已取得的同一会话 ID;不使用环境变量前缀,不依赖前一次工具调用的进程环境。gateway 在业务参数解析前剥离此公共参数,规范化后传给当前进程及子进程。业务 CLI 的 `PLATFORM` 和遥测 Yuyan `d2` 优先使用本次命令的 Agent 宿名,只有该值为 `unknown` 或非法时才检查当前进程的宿主自动识别信号;继承的通用平台变量只能作为末级兼容值。这样即使进程同时残留其他宿主的 session/thread 环境变量,也不得遮蔽本次 runtime 明确提供的当前宿主。所有来源中的 `unknown` 或非法值都继续回退,不得提前终止识别。该兜底不使用宿主名称枚举或映射表:纯 ASCII 名称统一小写并去除空格、下划线和连字符,合法 Unicode 名称保留可读原文;无法安全规范化仍为 `unknown`。该参数不改变业务确认、run_id、PLATFORM_ID 或模型字段。
|
|
56
56
|
|
|
57
|
-
根 `SKILL.md` 启动器已经在读取本文件前确定本轮有效版本、完整交付 `preview.notice` 声明并取得用户的“确认”或“仅使用服务”(含专用解析器接受的明确等价表达)有效选择,随后完成本对话所需的首次 `env refresh-alipay-cli`
|
|
57
|
+
根 `SKILL.md` 启动器已经在读取本文件前确定本轮有效版本、完整交付 `preview.notice` 声明并取得用户的“确认”或“仅使用服务”(含专用解析器接受的明确等价表达)有效选择,随后完成本对话所需的首次 `env refresh-alipay-cli` 或命中同路径、同版本的成功刷新事实;Windows 在识别根意图后检查其余兼容环境。声明未确认时禁止读取本文件。运行时禁止再次执行自更新、读取 `normal/self-update.md` 或切换其他副本;成功事实仍有效时不重复刷新 CLI,只按原始请求识别根意图并加载入口:
|
|
58
58
|
|
|
59
59
|
| 意图 | 判定 | 入口 | 后续按需加载 |
|
|
60
60
|
|---|---|---|---|
|
|
@@ -64,7 +64,16 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
|
|
|
64
64
|
|
|
65
65
|
`ROOT_INTENT` 由入口路由确定,只能取 `integration_only`、`onboarding_only` 或 `full_process`。
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
仅真实 Windows:按上表确定根意图后、执行 bootstrap/start-run 前,读取 `normal/windows-environment.md` 并执行一次固定入口:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" windows-entry --root-intent "<ROOT_INTENT>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
任务已有依赖准备授权时附加 `--prepare-authorized true`,不新增业务确认;无安装授权仅检查。只接受退出 0、唯一 `ALIPAY_AIPAY_INTERNAL:WINDOWS_ROUTE=<JSON>` 且 rootIntent 匹配、route 为 `READY|LEGACY`。非零、缺失或冲突按 `LEGACY`,不等于 CLI 就绪。所有后续 Windows runtime 命令追加 `--windows-route "<READY|LEGACY>"`,替换为本轮事实;同一会话、材料回复和 Full Process 衔接不重新准备。仅用户明确修复后,`normal/windows-environment.md` 登记的 `env retry|prepare` 复检成功并返回唯一、根意图匹配的 `WINDOWS_ROUTE=READY` 时才更新后续命令为 READY;`CLI_ENV:READY` 单独不构成分流事实,不重跑 `windows-entry`。`READY` 的快速沙箱与本地开通使用原 flow;`LEGACY` 保留原 Windows 独立开发/手工沙箱及站点开通分支。实际业务执行前仍复检能力,READY 不是绕过门禁的令牌。环境、沙箱准备或业务失败不修改采集选择、SESSION_ID、run_id、用户输入计数或阶段责任方。
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
`integration_only` 的 `integration-bootstrap` 在产品已唯一确定时必须携带 `--product-type`,并串行执行 `telemetry start-run` 与 `flow integration entry`;产品尚未唯一确定时省略产品且不创建正式 run,后续由 `integration-message start-confirm` 首次开 run并生成 `clarify_intent`。`onboarding_only` 的 `onboarding-bootstrap` 同理:产品已唯一时携带产品并先启动 run,尚未唯一时由 `mcc resolve-plan` 或 `onboarding-message plan-confirm` 首次启动。两者均为既有无业务写入动作,执行后不得重复原子命令。Windows READY 返回本地 entry 契约;Windows LEGACY 引导渲染优先取现有正式 run_id;若尚未创建正式 run,则退回当前会话可用的平台标识,非 Windows 返回 entry 契约。`full_process` 不使用 `integration-bootstrap`;衔接 Onboarding 也不使用带 `start-run` 的 bootstrap,仍执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message platform-entry --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` 后按需加载 entry,避免重复 `clarify_intent`。
|
|
68
77
|
|
|
69
78
|
若 bootstrap 阶段产品尚未唯一确定,则不会补开正式 run;首个产品确认或方案确认消息在产品已唯一确定后首次触发 `start-run` 并上报 `clarify_intent`,后续只按当前 active run 计数。
|
|
70
79
|
|
|
@@ -74,7 +83,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
|
|
|
74
83
|
|
|
75
84
|
遥测默认开启。`ALIPAY_AIPAY_TELEMETRY=0|false|off|no` 时不计数,不生成 event/c4/进度,不读写 outbox/status,不上传、不启动 worker、不 flush;只允许保留 `PLATFORM_ID <- run_id` 所需的最小私有 run context;用户明确拒绝采集时,另允许保存最小拒绝状态并关闭已有采集,防止重新开启开关后旧授权复活,不保存正文或生成事件。失败静默,不改变业务、消息、确认或卡点,内部 marker 不对客。`integration_only` 由 `integration_summary` 终结;`onboarding_only` 由 `onboarding_summary` 终结;`full_process` 由 `all_summary` 终结,`full_process` 的 `integration_summary` 只是中间 event。每个 stage 先在 run state 固定唯一 event,再写 outbox并同步上传,网络硬超时 3 秒;失败保留原 event 后才尝试 detached worker,绝不延迟重算 c4。补传细节见 `normal/telemetry.md`。
|
|
76
85
|
|
|
77
|
-
|
|
86
|
+
对话采集在用户明确同意后,以触发 Skill 的那条用户消息为起点,按原始顺序补采授权前的完整对话(含内测声明、澄清往来等助手收口消息),每条只采集一次、不重复采集,使用独立的 `conversation_id`,不携带或关联业务 `run_id`。对话遥测环境开关默认可用,但实际采集还必须取得当前会话的明确同意;`ALIPAY_AIPAY_CONVERSATION_TELEMETRY=0|false|off|no` 时只停用对话采集,不影响阶段遥测。阶段遥测继续使用 code=1005;对话遥测默认使用独立 code=1008,可由 `ALIPAY_AIPAY_CONVERSATION_CODE` 覆盖,非法值或与 1005 相同则停用对话采集。
|
|
78
87
|
|
|
79
88
|
当前会话已明确同意、全局遥测开启且对话 code 有效时,读取 `normal/conversation-telemetry.md` 的采集规则。每轮采集本轮用户消息,以及阻塞式对客消息和最终收口助手回复;过程输出、工具结果和非阻塞阶段消息跳过。用户消息先执行原有 `count-user-input`,再采集。助手消息必须在发送前采集,采集副本仅替换随后发送正文中的凭证和个人信息,其余文字与格式保持一致;不得为满足逐字一致而上传敏感原文。
|
|
80
89
|
|
|
@@ -94,6 +103,6 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
|
|
|
94
103
|
|
|
95
104
|
扫码页非阻塞:授权最多 12 次/间隔 5 秒,公钥最多 20 次/间隔 2 秒,成功即推进;耗尽后经统一回复判定只查一次,不重启轮询。
|
|
96
105
|
|
|
97
|
-
`full_process` 代码开发方案送达前只准备项目、语言、系统分支环境和沙箱;Windows 未明确要求当前配置时记 `VERIFY_PENDING`,不收资料。方案送达后直接进入 Integration 步骤 3,满足条件自动进 Onboarding;仅沙箱待配置,或 READY 且只剩非阻塞人工验证时可部分通过,其他缺口停在 Integration;收口保留全部待办。用户中断后重新确认当前项目和服务端语言,从实际项目扫描恢复,不恢复旧方案状态。
|
|
106
|
+
`full_process` 代码开发方案送达前只准备项目、语言、系统分支环境和沙箱;Windows LEGACY 未明确要求当前配置时记 `VERIFY_PENDING`,不收资料。方案送达后直接进入 Integration 步骤 3,满足条件自动进 Onboarding;仅沙箱待配置,或 READY 且只剩非阻塞人工验证时可部分通过,其他缺口停在 Integration;收口保留全部待办。用户中断后重新确认当前项目和服务端语言,从实际项目扫描恢复,不恢复旧方案状态。
|
|
98
107
|
|
|
99
108
|
仅代码开发结束时提醒仍需产品开通;仅产品开通结束时提醒仍需代码开发。机器规则、消息目录、fixture 和测试不作为默认必读内容。
|