@vfrey/vfrey 0.0.1 → 1.0.0-beta.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 (603) hide show
  1. package/LICENSE +33 -0
  2. package/README.md +78 -3
  3. package/accounts.example.json +61 -0
  4. package/accounts.first-run.json +41 -0
  5. package/bin/vfrey.mjs +36 -0
  6. package/integration-tools/README.md +43 -0
  7. package/integration-tools/image/pillow.md +32 -0
  8. package/integration-tools/image/playwright.md +33 -0
  9. package/integration-tools/image/resvg.md +36 -0
  10. package/integration-tools/image/satori.md +36 -0
  11. package/integration-tools/image/sharp.md +38 -0
  12. package/integration-tools/video/blender.md +34 -0
  13. package/integration-tools/video/ffmpeg.md +41 -0
  14. package/integration-tools/video/manim.md +37 -0
  15. package/integration-tools/video/motion-canvas.md +37 -0
  16. package/integration-tools/video/remotion.md +50 -0
  17. package/integration-tools/video/revideo.md +32 -0
  18. package/package.json +74 -6
  19. package/skills/vfrey-orchestrator/SKILL.md +15 -0
  20. package/skills/vfrey-orchestrator/channel-video/SKILL.md +41 -0
  21. package/skills/vfrey-product/SKILL.md +63 -0
  22. package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/cook-one.svg +14 -0
  23. package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/cook-two.svg +22 -0
  24. package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/index.html +70 -0
  25. package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/cook-one.svg +14 -0
  26. package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/cook-two.svg +22 -0
  27. package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/index.tsx +49 -0
  28. package/skills/vfrey-product/examples/concurrency-vs-parallelism/script.json +15 -0
  29. package/skills/vfrey-product/examples/octopus-facts/index.html +60 -0
  30. package/skills/vfrey-product/examples/octopus-facts/octopus.svg +8 -0
  31. package/skills/vfrey-product/examples/octopus-facts/script.json +14 -0
  32. package/skills/vfrey-product/push/SKILL.md +15 -0
  33. package/skills/vfrey-product/scenes/NOTICE +5 -0
  34. package/skills/vfrey-product/scenes/blocks.md +57 -0
  35. package/skills/vfrey-product/scenes/craft.md +118 -0
  36. package/skills/vfrey-product/scenes/motion.md +88 -0
  37. package/src/analytics/dashboard.ts +109 -0
  38. package/src/analytics/index.ts +260 -0
  39. package/src/api/client.ts +282 -0
  40. package/src/api/commands.ts +330 -0
  41. package/src/api/config.ts +34 -0
  42. package/src/api/creators.ts +463 -0
  43. package/src/api/credentials.ts +152 -0
  44. package/src/api/mail.ts +333 -0
  45. package/src/api/topics.ts +207 -0
  46. package/src/api/types.ts +205 -0
  47. package/src/cli.ts +467 -0
  48. package/src/cloud/executor.ts +281 -0
  49. package/src/cloud/job.ts +106 -0
  50. package/src/cloud/render-job.ts +187 -0
  51. package/src/config.ts +309 -0
  52. package/src/dashboard-link.ts +180 -0
  53. package/src/dashboard-start.ts +103 -0
  54. package/src/desk/channel.ts +64 -0
  55. package/src/desk/cli.ts +216 -0
  56. package/src/desk/creators-route.ts +129 -0
  57. package/src/desk/fonts/JetBrainsMono-OFL.txt +93 -0
  58. package/src/desk/fonts/google-sans-flex-latin.woff2 +0 -0
  59. package/src/desk/fonts/jetbrains-mono-medium.woff2 +0 -0
  60. package/src/desk/http.ts +460 -0
  61. package/src/desk/mail-route.ts +103 -0
  62. package/src/desk/overlay.ts +112 -0
  63. package/src/desk/preview.ts +422 -0
  64. package/src/desk/screens.ts +149 -0
  65. package/src/desk/secrets.ts +143 -0
  66. package/src/desk/series.ts +127 -0
  67. package/src/desk/state.ts +77 -0
  68. package/src/desk/studio-route.ts +119 -0
  69. package/src/desk/tick-runner.ts +66 -0
  70. package/src/desk/tick.ts +56 -0
  71. package/src/desk/topics-route.ts +41 -0
  72. package/src/desk/ui/app.css +505 -0
  73. package/src/desk/ui/app.js +185 -0
  74. package/src/desk/ui/apple-icon.png +0 -0
  75. package/src/desk/ui/components.js +79 -0
  76. package/src/desk/ui/core.js +156 -0
  77. package/src/desk/ui/favicon.ico +0 -0
  78. package/src/desk/ui/icon.svg +1 -0
  79. package/src/desk/ui/icons.js +49 -0
  80. package/src/desk/ui/index.html +41 -0
  81. package/src/desk/ui/metrics-math.d.ts +22 -0
  82. package/src/desk/ui/metrics-math.js +135 -0
  83. package/src/desk/ui/theme.js +5 -0
  84. package/src/desk/ui/views-creators.js +209 -0
  85. package/src/desk/ui/views-keys.js +114 -0
  86. package/src/desk/ui/views-mail.js +188 -0
  87. package/src/desk/ui/views-misc.js +123 -0
  88. package/src/desk/ui/views-review.js +119 -0
  89. package/src/desk/ui/views-runs.js +350 -0
  90. package/src/desk/ui/views-screens.js +163 -0
  91. package/src/desk/ui/views-series.js +318 -0
  92. package/src/desk/ui/views-topics.js +87 -0
  93. package/src/desk/verbs.ts +361 -0
  94. package/src/doctor.ts +212 -0
  95. package/src/drain.ts +14 -0
  96. package/src/engage/index.ts +217 -0
  97. package/src/generate/index.ts +110 -0
  98. package/src/generate/script.ts +152 -0
  99. package/src/generate/title.ts +78 -0
  100. package/src/help.ts +233 -0
  101. package/src/home.ts +45 -0
  102. package/src/llm/client.ts +177 -0
  103. package/src/log.ts +7 -0
  104. package/src/oauth/tokens.ts +189 -0
  105. package/src/oauth/vault.ts +72 -0
  106. package/src/pipeline/review.ts +642 -0
  107. package/src/pipeline/run.ts +443 -0
  108. package/src/pipeline/series-guard.ts +26 -0
  109. package/src/pipeline/source-fetch.ts +69 -0
  110. package/src/pipeline/stages.ts +728 -0
  111. package/src/pipeline/topics-source.ts +90 -0
  112. package/src/product/commands.ts +296 -0
  113. package/src/product/config-file.ts +38 -0
  114. package/src/product/engine-choice.ts +89 -0
  115. package/src/product/engines.ts +103 -0
  116. package/src/product/insights.ts +50 -0
  117. package/src/product/keys.ts +67 -0
  118. package/src/product/paths.ts +18 -0
  119. package/src/product/probes.ts +88 -0
  120. package/src/product/push-flow.ts +90 -0
  121. package/src/product/render-video.ts +21 -0
  122. package/src/product/short.ts +62 -0
  123. package/src/product/update.ts +32 -0
  124. package/src/project/canonical.ts +14 -0
  125. package/src/project/commands.ts +177 -0
  126. package/src/project/dashboard-status.ts +28 -0
  127. package/src/project/discover.ts +19 -0
  128. package/src/project/index-file.ts +73 -0
  129. package/src/project/marker.ts +87 -0
  130. package/src/project/migrate.ts +201 -0
  131. package/src/project/names.ts +27 -0
  132. package/src/project/notice.ts +16 -0
  133. package/src/project/open.ts +88 -0
  134. package/src/project/scaffold.ts +112 -0
  135. package/src/project/templates.ts +42 -0
  136. package/src/project/videos.ts +64 -0
  137. package/src/publish/facebook.ts +91 -0
  138. package/src/publish/index.ts +12 -0
  139. package/src/publish/instagram.ts +97 -0
  140. package/src/publish/rate.ts +62 -0
  141. package/src/publish/session.ts +242 -0
  142. package/src/publish/tiktok.ts +202 -0
  143. package/src/publish/youtube.ts +177 -0
  144. package/src/queue/desk-ops.ts +1170 -0
  145. package/src/queue/seal.ts +3 -0
  146. package/src/queue/store.ts +1006 -0
  147. package/src/remotion/AiLabel.tsx +26 -0
  148. package/src/remotion/Root.tsx +73 -0
  149. package/src/remotion/defaults.ts +26 -0
  150. package/src/remotion/films/claude/ClaudeFilm.tsx +1014 -0
  151. package/src/remotion/films/engine/EngineMark.tsx +17 -0
  152. package/src/remotion/films/rea/ReaShort.tsx +552 -0
  153. package/src/remotion/films/rea/drawings.tsx +907 -0
  154. package/src/remotion/films/rea/timing.ts +144 -0
  155. package/src/remotion/index.ts +4 -0
  156. package/src/remotion/templates/EditorialSplit.tsx +39 -0
  157. package/src/remotion/templates/KineticType.tsx +39 -0
  158. package/src/remotion/templates/SignalBoard.tsx +50 -0
  159. package/src/remotion/timing.ts +22 -0
  160. package/src/render/chrome.ts +78 -0
  161. package/src/render/engine-mark.ts +29 -0
  162. package/src/render/framey-template.ts +130 -0
  163. package/src/render/html-engine.ts +149 -0
  164. package/src/render/node-crypto-stub.ts +11 -0
  165. package/src/render/probe.ts +29 -0
  166. package/src/render/props.ts +17 -0
  167. package/src/render/vertical-short.ts +35 -0
  168. package/src/render/webpack.ts +33 -0
  169. package/src/render/worker.ts +65 -0
  170. package/src/scene/assets/fonts/TitanOne-OFL.txt +94 -0
  171. package/src/scene/assets/fonts/titan-one.woff2 +0 -0
  172. package/src/scene/assets/gsap/LICENSE.txt +8 -0
  173. package/src/scene/assets/gsap/gsap.min.js +11 -0
  174. package/src/scene/audio.ts +54 -0
  175. package/src/scene/blocks/LICENSE +190 -0
  176. package/src/scene/blocks/NOTICE +5 -0
  177. package/src/scene/blocks/bar-chart-race/bar-chart-race.html +585 -0
  178. package/src/scene/blocks/beat-freeze-cut/beat-freeze-cut.html +874 -0
  179. package/src/scene/blocks/camcorder-hud/camcorder-hud.html +164 -0
  180. package/src/scene/blocks/camera-dolly-zoom/camera-dolly-zoom.html +355 -0
  181. package/src/scene/blocks/code-diff/code-diff.html +817 -0
  182. package/src/scene/blocks/code-snippet-apple-terminal-pro/code-snippet-apple-terminal-pro.html +248 -0
  183. package/src/scene/blocks/code-typing/code-typing.html +764 -0
  184. package/src/scene/blocks/data-chart/data-chart.html +452 -0
  185. package/src/scene/blocks/flowchart-vertical/flowchart-vertical.html +454 -0
  186. package/src/scene/blocks/hw-scribble-transition/hw-scribble-transition.html +153 -0
  187. package/src/scene/blocks/index.json +824 -0
  188. package/src/scene/blocks/lt-accent-underline/lt-accent-underline.html +107 -0
  189. package/src/scene/blocks/lt-bold-block/lt-bold-block.html +109 -0
  190. package/src/scene/blocks/lt-clean-bar/lt-clean-bar.html +112 -0
  191. package/src/scene/blocks/lt-dark-card/lt-dark-card.html +111 -0
  192. package/src/scene/blocks/lt-kicker-name/lt-kicker-name.html +114 -0
  193. package/src/scene/blocks/lt-mask-reveal/lt-mask-reveal.html +120 -0
  194. package/src/scene/blocks/lt-neon-border/lt-neon-border.html +391 -0
  195. package/src/scene/blocks/lt-stack-bars/lt-stack-bars.html +109 -0
  196. package/src/scene/blocks/macos-notification/macos-notification.html +194 -0
  197. package/src/scene/blocks/mk-background/mk-background.html +236 -0
  198. package/src/scene/blocks/mk-callout-highlight/mk-callout-highlight.html +183 -0
  199. package/src/scene/blocks/mk-clone-wall-transition/mk-clone-wall-transition.html +226 -0
  200. package/src/scene/blocks/mk-line-graph/mk-line-graph.html +293 -0
  201. package/src/scene/blocks/mk-progress-stat/mk-progress-stat.html +186 -0
  202. package/src/scene/blocks/mk-specs-list/mk-specs-list.html +223 -0
  203. package/src/scene/blocks/news-ticker/news-ticker.html +409 -0
  204. package/src/scene/blocks/organic-light-leak-overlay/organic-light-leak-overlay.html +126 -0
  205. package/src/scene/blocks/oscilloscope-trace/oscilloscope-trace.html +519 -0
  206. package/src/scene/blocks/snow/snow.html +205 -0
  207. package/src/scene/blocks/split-flap-board/split-flap-board.html +347 -0
  208. package/src/scene/blocks/spotify-card/spotify-card.html +294 -0
  209. package/src/scene/blocks/starfield/starfield.html +188 -0
  210. package/src/scene/blocks/thread-message-stack/thread-message-stack.html +239 -0
  211. package/src/scene/blocks/week-in-merges/week-in-merges.html +470 -0
  212. package/src/scene/blocks/x-post/x-post.html +437 -0
  213. package/src/scene/blocks/yt-comment-card/yt-comment-card.html +319 -0
  214. package/src/scene/blocks/yt-lcd-background/yt-lcd-background.html +307 -0
  215. package/src/scene/blocks/yt-prism-title/yt-prism-title.html +205 -0
  216. package/src/scene/blocks.ts +229 -0
  217. package/src/scene/command.ts +272 -0
  218. package/src/scene/figure.ts +181 -0
  219. package/src/scene/glyphs.ts +107 -0
  220. package/src/scene/init.ts +86 -0
  221. package/src/scene/inspect/css-tree.d.ts +6 -0
  222. package/src/scene/inspect/page-scripts.ts +272 -0
  223. package/src/scene/inspect/report.ts +405 -0
  224. package/src/scene/inspect/run.ts +200 -0
  225. package/src/scene/inspect/source.ts +236 -0
  226. package/src/scene/label.ts +131 -0
  227. package/src/scene/net-guard.ts +74 -0
  228. package/src/scene/render.ts +292 -0
  229. package/src/scene/runtime/browser.ts +199 -0
  230. package/src/scene/runtime/core.ts +181 -0
  231. package/src/scene/runtime/react.tsx +115 -0
  232. package/src/scene/runtime/transitions.ts +133 -0
  233. package/src/scene/sanitize.ts +181 -0
  234. package/src/scene/scene.ts +152 -0
  235. package/src/scene/studio-command.ts +48 -0
  236. package/src/scene/studio-skin.ts +59 -0
  237. package/src/scene/studio.ts +337 -0
  238. package/src/scene/supply.ts +111 -0
  239. package/src/scene/timing.ts +288 -0
  240. package/src/scene/transitions/LICENSE +190 -0
  241. package/src/scene/transitions/NOTICE +5 -0
  242. package/src/scene/transitions/SOURCE.json +24 -0
  243. package/src/scene/transitions/transitions.global.js +38 -0
  244. package/src/scene/transitions.ts +26 -0
  245. package/src/service/all-projects.ts +153 -0
  246. package/src/service/commands.ts +256 -0
  247. package/src/service/due.ts +82 -0
  248. package/src/service/lock.ts +101 -0
  249. package/src/service/log-file.ts +56 -0
  250. package/src/service/state.ts +41 -0
  251. package/src/service/units.ts +90 -0
  252. package/src/service/worker.ts +51 -0
  253. package/src/skill-agents.ts +74 -0
  254. package/src/skill-install.ts +334 -0
  255. package/src/sync-write.ts +21 -0
  256. package/src/tick-report.ts +205 -0
  257. package/src/tts.ts +124 -0
  258. package/vendor/@vfrey/contracts/dist/account.d.ts +97 -0
  259. package/vendor/@vfrey/contracts/dist/account.js +27 -0
  260. package/vendor/@vfrey/contracts/dist/checks.d.ts +8 -0
  261. package/vendor/@vfrey/contracts/dist/checks.js +1 -0
  262. package/vendor/@vfrey/contracts/dist/credentials/crypto.d.ts +4 -0
  263. package/vendor/@vfrey/contracts/dist/credentials/crypto.js +38 -0
  264. package/vendor/@vfrey/contracts/dist/domain/advice-persona.d.ts +10 -0
  265. package/vendor/@vfrey/contracts/dist/domain/advice-persona.js +24 -0
  266. package/vendor/@vfrey/contracts/dist/domain/backoff.d.ts +13 -0
  267. package/vendor/@vfrey/contracts/dist/domain/backoff.js +27 -0
  268. package/vendor/@vfrey/contracts/dist/domain/cadence.d.ts +29 -0
  269. package/vendor/@vfrey/contracts/dist/domain/cadence.js +95 -0
  270. package/vendor/@vfrey/contracts/dist/domain/creators.d.ts +146 -0
  271. package/vendor/@vfrey/contracts/dist/domain/creators.js +2 -0
  272. package/vendor/@vfrey/contracts/dist/domain/disclosure.d.ts +127 -0
  273. package/vendor/@vfrey/contracts/dist/domain/disclosure.js +250 -0
  274. package/vendor/@vfrey/contracts/dist/domain/errors.d.ts +34 -0
  275. package/vendor/@vfrey/contracts/dist/domain/errors.js +68 -0
  276. package/vendor/@vfrey/contracts/dist/domain/redact.d.ts +1 -0
  277. package/vendor/@vfrey/contracts/dist/domain/redact.js +21 -0
  278. package/vendor/@vfrey/contracts/dist/domain/revenue.d.ts +13 -0
  279. package/vendor/@vfrey/contracts/dist/domain/revenue.js +16 -0
  280. package/vendor/@vfrey/contracts/dist/domain/safety.d.ts +20 -0
  281. package/vendor/@vfrey/contracts/dist/domain/safety.js +61 -0
  282. package/vendor/@vfrey/contracts/dist/domain/similarity.d.ts +13 -0
  283. package/vendor/@vfrey/contracts/dist/domain/similarity.js +100 -0
  284. package/vendor/@vfrey/contracts/dist/domain/templates.d.ts +18 -0
  285. package/vendor/@vfrey/contracts/dist/domain/templates.js +67 -0
  286. package/vendor/@vfrey/contracts/dist/domain/tiktok-chunks.d.ts +19 -0
  287. package/vendor/@vfrey/contracts/dist/domain/tiktok-chunks.js +52 -0
  288. package/vendor/@vfrey/contracts/dist/domain/topics.d.ts +78 -0
  289. package/vendor/@vfrey/contracts/dist/domain/topics.js +4 -0
  290. package/vendor/@vfrey/contracts/dist/domain/types.d.ts +216 -0
  291. package/vendor/@vfrey/contracts/dist/domain/types.js +1 -0
  292. package/vendor/@vfrey/contracts/dist/domain/variation.d.ts +57 -0
  293. package/vendor/@vfrey/contracts/dist/domain/variation.js +278 -0
  294. package/vendor/@vfrey/contracts/dist/events.d.ts +20 -0
  295. package/vendor/@vfrey/contracts/dist/events.js +1 -0
  296. package/vendor/@vfrey/contracts/dist/http.d.ts +11 -0
  297. package/vendor/@vfrey/contracts/dist/http.js +37 -0
  298. package/vendor/@vfrey/contracts/dist/index.d.ts +22 -0
  299. package/vendor/@vfrey/contracts/dist/index.js +22 -0
  300. package/vendor/@vfrey/contracts/dist/log.d.ts +2 -0
  301. package/vendor/@vfrey/contracts/dist/log.js +10 -0
  302. package/vendor/@vfrey/contracts/dist/mail.d.ts +55 -0
  303. package/vendor/@vfrey/contracts/dist/mail.js +1 -0
  304. package/vendor/@vfrey/contracts/package.json +18 -0
  305. package/vendor/@vfrey/ingest/dist/index.d.ts +41 -0
  306. package/vendor/@vfrey/ingest/dist/index.js +221 -0
  307. package/vendor/@vfrey/ingest/dist/parse.d.ts +5 -0
  308. package/vendor/@vfrey/ingest/dist/parse.js +165 -0
  309. package/vendor/@vfrey/ingest/package.json +21 -0
  310. package/vendor/framey/LICENSE +190 -0
  311. package/vendor/framey/NOTICE +15 -0
  312. package/vendor/framey/SOURCE.json +24 -0
  313. package/vendor/framey/STUDIO-SOURCE.json +9 -0
  314. package/vendor/framey/bin/framey-localize-fonts.mjs +12 -0
  315. package/vendor/framey/bin/framey.mjs +16 -0
  316. package/vendor/framey/dist/add-VMJD5KBS.js +75 -0
  317. package/vendor/framey/dist/animatedGifPrep-QPKGJ6PM.js +43 -0
  318. package/vendor/framey/dist/api.d.ts +211 -0
  319. package/vendor/framey/dist/api.js +76 -0
  320. package/vendor/framey/dist/appHistory-WW56FZTT.js +31 -0
  321. package/vendor/framey/dist/asset-WQKGOELE.js +26 -0
  322. package/vendor/framey/dist/audio-RSJWVWRA.js +1936 -0
  323. package/vendor/framey/dist/batchRender-3HPICDCT.js +366 -0
  324. package/vendor/framey/dist/beats-HL2BDUZI.js +273 -0
  325. package/vendor/framey/dist/benchmark-RWCWHI5Z.js +230 -0
  326. package/vendor/framey/dist/browser-ECYET3Q2.js +206 -0
  327. package/vendor/framey/dist/bundleWithLocalizedFonts-ALYBQEQT.js +52 -0
  328. package/vendor/framey/dist/captureCompositionFrame-4DA6SEH2.js +94 -0
  329. package/vendor/framey/dist/catalog-5JVDEUWK.js +979 -0
  330. package/vendor/framey/dist/catch-up-NEBCL5NO.js +106 -0
  331. package/vendor/framey/dist/check-F5N544ML.js +111 -0
  332. package/vendor/framey/dist/checkBrowser-LZ66CMJG.js +110 -0
  333. package/vendor/framey/dist/chunk-2K7Z2HVP.js +372 -0
  334. package/vendor/framey/dist/chunk-2UZQHDM7.js +323 -0
  335. package/vendor/framey/dist/chunk-2X4PQEYM.js +34 -0
  336. package/vendor/framey/dist/chunk-3422KMTD.js +168 -0
  337. package/vendor/framey/dist/chunk-3FYD4YEK.js +72 -0
  338. package/vendor/framey/dist/chunk-3GXQPCJC.js +682 -0
  339. package/vendor/framey/dist/chunk-3LM6YPBR.js +179 -0
  340. package/vendor/framey/dist/chunk-442JNXRM.js +20 -0
  341. package/vendor/framey/dist/chunk-4BNN5FGX.js +182 -0
  342. package/vendor/framey/dist/chunk-4P7NX5BM.js +11532 -0
  343. package/vendor/framey/dist/chunk-4UMPIPCQ.js +88 -0
  344. package/vendor/framey/dist/chunk-4YYJOFKS.js +28 -0
  345. package/vendor/framey/dist/chunk-54HJ63Q2.js +29 -0
  346. package/vendor/framey/dist/chunk-5ETJX6WM.js +89 -0
  347. package/vendor/framey/dist/chunk-5SG54JRS.js +68 -0
  348. package/vendor/framey/dist/chunk-634HSJ3J.js +58 -0
  349. package/vendor/framey/dist/chunk-66LREXGS.js +48 -0
  350. package/vendor/framey/dist/chunk-6BEFEWFB.js +25 -0
  351. package/vendor/framey/dist/chunk-6BNTGNGD.js +286 -0
  352. package/vendor/framey/dist/chunk-6DDPOHMK.js +140 -0
  353. package/vendor/framey/dist/chunk-6GV5XSOR.js +214 -0
  354. package/vendor/framey/dist/chunk-6JR2XUEE.js +127 -0
  355. package/vendor/framey/dist/chunk-73QVATIM.js +362 -0
  356. package/vendor/framey/dist/chunk-7FMUTGOH.js +279 -0
  357. package/vendor/framey/dist/chunk-7JQFJ6JJ.js +291 -0
  358. package/vendor/framey/dist/chunk-AHPGAESX.js +113 -0
  359. package/vendor/framey/dist/chunk-AHX34EFP.js +15 -0
  360. package/vendor/framey/dist/chunk-AJ5CSAEZ.js +487 -0
  361. package/vendor/framey/dist/chunk-B7RJV74O.js +5047 -0
  362. package/vendor/framey/dist/chunk-BL4U6U52.js +254 -0
  363. package/vendor/framey/dist/chunk-BSQ7XANM.js +210 -0
  364. package/vendor/framey/dist/chunk-BZ56MTDX.js +6 -0
  365. package/vendor/framey/dist/chunk-C5BO7PMT.js +282 -0
  366. package/vendor/framey/dist/chunk-CFUCHO4T.js +358 -0
  367. package/vendor/framey/dist/chunk-CZGHFATT.js +31 -0
  368. package/vendor/framey/dist/chunk-DLA44CMS.js +5649 -0
  369. package/vendor/framey/dist/chunk-DPVXBVLL.js +31292 -0
  370. package/vendor/framey/dist/chunk-DQBY7FRR.js +397 -0
  371. package/vendor/framey/dist/chunk-EAMLBAHA.js +154 -0
  372. package/vendor/framey/dist/chunk-EOVYQ3IG.js +143 -0
  373. package/vendor/framey/dist/chunk-EVMY7IPL.js +612 -0
  374. package/vendor/framey/dist/chunk-FG4BBFZI.js +122 -0
  375. package/vendor/framey/dist/chunk-FI4I7CME.js +56 -0
  376. package/vendor/framey/dist/chunk-FLREUEHW.js +2081 -0
  377. package/vendor/framey/dist/chunk-FUFP7A7S.js +1126 -0
  378. package/vendor/framey/dist/chunk-FV3PIKGH.js +56 -0
  379. package/vendor/framey/dist/chunk-FXMKHHPO.js +123 -0
  380. package/vendor/framey/dist/chunk-GGZAM5VH.js +1187 -0
  381. package/vendor/framey/dist/chunk-GKZEVJIB.js +39 -0
  382. package/vendor/framey/dist/chunk-GMECXFAN.js +57 -0
  383. package/vendor/framey/dist/chunk-GNEFDLFB.js +621 -0
  384. package/vendor/framey/dist/chunk-GPMLSOEG.js +19274 -0
  385. package/vendor/framey/dist/chunk-GPYVT5EE.js +59 -0
  386. package/vendor/framey/dist/chunk-H6IEMZEV.js +40 -0
  387. package/vendor/framey/dist/chunk-HEFQCIXR.js +170 -0
  388. package/vendor/framey/dist/chunk-HFQ4CWHA.js +118 -0
  389. package/vendor/framey/dist/chunk-HPDTCOKE.js +304 -0
  390. package/vendor/framey/dist/chunk-HTUHQKDB.js +548 -0
  391. package/vendor/framey/dist/chunk-HU2SPFNG.js +103 -0
  392. package/vendor/framey/dist/chunk-HVW7ABXD.js +19 -0
  393. package/vendor/framey/dist/chunk-IG7NDKXO.js +26 -0
  394. package/vendor/framey/dist/chunk-II3J3WXK.js +246 -0
  395. package/vendor/framey/dist/chunk-IR35BCLK.js +13 -0
  396. package/vendor/framey/dist/chunk-ISN5GRYI.js +20 -0
  397. package/vendor/framey/dist/chunk-IUONB55J.js +669 -0
  398. package/vendor/framey/dist/chunk-IVSUQR2B.js +161 -0
  399. package/vendor/framey/dist/chunk-IXU6PQSW.js +259 -0
  400. package/vendor/framey/dist/chunk-IZCW2NKT.js +29 -0
  401. package/vendor/framey/dist/chunk-JGXJU5PF.js +68 -0
  402. package/vendor/framey/dist/chunk-JHOCK3DG.js +27 -0
  403. package/vendor/framey/dist/chunk-JVBRJMOP.js +121 -0
  404. package/vendor/framey/dist/chunk-K4MJX7SR.js +17 -0
  405. package/vendor/framey/dist/chunk-K4WKGXRC.js +18 -0
  406. package/vendor/framey/dist/chunk-KGPLIH7B.js +127 -0
  407. package/vendor/framey/dist/chunk-KLIKCX6Q.js +63 -0
  408. package/vendor/framey/dist/chunk-KXTKKBOC.js +61 -0
  409. package/vendor/framey/dist/chunk-KZI44OPA.js +185 -0
  410. package/vendor/framey/dist/chunk-LEKZNRKI.js +45 -0
  411. package/vendor/framey/dist/chunk-LFGJWOVA.js +61 -0
  412. package/vendor/framey/dist/chunk-LLMSX6V6.js +17 -0
  413. package/vendor/framey/dist/chunk-LTGTN2TH.js +195 -0
  414. package/vendor/framey/dist/chunk-M2WBOQ2Q.js +54 -0
  415. package/vendor/framey/dist/chunk-MI5FTLYK.js +399 -0
  416. package/vendor/framey/dist/chunk-MLQP2QUF.js +1809 -0
  417. package/vendor/framey/dist/chunk-MMQ52NIZ.js +956 -0
  418. package/vendor/framey/dist/chunk-ND46XKK3.js +742 -0
  419. package/vendor/framey/dist/chunk-NYEXNSHM.js +504 -0
  420. package/vendor/framey/dist/chunk-O4YRB27L.js +57 -0
  421. package/vendor/framey/dist/chunk-O7BGSQ5F.js +92 -0
  422. package/vendor/framey/dist/chunk-OFQWTKPW.js +117 -0
  423. package/vendor/framey/dist/chunk-P5ZBLXJ6.js +91 -0
  424. package/vendor/framey/dist/chunk-P6LJ4Y32.js +4662 -0
  425. package/vendor/framey/dist/chunk-PKZ7RK5N.js +281 -0
  426. package/vendor/framey/dist/chunk-PURHAXFL.js +15 -0
  427. package/vendor/framey/dist/chunk-Q5X2B5WT.js +29 -0
  428. package/vendor/framey/dist/chunk-QAMKOG67.js +248 -0
  429. package/vendor/framey/dist/chunk-R6YBK4XX.js +514 -0
  430. package/vendor/framey/dist/chunk-RGLQURIX.js +2997 -0
  431. package/vendor/framey/dist/chunk-RNV3DM4S.js +3573 -0
  432. package/vendor/framey/dist/chunk-ROEW726S.js +4638 -0
  433. package/vendor/framey/dist/chunk-RQVDTPGD.js +6 -0
  434. package/vendor/framey/dist/chunk-RVZHGOGR.js +26 -0
  435. package/vendor/framey/dist/chunk-RXATE6FZ.js +385 -0
  436. package/vendor/framey/dist/chunk-S3S4TGEH.js +424 -0
  437. package/vendor/framey/dist/chunk-SDYDNHEE.js +11202 -0
  438. package/vendor/framey/dist/chunk-SSWBU67I.js +173 -0
  439. package/vendor/framey/dist/chunk-ST35C4K6.js +28 -0
  440. package/vendor/framey/dist/chunk-SZNTYTIV.js +990 -0
  441. package/vendor/framey/dist/chunk-T2EUWCJE.js +29 -0
  442. package/vendor/framey/dist/chunk-T6AGUTZJ.js +444 -0
  443. package/vendor/framey/dist/chunk-THJALHFJ.js +11131 -0
  444. package/vendor/framey/dist/chunk-TIQB63MX.js +18128 -0
  445. package/vendor/framey/dist/chunk-U242RTCT.js +134 -0
  446. package/vendor/framey/dist/chunk-UJZREAV6.js +3901 -0
  447. package/vendor/framey/dist/chunk-UMD3V7CU.js +264 -0
  448. package/vendor/framey/dist/chunk-UOFAE5RF.js +42 -0
  449. package/vendor/framey/dist/chunk-UTEIUGAZ.js +29 -0
  450. package/vendor/framey/dist/chunk-VAS6HQX3.js +138 -0
  451. package/vendor/framey/dist/chunk-VC76R6W2.js +27 -0
  452. package/vendor/framey/dist/chunk-VFZ7W5W7.js +226 -0
  453. package/vendor/framey/dist/chunk-VHNLZAE2.js +348 -0
  454. package/vendor/framey/dist/chunk-VMC4WSH5.js +278 -0
  455. package/vendor/framey/dist/chunk-VORQIH64.js +108 -0
  456. package/vendor/framey/dist/chunk-VTXFRIHO.js +186 -0
  457. package/vendor/framey/dist/chunk-W2LGJSEN.js +182 -0
  458. package/vendor/framey/dist/chunk-WKBM7NDG.js +32 -0
  459. package/vendor/framey/dist/chunk-WMQNIQDJ.js +2057 -0
  460. package/vendor/framey/dist/chunk-WN4XZC5F.js +504 -0
  461. package/vendor/framey/dist/chunk-WQ6ZXHFQ.js +133 -0
  462. package/vendor/framey/dist/chunk-X7HBSTCZ.js +53 -0
  463. package/vendor/framey/dist/chunk-X7MTZ4T2.js +6 -0
  464. package/vendor/framey/dist/chunk-XPTOJZJF.js +308 -0
  465. package/vendor/framey/dist/chunk-XT6MXC7A.js +6 -0
  466. package/vendor/framey/dist/chunk-XT7X6QCP.js +6 -0
  467. package/vendor/framey/dist/chunk-XTMDWNEC.js +2820 -0
  468. package/vendor/framey/dist/chunk-XUHOIDKG.js +6 -0
  469. package/vendor/framey/dist/chunk-XX7LTW5Y.js +138 -0
  470. package/vendor/framey/dist/chunk-Y3YGTZEG.js +382 -0
  471. package/vendor/framey/dist/chunk-Y5SBSGN7.js +346 -0
  472. package/vendor/framey/dist/chunk-YCMVI4MZ.js +625 -0
  473. package/vendor/framey/dist/chunk-YOR4CTCE.js +261 -0
  474. package/vendor/framey/dist/chunk-YPRBGITP.js +2748 -0
  475. package/vendor/framey/dist/chunk-ZKDMAOFU.js +32 -0
  476. package/vendor/framey/dist/chunk-ZW6DURPF.js +1318 -0
  477. package/vendor/framey/dist/clean-ZJOGDKDM.js +336 -0
  478. package/vendor/framey/dist/cli.js +439 -0
  479. package/vendor/framey/dist/cloudrun-HGJ3B6ZV.js +767 -0
  480. package/vendor/framey/dist/commands/contrast-audit.browser.js +643 -0
  481. package/vendor/framey/dist/commands/layout-audit.browser.js +2914 -0
  482. package/vendor/framey/dist/commands/motion-sample.browser.js +74 -0
  483. package/vendor/framey/dist/commands/motion-signature.browser.js +475 -0
  484. package/vendor/framey/dist/compare-W7UY3BAZ.js +463 -0
  485. package/vendor/framey/dist/compiler-TM3W6GYF.js +136 -0
  486. package/vendor/framey/dist/component-QF5VGYMU.js +176 -0
  487. package/vendor/framey/dist/compositions-XT3PMNDF.js +238 -0
  488. package/vendor/framey/dist/contactSheet-7W6GYHBQ.js +24 -0
  489. package/vendor/framey/dist/deploy-6FJPWKF2.js +299 -0
  490. package/vendor/framey/dist/destroy-HE2RIPKZ.js +57 -0
  491. package/vendor/framey/dist/deterministicFonts-RADD3BSX.js +50 -0
  492. package/vendor/framey/dist/dist-4S2FGGVY.js +422 -0
  493. package/vendor/framey/dist/dist-BE4B2EZE.js +32 -0
  494. package/vendor/framey/dist/dist-EWXJGN63.js +129 -0
  495. package/vendor/framey/dist/docs-VKIRFEEX.js +131 -0
  496. package/vendor/framey/dist/doctor-2UNJ2G7U.js +74 -0
  497. package/vendor/framey/dist/dom-37K6YOH4.js +14 -0
  498. package/vendor/framey/dist/dotEnv-7PZQTVIM.js +54 -0
  499. package/vendor/framey/dist/events-ACY3P2PA.js +76 -0
  500. package/vendor/framey/dist/events-IHB3B2MK.js +69 -0
  501. package/vendor/framey/dist/ffmpeg-DR5LGGSK.js +63 -0
  502. package/vendor/framey/dist/figma-BODVUPHB.js +63 -0
  503. package/vendor/framey/dist/fontData.generated-NXAOI4GH.js +13 -0
  504. package/vendor/framey/dist/fontLocalizeCli.js +142 -0
  505. package/vendor/framey/dist/gpuPolicy-XLEXORZY.js +49 -0
  506. package/vendor/framey/dist/grade-compare-GAXFQ74C.js +661 -0
  507. package/vendor/framey/dist/gsapParser-IEUSLYDJ.js +2885 -0
  508. package/vendor/framey/dist/gsapParserAcorn-LZJKCFQI.js +30 -0
  509. package/vendor/framey/dist/help-VCB5X2HS.js +184 -0
  510. package/vendor/framey/dist/history-ENGZEVFT.js +471 -0
  511. package/vendor/framey/dist/hyperframe.manifest.json +22 -0
  512. package/vendor/framey/dist/hyperframe.runtime.iife.js +1132 -0
  513. package/vendor/framey/dist/hyperframes-player.global.js +478 -0
  514. package/vendor/framey/dist/hyperframes-slideshow.global.js +148 -0
  515. package/vendor/framey/dist/info-WPCJHBMU.js +182 -0
  516. package/vendor/framey/dist/init-G4WGLYGD.js +1176 -0
  517. package/vendor/framey/dist/inspect-5IQ6CNEQ.js +106 -0
  518. package/vendor/framey/dist/installer-ML4HWUV7.js +40 -0
  519. package/vendor/framey/dist/keyframes-Q6XJO7VW.js +2755 -0
  520. package/vendor/framey/dist/lambda-A7JC74JF.js +468 -0
  521. package/vendor/framey/dist/layout-YET6XNXA.js +95 -0
  522. package/vendor/framey/dist/lint-I7FZN2VJ.js +162 -0
  523. package/vendor/framey/dist/lintProject-PDB3UN72.js +30 -0
  524. package/vendor/framey/dist/manager-CD6LJ7ZN.js +45 -0
  525. package/vendor/framey/dist/manager-WA4F2GST.js +67 -0
  526. package/vendor/framey/dist/media-treatment-BXYS4WVA.js +1030 -0
  527. package/vendor/framey/dist/media-use-LWH3MANK.js +113 -0
  528. package/vendor/framey/dist/models-K363FYM4.js +195 -0
  529. package/vendor/framey/dist/motionShot-GPAVWXLH.js +640 -0
  530. package/vendor/framey/dist/normalize-FASIPBUM.js +24 -0
  531. package/vendor/framey/dist/normalize-audio-VDWYRHN6.js +268 -0
  532. package/vendor/framey/dist/open-E3TB6P6J.js +128 -0
  533. package/vendor/framey/dist/parakeetRunner-UP34UOI2.js +58 -0
  534. package/vendor/framey/dist/pipeline-VXIUYEBU.js +64 -0
  535. package/vendor/framey/dist/play-BUTDQ4DV.js +353 -0
  536. package/vendor/framey/dist/policies-OLDYGFK5.js +309 -0
  537. package/vendor/framey/dist/preflight-2KZ2GWAZ.js +55 -0
  538. package/vendor/framey/dist/present-GXYSM7NX.js +353 -0
  539. package/vendor/framey/dist/preview-EKZ33JOJ.js +1910 -0
  540. package/vendor/framey/dist/producer-SKU5EV3J.js +13 -0
  541. package/vendor/framey/dist/progress-ZWB4Z4ET.js +76 -0
  542. package/vendor/framey/dist/projectConfig-3MZAYVTS.js +60 -0
  543. package/vendor/framey/dist/publication-DTKWNF74.js +33 -0
  544. package/vendor/framey/dist/remove-background-OY5L7XN2.js +265 -0
  545. package/vendor/framey/dist/render-CDV4GDFX.js +187 -0
  546. package/vendor/framey/dist/render-YE5YAMOD.js +2620 -0
  547. package/vendor/framey/dist/render-batch-ZAMFPCLL.js +274 -0
  548. package/vendor/framey/dist/renderSetupWorker.js +120 -0
  549. package/vendor/framey/dist/resolver-D5BIPSEW.js +42 -0
  550. package/vendor/framey/dist/runtimeVersion.js +18 -0
  551. package/vendor/framey/dist/sam-WFZXI4F7.js +23 -0
  552. package/vendor/framey/dist/shaderTransitionWorker.js +44 -0
  553. package/vendor/framey/dist/sherpa-RQWLV7I3.js +79 -0
  554. package/vendor/framey/dist/sherpaWorker.js +84 -0
  555. package/vendor/framey/dist/sites-AMOVABTK.js +54 -0
  556. package/vendor/framey/dist/skill-ZHVLH7KX.js +15 -0
  557. package/vendor/framey/dist/slideshow-SJGK4RQS.js +24 -0
  558. package/vendor/framey/dist/snapshot-TUXL6LBQ.js +1515 -0
  559. package/vendor/framey/dist/src-JHQGB2S6.js +215 -0
  560. package/vendor/framey/dist/src-Z5PGEMXB.js +532 -0
  561. package/vendor/framey/dist/state-B6H3WHCF.js +28 -0
  562. package/vendor/framey/dist/staticProjectServer-DFVZOUGI.js +63 -0
  563. package/vendor/framey/dist/studio/assets/hyperframes-player-DLaKjw0L.js +478 -0
  564. package/vendor/framey/dist/studio/assets/index-BX3KHhGX.js +71 -0
  565. package/vendor/framey/dist/studio/assets/index-CYbvOVp-.css +1 -0
  566. package/vendor/framey/dist/studio/assets/index-Dp3QEUGL.js +402 -0
  567. package/vendor/framey/dist/studio/assets/index-qrTAXbqc.js +531 -0
  568. package/vendor/framey/dist/studio/favicon.svg +14 -0
  569. package/vendor/framey/dist/studio/icons/timeline/audio.svg +7 -0
  570. package/vendor/framey/dist/studio/icons/timeline/captions.svg +5 -0
  571. package/vendor/framey/dist/studio/icons/timeline/composition.svg +12 -0
  572. package/vendor/framey/dist/studio/icons/timeline/image.svg +18 -0
  573. package/vendor/framey/dist/studio/icons/timeline/music.svg +10 -0
  574. package/vendor/framey/dist/studio/icons/timeline/text.svg +3 -0
  575. package/vendor/framey/dist/studio/index.html +23 -0
  576. package/vendor/framey/dist/studio-api-2NECGRMB.js +179 -0
  577. package/vendor/framey/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
  578. package/vendor/framey/dist/studioServer-N2OPUMOQ.js +1569 -0
  579. package/vendor/framey/dist/synthesize-PKTB5ATG.js +183 -0
  580. package/vendor/framey/dist/system-7F3UEHQT.js +27 -0
  581. package/vendor/framey/dist/telemetry-DQGPEKM6.js +145 -0
  582. package/vendor/framey/dist/telemetry-UN55N6U6.js +77 -0
  583. package/vendor/framey/dist/timeline-LHUUMK63.js +1295 -0
  584. package/vendor/framey/dist/tokens-OLECWDFK.js +92 -0
  585. package/vendor/framey/dist/transcribe-O7HQKMIV.js +331 -0
  586. package/vendor/framey/dist/transcribe-UJESPBT5.js +76 -0
  587. package/vendor/framey/dist/tts-YCCQHZD4.js +234 -0
  588. package/vendor/framey/dist/urlDownloader-H2LXLG4U.js +48 -0
  589. package/vendor/framey/dist/usage-HG4WMM7A.js +2167 -0
  590. package/vendor/framey/dist/validate-F2XMN6EV.js +87 -0
  591. package/vendor/framey/dist/vendor/npm/gsap@3.15.0/GSAP-LICENSE.txt +8 -0
  592. package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/CustomEase.min.js +11 -0
  593. package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/MotionPathPlugin.min.js +11 -0
  594. package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/gsap.min.js +11 -0
  595. package/vendor/framey/dist/warmCheck.js +220 -0
  596. package/vendor/framey/dist/warmCheckClient.js +139 -0
  597. package/vendor/framey/dist/workspaceBuildCheck-XYD2YTFW.js +133 -0
  598. package/vendor/framey-player/LICENSE +190 -0
  599. package/vendor/framey-player/NOTICE +16 -0
  600. package/vendor/framey-player/SOURCE.json +6 -0
  601. package/vendor/framey-player/hyperframes-player.global.js +478 -0
  602. package/vendor/framey.pin +1 -0
  603. package/bin/index.js +0 -3
@@ -0,0 +1,548 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ stoppedByCancelSignal
9
+ } from "./chunk-HFQ4CWHA.js";
10
+ import {
11
+ DEFAULT_MODEL,
12
+ ensureModel,
13
+ ensureWhisper,
14
+ hasFFmpeg,
15
+ pinnedWhisperModel,
16
+ sha256File
17
+ } from "./chunk-HPDTCOKE.js";
18
+ import {
19
+ findFFmpeg,
20
+ findFFprobe,
21
+ getFFmpegInstallHint
22
+ } from "./chunk-UMD3V7CU.js";
23
+ import {
24
+ findWavChunk
25
+ } from "./chunk-UOFAE5RF.js";
26
+ import {
27
+ TRANSCRIPT_FILE
28
+ } from "./chunk-IR35BCLK.js";
29
+ import {
30
+ stoppableExecFile
31
+ } from "./chunk-HU2SPFNG.js";
32
+
33
+ // src/whisper/transcribe.ts
34
+ import { execFile, execFileSync } from "child_process";
35
+ import { once } from "events";
36
+ import { createInterface } from "readline";
37
+ import { existsSync, readFileSync, mkdirSync, rmSync, statSync, unlinkSync } from "fs";
38
+ import { basename, join, extname } from "path";
39
+ import { homedir, tmpdir } from "os";
40
+ import { randomUUID } from "crypto";
41
+
42
+ // src/whisper/modelForLanguage.ts
43
+ function initialModelForLanguage(model, language) {
44
+ const baseLanguage = language?.trim().toLowerCase().split(/[-_]/, 1)[0];
45
+ if (baseLanguage && baseLanguage !== "en" && model.endsWith(".en")) {
46
+ return model.slice(0, -3);
47
+ }
48
+ return model;
49
+ }
50
+
51
+ // src/whisper/progress.ts
52
+ var DESKTOP_MAX_LINE_BYTES = 16e3;
53
+ function emitWords(onEvent, model, words, through) {
54
+ const empty = Buffer.byteLength(JSON.stringify({ type: "words", model, words: [], through })) + 1;
55
+ let chunk = [];
56
+ let bytes = empty;
57
+ for (const word of words) {
58
+ const size = Buffer.byteLength(JSON.stringify(word)) + 1;
59
+ if (chunk.length > 0 && bytes + size > DESKTOP_MAX_LINE_BYTES) {
60
+ onEvent({ type: "words", model, words: chunk, through: chunk.at(-1).end });
61
+ chunk = [];
62
+ bytes = empty;
63
+ }
64
+ chunk.push(word);
65
+ bytes += size;
66
+ }
67
+ onEvent({ type: "words", model, words: chunk, through });
68
+ }
69
+ function createProgressWriter(stream) {
70
+ let blocked = false;
71
+ const pending = [];
72
+ const write = (event) => {
73
+ if (blocked) {
74
+ const previous = pending.at(-1);
75
+ if (event.type === "progress" && event.phase === "download" && previous?.type === "progress" && previous.phase === "download" && previous.model === event.model) {
76
+ pending[pending.length - 1] = event;
77
+ } else {
78
+ pending.push(event);
79
+ }
80
+ return;
81
+ }
82
+ blocked = !stream.write(`${JSON.stringify(event)}
83
+ `);
84
+ if (blocked) {
85
+ stream.once("drain", () => {
86
+ blocked = false;
87
+ while (!blocked && pending.length > 0) write(pending.shift());
88
+ });
89
+ }
90
+ };
91
+ return write;
92
+ }
93
+
94
+ // src/whisper/transcribe.ts
95
+ var WHISPER_TIMEOUT_FLOOR_MS = 3e5;
96
+ var WHISPER_TIMEOUT_PER_AUDIO_SECOND_MS = 1e4;
97
+ var WHISPER_TIMEOUT_CAP_MS = 432e5;
98
+ var AUDIO_PREPARATION_TIMEOUT_FLOOR_MS = 12e4;
99
+ var AUDIO_PREPARATION_TIMEOUT_PER_MEDIA_SECOND_MS = 500;
100
+ var AUDIO_PREPARATION_TIMEOUT_CAP_MS = 216e5;
101
+ var WHISPER_MODEL_SLOWDOWN_FACTORS = {
102
+ tiny: 0.5,
103
+ "tiny.en": 0.5,
104
+ base: 0.7,
105
+ "base.en": 0.7,
106
+ small: 1,
107
+ "small.en": 1,
108
+ medium: 2,
109
+ "medium.en": 2,
110
+ "large-v1": 4,
111
+ "large-v2": 4,
112
+ "large-v3": 4,
113
+ "large-v3-turbo": 2
114
+ };
115
+ var DEFAULT_MODEL_SLOWDOWN_FACTOR = 1;
116
+ function whisperModelSlowdownFactor(model) {
117
+ return WHISPER_MODEL_SLOWDOWN_FACTORS[model.toLowerCase()] ?? DEFAULT_MODEL_SLOWDOWN_FACTOR;
118
+ }
119
+ function resolveWhisperTimeoutMs(durationSeconds, options) {
120
+ if (options?.overrideMs != null && Number.isFinite(options.overrideMs) && options.overrideMs > 0) {
121
+ return Math.min(WHISPER_TIMEOUT_CAP_MS, options.overrideMs);
122
+ }
123
+ const factor = options?.model ? whisperModelSlowdownFactor(options.model) : 1;
124
+ if (durationSeconds === null || !Number.isFinite(durationSeconds) || durationSeconds <= 0) {
125
+ return Math.min(WHISPER_TIMEOUT_CAP_MS, Math.ceil(WHISPER_TIMEOUT_FLOOR_MS * factor));
126
+ }
127
+ return Math.min(
128
+ WHISPER_TIMEOUT_CAP_MS,
129
+ Math.max(
130
+ WHISPER_TIMEOUT_FLOOR_MS,
131
+ Math.ceil(durationSeconds * WHISPER_TIMEOUT_PER_AUDIO_SECOND_MS * factor)
132
+ )
133
+ );
134
+ }
135
+ function resolveAudioPreparationTimeoutMs(durationSeconds) {
136
+ if (durationSeconds === null || !Number.isFinite(durationSeconds) || durationSeconds <= 0) {
137
+ return AUDIO_PREPARATION_TIMEOUT_FLOOR_MS;
138
+ }
139
+ return Math.min(
140
+ AUDIO_PREPARATION_TIMEOUT_CAP_MS,
141
+ Math.max(
142
+ AUDIO_PREPARATION_TIMEOUT_FLOOR_MS,
143
+ Math.ceil(durationSeconds * AUDIO_PREPARATION_TIMEOUT_PER_MEDIA_SECOND_MS)
144
+ )
145
+ );
146
+ }
147
+ function getMediaDurationSeconds(filePath) {
148
+ try {
149
+ const ffprobePath = findFFprobe();
150
+ if (!ffprobePath) return null;
151
+ const raw = execFileSync(
152
+ ffprobePath,
153
+ [
154
+ "-v",
155
+ "error",
156
+ "-show_entries",
157
+ "format=duration",
158
+ "-of",
159
+ "default=noprint_wrappers=1:nokey=1",
160
+ "--",
161
+ filePath
162
+ ],
163
+ { encoding: "utf-8", timeout: 1e4 }
164
+ );
165
+ const durationSeconds = Number.parseFloat(raw.trim());
166
+ return Number.isFinite(durationSeconds) && durationSeconds > 0 ? durationSeconds : null;
167
+ } catch {
168
+ return null;
169
+ }
170
+ }
171
+ function getPreparedWavDurationSeconds(wavPath) {
172
+ try {
173
+ return statSync(wavPath).size / (16e3 * 2);
174
+ } catch {
175
+ return null;
176
+ }
177
+ }
178
+ function detectSpeechOnset(wavPath) {
179
+ const SAMPLE_RATE = 16e3;
180
+ const WINDOW_SECONDS = 0.5;
181
+ const WINDOW_SAMPLES = SAMPLE_RATE * WINDOW_SECONDS;
182
+ const SUSTAINED_WINDOWS = 3;
183
+ const SILENCE_THRESHOLD_RATIO = 0.6;
184
+ const MIN_INTRO_SECONDS = 3;
185
+ try {
186
+ const buf = readFileSync(wavPath);
187
+ const dataChunk = findWavChunk(buf, "data");
188
+ if (!dataChunk) return null;
189
+ const pcm = new Int16Array(buf.buffer, buf.byteOffset + dataChunk.offset, dataChunk.size / 2);
190
+ const totalWindows = Math.floor(pcm.length / WINDOW_SAMPLES);
191
+ if (totalWindows < 10) return null;
192
+ const rmsValues = [];
193
+ for (let i = 0; i < totalWindows; i++) {
194
+ const start = i * WINDOW_SAMPLES;
195
+ let sumSq = 0;
196
+ for (let j = start; j < start + WINDOW_SAMPLES; j++) {
197
+ const sample = pcm[j] ?? 0;
198
+ sumSq += sample * sample;
199
+ }
200
+ rmsValues.push(Math.sqrt(sumSq / WINDOW_SAMPLES));
201
+ }
202
+ const sorted = [...rmsValues].sort((a, b) => a - b);
203
+ const median = sorted[Math.floor(sorted.length / 2)] ?? 0;
204
+ const threshold = median * SILENCE_THRESHOLD_RATIO;
205
+ const introAvg = rmsValues.slice(0, Math.min(20, rmsValues.length)).reduce((a, b) => a + b, 0) / Math.min(20, rmsValues.length);
206
+ if (introAvg >= threshold) return null;
207
+ let consecutive = 0;
208
+ for (let i = 0; i < rmsValues.length; i++) {
209
+ if ((rmsValues[i] ?? 0) >= threshold) {
210
+ consecutive++;
211
+ if (consecutive >= SUSTAINED_WINDOWS) {
212
+ const onsetSeconds = (i - SUSTAINED_WINDOWS + 1) * WINDOW_SECONDS;
213
+ return onsetSeconds >= MIN_INTRO_SECONDS ? onsetSeconds : null;
214
+ }
215
+ } else {
216
+ consecutive = 0;
217
+ }
218
+ }
219
+ } catch {
220
+ }
221
+ return null;
222
+ }
223
+ var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set([".mp3", ".wav", ".m4a", ".aac", ".ogg", ".flac"]);
224
+ var VIDEO_EXTENSIONS = /* @__PURE__ */ new Set([".mp4", ".webm", ".mov", ".mkv", ".avi"]);
225
+ function isAudioFile(filePath) {
226
+ return AUDIO_EXTENSIONS.has(extname(filePath).toLowerCase());
227
+ }
228
+ function isVideoFile(filePath) {
229
+ return VIDEO_EXTENSIONS.has(extname(filePath).toLowerCase());
230
+ }
231
+ function tempWavPath() {
232
+ return join(tmpdir(), `hyperframes-audio-${process.pid}-${randomUUID()}.wav`);
233
+ }
234
+ async function runFfmpeg(ffmpegPath, args, output, timeout, signal) {
235
+ try {
236
+ await stoppableExecFile(ffmpegPath, ["-nostats", "-hide_banner", ...args, "-y", output], {
237
+ stdio: ["ignore", "ignore", "pipe"],
238
+ maxBuffer: 64 * 1024 * 1024,
239
+ timeout,
240
+ signal
241
+ });
242
+ } catch (err) {
243
+ rmSync(output, { force: true });
244
+ if (signal?.aborted) throw err;
245
+ const stop = err;
246
+ if (stop.code) throw err;
247
+ const said = String(stop.stderr ?? "").trim();
248
+ const cancelled = /Exiting normally, received signal/.test(said) || stoppedByCancelSignal(stop);
249
+ const reason = said.split("\n").at(-1) || err.message;
250
+ const failure = new Error(`ffmpeg failed: ${reason}`, { cause: err });
251
+ throw Object.assign(failure, { cancelled, stderr: said });
252
+ }
253
+ }
254
+ async function extractAudio(videoPath, signal) {
255
+ const ffmpegPath = findFFmpeg();
256
+ if (!ffmpegPath) {
257
+ throw new Error(
258
+ `ffmpeg is required to extract audio from video. Install: ${getFFmpegInstallHint()}`
259
+ );
260
+ }
261
+ const wavPath = tempWavPath();
262
+ await runFfmpeg(
263
+ ffmpegPath,
264
+ ["-i", videoPath, "-vn", "-ar", "16000", "-ac", "1", "-f", "wav"],
265
+ wavPath,
266
+ resolveAudioPreparationTimeoutMs(getMediaDurationSeconds(videoPath)),
267
+ signal
268
+ );
269
+ return wavPath;
270
+ }
271
+ function isPcm16kMono(stream) {
272
+ return stream?.codec_name === "pcm_s16le" && stream.sample_rate === "16000" && stream.channels === 1;
273
+ }
274
+ function isWav16kMono(filePath) {
275
+ try {
276
+ const ffprobePath = findFFprobe();
277
+ if (!ffprobePath) return false;
278
+ const raw = execFileSync(
279
+ ffprobePath,
280
+ ["-v", "quiet", "-print_format", "json", "-show_streams", "--", filePath],
281
+ { encoding: "utf-8", timeout: 1e4 }
282
+ );
283
+ const parsed = JSON.parse(raw);
284
+ return isPcm16kMono(parsed.streams?.find((s) => s.codec_type === "audio"));
285
+ } catch {
286
+ return false;
287
+ }
288
+ }
289
+ async function prepareAudio(audioPath, signal) {
290
+ if (extname(audioPath).toLowerCase() === ".wav" && isWav16kMono(audioPath)) {
291
+ return audioPath;
292
+ }
293
+ const ffmpegPath = findFFmpeg();
294
+ if (!ffmpegPath) {
295
+ throw new Error(`ffmpeg is required to prepare audio. Install: ${getFFmpegInstallHint()}`);
296
+ }
297
+ const wavPath = tempWavPath();
298
+ await runFfmpeg(
299
+ ffmpegPath,
300
+ ["-i", audioPath, "-ar", "16000", "-ac", "1", "-f", "wav"],
301
+ wavPath,
302
+ resolveAudioPreparationTimeoutMs(getMediaDurationSeconds(audioPath)),
303
+ signal
304
+ );
305
+ return wavPath;
306
+ }
307
+ async function prepareWav(inputPath, onProgress, signal) {
308
+ if (isAudioFile(inputPath)) {
309
+ onProgress?.("Preparing audio...");
310
+ return prepareAudio(inputPath, signal);
311
+ }
312
+ if (isVideoFile(inputPath)) {
313
+ if (!hasFFmpeg()) {
314
+ throw new Error(
315
+ `ffmpeg is required to extract audio from video. Install: ${getFFmpegInstallHint()}`
316
+ );
317
+ }
318
+ onProgress?.("Extracting audio from video...");
319
+ return extractAudio(inputPath, signal);
320
+ }
321
+ throw new Error(`Unsupported file type: ${extname(inputPath).toLowerCase()}`);
322
+ }
323
+ async function transcribe(inputPath, outputDir, options) {
324
+ const model = initialModelForLanguage(options?.model ?? DEFAULT_MODEL, options?.language);
325
+ const signal = options?.signal;
326
+ signal?.throwIfAborted();
327
+ options?.onProgress?.("Checking whisper...");
328
+ const whisper = await ensureWhisper({
329
+ onProgress: options?.onProgress,
330
+ installRuntime: options?.installRuntime,
331
+ signal
332
+ });
333
+ signal?.throwIfAborted();
334
+ options?.onProgress?.("Checking model...");
335
+ const modelPath = await ensureModel(model, {
336
+ signal,
337
+ onProgress: options?.onProgress,
338
+ onDownloadProgress: options?.onEvent ? (receivedBytes, totalBytes) => options.onEvent?.({
339
+ type: "progress",
340
+ phase: "download",
341
+ model,
342
+ receivedBytes,
343
+ totalBytes
344
+ }) : void 0
345
+ });
346
+ signal?.throwIfAborted();
347
+ const wavPath = await prepareWav(inputPath, options?.onProgress, signal);
348
+ signal?.throwIfAborted();
349
+ const automaticLanguage = options?.language === void 0 && !model.endsWith(".en");
350
+ const language = options?.language ?? (automaticLanguage ? "auto" : "en");
351
+ options?.onProgress?.("Transcribing...");
352
+ const wavSeconds = getPreparedWavDurationSeconds(wavPath);
353
+ options?.onEvent?.({
354
+ type: "progress",
355
+ phase: "transcription",
356
+ model,
357
+ status: "started",
358
+ durationSeconds: wavSeconds
359
+ });
360
+ const outputBase = join(outputDir, basename(TRANSCRIPT_FILE, ".json"));
361
+ mkdirSync(outputDir, { recursive: true });
362
+ const whisperArgs = [
363
+ "--model",
364
+ modelPath,
365
+ "--output-json-full",
366
+ "--output-file",
367
+ outputBase,
368
+ "--suppress-nst"
369
+ ];
370
+ whisperArgs.push("--language", language);
371
+ const onEvent = options?.onEvent;
372
+ if (onEvent) whisperArgs.push("--print-progress");
373
+ whisperArgs.push(wavPath);
374
+ const whisperTimeoutMs = resolveWhisperTimeoutMs(wavSeconds, {
375
+ model,
376
+ overrideMs: options?.timeoutMs
377
+ });
378
+ let through = 0;
379
+ const heard = (words, at) => {
380
+ if (!onEvent || words.length === 0 && at <= through) return;
381
+ through = Math.max(through, at);
382
+ emitWords(onEvent, model, words, through);
383
+ };
384
+ try {
385
+ await runWhisper(whisper.executablePath, whisperArgs, {
386
+ timeoutMs: whisperTimeoutMs,
387
+ signal: options?.startCancellation?.(),
388
+ onStdout: onEvent && ((line) => {
389
+ const segment = segmentWords(line);
390
+ if (segment) heard(segment.words, segment.end);
391
+ }),
392
+ onStderr: onEvent && wavSeconds ? (line) => {
393
+ const percent = /progress =\s*(\d+)%/.exec(line)?.[1];
394
+ if (percent) heard([], Number(percent) / 100 * wavSeconds);
395
+ } : void 0
396
+ });
397
+ } catch (err) {
398
+ if (isWhisperTimeoutError(err) || stoppedByCancelSignal(err)) {
399
+ throw wrapWhisperTimeoutError(err, {
400
+ effectiveTimeoutMs: whisperTimeoutMs,
401
+ model,
402
+ wasOverride: options?.timeoutMs != null
403
+ });
404
+ }
405
+ throw await diagnoseWhisperFailure(err, whisper, modelPath, model);
406
+ }
407
+ const transcriptPath = `${outputBase}.json`;
408
+ if (!existsSync(transcriptPath)) {
409
+ throw new Error("Whisper did not produce output. Check the input file.");
410
+ }
411
+ const transcript = JSON.parse(readFileSync(transcriptPath, "utf-8"));
412
+ const reportedLanguage = transcript.result?.language;
413
+ const detectedLanguage = automaticLanguage && typeof reportedLanguage === "string" && reportedLanguage.length > 0 ? reportedLanguage : null;
414
+ const segments = transcript.transcription ?? [];
415
+ let wordCount = 0;
416
+ let maxEnd = 0;
417
+ for (const seg of segments) {
418
+ for (const token of seg.tokens ?? []) {
419
+ const text = (token.text ?? "").trim();
420
+ if (text && !text.startsWith("[_") && !text.startsWith("[BLANK")) wordCount++;
421
+ if (token.offsets?.to > maxEnd) maxEnd = token.offsets.to;
422
+ }
423
+ }
424
+ options?.onProgress?.("Detecting speech onset...");
425
+ const speechOnsetSeconds = detectSpeechOnset(wavPath);
426
+ if (wavPath !== inputPath) {
427
+ try {
428
+ unlinkSync(wavPath);
429
+ } catch {
430
+ }
431
+ }
432
+ options?.onEvent?.({ type: "progress", phase: "transcription", model, status: "completed" });
433
+ return {
434
+ model,
435
+ detectedLanguage,
436
+ transcriptPath,
437
+ wordCount,
438
+ durationSeconds: maxEnd / 1e3,
439
+ speechOnsetSeconds
440
+ };
441
+ }
442
+ var SEGMENT_LINE = /^\[(\d+):(\d+):([\d.]+) --> (\d+):(\d+):([\d.]+)\]\s*(.*)$/;
443
+ var toSeconds = (h, m, s) => Number(h) * 3600 + Number(m) * 60 + Number(s);
444
+ var toMs = (seconds) => Math.round(seconds * 1e3) / 1e3;
445
+ function segmentWords(line) {
446
+ const m = SEGMENT_LINE.exec(line);
447
+ if (!m) return null;
448
+ const start = toSeconds(m[1], m[2], m[3]);
449
+ const end = toSeconds(m[4], m[5], m[6]);
450
+ const texts = m[7].split(/\s+/).filter((t) => t && !t.startsWith("[_") && !t.startsWith("[BLANK"));
451
+ const letters = texts.reduce((n, t) => n + t.length, 0);
452
+ let at = start;
453
+ const words = texts.map((text) => {
454
+ const from = at;
455
+ at += (end - start) * text.length / letters;
456
+ return { text, start: toMs(from), end: toMs(at) };
457
+ });
458
+ return { words, end };
459
+ }
460
+ async function runWhisper(executable, args, options) {
461
+ let stdout = null;
462
+ let stderr = null;
463
+ const exited = new Promise((resolve, reject) => {
464
+ const child = execFile(
465
+ executable,
466
+ args,
467
+ { timeout: options.timeoutMs, signal: options.signal, maxBuffer: 256 * 1024 * 1024 },
468
+ (err, _out, errText) => {
469
+ if (!err) return resolve();
470
+ const timedOut = err.killed && err.signal === "SIGTERM" && !options.signal?.aborted;
471
+ err.message = err.message.split("\n")[0];
472
+ reject(Object.assign(err, { stderr: errText }, timedOut ? { code: "ETIMEDOUT" } : {}));
473
+ }
474
+ );
475
+ stdout = child.stdout;
476
+ stderr = child.stderr;
477
+ });
478
+ const read = (stream, onLine) => stream && onLine ? once(createInterface({ input: stream }).on("line", onLine), "close") : null;
479
+ await Promise.all([exited, read(stdout, options.onStdout), read(stderr, options.onStderr)]);
480
+ }
481
+ function withoutPaths(text) {
482
+ return text.split(homedir()).join("~").replace(/(?<=^|[\s'"(=:[])(?:~|[A-Za-z]:)?[\\/](?:[^\s'"`\\/]+[\\/])*([^\s'"`\\/]+)/g, "$1");
483
+ }
484
+ function whisperVersion(executable) {
485
+ try {
486
+ const said = execFileSync(executable, ["--version"], {
487
+ encoding: "utf-8",
488
+ stdio: ["ignore", "pipe", "pipe"],
489
+ timeout: 5e3
490
+ });
491
+ return /version:?\s*(\S+)/i.exec(said)?.[1] ?? "unknown version";
492
+ } catch {
493
+ return "unknown version";
494
+ }
495
+ }
496
+ async function describeModel(modelPath, model) {
497
+ const bytes = statSync(modelPath, { throwIfNoEntry: false })?.size;
498
+ if (bytes === void 0) return `model ${model}: file missing`;
499
+ const sha256 = await sha256File(modelPath).catch(() => "unreadable");
500
+ const pin = pinnedWhisperModel(model);
501
+ const verdict = !pin ? "not a pinned model" : pin.bytes === bytes && pin.sha256 === sha256 ? "matches the pinned file" : `damaged: expected ${pin.bytes} bytes, sha256 ${pin.sha256.slice(0, 12)}; delete it and re-run`;
502
+ return `model ${model}: ${bytes} bytes, sha256 ${sha256.slice(0, 12)} (${verdict})`;
503
+ }
504
+ async function diagnoseWhisperFailure(err, whisper, modelPath, model) {
505
+ const failed = err;
506
+ const how = failed.signal ? `crashed (${failed.signal})` : typeof failed.code === "number" ? `exited with code ${failed.code}` : `failed: ${withoutPaths(err instanceof Error ? err.message : String(err))}`;
507
+ const said = withoutPaths(String(failed.stderr ?? "")).trim().split("\n").slice(-12).join("\n");
508
+ const lines = [
509
+ `whisper-cli ${how}.`,
510
+ `whisper-cli ${whisperVersion(whisper.executablePath)} (${whisper.source}: ${basename(whisper.executablePath)})`,
511
+ await describeModel(modelPath, model),
512
+ said ? `whisper-cli said:
513
+ ${said}` : "whisper-cli printed nothing."
514
+ ];
515
+ return new Error(lines.join("\n"), { cause: err });
516
+ }
517
+ function isWhisperTimeoutError(err) {
518
+ return err instanceof Error && err.code === "ETIMEDOUT";
519
+ }
520
+ function wrapWhisperTimeoutError(err, options) {
521
+ if (!isWhisperTimeoutError(err)) {
522
+ return err instanceof Error ? err : new Error(String(err));
523
+ }
524
+ const seconds = Math.round(options.effectiveTimeoutMs / 1e3);
525
+ const source = options.wasOverride ? `explicit --timeout ${options.effectiveTimeoutMs}ms` : `auto-scaled default for model ${options.model}`;
526
+ const message = `Whisper transcription exceeded ${seconds}s (${source}). Raise --timeout <ms> or set HYPERFRAMES_TRANSCRIBE_TIMEOUT_MS. Slow CPUs (e.g. emulated arm64/x64, low-power laptops) may need many multiples of realtime on heavier models \u2014 medium.en can run ~10-15x realtime on constrained hardware.`;
527
+ const wrapped = new Error(message);
528
+ wrapped.cause = err;
529
+ return wrapped;
530
+ }
531
+
532
+ export {
533
+ initialModelForLanguage,
534
+ emitWords,
535
+ createProgressWriter,
536
+ whisperModelSlowdownFactor,
537
+ resolveWhisperTimeoutMs,
538
+ resolveAudioPreparationTimeoutMs,
539
+ getMediaDurationSeconds,
540
+ getPreparedWavDurationSeconds,
541
+ detectSpeechOnset,
542
+ isPcm16kMono,
543
+ prepareWav,
544
+ transcribe,
545
+ withoutPaths,
546
+ isWhisperTimeoutError,
547
+ wrapWhisperTimeoutError
548
+ };
@@ -0,0 +1,103 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ terminateProcessTree
9
+ } from "./chunk-KGPLIH7B.js";
10
+
11
+ // src/utils/stoppableExecFile.ts
12
+ import { execFileSync, spawn } from "child_process";
13
+ import * as util from "util";
14
+ function syscallError(code, file, args) {
15
+ const known = util.getSystemErrorMap?.() ?? /* @__PURE__ */ new Map();
16
+ const errno = [...known].find(([, [name]]) => name === code)?.[0];
17
+ return Object.assign(new Error(`spawnSync ${file} ${code}`), {
18
+ errno,
19
+ code,
20
+ syscall: `spawnSync ${file}`,
21
+ path: file,
22
+ spawnargs: args
23
+ });
24
+ }
25
+ async function stoppableExecFile(file, args, options) {
26
+ const { signal, ...syncOptions } = options;
27
+ if (!signal) {
28
+ execFileSync(file, args, syncOptions);
29
+ return;
30
+ }
31
+ signal.throwIfAborted();
32
+ const maxBuffer = options.maxBuffer ?? 1024 * 1024;
33
+ await new Promise((resolve, reject) => {
34
+ const child = spawn(file, args, { cwd: options.cwd, env: options.env, stdio: options.stdio });
35
+ let failure;
36
+ const stopWith = (code) => {
37
+ failure ??= code;
38
+ child.kill("SIGTERM");
39
+ };
40
+ const collect = (stream) => {
41
+ if (!stream) return null;
42
+ const chunks = [];
43
+ let size = 0;
44
+ stream.on("data", (chunk) => {
45
+ chunks.push(chunk);
46
+ size += chunk.length;
47
+ if (size > maxBuffer) stopWith("ENOBUFS");
48
+ });
49
+ return chunks;
50
+ };
51
+ const stdout = collect(child.stdout);
52
+ const stderr = collect(child.stderr);
53
+ child.stdin?.end();
54
+ const timer = setTimeout(() => stopWith("ETIMEDOUT"), options.timeout);
55
+ let stopping;
56
+ const onAbort = () => {
57
+ if (child.pid === void 0) return;
58
+ stopping ??= terminateProcessTree(child.pid, { child }).catch(() => void 0);
59
+ };
60
+ signal.addEventListener("abort", onAbort, { once: true });
61
+ const settle = () => {
62
+ clearTimeout(timer);
63
+ signal.removeEventListener("abort", onAbort);
64
+ };
65
+ child.on("error", (err) => {
66
+ if (child.pid !== void 0) return;
67
+ settle();
68
+ const spawnError = syscallError(err.code ?? "UNKNOWN", file, args);
69
+ const result = { status: null, signal: null, output: null, pid: 0 };
70
+ reject(Object.assign(spawnError, { error: spawnError }, result));
71
+ });
72
+ child.on("close", (status, exitSignal) => {
73
+ settle();
74
+ if (signal.aborted) {
75
+ void Promise.resolve(stopping).then(() => reject(signal.reason));
76
+ return;
77
+ }
78
+ const out = stdout && Buffer.concat(stdout);
79
+ const errText = stderr && Buffer.concat(stderr);
80
+ const result = {
81
+ status,
82
+ signal: exitSignal,
83
+ output: [null, out, errText],
84
+ pid: child.pid,
85
+ stdout: out,
86
+ stderr: errText
87
+ };
88
+ if (failure) {
89
+ const err = syscallError(failure, file, args);
90
+ return reject(Object.assign(err, { error: err }, result));
91
+ }
92
+ if (status === 0) return resolve();
93
+ const command = `Command failed: ${[file, ...args].join(" ")}`;
94
+ const message = errText?.length ? `${command}
95
+ ${errText.toString()}` : command;
96
+ reject(Object.assign(new Error(message), result));
97
+ });
98
+ });
99
+ }
100
+
101
+ export {
102
+ stoppableExecFile
103
+ };
@@ -0,0 +1,19 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+
8
+ // src/telemetry/skill.ts
9
+ var SKILL_SLUG = /^[a-z0-9][a-z0-9-]{0,63}$/;
10
+ function normalizeSkillSlug(raw) {
11
+ if (typeof raw !== "string") return void 0;
12
+ const slug = raw.trim();
13
+ return SKILL_SLUG.test(slug) ? slug : void 0;
14
+ }
15
+
16
+ export {
17
+ SKILL_SLUG,
18
+ normalizeSkillSlug
19
+ };
@@ -0,0 +1,26 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ sherpaParakeetInstalled,
9
+ sherpaUnsupportedReason
10
+ } from "./chunk-R6YBK4XX.js";
11
+ import {
12
+ findParakeet
13
+ } from "./chunk-II3J3WXK.js";
14
+
15
+ // src/whisper/parakeetRunner.ts
16
+ function parakeetRunner({
17
+ unsupported = sherpaUnsupportedReason(),
18
+ skipSherpa = false
19
+ } = {}) {
20
+ if (!skipSherpa && !unsupported && sherpaParakeetInstalled()) return "sherpa";
21
+ return findParakeet() ? "parakeet-mlx" : null;
22
+ }
23
+
24
+ export {
25
+ parakeetRunner
26
+ };