hyperframes 0.8.139 → 0.8.140

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 (195) hide show
  1. package/dist/{add-VYJQ4S3P.js → add-7SPPQB64.js} +20 -22
  2. package/dist/{animatedGifPrep-IBMW6FZB.js → animatedGifPrep-HN3CJSFX.js} +15 -8
  3. package/dist/{asset-FLSUS73X.js → asset-AZMFUTRL.js} +3 -3
  4. package/dist/{assetCataloger-TGD7TRCR.js → assetCataloger-TQUWYLHE.js} +6 -3
  5. package/dist/{auth-EZXIN4M4.js → auth-XGY74R4A.js} +7 -7
  6. package/dist/{autoUpdate-ZPMY5T3X.js → autoUpdate-44NTJBQU.js} +2 -2
  7. package/dist/{backgroundChecks-JIDTAUFE.js → backgroundChecks-ET4DJEPG.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-FNZ6TJYY.js → batchRender-HTWWNF3P.js} +11 -8
  10. package/dist/beat-analyzer.global.js +5 -2
  11. package/dist/{beats-EAA4U3YN.js → beats-4GYTZUZG.js} +24 -17
  12. package/dist/{benchmark-KKZQVK2Y.js → benchmark-CJQHE3QN.js} +20 -23
  13. package/dist/{browser-ZIVVJLJT.js → browser-NXOVPGDG.js} +14 -28
  14. package/dist/{bundleWithLocalizedFonts-2XWC3PEM.js → bundleWithLocalizedFonts-6PJP54TC.js} +5 -5
  15. package/dist/{capture-MKJHABUL.js → capture-5EHGRJZM.js} +2 -2
  16. package/dist/{capture-EFYPXI42.js → capture-EHOMO4MP.js} +22 -15
  17. package/dist/{catalog-EWX4BBI2.js → catalog-PTX5Z52R.js} +28 -30
  18. package/dist/{catch-up-FJFH7T4W.js → catch-up-I45SPSCU.js} +11 -25
  19. package/dist/{check-YJNVDCBP.js → check-LJ7LG7OI.js} +72 -54
  20. package/dist/{checkBrowser-I6SPPEGD.js → checkBrowser-6EK5E4PG.js} +81 -36
  21. package/dist/chunk-24OWOBQH.js +3656 -0
  22. package/dist/{chunk-SIKMUO45.js → chunk-2GMKWYEH.js} +12 -12
  23. package/dist/{chunk-GIDHR5OL.js → chunk-5IKJONRY.js} +1 -1
  24. package/dist/{chunk-GWV2Y36Q.js → chunk-6U3MN4HW.js} +5 -106
  25. package/dist/chunk-A4KQZXZI.js +116 -0
  26. package/dist/{chunk-PFI3VD77.js → chunk-ABJNXQUA.js} +10 -10
  27. package/dist/{chunk-HOIHGPWO.js → chunk-ASW6NWON.js} +1 -1
  28. package/dist/chunk-B3I3XJ47.js +3711 -0
  29. package/dist/{chunk-3RT6D4P6.js → chunk-BJ5JWOES.js} +1 -1
  30. package/dist/{chunk-4VZBKOQJ.js → chunk-BQKEGPPL.js} +1 -1
  31. package/dist/{chunk-SHB5VDMH.js → chunk-BRITLL56.js} +1 -1
  32. package/dist/{chunk-7SI7GCX6.js → chunk-C2JUHIG5.js} +6 -6
  33. package/dist/{chunk-TCWL4BKK.js → chunk-DDQ4LOML.js} +1 -1
  34. package/dist/{chunk-CDJ7FPPJ.js → chunk-DQNOPYAG.js} +1 -1
  35. package/dist/{chunk-JH556Q42.js → chunk-EDYBFSPE.js} +2 -2
  36. package/dist/{chunk-W7SAWBQC.js → chunk-F3SPK6SO.js} +1 -1
  37. package/dist/chunk-FXMKHHPO.js +123 -0
  38. package/dist/chunk-G75ENCEZ.js +283 -0
  39. package/dist/{chunk-PLNWWGE7.js → chunk-GQJZORQP.js} +1 -1
  40. package/dist/{chunk-Y6W4DVPS.js → chunk-HKCNZITN.js} +1 -1
  41. package/dist/{chunk-U3GEXWI5.js → chunk-IFY57LUW.js} +1 -1
  42. package/dist/{chunk-UQXOHEQ7.js → chunk-IRBESGJ7.js} +4 -4
  43. package/dist/chunk-JFKL3WAE.js +161 -0
  44. package/dist/{chunk-25DHUDOK.js → chunk-JSGANFFH.js} +12 -3
  45. package/dist/{chunk-UGI77E35.js → chunk-KECV5G4V.js} +165 -59
  46. package/dist/{chunk-EZ2P7LAP.js → chunk-KFQNMY36.js} +8 -8
  47. package/dist/{chunk-FLRCVYNE.js → chunk-KJLY2SDJ.js} +2 -2
  48. package/dist/{chunk-XOZ3J3LB.js → chunk-KMKWRIMC.js} +1 -1
  49. package/dist/{chunk-O6K5DWXM.js → chunk-KOEWEFHK.js} +1 -1
  50. package/dist/{chunk-IBRZUVTH.js → chunk-L2H2L22P.js} +2 -2
  51. package/dist/{chunk-BC3OY2ED.js → chunk-LQG6GPVK.js} +1 -1
  52. package/dist/{chunk-Z67RZ4XO.js → chunk-MHK5DE2P.js} +263 -1960
  53. package/dist/{chunk-A4X2YWNQ.js → chunk-MTVDXB6S.js} +18 -289
  54. package/dist/{chunk-CDMB3PRC.js → chunk-MU6C2VP6.js} +7 -7
  55. package/dist/{chunk-UMWROSIP.js → chunk-MUINFURL.js} +2 -2
  56. package/dist/{chunk-JTAYFSLO.js → chunk-PB3P4MKP.js} +1 -1
  57. package/dist/{chunk-JIIIBTN2.js → chunk-PE2I3AFA.js} +1 -1
  58. package/dist/{chunk-OENM2JVZ.js → chunk-PFJFHNU3.js} +3 -3
  59. package/dist/{chunk-EH4VUY27.js → chunk-PPKFM5WE.js} +2 -2
  60. package/dist/{chunk-DW32KBHN.js → chunk-PUBKHEEA.js} +13 -13
  61. package/dist/{chunk-DUQJF7FK.js → chunk-QBK7WKHT.js} +8 -8
  62. package/dist/{chunk-U3HX7WE6.js → chunk-QG3PDRSO.js} +1 -1
  63. package/dist/{chunk-EJ7OWYF2.js → chunk-QP3BRKGF.js} +1 -163
  64. package/dist/chunk-QZ3AZTXI.js +1740 -0
  65. package/dist/{chunk-YOL4QRSL.js → chunk-SLEPCESN.js} +2 -2
  66. package/dist/chunk-T76PLPD6.js +57 -0
  67. package/dist/{chunk-QXOFUKBF.js → chunk-TPECLKPA.js} +168 -165
  68. package/dist/{chunk-R7LWDIKB.js → chunk-TYT2TLJR.js} +1 -1
  69. package/dist/{chunk-Q73ISOVQ.js → chunk-U7E736AJ.js} +1 -1
  70. package/dist/chunk-USDEMXXL.js +110 -0
  71. package/dist/{chunk-VTVS4IIP.js → chunk-VVJFZU6B.js} +2 -2
  72. package/dist/{chunk-JX7Y57YY.js → chunk-WKTHUC2R.js} +1 -1
  73. package/dist/{chunk-NTIOLSFE.js → chunk-WQBA3MH4.js} +3 -3
  74. package/dist/{chunk-STA43FMY.js → chunk-WY5OODN5.js} +71 -3855
  75. package/dist/{chunk-X3TMMIDP.js → chunk-X3X3VETN.js} +8 -8
  76. package/dist/{chunk-ZTZ7NCJT.js → chunk-XTFJOR3K.js} +1 -1
  77. package/dist/chunk-YA62XGXS.js +45 -0
  78. package/dist/{clean-P4KTCOUA.js → clean-Y3AQITOX.js} +29 -20
  79. package/dist/cli.js +55 -55
  80. package/dist/{cloud-PDY7S4HU.js → cloud-TDPOMBZF.js} +7 -7
  81. package/dist/{cloudrun-54MA2W5H.js → cloudrun-FPAVAVHP.js} +11 -8
  82. package/dist/commands/layout-audit.browser.js +37 -8
  83. package/dist/commands/motion-signature.browser.js +51 -2
  84. package/dist/{compare-LDWVSPC5.js → compare-LHL225ND.js} +40 -31
  85. package/dist/{compiler-CWSZ4W7J.js → compiler-RTU3KTLF.js} +7 -3
  86. package/dist/{component-FIEGC22U.js → component-L2YX7J56.js} +4 -4
  87. package/dist/{compositions-JR7PX356.js → compositions-V2UZKG7S.js} +23 -16
  88. package/dist/{delete-FXA2IHOS.js → delete-OXZEXUQY.js} +8 -8
  89. package/dist/{dist-4JZWRWS6.js → dist-N33CM63P.js} +21 -15
  90. package/dist/{dist-OJTEVNJR.js → dist-NZSQCYOF.js} +3 -1
  91. package/dist/{doctor-OTDHPM6K.js → doctor-MWTPSIVD.js} +20 -13
  92. package/dist/{events-UAFTI24U.js → events-4TZGQZWF.js} +6 -22
  93. package/dist/{events-6T7M2VCO.js → events-7VJJGC3D.js} +10 -23
  94. package/dist/{feedback-ZGZODHB6.js → feedback-HSGAPVN7.js} +67 -45
  95. package/dist/{figma-D26EJ7ZB.js → figma-AMC6FAK3.js} +6 -6
  96. package/dist/fontLocalizeCli.js +17 -10
  97. package/dist/{get-IAREU7IK.js → get-Y7DFEFYM.js} +8 -8
  98. package/dist/{gpuPolicy-NS7WZRDJ.js → gpuPolicy-A45VSUKR.js} +15 -8
  99. package/dist/{grade-compare-ZXHFHCD2.js → grade-compare-ERSA3OUI.js} +40 -31
  100. package/dist/{help-RVNYHW3N.js → help-TW2AADLZ.js} +4 -4
  101. package/dist/{history-THP4VNMF.js → history-DKGDSVWF.js} +12 -30
  102. package/dist/hyperframe-runtime.js +59 -59
  103. package/dist/hyperframe.manifest.json +1 -1
  104. package/dist/hyperframe.runtime.iife.js +59 -59
  105. package/dist/hyperframes-player.global.js +3 -3
  106. package/dist/{info-EOFRHN5A.js → info-I3NRRNX4.js} +17 -20
  107. package/dist/{init-YLIJE4CG.js → init-5Y3ZWZNF.js} +48 -41
  108. package/dist/{inspect-3D56ONJD.js → inspect-BJQKBB3X.js} +39 -30
  109. package/dist/{installer-GRR2GDZK.js → installer-27K4JS2I.js} +8 -5
  110. package/dist/{keyframes-NXNCTQPK.js → keyframes-6V2NZO22.js} +14 -25
  111. package/dist/{lambda-VGRZD7TR.js → lambda-AIMF3K4A.js} +16 -13
  112. package/dist/{layout-Z5DOS6DU.js → layout-YAPEBTU4.js} +39 -30
  113. package/dist/{lint-YD6NJGR2.js → lint-3LWWUIV7.js} +17 -23
  114. package/dist/{lintProject-ANMPLBIT.js → lintProject-LM3XZRPZ.js} +3 -1
  115. package/dist/{list-XGDKILYN.js → list-NTSGEZJ6.js} +8 -8
  116. package/dist/{login-GD5SA4RD.js → login-ZTDFGCCW.js} +9 -9
  117. package/dist/{logout-Q654A3SI.js → logout-GJXZQKOA.js} +5 -5
  118. package/dist/{media-treatment-TY4X4GQQ.js → media-treatment-ARHX446F.js} +21 -20
  119. package/dist/{models-MXRDH4WJ.js → models-VHNQVTHG.js} +19 -12
  120. package/dist/{motionShot-6LKR3C2E.js → motionShot-35HCSNCI.js} +22 -15
  121. package/dist/{normalize-O76AC4HE.js → normalize-IGLHCWTF.js} +0 -4
  122. package/dist/{normalize-audio-5ADDZKPJ.js → normalize-audio-AUC73JH3.js} +13 -26
  123. package/dist/{open-JXAMO325.js → open-C5LVNU3U.js} +11 -25
  124. package/dist/{pipeline-Q5MOPIIX.js → pipeline-4GDTK54T.js} +15 -8
  125. package/dist/{play-3SPH5GWZ.js → play-U7UANF7Z.js} +38 -32
  126. package/dist/{preflight-2PWAPKWC.js → preflight-Y5DN5D37.js} +3 -18
  127. package/dist/{present-ZTJQDKXZ.js → present-X6V6TX3E.js} +32 -26
  128. package/dist/{preview-4A3XZR6J.js → preview-K43RTRU2.js} +33 -26
  129. package/dist/{producer-5ZKKKQPB.js → producer-PVMFMW23.js} +1 -1
  130. package/dist/{projectConfig-WA4CS4SN.js → projectConfig-PI6MEN2T.js} +10 -7
  131. package/dist/{publication-CLG2FRRI.js → publication-67C7KVTL.js} +6 -3
  132. package/dist/{publish-YTT2WMXO.js → publish-RBV7EAMH.js} +27 -20
  133. package/dist/{refresh-K24ETHMA.js → refresh-MFITBIKV.js} +5 -5
  134. package/dist/{remove-background-W35INR3B.js → remove-background-Z2ECZX2Q.js} +22 -15
  135. package/dist/{render-7A4P5WMU.js → render-2GQMQBU3.js} +10 -7
  136. package/dist/{render-KICXUPNR.js → render-EFU4BZRZ.js} +23 -26
  137. package/dist/{render-WUBFQMAH.js → render-YBS3XGRJ.js} +52 -32
  138. package/dist/{render-batch-N7EFGE6S.js → render-batch-QC64OTB5.js} +11 -8
  139. package/dist/{renderCancellation-LYQPPFAO.js → renderCancellation-NTVU7IMB.js} +15 -8
  140. package/dist/renderSetupWorker.js +4 -2
  141. package/dist/{resolver-YTT2NENF.js → resolver-GBWYG3EI.js} +8 -5
  142. package/dist/{sherpa-353MW4UV.js → sherpa-ZW6PWJS4.js} +16 -9
  143. package/dist/skills/hyperframes/references/capability-menu.md +1 -1
  144. package/dist/skills/hyperframes-cli/SKILL.md +5 -0
  145. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
  146. package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
  147. package/dist/skills/media-use/SKILL.md +6 -4
  148. package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +28 -0
  149. package/dist/skills/media-use/audio/scripts/lib/host-audio.test.mjs +106 -0
  150. package/dist/skills/media-use/references/setup-providers.md +3 -2
  151. package/dist/skills/media-use/scripts/lib/heygen-cli.mjs +21 -1
  152. package/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +14 -0
  153. package/dist/skills/media-use/scripts/resolve.mjs +11 -6
  154. package/dist/{skills-2XJIOEBT.js → skills-VKZAX5AS.js} +15 -30
  155. package/dist/{skillsUpdateCheck-LMCCWGNO.js → skillsUpdateCheck-PAY2OPDE.js} +3 -3
  156. package/dist/{snapshot-WBRSTLJ2.js → snapshot-SD5R3NWX.js} +41 -32
  157. package/dist/{src-YWFJILQF.js → src-7SSERHNP.js} +19 -11
  158. package/dist/{src-ZS3BLTZ5.js → src-RXTXL3VL.js} +16 -9
  159. package/dist/{staticProjectServer-4VKVHPNG.js → staticProjectServer-XELJXX4J.js} +24 -16
  160. package/dist/{status-73MBN37B.js → status-JA6SKQVH.js} +7 -24
  161. package/dist/studio/assets/{hyperframes-player-CckOoCJ8.js → hyperframes-player-BLuyxnK7.js} +1 -1
  162. package/dist/studio/assets/{index-DsEkE5_G.js → index-CWfuDCoA.js} +1 -1
  163. package/dist/studio/assets/{index-BmIPrb8I.js → index-Dr3Bo9uH.js} +1 -1
  164. package/dist/studio/assets/{index-Br1Whc0f.js → index-VAHDM_zL.js} +204 -204
  165. package/dist/studio/{chunk-E422JDF5.js → chunk-H2DUOXTF.js} +2 -1
  166. package/dist/studio/index.d.ts +19 -3
  167. package/dist/studio/index.html +1 -1
  168. package/dist/studio/index.js +6498 -5813
  169. package/dist/studio/index.js.map +1 -1
  170. package/dist/studio/player.js +1 -1
  171. package/dist/{studio-api-5V4TVSQV.js → studio-api-4FNUZPJ4.js} +40 -28
  172. package/dist/{studioServer-M5XY3HYC.js → studioServer-GHLL3F2M.js} +99 -68
  173. package/dist/{system-RCRNX5VF.js → system-OQLOGGPJ.js} +2 -19
  174. package/dist/{telemetry-LOBRQGUD.js → telemetry-7AO77PMH.js} +8 -23
  175. package/dist/{timeline-3JCP6PXU.js → timeline-6LTHSRXM.js} +32 -22
  176. package/dist/{tokens-MLMIJBVF.js → tokens-K6B46KNL.js} +3 -3
  177. package/dist/{transcribe-KNFXDEAX.js → transcribe-CLLISRLZ.js} +16 -9
  178. package/dist/{transcribe-POH25ZPX.js → transcribe-K2OU6FZF.js} +20 -44
  179. package/dist/{updateCheck-5ITBSBST.js → updateCheck-X6UQBS6I.js} +2 -2
  180. package/dist/{upgrade-K6OK4FKT.js → upgrade-BZFKEADI.js} +5 -5
  181. package/dist/{urlDownloader-TJJQKADT.js → urlDownloader-VAVUXYEQ.js} +14 -7
  182. package/dist/{validate-PPPOBJHB.js → validate-VO5KEXWN.js} +26 -19
  183. package/dist/{video-OB22HWXZ.js → video-JV6Y4UJR.js} +18 -11
  184. package/package.json +1 -1
  185. package/dist/chunk-HYYSJI5D.js +0 -3742
  186. package/dist/{chunk-I465DBM6.js → chunk-246MOR5U.js} +3 -3
  187. package/dist/{deploy-MX76RZ36.js → deploy-5G4Z6LPA.js} +1 -1
  188. package/dist/{destroy-H2TZBYHH.js → destroy-GFQLTIY3.js} +1 -1
  189. package/dist/{docs-QAPJEGLS.js → docs-MPOM3PHH.js} +3 -3
  190. package/dist/{policies-FSDZVS2E.js → policies-4FEXMXPK.js} +3 -3
  191. package/dist/{progress-FBIEEB7Y.js → progress-5AM2MZ7V.js} +3 -3
  192. package/dist/{sites-TNVKZS73.js → sites-HZMADOA3.js} +1 -1
  193. package/dist/studio/{chunk-E422JDF5.js.map → chunk-H2DUOXTF.js.map} +0 -0
  194. package/dist/{telemetry-2YC4SGQU.js → telemetry-W5AKPI4R.js} +3 -3
  195. package/dist/{tts-FU35O6YB.js → tts-TOHSPWEG.js} +4 -4
@@ -17,7 +17,7 @@ import {
17
17
  parseStrictFiniteTimingNumber,
18
18
  resolveNaturalMediaTimelineDuration,
19
19
  resolveTimedImageDurationSeconds
20
- } from "./chunk-HYYSJI5D.js";
20
+ } from "./chunk-B3I3XJ47.js";
21
21
  import {
22
22
  COMPOSITION_ATTRIBUTES,
23
23
  parseStartExpression
@@ -1305,52 +1305,6 @@ function copyMediaVisualStyles(targetStyle, sourceStyle, properties = MEDIA_VISU
1305
1305
  }
1306
1306
  }
1307
1307
 
1308
- // ../core/dist/telemetryRedaction.js
1309
- var MAX_TELEMETRY_STRING_LENGTH = 240;
1310
- function truncateTelemetryString(value, maxLength) {
1311
- if (value.length <= maxLength)
1312
- return value;
1313
- return `${value.slice(0, maxLength - 1)}\u2026`;
1314
- }
1315
- function redactUrlQueryStrings(value) {
1316
- return value.replace(/\b(https?:\/\/[^\s?]+)\?[^\s]*/g, "$1?\u2026");
1317
- }
1318
- var SEGMENT = String.raw`[^\s/\\'"]+`;
1319
- var SEGMENT_NODOT = String.raw`[^\s/\\'".]+`;
1320
- var TOKEN_TAIL = String.raw`[^\s'")]*`;
1321
- var ABSOLUTE_PATH = new RegExp(String.raw`(?<![:\w/\\])(?:[A-Za-z]:)?(?:[\\/]${SEGMENT}){2,}${TOKEN_TAIL}`, "g");
1322
- var RELATIVE_PATH = new RegExp(String.raw`(?<![\w/\\.])\.{1,2}(?:[\\/]${SEGMENT})+${TOKEN_TAIL}`, "g");
1323
- var ASSET_BASENAME = /(?<![\w/\\])[^\s/\\'"]+\.(?:mp4|mov|mkv|webm|avi|m4v|mpe?g|ts|mp3|wav|aac|m4a|flac|ogg|opus|png|jpe?g|gif|webp|svg|html?|json|srt|vtt|ass)\b/gi;
1324
- var BARE_RELATIVE_PATH = new RegExp([
1325
- // Two or more separators: `customer/acme/video.mp4`. No extension needed —
1326
- // that much structure is already a path.
1327
- String.raw`(?<![^\s'\"(=,\[])(?:${SEGMENT}[\\/]){2,}${SEGMENT}${TOKEN_TAIL}`,
1328
- // One separator, but the last segment carries a file extension:
1329
- // `assets/bgm.mp3`. That segment is dot-free on purpose — SEGMENT includes
1330
- // `.`, so a greedy one swallows the extension this rule needs.
1331
- String.raw`(?<![^\s'\"(=,\[])${SEGMENT}[\\/]${SEGMENT_NODOT}\.\w{1,8}\b${TOKEN_TAIL}`
1332
- ].join("|"), "g");
1333
- function redactKnownPaths(value, paths) {
1334
- if (typeof value !== "string")
1335
- return "";
1336
- let out = value;
1337
- for (const path of paths) {
1338
- if (typeof path !== "string" || path.length === 0)
1339
- continue;
1340
- const basename = path.split(/[\\/]/).pop() ?? "";
1341
- for (const literal of [path, basename].filter((v) => v.length > 2)) {
1342
- out = out.split(literal).join("[path]");
1343
- }
1344
- }
1345
- return out;
1346
- }
1347
- function redactFilePaths(value) {
1348
- return value.replace(/file:\/\/[^\s'")]+/g, "[file-url]").replace(RELATIVE_PATH, "[path]").replace(BARE_RELATIVE_PATH, "[path]").replace(ABSOLUTE_PATH, "[path]").replace(ASSET_BASENAME, "[file]");
1349
- }
1350
- function redactTelemetryString(value, maxLength = MAX_TELEMETRY_STRING_LENGTH) {
1351
- return truncateTelemetryString(redactFilePaths(redactUrlQueryStrings(value)), maxLength);
1352
- }
1353
-
1354
1308
  // ../core/dist/projectRule.js
1355
1309
  var PROJECT_MARKER_FILES = ["hyperframes.json", "meta.json", "project.json"];
1356
1310
  function isHyperframesProject(fileNames) {
@@ -4761,112 +4715,6 @@ function isComponentItem(item) {
4761
4715
  return item.type === "hyperframes:component";
4762
4716
  }
4763
4717
 
4764
- // ../core/dist/canary.js
4765
- function fnv1a32(input) {
4766
- let hash = 2166136261;
4767
- for (let i = 0; i < input.length; i++) {
4768
- hash ^= input.charCodeAt(i);
4769
- hash = hash + ((hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24)) >>> 0;
4770
- }
4771
- return hash >>> 0;
4772
- }
4773
- function canaryBucket(feature, unitId) {
4774
- return fnv1a32(`${feature}:${unitId}`) % 100;
4775
- }
4776
- function evaluateCanary(input) {
4777
- if (input.override === true)
4778
- return { enabled: true, reason: "forced_on" };
4779
- if (input.override === false)
4780
- return { enabled: false, reason: "forced_off" };
4781
- const pct = Math.max(0, Math.min(100, Math.trunc(input.percentage)));
4782
- if (pct <= 0)
4783
- return { enabled: false, reason: "out_of_cohort" };
4784
- if (pct >= 100)
4785
- return { enabled: true, reason: "in_cohort" };
4786
- if (input.exclude)
4787
- return { enabled: false, reason: "excluded" };
4788
- const unitId = input.unitId?.trim();
4789
- if (!unitId)
4790
- return { enabled: false, reason: "no_unit_id" };
4791
- const bucket = canaryBucket(input.feature, unitId);
4792
- return bucket < pct ? { enabled: true, reason: "in_cohort", bucket } : { enabled: false, reason: "out_of_cohort", bucket };
4793
- }
4794
- function parseCanaryOverride(raw) {
4795
- const v = raw?.trim().toLowerCase();
4796
- if (v === void 0 || v === "")
4797
- return void 0;
4798
- if (v === "1" || v === "true" || v === "on" || v === "yes")
4799
- return true;
4800
- if (v === "0" || v === "false" || v === "off" || v === "no")
4801
- return false;
4802
- return void 0;
4803
- }
4804
- var CANARY_FEATURE_PREFIX = "$feature/canary-";
4805
- function canaryFeatureKey(name) {
4806
- return `${CANARY_FEATURE_PREFIX}${name}`;
4807
- }
4808
- function canaryReasonKey(name) {
4809
- return `canary_reason_${name.replace(/[^A-Za-z0-9]+/g, "_")}`;
4810
- }
4811
- function canaryFeatureProperties(entries) {
4812
- const props = {};
4813
- for (const entry of entries) {
4814
- props[canaryFeatureKey(entry.name)] = entry.enabled ? "true" : "false";
4815
- if (entry.reason !== void 0)
4816
- props[canaryReasonKey(entry.name)] = entry.reason;
4817
- }
4818
- return props;
4819
- }
4820
-
4821
- // ../core/dist/canaryRegistry.js
4822
- var CANARIES = [
4823
- // ── Calibration ──────────────────────────────────────────────────────────
4824
- // Two INERT canaries that gate nothing. They exist to validate the rollout
4825
- // mechanism against real traffic before anything real depends on it, and
4826
- // they answer questions the synthetic tests cannot:
4827
- //
4828
- // 1. Does a requested percentage land on target in the wild? The unit
4829
- // tests use generated UUIDs and weight every install equally; real
4830
- // render volume is heavily skewed toward a few heavy installs, so the
4831
- // render-weighted share could differ from the install-weighted one.
4832
- // 2. How fast does CUMULATIVE exposure drift above the target? Install
4833
- // ids churn (measured: 24.7x more distinct ids over 30 days than in
4834
- // any single day), so the set of installs enrolled AT SOME POINT grows
4835
- // even though the instantaneous share stays flat. That drift is the
4836
- // real limit on a canary's blast-radius guarantee.
4837
- // 3. Are two canaries actually independent on real ids, not just on
4838
- // generated ones? Overlap should be ~p1*p2, not ~min(p1,p2).
4839
- //
4840
- // Two different percentages so the answer is a line, not a point.
4841
- // Delete both once the calibration window is read.
4842
- {
4843
- name: "calibration-10",
4844
- percentage: 10,
4845
- description: "Inert. Validates rollout accuracy and cumulative-exposure drift at 10%.",
4846
- owner: "vance",
4847
- sunsetAfter: "2026-09-15"
4848
- },
4849
- {
4850
- name: "calibration-50",
4851
- percentage: 50,
4852
- description: "Inert. Second calibration point, and an independence check against calibration-10.",
4853
- owner: "vance",
4854
- sunsetAfter: "2026-09-15"
4855
- }
4856
- ];
4857
- function findCanary(name) {
4858
- return CANARIES.find((c) => c.name === name);
4859
- }
4860
- function canaryEnvVar(name) {
4861
- return `HF_CANARY_${name.toUpperCase().replace(/[^A-Z0-9]+/g, "_")}`;
4862
- }
4863
- function overdueCanaries(now = /* @__PURE__ */ new Date()) {
4864
- return CANARIES.filter((c) => {
4865
- const sunsetEnd = Date.parse(`${c.sunsetAfter}T23:59:59.999Z`);
4866
- return Number.isFinite(sunsetEnd) && now.getTime() > sunsetEnd;
4867
- }).map((c) => c.name);
4868
- }
4869
-
4870
4718
  // ../core/dist/vfx/fractalNoise.frag.js
4871
4719
  var HASH_CONSTANTS = {
4872
4720
  /** Odd 32-bit multipliers, one per lattice axis plus one for the seed. */
@@ -5701,8 +5549,6 @@ export {
5701
5549
  quantizeSeekTime,
5702
5550
  exportClipWindow,
5703
5551
  copyMediaVisualStyles,
5704
- redactKnownPaths,
5705
- redactTelemetryString,
5706
5552
  PROJECT_MARKER_FILES,
5707
5553
  isHyperframesProject,
5708
5554
  createGSAPFrameAdapter,
@@ -5728,14 +5574,6 @@ export {
5728
5574
  isExampleItem,
5729
5575
  isBlockItem,
5730
5576
  isComponentItem,
5731
- canaryBucket,
5732
- evaluateCanary,
5733
- parseCanaryOverride,
5734
- canaryFeatureProperties,
5735
- CANARIES,
5736
- findCanary,
5737
- canaryEnvVar,
5738
- overdueCanaries,
5739
5577
  HF_VFX_ATTR,
5740
5578
  HF_VFX_CHAIN_VERSION,
5741
5579
  HF_VFX,