@vm0/cli 9.270.1 → 9.271.0

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 (107) hide show
  1. package/{agent-KVO2AHTE.js → agent-O4PIZ7NO.js} +6 -6
  2. package/{banking-6JBGRQZ2.js → banking-K3T7FGVL.js} +4 -4
  3. package/{browser-6AAL6Z2G.js → browser-ZUXV2DZI.js} +4 -4
  4. package/{chat-PN7A2MC4.js → chat-FQ65YTRM.js} +5 -5
  5. package/{chunk-TRGD5ZVE.js → chunk-CCUKVMAH.js} +2 -2
  6. package/{chunk-LRNTCZW5.js → chunk-D7TEG7WN.js} +2 -2
  7. package/{chunk-XBAPAKU7.js → chunk-EINTZ5MX.js} +13 -5
  8. package/chunk-EINTZ5MX.js.map +1 -0
  9. package/{chunk-6APTUGDE.js → chunk-JXUQQIUP.js} +12 -4
  10. package/chunk-JXUQQIUP.js.map +1 -0
  11. package/{chunk-VD3OZARF.js → chunk-MOWAU52B.js} +2 -2
  12. package/{chunk-DVGDO4XK.js → chunk-RFTCX5UZ.js} +2 -2
  13. package/{chunk-TIFCWQ2H.js → chunk-TC7IZRA2.js} +2 -2
  14. package/{chunk-NZHREXMF.js → chunk-TM6A5MNI.js} +1 -11
  15. package/{chunk-NZHREXMF.js.map → chunk-TM6A5MNI.js.map} +1 -1
  16. package/{chunk-IRYWZDHD.js → chunk-TZDXFY6G.js} +289 -396
  17. package/chunk-TZDXFY6G.js.map +1 -0
  18. package/{chunk-ZAE7DA72.js → chunk-VSL4HRIA.js} +2 -2
  19. package/{chunk-XNBEOZ72.js → chunk-X7YXT2UE.js} +14 -9
  20. package/chunk-X7YXT2UE.js.map +1 -0
  21. package/{computer-use-RL4LFXTU.js → computer-use-LAD5XLHX.js} +4 -4
  22. package/{connector-65CXKHFD.js → connector-AVTEZ5M4.js} +7 -7
  23. package/{credit-BATZHIJM.js → credit-I45PC4IZ.js} +5 -5
  24. package/{developer-support-HC57MCE5.js → developer-support-HG2427DE.js} +4 -4
  25. package/{doctor-CZTLPLHN.js → doctor-NEF5PDLF.js} +5 -5
  26. package/{feishu-N4TRYP4I.js → feishu-C7TLUZNW.js} +10 -6
  27. package/{feishu-N4TRYP4I.js.map → feishu-C7TLUZNW.js.map} +1 -1
  28. package/{finance-AXTNCFO2.js → finance-QRINPXNY.js} +4 -4
  29. package/{generate-2WUDNC2R.js → generate-OR4TSIMU.js} +6 -6
  30. package/{github-Z3ZI2RYC.js → github-B6FLS3YK.js} +10 -6
  31. package/{github-Z3ZI2RYC.js.map → github-B6FLS3YK.js.map} +1 -1
  32. package/{goal-PZTLMPFS.js → goal-QXSEQGAT.js} +4 -4
  33. package/{host-7IU7PNIP.js → host-4TKBODTL.js} +4 -4
  34. package/{logs-DEQEA2ZP.js → logs-WBT4C34D.js} +7 -7
  35. package/{mail-VRSTZSXB.js → mail-GVDB4DW2.js} +6 -6
  36. package/{maps-AV5OEWNN.js → maps-7PWULA7U.js} +4 -4
  37. package/{model-GHSABQLU.js → model-54YGVJAR.js} +5 -5
  38. package/{model-provider-HJWYN6GP.js → model-provider-ZPDGFYK3.js} +5 -5
  39. package/{org-YKYRZPQI.js → org-4IZEIH7U.js} +4 -4
  40. package/package.json +1 -1
  41. package/{people-search-4OQEQRVD.js → people-search-3MYEUXPL.js} +4 -4
  42. package/{phone-6KIDS46N.js → phone-374WD72N.js} +10 -6
  43. package/{phone-6KIDS46N.js.map → phone-374WD72N.js.map} +1 -1
  44. package/{preference-BQVHQ6QD.js → preference-6MJRMHWU.js} +4 -4
  45. package/{resource-GB6GNOG4.js → resource-LHAF45BR.js} +5 -5
  46. package/{scrape-GG3RREIS.js → scrape-IWNRA5Y6.js} +4 -4
  47. package/{search-GHER6HN2.js → search-D65TMXEQ.js} +7 -7
  48. package/{secret-LCXB3H4Z.js → secret-HCD3ZCX2.js} +4 -4
  49. package/{slack-OIZNRNOX.js → slack-R4LKBTX6.js} +9 -5
  50. package/slack-R4LKBTX6.js.map +1 -0
  51. package/{teams-LGUWTNHC.js → teams-3JJJ2G3A.js} +10 -6
  52. package/{teams-LGUWTNHC.js.map → teams-3JJJ2G3A.js.map} +1 -1
  53. package/{telegram-TKRKSM3A.js → telegram-2E2UM67J.js} +10 -6
  54. package/{telegram-TKRKSM3A.js.map → telegram-2E2UM67J.js.map} +1 -1
  55. package/{upgrade-MJNLJUGT.js → upgrade-J6FYUUYV.js} +3 -3
  56. package/{variable-ET7USLRD.js → variable-YXJ6NH3N.js} +4 -4
  57. package/{video-AGASRAND.js → video-GYS2CSQF.js} +3 -3
  58. package/{weather-HHZJCP3Y.js → weather-N5IWRZPG.js} +4 -4
  59. package/{web-XUTUHLJZ.js → web-LPR6C2K7.js} +4 -4
  60. package/{web-search-UTGH6NH5.js → web-search-BT6BDI5E.js} +4 -4
  61. package/{whoami-EIGE5O6D.js → whoami-YV26HEXS.js} +6 -6
  62. package/{workflow-IC64RX7P.js → workflow-T2R3IE2A.js} +5 -5
  63. package/zero.js +43 -43
  64. package/chunk-6APTUGDE.js.map +0 -1
  65. package/chunk-IRYWZDHD.js.map +0 -1
  66. package/chunk-XBAPAKU7.js.map +0 -1
  67. package/chunk-XNBEOZ72.js.map +0 -1
  68. package/slack-OIZNRNOX.js.map +0 -1
  69. /package/{agent-KVO2AHTE.js.map → agent-O4PIZ7NO.js.map} +0 -0
  70. /package/{banking-6JBGRQZ2.js.map → banking-K3T7FGVL.js.map} +0 -0
  71. /package/{browser-6AAL6Z2G.js.map → browser-ZUXV2DZI.js.map} +0 -0
  72. /package/{chat-PN7A2MC4.js.map → chat-FQ65YTRM.js.map} +0 -0
  73. /package/{chunk-TRGD5ZVE.js.map → chunk-CCUKVMAH.js.map} +0 -0
  74. /package/{chunk-LRNTCZW5.js.map → chunk-D7TEG7WN.js.map} +0 -0
  75. /package/{chunk-VD3OZARF.js.map → chunk-MOWAU52B.js.map} +0 -0
  76. /package/{chunk-DVGDO4XK.js.map → chunk-RFTCX5UZ.js.map} +0 -0
  77. /package/{chunk-TIFCWQ2H.js.map → chunk-TC7IZRA2.js.map} +0 -0
  78. /package/{chunk-ZAE7DA72.js.map → chunk-VSL4HRIA.js.map} +0 -0
  79. /package/{computer-use-RL4LFXTU.js.map → computer-use-LAD5XLHX.js.map} +0 -0
  80. /package/{connector-65CXKHFD.js.map → connector-AVTEZ5M4.js.map} +0 -0
  81. /package/{credit-BATZHIJM.js.map → credit-I45PC4IZ.js.map} +0 -0
  82. /package/{developer-support-HC57MCE5.js.map → developer-support-HG2427DE.js.map} +0 -0
  83. /package/{doctor-CZTLPLHN.js.map → doctor-NEF5PDLF.js.map} +0 -0
  84. /package/{finance-AXTNCFO2.js.map → finance-QRINPXNY.js.map} +0 -0
  85. /package/{generate-2WUDNC2R.js.map → generate-OR4TSIMU.js.map} +0 -0
  86. /package/{goal-PZTLMPFS.js.map → goal-QXSEQGAT.js.map} +0 -0
  87. /package/{host-7IU7PNIP.js.map → host-4TKBODTL.js.map} +0 -0
  88. /package/{logs-DEQEA2ZP.js.map → logs-WBT4C34D.js.map} +0 -0
  89. /package/{mail-VRSTZSXB.js.map → mail-GVDB4DW2.js.map} +0 -0
  90. /package/{maps-AV5OEWNN.js.map → maps-7PWULA7U.js.map} +0 -0
  91. /package/{model-GHSABQLU.js.map → model-54YGVJAR.js.map} +0 -0
  92. /package/{model-provider-HJWYN6GP.js.map → model-provider-ZPDGFYK3.js.map} +0 -0
  93. /package/{org-YKYRZPQI.js.map → org-4IZEIH7U.js.map} +0 -0
  94. /package/{people-search-4OQEQRVD.js.map → people-search-3MYEUXPL.js.map} +0 -0
  95. /package/{preference-BQVHQ6QD.js.map → preference-6MJRMHWU.js.map} +0 -0
  96. /package/{resource-GB6GNOG4.js.map → resource-LHAF45BR.js.map} +0 -0
  97. /package/{scrape-GG3RREIS.js.map → scrape-IWNRA5Y6.js.map} +0 -0
  98. /package/{search-GHER6HN2.js.map → search-D65TMXEQ.js.map} +0 -0
  99. /package/{secret-LCXB3H4Z.js.map → secret-HCD3ZCX2.js.map} +0 -0
  100. /package/{upgrade-MJNLJUGT.js.map → upgrade-J6FYUUYV.js.map} +0 -0
  101. /package/{variable-ET7USLRD.js.map → variable-YXJ6NH3N.js.map} +0 -0
  102. /package/{video-AGASRAND.js.map → video-GYS2CSQF.js.map} +0 -0
  103. /package/{weather-HHZJCP3Y.js.map → weather-N5IWRZPG.js.map} +0 -0
  104. /package/{web-XUTUHLJZ.js.map → web-LPR6C2K7.js.map} +0 -0
  105. /package/{web-search-UTGH6NH5.js.map → web-search-BT6BDI5E.js.map} +0 -0
  106. /package/{whoami-EIGE5O6D.js.map → whoami-YV26HEXS.js.map} +0 -0
  107. /package/{workflow-IC64RX7P.js.map → workflow-T2R3IE2A.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  getActiveToken,
7
7
  getBaseUrl,
8
8
  headersWithCliClientHeaders
9
- } from "./chunk-LRNTCZW5.js";
9
+ } from "./chunk-D7TEG7WN.js";
10
10
  import {
11
11
  init_esm_shims
12
12
  } from "./chunk-GPYQ24DR.js";
@@ -442,7 +442,12 @@ async function uploadWebFile(localPath, options) {
442
442
  const prepareRes = await fetch(prepareUrl, {
443
443
  method: "POST",
444
444
  headers: headersWithCliClientHeaders(prepareHeaders),
445
- body: JSON.stringify({ filename, contentType, size: stats.size })
445
+ body: JSON.stringify({
446
+ filename,
447
+ contentType,
448
+ size: stats.size,
449
+ supportsUploadHeaders: true
450
+ })
446
451
  });
447
452
  if (!prepareRes.ok) {
448
453
  const { message, code } = await parseErrorBody(
@@ -455,7 +460,10 @@ async function uploadWebFile(localPath, options) {
455
460
  const bytes = readFileSync(localPath);
456
461
  const putRes = await fetch(prepared.uploadUrl, {
457
462
  method: "PUT",
458
- headers: { "Content-Type": prepared.contentType },
463
+ headers: {
464
+ "Content-Type": prepared.contentType,
465
+ ...prepared.uploadHeaders
466
+ },
459
467
  body: new Uint8Array(bytes)
460
468
  });
461
469
  if (!putRes.ok) {
@@ -648,4 +656,4 @@ export {
648
656
  generateWebVideo,
649
657
  transcribeAudio
650
658
  };
651
- //# sourceMappingURL=chunk-6APTUGDE.js.map
659
+ //# sourceMappingURL=chunk-JXUQQIUP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/api/domains/web.ts"],"sourcesContent":["import { createWriteStream, readFileSync, statSync } from \"node:fs\";\nimport { basename, extname } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { Realtime, type AuthOptions, type InboundMessage } from \"ably\";\nimport type {\n ZeroBuiltInGenerationAcceptedResponse,\n ZeroBuiltInGenerationResponse,\n} from \"@vm0/api-contracts/contracts/zero-built-in-generation\";\nimport { ApiRequestError, getBaseUrl } from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\nconst BUILT_IN_GENERATION_POLL_INTERVAL_MS = 2_000;\nconst BUILT_IN_GENERATION_WAIT_TIMEOUT_MS_BY_TYPE = {\n image: 15 * 60 * 1000,\n video: 30 * 60 * 1000,\n presentation: 60 * 60 * 1000,\n website: 60 * 60 * 1000,\n} as const satisfies Record<\n ZeroBuiltInGenerationAcceptedResponse[\"type\"],\n number\n>;\nconst ABLY_CONNECT_TIMEOUT_MS = 10_000;\n\n/**\n * Minimal extension → MIME map covering the server allowlist for\n * `/api/zero/uploads/prepare`. Kept in this file rather than a shared module\n * to match the YAGNI pattern used elsewhere in the CLI.\n */\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".avif\": \"image/avif\",\n \".svg\": \"image/svg+xml\",\n \".bmp\": \"image/bmp\",\n \".heic\": \"image/heic\",\n \".heif\": \"image/heif\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".psd\": \"image/vnd.adobe.photoshop\",\n \".mp4\": \"video/mp4\",\n \".webm\": \"video/webm\",\n \".mov\": \"video/quicktime\",\n \".aac\": \"audio/aac\",\n \".flac\": \"audio/flac\",\n \".m4a\": \"audio/mp4\",\n \".mp3\": \"audio/mpeg\",\n \".mpga\": \"audio/mpga\",\n \".oga\": \"audio/ogg\",\n \".ogg\": \"audio/ogg\",\n \".opus\": \"audio/opus\",\n \".wav\": \"audio/wav\",\n \".wave\": \"audio/wave\",\n \".pdf\": \"application/pdf\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".md\": \"text/markdown\",\n \".html\": \"text/html\",\n \".htm\": \"text/html\",\n \".json\": \"application/json\",\n \".xml\": \"application/xml\",\n \".yaml\": \"application/yaml\",\n \".yml\": \"application/yaml\",\n \".tsv\": \"text/tab-separated-values\",\n \".doc\": \"application/msword\",\n \".docx\":\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".docm\": \"application/vnd.ms-word.document.macroenabled.12\",\n \".dotm\": \"application/vnd.ms-word.template.macroenabled.12\",\n \".dotx\":\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\",\n \".odt\": \"application/vnd.oasis.opendocument.text\",\n \".rtf\": \"application/rtf\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".xlsb\": \"application/vnd.ms-excel.sheet.binary.macroenabled.12\",\n \".xlsm\": \"application/vnd.ms-excel.sheet.macroenabled.12\",\n \".xltm\": \"application/vnd.ms-excel.template.macroenabled.12\",\n \".xltx\":\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\",\n \".ods\": \"application/vnd.oasis.opendocument.spreadsheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\":\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".potm\": \"application/vnd.ms-powerpoint.template.macroenabled.12\",\n \".potx\":\n \"application/vnd.openxmlformats-officedocument.presentationml.template\",\n \".odp\": \"application/vnd.oasis.opendocument.presentation\",\n \".ppsx\":\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\",\n \".ppsm\": \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\",\n \".pptm\": \"application/vnd.ms-powerpoint.presentation.macroenabled.12\",\n \".zip\": \"application/zip\",\n \".rar\": \"application/vnd.rar\",\n \".7z\": \"application/x-7z-compressed\",\n \".tar\": \"application/x-tar\",\n \".gz\": \"application/gzip\",\n \".tgz\": \"application/gzip\",\n \".bz2\": \"application/x-bzip2\",\n \".xz\": \"application/x-xz\",\n \".pages\": \"application/vnd.apple.pages\",\n \".numbers\": \"application/vnd.apple.numbers\",\n \".key\": \"application/vnd.apple.keynote\",\n \".parquet\": \"application/vnd.apache.parquet\",\n \".sqlite\": \"application/vnd.sqlite3\",\n \".sqlite3\": \"application/vnd.sqlite3\",\n \".db\": \"application/vnd.sqlite3\",\n \".epub\": \"application/epub+zip\",\n \".ai\": \"application/postscript\",\n};\n\nexport function inferWebUploadContentType(localPath: string): string {\n const ext = extname(localPath).toLowerCase();\n return MIME_BY_EXTENSION[ext] ?? \"application/octet-stream\";\n}\n\ninterface DownloadWebFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\n/**\n * Download a web-uploaded file to a local path, streaming the response body\n * to disk. Authenticates via ZERO_TOKEN. Response is binary, so this bypasses\n * the typed contract client.\n */\nexport async function downloadWebFile(\n fileId: string,\n outPath: string,\n): Promise<DownloadWebFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/web/download-file\", baseUrl);\n url.searchParams.set(\"file_id\", fileId);\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download web file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // ignore parse errors — keep generic message\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"Web download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n // Cast required: Web API ReadableStream and Node.js ReadableStream are\n // structurally compatible but have incompatible type declarations.\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n\ninterface UploadWebFileResult {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n url: string;\n}\n\ninterface GenerateWebVoiceOptions {\n text: string;\n voice?: string;\n instructions?: string;\n}\n\ninterface GenerateWebVoiceResult {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n url: string;\n durationSeconds: number;\n creditsCharged: number;\n model: string;\n voice: string;\n}\n\ninterface GenerateWebImageOptions {\n prompt: string;\n model?: string;\n size?: string;\n quality?: string;\n background?: string;\n outputFormat?: string;\n outputCompression?: number;\n moderation?: string;\n seed?: number;\n safetyTolerance?: string;\n enhancePrompt?: boolean;\n imageUrls?: readonly string[];\n maskImageUrl?: string;\n inputFidelity?: string;\n imagePromptStrength?: number;\n}\n\ninterface GenerateWebImageResult {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n url: string;\n creditsCharged: number;\n model: string;\n provider: string;\n imageSize: string;\n quality: string;\n background: string;\n outputFormat: string;\n outputCompression?: number;\n moderation?: string;\n safetyTolerance?: string;\n revisedPrompt?: string;\n usage?: {\n textInputTokens: number;\n imageInputTokens: number;\n imageOutputTokens: number;\n totalTokens: number;\n };\n billingCategory?: string;\n billingQuantity?: number;\n sourceUrl?: string;\n seed?: number;\n sourceImageUrls?: string[];\n maskImageUrl?: string;\n inputFidelity?: string;\n imagePromptStrength?: number;\n}\n\ninterface GenerateWebVideoOptions {\n prompt: string;\n model?: string;\n aspectRatio?: string;\n duration?: string;\n resolution?: string;\n generateAudio?: boolean;\n negativePrompt?: string;\n seed?: number;\n autoFix?: boolean;\n safetyTolerance?: string;\n imageUrls?: string[];\n videoUrls?: string[];\n audioUrls?: string[];\n firstFrameImageUrl?: string;\n lastFrameImageUrl?: string;\n}\n\ninterface GenerateWebVideoResult {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n url: string;\n durationSeconds: number;\n creditsCharged: number;\n model: string;\n aspectRatio: string;\n duration: string;\n resolution: string;\n generateAudio: boolean;\n sourceUrl: string;\n requestId?: string;\n}\n\nfunction shouldIncludePayloadValue(value: unknown): boolean {\n if (value === undefined) {\n return false;\n }\n return !Array.isArray(value) || value.length > 0;\n}\n\nfunction compactPayload(\n entries: readonly (readonly [string, unknown])[],\n): Record<string, unknown> {\n return Object.fromEntries(\n entries.filter(([, value]) => {\n return shouldIncludePayloadValue(value);\n }),\n );\n}\n\nfunction generateWebVideoPayload(\n options: GenerateWebVideoOptions,\n): Record<string, unknown> {\n return compactPayload([\n [\"prompt\", options.prompt],\n [\"model\", options.model],\n [\"aspectRatio\", options.aspectRatio],\n [\"duration\", options.duration],\n [\"resolution\", options.resolution],\n [\"generateAudio\", options.generateAudio],\n [\"negativePrompt\", options.negativePrompt],\n [\"seed\", options.seed],\n [\"autoFix\", options.autoFix],\n [\"safetyTolerance\", options.safetyTolerance],\n [\"imageUrls\", options.imageUrls],\n [\"videoUrls\", options.videoUrls],\n [\"audioUrls\", options.audioUrls],\n [\"firstFrameImageUrl\", options.firstFrameImageUrl],\n [\"lastFrameImageUrl\", options.lastFrameImageUrl],\n ]);\n}\n\ninterface PrepareUploadResponse {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n uploadUrl: string;\n uploadHeaders?: Record<string, string>;\n url: string;\n}\n\ninterface CompleteUploadResponse {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n url: string;\n}\n\nasync function parseErrorBody(\n response: Response,\n fallback: string,\n): Promise<{ message: string; code: string }> {\n let message = `${fallback} (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // ignore parse errors — keep generic message\n }\n return { message, code };\n}\n\nfunction authenticatedJsonHeaders(token: string): Headers {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n return headersWithCliClientHeaders(headers);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isBuiltInGenerationAcceptedResponse(\n value: unknown,\n): value is ZeroBuiltInGenerationAcceptedResponse {\n if (!isRecord(value)) {\n return false;\n }\n return (\n typeof value.generationId === \"string\" &&\n value.status === \"queued\" &&\n (value.type === \"image\" ||\n value.type === \"video\" ||\n value.type === \"presentation\" ||\n value.type === \"website\") &&\n isRecord(value.realtime)\n );\n}\n\ninterface BuiltInGenerationNotifier {\n wait(timeoutMs: number): Promise<void>;\n close(): void;\n}\n\nfunction createBuiltInGenerationRealtime(\n accepted: ZeroBuiltInGenerationAcceptedResponse,\n): Realtime {\n let nextAuthRequest = accepted.realtime.tokenRequest;\n const authCallback: NonNullable<AuthOptions[\"authCallback\"]> = (\n _params,\n callback,\n ) => {\n const current = nextAuthRequest;\n nextAuthRequest = accepted.realtime.tokenRequest;\n callback(null, current);\n };\n\n return new Realtime({\n authCallback,\n autoConnect: true,\n disconnectedRetryTimeout: 5000,\n suspendedRetryTimeout: 15_000,\n });\n}\n\nfunction waitForRealtimeConnected(\n ably: Realtime,\n timeoutMs = ABLY_CONNECT_TIMEOUT_MS,\n): Promise<void> {\n if (ably.connection.state === \"connected\") {\n return Promise.resolve();\n }\n if (ably.connection.state === \"failed\") {\n return Promise.reject(new Error(\"Ably connection failed\"));\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(\"Timed out connecting to Ably\"));\n }, timeoutMs);\n\n ably.connection.once(\"connected\", () => {\n clearTimeout(timer);\n resolve();\n });\n ably.connection.once(\"failed\", (stateChange) => {\n clearTimeout(timer);\n reject(\n new Error(\n `Ably connection failed: ${stateChange?.reason?.message ?? \"unknown\"}`,\n ),\n );\n });\n });\n}\n\nasync function createBuiltInGenerationNotifier(\n accepted: ZeroBuiltInGenerationAcceptedResponse,\n): Promise<BuiltInGenerationNotifier | null> {\n const ably = createBuiltInGenerationRealtime(accepted);\n\n try {\n await waitForRealtimeConnected(ably);\n const channel = ably.channels.get(accepted.realtime.channelName);\n\n let pendingEvent = false;\n let closed = false;\n let wake: (() => void) | null = null;\n\n const wakeWaiter = () => {\n const current = wake;\n wake = null;\n current?.();\n };\n\n const onMessage = (_message: InboundMessage) => {\n if (wake) {\n wakeWaiter();\n return;\n }\n pendingEvent = true;\n };\n\n await channel.subscribe(accepted.realtime.eventName, onMessage);\n\n return {\n wait(timeoutMs: number): Promise<void> {\n if (pendingEvent || closed || timeoutMs <= 0) {\n pendingEvent = false;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n function done() {\n clearTimeout(timer);\n if (wake === done) {\n wake = null;\n }\n resolve();\n }\n const timer = setTimeout(done, timeoutMs);\n wake = done;\n });\n },\n close(): void {\n if (closed) {\n return;\n }\n closed = true;\n channel.unsubscribe(accepted.realtime.eventName, onMessage);\n wakeWaiter();\n ably.close();\n },\n };\n } catch {\n ably.close();\n return null;\n }\n}\n\nasync function getBuiltInGenerationStatus(\n baseUrl: string,\n token: string,\n generationId: string,\n): Promise<ZeroBuiltInGenerationResponse> {\n const response = await fetch(\n new URL(`/api/zero/built-in-generations/${generationId}`, baseUrl),\n { headers: authenticatedJsonHeaders(token) },\n );\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to get generation status\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n\n return (await response.json()) as ZeroBuiltInGenerationResponse;\n}\n\nfunction readBuiltInGenerationResult<T>(\n status: ZeroBuiltInGenerationResponse,\n fallback: string,\n): T | undefined {\n if (status.status === \"completed\") {\n if (!status.result) {\n throw new ApiRequestError(\n `${fallback} returned no result`,\n \"EMPTY_RESULT\",\n 502,\n );\n }\n return status.result as T;\n }\n\n if (status.status === \"failed\") {\n const code = status.error?.code ?? \"GENERATION_FAILED\";\n throw new ApiRequestError(\n status.error?.message ?? `${fallback} failed`,\n code,\n statusForBuiltInGenerationError(code),\n );\n }\n\n return undefined;\n}\n\nfunction statusForBuiltInGenerationError(code: string): number {\n if (code === \"BAD_REQUEST\") {\n return 400;\n }\n if (code === \"INSUFFICIENT_CREDITS\") {\n return 402;\n }\n if (code === \"NOT_CONFIGURED\") {\n return 503;\n }\n if (code === \"GENERATION_TIMEOUT\") {\n return 504;\n }\n if (\n code.startsWith(\"BYTEPLUS_INVALID_PARAMETER\") ||\n code.startsWith(\"BYTEPLUS_INPUT_\")\n ) {\n return 400;\n }\n if (code.startsWith(\"BYTEPLUS_\")) {\n return 502;\n }\n if (code.startsWith(\"NO_\") || code.endsWith(\"_FAILED\")) {\n return 502;\n }\n return 500;\n}\n\nasync function waitForBuiltInGenerationResult<T>(args: {\n readonly accepted: ZeroBuiltInGenerationAcceptedResponse;\n readonly baseUrl: string;\n readonly token: string;\n readonly fallback: string;\n}): Promise<T> {\n let notifier: BuiltInGenerationNotifier | null = null;\n let notifierCreated = false;\n const startedAt = Date.now();\n const timeoutMs =\n BUILT_IN_GENERATION_WAIT_TIMEOUT_MS_BY_TYPE[args.accepted.type];\n\n try {\n while (Date.now() - startedAt < timeoutMs) {\n const status = await getBuiltInGenerationStatus(\n args.baseUrl,\n args.token,\n args.accepted.generationId,\n );\n const result = readBuiltInGenerationResult<T>(status, args.fallback);\n if (result) {\n return result;\n }\n\n const elapsed = Date.now() - startedAt;\n const remaining = timeoutMs - elapsed;\n const waitMs = Math.min(BUILT_IN_GENERATION_POLL_INTERVAL_MS, remaining);\n if (!notifierCreated) {\n notifier = await createBuiltInGenerationNotifier(args.accepted);\n notifierCreated = true;\n }\n if (notifier) {\n await notifier.wait(waitMs);\n } else {\n await delay(waitMs);\n }\n }\n } finally {\n notifier?.close();\n }\n\n throw new ApiRequestError(\n `${args.fallback} timed out (generationId: ${args.accepted.generationId})`,\n \"GENERATION_TIMEOUT\",\n 504,\n );\n}\n\nasync function readBuiltInGenerationResponse<T>(args: {\n readonly response: Response;\n readonly baseUrl: string;\n readonly token: string;\n readonly fallback: string;\n}): Promise<T> {\n const body: unknown = await args.response.json();\n if (isBuiltInGenerationAcceptedResponse(body)) {\n return waitForBuiltInGenerationResult<T>({\n accepted: body,\n baseUrl: args.baseUrl,\n token: args.token,\n fallback: args.fallback,\n });\n }\n if (args.response.status === 202) {\n throw new ApiRequestError(\n `${args.fallback} returned an invalid generation response`,\n \"INVALID_GENERATION_RESPONSE\",\n 502,\n );\n }\n return body as T;\n}\n\n/**\n * Upload a local file and receive back metadata including a public CDN URL.\n * Authenticates via ZERO_TOKEN (`file:write` capability) or a CLI\n * PAT / Clerk session.\n *\n * Three-step flow:\n * 1. POST /api/zero/uploads/prepare — server signs a PUT URL for R2\n * 2. PUT the file bytes directly to R2\n * 3. POST /api/zero/uploads/complete — server verifies the object and\n * records any run-scoped upload association\n *\n * Step 2 never touches the Next.js runtime, which lifts the cap from\n * Vercel's ~4.5 MB body limit up to R2's 5 GB single-PUT limit.\n */\nexport async function uploadWebFile(\n localPath: string,\n options?: { contentType?: string },\n): Promise<UploadWebFileResult> {\n const stats = statSync(localPath);\n if (!stats.isFile()) {\n throw new ApiRequestError(\n `Not a regular file: ${localPath}`,\n \"BAD_REQUEST\",\n 400,\n );\n }\n\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const filename = basename(localPath);\n const contentType =\n options?.contentType ?? inferWebUploadContentType(localPath);\n\n const prepareHeaders: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n\n const prepareUrl = new URL(\"/api/zero/uploads/prepare\", baseUrl);\n const prepareRes = await fetch(prepareUrl, {\n method: \"POST\",\n headers: headersWithCliClientHeaders(prepareHeaders),\n body: JSON.stringify({\n filename,\n contentType,\n size: stats.size,\n supportsUploadHeaders: true,\n }),\n });\n\n if (!prepareRes.ok) {\n const { message, code } = await parseErrorBody(\n prepareRes,\n \"Failed to prepare upload\",\n );\n throw new ApiRequestError(message, code, prepareRes.status);\n }\n\n const prepared = (await prepareRes.json()) as PrepareUploadResponse;\n\n const bytes = readFileSync(localPath);\n const putRes = await fetch(prepared.uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": prepared.contentType,\n ...prepared.uploadHeaders,\n },\n body: new Uint8Array(bytes),\n });\n\n if (!putRes.ok) {\n throw new ApiRequestError(\n `Failed to upload file to storage (HTTP ${putRes.status})`,\n \"UPLOAD_FAILED\",\n putRes.status,\n );\n }\n\n const completeUrl = new URL(\"/api/zero/uploads/complete\", baseUrl);\n const completeRes = await fetch(completeUrl, {\n method: \"POST\",\n headers: headersWithCliClientHeaders(prepareHeaders),\n body: JSON.stringify({\n id: prepared.id,\n contentType: prepared.contentType,\n }),\n });\n\n if (!completeRes.ok) {\n const { message, code } = await parseErrorBody(\n completeRes,\n \"Failed to complete upload\",\n );\n throw new ApiRequestError(message, code, completeRes.status);\n }\n\n const completed = (await completeRes.json()) as CompleteUploadResponse;\n\n return {\n id: completed.id,\n filename: completed.filename,\n contentType: completed.contentType,\n size: completed.size,\n url: completed.url,\n };\n}\n\n/**\n * Generate billed speech audio from text and receive the public CDN URL.\n * Authenticates via ZERO_TOKEN (`file:write` capability) or a CLI PAT /\n * Clerk session.\n */\nexport async function generateWebVoice(\n options: GenerateWebVoiceOptions,\n): Promise<GenerateWebVoiceResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n\n const response = await fetch(new URL(\"/api/zero/voice-io/speech\", baseUrl), {\n method: \"POST\",\n headers: headersWithCliClientHeaders(headers),\n body: JSON.stringify({\n text: options.text,\n ...(options.voice ? { voice: options.voice } : {}),\n ...(options.instructions ? { instructions: options.instructions } : {}),\n }),\n });\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to generate voice\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n\n return (await response.json()) as GenerateWebVoiceResult;\n}\n\n/**\n * Generate a billed image from a prompt and receive the public CDN URL.\n * Authenticates via ZERO_TOKEN (`file:write` capability) or a CLI PAT /\n * Clerk session.\n */\nexport async function generateWebImage(\n options: GenerateWebImageOptions,\n): Promise<GenerateWebImageResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n\n const response = await fetch(\n new URL(\"/api/zero/image-io/generate\", baseUrl),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(headers),\n body: JSON.stringify({\n prompt: options.prompt,\n ...(options.model ? { model: options.model } : {}),\n ...(options.size ? { size: options.size } : {}),\n ...(options.quality ? { quality: options.quality } : {}),\n ...(options.background ? { background: options.background } : {}),\n ...(options.outputFormat ? { outputFormat: options.outputFormat } : {}),\n ...(options.outputCompression !== undefined\n ? { outputCompression: options.outputCompression }\n : {}),\n ...(options.moderation ? { moderation: options.moderation } : {}),\n ...(options.seed !== undefined ? { seed: options.seed } : {}),\n ...(options.safetyTolerance\n ? { safetyTolerance: options.safetyTolerance }\n : {}),\n ...(options.enhancePrompt !== undefined\n ? { enhancePrompt: options.enhancePrompt }\n : {}),\n ...(options.imageUrls && options.imageUrls.length > 0\n ? { imageUrls: options.imageUrls }\n : {}),\n ...(options.maskImageUrl ? { maskImageUrl: options.maskImageUrl } : {}),\n ...(options.inputFidelity\n ? { inputFidelity: options.inputFidelity }\n : {}),\n ...(options.imagePromptStrength !== undefined\n ? { imagePromptStrength: options.imagePromptStrength }\n : {}),\n }),\n },\n );\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to generate image\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n\n return readBuiltInGenerationResponse<GenerateWebImageResult>({\n response,\n baseUrl,\n token,\n fallback: \"Failed to generate image\",\n });\n}\n\n/**\n * Generate a billed video from a prompt and receive the public CDN URL.\n * Authenticates via ZERO_TOKEN (`file:write` capability) or a CLI PAT /\n * Clerk session.\n */\nexport async function generateWebVideo(\n options: GenerateWebVideoOptions,\n): Promise<GenerateWebVideoResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n\n const response = await fetch(\n new URL(\"/api/zero/video-io/generate\", baseUrl),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(headers),\n body: JSON.stringify(generateWebVideoPayload(options)),\n },\n );\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to generate video\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n\n return readBuiltInGenerationResponse<GenerateWebVideoResult>({\n response,\n baseUrl,\n token,\n fallback: \"Failed to generate video\",\n });\n}\n\nexport interface TranscribeAudioSegment {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n}\n\ninterface TranscribeAudioResult {\n readonly text: string;\n readonly segments?: readonly TranscribeAudioSegment[];\n}\n\nexport async function transcribeAudio(\n audioPath: string,\n options: { readonly verbose?: boolean } = {},\n): Promise<TranscribeAudioResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n const url = new URL(\"/api/zero/voice-io/stt\", baseUrl);\n if (options.verbose) {\n url.searchParams.set(\"verbose\", \"true\");\n }\n\n const audioData = readFileSync(audioPath);\n const filename = basename(audioPath);\n const ext = extname(filename).toLowerCase();\n const mimeMap: Record<string, string> = {\n \".mp3\": \"audio/mpeg\",\n \".mp4\": \"audio/mp4\",\n \".m4a\": \"audio/m4a\",\n \".wav\": \"audio/wav\",\n \".webm\": \"audio/webm\",\n };\n const mimeType = mimeMap[ext] ?? \"audio/mpeg\";\n\n const formData = new FormData();\n formData.append(\"file\", new Blob([audioData], { type: mimeType }), filename);\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: headersWithCliClientHeaders(headers),\n body: formData,\n });\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Transcription failed\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n\n return (await response.json()) as TranscribeAudioResult;\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  source_default
6
- } from "./chunk-LRNTCZW5.js";
6
+ } from "./chunk-D7TEG7WN.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-GPYQ24DR.js";
@@ -19,4 +19,4 @@ function policyIcon(policy) {
19
19
  export {
20
20
  policyIcon
21
21
  };
22
- //# sourceMappingURL=chunk-VD3OZARF.js.map
22
+ //# sourceMappingURL=chunk-MOWAU52B.js.map
@@ -5,7 +5,7 @@ import {
5
5
  getZeroAgent,
6
6
  getZeroAgentCustomConnectors,
7
7
  getZeroAgentUserConnectors
8
- } from "./chunk-IRYWZDHD.js";
8
+ } from "./chunk-TZDXFY6G.js";
9
9
  import {
10
10
  init_esm_shims
11
11
  } from "./chunk-GPYQ24DR.js";
@@ -355,4 +355,4 @@ export {
355
355
  resolveAgentContext,
356
356
  resolveConnectorDiscoveryAgentContext
357
357
  };
358
- //# sourceMappingURL=chunk-DVGDO4XK.js.map
358
+ //# sourceMappingURL=chunk-RFTCX5UZ.js.map
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  MODEL_PROVIDER_TYPES
6
- } from "./chunk-LRNTCZW5.js";
6
+ } from "./chunk-D7TEG7WN.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-GPYQ24DR.js";
@@ -40,4 +40,4 @@ export {
40
40
  formatModelProviderRoute,
41
41
  formatModelPolicyStatus
42
42
  };
43
- //# sourceMappingURL=chunk-TIFCWQ2H.js.map
43
+ //# sourceMappingURL=chunk-TC7IZRA2.js.map
@@ -2996,16 +2996,6 @@ var RESOURCE_REGISTRY = [
2996
2996
  description: "Single-color hand-drawn ink fineliner illustration of a small storefront on warm cream paper \u2014 hand-lettered shop sign, foliage, and street props.",
2997
2997
  desc: 'Boutique-poster illustration style \u2014 a single-color hand-drawn ink line drawing of a small storefront (caf\xE9, boulangerie, florist, bookshop, ramen, wine bar, barber, record store, etc.) seen from street level on warm cream paper #f4ecd8. Locked frame: portrait 1024x1536, monochromatic ink with occasional double-stroke shadow under awnings and signs, a hand-lettered shop sign baked into the building, foliage and at least one small street prop (bike, A-frame chalkboard, planters, lanterns, caf\xE9 tables, dog/cat at the door), and a faint horizontal sidewalk line across the bottom. No solid color fills, no shading, no gradients. Seven dials per brief \u2014 ink color, shop name + subtitle, archetype, perspective (flat facade vs 3/4 corner), foreground props, foliage density, and complexity (L1 single facade / L2 small scene / L3 full vignette). Trigger when user says /ink-storefront, asks for a "shopfront illustration", "storefront poster", "boutique fineliner illustration", "caf\xE9 line drawing", or briefs with a shop name + ink color + archetype in this house style.',
2998
2998
  source: vm0ImageStyleSource("ink-storefront")
2999
- },
3000
- {
3001
- id: "image-style:chibi-hero",
3002
- kind: "image-style",
3003
- name: "Chibi Hero",
3004
- description: "Chibi mobile-RPG mascot illustration \u2014 oversized-head super-deformed character, warm-dark hand-drawn outlines, cel-shaded flat fills, mid-action pose, transparent background.",
3005
- desc: 'Chibi mobile-RPG mascot illustration style \u2014 single full-body hero character with super-deformed proportions (head ~1:1 head-to-body ratio, head dominates the silhouette), bold warm dark brown outline (NOT pure black) of confident even weight, cel-shaded flat color fills with exactly one tier of subtle shadow per surface, always isolated on a transparent background with no scene or ground line. Pose is always mid-action and dynamic (sprint, lunge, mid-cast, low sneak, leap, raised prayer, mid-stumble) \u2014 never a static T-pose. Face is simplified and expressive (slit/narrow eyes by default, tiny mouth or none, no fine detail), 3/4 angle view at eye level. Square 1024x1024 canvas. Six dials per brief: archetype (ninja, mage, knight, ranger, alchemist, bard, cleric, rogue, monk, summoner, beastmaster, paladin, druid, necromancer), palette (warm earthy / cool arcane / forest scout / steel + crimson / tinkerer mustard + teal + copper / devout gold + ivory + cyan / desert ochre / ice wraith), hero prop (spear, longbow, staff, dual daggers, tome, hammer, sword + kite shield, smoking flask, lute, scythe, mace, war horn, summoning crystal), pose energy (the verb), outfit complexity (L1 simple tunic / L2 layered cloak + belt + 1-2 accessories / L3 full kit with pauldrons, pouches, sashes, scabbard, trinkets, goggles, capes), and mood (determined, fierce, stoic, focused, mischievous, gleeful, weary, smug, serene-focused). Trigger when user says /chibi-hero, asks for a "chibi hero", a "chibi RPG mascot", a "pocket adventurer character", a "super-deformed hero illustration", or briefs with an archetype + palette + weapon + pose in this style.',
3006
- // Source PR vm0-ai/vm0-skills#240 has not merged, so this style remains
3007
- // GitHub-only until its package exists on the default branch.
3008
- source: vm0ImageStyleSource("chibi-hero", false)
3009
2999
  }
3010
3000
  ];
3011
3001
  var PRESENTATION_RUNBOOK_ARCHIVE_SHA256 = {
@@ -3530,4 +3520,4 @@ export {
3530
3520
  toGenerationTarget,
3531
3521
  selectResourceCandidates
3532
3522
  };
3533
- //# sourceMappingURL=chunk-NZHREXMF.js.map
3523
+ //# sourceMappingURL=chunk-TM6A5MNI.js.map