@h-ai/cli 1.0.0-beta.1 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/{chunk-3JCZO34U.js → chunk-EF7WOFWZ.js} +3 -3
  2. package/dist/{chunk-3JCZO34U.js.map → chunk-EF7WOFWZ.js.map} +1 -1
  3. package/dist/{chunk-M7HN2OE3.js → chunk-MUHRBJSW.js} +34 -16
  4. package/dist/{chunk-M7HN2OE3.js.map → chunk-MUHRBJSW.js.map} +1 -1
  5. package/dist/cli-config-templates-HHFHNXBN.js +5 -0
  6. package/dist/{cli-config-templates-RCWQMHZN.js.map → cli-config-templates-HHFHNXBN.js.map} +1 -1
  7. package/dist/index.js +5 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/metafile-esm.json +1 -1
  10. package/dist/{src-JRKSWJ2Q.js → src-TEBHR5I5.js} +3 -3
  11. package/dist/src-TEBHR5I5.js.map +1 -0
  12. package/package.json +11 -11
  13. package/templates/base/package.json.hbs +1 -1
  14. package/templates/skills/AGENTS.md +2 -0
  15. package/templates/skills/bridges/admin/AGENTS.md +2 -0
  16. package/templates/skills/bridges/api/AGENTS.md +2 -0
  17. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +2 -0
  18. package/templates/skills/bridges/h5/AGENTS.md +2 -0
  19. package/templates/skills/bridges/mobile-app/AGENTS.md +2 -0
  20. package/templates/skills/bridges/website/AGENTS.md +2 -0
  21. package/templates/skills/hai-app-create/SKILL.md +1 -1
  22. package/templates/skills/hai-app-create/collaboration.md +6 -1
  23. package/templates/skills/hai-app-create/development.md +3 -1
  24. package/templates/skills/hai-app-create/reference.md +3 -1
  25. package/templates/skills/hai-app-review/SKILL.md +2 -0
  26. package/templates/skills/hai-app-tests/SKILL.md +2 -0
  27. package/templates/skills/hai-change-plan/SKILL.md +46 -0
  28. package/templates/skills/hai-deploy/SKILL.md +1 -1
  29. package/templates/skills/hai-feedback/SKILL.md +1 -1
  30. package/templates/skills/hai-pr-review/SKILL.md +2 -0
  31. package/templates/skills/hai-spec-implement/SKILL.md +2 -0
  32. package/templates/skills/hai-storage/SKILL.md +2 -2
  33. package/templates/skills/hai-storage/reference.md +1 -1
  34. package/dist/cli-config-templates-RCWQMHZN.js +0 -5
  35. package/dist/src-JRKSWJ2Q.js.map +0 -1
@@ -22612,7 +22612,7 @@ var en_US_default = {
22612
22612
  deploy_webProxyInvalid: "The API prefix must be an absolute path containing only letters, numbers, underscores, hyphens and slashes.",
22613
22613
  deploy_webBaseConflict: "The website mount path conflicts with an API or health endpoint. Choose a different PUBLIC_BASE_PATH.",
22614
22614
  deploy_storageProxyInvalid: "Cannot generate the storage proxy. Use a valid DNS bucket name whose path does not overlap the website, API, or health endpoints.",
22615
- deploy_storagePublicEndpointInvalid: "Invalid storage.publicEndpoint. Use a browser-accessible HTTP(S) origin without a bucket, path, credentials, query, or fragment.",
22615
+ deploy_storagePublicEndpointInvalid: "Invalid storage.publicEndpoint. Use a browser-accessible HTTP(S) address with an optional valid proxy path, without a bucket, credentials, query or fragment.",
22616
22616
  deploy_storageBackendRequired: "A static browser app cannot deploy server-side storage credentials. Configure Storage in Serv or SvelteKit and obtain presigned links through its API.",
22617
22617
  deploy_artifactInvalid: "Image artifacts are missing or invalid. Run pnpm build --target docker, select valid --artifact-dir, or use pnpm run deploy --build.",
22618
22618
  deploy_sshRequired: "Automatic deployment requires SSH settings. Use --bundle-only for manual transfer when the server is unreachable.",
@@ -22720,7 +22720,7 @@ var ja_JP_default = {
22720
22720
  deploy_webProxyInvalid: "API\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u306F\u3001\u82F1\u6570\u5B57\u3001\u30A2\u30F3\u30C0\u30FC\u30B9\u30B3\u30A2\u3001\u30CF\u30A4\u30D5\u30F3\u3001\u30B9\u30E9\u30C3\u30B7\u30E5\u306E\u307F\u3092\u542B\u3080\u7D76\u5BFE\u30D1\u30B9\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
22721
22721
  deploy_webBaseConflict: "\u30B5\u30A4\u30C8\u306E\u30DE\u30A6\u30F3\u30C8\u30D1\u30B9\u304CAPI\u307E\u305F\u306F\u30D8\u30EB\u30B9\u30C1\u30A7\u30C3\u30AF\u3068\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059\u3002\u5225\u306EPUBLIC_BASE_PATH\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
22722
22722
  deploy_storageProxyInvalid: "\u30B9\u30C8\u30EC\u30FC\u30B8\u30D7\u30ED\u30AD\u30B7\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093\u3002\u6709\u52B9\u306A DNS \u30D0\u30B1\u30C3\u30C8\u540D\u3092\u6307\u5B9A\u3057\u3001\u30B5\u30A4\u30C8\u3001API\u3001\u30D8\u30EB\u30B9\u30C1\u30A7\u30C3\u30AF\u306E\u30D1\u30B9\u3068\u306E\u91CD\u8907\u3092\u907F\u3051\u3066\u304F\u3060\u3055\u3044\u3002",
22723
- deploy_storagePublicEndpointInvalid: "storage.publicEndpoint \u304C\u7121\u52B9\u3067\u3059\u3002\u30D0\u30B1\u30C3\u30C8\u3001\u30D1\u30B9\u3001\u8A8D\u8A3C\u60C5\u5831\u3001\u30AF\u30A8\u30EA\u3001\u30D5\u30E9\u30B0\u30E1\u30F3\u30C8\u3092\u542B\u307E\u306A\u3044\u3001\u30D6\u30E9\u30A6\u30B6\u30FC\u304B\u3089\u5230\u9054\u53EF\u80FD\u306A HTTP(S) \u30AA\u30EA\u30B8\u30F3\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
22723
+ deploy_storagePublicEndpointInvalid: "storage.publicEndpoint \u304C\u7121\u52B9\u3067\u3059\u3002\u30D6\u30E9\u30A6\u30B6\u30FC\u304B\u3089\u5230\u9054\u53EF\u80FD\u306A HTTP(S) \u30A2\u30C9\u30EC\u30B9\u306B\u6709\u52B9\u306A\u30D7\u30ED\u30AD\u30B7\u30D1\u30B9\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\u30D0\u30B1\u30C3\u30C8\u3001\u8A8D\u8A3C\u60C5\u5831\u3001\u30AF\u30A8\u30EA\u3001\u30D5\u30E9\u30B0\u30E1\u30F3\u30C8\u306F\u542B\u3081\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002",
22724
22724
  deploy_storageBackendRequired: "\u9759\u7684\u30D6\u30E9\u30A6\u30B6\u30A2\u30D7\u30EA\u306B\u306F\u30B5\u30FC\u30D0\u30FC\u7528\u30B9\u30C8\u30EC\u30FC\u30B8\u8A8D\u8A3C\u60C5\u5831\u3092\u914D\u7F6E\u3067\u304D\u307E\u305B\u3093\u3002Serv \u307E\u305F\u306F SvelteKit \u3067 Storage \u3092\u8A2D\u5B9A\u3057\u3001API \u7D4C\u7531\u3067\u7F72\u540D\u4ED8\u304D\u30EA\u30F3\u30AF\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
22725
22725
  deploy_artifactInvalid: "\u30A4\u30E1\u30FC\u30B8\u6210\u679C\u7269\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u3001\u7121\u52B9\u3067\u3059\u3002pnpm build --target docker \u3092\u5B9F\u884C\u3059\u308B\u304B\u3001--artifact-dir \u3067\u6709\u52B9\u306A\u6210\u679C\u7269\u3092\u9078\u629E\u3059\u308B\u304B\u3001pnpm run deploy --build \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
22726
22726
  deploy_sshRequired: "\u81EA\u52D5\u30C7\u30D7\u30ED\u30A4\u306B\u306FSSH\u8A2D\u5B9A\u304C\u5FC5\u8981\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u3067\u304D\u306A\u3044\u5834\u5408\u306F--bundle-only\u3067\u624B\u52D5\u8EE2\u9001\u7528\u306E\u30D0\u30F3\u30C9\u30EB\u3092\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
@@ -22828,7 +22828,7 @@ var zh_CN_default2 = {
22828
22828
  deploy_webProxyInvalid: "API \u524D\u7F00\u5FC5\u987B\u662F\u4EC5\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u3001\u8FDE\u5B57\u7B26\u548C\u659C\u6760\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002",
22829
22829
  deploy_webBaseConflict: "\u7F51\u7AD9\u6302\u8F7D\u76EE\u5F55\u4E0E API \u6216\u5065\u5EB7\u68C0\u67E5\u5165\u53E3\u51B2\u7A81\uFF0C\u8BF7\u4F7F\u7528\u4E0D\u540C\u7684 PUBLIC_BASE_PATH\u3002",
22830
22830
  deploy_storageProxyInvalid: "\u65E0\u6CD5\u751F\u6210\u5BF9\u8C61\u5B58\u50A8\u4EE3\u7406\uFF1A\u8BF7\u4F7F\u7528\u6709\u6548\u7684 DNS \u6876\u540D\uFF0C\u5E76\u786E\u4FDD\u6876\u8DEF\u5F84\u4E0D\u4E0E\u7F51\u7AD9\u76EE\u5F55\u3001API \u6216\u5065\u5EB7\u68C0\u67E5\u5165\u53E3\u91CD\u53E0\u3002",
22831
- deploy_storagePublicEndpointInvalid: "storage.publicEndpoint \u65E0\u6548\uFF1A\u8BF7\u586B\u5199\u6D4F\u89C8\u5668\u53EF\u8BBF\u95EE\u7684 HTTP(S) \u6E90\u5730\u5740\uFF0C\u4E0D\u80FD\u5305\u542B\u6876\u540D\u3001\u8DEF\u5F84\u3001\u51ED\u636E\u3001\u67E5\u8BE2\u6216\u7247\u6BB5\u3002",
22831
+ deploy_storagePublicEndpointInvalid: "storage.publicEndpoint \u65E0\u6548\uFF1A\u8BF7\u586B\u5199\u6D4F\u89C8\u5668\u53EF\u8BBF\u95EE\u7684 HTTP(S) \u5730\u5740\uFF0C\u53EF\u5305\u542B\u89C4\u8303\u7684\u4EE3\u7406\u76EE\u5F55\uFF0C\u4E0D\u80FD\u5305\u542B\u6876\u540D\u3001\u51ED\u636E\u3001\u67E5\u8BE2\u6216\u7247\u6BB5\u3002",
22832
22832
  deploy_storageBackendRequired: "\u9759\u6001\u6D4F\u89C8\u5668\u5E94\u7528\u4E0D\u80FD\u90E8\u7F72\u5B58\u50A8\u670D\u52A1\u7AEF\u914D\u7F6E\u3002\u8BF7\u5728 Serv \u6216 SvelteKit \u670D\u52A1\u4E2D\u914D\u7F6E Storage\uFF0C\u518D\u901A\u8FC7 API \u83B7\u53D6\u9884\u7B7E\u540D\u94FE\u63A5\u3002",
22833
22833
  deploy_artifactInvalid: "\u955C\u50CF\u4EA7\u7269\u7F3A\u5931\u6216\u6821\u9A8C\u5931\u8D25\u3002\u8BF7\u5148\u6267\u884C pnpm build --target docker\uFF0C\u6216\u7528 --artifact-dir \u6307\u5B9A\u6709\u6548\u4EA7\u7269\uFF1B\u4E5F\u53EF\u7528 pnpm run deploy --build \u4E00\u6B21\u5B8C\u6210\u3002",
22834
22834
  deploy_sshRequired: "\u81EA\u52A8\u90E8\u7F72\u9700\u8981 SSH \u914D\u7F6E\uFF1B\u65E0\u7F51\u7EDC\u8FDE\u63A5\u65F6\u4F7F\u7528 --bundle-only \u751F\u6210\u90E8\u7F72\u5305\u5E76\u624B\u5DE5\u642C\u8FD0\u3002",
@@ -27195,8 +27195,8 @@ function generateWebProxyConfig(port, apiPrefix, options = {}) {
27195
27195
  throw new Error("Invalid web proxy target");
27196
27196
  }
27197
27197
  const webLocation = renderWebLocation(webBasePath);
27198
- const storageLocation = options.storageBucket ? renderStorageLocation(options.storageBucket, [apiPath, webBasePath]) : "";
27199
- return `server {
27198
+ const storageLocation = options.storageBucket ? renderStorageLocation(options.storageBucket, [apiPath, ...options.storageBasePath ? [`${webBasePath}/_app`, `${webBasePath}/assets`, `${webBasePath}/runtime-config.js`] : [webBasePath]], options.storageBasePath) : "";
27199
+ return `${options.storageBucket ? renderStorageUpstream(options.storageBucket, options.storageBasePath) : ""}server {
27200
27200
  listen ${webPort};
27201
27201
  server_name _;
27202
27202
  ${renderTrustedEdgeProxies(options.trustedEdgeProxies)} root /usr/share/nginx/html;
@@ -27232,9 +27232,11 @@ ${storageLocation}${webLocation} location = ${webBasePath}/runtime-config.js {
27232
27232
  }
27233
27233
  `;
27234
27234
  }
27235
- function renderStorageLocation(bucket, reservedPaths) {
27236
- const path = `/${bucket}`;
27237
- if (!/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(bucket) || bucket.includes("..") || ["health", "_hai"].includes(bucket) || reservedPaths.some((reserved) => reserved && (reserved === path || reserved.startsWith(`${path}/`) || path.startsWith(`${reserved}/`)))) {
27235
+ function renderStorageLocation(bucket, reservedPaths, storageBasePath = "") {
27236
+ renderWebLocation(storageBasePath);
27237
+ const path = `${storageBasePath}/${bucket}`;
27238
+ const reserved = ["/health", "/_hai", ...reservedPaths].filter(Boolean);
27239
+ if (!/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(bucket) || bucket.includes("..") || ["health", "_hai"].includes(bucket) || reserved.some((item) => item === path || item.startsWith(`${path}/`) || path.startsWith(`${item}/`) || storageBasePath && (item === storageBasePath || item.startsWith(`${storageBasePath}/`) || storageBasePath.startsWith(`${item}/`)))) {
27238
27240
  throw new Error("Storage bucket conflicts with application routes or is not a valid DNS bucket name");
27239
27241
  }
27240
27242
  return ` location ^~ ${path}/ {
@@ -27251,7 +27253,8 @@ function renderStorageLocation(bucket, reservedPaths) {
27251
27253
  add_header Cache-Control "private, no-store" always;
27252
27254
  limit_except GET PUT OPTIONS { deny all; }
27253
27255
  client_max_body_size 0;
27254
- proxy_pass http://storage:9000;
27256
+ ${storageBasePath ? ` # map \u4FDD\u7559\u539F\u59CB URI \u4E0E\u67E5\u8BE2\uFF1B\u4E0D\u5728 location \u5185\u521B\u5EFA\u6539\u53D8\u4EE3\u7406\u7EE7\u627F\u7684 if \u914D\u7F6E\u3002
27257
+ proxy_pass http://hai_storage_proxy$hai_storage_uri;` : " proxy_pass http://storage:9000;"}
27255
27258
  proxy_http_version 1.1;
27256
27259
  proxy_set_header Host $http_host;
27257
27260
  proxy_set_header Connection "";
@@ -27263,16 +27266,27 @@ function renderStorageLocation(bucket, reservedPaths) {
27263
27266
  }
27264
27267
  `;
27265
27268
  }
27269
+ function renderStorageUpstream(bucket, storageBasePath = "") {
27270
+ if (!storageBasePath)
27271
+ return "";
27272
+ const path = `${storageBasePath}/${bucket}`.replaceAll(".", "\\\\.");
27273
+ return `upstream hai_storage_proxy { server storage:9000; }
27274
+ map $request_uri $hai_storage_uri {
27275
+ default $request_uri;
27276
+ "~^${path}(/.*)$" /${bucket}$1;
27277
+ }
27278
+ `;
27279
+ }
27266
27280
  function generateApplicationProxyConfig(options) {
27267
27281
  const { primaryService, port, bucket, reservedPaths, maxPlaintextBytes } = options;
27268
27282
  if (!Number.isInteger(port) || port < 1 || port > 65535)
27269
27283
  throw new Error("Invalid application proxy target");
27270
27284
  const bodyLimits = resolveTransportBodyLimits(maxPlaintextBytes);
27271
- return `server {
27285
+ return `${renderStorageUpstream(bucket, options.storageBasePath)}server {
27272
27286
  listen 8080;
27273
27287
  server_name _;
27274
27288
  ${renderTrustedEdgeProxies(options.trustedEdgeProxies)} large_client_header_buffers 4 32k;
27275
- ${renderStorageLocation(bucket, reservedPaths)} location = /_hai/gateway-health {
27289
+ ${renderStorageLocation(bucket, reservedPaths, options.storageBasePath)} location = /_hai/gateway-health {
27276
27290
  access_log off;
27277
27291
  return 200 'ok';
27278
27292
  }
@@ -27460,13 +27474,17 @@ function createDockerSshProvider(config2, container) {
27460
27474
  const healthPaths = hasWebProxy ? ["/health", "/_hai/web-health", `${webBasePath}/`] : scan.isSvelteKit ? [`${webBasePath}/`] : standaloneWebConfig ? ["/health", `${webBasePath}/`] : ["/health"];
27461
27475
  const { env, sidecar } = buildRuntimeEnv(appDir, projectName, scan, provisionEnv, containerPort, options, appEnv, container?.s3Engine);
27462
27476
  const managedStorage = sidecar.services.includes("storage") ? JSON.parse(sidecar.env.HAI_STORAGE) : void 0;
27477
+ let storageBasePath = "";
27463
27478
  if (managedStorage?.publicEndpoint !== void 0) {
27464
27479
  try {
27465
27480
  if (typeof managedStorage.publicEndpoint !== "string")
27466
27481
  throw new Error("Invalid public endpoint type");
27482
+ const unsafeCharacters = /[\u0000-\u0020\u007F\\%]/.test(managedStorage.publicEndpoint);
27467
27483
  const endpoint = new URL(managedStorage.publicEndpoint);
27468
- if (!["http:", "https:"].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.pathname !== "/" || endpoint.search || endpoint.hash)
27484
+ if (!["http:", "https:"].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.search || endpoint.hash || !/^\/(?:[\w.-]+(?:\/[\w.-]+)*\/?)?$/.test(endpoint.pathname) || unsafeCharacters || /(?:^|\/)\.{1,2}(?:\/|$)/.test(managedStorage.publicEndpoint)) {
27469
27485
  throw new Error("Invalid public endpoint origin");
27486
+ }
27487
+ storageBasePath = endpoint.pathname.replace(/\/+$/, "");
27470
27488
  } catch {
27471
27489
  return err(HaiDeployError.CONFIG_ERROR, deployM("deploy_storagePublicEndpointInvalid"));
27472
27490
  }
@@ -27550,7 +27568,7 @@ function createDockerSshProvider(config2, container) {
27550
27568
  try {
27551
27569
  const configured = transport ? transport.maxPlaintextBytes : void 0;
27552
27570
  const limits = resolveTransportBodyLimits(Math.max(createTransportBodyPolicy(configured === "auto" ? void 0 : configured, transport ? transport.routePlaintextBytes : void 0).maximum.plaintextBytes, feedbackTransportBytes ?? 0));
27553
- webProxy = generateWebProxyConfig(containerPort, apiPrefix, { webPort: webContainerPort, maxPlaintextBytes: limits.plaintextBytes, webBasePath, storageBucket: managedStorage?.bucket, trustedEdgeProxies: config2.trustedEdgeProxies });
27571
+ webProxy = generateWebProxyConfig(containerPort, apiPrefix, { webPort: webContainerPort, maxPlaintextBytes: limits.plaintextBytes, webBasePath, storageBucket: managedStorage?.bucket, storageBasePath, trustedEdgeProxies: config2.trustedEdgeProxies });
27554
27572
  } catch (error62) {
27555
27573
  return err(HaiDeployError.CONFIG_ERROR, error62 instanceof RangeError ? error62.message : deployM(managedStorage ? "deploy_storageProxyInvalid" : "deploy_transportBodyLimitInvalid"));
27556
27574
  }
@@ -27562,7 +27580,7 @@ function createDockerSshProvider(config2, container) {
27562
27580
  const transport = server.data.transport;
27563
27581
  applicationPlaintextBytes = Math.max(createTransportBodyPolicy(transport?.maxPlaintextBytes === "auto" ? void 0 : transport?.maxPlaintextBytes, transport?.routePlaintextBytes).maximum.plaintextBytes, feedbackTransportBytes ?? 0);
27564
27582
  }
27565
- webProxy = generateApplicationProxyConfig({ primaryService, port: containerPort, bucket: managedStorage.bucket, reservedPaths: [webBasePath, http?.apiPrefix ?? "/api/v1"], maxPlaintextBytes: applicationPlaintextBytes, trustedEdgeProxies: config2.trustedEdgeProxies });
27583
+ webProxy = generateApplicationProxyConfig({ primaryService, port: containerPort, bucket: managedStorage.bucket, storageBasePath, reservedPaths: [http?.apiPrefix ?? "/api/v1", ...storageBasePath ? [`${webBasePath}/_app`, `${webBasePath}/assets`, `${webBasePath}/runtime-config.js`] : [webBasePath]], maxPlaintextBytes: applicationPlaintextBytes, trustedEdgeProxies: config2.trustedEdgeProxies });
27566
27584
  } catch {
27567
27585
  return err(HaiDeployError.CONFIG_ERROR, deployM("deploy_storageProxyInvalid"));
27568
27586
  }
@@ -29250,5 +29268,5 @@ async function acquireImportLock(path, root) {
29250
29268
  }
29251
29269
 
29252
29270
  export { DEPLOY_MIDDLEWARE, DeployConfigSchema, DeploymentArtifactSchema, HaiDeployError, ProviderConfigSchema, artifactChecksum, createDeploymentPlan, deploy, describeMiddlewareBackend, external_exports, getDeployCommandState, getDeployRecovery, importDeploymentSecrets, loadDeploymentConfig, loadDeploymentEnvironment, mergeEnvironmentLayers, normalizeProjectName, readDeploymentArtifact, saveDeploymentEnvironment };
29253
- //# sourceMappingURL=chunk-M7HN2OE3.js.map
29254
- //# sourceMappingURL=chunk-M7HN2OE3.js.map
29271
+ //# sourceMappingURL=chunk-MUHRBJSW.js.map
29272
+ //# sourceMappingURL=chunk-MUHRBJSW.js.map