@coze-arch/cli 0.0.36-alpha.a7a716 → 0.0.36-alpha.b20d2b

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 (109) hide show
  1. package/README.md +67 -114
  2. package/docs/deploy.md +19 -4
  3. package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +80 -19
  4. package/lib/__templates__/expo/.cozeproj/scripts/prod_run.sh +1 -1
  5. package/lib/__templates__/expo/.cozeproj/scripts/server_dev_run.sh +1 -1
  6. package/lib/__templates__/expo/client/metro.config.js +3 -1
  7. package/lib/__templates__/expo/pnpm-lock.yaml +5 -5
  8. package/lib/__templates__/expo/server/package.json +2 -2
  9. package/lib/__templates__/expo/server/src/index.ts +1 -1
  10. package/lib/__templates__/expo/template.config.js +11 -2
  11. package/lib/__templates__/native-static/.coze +2 -0
  12. package/lib/__templates__/native-static/scripts/serve.ps1 +7 -0
  13. package/lib/__templates__/nextjs/.coze +5 -0
  14. package/lib/__templates__/nextjs/package.json +1 -1
  15. package/lib/__templates__/nextjs/pnpm-lock.yaml +5 -5
  16. package/lib/__templates__/nextjs/scripts/build.ps1 +16 -0
  17. package/lib/__templates__/nextjs/scripts/dev.ps1 +63 -0
  18. package/lib/__templates__/nextjs/scripts/dev.sh +205 -7
  19. package/lib/__templates__/nextjs/scripts/prepare.ps1 +18 -0
  20. package/lib/__templates__/nextjs/scripts/start.ps1 +11 -0
  21. package/lib/__templates__/nextjs/scripts/validate.ps1 +8 -0
  22. package/lib/__templates__/nextjs/template.config.js +1 -1
  23. package/lib/__templates__/nuxt-vue/.coze +5 -0
  24. package/lib/__templates__/nuxt-vue/package.json +1 -1
  25. package/lib/__templates__/nuxt-vue/pnpm-lock.yaml +5 -5
  26. package/lib/__templates__/nuxt-vue/scripts/build.ps1 +12 -0
  27. package/lib/__templates__/nuxt-vue/scripts/dev.ps1 +63 -0
  28. package/lib/__templates__/nuxt-vue/scripts/dev.sh +82 -1
  29. package/lib/__templates__/nuxt-vue/scripts/prepare.ps1 +12 -0
  30. package/lib/__templates__/nuxt-vue/scripts/start.ps1 +11 -0
  31. package/lib/__templates__/nuxt-vue/scripts/validate.ps1 +8 -0
  32. package/lib/__templates__/phaser/.coze +5 -0
  33. package/lib/__templates__/phaser/README.md +8 -0
  34. package/lib/__templates__/phaser/scripts/build.ps1 +12 -0
  35. package/lib/__templates__/phaser/scripts/dev.ps1 +49 -0
  36. package/lib/__templates__/phaser/scripts/prepare.ps1 +8 -0
  37. package/lib/__templates__/phaser/scripts/start.ps1 +49 -0
  38. package/lib/__templates__/phaser/scripts/validate.ps1 +7 -0
  39. package/lib/__templates__/phaser/src/global.d.ts +3 -0
  40. package/lib/__templates__/phaser/src/scene/BootScene.ts +4 -0
  41. package/lib/__templates__/phaser/src/scene/DevLoadingScene.ts +3 -0
  42. package/lib/__templates__/phaser/src/utils/mark-editable.ts +8 -1
  43. package/lib/__templates__/phaser/vite.config.ts +1 -1
  44. package/lib/__templates__/phaser-static/.coze +15 -0
  45. package/lib/__templates__/phaser-static/README.md +40 -0
  46. package/lib/__templates__/phaser-static/_gitignore +6 -0
  47. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0001.png +0 -0
  48. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0002.png +0 -0
  49. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0003.png +0 -0
  50. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0004.png +0 -0
  51. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0005.png +0 -0
  52. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0006.png +0 -0
  53. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0007.png +0 -0
  54. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0008.png +0 -0
  55. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0009.png +0 -0
  56. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0010.png +0 -0
  57. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0011.png +0 -0
  58. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0012.png +0 -0
  59. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0013.png +0 -0
  60. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0014.png +0 -0
  61. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0015.png +0 -0
  62. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0016.png +0 -0
  63. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0017.png +0 -0
  64. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0018.png +0 -0
  65. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0019.png +0 -0
  66. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0020.png +0 -0
  67. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0021.png +0 -0
  68. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0022.png +0 -0
  69. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0023.png +0 -0
  70. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/frame_0024.png +0 -0
  71. package/lib/__templates__/phaser-static/assets/image_sequence/coze-game-loading/manifest.json +11 -0
  72. package/lib/__templates__/phaser-static/debug-runtime/flow-graph.json +20 -0
  73. package/lib/__templates__/phaser-static/index.html +17 -0
  74. package/lib/__templates__/phaser-static/scripts/serve.ps1 +7 -0
  75. package/lib/__templates__/phaser-static/src/assets.js +15 -0
  76. package/lib/__templates__/phaser-static/src/main.js +26 -0
  77. package/lib/__templates__/phaser-static/src/phaser.js +7 -0
  78. package/lib/__templates__/phaser-static/src/scene/BootScene.js +205 -0
  79. package/lib/__templates__/phaser-static/src/scene/DevLoadingScene.js +67 -0
  80. package/lib/__templates__/phaser-static/src/style.css +28 -0
  81. package/lib/__templates__/phaser-static/src/utils/asset-loader.js +267 -0
  82. package/lib/__templates__/phaser-static/src/utils/index.js +2 -0
  83. package/lib/__templates__/phaser-static/src/utils/mark-editable.js +3 -0
  84. package/lib/__templates__/phaser-static/template.config.js +35 -0
  85. package/lib/__templates__/pi-agent/package.json +1 -1
  86. package/lib/__templates__/pi-agent/pnpm-lock.yaml +5 -5
  87. package/lib/__templates__/taro/.cozeproj/scripts/deploy_run.sh +1 -1
  88. package/lib/__templates__/taro/.cozeproj/scripts/dev_run.sh +150 -68
  89. package/lib/__templates__/taro/AGENTS.md +11 -7
  90. package/lib/__templates__/taro/README.md +4 -4
  91. package/lib/__templates__/taro/config/index.ts +10 -2
  92. package/lib/__templates__/taro/pnpm-lock.yaml +5 -5
  93. package/lib/__templates__/taro/server/package.json +1 -1
  94. package/lib/__templates__/taro/server/src/main.ts +8 -2
  95. package/lib/__templates__/templates.json +26 -1
  96. package/lib/__templates__/vite/.coze +5 -0
  97. package/lib/__templates__/vite/package.json +1 -1
  98. package/lib/__templates__/vite/pnpm-lock.yaml +5 -5
  99. package/lib/__templates__/vite/scripts/build.ps1 +16 -0
  100. package/lib/__templates__/vite/scripts/dev.ps1 +63 -0
  101. package/lib/__templates__/vite/scripts/dev.sh +82 -1
  102. package/lib/__templates__/vite/scripts/prepare.ps1 +18 -0
  103. package/lib/__templates__/vite/scripts/start.ps1 +11 -0
  104. package/lib/__templates__/vite/scripts/validate.ps1 +8 -0
  105. package/lib/__templates__/vite/template.config.js +1 -1
  106. package/lib/cli.js +648 -210
  107. package/lib/deploy/package-project.js +22 -4
  108. package/lib/deploy/package-project.py +18 -3
  109. package/package.json +1 -1
package/lib/cli.js CHANGED
@@ -23,11 +23,12 @@ var Ajv = require('ajv');
23
23
  var minimist = require('minimist');
24
24
  var changeCase = require('change-case');
25
25
  var ejs = require('ejs');
26
- var node_crypto = require('node:crypto');
27
26
  var node_os = require('node:os');
28
27
  var promises = require('node:fs/promises');
28
+ var node_crypto = require('node:crypto');
29
29
  var node_child_process = require('node:child_process');
30
30
  var node_util = require('node:util');
31
+ var tar = require('tar');
31
32
  var node_stream = require('node:stream');
32
33
 
33
34
  /**
@@ -1634,7 +1635,7 @@ function createNodeTransport() {
1634
1635
  };
1635
1636
  }
1636
1637
 
1637
- function _nullishCoalesce$c(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$E(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
1638
+ function _nullishCoalesce$c(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$F(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
1638
1639
  * Slardar CLI Reporter 主类
1639
1640
  * 封装 @slardar/base 的初始化和上报逻辑
1640
1641
  */
@@ -1706,7 +1707,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1706
1707
  this.client.on('send', (ev) => {
1707
1708
  log$6(
1708
1709
  'send hook called for event: %s',
1709
- (_optionalChain$E([ev, 'optionalAccess', _ => _.ev_type]) ) || 'unknown',
1710
+ (_optionalChain$F([ev, 'optionalAccess', _ => _.ev_type]) ) || 'unknown',
1710
1711
  );
1711
1712
  });
1712
1713
 
@@ -1764,7 +1765,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1764
1765
  )
1765
1766
  : undefined;
1766
1767
 
1767
- _optionalChain$E([this, 'access', _2 => _2.client, 'access', _3 => _3.sendEvent, 'optionalCall', _4 => _4({
1768
+ _optionalChain$F([this, 'access', _2 => _2.client, 'access', _3 => _3.sendEvent, 'optionalCall', _4 => _4({
1768
1769
  name,
1769
1770
  metrics: cleanMetrics ,
1770
1771
  categories: cleanCategories ,
@@ -1835,7 +1836,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1835
1836
  log$6('Reporting JS error:', {
1836
1837
  name: error.name,
1837
1838
  message: error.message.slice(0, 100),
1838
- stack: _optionalChain$E([error, 'access', _5 => _5.stack, 'optionalAccess', _6 => _6.slice, 'call', _7 => _7(0, 200)]),
1839
+ stack: _optionalChain$F([error, 'access', _5 => _5.stack, 'optionalAccess', _6 => _6.slice, 'call', _7 => _7(0, 200)]),
1839
1840
  extra,
1840
1841
  source,
1841
1842
  });
@@ -1855,7 +1856,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1855
1856
  if (!this.ensureInitialized()) {
1856
1857
  return;
1857
1858
  }
1858
- _optionalChain$E([this, 'access', _8 => _8.client, 'access', _9 => _9.context, 'optionalAccess', _10 => _10.set, 'call', _11 => _11(key, value)]);
1859
+ _optionalChain$F([this, 'access', _8 => _8.client, 'access', _9 => _9.context, 'optionalAccess', _10 => _10.set, 'call', _11 => _11(key, value)]);
1859
1860
  }
1860
1861
 
1861
1862
  /**
@@ -1866,7 +1867,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1866
1867
  return;
1867
1868
  }
1868
1869
  log$6('Merging context:', context);
1869
- _optionalChain$E([this, 'access', _12 => _12.client, 'access', _13 => _13.context, 'optionalAccess', _14 => _14.merge, 'call', _15 => _15(context)]);
1870
+ _optionalChain$F([this, 'access', _12 => _12.client, 'access', _13 => _13.context, 'optionalAccess', _14 => _14.merge, 'call', _15 => _15(context)]);
1870
1871
  }
1871
1872
 
1872
1873
  /**
@@ -1876,7 +1877,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1876
1877
  if (!this.ensureInitialized()) {
1877
1878
  return;
1878
1879
  }
1879
- _optionalChain$E([this, 'access', _16 => _16.client, 'access', _17 => _17.context, 'optionalAccess', _18 => _18.delete, 'call', _19 => _19(key)]);
1880
+ _optionalChain$F([this, 'access', _16 => _16.client, 'access', _17 => _17.context, 'optionalAccess', _18 => _18.delete, 'call', _19 => _19(key)]);
1880
1881
  }
1881
1882
 
1882
1883
  /**
@@ -1886,7 +1887,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1886
1887
  if (!this.ensureInitialized()) {
1887
1888
  return;
1888
1889
  }
1889
- _optionalChain$E([this, 'access', _20 => _20.client, 'access', _21 => _21.context, 'optionalAccess', _22 => _22.clear, 'call', _23 => _23()]);
1890
+ _optionalChain$F([this, 'access', _20 => _20.client, 'access', _21 => _21.context, 'optionalAccess', _22 => _22.clear, 'call', _23 => _23()]);
1890
1891
  }
1891
1892
 
1892
1893
  /**
@@ -1923,7 +1924,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1923
1924
  return;
1924
1925
  }
1925
1926
  log$6('Flushing Slardar data...');
1926
- _optionalChain$E([this, 'access', _24 => _24.client, 'access', _25 => _25.getSender, 'optionalCall', _26 => _26(), 'optionalAccess', _27 => _27.flush, 'call', _28 => _28()]);
1927
+ _optionalChain$F([this, 'access', _24 => _24.client, 'access', _25 => _25.getSender, 'optionalCall', _26 => _26(), 'optionalAccess', _27 => _27.flush, 'call', _28 => _28()]);
1927
1928
  log$6('Waiting %dms for events to be sent...', waitMs);
1928
1929
  await new Promise(resolve => setTimeout(resolve, waitMs));
1929
1930
  log$6('Slardar data flushed');
@@ -1942,7 +1943,7 @@ class SlardarCLIReporter {constructor() { SlardarCLIReporter.prototype.__init.ca
1942
1943
  */
1943
1944
  const reporter = new SlardarCLIReporter();
1944
1945
 
1945
- function _optionalChain$D(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1946
+ function _optionalChain$E(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1946
1947
 
1947
1948
 
1948
1949
 
@@ -2002,11 +2003,11 @@ const EventBuilder = {
2002
2003
  name: CLI_EVENTS.CLI_COMMAND,
2003
2004
  categories: {
2004
2005
  command,
2005
- args: _optionalChain$D([options, 'optionalAccess', _ => _.args]),
2006
+ args: _optionalChain$E([options, 'optionalAccess', _ => _.args]),
2006
2007
  status: 'running' ,
2007
- ..._optionalChain$D([options, 'optionalAccess', _2 => _2.categories]),
2008
+ ..._optionalChain$E([options, 'optionalAccess', _2 => _2.categories]),
2008
2009
  },
2009
- metrics: _optionalChain$D([options, 'optionalAccess', _3 => _3.metrics]),
2010
+ metrics: _optionalChain$E([options, 'optionalAccess', _3 => _3.metrics]),
2010
2011
  };
2011
2012
  },
2012
2013
 
@@ -2027,13 +2028,13 @@ const EventBuilder = {
2027
2028
  name: CLI_EVENTS.CLI_COMMAND_COMPLETE,
2028
2029
  categories: {
2029
2030
  command,
2030
- args: _optionalChain$D([options, 'optionalAccess', _4 => _4.args]),
2031
+ args: _optionalChain$E([options, 'optionalAccess', _4 => _4.args]),
2031
2032
  status: success ? ('success' ) : ('fail' ),
2032
- ..._optionalChain$D([options, 'optionalAccess', _5 => _5.categories]),
2033
+ ..._optionalChain$E([options, 'optionalAccess', _5 => _5.categories]),
2033
2034
  },
2034
2035
  metrics: {
2035
2036
  duration,
2036
- ...(_optionalChain$D([options, 'optionalAccess', _6 => _6.errorCode]) && { errorCode: options.errorCode }),
2037
+ ...(_optionalChain$E([options, 'optionalAccess', _6 => _6.errorCode]) && { errorCode: options.errorCode }),
2037
2038
  },
2038
2039
  };
2039
2040
  },
@@ -2054,12 +2055,12 @@ const EventBuilder = {
2054
2055
  name: CLI_EVENTS.NETWORK_REQUEST,
2055
2056
  categories: {
2056
2057
  url,
2057
- method: _optionalChain$D([options, 'optionalAccess', _7 => _7.method]) || 'GET',
2058
- statusCode: _optionalChain$D([options, 'optionalAccess', _8 => _8.statusCode, 'optionalAccess', _9 => _9.toString, 'call', _10 => _10()]),
2059
- status: _optionalChain$D([options, 'optionalAccess', _11 => _11.success]) ? ('success' ) : ('fail' ),
2058
+ method: _optionalChain$E([options, 'optionalAccess', _7 => _7.method]) || 'GET',
2059
+ statusCode: _optionalChain$E([options, 'optionalAccess', _8 => _8.statusCode, 'optionalAccess', _9 => _9.toString, 'call', _10 => _10()]),
2060
+ status: _optionalChain$E([options, 'optionalAccess', _11 => _11.success]) ? ('success' ) : ('fail' ),
2060
2061
  },
2061
2062
  metrics: {
2062
- duration: _optionalChain$D([options, 'optionalAccess', _12 => _12.duration]),
2063
+ duration: _optionalChain$E([options, 'optionalAccess', _12 => _12.duration]),
2063
2064
  },
2064
2065
  };
2065
2066
  },
@@ -2081,11 +2082,11 @@ const EventBuilder = {
2081
2082
  categories: {
2082
2083
  operation,
2083
2084
  filePath,
2084
- status: _optionalChain$D([options, 'optionalAccess', _13 => _13.success]) ? ('success' ) : ('fail' ),
2085
+ status: _optionalChain$E([options, 'optionalAccess', _13 => _13.success]) ? ('success' ) : ('fail' ),
2085
2086
  },
2086
2087
  metrics: {
2087
- duration: _optionalChain$D([options, 'optionalAccess', _14 => _14.duration]),
2088
- fileSize: _optionalChain$D([options, 'optionalAccess', _15 => _15.fileSize]),
2088
+ duration: _optionalChain$E([options, 'optionalAccess', _14 => _14.duration]),
2089
+ fileSize: _optionalChain$E([options, 'optionalAccess', _15 => _15.fileSize]),
2089
2090
  },
2090
2091
  };
2091
2092
  },
@@ -2113,7 +2114,7 @@ const EventBuilder = {
2113
2114
  };
2114
2115
 
2115
2116
  var name = "@coze-arch/cli";
2116
- var version = "0.0.36-alpha.a7a716";
2117
+ var version = "0.0.36-alpha.b20d2b";
2117
2118
  var description = "coze coding devtools cli";
2118
2119
  var license = "MIT";
2119
2120
  var author = "fanwenjie.fe@bytedance.com";
@@ -2223,7 +2224,7 @@ var packageJson = {
2223
2224
  cozePublishConfig: cozePublishConfig
2224
2225
  };
2225
2226
 
2226
- function _optionalChain$C(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
2227
+ function _optionalChain$D(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
2227
2228
  * Slardar 监控初始化和上报
2228
2229
  */
2229
2230
 
@@ -2326,11 +2327,11 @@ const reportCommandComplete = safeRun(
2326
2327
  ,
2327
2328
  ) => {
2328
2329
  const event = EventBuilder.cliCommandComplete(command, success, duration, {
2329
- args: _optionalChain$C([options, 'optionalAccess', _ => _.args]),
2330
- errorCode: _optionalChain$C([options, 'optionalAccess', _2 => _2.errorCode]),
2330
+ args: _optionalChain$D([options, 'optionalAccess', _ => _.args]),
2331
+ errorCode: _optionalChain$D([options, 'optionalAccess', _2 => _2.errorCode]),
2331
2332
  categories: {
2332
- ...(_optionalChain$C([options, 'optionalAccess', _3 => _3.errorMessage]) && { errorMessage: options.errorMessage }),
2333
- ..._optionalChain$C([options, 'optionalAccess', _4 => _4.categories]),
2333
+ ...(_optionalChain$D([options, 'optionalAccess', _3 => _3.errorMessage]) && { errorMessage: options.errorMessage }),
2334
+ ..._optionalChain$D([options, 'optionalAccess', _4 => _4.categories]),
2334
2335
  },
2335
2336
  });
2336
2337
  reporter.sendEvent(event.name, event.metrics, event.categories);
@@ -2389,7 +2390,7 @@ const flushSlardar = safeRun('flushSlardar', async () => {
2389
2390
  await reporter.flush();
2390
2391
  });
2391
2392
 
2392
- function _nullishCoalesce$b(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$B(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var LogLevel; (function (LogLevel) {
2393
+ function _nullishCoalesce$b(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$C(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var LogLevel; (function (LogLevel) {
2393
2394
  const ERROR = 0; LogLevel[LogLevel["ERROR"] = ERROR] = "ERROR";
2394
2395
  const WARN = 1; LogLevel[LogLevel["WARN"] = WARN] = "WARN";
2395
2396
  const SUCCESS = 2; LogLevel[LogLevel["SUCCESS"] = SUCCESS] = "SUCCESS";
@@ -2436,7 +2437,7 @@ class Logger {
2436
2437
  return level;
2437
2438
  }
2438
2439
 
2439
- const envLevel = _optionalChain$B([process, 'access', _ => _.env, 'access', _2 => _2.LOG_LEVEL, 'optionalAccess', _3 => _3.toLowerCase, 'call', _4 => _4()]);
2440
+ const envLevel = _optionalChain$C([process, 'access', _ => _.env, 'access', _2 => _2.LOG_LEVEL, 'optionalAccess', _3 => _3.toLowerCase, 'call', _4 => _4()]);
2440
2441
  if (envLevel && envLevel in LOG_LEVEL_MAP) {
2441
2442
  // envLevel 已通过 `in` 检查确认为 LOG_LEVEL_MAP 的键;
2442
2443
  // 显式判空以满足 noUncheckedIndexedAccess,运行时行为不变
@@ -2453,7 +2454,7 @@ class Logger {
2453
2454
  // 简单检测:Node.js 环境且支持 TTY
2454
2455
  return (
2455
2456
  typeof process !== 'undefined' &&
2456
- _optionalChain$B([process, 'access', _5 => _5.stdout, 'optionalAccess', _6 => _6.isTTY]) === true &&
2457
+ _optionalChain$C([process, 'access', _5 => _5.stdout, 'optionalAccess', _6 => _6.isTTY]) === true &&
2457
2458
  process.env.NO_COLOR === undefined
2458
2459
  );
2459
2460
  }
@@ -3261,7 +3262,7 @@ const registerCommand$6 = program => {
3261
3262
  });
3262
3263
  };
3263
3264
 
3264
- function _optionalChain$A(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// Safe JSON parsing utilities with type safety and error handling
3265
+ function _optionalChain$B(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// Safe JSON parsing utilities with type safety and error handling
3265
3266
  // Provides fallback values, validation, and error monitoring capabilities
3266
3267
 
3267
3268
  /**
@@ -3361,12 +3362,12 @@ function safeJsonParse(
3361
3362
  const parsed = JSON.parse(String(input));
3362
3363
 
3363
3364
  // Optional validation
3364
- if (_optionalChain$A([options, 'optionalAccess', _ => _.validate])) {
3365
+ if (_optionalChain$B([options, 'optionalAccess', _ => _.validate])) {
3365
3366
  if (options.validate(parsed)) {
3366
3367
  return parsed;
3367
3368
  } else {
3368
3369
  const validationError = new Error('JSON validation failed');
3369
- _optionalChain$A([options, 'access', _2 => _2.onError, 'optionalCall', _3 => _3(validationError, input)]);
3370
+ _optionalChain$B([options, 'access', _2 => _2.onError, 'optionalCall', _3 => _3(validationError, input)]);
3370
3371
 
3371
3372
  if (options.throwOnValidationError) {
3372
3373
  throw validationError;
@@ -3378,10 +3379,10 @@ function safeJsonParse(
3378
3379
  return parsed;
3379
3380
  } catch (error) {
3380
3381
  // Re-throw validation errors when throwOnValidationError is true
3381
- if (error instanceof Error && error.message === 'JSON validation failed' && _optionalChain$A([options, 'optionalAccess', _4 => _4.throwOnValidationError])) {
3382
+ if (error instanceof Error && error.message === 'JSON validation failed' && _optionalChain$B([options, 'optionalAccess', _4 => _4.throwOnValidationError])) {
3382
3383
  throw error;
3383
3384
  }
3384
- _optionalChain$A([options, 'optionalAccess', _5 => _5.onError, 'optionalCall', _6 => _6(error , input)]);
3385
+ _optionalChain$B([options, 'optionalAccess', _5 => _5.onError, 'optionalCall', _6 => _6(error , input)]);
3385
3386
  return defaultValue;
3386
3387
  }
3387
3388
  }
@@ -3421,7 +3422,7 @@ function isNode(node) {
3421
3422
  }
3422
3423
  const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
3423
3424
 
3424
- function _optionalChain$z(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3425
+ function _optionalChain$A(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3425
3426
  const BREAK = Symbol('break visit');
3426
3427
  const SKIP = Symbol('skip children');
3427
3428
  const REMOVE = Symbol('remove node');
@@ -3534,15 +3535,15 @@ function callVisitor(key, node, visitor, path) {
3534
3535
  if (typeof visitor === 'function')
3535
3536
  return visitor(key, node, path);
3536
3537
  if (isMap(node))
3537
- return _optionalChain$z([visitor, 'access', _ => _.Map, 'optionalCall', _2 => _2(key, node, path)]);
3538
+ return _optionalChain$A([visitor, 'access', _ => _.Map, 'optionalCall', _2 => _2(key, node, path)]);
3538
3539
  if (isSeq(node))
3539
- return _optionalChain$z([visitor, 'access', _3 => _3.Seq, 'optionalCall', _4 => _4(key, node, path)]);
3540
+ return _optionalChain$A([visitor, 'access', _3 => _3.Seq, 'optionalCall', _4 => _4(key, node, path)]);
3540
3541
  if (isPair(node))
3541
- return _optionalChain$z([visitor, 'access', _5 => _5.Pair, 'optionalCall', _6 => _6(key, node, path)]);
3542
+ return _optionalChain$A([visitor, 'access', _5 => _5.Pair, 'optionalCall', _6 => _6(key, node, path)]);
3542
3543
  if (isScalar(node))
3543
- return _optionalChain$z([visitor, 'access', _7 => _7.Scalar, 'optionalCall', _8 => _8(key, node, path)]);
3544
+ return _optionalChain$A([visitor, 'access', _7 => _7.Scalar, 'optionalCall', _8 => _8(key, node, path)]);
3544
3545
  if (isAlias(node))
3545
- return _optionalChain$z([visitor, 'access', _9 => _9.Alias, 'optionalCall', _10 => _10(key, node, path)]);
3546
+ return _optionalChain$A([visitor, 'access', _9 => _9.Alias, 'optionalCall', _10 => _10(key, node, path)]);
3546
3547
  return undefined;
3547
3548
  }
3548
3549
  function replaceNode(key, path, node) {
@@ -3633,7 +3634,7 @@ function applyReviver(reviver, obj, key, val) {
3633
3634
  return reviver.call(obj, key, val);
3634
3635
  }
3635
3636
 
3636
- function _optionalChain$y(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3637
+ function _optionalChain$z(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3637
3638
  /**
3638
3639
  * Recursively convert any node or its contents to native JavaScript
3639
3640
  *
@@ -3663,7 +3664,7 @@ function toJS(value, arg, ctx) {
3663
3664
  ctx.onCreate(res);
3664
3665
  return res;
3665
3666
  }
3666
- if (typeof value === 'bigint' && !_optionalChain$y([ctx, 'optionalAccess', _ => _.keep]))
3667
+ if (typeof value === 'bigint' && !_optionalChain$z([ctx, 'optionalAccess', _ => _.keep]))
3667
3668
  return Number(value);
3668
3669
  return value;
3669
3670
  }
@@ -3701,7 +3702,7 @@ class NodeBase {
3701
3702
  }
3702
3703
  }
3703
3704
 
3704
- function _optionalChain$x(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3705
+ function _optionalChain$y(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3705
3706
  class Alias extends NodeBase {
3706
3707
  constructor(source) {
3707
3708
  super(ALIAS);
@@ -3717,10 +3718,10 @@ class Alias extends NodeBase {
3717
3718
  * instance of the `source` anchor before this node.
3718
3719
  */
3719
3720
  resolve(doc, ctx) {
3720
- if (_optionalChain$x([ctx, 'optionalAccess', _ => _.maxAliasCount]) === 0)
3721
+ if (_optionalChain$y([ctx, 'optionalAccess', _ => _.maxAliasCount]) === 0)
3721
3722
  throw new ReferenceError('Alias resolution is disabled');
3722
3723
  let nodes;
3723
- if (_optionalChain$x([ctx, 'optionalAccess', _2 => _2.aliasResolveCache])) {
3724
+ if (_optionalChain$y([ctx, 'optionalAccess', _2 => _2.aliasResolveCache])) {
3724
3725
  nodes = ctx.aliasResolveCache;
3725
3726
  }
3726
3727
  else {
@@ -3759,7 +3760,7 @@ class Alias extends NodeBase {
3759
3760
  data = anchors.get(source);
3760
3761
  }
3761
3762
  /* istanbul ignore if */
3762
- if (_optionalChain$x([data, 'optionalAccess', _3 => _3.res]) === undefined) {
3763
+ if (_optionalChain$y([data, 'optionalAccess', _3 => _3.res]) === undefined) {
3763
3764
  const msg = 'This should not happen: Alias anchor was not resolved?';
3764
3765
  throw new ReferenceError(msg);
3765
3766
  }
@@ -3811,7 +3812,7 @@ function getAliasCount(doc, node, anchors) {
3811
3812
  return 1;
3812
3813
  }
3813
3814
 
3814
- function _optionalChain$w(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3815
+ function _optionalChain$x(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3815
3816
  const isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');
3816
3817
  class Scalar extends NodeBase {
3817
3818
  constructor(value) {
@@ -3819,7 +3820,7 @@ class Scalar extends NodeBase {
3819
3820
  this.value = value;
3820
3821
  }
3821
3822
  toJSON(arg, ctx) {
3822
- return _optionalChain$w([ctx, 'optionalAccess', _ => _.keep]) ? this.value : toJS(this.value, arg, ctx);
3823
+ return _optionalChain$x([ctx, 'optionalAccess', _ => _.keep]) ? this.value : toJS(this.value, arg, ctx);
3823
3824
  }
3824
3825
  toString() {
3825
3826
  return String(this.value);
@@ -3831,7 +3832,7 @@ Scalar.PLAIN = 'PLAIN';
3831
3832
  Scalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';
3832
3833
  Scalar.QUOTE_SINGLE = 'QUOTE_SINGLE';
3833
3834
 
3834
- function _nullishCoalesce$a(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$v(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3835
+ function _nullishCoalesce$a(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$w(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
3835
3836
  const defaultTagPrefix = 'tag:yaml.org,2002:';
3836
3837
  function findTagObject(value, tagName, tags) {
3837
3838
  if (tagName) {
@@ -3841,7 +3842,7 @@ function findTagObject(value, tagName, tags) {
3841
3842
  throw new Error(`Tag ${tagName} not found`);
3842
3843
  return tagObj;
3843
3844
  }
3844
- return tags.find(t => _optionalChain$v([t, 'access', _ => _.identify, 'optionalCall', _2 => _2(value)]) && !t.format);
3845
+ return tags.find(t => _optionalChain$w([t, 'access', _ => _.identify, 'optionalCall', _2 => _2(value)]) && !t.format);
3845
3846
  }
3846
3847
  function createNode(value, tagName, ctx) {
3847
3848
  if (isDocument(value))
@@ -3849,7 +3850,7 @@ function createNode(value, tagName, ctx) {
3849
3850
  if (isNode(value))
3850
3851
  return value;
3851
3852
  if (isPair(value)) {
3852
- const map = _optionalChain$v([ctx, 'access', _3 => _3.schema, 'access', _4 => _4[MAP], 'access', _5 => _5.createNode, 'optionalCall', _6 => _6(ctx.schema, null, ctx)]);
3853
+ const map = _optionalChain$w([ctx, 'access', _3 => _3.schema, 'access', _4 => _4[MAP], 'access', _5 => _5.createNode, 'optionalCall', _6 => _6(ctx.schema, null, ctx)]);
3853
3854
  map.items.push(value);
3854
3855
  return map;
3855
3856
  }
@@ -3876,7 +3877,7 @@ function createNode(value, tagName, ctx) {
3876
3877
  sourceObjects.set(value, ref);
3877
3878
  }
3878
3879
  }
3879
- if (_optionalChain$v([tagName, 'optionalAccess', _7 => _7.startsWith, 'call', _8 => _8('!!')]))
3880
+ if (_optionalChain$w([tagName, 'optionalAccess', _7 => _7.startsWith, 'call', _8 => _8('!!')]))
3880
3881
  tagName = defaultTagPrefix + tagName.slice(2);
3881
3882
  let tagObj = findTagObject(value, tagName, schema.tags);
3882
3883
  if (!tagObj) {
@@ -3901,9 +3902,9 @@ function createNode(value, tagName, ctx) {
3901
3902
  onTagObj(tagObj);
3902
3903
  delete ctx.onTagObj;
3903
3904
  }
3904
- const node = _optionalChain$v([tagObj, 'optionalAccess', _9 => _9.createNode])
3905
+ const node = _optionalChain$w([tagObj, 'optionalAccess', _9 => _9.createNode])
3905
3906
  ? tagObj.createNode(ctx.schema, value, ctx)
3906
- : typeof _optionalChain$v([tagObj, 'optionalAccess', _10 => _10.nodeClass, 'optionalAccess', _11 => _11.from]) === 'function'
3907
+ : typeof _optionalChain$w([tagObj, 'optionalAccess', _10 => _10.nodeClass, 'optionalAccess', _11 => _11.from]) === 'function'
3907
3908
  ? tagObj.nodeClass.from(ctx.schema, value, ctx)
3908
3909
  : new Scalar(value);
3909
3910
  if (tagName)
@@ -4221,7 +4222,7 @@ function consumeMoreIndentedLines(text, i, indent) {
4221
4222
  return end;
4222
4223
  }
4223
4224
 
4224
- function _optionalChain$u(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4225
+ function _optionalChain$v(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4225
4226
  const getFoldOptions = (ctx, isBlock) => ({
4226
4227
  indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,
4227
4228
  lineWidth: ctx.options.lineWidth,
@@ -4506,9 +4507,9 @@ function plainString(item, ctx, onComment, onChompKeep) {
4506
4507
  // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
4507
4508
  // and others in v1.1.
4508
4509
  if (actualString) {
4509
- const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && _optionalChain$u([tag, 'access', _ => _.test, 'optionalAccess', _2 => _2.test, 'call', _3 => _3(str)]);
4510
+ const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && _optionalChain$v([tag, 'access', _ => _.test, 'optionalAccess', _2 => _2.test, 'call', _3 => _3(str)]);
4510
4511
  const { compat, tags } = ctx.doc.schema;
4511
- if (tags.some(test) || _optionalChain$u([compat, 'optionalAccess', _4 => _4.some, 'call', _5 => _5(test)]))
4512
+ if (tags.some(test) || _optionalChain$v([compat, 'optionalAccess', _4 => _4.some, 'call', _5 => _5(test)]))
4512
4513
  return quotedString(value, ctx);
4513
4514
  }
4514
4515
  return implicitKey
@@ -4554,7 +4555,7 @@ function stringifyString(item, ctx, onComment, onChompKeep) {
4554
4555
  return res;
4555
4556
  }
4556
4557
 
4557
- function _nullishCoalesce$9(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$t(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4558
+ function _nullishCoalesce$9(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$u(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4558
4559
  function createStringifyContext(doc, options) {
4559
4560
  const opt = Object.assign({
4560
4561
  blockQuote: true,
@@ -4607,7 +4608,7 @@ function getTagObject(tags, item) {
4607
4608
  let obj;
4608
4609
  if (isScalar(item)) {
4609
4610
  obj = item.value;
4610
- let match = tags.filter(t => _optionalChain$t([t, 'access', _ => _.identify, 'optionalCall', _2 => _2(obj)]));
4611
+ let match = tags.filter(t => _optionalChain$u([t, 'access', _ => _.identify, 'optionalCall', _2 => _2(obj)]));
4611
4612
  if (match.length > 1) {
4612
4613
  const testMatch = match.filter(t => t.test);
4613
4614
  if (testMatch.length > 0)
@@ -4621,7 +4622,7 @@ function getTagObject(tags, item) {
4621
4622
  tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
4622
4623
  }
4623
4624
  if (!tagObj) {
4624
- const name = _nullishCoalesce$9(_optionalChain$t([obj, 'optionalAccess', _3 => _3.constructor, 'optionalAccess', _4 => _4.name]), () => ( (obj === null ? 'null' : typeof obj)));
4625
+ const name = _nullishCoalesce$9(_optionalChain$u([obj, 'optionalAccess', _3 => _3.constructor, 'optionalAccess', _4 => _4.name]), () => ( (obj === null ? 'null' : typeof obj)));
4625
4626
  throw new Error(`Tag not resolved for ${name} value`);
4626
4627
  }
4627
4628
  return tagObj;
@@ -4647,7 +4648,7 @@ function stringify(item, ctx, onComment, onChompKeep) {
4647
4648
  if (isAlias(item)) {
4648
4649
  if (ctx.doc.directives)
4649
4650
  return item.toString(ctx);
4650
- if (_optionalChain$t([ctx, 'access', _5 => _5.resolvedAliases, 'optionalAccess', _6 => _6.has, 'call', _7 => _7(item)])) {
4651
+ if (_optionalChain$u([ctx, 'access', _5 => _5.resolvedAliases, 'optionalAccess', _6 => _6.has, 'call', _7 => _7(item)])) {
4651
4652
  throw new TypeError(`Cannot stringify circular structure without alias nodes`);
4652
4653
  }
4653
4654
  else {
@@ -4829,7 +4830,7 @@ function warn(logLevel, warning) {
4829
4830
  }
4830
4831
  }
4831
4832
 
4832
- function _optionalChain$s(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4833
+ function _optionalChain$t(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4833
4834
  // If the value associated with a merge key is a single mapping node, each of
4834
4835
  // its key/value pairs is inserted into the current mapping, unless the key
4835
4836
  // already exists in it. If the value associated with the merge key is a
@@ -4853,7 +4854,7 @@ const isMergeKey = (ctx, key) => (merge.identify(key) ||
4853
4854
  (isScalar(key) &&
4854
4855
  (!key.type || key.type === Scalar.PLAIN) &&
4855
4856
  merge.identify(key.value))) &&
4856
- _optionalChain$s([ctx, 'optionalAccess', _ => _.doc, 'access', _2 => _2.schema, 'access', _3 => _3.tags, 'access', _4 => _4.some, 'call', _5 => _5(tag => tag.tag === merge.tag && tag.default)]);
4857
+ _optionalChain$t([ctx, 'optionalAccess', _ => _.doc, 'access', _2 => _2.schema, 'access', _3 => _3.tags, 'access', _4 => _4.some, 'call', _5 => _5(tag => tag.tag === merge.tag && tag.default)]);
4857
4858
  function addMergeToJSMap(ctx, map, value) {
4858
4859
  const source = resolveAliasValue(ctx, value);
4859
4860
  if (isSeq(source))
@@ -4893,7 +4894,7 @@ function resolveAliasValue(ctx, value) {
4893
4894
  return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;
4894
4895
  }
4895
4896
 
4896
- function _optionalChain$r(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4897
+ function _optionalChain$s(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4897
4898
  function addPairToJSMap(ctx, map, { key, value }) {
4898
4899
  if (isNode(key) && key.addToJSMap)
4899
4900
  key.addToJSMap(ctx, map, value);
@@ -4930,7 +4931,7 @@ function stringifyKey(key, jsKey, ctx) {
4930
4931
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
4931
4932
  if (typeof jsKey !== 'object')
4932
4933
  return String(jsKey);
4933
- if (isNode(key) && _optionalChain$r([ctx, 'optionalAccess', _ => _.doc])) {
4934
+ if (isNode(key) && _optionalChain$s([ctx, 'optionalAccess', _ => _.doc])) {
4934
4935
  const strCtx = createStringifyContext(ctx.doc, {});
4935
4936
  strCtx.anchors = new Set();
4936
4937
  for (const node of ctx.anchors.keys())
@@ -4950,7 +4951,7 @@ function stringifyKey(key, jsKey, ctx) {
4950
4951
  return JSON.stringify(jsKey);
4951
4952
  }
4952
4953
 
4953
- function _optionalChain$q(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4954
+ function _optionalChain$r(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4954
4955
  function createPair(key, value, ctx) {
4955
4956
  const k = createNode(key, undefined, ctx);
4956
4957
  const v = createNode(value, undefined, ctx);
@@ -4971,17 +4972,17 @@ class Pair {
4971
4972
  return new Pair(key, value);
4972
4973
  }
4973
4974
  toJSON(_, ctx) {
4974
- const pair = _optionalChain$q([ctx, 'optionalAccess', _2 => _2.mapAsMap]) ? new Map() : {};
4975
+ const pair = _optionalChain$r([ctx, 'optionalAccess', _2 => _2.mapAsMap]) ? new Map() : {};
4975
4976
  return addPairToJSMap(ctx, pair, this);
4976
4977
  }
4977
4978
  toString(ctx, onComment, onChompKeep) {
4978
- return _optionalChain$q([ctx, 'optionalAccess', _3 => _3.doc])
4979
+ return _optionalChain$r([ctx, 'optionalAccess', _3 => _3.doc])
4979
4980
  ? stringifyPair(this, ctx, onComment, onChompKeep)
4980
4981
  : JSON.stringify(this);
4981
4982
  }
4982
4983
  }
4983
4984
 
4984
- function _nullishCoalesce$7(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$p(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4985
+ function _nullishCoalesce$7(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$q(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
4985
4986
  function stringifyCollection(collection, ctx, options) {
4986
4987
  const flow = _nullishCoalesce$7(ctx.inFlow, () => ( collection.flow));
4987
4988
  const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;
@@ -5075,7 +5076,7 @@ function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {
5075
5076
  if (iv.commentBefore)
5076
5077
  reqNewline = true;
5077
5078
  }
5078
- else if (item.value == null && _optionalChain$p([ik, 'optionalAccess', _ => _.comment])) {
5079
+ else if (item.value == null && _optionalChain$q([ik, 'optionalAccess', _ => _.comment])) {
5079
5080
  comment = ik.comment;
5080
5081
  }
5081
5082
  }
@@ -5130,7 +5131,7 @@ function addCommentBefore({ indent, options: { commentString } }, lines, comment
5130
5131
  }
5131
5132
  }
5132
5133
 
5133
- function _nullishCoalesce$6(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$o(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5134
+ function _nullishCoalesce$6(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$p(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5134
5135
  function findPair(items, key) {
5135
5136
  const k = isScalar(key) ? key.value : key;
5136
5137
  for (const it of items) {
@@ -5191,12 +5192,12 @@ class YAMLMap extends Collection {
5191
5192
  _pair = pair;
5192
5193
  else if (!pair || typeof pair !== 'object' || !('key' in pair)) {
5193
5194
  // In TypeScript, this never happens.
5194
- _pair = new Pair(pair, _optionalChain$o([pair, 'optionalAccess', _2 => _2.value]));
5195
+ _pair = new Pair(pair, _optionalChain$p([pair, 'optionalAccess', _2 => _2.value]));
5195
5196
  }
5196
5197
  else
5197
5198
  _pair = new Pair(pair.key, pair.value);
5198
5199
  const prev = findPair(this.items, _pair.key);
5199
- const sortEntries = _optionalChain$o([this, 'access', _3 => _3.schema, 'optionalAccess', _4 => _4.sortMapEntries]);
5200
+ const sortEntries = _optionalChain$p([this, 'access', _3 => _3.schema, 'optionalAccess', _4 => _4.sortMapEntries]);
5200
5201
  if (prev) {
5201
5202
  if (!overwrite)
5202
5203
  throw new Error(`Key ${_pair.key} already set`);
@@ -5226,7 +5227,7 @@ class YAMLMap extends Collection {
5226
5227
  }
5227
5228
  get(key, keepScalar) {
5228
5229
  const it = findPair(this.items, key);
5229
- const node = _optionalChain$o([it, 'optionalAccess', _5 => _5.value]);
5230
+ const node = _optionalChain$p([it, 'optionalAccess', _5 => _5.value]);
5230
5231
  return _nullishCoalesce$6((!keepScalar && isScalar(node) ? node.value : node), () => ( undefined));
5231
5232
  }
5232
5233
  has(key) {
@@ -5241,8 +5242,8 @@ class YAMLMap extends Collection {
5241
5242
  * @returns Instance of Type, Map, or Object
5242
5243
  */
5243
5244
  toJSON(_, ctx, Type) {
5244
- const map = Type ? new Type() : _optionalChain$o([ctx, 'optionalAccess', _6 => _6.mapAsMap]) ? new Map() : {};
5245
- if (_optionalChain$o([ctx, 'optionalAccess', _7 => _7.onCreate]))
5245
+ const map = Type ? new Type() : _optionalChain$p([ctx, 'optionalAccess', _6 => _6.mapAsMap]) ? new Map() : {};
5246
+ if (_optionalChain$p([ctx, 'optionalAccess', _7 => _7.onCreate]))
5246
5247
  ctx.onCreate(map);
5247
5248
  for (const item of this.items)
5248
5249
  addPairToJSMap(ctx, map, item);
@@ -5267,7 +5268,7 @@ class YAMLMap extends Collection {
5267
5268
  }
5268
5269
  }
5269
5270
 
5270
- function _optionalChain$n(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5271
+ function _optionalChain$o(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5271
5272
  class YAMLSeq extends Collection {
5272
5273
  static get tagName() {
5273
5274
  return 'tag:yaml.org,2002:seq';
@@ -5330,7 +5331,7 @@ class YAMLSeq extends Collection {
5330
5331
  }
5331
5332
  toJSON(_, ctx) {
5332
5333
  const seq = [];
5333
- if (_optionalChain$n([ctx, 'optionalAccess', _2 => _2.onCreate]))
5334
+ if (_optionalChain$o([ctx, 'optionalAccess', _2 => _2.onCreate]))
5334
5335
  ctx.onCreate(seq);
5335
5336
  let i = 0;
5336
5337
  for (const item of this.items)
@@ -5409,7 +5410,7 @@ function createPairs(schema, iterable, ctx) {
5409
5410
  return pairs;
5410
5411
  }
5411
5412
 
5412
- function _optionalChain$m(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5413
+ function _optionalChain$n(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5413
5414
  class YAMLOMap extends YAMLSeq {
5414
5415
  constructor() {
5415
5416
  super();
@@ -5428,7 +5429,7 @@ class YAMLOMap extends YAMLSeq {
5428
5429
  if (!ctx)
5429
5430
  return super.toJSON(_);
5430
5431
  const map = new Map();
5431
- if (_optionalChain$m([ctx, 'optionalAccess', _2 => _2.onCreate]))
5432
+ if (_optionalChain$n([ctx, 'optionalAccess', _2 => _2.onCreate]))
5432
5433
  ctx.onCreate(map);
5433
5434
  for (const pair of this.items) {
5434
5435
  let key, value;
@@ -5546,7 +5547,7 @@ const isDirExists = async (file) => {
5546
5547
  }
5547
5548
  };
5548
5549
 
5549
- function _optionalChain$l(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// ABOUTME: Project type detection utility
5550
+ function _optionalChain$m(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// ABOUTME: Project type detection utility
5550
5551
 
5551
5552
  /**
5552
5553
  * 支持的项目类型枚举
@@ -5648,7 +5649,7 @@ const collectProjectInfo = async (
5648
5649
  }
5649
5650
 
5650
5651
  const scripts = Object.entries(
5651
- (_optionalChain$l([packageJson, 'optionalAccess', _ => _.scripts]) ) || {},
5652
+ (_optionalChain$m([packageJson, 'optionalAccess', _ => _.scripts]) ) || {},
5652
5653
  ).reduce((acc, [name, script]) => {
5653
5654
  if (typeof script === 'string') {
5654
5655
  acc[name] = script;
@@ -5802,7 +5803,7 @@ const detectProjectType = async (
5802
5803
  };
5803
5804
  };
5804
5805
 
5805
- function _optionalChain$k(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5806
+ function _optionalChain$l(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
5806
5807
 
5807
5808
 
5808
5809
  /**
@@ -5961,35 +5962,66 @@ const saveProjectPatchState = async (
5961
5962
  await saveTomlCozeConfig(config, projectPath);
5962
5963
  };
5963
5964
 
5964
- /**
5965
- * 获取指定命令的配置
5966
- *
5967
- * @param config - .coze 配置对象
5968
- * @param commandName - 命令名称 (dev/build/start)
5969
- * @returns 命令配置数组
5970
- */
5971
- const getCommandConfig = (
5965
+
5966
+
5967
+ const getDefaultCommandConfig = (
5972
5968
  config,
5973
5969
  commandName,
5974
5970
  ) => {
5975
- let commandConfig;
5971
+ switch (commandName) {
5972
+ case 'dev':
5973
+ return _optionalChain$l([config, 'access', _ => _.dev, 'optionalAccess', _2 => _2.run]);
5974
+ case 'build':
5975
+ return _optionalChain$l([config, 'access', _3 => _3.deploy, 'optionalAccess', _4 => _4.build]);
5976
+ case 'start':
5977
+ return _optionalChain$l([config, 'access', _5 => _5.deploy, 'optionalAccess', _6 => _6.run]);
5978
+ case 'validate':
5979
+ return _optionalChain$l([config, 'access', _7 => _7.dev, 'optionalAccess', _8 => _8.validate]);
5980
+ default:
5981
+ throw new Error(`Unknown command: ${commandName}`);
5982
+ }
5983
+ };
5976
5984
 
5985
+ const getWindowsCommandConfig = (
5986
+ config,
5987
+ commandName,
5988
+ ) => {
5977
5989
  switch (commandName) {
5978
5990
  case 'dev':
5979
- commandConfig = _optionalChain$k([config, 'access', _ => _.dev, 'optionalAccess', _2 => _2.run]);
5980
- break;
5991
+ return _optionalChain$l([config, 'access', _9 => _9.dev, 'optionalAccess', _10 => _10.run_win]);
5981
5992
  case 'build':
5982
- commandConfig = _optionalChain$k([config, 'access', _3 => _3.deploy, 'optionalAccess', _4 => _4.build]);
5983
- break;
5993
+ return _optionalChain$l([config, 'access', _11 => _11.deploy, 'optionalAccess', _12 => _12.build_win]);
5984
5994
  case 'start':
5985
- commandConfig = _optionalChain$k([config, 'access', _5 => _5.deploy, 'optionalAccess', _6 => _6.run]);
5986
- break;
5995
+ return _optionalChain$l([config, 'access', _13 => _13.deploy, 'optionalAccess', _14 => _14.run_win]);
5987
5996
  case 'validate':
5988
- commandConfig = _optionalChain$k([config, 'access', _7 => _7.dev, 'optionalAccess', _8 => _8.validate]);
5989
- break;
5997
+ return _optionalChain$l([config, 'access', _15 => _15.dev, 'optionalAccess', _16 => _16.validate_win]);
5990
5998
  default:
5991
5999
  throw new Error(`Unknown command: ${commandName}`);
5992
6000
  }
6001
+ };
6002
+
6003
+ /**
6004
+ * 获取指定命令的配置
6005
+ *
6006
+ * Windows 优先使用非空的 *_win 配置;其他平台(包括 WSL)始终使用默认配置。
6007
+ *
6008
+ * @param config - .coze 配置对象
6009
+ * @param commandName - 命令名称 (dev/build/start)
6010
+ * @returns 命令配置数组
6011
+ */
6012
+ const getCommandConfig = (
6013
+ config,
6014
+ commandName,
6015
+ platform = process.platform,
6016
+ ) => {
6017
+ const defaultCommandConfig = getDefaultCommandConfig(config, commandName);
6018
+ const windowsCommandConfig =
6019
+ platform === 'win32'
6020
+ ? getWindowsCommandConfig(config, commandName)
6021
+ : undefined;
6022
+ const commandConfig = _optionalChain$l([windowsCommandConfig, 'optionalAccess', _17 => _17.length])
6023
+ ? windowsCommandConfig
6024
+ : defaultCommandConfig;
5993
6025
 
5994
6026
  if (!commandConfig || commandConfig.length === 0) {
5995
6027
  throw new Error(
@@ -6136,7 +6168,7 @@ const byFlag = (flag) => {
6136
6168
  return predicate;
6137
6169
  };
6138
6170
 
6139
- function _optionalChain$j(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6171
+ function _optionalChain$k(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6140
6172
 
6141
6173
 
6142
6174
 
@@ -6167,7 +6199,7 @@ echo "Validate passed!"
6167
6199
  * @returns
6168
6200
  */
6169
6201
  const isCozeValid$3 = (cozeConfig) => {
6170
- if (_optionalChain$j([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6202
+ if (_optionalChain$k([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6171
6203
  logger.info('[patch-expo-validate] NOT APPLY: dev.validate exists');
6172
6204
  return false;
6173
6205
  }
@@ -6312,7 +6344,7 @@ const patchExpoValidate = {
6312
6344
  },
6313
6345
  };
6314
6346
 
6315
- function _optionalChain$i(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6347
+ function _optionalChain$j(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6316
6348
 
6317
6349
 
6318
6350
 
@@ -6345,7 +6377,7 @@ echo "Validate passed!"
6345
6377
  * @returns
6346
6378
  */
6347
6379
  const isCozeValid$2 = (cozeConfig) => {
6348
- if (_optionalChain$i([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6380
+ if (_optionalChain$j([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6349
6381
  logger.info('[patch-nextjs-validate] NOT APPLY: dev.validate exists');
6350
6382
  return false;
6351
6383
  }
@@ -6493,7 +6525,7 @@ const patchNextjsValidate = {
6493
6525
  },
6494
6526
  };
6495
6527
 
6496
- function _optionalChain$h(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6528
+ function _optionalChain$i(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6497
6529
 
6498
6530
  const PATCH_ID$5 = 'nextjs/validate-concurrently@0.0.30';
6499
6531
  const PACKAGE_JSON_FILE$3 = 'package.json';
@@ -6526,7 +6558,7 @@ const readPackageJson = async (projectFolder) => {
6526
6558
  };
6527
6559
 
6528
6560
  const getTargetValidateScript = (packageJson) => {
6529
- const validateScript = _optionalChain$h([packageJson, 'access', _ => _.scripts, 'optionalAccess', _2 => _2.validate]);
6561
+ const validateScript = _optionalChain$i([packageJson, 'access', _ => _.scripts, 'optionalAccess', _2 => _2.validate]);
6530
6562
  if (typeof validateScript !== 'string') {
6531
6563
  return null;
6532
6564
  }
@@ -6543,7 +6575,7 @@ const getTargetValidateScript = (packageJson) => {
6543
6575
 
6544
6576
  const canStackAfterNextjsValidatePatch = async (context, packageJson) => {
6545
6577
  const scripts = packageJson.scripts || {};
6546
- if (typeof scripts.validate !== 'undefined' || typeof scripts['ts-check'] !== 'string' || _optionalChain$h([context, 'access', _3 => _3.cozeConfig, 'access', _4 => _4.dev, 'optionalAccess', _5 => _5.validate])) {
6578
+ if (typeof scripts.validate !== 'undefined' || typeof scripts['ts-check'] !== 'string' || _optionalChain$i([context, 'access', _3 => _3.cozeConfig, 'access', _4 => _4.dev, 'optionalAccess', _5 => _5.validate])) {
6547
6579
  return false;
6548
6580
  }
6549
6581
 
@@ -6612,7 +6644,7 @@ const patchNextjsValidateConcurrently = {
6612
6644
  apply: patchPackageJson$2,
6613
6645
  };
6614
6646
 
6615
- function _optionalChain$g(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6647
+ function _optionalChain$h(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6616
6648
 
6617
6649
 
6618
6650
 
@@ -6645,7 +6677,7 @@ echo "Validate passed!"
6645
6677
  * @returns
6646
6678
  */
6647
6679
  const isCozeValid$1 = (cozeConfig) => {
6648
- if (_optionalChain$g([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6680
+ if (_optionalChain$h([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6649
6681
  logger.info('[patch-vite-validate] NOT APPLY: dev.validate exists');
6650
6682
  return false;
6651
6683
  }
@@ -6790,7 +6822,7 @@ const patchViteValidate = {
6790
6822
  },
6791
6823
  };
6792
6824
 
6793
- function _optionalChain$f(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6825
+ function _optionalChain$g(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6794
6826
 
6795
6827
 
6796
6828
 
@@ -6827,7 +6859,7 @@ echo "Validate passed!"
6827
6859
  * @returns
6828
6860
  */
6829
6861
  const isCozeValid = (cozeConfig) => {
6830
- if (_optionalChain$f([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6862
+ if (_optionalChain$g([cozeConfig, 'access', _ => _.dev, 'optionalAccess', _2 => _2.validate])) {
6831
6863
  logger.info('[patch-taro-validate] NOT APPLY: dev.validate exists');
6832
6864
  return false;
6833
6865
  }
@@ -6976,7 +7008,7 @@ const patchTaroValidate = {
6976
7008
  },
6977
7009
  };
6978
7010
 
6979
- function _optionalChain$e(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
7011
+ function _optionalChain$f(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
6980
7012
  const PATCH_ID$2 = 'taro/update-pack-script-for-tt-build@0.0.13';
6981
7013
  const PACKAGE_JSON_FILE = 'package.json';
6982
7014
  const PACK_SCRIPT_FILE = '.cozeproj/scripts/pack.sh';
@@ -7055,12 +7087,12 @@ const readPackageScripts = async (
7055
7087
  const packageJsonContent = await fs$1.readFile(packageJsonPath, 'utf-8');
7056
7088
  const packageJson = safeJsonParse(packageJsonContent, null);
7057
7089
 
7058
- return _optionalChain$e([packageJson, 'optionalAccess', _ => _.scripts]) || null;
7090
+ return _optionalChain$f([packageJson, 'optionalAccess', _ => _.scripts]) || null;
7059
7091
  };
7060
7092
 
7061
7093
  const hasBuildTtScript = async (projectFolder) => {
7062
7094
  const scripts = await readPackageScripts(projectFolder);
7063
- return typeof _optionalChain$e([scripts, 'optionalAccess', _2 => _2['build:tt']]) === 'string';
7095
+ return typeof _optionalChain$f([scripts, 'optionalAccess', _2 => _2['build:tt']]) === 'string';
7064
7096
  };
7065
7097
 
7066
7098
  const hasLegacyPackScript = async (projectFolder) => {
@@ -7414,7 +7446,7 @@ const getTemplatePatches = (
7414
7446
  ) =>
7415
7447
  patches.filter(patch => patch.template === template);
7416
7448
 
7417
- function _nullishCoalesce$5(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$d(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
7449
+ function _nullishCoalesce$5(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$e(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
7418
7450
  const DEFAULT_LEGACY_VERSION = 'legacy';
7419
7451
 
7420
7452
  const loadFlagsWithFallback = async () => {
@@ -7520,7 +7552,7 @@ const getNextPatchState = (
7520
7552
 
7521
7553
  ) => ({
7522
7554
  template,
7523
- version: _optionalChain$d([config, 'access', _ => _.project, 'optionalAccess', _2 => _2.version]) || DEFAULT_LEGACY_VERSION,
7555
+ version: _optionalChain$e([config, 'access', _ => _.project, 'optionalAccess', _2 => _2.version]) || DEFAULT_LEGACY_VERSION,
7524
7556
  appliedPatches: [...appliedPatches, patchId],
7525
7557
  });
7526
7558
 
@@ -7544,15 +7576,15 @@ const executePatch = async (
7544
7576
  }
7545
7577
 
7546
7578
  const template =
7547
- _optionalChain$d([config, 'access', _3 => _3.project, 'optionalAccess', _4 => _4.template]) || (await detectTemplateKey(projectFolder));
7579
+ _optionalChain$e([config, 'access', _3 => _3.project, 'optionalAccess', _4 => _4.template]) || (await detectTemplateKey(projectFolder));
7548
7580
 
7549
7581
  if (!template) {
7550
7582
  logger.info('Patch skipped: template not detected');
7551
7583
  return;
7552
7584
  }
7553
7585
 
7554
- const appliedPatches = [...(_optionalChain$d([config, 'access', _5 => _5.project, 'optionalAccess', _6 => _6.appliedPatches]) || [])];
7555
- const projectVersion = _optionalChain$d([config, 'access', _7 => _7.project, 'optionalAccess', _8 => _8.version]);
7586
+ const appliedPatches = [...(_optionalChain$e([config, 'access', _5 => _5.project, 'optionalAccess', _6 => _6.appliedPatches]) || [])];
7587
+ const projectVersion = _optionalChain$e([config, 'access', _7 => _7.project, 'optionalAccess', _8 => _8.version]);
7556
7588
  const flags = await loadFlagsWithFallback();
7557
7589
 
7558
7590
  const context = {
@@ -7655,14 +7687,14 @@ const registerCommand$5 = program => {
7655
7687
  ) => {
7656
7688
  await executePatch({
7657
7689
  directory,
7658
- dryRun: _optionalChain$d([command, 'optionalAccess', _9 => _9.dryRun]),
7659
- showFlags: _optionalChain$d([command, 'optionalAccess', _10 => _10.showFlags]),
7690
+ dryRun: _optionalChain$e([command, 'optionalAccess', _9 => _9.dryRun]),
7691
+ showFlags: _optionalChain$e([command, 'optionalAccess', _10 => _10.showFlags]),
7660
7692
  });
7661
7693
  },
7662
7694
  );
7663
7695
  };
7664
7696
 
7665
- function _nullishCoalesce$4(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$c(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
7697
+ function _nullishCoalesce$4(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$d(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
7666
7698
  const d$1 = debug('coze-init-cli:run');
7667
7699
 
7668
7700
  /**
@@ -7793,12 +7825,12 @@ const executeRun = async (commandName, options = {}) => {
7793
7825
  }
7794
7826
 
7795
7827
  // 将输出同时写入控制台和日志文件
7796
- _optionalChain$c([childProcess, 'access', _ => _.stdout, 'optionalAccess', _2 => _2.on, 'call', _3 => _3('data', (data) => {
7828
+ _optionalChain$d([childProcess, 'access', _ => _.stdout, 'optionalAccess', _2 => _2.on, 'call', _3 => _3('data', (data) => {
7797
7829
  process.stdout.write(data);
7798
7830
  logStream.write(data);
7799
7831
  })]);
7800
7832
 
7801
- _optionalChain$c([childProcess, 'access', _4 => _4.stderr, 'optionalAccess', _5 => _5.on, 'call', _6 => _6('data', (data) => {
7833
+ _optionalChain$d([childProcess, 'access', _4 => _4.stderr, 'optionalAccess', _5 => _5.on, 'call', _6 => _6('data', (data) => {
7802
7834
  process.stderr.write(data);
7803
7835
  logStream.write(data);
7804
7836
  })]);
@@ -8742,7 +8774,7 @@ const scanRoutesOnce = async (
8742
8774
  }
8743
8775
  };
8744
8776
 
8745
- function _optionalChain$b(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// Route manifest generation command
8777
+ function _optionalChain$c(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// Route manifest generation command
8746
8778
 
8747
8779
 
8748
8780
  const log = debug('coze:routes');
@@ -8843,7 +8875,7 @@ const registerCommand$3 = program => {
8843
8875
  'Output file path (defaults to ~/.coze/routes.json)',
8844
8876
  )
8845
8877
  .action(async (directory, options) => {
8846
- await executeRoutes({ directory, output: _optionalChain$b([options, 'optionalAccess', _ => _.output]) });
8878
+ await executeRoutes({ directory, output: _optionalChain$c([options, 'optionalAccess', _ => _.output]) });
8847
8879
  });
8848
8880
  };
8849
8881
 
@@ -10434,8 +10466,7 @@ const withRequestedApplicationType = (
10434
10466
  };
10435
10467
  };
10436
10468
 
10437
- function _optionalChain$a(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
10438
-
10469
+ function _optionalChain$b(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
10439
10470
  const DEFAULT_CONFIG = {
10440
10471
  apiBaseUrl: 'https://code.coze.cn/',
10441
10472
  openApiBaseUrl: 'https://api.coze.cn',
@@ -10447,6 +10478,11 @@ const getSharedConfigPath = () =>
10447
10478
 
10448
10479
  const getLegacyConfigPath = () => node_path.join(node_os.homedir(), '.coze', 'config.json');
10449
10480
 
10481
+ const getDesktopRuntimePaths = () => [
10482
+ node_path.join(node_os.homedir(), '.coze', 'desktop', 'runtime.beta.json'),
10483
+ node_path.join(node_os.homedir(), '.coze', 'desktop', 'runtime.json'),
10484
+ ];
10485
+
10450
10486
  const isRecord$3 = (value) =>
10451
10487
  typeof value === 'object' && value !== null && !Array.isArray(value);
10452
10488
 
@@ -10462,33 +10498,56 @@ const readJson = async (path) => {
10462
10498
  }
10463
10499
  };
10464
10500
 
10501
+ const readDesktopAccessToken = async () => {
10502
+ for (const path of getDesktopRuntimePaths()) {
10503
+ try {
10504
+ const runtime = safeJsonParse(await promises.readFile(path, 'utf8'), undefined);
10505
+ if (!isRecord$3(runtime) || !isRecord$3(runtime.patToken)) {
10506
+ continue;
10507
+ }
10508
+ const {accessToken} = runtime.patToken;
10509
+ if (typeof accessToken === 'string' && accessToken.trim()) {
10510
+ return accessToken.trim();
10511
+ }
10512
+ } catch (error) {
10513
+ }
10514
+ }
10515
+ return undefined;
10516
+ };
10517
+
10465
10518
  const configuredPath = (options) =>
10466
- _optionalChain$a([options, 'optionalAccess', _ => _.config]) || process.env.COZE_CONFIG_FILE;
10519
+ _optionalChain$b([options, 'optionalAccess', _ => _.config]) || process.env.COZE_CONFIG_FILE;
10467
10520
 
10468
10521
  const loadConfig = async (options = {}) => {
10469
10522
  const customPath = configuredPath(options);
10470
10523
  const globalConfig = customPath
10471
10524
  ? await readJson(node_path.resolve(customPath))
10472
10525
  : (await readJson(getSharedConfigPath())) || (await readJson(getLegacyConfigPath()));
10526
+ const desktopAccessToken = await readDesktopAccessToken();
10473
10527
  const environmentAccessToken = process.env.COZE_API_TOKEN;
10528
+ const fixedAccessToken = desktopAccessToken || environmentAccessToken;
10474
10529
  const config = {
10475
10530
  ...DEFAULT_CONFIG,
10476
10531
  ...globalConfig,
10477
- ...(environmentAccessToken
10532
+ ...(fixedAccessToken
10478
10533
  ? {
10479
- accessToken: environmentAccessToken,
10480
- // COZE_API_TOKEN is a fixed runtime credential. Never combine it with
10481
- // refresh metadata left by an earlier OAuth login in config.json.
10534
+ accessToken: fixedAccessToken,
10535
+ // Desktop PAT and COZE_API_TOKEN are fixed runtime credentials. Never
10536
+ // combine them with refresh metadata from an earlier OAuth login.
10482
10537
  refreshToken: undefined,
10483
10538
  tokenExpiresAt: undefined,
10484
10539
  }
10485
10540
  : {}),
10486
10541
  ...(process.env.COZE_ORG_ID ? { organizationId: process.env.COZE_ORG_ID } : {}),
10542
+ ...(process.env.COZE_ACCOUNT_ID ? { cozeAccountId: process.env.COZE_ACCOUNT_ID } : {}),
10487
10543
  ...(process.env.COZE_SPACE_ID ? { spaceId: process.env.COZE_SPACE_ID } : {}),
10488
10544
  ...(process.env.COZE_PROJECT_ID ? { projectId: process.env.COZE_PROJECT_ID } : {}),
10489
10545
  ...(options.orgId ? { organizationId: options.orgId } : {}),
10490
10546
  ...(options.spaceId ? { spaceId: options.spaceId } : {}),
10491
10547
  ...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {}),
10548
+ // Runtime-only trust decision: a value persisted in config.json must never enable
10549
+ // project-secret injection for an OAuth access token.
10550
+ injectApiToken: Boolean(fixedAccessToken),
10492
10551
  };
10493
10552
  return config;
10494
10553
  };
@@ -10814,7 +10873,7 @@ const loginWithOAuth = async (
10814
10873
  await saveOAuthToken(config, options, await pollToken(config, deviceCode));
10815
10874
  };
10816
10875
 
10817
- function _optionalChain$9(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
10876
+ function _optionalChain$a(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
10818
10877
 
10819
10878
 
10820
10879
 
@@ -10880,10 +10939,10 @@ const unwrap = (
10880
10939
  responseMetadata,
10881
10940
  ) => {
10882
10941
  const root = isRecord(payload) ? payload : undefined;
10883
- const first = isRecord(_optionalChain$9([root, 'optionalAccess', _ => _.data])) ? root.data : undefined;
10884
- const second = isRecord(_optionalChain$9([first, 'optionalAccess', _2 => _2.data])) ? first.data : undefined;
10942
+ const first = isRecord(_optionalChain$a([root, 'optionalAccess', _ => _.data])) ? root.data : undefined;
10943
+ const second = isRecord(_optionalChain$a([first, 'optionalAccess', _2 => _2.data])) ? first.data : undefined;
10885
10944
  const envelope = [root, first].find(candidate => candidate && 'code' in candidate);
10886
- if (_optionalChain$9([envelope, 'optionalAccess', _3 => _3.code]) !== undefined && Number(envelope.code) !== 0) {
10945
+ if (_optionalChain$a([envelope, 'optionalAccess', _3 => _3.code]) !== undefined && Number(envelope.code) !== 0) {
10887
10946
  throw new CliError(
10888
10947
  typeof envelope.msg === 'string'
10889
10948
  ? envelope.msg.slice(0, MAX_MESSAGE_LENGTH)
@@ -10932,10 +10991,22 @@ class DeployApiClient {
10932
10991
  'agw-js-conv': 'str',
10933
10992
  'x-request-from-coze-cli': '1',
10934
10993
  };
10935
- if (this.config.organizationId) {
10936
- headers['x-coze-account'] = this.config.organizationId;
10994
+ // Only an explicit environment credential may become a project runtime secret.
10995
+ // OAuth credentials loaded from config.json remain authentication-only.
10996
+ if (
10997
+ this.config.injectApiToken &&
10998
+ path === '/deploy_history/create' &&
10999
+ useApiPrefix
11000
+ ) {
11001
+ headers['x-coze-deploy-inject-api-token'] = 'true';
11002
+ }
11003
+ // Coze account id: an explicit COZE_ACCOUNT_ID (config.cozeAccountId) always wins;
11004
+ // otherwise fall back to the organization id resolved from login/config.
11005
+ const cozeAccount = this.config.cozeAccountId || this.config.organizationId;
11006
+ if (cozeAccount) {
11007
+ headers['x-coze-account'] = cozeAccount;
10937
11008
  }
10938
- const lane = _optionalChain$9([this, 'access', _4 => _4.globalOptions, 'access', _5 => _5.lane, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()]) || _optionalChain$9([this, 'access', _8 => _8.config, 'access', _9 => _9.xTTEnv, 'optionalAccess', _10 => _10.trim, 'call', _11 => _11()]);
11009
+ const lane = _optionalChain$a([this, 'access', _4 => _4.globalOptions, 'access', _5 => _5.lane, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()]) || _optionalChain$a([this, 'access', _8 => _8.config, 'access', _9 => _9.xTTEnv, 'optionalAccess', _10 => _10.trim, 'call', _11 => _11()]);
10939
11010
  if (lane) {
10940
11011
  headers['x-use-ppe'] = '1';
10941
11012
  headers['x-tt-env'] = lane;
@@ -10966,7 +11037,7 @@ class DeployApiClient {
10966
11037
  if (!response.ok) {
10967
11038
  const root = isRecord(payload) ? payload : undefined;
10968
11039
  throw new CliError(
10969
- typeof _optionalChain$9([root, 'optionalAccess', _12 => _12.msg]) === 'string'
11040
+ typeof _optionalChain$a([root, 'optionalAccess', _12 => _12.msg]) === 'string'
10970
11041
  ? root.msg.slice(0, MAX_MESSAGE_LENGTH)
10971
11042
  : `Deployment API failed: ${response.status} ${response.statusText}` +
10972
11043
  `${validJson ? '' : '; response was not JSON'}`,
@@ -10999,6 +11070,17 @@ class DeployApiClient {
10999
11070
  );
11000
11071
  }
11001
11072
 
11073
+ // 回读当前登录态对应的 Coze 账号 id。无入参:账号由服务端从登录态解析(X-Coze-Account →
11074
+ // access token → 兜底登录用户),客户端传什么都只有「等于登录态」一种合法取值。
11075
+ // 只在建 Project 前用一次,用来定这个 Project 下应用的账号归属。
11076
+ getCozeAccount() {
11077
+ return this.post(
11078
+ '/account/get',
11079
+ {},
11080
+ 'coze_account_id',
11081
+ );
11082
+ }
11083
+
11002
11084
  listSpaces(body
11003
11085
 
11004
11086
 
@@ -11171,6 +11253,35 @@ class DeployApiClient {
11171
11253
  );
11172
11254
  }
11173
11255
 
11256
+ authorizeMiniProgram(body
11257
+
11258
+
11259
+
11260
+
11261
+
11262
+
11263
+ ) {
11264
+ return this.post
11265
+
11266
+
11267
+
11268
+ ('/mini_program/auth', body);
11269
+ }
11270
+
11271
+ createMiniProgramPreview(body
11272
+
11273
+
11274
+
11275
+
11276
+ ) {
11277
+ return this.post
11278
+
11279
+
11280
+
11281
+
11282
+ ('/mini_program/preview', body);
11283
+ }
11284
+
11174
11285
  listDomains(appId, unitType) {
11175
11286
  return this.post(
11176
11287
  '/domain/list', {
@@ -11404,7 +11515,7 @@ const registerDoctor = (program) => {
11404
11515
  });
11405
11516
  };
11406
11517
 
11407
- function _optionalChain$8(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11518
+ function _optionalChain$9(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11408
11519
 
11409
11520
 
11410
11521
 
@@ -11435,13 +11546,66 @@ function _optionalChain$8(ops) { let lastAccessLHS = undefined; let value = ops[
11435
11546
 
11436
11547
 
11437
11548
  const getDeployParentOptions = (command) =>
11438
- _optionalChain$8([command, 'access', _ => _.parent, 'optionalAccess', _2 => _2.opts, 'call', _3 => _3()]) || {};
11549
+ _optionalChain$9([command, 'access', _ => _.parent, 'optionalAccess', _2 => _2.opts, 'call', _3 => _3()]) || {};
11439
11550
 
11440
11551
  const getDeployAppIdOption = (
11441
11552
  options,
11442
11553
  command,
11443
11554
  ) => options.appId || getDeployParentOptions(command).appId;
11444
11555
 
11556
+ function _optionalChain$8(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11557
+
11558
+ const isAccountId = (value) => /^[1-9]\d*$/u.test(value);
11559
+
11560
+ /**
11561
+ * 定出这个 Project 下的应用该归属哪个 Coze 账号,写进 project_settings.extra.coze_account_id。
11562
+ *
11563
+ * 优先级(与 api-client 里 x-coze-account 的取值顺序一致,不另立一套口径):
11564
+ * 1. COZE_ACCOUNT_ID(config.cozeAccountId)—— 用户显式指定
11565
+ * 2. COZE_ORG_ID / --org-id(config.organizationId)—— 用户显式指定组织
11566
+ * 3. 登录态回读(deploy v2 account/get)
11567
+ *
11568
+ * ⚠️ 1、2 命中时**不打接口**:本地已经知道账号了,再问一次服务端只是多一个 RTT 和一个失败点。
11569
+ *
11570
+ * 拿不到就返回 undefined(不写 extra),部署照常继续:服务端在 deploy_history/create 里仍会
11571
+ * 按同一条阶梯解析账号,结果与不加这段逻辑时完全一致 —— 只是无登录态的预览初始化那条链路
11572
+ * 少了 Project 上这份归属记录。这是一个辅助接口,不该成为首次部署的单点。
11573
+ */
11574
+ const resolveCozeAccountId = async (
11575
+ runtime,
11576
+ ) => {
11577
+ const configured =
11578
+ _optionalChain$8([runtime, 'access', _ => _.config, 'access', _2 => _2.cozeAccountId, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()]) || _optionalChain$8([runtime, 'access', _5 => _5.config, 'access', _6 => _6.organizationId, 'optionalAccess', _7 => _7.trim, 'call', _8 => _8()]);
11579
+ if (configured) {
11580
+ if (!isAccountId(configured)) {
11581
+ // 不把非法值写进 Project —— 它会被服务端当成「明确但损坏的归属」直接报错。
11582
+ // 该值仍会作为 x-coze-account 发出去,由服务端给出明确的参数错误。
11583
+ runtime.output.debug(
11584
+ `[deploy] Ignoring malformed Coze account id for project settings: ${configured}`,
11585
+ );
11586
+ return undefined;
11587
+ }
11588
+ runtime.output.debug(`[deploy] Using configured Coze account ${configured}`);
11589
+ return configured;
11590
+ }
11591
+ try {
11592
+ const accountId = await _asyncOptionalChain$1([(await runtime.client.getCozeAccount()), 'access', async _9 => _9.coze_account_id, 'optionalAccess', async _10 => _10.trim, 'call', async _11 => _11()]);
11593
+ if (!accountId || !isAccountId(accountId)) {
11594
+ runtime.output.debug(
11595
+ `[deploy] Deployment API returned no usable Coze account id: ${String(accountId)}`,
11596
+ );
11597
+ return undefined;
11598
+ }
11599
+ runtime.output.debug(`[deploy] Resolved Coze account ${accountId} from the current login`);
11600
+ return accountId;
11601
+ } catch (error) {
11602
+ runtime.output.warn(
11603
+ `Unable to resolve the Coze account from the current login; the project will be created without an explicit account: ${String(error)}`,
11604
+ );
11605
+ return undefined;
11606
+ }
11607
+ };
11608
+
11445
11609
  const getCreateDeployConfig = (config) => ({
11446
11610
  deploy_config: {
11447
11611
  cpu: config.deploy_config.cpu,
@@ -11475,16 +11639,27 @@ const STATUS_NAMES = {
11475
11639
  [DEPLOY_STATUS.preDeploy]: 'WaitingForUpload',
11476
11640
  };
11477
11641
 
11642
+ /**
11643
+ * 终态 = 不会再变了。
11644
+ *
11645
+ * ⚠️ `interrupted(6)` **不是**终态,别再往这里加。它是过程态:服务端某条流水线自身轮询超时时,
11646
+ * 会把整次部署标成 Interrupted 并安排稍后重新触发(`base_pipe.NewInterruptedResult`),之后仍
11647
+ * 会推进到 Succeeded。安卓构建 10 分钟起步,几乎必然经过至少一次 Interrupted —— 把它当终态会
11648
+ * 让 `deploy --wait` 在构建中途就收工返回,此时 APK 还没产出,`mobile_artifact_list` 是空的。
11649
+ */
11478
11650
  const TERMINAL_STATUSES = new Set([
11479
11651
  DEPLOY_STATUS.succeeded,
11480
11652
  DEPLOY_STATUS.failed,
11481
11653
  DEPLOY_STATUS.canceled,
11482
- DEPLOY_STATUS.interrupted,
11483
11654
  ]);
11484
11655
 
11485
11656
  const getDeployStatusText = (status) =>
11486
11657
  status ? STATUS_NAMES[status] || 'Unknown' : 'Unknown';
11487
11658
 
11659
+ /** 这次部署的结果是否已经定下来了(到了终态就不会再变)。 */
11660
+ const isDeploymentSettled = (status) =>
11661
+ status !== undefined && TERMINAL_STATUSES.has(status);
11662
+
11488
11663
  function _optionalChain$7(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11489
11664
 
11490
11665
  const formatDeployDetails = (history) =>
@@ -11749,6 +11924,27 @@ const readDeployLocalContext = async (
11749
11924
  return { ...sourceSnapshot, metadata, isPagesDeployment };
11750
11925
  };
11751
11926
 
11927
+ function _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11928
+
11929
+ /**
11930
+ * 把 `mobile_artifact_list` 连同「这个空数组到底什么意思」一起输出。
11931
+ *
11932
+ * 产物是部署过程中逐步落库的:APK 要等安卓构建跑完才写进去,比部署记录本身晚好几分钟。部署没到
11933
+ * 终态时,空的 `mobile_artifact_list` 只代表「还没产出来」,不代表「没有产物」—— 可这两种情况在
11934
+ * 输出里长得一模一样,调用方(尤其是 agent)会把前者读成后者,然后得出「部署成功但系统没返回
11935
+ * APK 下载地址」这种错误结论。线上真发生过。
11936
+ *
11937
+ * 所以未定终态时额外带一个 `artifacts_pending: true`;这个字段不出现,就表示这份列表已经是最终
11938
+ * 结果。`mobile_artifact_list` 本身保持恒存在,避免破坏已有脚本的读法。
11939
+ */
11940
+ const mobileArtifactsOutput = (
11941
+ history,
11942
+ status = _optionalChain$4([history, 'optionalAccess', _ => _.status]),
11943
+ ) => ({
11944
+ mobile_artifact_list: _optionalChain$4([history, 'optionalAccess', _2 => _2.mobile_artifact_list]) || [],
11945
+ ...(isDeploymentSettled(status) ? {} : { artifacts_pending: true }),
11946
+ });
11947
+
11752
11948
  // 服务端 deploy_app/list 的 page_size 上限,超了会被判参数错误。
11753
11949
  // 客户端先拦一道,是为了把错误说在本地(带上上限值),而不是回一句服务端的通用参数错误。
11754
11950
  const APP_LIST_MAX_PAGE_SIZE = 100;
@@ -11860,11 +12056,12 @@ const registerDeployReadCommands = (deploy) => {
11860
12056
  deploy_history_id: deployHistoryId,
11861
12057
  status: getDeployStatusText(history.status),
11862
12058
  commit_hash: history.commit_hash,
12059
+ commit_message: history.commit_message,
11863
12060
  domains: history.domain_list || [],
11864
12061
  error_analysis: history.error_analysis,
11865
12062
  deploy_detail: formatDeployDetails(history),
11866
12063
  connector_data_list: history.connector_data_list || [],
11867
- mobile_artifact_list: history.mobile_artifact_list || [],
12064
+ ...mobileArtifactsOutput(history),
11868
12065
  });
11869
12066
  });
11870
12067
 
@@ -11889,11 +12086,12 @@ const registerDeployReadCommands = (deploy) => {
11889
12086
  deploy_history_id: item.deploy_history_id,
11890
12087
  status: getDeployStatusText(item.status),
11891
12088
  commit_hash: item.commit_hash_short || item.commit_hash,
12089
+ commit_message: item.commit_message,
11892
12090
  created_at: item.created_at,
11893
12091
  can_rollback: item.can_rollback,
11894
12092
  deploy_detail: formatDeployDetails(item),
11895
12093
  connector_data_list: item.connector_data_list || [],
11896
- mobile_artifact_list: item.mobile_artifact_list || [],
12094
+ ...mobileArtifactsOutput(item),
11897
12095
  })),
11898
12096
  next_page_token: data.next_page_token,
11899
12097
  has_more: data.has_more,
@@ -11914,10 +12112,11 @@ const registerDeployReadCommands = (deploy) => {
11914
12112
  deploy_history_id: item.deploy_history_id,
11915
12113
  status: getDeployStatusText(item.status),
11916
12114
  commit_hash: item.commit_hash_short || item.commit_hash,
12115
+ commit_message: item.commit_message,
11917
12116
  created_at: item.created_at,
11918
12117
  deploy_detail: formatDeployDetails(item),
11919
12118
  domains: item.domain_list || [],
11920
- mobile_artifact_list: item.mobile_artifact_list || [],
12119
+ ...mobileArtifactsOutput(item),
11921
12120
  })),
11922
12121
  });
11923
12122
  });
@@ -11979,12 +12178,107 @@ const registerEnv = (code) => {
11979
12178
  });
11980
12179
  };
11981
12180
 
11982
- function _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
12181
+ /* eslint-disable security/detect-non-literal-fs-filename -- validated project-local build output paths */
12182
+
12183
+ const BUILD_OUTPUT_DIRS = new Set(['dist', 'dist-tt']);
12184
+ const EXCLUDED_PARTS = new Set([
12185
+ '.git',
12186
+ '.env',
12187
+ 'node_modules',
12188
+ ]);
12189
+ const REPRODUCIBLE_ARCHIVE_MTIME = new Date(0);
12190
+
12191
+ const validateBuildOutput = async (
12192
+ sourceRoot,
12193
+ buildOutputDir,
12194
+ ) => {
12195
+ if (!BUILD_OUTPUT_DIRS.has(buildOutputDir)) {
12196
+ throw new CliError(
12197
+ `Unsupported Mini-program build output directory: ${buildOutputDir}.`,
12198
+ 'SOURCE_PACKAGE_FAILED',
12199
+ );
12200
+ }
12201
+ const buildOutputRoot = node_path.resolve(sourceRoot, buildOutputDir);
12202
+ try {
12203
+ const info = await promises.lstat(buildOutputRoot);
12204
+ if (info.isSymbolicLink() || !info.isDirectory()) {
12205
+ throw new Error('build output must be a regular directory');
12206
+ }
12207
+ const realSourceRoot = await promises.realpath(sourceRoot);
12208
+ const realBuildOutputRoot = await promises.realpath(buildOutputRoot);
12209
+ const relativeOutput = node_path.relative(realSourceRoot, realBuildOutputRoot);
12210
+ if (!relativeOutput || relativeOutput.startsWith('..')) {
12211
+ throw new Error('build output must be inside the source root');
12212
+ }
12213
+ } catch (error) {
12214
+ throw new CliError(
12215
+ `Invalid Mini-program build output ${buildOutputRoot}: ${error instanceof Error ? error.message : String(error)}`,
12216
+ 'SOURCE_PACKAGE_FAILED',
12217
+ );
12218
+ }
12219
+ };
12220
+
12221
+ const shouldInclude = (
12222
+ archivePath,
12223
+ entry,
12224
+ ) => {
12225
+ if ('isSymbolicLink' in entry && entry.isSymbolicLink()) {
12226
+ return false;
12227
+ }
12228
+ return !archivePath.split(/[\\/]/u).some(part =>
12229
+ EXCLUDED_PARTS.has(part) || part.startsWith('.git'),
12230
+ );
12231
+ };
12232
+
12233
+ const createMiniProgramPackage = async (
12234
+ sourceRoot,
12235
+ buildOutputDir,
12236
+ ) => {
12237
+ const resolvedSourceRoot = node_path.resolve(sourceRoot);
12238
+ await validateBuildOutput(resolvedSourceRoot, buildOutputDir);
12239
+ const tempDirectory = await promises.mkdtemp(node_path.join(node_os.tmpdir(), 'coze-mini-program-source-'));
12240
+ const outputPath = node_path.join(tempDirectory, 'source.tar.gz');
12241
+ try {
12242
+ await tar.create(
12243
+ {
12244
+ cwd: resolvedSourceRoot,
12245
+ file: outputPath,
12246
+ filter: shouldInclude,
12247
+ gzip: true,
12248
+ mtime: REPRODUCIBLE_ARCHIVE_MTIME,
12249
+ portable: true,
12250
+ },
12251
+ [buildOutputDir],
12252
+ );
12253
+ const info = await promises.stat(outputPath);
12254
+ if (info.size === 0) {
12255
+ throw new Error('source archive is empty');
12256
+ }
12257
+ return {
12258
+ path: outputPath,
12259
+ sizeBytes: info.size,
12260
+ cleanup: () => promises.rm(tempDirectory, { recursive: true, force: true }),
12261
+ };
12262
+ } catch (error) {
12263
+ await promises.rm(tempDirectory, { recursive: true, force: true });
12264
+ throw new CliError(
12265
+ `Unable to package Mini-program build output: ${error instanceof Error ? error.message : String(error)}`,
12266
+ 'SOURCE_PACKAGE_FAILED',
12267
+ );
12268
+ }
12269
+ };
12270
+
12271
+ function _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
11983
12272
  const CONNECTOR_IDS = {
11984
12273
  wechat: '10000127',
11985
12274
  douyin: '10000126',
11986
12275
  } ;
11987
12276
 
12277
+ const MINI_PROGRAM_BUILD_OUTPUT_DIRS = {
12278
+ wechat: 'dist',
12279
+ douyin: 'dist-tt',
12280
+ } ;
12281
+
11988
12282
 
11989
12283
 
11990
12284
 
@@ -12009,11 +12303,23 @@ const resolveConnectorId = (platform) => {
12009
12303
  return connectorId;
12010
12304
  };
12011
12305
 
12306
+ const resolveBuildOutputDir = (platform) => {
12307
+ const outputDir =
12308
+ MINI_PROGRAM_BUILD_OUTPUT_DIRS[platform ];
12309
+ if (!outputDir) {
12310
+ throw new CliError(
12311
+ `Unsupported Mini-program platform ${String(platform)}; expected wechat or douyin.`,
12312
+ 'INVALID_MINIPROGRAM_PLATFORM',
12313
+ );
12314
+ }
12315
+ return outputDir;
12316
+ };
12317
+
12012
12318
  const resolveProjectId = async (
12013
12319
  command,
12014
12320
  options,
12015
12321
  ) => {
12016
- if (_optionalChain$4([options, 'access', _ => _.projectId, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3()])) {
12322
+ if (_optionalChain$3([options, 'access', _ => _.projectId, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3()])) {
12017
12323
  return options.projectId.trim();
12018
12324
  }
12019
12325
  const runtime = await getRuntime(command);
@@ -12028,6 +12334,137 @@ const resolveProjectId = async (
12028
12334
  return metadata.projectId;
12029
12335
  };
12030
12336
 
12337
+ const MINI_PROGRAM_AUTH_STATUS = {
12338
+ authorized: 1,
12339
+ needAuthorize: 2,
12340
+ boundToOtherUser: 3,
12341
+ } ;
12342
+
12343
+ const getBoundToOtherUserMessage = (platform) => {
12344
+ const platformName = platform === 'wechat' ? 'WeChat' : 'Douyin';
12345
+ const platformConsole =
12346
+ platform === 'wechat' ? 'WeChat Public Platform' : 'Douyin Open Platform';
12347
+ return [
12348
+ `This ${platformName} Mini-program AppID is authorized by another Coze user.`,
12349
+ `If this is an AppID you manage, revoke Coze's previous third-party platform authorization in the ${platformConsole}, then rerun this auth command. The CLI will recheck the AppID and authorize it for your current Coze account.`,
12350
+ 'If this is not your AppID, change --mini-app-id to an AppID for which you have administrator permission, then rerun this auth command.',
12351
+ ].join(' ');
12352
+ };
12353
+
12354
+ const getAuthRequiredMessage = () =>
12355
+ 'This Mini-program AppID is not authorized for the current Coze user. Run `coze-dev deploy code mini-program auth` first.';
12356
+
12357
+ const getPreviewFailureMessage = (data
12358
+
12359
+
12360
+ ) =>
12361
+ _optionalChain$3([data, 'access', _4 => _4.stderr, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6()]) || _optionalChain$3([data, 'access', _7 => _7.stdout, 'optionalAccess', _8 => _8.trim, 'call', _9 => _9()]) || 'Mini-program preview failed.';
12362
+
12363
+ const registerAuthorizationCommand = (miniProgram) => {
12364
+ miniProgram
12365
+ .command('auth')
12366
+ .description('Authorize a Mini-program AppID for the current Coze user')
12367
+ .requiredOption('--platform <platform>', 'wechat or douyin')
12368
+ .requiredOption('--mini-app-id <miniAppId>', 'Mini-program AppID')
12369
+ .option('--project-id <projectId>', 'Deployment Project ID')
12370
+ .option('--source-root <sourceRoot>', 'Directory containing .coze', '.')
12371
+ .action(async (options, command) => {
12372
+ const runtime = await getRuntime(command);
12373
+ const projectId = await resolveProjectId(command, options);
12374
+ const authorization = await runtime.client.authorizeMiniProgram({
12375
+ project_id: projectId,
12376
+ app_id: options.miniAppId || '',
12377
+ connector_id: resolveConnectorId(options.platform),
12378
+ redirect_url: 'https://code.coze.cn/coding/auth/callback/miniprogram',
12379
+ });
12380
+ if (authorization.status === MINI_PROGRAM_AUTH_STATUS.needAuthorize) {
12381
+ runtime.output.print({
12382
+ project_id: projectId,
12383
+ mini_app_id: options.miniAppId,
12384
+ platform: options.platform,
12385
+ authorization_required: true,
12386
+ auth_url: authorization.auth_url,
12387
+ });
12388
+ return;
12389
+ }
12390
+ if (authorization.status === MINI_PROGRAM_AUTH_STATUS.boundToOtherUser) {
12391
+ throw new CliError(
12392
+ getBoundToOtherUserMessage(options.platform),
12393
+ 'MINIPROGRAM_AUTHORIZED_BY_OTHER_USER',
12394
+ );
12395
+ }
12396
+ if (authorization.status !== MINI_PROGRAM_AUTH_STATUS.authorized) {
12397
+ throw new CliError(
12398
+ `Unexpected Mini-program authorization status: ${String(authorization.status)}.`,
12399
+ 'INVALID_RESPONSE',
12400
+ );
12401
+ }
12402
+ runtime.output.print({
12403
+ project_id: projectId,
12404
+ mini_app_id: options.miniAppId,
12405
+ platform: options.platform,
12406
+ authorized: true,
12407
+ });
12408
+ });
12409
+ };
12410
+
12411
+ const registerPreviewCommand = (miniProgram) => {
12412
+ miniProgram
12413
+ .command('preview')
12414
+ .description('Create a Mini-program preview QR code from the local build artifact')
12415
+ .requiredOption('--platform <platform>', 'wechat or douyin')
12416
+ .requiredOption('--mini-app-id <miniAppId>', 'Mini-program AppID')
12417
+ .option('--project-id <projectId>', 'Deployment Project ID')
12418
+ .option('--source-root <sourceRoot>', 'Directory containing dist or dist-tt', '.')
12419
+ .action(async (options, command) => {
12420
+ const runtime = await getRuntime(command);
12421
+ const projectId = await resolveProjectId(command, options);
12422
+ const authorization = await runtime.client.getMiniProgramAuthStatus({
12423
+ project_id: projectId,
12424
+ connector_id: resolveConnectorId(options.platform),
12425
+ });
12426
+ if (
12427
+ !authorization.is_authorized ||
12428
+ authorization.bound_related_id !== options.miniAppId
12429
+ ) {
12430
+ throw new CliError(
12431
+ getAuthRequiredMessage(),
12432
+ 'MINIPROGRAM_AUTH_REQUIRED',
12433
+ );
12434
+ }
12435
+ const sourceRoot = node_path.resolve(runtime.cwd, options.sourceRoot || '.');
12436
+ const buildOutputDir = resolveBuildOutputDir(options.platform);
12437
+ const sourcePackage = await createMiniProgramPackage(
12438
+ sourceRoot,
12439
+ buildOutputDir,
12440
+ );
12441
+ try {
12442
+ const content = await promises.readFile(sourcePackage.path);
12443
+ const data = await runtime.client.createMiniProgramPreview({
12444
+ project_id: projectId,
12445
+ app_id: options.miniAppId || '',
12446
+ connector_id: resolveConnectorId(options.platform),
12447
+ source_package_base64: content.toString('base64'),
12448
+ });
12449
+ if (data.failed) {
12450
+ throw new CliError(
12451
+ getPreviewFailureMessage(data),
12452
+ 'MINIPROGRAM_PREVIEW_FAILED',
12453
+ );
12454
+ }
12455
+ runtime.output.print({
12456
+ project_id: projectId,
12457
+ mini_app_id: options.miniAppId,
12458
+ platform: options.platform,
12459
+ source_package_size_bytes: sourcePackage.sizeBytes,
12460
+ ...data,
12461
+ });
12462
+ } finally {
12463
+ await sourcePackage.cleanup();
12464
+ }
12465
+ });
12466
+ };
12467
+
12031
12468
  const registerMiniProgram = (code) => {
12032
12469
  const miniProgram = code
12033
12470
  .command('mini-program')
@@ -12112,13 +12549,26 @@ const registerMiniProgram = (code) => {
12112
12549
  });
12113
12550
  runtime.output.print({ project_id: projectId, platform: options.platform, unbound: true });
12114
12551
  });
12552
+
12553
+ registerAuthorizationCommand(miniProgram);
12554
+ registerPreviewCommand(miniProgram);
12115
12555
  };
12116
12556
 
12117
- function _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
12557
+ function _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
12118
12558
 
12119
12559
  const POLL_INTERVAL_MS = 3000;
12120
12560
  const MAX_CONSECUTIVE_RETRIES = 5;
12121
12561
  const TRANSIENT_RPC_ERROR_CODE = 230000001;
12562
+ /**
12563
+ * `--wait` 的总时长上限。
12564
+ *
12565
+ * Interrupted 不再算终态(见 status.ts),轮询只能靠这个兜底,否则一次卡住的部署会把 CLI
12566
+ * 永远挂在这里。取 60min 是照安卓构建定的:实测 10 分钟起步,中途还会经历若干次
12567
+ * Interrupted → 重新触发。
12568
+ */
12569
+ const POLL_TIMEOUT_MS = 3600000; // 60min
12570
+ /** 心跳间隔:text 模式下每隔这么久报一次「还在跑」,免得长构建看起来像挂死。 */
12571
+ const HEARTBEAT_MS = 30000;
12122
12572
 
12123
12573
  const wait = async () =>
12124
12574
  new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS));
@@ -12126,17 +12576,21 @@ const wait = async () =>
12126
12576
  const isRetryablePollError = (error) =>
12127
12577
  error instanceof CliError &&
12128
12578
  error.code === 'API_REJECTED' &&
12129
- Number(_optionalChain$3([error, 'access', _ => _.details, 'optionalAccess', _2 => _2.business_code])) === TRANSIENT_RPC_ERROR_CODE;
12579
+ Number(_optionalChain$2([error, 'access', _ => _.details, 'optionalAccess', _2 => _2.business_code])) === TRANSIENT_RPC_ERROR_CODE;
12130
12580
 
12131
12581
  const pollHistory = async (
12132
12582
  command,
12133
12583
  appId,
12134
12584
  deployHistoryId,
12585
+ timeoutMs = POLL_TIMEOUT_MS,
12135
12586
  ) => {
12136
12587
  const runtime = await getRuntime(command);
12137
12588
  const startedAt = Date.now();
12138
12589
  let consecutiveFailures = 0;
12590
+ let lastStatus;
12591
+ let lastBeatAt = startedAt;
12139
12592
  while (true) {
12593
+ const elapsed = () => Math.floor((Date.now() - startedAt) / 1000);
12140
12594
  try {
12141
12595
  const history = await runtime.client.getDeployHistory({
12142
12596
  app_id: appId,
@@ -12145,11 +12599,21 @@ const pollHistory = async (
12145
12599
  consecutiveFailures = 0;
12146
12600
  const status = getDeployStatusText(history.status);
12147
12601
  runtime.output.debug(
12148
- `[deploy] History ${deployHistoryId}: ${status} (${String(Math.floor((Date.now() - startedAt) / 1000))}s elapsed)`,
12602
+ `[deploy] History ${deployHistoryId}: ${status} (${String(elapsed())}s elapsed)`,
12149
12603
  );
12150
12604
  if (history.status && TERMINAL_STATUSES.has(history.status)) {
12151
12605
  return history;
12152
12606
  }
12607
+ // 长构建(安卓十几分钟)期间给点动静:状态一变就报,否则每 30s 报一次还活着。
12608
+ // output.info 只在 text 模式写 stderr,json 模式是 no-op,不会污染机器可读输出。
12609
+ if (history.status !== lastStatus) {
12610
+ lastStatus = history.status;
12611
+ lastBeatAt = Date.now();
12612
+ runtime.output.info(`[deploy] ${status} (${String(elapsed())}s)`);
12613
+ } else if (Date.now() - lastBeatAt >= HEARTBEAT_MS) {
12614
+ lastBeatAt = Date.now();
12615
+ runtime.output.info(`[deploy] still ${status} (${String(elapsed())}s)`);
12616
+ }
12153
12617
  } catch (error) {
12154
12618
  if (!isRetryablePollError(error) || consecutiveFailures >= MAX_CONSECUTIVE_RETRIES) {
12155
12619
  throw error;
@@ -12159,6 +12623,15 @@ const pollHistory = async (
12159
12623
  `[deploy] Status check failed transiently; retrying (${String(consecutiveFailures)}/${String(MAX_CONSECUTIVE_RETRIES)}).`,
12160
12624
  );
12161
12625
  }
12626
+ if (Date.now() - startedAt >= timeoutMs) {
12627
+ throw new CliError(
12628
+ `Timed out after ${String(elapsed())}s waiting for deployment ${deployHistoryId}; ` +
12629
+ `last status: ${getDeployStatusText(lastStatus)}. The deployment may still be running — ` +
12630
+ 'check it with `deploy code status`.',
12631
+ 'DEPLOY_WAIT_TIMEOUT',
12632
+ { app_id: appId, deploy_history_id: deployHistoryId, last_status: lastStatus },
12633
+ );
12634
+ }
12162
12635
  await wait();
12163
12636
  }
12164
12637
  };
@@ -12505,52 +12978,6 @@ const registerDomain = (code) => {
12505
12978
  });
12506
12979
  };
12507
12980
 
12508
- function _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
12509
-
12510
- const firstPage = { page: 1, size: 1 };
12511
-
12512
- const listSpaceRequest = (runtime) => ({
12513
- ...(runtime.config.organizationId
12514
- ? { organization_id: runtime.config.organizationId }
12515
- : {}),
12516
- ...(runtime.config.enterpriseId
12517
- ? { enterprise_id: runtime.config.enterpriseId }
12518
- : {}),
12519
- });
12520
-
12521
- const resolveDeploymentSpaceId = async (runtime) => {
12522
- const configuredSpaceId = _optionalChain$2([runtime, 'access', _ => _.config, 'access', _2 => _2.spaceId, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()]);
12523
- const request = listSpaceRequest(runtime);
12524
- if (configuredSpaceId) {
12525
- const data = await runtime.client.listSpaces(request);
12526
- if (!data.bot_space_list.some(space => space.id === configuredSpaceId)) {
12527
- throw new CliError(
12528
- `Space ID ${configuredSpaceId} is invalid or is not available to the current account.`,
12529
- 'INVALID_SPACE_ID',
12530
- );
12531
- }
12532
- return configuredSpaceId;
12533
- }
12534
-
12535
- const data = await runtime.client.listSpaces({ ...request, ...firstPage });
12536
- const space = data.bot_space_list.find(item => item.id);
12537
- if (!space) {
12538
- throw new CliError(
12539
- 'No available Space was found for the current account. Create or join a Space before deploying.',
12540
- 'SPACE_NOT_FOUND',
12541
- );
12542
- }
12543
-
12544
- runtime.config.spaceId = space.id;
12545
- try {
12546
- await saveSharedConfig({ spaceId: space.id }, runtime.globalOptions);
12547
- } catch (error) {
12548
- runtime.output.warn(`Unable to save the auto-selected Space: ${String(error)}`);
12549
- }
12550
- runtime.output.debug(`Auto-selected Space: ${space.name || space.id} (${space.id})`);
12551
- return space.id;
12552
- };
12553
-
12554
12981
  const PACKAGE_SCRIPT_CANDIDATES = [
12555
12982
  node_path.resolve(__dirname, 'deploy/package-project.js'),
12556
12983
  node_path.resolve(__dirname, '../../../scripts/deploy/package-project.js'),
@@ -12922,14 +13349,21 @@ const registerDeploy = (code) => {
12922
13349
  }
12923
13350
  }
12924
13351
  if (!projectId) {
12925
- runtime.output.debug('[deploy] Creating a dedicated deployment project...');
12926
- const spaceId = await resolveDeploymentSpaceId(runtime);
13352
+ runtime.output.debug(
13353
+ '[deploy] Creating a dedicated deployment project in personal space...',
13354
+ );
13355
+ // 账号归属只在建 Project 这一次定死:写进 project_settings.extra 之后,有登录态的首次
13356
+ // 部署和无登录态的预览初始化读到的是同一个账号。本地已经知道账号就不打这次接口。
13357
+ const cozeAccountId = await resolveCozeAccountId(runtime);
12927
13358
  const project = await runtime.client.createDeploymentProject({
12928
- space_id: spaceId,
13359
+ space_id: '0',
12929
13360
  user_query: deploymentName || 'CLI deployment project',
12930
13361
  project_type: resolveCreationProjectType(metadata.projectType),
12931
13362
  create_source: 'cli',
12932
- project_settings: { project_symbol: 'v3.5' },
13363
+ project_settings: {
13364
+ project_symbol: 'v3.5',
13365
+ ...(cozeAccountId ? { extra: { coze_account_id: cozeAccountId } } : {}),
13366
+ },
12933
13367
  });
12934
13368
  projectId = project.project_id;
12935
13369
  projectCreated = true;
@@ -13018,6 +13452,7 @@ const registerDeploy = (code) => {
13018
13452
  ...(appId ? { app_id: appId } : { project_id: projectId }),
13019
13453
  application_type: applicationType,
13020
13454
  commit_hash: commitHash,
13455
+ ...(options.message ? { commit_message: options.message } : {}),
13021
13456
  ...(!appId
13022
13457
  ? { name: deploymentName, source_root: sourceRoot }
13023
13458
  : {}),
@@ -13061,16 +13496,19 @@ const registerDeploy = (code) => {
13061
13496
  const history = options.wait
13062
13497
  ? await pollHistory(command, result.app_id, deployHistoryId)
13063
13498
  : undefined;
13499
+ // 不带 --wait 时 history 是 undefined,产物必然还没落库:这里一定会带上
13500
+ // artifacts_pending,而不是甩一个看起来像「查过了,没有」的空数组出去。
13501
+ const effectiveStatus = _nullishCoalesce(_optionalChain([history, 'optionalAccess', _2 => _2.status]), () => ( result.status));
13064
13502
  runtime.output.print({
13065
13503
  app_id: result.app_id,
13066
13504
  deploy_history_id: deployHistoryId,
13067
13505
  version: result.version,
13068
13506
  commit_hash: commitHash,
13069
- status: getDeployStatusText(_nullishCoalesce(_optionalChain([history, 'optionalAccess', _2 => _2.status]), () => ( result.status))),
13507
+ status: getDeployStatusText(effectiveStatus),
13070
13508
  source_package_size_bytes: sourcePackage.sizeBytes,
13071
13509
  upload_mode: deployment.uploadMode,
13072
13510
  local_link: appId && !projectCreated ? 'unchanged' : 'written',
13073
- mobile_artifact_list: _optionalChain([history, 'optionalAccess', _3 => _3.mobile_artifact_list]) || [],
13511
+ ...mobileArtifactsOutput(history, effectiveStatus),
13074
13512
  });
13075
13513
  });
13076
13514
 
@@ -13173,7 +13611,7 @@ const registerDeploy = (code) => {
13173
13611
  .action(async (options, command) => {
13174
13612
  const runtime = await getRuntime(command);
13175
13613
  const appId = await requireAppId(runtime.cwd, getDeployAppIdOption(options, command));
13176
- let key = _optionalChain([options, 'access', _4 => _4.key, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6()]);
13614
+ let key = _optionalChain([options, 'access', _3 => _3.key, 'optionalAccess', _4 => _4.trim, 'call', _5 => _5()]);
13177
13615
  if (!key) {
13178
13616
  const history = await runtime.client.getDeployHistory({
13179
13617
  app_id: appId,
@@ -13215,7 +13653,7 @@ const registerDeploy = (code) => {
13215
13653
  const runtime = await getRuntime(command);
13216
13654
  const appId = await requireAppId(runtime.cwd, getDeployAppIdOption(options, command));
13217
13655
  const application = await runtime.client.getApplication(appId);
13218
- const commitHash = options.commitId || _optionalChain([application, 'access', _7 => _7.latest_deployment, 'optionalAccess', _8 => _8.commit_hash]);
13656
+ const commitHash = options.commitId || _optionalChain([application, 'access', _6 => _6.latest_deployment, 'optionalAccess', _7 => _7.commit_hash]);
13219
13657
  if (!commitHash) {
13220
13658
  throw new CliError('No deployment commit is available.', 'DEPLOYMENT_NOT_FOUND');
13221
13659
  }