@clipwright/core 0.19.0 → 0.21.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 (135) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/__fixtures__/queue-promises.d.ts +5 -84
  3. package/dist/__fixtures__/queue-promises.js +7 -84
  4. package/dist/__fixtures__/queue-promises.js.map +1 -1
  5. package/dist/account-actors.d.ts +25 -25
  6. package/dist/account-actors.js +25 -25
  7. package/dist/account-actors.js.map +1 -1
  8. package/dist/account.d.ts +4 -10
  9. package/dist/account.js +6 -12
  10. package/dist/account.js.map +1 -1
  11. package/dist/actor-bounds.d.ts +4 -4
  12. package/dist/actor-bounds.js +4 -4
  13. package/dist/actor-bounds.js.map +1 -1
  14. package/dist/actor-qualities.d.ts +3 -3
  15. package/dist/actor-qualities.js +3 -3
  16. package/dist/actor-qualities.js.map +1 -1
  17. package/dist/actors.d.ts +8 -8
  18. package/dist/actors.js +9 -9
  19. package/dist/actors.js.map +1 -1
  20. package/dist/api-failure.d.ts +28 -129
  21. package/dist/api-failure.js +52 -225
  22. package/dist/api-failure.js.map +1 -1
  23. package/dist/aspect.d.ts +26 -96
  24. package/dist/aspect.js +32 -108
  25. package/dist/aspect.js.map +1 -1
  26. package/dist/contract-dispositions.d.ts +42 -167
  27. package/dist/contract-dispositions.js +54 -184
  28. package/dist/contract-dispositions.js.map +1 -1
  29. package/dist/endpoints.d.ts +5 -5
  30. package/dist/endpoints.js +5 -3
  31. package/dist/endpoints.js.map +1 -1
  32. package/dist/errors.d.ts +33 -101
  33. package/dist/errors.js +42 -108
  34. package/dist/errors.js.map +1 -1
  35. package/dist/faceless-cut-style.d.ts +115 -0
  36. package/dist/faceless-cut-style.js +109 -0
  37. package/dist/faceless-cut-style.js.map +1 -0
  38. package/dist/faceless-image-qualification.d.ts +97 -0
  39. package/dist/faceless-image-qualification.js +145 -0
  40. package/dist/faceless-image-qualification.js.map +1 -0
  41. package/dist/faceless-price.d.ts +21 -0
  42. package/dist/faceless-price.js +25 -0
  43. package/dist/faceless-price.js.map +1 -0
  44. package/dist/faceless-public-plan.d.ts +71 -0
  45. package/dist/faceless-public-plan.js +166 -0
  46. package/dist/faceless-public-plan.js.map +1 -0
  47. package/dist/faceless-public.d.ts +107 -0
  48. package/dist/faceless-public.js +74 -0
  49. package/dist/faceless-public.js.map +1 -0
  50. package/dist/faceless-short-61.d.ts +83 -0
  51. package/dist/faceless-short-61.js +152 -0
  52. package/dist/faceless-short-61.js.map +1 -0
  53. package/dist/faceless-storyboard-timing.d.ts +40 -0
  54. package/dist/faceless-storyboard-timing.js +97 -0
  55. package/dist/faceless-storyboard-timing.js.map +1 -0
  56. package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
  57. package/dist/faceless-storyboard-v2-plan.js +112 -0
  58. package/dist/faceless-storyboard-v2-plan.js.map +1 -0
  59. package/dist/faceless-storyboard-v2-timing.d.ts +63 -0
  60. package/dist/faceless-storyboard-v2-timing.js +143 -0
  61. package/dist/faceless-storyboard-v2-timing.js.map +1 -0
  62. package/dist/faceless-storyboard-v2.d.ts +44 -0
  63. package/dist/faceless-storyboard-v2.js +43 -0
  64. package/dist/faceless-storyboard-v2.js.map +1 -0
  65. package/dist/faceless-storyboard.d.ts +55 -0
  66. package/dist/faceless-storyboard.js +105 -0
  67. package/dist/faceless-storyboard.js.map +1 -0
  68. package/dist/idempotency.d.ts +10 -44
  69. package/dist/idempotency.js +18 -44
  70. package/dist/idempotency.js.map +1 -1
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.js +24 -25
  73. package/dist/index.js.map +1 -1
  74. package/dist/long-form-pricing.d.ts +4 -4
  75. package/dist/long-form-pricing.js +4 -4
  76. package/dist/long-form-pricing.js.map +1 -1
  77. package/dist/long-form-profile.d.ts +2 -2
  78. package/dist/long-form-profile.js +2 -2
  79. package/dist/long-form-profile.js.map +1 -1
  80. package/dist/pacing.d.ts +1 -1
  81. package/dist/pacing.js +1 -1
  82. package/dist/pacing.js.map +1 -1
  83. package/dist/public-endpoints.d.ts +9 -11
  84. package/dist/public-endpoints.js +11 -13
  85. package/dist/public-endpoints.js.map +1 -1
  86. package/dist/rate-limit.d.ts +23 -130
  87. package/dist/rate-limit.js +27 -132
  88. package/dist/rate-limit.js.map +1 -1
  89. package/dist/render-backend.d.ts +30 -145
  90. package/dist/render-backend.js +4 -27
  91. package/dist/render-backend.js.map +1 -1
  92. package/dist/run-preflight.d.ts +4 -4
  93. package/dist/run-preflight.js +10 -10
  94. package/dist/run-preflight.js.map +1 -1
  95. package/dist/run-static-warnings.d.ts +8 -8
  96. package/dist/run-static-warnings.js +26 -24
  97. package/dist/run-static-warnings.js.map +1 -1
  98. package/dist/runs.d.ts +34 -55
  99. package/dist/runs.js +28 -94
  100. package/dist/runs.js.map +1 -1
  101. package/dist/script-integrity.d.ts +6 -7
  102. package/dist/script-integrity.js +7 -8
  103. package/dist/script-integrity.js.map +1 -1
  104. package/dist/semantic-inserts.d.ts +4 -4
  105. package/dist/semantic-inserts.js +6 -6
  106. package/dist/semantic-inserts.js.map +1 -1
  107. package/dist/skills.d.ts +37 -108
  108. package/dist/skills.js +77 -161
  109. package/dist/skills.js.map +1 -1
  110. package/dist/tts-backend.d.ts +13 -42
  111. package/dist/tts-backend.js +2 -10
  112. package/dist/tts-backend.js.map +1 -1
  113. package/dist/uploads.d.ts +4 -4
  114. package/dist/uploads.js +4 -4
  115. package/dist/uploads.js.map +1 -1
  116. package/dist/vendor-response.d.ts +17 -80
  117. package/dist/vendor-response.js +19 -67
  118. package/dist/vendor-response.js.map +1 -1
  119. package/dist/voice-admission.d.ts +5 -5
  120. package/dist/voice-admission.js +6 -6
  121. package/dist/voice-admission.js.map +1 -1
  122. package/dist/voice-catalog-data.d.ts +2 -2
  123. package/dist/voice-catalog-data.js +2 -2
  124. package/dist/voice-catalog-data.js.map +1 -1
  125. package/dist/voice-catalog.d.ts +5 -5
  126. package/dist/voice-catalog.generated.json +56 -54
  127. package/dist/voice-catalog.js +6 -6
  128. package/dist/voice-catalog.js.map +1 -1
  129. package/dist/voice-listing.d.ts +4 -4
  130. package/dist/voice-listing.js +6 -6
  131. package/dist/voice-listing.js.map +1 -1
  132. package/dist/voices.d.ts +40 -82
  133. package/dist/voices.js +56 -99
  134. package/dist/voices.js.map +1 -1
  135. package/package.json +1 -1
package/dist/skills.d.ts CHANGED
@@ -1,80 +1,39 @@
1
1
  import { z } from "zod";
2
2
  export declare const CAPTION_STYLES: readonly ["hormozi", "tiktok", "minimal"];
3
3
  export declare const LOOKS: readonly ["natural", "commercial", "raw_iphone"];
4
- /**
5
- * Публичное множество форматов = ИЗМЕРЕННОЕ множество, а не вендорская дока.
6
- *
7
- * Вендор принимает шесть форматов, но живьём у нас проверены два, и ровно эти
8
- * два объявляет `CAPABILITIES` адаптера. Объявить в схеме больше — значит
9
- * принять значение, которое пайплайн потом отклонит; это тот самый класс
10
- * расхождения, ради устранения которого пересматривается контракт. Расширение —
11
- * отдельное стори (US-535) и только после живого измерения (US-530).
12
- */
4
+ /** Public formats = formats MEASURED live, not the vendor docs: declaring more would */
5
+ /** accept values the pipeline later rejects. */
13
6
  export declare const ASPECT_RATIOS: readonly ["9:16", "1:1", "16:9"];
14
7
  export type AspectRatio = (typeof ASPECT_RATIOS)[number];
15
- /**
16
- * Разрешение выхода. Значения — те, что реально принимает HeyGen v3
17
- * (проверено 18.07.2026: `480p` и ниже отклоняются с
18
- * `Input should be '4k', '1080p' or '720p'`).
19
- *
20
- * Фактические кадры при `aspect_ratio: "9:16"` — замерены на реальных файлах:
21
- * 720p → 720 × 1280 (~590 КБ на 7 сек)
22
- * 1080p → 1080 × 1920 (~923 КБ)
23
- * 4k → 2160 × 3840 (~3.7 МБ)
24
- *
25
- * ВАЖНО: на стоимость разрешение НЕ влияет. HeyGen тарифицирует по
26
- * длительности (~1 кредит/сек): все три варианта стоили одинаково — 8
27
- * кредитов за один и тот же 7.36-секундный ролик. Понижать разрешение ради
28
- * экономии кредитов бессмысленно; экономят короткие скрипты и фикстурный
29
- * режим. 720p в деве берётся ради скорости скачивания и объёма в R2
30
- * (файл в 6 раз меньше 4k), а не ради денег.
31
- */
8
+ /** Output resolution, as the vendor accepts it (720p: 720×1280, 1080p: 1080×1920, 4k: 2160×3840 */
9
+ /** at 9:16). Resolution does not change the price; dev uses 720p for download size only. */
32
10
  export declare const RESOLUTIONS: readonly ["720p", "1080p", "4k"];
33
11
  export type Resolution = (typeof RESOLUTIONS)[number];
34
- /**
35
- * Продуктовый дефолт — 1080p, и это не деталь реализации.
36
- * Конкурент обещает 1080p, а отдаёт 720p (docs/08); наше обещание держать
37
- * 1080×1920 — заявленный дифференциатор и правило проекта №4. Понижение
38
- * дефолта допустимо ТОЛЬКО в dev-окружении, где ролики никто не публикует.
39
- */
12
+ /** The 1080×1920 default is a product promise; only dev, where nothing is published, */
13
+ /** may lower it. */
40
14
  export declare const DEFAULT_RESOLUTION: Resolution;
41
15
  export declare const DEV_RESOLUTION: Resolution;
42
- /**
43
- * Разрешение конкретного рана: явный выбор клиента важнее любых дефолтов,
44
- * иначе dev-окружение молча подменяло бы то, что пользователь запросил.
45
- */
16
+ /** Resolution of a run: an explicit client choice beats any default, or dev would */
17
+ /** silently replace what the user asked for. */
46
18
  export declare function resolveResolution(requested: Resolution | undefined, isDev: boolean): Resolution;
47
- /** Потолок длины ЛЮБОГО адреса из чужого тела: без него поле берёт весь потолок */
48
- /** тела запроса. Число — верхний предел, который переваривает любой браузер и CDN. */
19
+ /** Length cap for ANY URL from a foreign body; without it the field takes the whole */
20
+ /** body cap. The value is the upper bound any browser and CDN handles. */
49
21
  export declare const MAX_URL_LENGTH = 2048;
50
- /** Скиллы общего неймспейса ранов. Колонка `runs.skill` — текст, поэтому читается через `parseSkill`. */
51
- export declare const SKILLS: readonly ["make_ugc", "create_actor"];
22
+ /** Skills in the shared run namespace. `runs.skill` is text, so it is read through `parseSkill`. */
23
+ export declare const SKILLS: readonly ["make_ugc", "create_actor", "make_faceless"];
52
24
  export type Skill = (typeof SKILLS)[number];
53
25
  export declare function parseSkill(value: unknown): Skill | null;
54
- /** ЧТО ДЕЛАЕТ `make_ugc` — один текст на обе контрактные поверхности: публичный */
55
- /** REST-каталог и MCP `tools/list`. Разойдясь, они описали бы РАЗНЫЙ скилл. */
26
+ /** What `make_ugc` does: one text for both contract surfaces, the public REST catalog */
27
+ /** and MCP `tools/list`, so they never describe different skills. */
56
28
  export declare const MAKE_UGC_DESCRIPTION: string;
57
- /** Как ЗВАТЬ скилл по MCP. Отдельно от описания выше: имена соседних тулов и */
58
- /** поллинг — свойства протокола, и REST-каталогу они не адресованы. */
29
+ /** How to CALL the skill over MCP. Kept apart from the description: neighboring tool */
30
+ /** names and polling are protocol details not meant for the REST catalog. */
59
31
  export declare const MAKE_UGC_AGENT_PROTOCOL: string;
60
- /**
61
- * Сырой zod-shape входа make_ugc — БЕЗ `.refine()`.
62
- *
63
- * ЗАЧЕМ ОТДЕЛЬНО ОТ `makeUgcInput`: `makeUgcInput` после `.refine()` становится
64
- * `ZodEffects`, у которого НЕТ `.shape` (ловушка A12). MCP-тул (`tools/list`) и
65
- * прочие потребители, которым нужен именно объект полей, обязаны собираться из
66
- * этого shape, а не переписывать поля руками (правило проекта №2 — не дублировать
67
- * схему). `makeUgcInput` пересобирается из ЭТОГО ЖЕ shape ниже, чтобы они не
68
- * разошлись.
69
- */
70
- /**
71
- * Один сегмент ролика. Форма объявляется ЗДЕСЬ, в Slice 1, хотя реализация —
72
- * в Slice 2 (US-526): поле `segments` требует `script → .optional()`, а это
73
- * меняет `required[]` в `tools/list`. Приедь правка позже, публичная форма
74
- * сменилась бы ПОСЛЕ проверки вторым пользователем и обесценила бы её —
75
- * единственную внешне фальсифицируемую проверку продукта. Здесь required-набор
76
- * меняется один раз, до гейта, а Slice 2 сводится к снятию строки отказа.
77
- */
32
+ export declare const MAKE_FACELESS_DESCRIPTION: string;
33
+ /** How to call `make_faceless` over MCP, kept apart from the REST description. */
34
+ export declare const MAKE_FACELESS_AGENT_PROTOCOL: string;
35
+ /** One clip segment. `segments` makes `script` optional, changing `required[]` in `tools/list`, */
36
+ /** so the shape was declared once up front instead of changing the public form later. */
78
37
  export declare const ugcSegment: z.ZodObject<{
79
38
  kind: z.ZodEnum<{
80
39
  actor: "actor";
@@ -120,11 +79,11 @@ export declare const ugcInsert: z.ZodObject<{
120
79
  }, z.core.$strict>>;
121
80
  }, z.core.$strict>;
122
81
  export type UgcInsert = z.infer<typeof ugcInsert>;
123
- /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
82
+ /** Actor segment cap: a limit on ONE run, not on daily spend. */
124
83
  export declare const MAX_ACTOR_SEGMENTS = 3;
125
84
  export declare const MAX_SEGMENTS = 5;
126
- /** Потолки НАРРАТИВНОГО пути — другие, потому что медиа-шот денег не стоит, */
127
- /** а актёрский стоит: вставок столько, сколько вмещает таймлайн (ADR #265). */
85
+ /** Narrated-path caps differ because a media shot costs nothing and an actor shot does: */
86
+ /** as many inserts as the timeline holds. */
128
87
  export declare const MAX_INSERTS: number;
129
88
  export declare const MAX_NARRATED_ACTOR_SHOTS = 6;
130
89
  export declare const actorId: z.ZodString;
@@ -217,39 +176,19 @@ export declare const makeUgcInputShape: {
217
176
  eleven_v3: "eleven_v3";
218
177
  }>>;
219
178
  readonly webhook_url: z.ZodOptional<z.ZodString>;
220
- /**
221
- * Видимая плашка «сделано ИИ» поверх кадра — OPT-IN, а не обязательная.
222
- *
223
- * Обязательный вотермарк отменил бы заявленный дифференциатор («без
224
- * вотермарки»), поэтому раскрытие держится на контрактных полях и на теге
225
- * внутри файла, а плашка остаётся выбором вызывателя. Выжигание её в кадр
226
- * требует композиции: она появилась в US-527, и US-539 перевёл поле в
227
- * `implemented` (обусловлено флагом `CLIPWRIGHT_COMPOSE`).
228
- */
179
+ /** Visible "made with AI" overlay, OPT-IN: disclosure rests on contract fields and file */
180
+ /** metadata. Burning it in needs composition (gated by `CLIPWRIGHT_COMPOSE`). */
229
181
  readonly disclosure_overlay: z.ZodOptional<z.ZodBoolean>;
230
- /**
231
- * Чем заполнять кадр, когда клип не покрывает его целиком (US-527).
232
- *
233
- * БЕЗ `.default()` НАМЕРЕННО. Дефолт здесь означал бы, что мы выбираем за
234
- * клиента, как выглядит его ролик там, где формат не совпал с источником, —
235
- * и выбираем МОЛЧА. Отсутствие поля значит «укладки не требуется»; если она
236
- * всё же понадобилась, ран обязан сказать об этом в `warnings[]`, а не
237
- * подобрать фон по своему вкусу.
238
- *
239
- * `contain` — вписать целиком (поля видны), `white` — белые поля как у
240
- * вендора, `blur` — размытая заливка тем же кадром.
241
- */
182
+ /** How to fill a frame the clip does not cover. No `.default()`: absence means no layout */
183
+ /** is needed. `contain` fits whole, `white` pads white, `blur` fills with the blurred frame. */
242
184
  readonly background: z.ZodOptional<z.ZodEnum<{
243
185
  blur: "blur";
244
186
  contain: "contain";
245
187
  white: "white";
246
188
  }>>;
247
189
  };
248
- /**
249
- * Ретрай-параметр агентного скилла: НОМЕР попытки. Живёт в core (не рукописно в
250
- * MCP и CLI сразу), но ОТДЕЛЬНО от `makeUgcInputShape` — это вход СКИЛЛА
251
- * (порождает суффикс `:N` у ключа идемпотентности в SDK), а не параметр рендера.
252
- */
190
+ /** Agent retry parameter: the attempt NUMBER. Kept apart from `makeUgcInputShape` because it */
191
+ /** is a skill input (the `:N` idempotency-key suffix in the SDK), not a render parameter. */
253
192
  export declare const agentRetryShape: {
254
193
  readonly attempt: z.ZodOptional<z.ZodNumber>;
255
194
  };
@@ -349,8 +288,8 @@ export declare const makeUgcInput: z.ZodObject<{
349
288
  white: "white";
350
289
  }>>;
351
290
  }, z.core.$strip>;
352
- /** Вход API: имя голоса сверяет `voiceRefusal` сервера. Каталог сюда не импортируется — */
353
- /** баррел читают клиенты; сервер берёт готовую схему из `@clipwright/core/voice-admission`. */
291
+ /** API input: the server's `voiceRefusal` checks the voice name. The catalog is not imported */
292
+ /** here, since clients read this barrel; the server uses `@clipwright/core/voice-admission`. */
354
293
  export declare function serverUgcInputWith(voiceRefusal: (voice: string) => string | undefined): z.ZodObject<{
355
294
  script: z.ZodOptional<z.ZodString>;
356
295
  segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -447,8 +386,8 @@ export declare function serverUgcInputWith(voiceRefusal: (voice: string) => stri
447
386
  white: "white";
448
387
  }>>;
449
388
  }, z.core.$strip>;
450
- /** Сохранённый вход рана: правила допуска он уже прошёл, и смена модели или */
451
- /** потолка не должна делать старый ран нечитаемым (#145). Снимок — ради пола (#210). */
389
+ /** A stored run input already passed admission; a model or cap change must not make an */
390
+ /** old run unreadable. The snapshot keeps the actor's gender. */
452
391
  export declare const storedUgcInput: z.ZodObject<{
453
392
  script: z.ZodOptional<z.ZodString>;
454
393
  segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -547,23 +486,13 @@ export declare const storedUgcInput: z.ZodObject<{
547
486
  }>>;
548
487
  }, z.core.$strip>>;
549
488
  }, z.core.$strip>;
550
- /** Минимум, из которого выводится произносимый текст: сам скрипт или сегменты. */
489
+ /** The minimum the spoken text is derived from: the script itself or the segments. */
551
490
  export interface SpokenTextInput {
552
491
  script?: string | undefined;
553
492
  segments?: readonly UgcSegment[] | undefined;
554
493
  }
555
- /**
556
- * ЕДИНСТВЕННОЕ место, где «`script` либо сам, либо склейка сегментов»
557
- * превращается в `string`.
558
- *
559
- * ЗАЧЕМ ХЕЛПЕР, А НЕ `!` НА СЕМИ CALL-SITE'АХ. Снятие обязательности со
560
- * `script` делает его `string | undefined` у каждого потребителя, и `.refine`
561
- * спасает в рантайме, а компилятор — нет. Самый чувствительный из них —
562
- * `elevenlabs-tts.ts`, где комментарий прямо опирался на `z.string().min(1)`
563
- * как на ГАРД ПЕРЕД ПЛАТНЫМ POST: заткни мы там типы, гард остался бы снятым,
564
- * а компилятор бы об этом молчал. Поэтому проверка непустоты живёт ВНУТРИ
565
- * хелпера и восстанавливает гард явно, а не полагается на снятую схему.
566
- */
494
+ /** The ONLY place where "script or joined segments" becomes a `string`. The non-empty */
495
+ /** check lives here, restoring the guard before the paid TTS call that the schema no longer holds. */
567
496
  export declare function resolvedScript(input: SpokenTextInput): string;
568
497
  export type MakeUgcInput = z.infer<typeof makeUgcInput>;
569
498
  export declare const quoteResponse: z.ZodObject<{