@alipay/alipay-aipay 1.6.1-beta.4 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alipay/alipay-aipay",
3
- "version": "1.6.1-beta.4",
3
+ "version": "1.6.1",
4
4
  "description": "支付宝 AI 付 Skill 安装包 - 优先安装 Agent Skill,并在 macOS/Linux 后台准备用户级 CLI 工具",
5
5
  "type": "module",
6
6
  "bin": {
package/skill/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.1-beta.4
1
+ 1.6.1
@@ -203,7 +203,7 @@ runner 失败时不得展示手写方案或进入步骤 3。成功时必须取
203
203
 
204
204
  - `full_process`:`../normal/full-process-routing.md` 已使用同一个 `integration.start.confirm`,在同一方案中绑定检查器产生的项目来源、代码状态和其他产品,以及产品、项目路径、语言/框架和服务声明;消息送达后已经直接进入本步骤,禁止再次渲染或要求确认。该消息不展示步骤清单,也不缩减执行范围;后续仍必须按当前产品完成本 flow 的全部适用接口、完成条件和 checklist。用户中断后若项目、产品、语言或框架发生变化,返回完整接入 router 重新澄清和扫描,再输出一条当前方案并继续。该方案仍禁止提前展示 MCC、授权范围、产品开通材料或 onboarding 待办。
205
205
 
206
- 方案送达后只通过上述 development loader 进入步骤 3;loader 仍在原位置记录兼容 stage `integration.user_confirmed` 和 `integration.pre_dev_reading.start`。前者表示已基于完整确定事实自动进入执行,不表示收到额外确认回复;不得另行执行 telemetry 命令或伪造用户回复。
206
+ 方案送达后只通过上述 development loader 进入步骤 3;loader 仍在原位置记录兼容 stage `integration.user_confirmed` 和 `integration.pre_dev_reading.start`。前者表示已基于完整确定事实自动进入执行,不表示收到额外确认回复;不得另行执行 telemetry 命令或伪造用户回复。after-flow 从此后下一条用户消息开始;前置澄清、候选和方案只计 total。
207
207
 
208
208
  **方案后的上下文锁定**:已有项目保持步骤 1 前已经唯一解析的实际根目录和原有工程结构;新项目必须已经在步骤 1 前按用户明确选择的方式完成初始化并通过构建标识检查。此处不重复准备、初始化或探测项目。路径内容与步骤 1 成功时不一致则停止并重新澄清;只有目标项目或服务端语言变化时返回步骤 1,其他情况直接进入步骤 3。
209
209
 
@@ -391,33 +391,40 @@ function parseBooleanFlag(value) {
391
391
  return null;
392
392
  }
393
393
 
394
- function terminalExtInfoFromPayload(payload = {}) {
394
+ function terminalExtInfoFromPayload(payload = {}, env = process.env) {
395
395
  if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return '';
396
396
  const total = parseNonNegativeInteger(payload.userInputCountTotal ?? payload.user_input_count_total);
397
397
  const afterFlowStart = parseNonNegativeInteger(
398
398
  payload.userInputCountAfterFlowStart ?? payload.user_input_count_after_flow_start
399
399
  );
400
400
  const flowStartObserved = parseBooleanFlag(payload.flowStartObserved ?? payload.flow_start_observed);
401
+ const rootIntent = rootIntentFrom(payload, env);
401
402
  if (total === null || afterFlowStart === null || flowStartObserved === null) return '';
403
+ if (!rootIntent) return '';
402
404
  if (afterFlowStart > total) return '';
403
405
  if (!flowStartObserved && afterFlowStart !== 0) return '';
404
406
  return JSON.stringify({
405
407
  user_input_count_total: total,
406
408
  user_input_count_after_flow_start: afterFlowStart,
407
- flow_start_observed: flowStartObserved
409
+ flow_start_observed: flowStartObserved,
410
+ root_intent: rootIntent
408
411
  });
409
412
  }
410
413
 
411
414
  function terminalExtInfoFromEvent(event) {
412
415
  if (event?.stage !== 'run.terminal') return '';
416
+ const withEventRoot = (payload) => terminalExtInfoFromPayload({
417
+ rootIntent: event.root_intent || event.rootIntent,
418
+ ...(payload && typeof payload === 'object' && !Array.isArray(payload) ? payload : {})
419
+ }, {});
413
420
  if (typeof event.ext_info === 'string') {
414
421
  try {
415
- return terminalExtInfoFromPayload(JSON.parse(event.ext_info));
422
+ return withEventRoot(JSON.parse(event.ext_info));
416
423
  } catch {
417
424
  return '';
418
425
  }
419
426
  }
420
- return terminalExtInfoFromPayload(event?.ext_info);
427
+ return withEventRoot(event?.ext_info);
421
428
  }
422
429
 
423
430
  export function stageMetricEvent(stage, context = {}, nowMs = Date.now(), env = process.env) {
@@ -444,7 +451,7 @@ export function stageMetricEvent(stage, context = {}, nowMs = Date.now(), env =
444
451
  const rootIntent = rootIntentFrom(context, env);
445
452
  if (rootIntent) event.root_intent = rootIntent;
446
453
  if (event.stage === 'run.terminal') {
447
- const extInfo = terminalExtInfoFromPayload(context);
454
+ const extInfo = terminalExtInfoFromPayload(context, env);
448
455
  if (extInfo) event.ext_info = extInfo;
449
456
  }
450
457
  return event;
@@ -1,13 +1,5 @@
1
- # Skill 启动器自更新契约
1
+ # 自更新
2
2
 
3
- 首次使用 `alipay-aipay` 时,必须在读取入口、flow、模块、消息目录或业务脚本前检查一次版本,并记录 `ALIPAY_AIPAY_SELF_UPDATE_CHECKED=true`:
3
+ 首次使用 `alipay-aipay` 前检查一次版本,记录 `ALIPAY_AIPAY_SELF_UPDATE_CHECKED=true`:`node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" self-update check --skill-dir "<SKILL_DIR>"`。`<SKILL_DIR>` 是当前包含 updater 的 Skill 规范化绝对路径,不得换成启动目录、项目目录、Home、npm 源码根或其他副本;命令不得改成变量赋值、命令替换、相对路径或特定 shell 语法;不透传 npm/npx 原始输出。
4
4
 
5
- ```text
6
- node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" self-update check --skill-dir "<SKILL_DIR>"
7
- ```
8
-
9
- `<SKILL_DIR>` 必须是当前这份包含 updater 的 Skill 规范化绝对路径,不得换成启动目录、项目目录、Home、npm 源码根或其他副本。命令不得改成变量赋值、命令替换、相对路径或特定 shell 语法;不透传 npm/npx 原始输出。
10
-
11
- 唯一 stderr 终态:`SELF_UPDATE:CURRENT=<合法 SemVer>`、`SELF_UPDATE:UPDATED=<合法 SemVer>`、`SELF_UPDATE:RETRY_WITH_NETWORK`、`SELF_UPDATE:SKIPPED_NETWORK_RESTRICTED`、`SELF_UPDATE:CHECK_FAILED`、`SELF_UPDATE:INSTALL_FAILED`、`SELF_UPDATE:VERIFY_FAILED`。
12
-
13
- `UPDATED` 使用原子替换后的新版,其余使用当前可用版;marker 缺失、重复或不唯一时读当前入口,不得称最新或更新成功。`UPDATED` 后停止读旧版,读取同一根目录的新版入口;仅 `RETRY_WITH_NETWORK` 可取权后原样重试一次,拒绝、不支持或再次返回时读当前入口。上述一次网络恢复外,不重查、取权、用 `sudo`、要求用户操作或写更新状态。每次只查一次 npm latest;`VERSION` 缺失、非法、落后或业务入口缺失时只安装精确版本一次。不调用公开 `install --target all`;超时会终止同一次调用的进程树并恢复清理。
5
+ 唯一 stderr 终态:`SELF_UPDATE:CURRENT=<合法 SemVer>`、`SELF_UPDATE:UPDATED=<合法 SemVer>`、`SELF_UPDATE:RETRY_WITH_NETWORK`、`SELF_UPDATE:SKIPPED_NETWORK_RESTRICTED`、`SELF_UPDATE:CHECK_FAILED`、`SELF_UPDATE:INSTALL_FAILED`、`SELF_UPDATE:VERIFY_FAILED`。`UPDATED` 用原子替换后的新版,其余用当前可用版;marker 异常读当前入口,不得称最新或更新成功;停止读旧版,读取同一根目录的新版入口。仅 `RETRY_WITH_NETWORK` 可取权后原样重试一次,拒绝、不支持或再次返回时读当前入口;一次网络恢复外,不重查、取权、用 `sudo`、要求用户操作或写更新状态。每次只查一次 npm latest;`VERSION` 缺失、非法、落后或业务入口缺失时只安装精确版本一次。不调用公开 `install --target all`;超时终止同一次调用的进程树并清理。
@@ -1,6 +1,6 @@
1
- - stage、Yuyan 字段和低敏维度以 `scripts/telemetry.mjs` 与测试为准。sync-log `param4` value 按 Yuyan Monitor SDK 单独 URL 编码后再整体编码,禁用裸 JSON、CSV 引号或手写分隔符。遥测关闭、缺 run、落盘/网络/上传失败或非 2xx 不改变业务 stdout、退出语义或 flow;内部行用 `ALIPAY_AIPAY_INTERNAL:`。
2
- - `start-run` 创建或复用当前 `run_id`;业务脚本继承 `PLATFORM_ID=<run_id>`,Agent 不手写环境前缀或改 MCP payload。outbox 只写系统临时目录,collector HTTP 2xx 后才删。维护/测试进程不复用默认 run state,默认不远端上传。Benchmark 只能用 `ALIPAY_AIPAY_TELEMETRY_CAPTURE_ONLY=1` 写隔离 outbox;该模式禁用上传、flush 和权限补传。
3
- - 根入口用 `root_intent + product_type` 判定复用或新建;组合不变时不按时长失效,`UNKNOWN` 补全为明确产品仍复用同一 `run_id`。只有明确换产品、切换根意图或已有 run 终态才重建;用户只说“重新开始/重新走流程/作废本轮流程”但组合未变时继续复用。`COZE_PROJECT_ID`、`MEOO_PROJECT_ID`、`MIAODA` 下的 `VITE_APP_ID`/`PLATFORM_ID` 优先作为新 run ID。
1
+ - stage、Yuyan/低敏维度以 `scripts/telemetry.mjs` 与测试为准。`param4` 按 SDK 单项编码后整体编码。遥测关闭、缺 run、落盘/网络/上传/非 2xx 不改业务;内部行 `ALIPAY_AIPAY_INTERNAL:`。
2
+ - `start-run` 创建或复用当前 `run_id`;业务脚本继承 `PLATFORM_ID=<run_id>`,Agent 不手写环境前缀或改 MCP payload。outbox 写系统临时目录,collector HTTP 2xx 后才删。维护/测试不复用默认 run state,不远端上传。Benchmark 只用 `ALIPAY_AIPAY_TELEMETRY_CAPTURE_ONLY=1` 写隔离 outbox,禁上传、flush 和权限补传。
3
+ - 根入口用 `root_intent + product_type` 判定复用或新建;组合不变不按时长失效,`UNKNOWN` 补全为明确产品仍复用同一 `run_id`。只有换产品、换根意图或已有 run 终态才重建;用户只说“重新开始/重新走流程/作废本轮流程”但组合未变时继续复用。`COZE_PROJECT_ID`、`MEOO_PROJECT_ID`、`MIAODA` 下的 `VITE_APP_ID`/`PLATFORM_ID` 优先作为新 run ID。
4
4
  - `integration_only` 由 checklist 最终消息终止;`full_process` 的 Integration 收口不终止。`onboarding_only|full_process` 由 Onboarding closeout、企业账号不支持或 Windows 站点引导消息终止。查看主键只用 `current-run-id`,不得为查看而新建 run。
5
- - Agent 在当前上下文计数:`user_input_count_total` 从触发当前 `run_id` 的用户消息开始;`user_input_count_after_flow_start` 从进入 `integration.user_confirmed` 或 `onboarding.user_confirmed` 后的下一条用户消息开始;`flow_start_observed` 表示已进入正式 flow start,`full_process` 不因进入 Onboarding 重置。只计用户发给 Agent 的消息;用户直接 kill 且没有执行 `run.terminal` 时不补报。终态命令只追加 `--user-input-count-total`、`--user-input-count-after-flow-start`、`--flow-start-observed`;不得新增工具调用、确认点、stage 或独立上报。`run.terminal` 的 Yuyan `c4` 字段名为 `ext_info`,三项合法时写 minified JSON;非法、缺失、`after_flow_start > total` 或 `flow_start_observed=false` 但 after-flow 非 0 时省略 `c4`。
6
- - `telemetry upload-status` 只读诊断。网络失败且 outbox 积压时先执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry permissioned-flush-needed`;仅 `PERMISSIONED_FLUSH_NEEDED=true` 时申请一次联网权限运行 `telemetry flush-outbox`,同一 Agent 会话只请求一次。`flush-outbox` 只启动后台补传并立即返回;拒绝、后台失败或非 2xx 都保留 outbox。collector HTTP 结果、失败或待重试结果不得作为业务转移或完成条件。
5
+ - Agent 计数:`user_input_count_total` 从触发当前 `run_id` 的用户消息开始;`user_input_count_after_flow_start` 从方案送达并进入正式执行后的下一条用户消息开始(`integration_only/full_process`:`integration.user_confirmed`;`onboarding_only`:`onboarding.user_confirmed`)。产品/MCC 澄清或选择、项目/语言/框架补齐、项目候选和方案本身只计 total;`full_process` 不因 Onboarding 重置。`flow_start_observed` 表示已进入正式 flow start。只计用户消息;用户 kill 未终态不补报。终态命令只追加 `--user-input-count-total`、`--user-input-count-after-flow-start`、`--flow-start-observed`;不得新增工具调用、确认点、stage 或独立上报。`run.terminal` 的 Yuyan `c4` 字段名为 `ext_info`,三项计数合法且可取得 `root_intent` 时写 minified JSON;否则省略 `c4`。
6
+ - `telemetry upload-status` 只读诊断。网络失败且 outbox 积压时先执行 `telemetry permissioned-flush-needed`;仅 `PERMISSIONED_FLUSH_NEEDED=true` 时申请一次联网运行 `telemetry flush-outbox`,同一 Agent 会话只请求一次。`flush-outbox` 只启动后台补传并立即返回;拒绝、失败或非 2xx 保留 outbox。collector 结果不得作为业务条件。
@@ -121,7 +121,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message mcc-
121
121
 
122
122
  `salesCode`、`scope` 和材料要求只取“产品映射”。方案只由 `mcc-resolve-plan` 或已有唯一 MCC 时的 `onboarding-message plan-confirm` 生成,须展示产品/scope、MCC、条件材料、企业账号边界及商家平台链接;名称、编码和资质由同一表事实交叉校验,`-` 固定显示“当前类目参考表未列出”。禁止补充模板外资格或审核规则。
123
123
 
124
- 不得保留“先运行旧字符串搜索,无匹配后再临时让 Agent 猜”的两阶段流程,或重复询问已知信息。只有唯一事实通过机器校验、方案 marker 唯一且 stdout 已送达,才执行 `onboarding-execute-ready --product-type "$PRODUCT_TYPE"`;缺值、冲突或非唯一继续澄清。产品/MCC 变化时重新校验并渲染。execute loader 记录兼容 stage `onboarding.user_confirmed`,不代表新增用户回复,禁止手工上报。
124
+ 不得保留“先运行旧字符串搜索,无匹配后再临时让 Agent 猜”的两阶段流程,或重复询问已知信息。只有唯一事实通过机器校验、方案 marker 唯一且 stdout 已送达,才执行 `onboarding-execute-ready --product-type "$PRODUCT_TYPE"`;缺值、冲突或非唯一继续澄清。产品/MCC 变化时重新校验并渲染。execute loader 记录兼容 stage `onboarding.user_confirmed`,不代表新增用户回复,禁止手工上报。after-flow 从此后下一条用户消息开始;前置澄清、候选和方案只计 total。`full_process` 不在本阶段重置。
125
125
 
126
126
  <!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:END -->
127
127
 
@@ -16,7 +16,7 @@ AI 网页应用收款覆盖 PC 网页和手机浏览器/H5,接口固定 `alipa
16
16
  7. **沙箱结论**:真实快速沙箱配置不得用占位值,唯一例外是 AI 按量付费沙箱 `service_id=api_mock_service_id`,且生产禁用。`CREATE_PENDING|VERIFY_PENDING` 只允许继续代码实现,阻止字段使用、摘要、后置校验、联调和付款体验。字段校验不等于支付测试;仅完整 402 链路满足 flow 才可称沙箱测试通过。
17
17
  8. **异步通知**:AI 网页应用收款/AI 移动应用收款必须实现通知。本地无公网 HTTPS `notify_url` 时可不传并以交易查询验收,公网通知联调列为人工待验证;生产上线前须恢复通知并完成验签、幂等、关键字段校验、`success` 回写和补偿查询,否则不宣称生产就绪。
18
18
  9. **受控页面**:授权链接仅由 `auth.sh` 按固定产品/MCC 生成,只允许 `https://aipay.alipay.com/cli-auth` 及登记参数,禁用 CLI `verification_url`;公钥页和系统 opener 只走登记脚本。失败后宿主内置浏览器只可打开已交付的同一 URL 一次;仍失败才提示手动打开,再有限轮询。禁止搜索、改写或自动操作;opener/config 写失败不算业务失败。
19
- 10. **对客输出**:指定 runner/renderer/脚本时,stdout 是唯一对客正文,须原文回复且不加旁白;工具输出记录、折叠面板或日志不等于已对客发送。展示命令只执行登记的单条命令,禁止追加 `2>&1`、管道、`grep/sed/awk/tee`、临时包装或拆回 `jq/printf/renderer`。除 `self_update.mjs` 的 `SELF_UPDATE:*` stderr 终态外,内部事实行均以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并输出时仍整行剔除,严禁对客。`integration.start.confirm` 和 `onboarding.plan.confirm` 成功时必须各自产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=<messageId>`;下一动作必须将 stdout 正文作为可见进行中消息原文送达,不得以最终答复结束回合,送达前禁用工具。工具面板、内部思考或声称“已展示”都不满足交付;送达后同一回合立即执行 flow 指定的下一工具,不等待回复或确认。所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障(当前为 `auth.page`、`application.key.page`):先独立送达页面 stdout,再执行受控 opener 和有限轮询,不把后续待完成或收口消息合并发送;屏障不要求确认或新增操作。阻塞正文后等待;剔除内部行后正文为空则直接转移,不补话术。
19
+ 10. **对客输出**:指定 runner/renderer/脚本时,stdout 是唯一对客正文,须原文回复且不加旁白;工具输出记录、折叠面板或日志不等于已对客发送。展示命令只执行登记单条命令,禁 `2>&1`、管道、`grep/sed/awk/tee`、临时包装或拆回 `jq/printf/renderer`。除 `self_update.mjs` 的 `SELF_UPDATE:*` stderr 终态外,内部事实行均以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并输出时仍整行剔除,严禁对客。`integration.start.confirm` 和 `onboarding.plan.confirm` 成功时必须各自产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=<messageId>`;下一动作先将 stdout 可见送达,不得以最终答复结束回合,送达前禁工具;送达后同回合继续,不等待回复。所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障(当前为 `auth.page`、`application.key.page`):先独立送达页面 stdout,再执行受控 opener 和有限轮询,不合并 pending/收口;不要求确认。阻塞正文后等待;剔除内部行后正文为空则直接转移。
20
20
  11. **确定性转移**:固定脚本终态后立即转移;只执行动作处登记命令,禁止追加 `jq/cat/grep/curl` 或临时脚本重复解析。失败只走登记恢复;项目自检不绕过 Skill 脚本或打印敏感配置。
21
21
 
22
22
  ## 标准消息
@@ -48,13 +48,13 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" render <messageId> --va
48
48
 
49
49
  `full_process` 识别根意图后立即执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry start-run --root-intent full_process`;产品已唯一确定时追加 `--product-type <aipay|webpay|apppay>`。`integration_only` 和 `onboarding_only` 已由上表各自 bootstrap 包含同一次 `start-run`,不得重复执行本条 telemetry。命令创建/复用当前流程 `run_id`,并在遥测开启时记录 `run.intent_detected`:同一意图和产品继续复用,`UNKNOWN` 补全产品仍复用同一 `run_id`;明确换产品、换根意图或既有 run 已终态才重建。第三方平台项目 ID 仍优先固定为 `run_id`,不得被显式 run ID 或本地生成值覆盖。业务 stage 只由登记 runner/script 异步记录。
50
50
 
51
- 遥测默认开启,`ALIPAY_AIPAY_TELEMETRY=0|false|off|no` 可关闭 `METRIC_EVENT`、outbox、上传和 flush;私有流程 run context 仍用于 `PLATFORM_ID` 和终态生命周期。落盘/网络/上传/flush 失败静默,不改变业务、消息或确认,stdout 为空且 stderr 内部行不对客。`integration_only` 由 checklist 终结;Onboarding 由 closeout 或登记的提前终止消息终结。Agent 按 `normal/telemetry.md` 维护本轮用户输入计数,并只在终态命令追加可选参数,不新增工具调用、确认点或独立上报。脚本始终以当前流程 `run_id` 为 `PLATFORM_ID`,Agent 不手写环境前缀或改 MCP payload;维护诊断、outbox、上传和 flush 细节只在 `normal/telemetry.md` 按需读取。
51
+ 遥测默认开启,`ALIPAY_AIPAY_TELEMETRY=0|false|off|no` 可关闭 `METRIC_EVENT`、outbox、上传和 flush;私有流程 run context 仍用于 `PLATFORM_ID` 和终态生命周期。落盘/网络/上传/flush 失败静默,不改变业务、消息或确认,stdout 为空且 stderr 内部行不对客。`integration_only` 由 checklist 终结;Onboarding 由 closeout 或登记的提前终止消息终结。Agent 按 `normal/telemetry.md` 维护本轮用户输入计数,并只在终态命令追加可选参数,不新增工具调用、确认点或独立上报。after-flow 以方案后 `*.user_confirmed` 为起点;前置澄清和候选选择不计入。脚本始终以当前流程 `run_id` 为 `PLATFORM_ID`,Agent 不手写环境前缀或改 MCP payload;维护诊断、outbox、上传和 flush 细节只在 `normal/telemetry.md` 按需读取。
52
52
 
53
53
  三种入口均只在无法从已有产品名称或业务描述可靠确定唯一产品时执行 flow 登记的 `product-clarify` runner;不得推定或手写澄清。产品明确但 MCC 尚无检索输入时使用 `mcc-clarify`;已有经营描述后先按 Onboarding flow 读取一次当前 `<SKILL_DIR>/references/onboarding/modules/mcc-reference.md` 做 Agent 语义候选,再统一调用 `mcc-resolve-plan` 由 runner 复核、合并和渲染;用户直接提供当前表内完整 MCC 编码时可跳过 Agent 泛化并由 runner 精确校验。不得拆回 `mcc-search + mcc-candidates`、先旧检索失败后临时猜测,或为方案展示再拼 renderer 输入。
54
54
 
55
55
  代码开发或完整接入缺项目位置/服务端语言时,使用 `integration.context.required` 或 `integration.project_path.required` 标准消息;框架缺失不触发补问。先区分新建与复用并保留原始 `PROJECT_INPUT`。明确新建产物固定用 `resolve-project --intent new`;含名称或位置时由 Agent 解析 `TARGET_PROJECT_PATH` 并传 `--target-path`,runner 只校验路径和目录状态,不解析自然语言或把原话当目录名;纯默认新建才省略。现有项目未知时先定位候选;所有路径经 `resolve-project` 后再用 `framework-resolve`:新项目取语言默认框架,现有项目从依赖推导或沿用结构,用户明确框架优先。补齐前不初始化、装依赖或改文件。
56
56
 
57
- 每轮代码开发只渲染一次非阻塞 `integration.start.confirm`,覆盖步骤 1 至步骤8:代码开发校验;对应 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED` marker 唯一且 stdout 可见送达后,直接进入步骤 3,不生成或复验方案 receipt。`full_process` 在方案展示前已完成步骤 1。Onboarding 只保留一次非阻塞方案展示;同样只有 marker 唯一且 stdout 已可见送达,才允许在 MCC 唯一事实有效后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-execute-ready --product-type "$PRODUCT_TYPE"`。该组合动作只串行加载 `flow onboarding execute` 并执行既有 `env check`,不跨用户输入、授权页或任何写操作;执行后不得再重复单独加载 execute phase 或重复环境检查。两类方案送达后都自动继续,不等待回复。服务修改仍保留绑定当前摘要的阻塞确认。签约材料完整后直接提交,服务创建摘要后直接创建,新建应用公钥校验成功后直接提审。
57
+ 每轮代码开发只渲染一次非阻塞 `integration.start.confirm`,覆盖步骤 1 至步骤8:代码开发校验;对应 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED` marker 唯一且 stdout 可见送达后,直接进入步骤 3,不生成或复验方案 receipt。after-flow 起点:`full_process=integration.user_confirmed` 且 Onboarding 不重置,`onboarding_only=onboarding.user_confirmed`,前置澄清/方案不计。Onboarding 只保留一次非阻塞方案展示;同样只有 marker 唯一且 stdout 已可见送达,才允许在 MCC 唯一事实有效后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-execute-ready --product-type "$PRODUCT_TYPE"`。该组合动作只串行加载 `flow onboarding execute` 并执行既有 `env check`,不跨用户输入、授权页或任何写操作;执行后不得再重复单独加载 execute phase 或重复环境检查。两类方案送达后都自动继续,不等待回复。服务修改仍保留绑定当前摘要的阻塞确认。签约材料完整后直接提交,服务创建摘要后直接创建,新建应用公钥校验成功后直接提审。
58
58
 
59
59
  扫码页非阻塞:授权最多 12 次/间隔 5 秒,公钥最多 20 次/间隔 2 秒,成功即推进;耗尽后经统一回复判定只查一次,不重启轮询。
60
60