@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.js CHANGED
@@ -6,97 +6,60 @@ import { countWords } from "./pacing.js";
6
6
  import { resolveTtsModel, MAX_SCRIPT_CHARS, SCRIPT_LENGTH_DESCRIPTION, STRESS_MARKING_DESCRIPTION, ttsScriptLimitError, TTS_MODELS, isVoicePresetName, VOICE_ID_PATTERN, VOICE_NAME_PATTERN, VOICE_PRESET_NAMES, } from "./voices.js";
7
7
  export const CAPTION_STYLES = ["hormozi", "tiktok", "minimal"];
8
8
  export const LOOKS = ["natural", "commercial", "raw_iphone"];
9
- /**
10
- * Публичное множество форматов = ИЗМЕРЕННОЕ множество, а не вендорская дока.
11
- *
12
- * Вендор принимает шесть форматов, но живьём у нас проверены два, и ровно эти
13
- * два объявляет `CAPABILITIES` адаптера. Объявить в схеме больше — значит
14
- * принять значение, которое пайплайн потом отклонит; это тот самый класс
15
- * расхождения, ради устранения которого пересматривается контракт. Расширение —
16
- * отдельное стори (US-535) и только после живого измерения (US-530).
17
- */
9
+ /** Public formats = formats MEASURED live, not the vendor docs: declaring more would */
10
+ /** accept values the pipeline later rejects. */
18
11
  export const ASPECT_RATIOS = ["9:16", "1:1", "16:9"];
19
- /**
20
- * Разрешение выхода. Значения — те, что реально принимает HeyGen v3
21
- * (проверено 18.07.2026: `480p` и ниже отклоняются с
22
- * `Input should be '4k', '1080p' or '720p'`).
23
- *
24
- * Фактические кадры при `aspect_ratio: "9:16"` — замерены на реальных файлах:
25
- * 720p → 720 × 1280 (~590 КБ на 7 сек)
26
- * 1080p → 1080 × 1920 (~923 КБ)
27
- * 4k → 2160 × 3840 (~3.7 МБ)
28
- *
29
- * ВАЖНО: на стоимость разрешение НЕ влияет. HeyGen тарифицирует по
30
- * длительности (~1 кредит/сек): все три варианта стоили одинаково — 8
31
- * кредитов за один и тот же 7.36-секундный ролик. Понижать разрешение ради
32
- * экономии кредитов бессмысленно; экономят короткие скрипты и фикстурный
33
- * режим. 720p в деве берётся ради скорости скачивания и объёма в R2
34
- * (файл в 6 раз меньше 4k), а не ради денег.
35
- */
12
+ /** Output resolution, as the vendor accepts it (720p: 720×1280, 1080p: 1080×1920, 4k: 2160×3840 */
13
+ /** at 9:16). Resolution does not change the price; dev uses 720p for download size only. */
36
14
  export const RESOLUTIONS = ["720p", "1080p", "4k"];
37
- /**
38
- * Продуктовый дефолт — 1080p, и это не деталь реализации.
39
- * Конкурент обещает 1080p, а отдаёт 720p (docs/08); наше обещание держать
40
- * 1080×1920 — заявленный дифференциатор и правило проекта №4. Понижение
41
- * дефолта допустимо ТОЛЬКО в dev-окружении, где ролики никто не публикует.
42
- */
15
+ /** The 1080×1920 default is a product promise; only dev, where nothing is published, */
16
+ /** may lower it. */
43
17
  export const DEFAULT_RESOLUTION = "1080p";
44
18
  export const DEV_RESOLUTION = "720p";
45
- /**
46
- * Разрешение конкретного рана: явный выбор клиента важнее любых дефолтов,
47
- * иначе dev-окружение молча подменяло бы то, что пользователь запросил.
48
- */
19
+ /** Resolution of a run: an explicit client choice beats any default, or dev would */
20
+ /** silently replace what the user asked for. */
49
21
  export function resolveResolution(requested, isDev) {
50
22
  if (requested)
51
23
  return requested;
52
24
  return isDev ? DEV_RESOLUTION : DEFAULT_RESOLUTION;
53
25
  }
54
- /** Потолок длины ЛЮБОГО адреса из чужого тела: без него поле берёт весь потолок */
55
- /** тела запроса. Число — верхний предел, который переваривает любой браузер и CDN. */
26
+ /** Length cap for ANY URL from a foreign body; without it the field takes the whole */
27
+ /** body cap. The value is the upper bound any browser and CDN handles. */
56
28
  export const MAX_URL_LENGTH = 2048;
57
- /** Скиллы общего неймспейса ранов. Колонка `runs.skill` — текст, поэтому читается через `parseSkill`. */
58
- export const SKILLS = ["make_ugc", "create_actor"];
29
+ /** Skills in the shared run namespace. `runs.skill` is text, so it is read through `parseSkill`. */
30
+ export const SKILLS = ["make_ugc", "create_actor", "make_faceless"];
59
31
  export function parseSkill(value) {
60
32
  return SKILLS.find((skill) => skill === value) ?? null;
61
33
  }
62
- /** ЧТО ДЕЛАЕТ `make_ugc` — один текст на обе контрактные поверхности: публичный */
63
- /** REST-каталог и MCP `tools/list`. Разойдясь, они описали бы РАЗНЫЙ скилл. */
34
+ /** What `make_ugc` does: one text for both contract surfaces, the public REST catalog */
35
+ /** and MCP `tools/list`, so they never describe different skills. */
64
36
  export const MAKE_UGC_DESCRIPTION = "Start generation of a lip-synced UGC video. Give a script within the selected speech model's text limit; the actor comes " +
65
37
  "from actor_id (a saved actor from list_actors) or image, otherwise the default actor is used. Format and resolution follow the request and " +
66
38
  "the source, defaulting to 1080x1920. Captions are OPT-IN: ask the user first. Fields the " +
67
39
  "renderer does not honor yet carry a NOT HONORED YET note in their own description — read " +
68
40
  "it instead of guessing.";
69
- /** Как ЗВАТЬ скилл по MCP. Отдельно от описания выше: имена соседних тулов и */
70
- /** поллинг — свойства протокола, и REST-каталогу они не адресованы. */
41
+ /** How to CALL the skill over MCP. Kept apart from the description: neighboring tool */
42
+ /** names and polling are protocol details not meant for the REST catalog. */
71
43
  export const MAKE_UGC_AGENT_PROTOCOL = "Call quote_ugc before generating and show the cost. This does NOT wait for the video: it " +
72
44
  "starts the run and returns a run_id IMMEDIATELY. You MUST then poll get_run with that " +
73
45
  "run_id until the state is 'succeeded' (video_url) or 'failed'. A 'failed' run whose paid " +
74
46
  "vendor job we still hold can go back to 'queued' and reach 'succeeded' later; whenever that " +
75
47
  "happens it is named in warnings[]. Pass attempt=2,3,… to " +
76
48
  "deliberately start a NEW run for the same input (retry after a failure).";
77
- /**
78
- * Сырой zod-shape входа make_ugc — БЕЗ `.refine()`.
79
- *
80
- * ЗАЧЕМ ОТДЕЛЬНО ОТ `makeUgcInput`: `makeUgcInput` после `.refine()` становится
81
- * `ZodEffects`, у которого НЕТ `.shape` (ловушка A12). MCP-тул (`tools/list`) и
82
- * прочие потребители, которым нужен именно объект полей, обязаны собираться из
83
- * этого shape, а не переписывать поля руками (правило проекта №2 — не дублировать
84
- * схему). `makeUgcInput` пересобирается из ЭТОГО ЖЕ shape ниже, чтобы они не
85
- * разошлись.
86
- */
87
- /**
88
- * Один сегмент ролика. Форма объявляется ЗДЕСЬ, в Slice 1, хотя реализация —
89
- * в Slice 2 (US-526): поле `segments` требует `script → .optional()`, а это
90
- * меняет `required[]` в `tools/list`. Приедь правка позже, публичная форма
91
- * сменилась бы ПОСЛЕ проверки вторым пользователем и обесценила бы её —
92
- * единственную внешне фальсифицируемую проверку продукта. Здесь required-набор
93
- * меняется один раз, до гейта, а Slice 2 сводится к снятию строки отказа.
94
- */
49
+ export const MAKE_FACELESS_DESCRIPTION = "Start a paid 30–90 second finished faceless video from a script or brief. " +
50
+ "The video has an opening animated clip and image scenes. Captions are on by default and can be turned off.";
51
+ /** How to call `make_faceless` over MCP, kept apart from the REST description. */
52
+ export const MAKE_FACELESS_AGENT_PROTOCOL = "Call quote_faceless first and show the user the price. This does NOT wait for the video: it " +
53
+ "starts the run and returns a run_id IMMEDIATELY. Then poll get_run with that run_id until the " +
54
+ "state is 'succeeded' (video_url) or 'failed'. Pass attempt=2,3,… to deliberately start a NEW " +
55
+ "run for the same input.";
56
+ /** One clip segment. `segments` makes `script` optional, changing `required[]` in `tools/list`, */
57
+ /** so the shape was declared once up front instead of changing the public form later. */
95
58
  export const ugcSegment = z.object({
96
59
  kind: z.enum(["actor", "media"]),
97
- /** Реплика актёра. У `media`-сегмента отсутствует — там говорит соседний актёр. */
60
+ /** The actor's line. Absent on a `media` segment, where a neighboring actor speaks. */
98
61
  script: z.string().min(1).max(MAX_SCRIPT_CHARS).optional(),
99
- /** Полнокадровый врез. Обязателен у `media`, запрещён у `actor`. */
62
+ /** Full-frame cutaway. Required on `media`, forbidden on `actor`. */
100
63
  media_url: z.string().url().max(MAX_URL_LENGTH).optional(),
101
64
  media_type: z.enum(["image", "video"]).optional()
102
65
  .describe("Explicit media source type; omission means video, regardless of URL suffix. Availability follows the segments field."),
@@ -142,19 +105,17 @@ export const ugcInsert = z.object({
142
105
  }).strict().refine(insert => insert.image_motion === undefined || insert.media_type === "image", {
143
106
  path: ["image_motion"], message: "image_motion requires media_type=image",
144
107
  });
145
- /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
108
+ /** Actor segment cap: a limit on ONE run, not on daily spend. */
146
109
  export const MAX_ACTOR_SEGMENTS = 3;
147
110
  export const MAX_SEGMENTS = 5;
148
- /** Потолки НАРРАТИВНОГО пути — другие, потому что медиа-шот денег не стоит, */
149
- /** а актёрский стоит: вставок столько, сколько вмещает таймлайн (ADR #265). */
111
+ /** Narrated-path caps differ because a media shot costs nothing and an actor shot does: */
112
+ /** as many inserts as the timeline holds. */
150
113
  export const MAX_INSERTS = Math.floor((RESOLVED_TIMELINE_MAX_SLOTS - 1) / 2);
151
114
  export const MAX_NARRATED_ACTOR_SHOTS = 6;
152
115
  export const actorId = z.string().regex(/^actor_[a-z0-9][a-z0-9_-]{0,63}$/);
153
116
  export const makeUgcInputShape = {
154
- // НЕОБЯЗАТЕЛЬНЫЙ, но не «необязательный к заполнению»: ровно одно из
155
- // `script | segments` обязано присутствовать, и это держит `.refine` ниже.
156
- // JSON-Schema не умеет выразить «ровно одно из двух» через `required[]`,
157
- // поэтому информативность возвращается текстом описания (блокер B9).
117
+ // Exactly one of `script | segments` must be present, enforced by `.refine` below;
118
+ // JSON Schema cannot express that via `required[]`, so the description says it.
158
119
  script: z
159
120
  .string({ error: "script must be the text the actor says, as a string" })
160
121
  .min(1, "script is empty: pass the words the actor says")
@@ -175,10 +136,8 @@ export const makeUgcInputShape = {
175
136
  .optional()
176
137
  .describe("Saved Clipwright actor ID from list_actors. Choose actor_id, image, or person; do not combine them. " +
177
138
  "Without voice or voice_id the voice follows the actor's gender. Do not combine with actor_gender."),
178
- // ТОЛЬКО https-URL. Вариант `data:` снят (US-524): HeyGen принимает
179
- // исключительно `{type:"url"}`, а заливка data-URI в R2 с presigned-выдачей
180
- // вскрыла бы инвариант Этапа 4 «R2-URL вендору не передаются». Отказ на входе
181
- // честнее, чем приём поля, которое некуда деть.
139
+ // https URLs only: the vendor takes URLs, and storage URLs are never passed to vendors,
140
+ // so a `data:` URI is refused on input rather than accepted and dropped.
182
141
  image: z
183
142
  .string({ error: "image must be the https url of the photo, as a string" })
184
143
  .url("image is not a url: pass the https address of the photo, or upload it first")
@@ -190,7 +149,7 @@ export const makeUgcInputShape = {
190
149
  "use — private or loopback host, http, unreachable, redirecting, over 10 MB, or not one of " +
191
150
  "those image types — is refused (unusable_source) before any charge. We do not detect the " +
192
151
  "face's gender: pass actor_gender or voice, or the default male voice is used with a warning."),
193
- // Без .default(): молчание отличимо от подсказки, и на молчании приходит warning (clipwright#183).
152
+ // No .default(): silence differs from a hint, and silence gets a warning.
194
153
  actor_gender: z
195
154
  .enum(["female", "male"])
196
155
  .optional()
@@ -204,27 +163,22 @@ export const makeUgcInputShape = {
204
163
  captions: z.boolean().default(false),
205
164
  caption_style: z.enum(CAPTION_STYLES).default("hormozi"),
206
165
  look: z.enum(LOOKS).default("natural"),
207
- // Намеренно БЕЗ .default() — по той же причине, что и resolution ниже, но с
208
- // ПРОДУКТОВЫМ следствием: дефолт здесь означал бы «клиент всегда просит
209
- // 9:16», и резолвер формата не смог бы отличить молчание от явного выбора.
210
- // На этом различии стоит вся развилка: промолчал — снап к формату источника с
211
- // предупреждением, попросил явно и не сходится — отказ до платного вызова.
212
- // Дефолт подставляет DEFAULT_ASPECT_RATIO (aspect.ts).
166
+ // No .default(), so the resolver tells silence (snap with a warning) from an explicit
167
+ // choice (refused on conflict). DEFAULT_ASPECT_RATIO (aspect.ts) fills it in.
213
168
  aspect_ratio: z
214
169
  .enum(ASPECT_RATIOS)
215
170
  .optional()
216
171
  .describe(`Output format: ${ASPECT_RATIOS.join(" | ")}. Omitted means 9:16, and a source of another shape ` +
217
172
  "is snapped to 9:16 with a warning — pass it explicitly whenever you pass image. A mismatch " +
218
173
  "above 15% between the request and the source is refused (aspect_conflict) before any charge."),
219
- // Намеренно БЕЗ .default(): отличить «клиент попросил 1080p» от «клиент
220
- // промолчал» можно только так. Дефолт подставляет resolveResolution(),
221
- // потому что он зависит от окружения, а схема о нём знать не должна.
174
+ // No .default(): resolveResolution() fills it, since the default depends on the
175
+ // environment, which the schema must not know.
222
176
  resolution: z
223
177
  .enum(RESOLUTIONS)
224
178
  .optional()
225
179
  .describe(`Output resolution: ${RESOLUTIONS.join(" | ")} (short side 720 / 1080 / 2160 px). Omitted means 1080p.`),
226
- // Без .default(), как resolution: явный выбор голоса отличим от молчания (US-517).
227
- // voice — форма имени, список сверяет `serverUgcInput` (#164); voice_id — сырой id вендора.
180
+ // No .default(), like resolution: an explicit voice differs from silence. `voice` is a
181
+ // name form checked by `serverUgcInput`; `voice_id` is a raw vendor id.
228
182
  voice: z
229
183
  .string({ error: "voice must be a voice name from list_voices, as a string" })
230
184
  .regex(VOICE_NAME_PATTERN, "voice is not a voice name: take one from list_voices, or pass voice_id")
@@ -251,53 +205,32 @@ export const makeUgcInputShape = {
251
205
  "eleven_flash_v2_5 and eleven_turbo_v2_5 are cheaper alternatives for languages other than " +
252
206
  "Russian. " + SCRIPT_LENGTH_DESCRIPTION),
253
207
  webhook_url: z.string().url().max(MAX_URL_LENGTH).optional(),
254
- /**
255
- * Видимая плашка «сделано ИИ» поверх кадра — OPT-IN, а не обязательная.
256
- *
257
- * Обязательный вотермарк отменил бы заявленный дифференциатор («без
258
- * вотермарки»), поэтому раскрытие держится на контрактных полях и на теге
259
- * внутри файла, а плашка остаётся выбором вызывателя. Выжигание её в кадр
260
- * требует композиции: она появилась в US-527, и US-539 перевёл поле в
261
- * `implemented` (обусловлено флагом `CLIPWRIGHT_COMPOSE`).
262
- */
208
+ /** Visible "made with AI" overlay, OPT-IN: disclosure rests on contract fields and file */
209
+ /** metadata. Burning it in needs composition (gated by `CLIPWRIGHT_COMPOSE`). */
263
210
  disclosure_overlay: z.boolean().optional(),
264
- /**
265
- * Чем заполнять кадр, когда клип не покрывает его целиком (US-527).
266
- *
267
- * БЕЗ `.default()` НАМЕРЕННО. Дефолт здесь означал бы, что мы выбираем за
268
- * клиента, как выглядит его ролик там, где формат не совпал с источником, —
269
- * и выбираем МОЛЧА. Отсутствие поля значит «укладки не требуется»; если она
270
- * всё же понадобилась, ран обязан сказать об этом в `warnings[]`, а не
271
- * подобрать фон по своему вкусу.
272
- *
273
- * `contain` — вписать целиком (поля видны), `white` — белые поля как у
274
- * вендора, `blur` — размытая заливка тем же кадром.
275
- */
211
+ /** How to fill a frame the clip does not cover. No `.default()`: absence means no layout */
212
+ /** is needed. `contain` fits whole, `white` pads white, `blur` fills with the blurred frame. */
276
213
  background: z.enum(["white", "blur", "contain"]).optional(),
277
214
  };
278
- /**
279
- * Ретрай-параметр агентного скилла: НОМЕР попытки. Живёт в core (не рукописно в
280
- * MCP и CLI сразу), но ОТДЕЛЬНО от `makeUgcInputShape` — это вход СКИЛЛА
281
- * (порождает суффикс `:N` у ключа идемпотентности в SDK), а не параметр рендера.
282
- */
215
+ /** Agent retry parameter: the attempt NUMBER. Kept apart from `makeUgcInputShape` because it */
216
+ /** is a skill input (the `:N` idempotency-key suffix in the SDK), not a render parameter. */
283
217
  export const agentRetryShape = { attempt: z.number().int().min(1).optional() };
284
- // Общая схема REST/MCP/SDK: actor_id, person и image взаимоисключены.
285
- // character отклоняет реестр; person принимается с warning (docs/18, §14).
218
+ // Shared REST/MCP/SDK schema: actor_id, person and image are mutually exclusive.
219
+ // The registry rejects character; person is accepted with a warning.
286
220
  export const makeUgcInput = z
287
221
  .object(makeUgcInputShape)
288
- // Ровно одно из script | segments. Ни одного — рендерить нечего; оба —
289
- // непонятно, что говорить, и молча выбрать одно значило бы вернуть ту самую
290
- // молчаливую подмену.
222
+ // Exactly one of script | segments: with neither there is nothing to render; with
223
+ // both, silently picking one would be a silent substitution.
291
224
  .refine((v) => (v.script === undefined) !== (v.segments === undefined), {
292
225
  message: "pass exactly one of script | segments",
293
226
  })
294
227
  .refine(v => v.inserts === undefined || (v.script !== undefined && v.segments === undefined), {
295
228
  path: ["inserts"], message: "inserts requires script and cannot be combined with segments",
296
229
  })
297
- // Потолок символов — по модели: v3 короче v2 вдвое; отказ здесь, до резерва и вендора (#101).
298
- // Модель незнакомого клиенту голоса знает только сервер, и потолок он проверит сам (#164).
230
+ // The character cap depends on the model; refused here, before any reserve or vendor call.
231
+ // Only the server knows the model of a voice unknown to the client, and checks it there.
299
232
  .refine(
300
- // Пол `actor_id` клиенту неизвестен: у сегодняшних пресетов модель от пола не зависит.
233
+ // The client does not know an `actor_id`'s gender; today's preset models do not depend on it.
301
234
  (v) => modelUnknownToClient(v) ||
302
235
  ttsScriptLimitError(spokenTextOf(v), resolveTtsModel(v, v.actor_gender)) === undefined, {
303
236
  path: ["script"],
@@ -315,16 +248,15 @@ export const makeUgcInput = z
315
248
  path: ["actor_gender"],
316
249
  message: "actor_gender requires image: it describes the face in your photo; omit it, or pass image",
317
250
  })
318
- // Общие ограничения списка и обязательные поля ролей проверяются здесь.
319
- // Тип картинки, длительность и движение проверяет ugcSegment.
251
+ // List-wide limits and per-role required fields are checked here.
252
+ // Image type, duration and motion are checked by ugcSegment.
320
253
  .refine((v) => v.segments === undefined || v.segments.some((s) => s.kind === "actor"), {
321
254
  message: "segments must contain at least one actor segment: nobody speaks otherwise",
322
255
  })
323
256
  .refine((v) => v.segments === undefined ||
324
257
  v.segments.filter((s) => s.kind === "actor").length <= MAX_ACTOR_SEGMENTS, {
325
- // Потолок ограничивает ОДИН ран, а не суточные траты: денежная граница —
326
- // суточный потолок US-537, и путать их значило бы обещать защиту,
327
- // которую это число не даёт (PM3, принцип 5 плана).
258
+ // A per-run limit, not a daily spend cap: confusing the two would promise a
259
+ // protection this number does not give.
328
260
  message: `at most ${MAX_ACTOR_SEGMENTS} actor segments per clip`,
329
261
  })
330
262
  .refine((v) => v.segments === undefined ||
@@ -333,8 +265,8 @@ export const makeUgcInput = z
333
265
  v.segments.every((s) => s.kind !== "actor" || s.media_url === undefined), { message: "actor segment must not carry `media_url`: use a media segment for footage" })
334
266
  .refine((v) => v.segments === undefined ||
335
267
  v.segments.every((s) => s.kind !== "media" || s.media_url !== undefined), { message: "media segment requires `media_url`: there is no footage to show otherwise" })
336
- // Голос — ровно одним способом; здесь, а не в shape: .refine снимает .shape (ловушка A12).
337
- // Оба опущены → резолвер берёт голос по полу актёра (`resolveVoiceSelection`).
268
+ // One voice selector at most; checked here, not in the shape, since .refine drops .shape.
269
+ // With both omitted the resolver picks a voice by the actor's gender (`resolveVoiceSelection`).
338
270
  .refine((v) => !(v.voice !== undefined && v.voice_id !== undefined), { message: "pass at most one of voice | voice_id" })
339
271
  // Length includes whitespace; a nonempty string can still have no speech.
340
272
  .refine((v) => v.segments !== undefined || countWords(v.script ?? "") >= 1, {
@@ -343,15 +275,15 @@ export const makeUgcInput = z
343
275
  function modelUnknownToClient(v) {
344
276
  return v.tts_model === undefined && v.voice !== undefined && !isVoicePresetName(v.voice);
345
277
  }
346
- /** Вход API: имя голоса сверяет `voiceRefusal` сервера. Каталог сюда не импортируется — */
347
- /** баррел читают клиенты; сервер берёт готовую схему из `@clipwright/core/voice-admission`. */
278
+ /** API input: the server's `voiceRefusal` checks the voice name. The catalog is not imported */
279
+ /** here, since clients read this barrel; the server uses `@clipwright/core/voice-admission`. */
348
280
  export function serverUgcInputWith(voiceRefusal) {
349
281
  return makeUgcInput
350
282
  .refine((v) => v.voice === undefined || voiceRefusal(v.voice) === undefined, {
351
283
  path: ["voice"],
352
284
  error: (issue) => voiceRefusal(issue.input.voice),
353
285
  })
354
- // Потолок, пропущенный клиентом: модель допущенного голоса каталога сервер знает (#164).
286
+ // The cap the client skipped: the server knows the model of an admitted catalog voice.
355
287
  .refine((v) => !modelUnknownToClient(v) ||
356
288
  voiceRefusal(v.voice) !== undefined ||
357
289
  ttsScriptLimitError(spokenTextOf(v), resolveTtsModel(v, v.actor_gender)) === undefined, {
@@ -362,14 +294,14 @@ export function serverUgcInputWith(voiceRefusal) {
362
294
  },
363
295
  });
364
296
  }
365
- /** Сохранённый вход рана: правила допуска он уже прошёл, и смена модели или */
366
- /** потолка не должна делать старый ран нечитаемым (#145). Снимок — ради пола (#210). */
297
+ /** A stored run input already passed admission; a model or cap change must not make an */
298
+ /** old run unreadable. The snapshot keeps the actor's gender. */
367
299
  export const storedUgcInput = z.object({
368
300
  ...makeUgcInputShape,
369
301
  tts_model: z.string().optional(),
370
302
  actor_snapshot: z.object({ gender: z.enum(["female", "male"]).optional() }).optional(),
371
303
  });
372
- /** Склейка произносимого текста без проверок — общая база для гейтов и хелпера. */
304
+ /** Joins the spoken text without checks: the shared base for gates and the helper. */
373
305
  function spokenTextOf(input) {
374
306
  if (input.script !== undefined)
375
307
  return input.script;
@@ -378,18 +310,8 @@ function spokenTextOf(input) {
378
310
  .map((segment) => segment.script ?? "")
379
311
  .join(" ");
380
312
  }
381
- /**
382
- * ЕДИНСТВЕННОЕ место, где «`script` либо сам, либо склейка сегментов»
383
- * превращается в `string`.
384
- *
385
- * ЗАЧЕМ ХЕЛПЕР, А НЕ `!` НА СЕМИ CALL-SITE'АХ. Снятие обязательности со
386
- * `script` делает его `string | undefined` у каждого потребителя, и `.refine`
387
- * спасает в рантайме, а компилятор — нет. Самый чувствительный из них —
388
- * `elevenlabs-tts.ts`, где комментарий прямо опирался на `z.string().min(1)`
389
- * как на ГАРД ПЕРЕД ПЛАТНЫМ POST: заткни мы там типы, гард остался бы снятым,
390
- * а компилятор бы об этом молчал. Поэтому проверка непустоты живёт ВНУТРИ
391
- * хелпера и восстанавливает гард явно, а не полагается на снятую схему.
392
- */
313
+ /** The ONLY place where "script or joined segments" becomes a `string`. The non-empty */
314
+ /** check lives here, restoring the guard before the paid TTS call that the schema no longer holds. */
393
315
  export function resolvedScript(input) {
394
316
  const text = spokenTextOf(input);
395
317
  if (countWords(text) < 1) {
@@ -397,26 +319,20 @@ export function resolvedScript(input) {
397
319
  }
398
320
  return text;
399
321
  }
400
- // Тип ВХОДА (`MakeUgcInputArgs`) живёт в `contract-dispositions.ts`: он выводится
401
- // из ПРЕДЛАГАЕМОГО shape, а не из полного, иначе автокомплит SDK показывал бы
402
- // отклонённые поля, которые сервер отбивает четырёхсотым (блокер B4).
322
+ // The INPUT type (`MakeUgcInputArgs`) lives in `contract-dispositions.ts`: it comes from the
323
+ // OFFERED shape, so SDK autocomplete does not show rejected fields.
403
324
  export const quoteResponse = z.object({
404
325
  long_form_pricing: longFormQuoteSchema.optional(),
405
326
  skill: z.string(),
406
327
  credits_estimate: z.number().int().nonnegative(),
407
328
  duration_estimate_sec: z.number().positive(),
408
- // несоблюдаемые параметры объявляются заранее, а не молча игнорируются
329
+ // Unhonored parameters are declared up front, never silently ignored.
409
330
  warnings: z.array(z.string()).default([]),
410
- // Версия контракта в самом ответе, а не только в заголовке: агент, читающий
411
- // quote, обязан видеть, ПОД КАКОЙ контракт он получил цену.
331
+ // The contract version sits in the response too, so an agent reading the quote
332
+ // sees which contract the price was given under.
412
333
  contract_version: z.string(),
413
- /**
414
- * Что мы знаем об источнике кадра. `null` ТОЛЬКО когда `image` дан, но
415
- * пробу сделать не удалось — отсутствие `image` источником не является, там
416
- * стоит дефолтный актёр со своими размерами. Это и есть превращение
417
- * невидимой константы в наблюдаемую величину: агент видит, ПОЧЕМУ формат
418
- * получился таким, ещё до платного рендера.
419
- */
334
+ /** What we know about the frame source. `null` only when `image` was given but probing */
335
+ /** failed; without `image` the default actor's dimensions are reported. */
420
336
  source: z
421
337
  .object({
422
338
  width: z.number().positive(),
@@ -424,7 +340,7 @@ export const quoteResponse = z.object({
424
340
  aspect_ratio: z.string(),
425
341
  })
426
342
  .nullable(),
427
- /** Кто в кадре; `null` при клиентском `image`. Разбор — docs/18, Д50. */
343
+ /** Who is in the frame; `null` for a client `image`. */
428
344
  actor: z
429
345
  .object({
430
346
  gender: z.enum(["female", "male"]),
@@ -432,7 +348,7 @@ export const quoteResponse = z.object({
432
348
  version: z.number().int().positive().optional(),
433
349
  })
434
350
  .nullable(),
435
- /** Формат, который реально будет отрендерен на этом входе. */
351
+ /** The format that will actually be rendered for this input. */
436
352
  resolved_aspect_ratio: z.enum(ASPECT_RATIOS),
437
353
  tts_model: z.enum(TTS_MODELS),
438
354
  });
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,5 @@
1
1
  import type { VendorRefusalClass } from "./vendor-response.js";
2
- /**
3
- * Вендор-нейтральный контракт синтеза речи.
4
- *
5
- * ЗАЧЕМ отдельно от рендера: провайдеры TTS меняются независимо от провайдеров
6
- * аватара, и «ElevenLabs + HeyGen» — лишь одна из комбинаций.
7
- *
8
- * Ключевая причина существования этого файла — ТАЙМИНГИ. ElevenLabs отдаёт их
9
- * ПОСИМВОЛЬНО (проверено 18.07.2026: 134 символа → 134 тайминга), а этап B
10
- * ждёт пословные для `createTikTokStyleCaptions()`. Другой провайдер отдаст
11
- * пословные сразу или не отдаст вовсе. Нормализация обязана происходить в
12
- * адаптере, иначе посимвольный формат ElevenLabs протечёт в пайплайн субтитров
13
- * и намертво привяжет нас к вендору.
14
- */
15
- /** Тайминг одного слова. Единица, в которой пайплайн субтитров думает. */
2
+ /** Timing of one word: the unit the caption pipeline thinks in. */
16
3
  export interface WordTiming {
17
4
  word: string;
18
5
  startSec: number;
@@ -20,10 +7,10 @@ export interface WordTiming {
20
7
  }
21
8
  export interface SpeechRequest {
22
9
  text: string;
23
- /** Идентификатор голоса в терминах бэкенда. Маппинг наших пресетов — забота адаптера. */
10
+ /** Voice id in backend terms. Mapping our presets is the adapter's job. */
24
11
  voiceId: string;
25
12
  modelId: string;
26
- /** Наш run_id — для идемпотентности и трассировки на стороне вендора. */
13
+ /** Our run_id, for idempotency and vendor-side tracing. */
27
14
  runId: string;
28
15
  pace?: number;
29
16
  }
@@ -31,43 +18,27 @@ export interface SpeechResult {
31
18
  audio: Uint8Array;
32
19
  mimeType: string;
33
20
  durationSec: number;
34
- /**
35
- * Пословные тайминги. `null` — бэкенд их не отдаёт вовсе; тогда пайплайн
36
- * субтитров обязан добывать их отдельно (Whisper), и это должно быть видно
37
- * по типу, а не выясняться в рантайме.
38
- *
39
- * Адаптер обязан отдавать ПОСЛОВНЫЕ тайминги, даже если вендор отдал
40
- * посимвольные: агрегация — его работа, а не работа потребителя.
41
- */
21
+ /** Word timings, even when the vendor gives per-character ones: aggregating is the */
22
+ /** adapter's job. `null` means the backend gives none, visible in the type. */
42
23
  words: WordTiming[] | null;
43
24
  }
44
25
  export interface TtsCapabilities {
45
- /** Верхняя граница по моделям; адаптер проверяет лимит выбранной модели. null — неизвестно. */
26
+ /** Upper bound across models; the adapter checks the chosen model's limit. null: unknown. */
46
27
  maxChars: number | null;
47
- /** Отдаёт ли тайминги вообще. */
28
+ /** Whether it provides timings at all. */
48
29
  providesTimings: boolean;
49
- /**
50
- * Сколько запросов можно вести параллельно. У ElevenLabs зависит от тарифа
51
- * (Creator = 5) и упрётся раньше лимитов рендера при мульти-тейке в этапе B.
52
- */
30
+ /** How many requests may run in parallel; depends on the vendor plan and binds before */
31
+ /** render limits on multi-take runs. */
53
32
  maxConcurrency: number | null;
54
33
  }
55
34
  export interface TtsBackend {
56
35
  readonly name: string;
57
36
  readonly capabilities: TtsCapabilities;
58
37
  synthesize(req: SpeechRequest): Promise<SpeechResult>;
59
- /** Тот же обязательный член, что у `RenderBackend`: контрактов два, и */
60
- /** ElevenLabs реализует ЭТОТ. Разбор — `docs/18` §11.6. */
38
+ /** The same required member as on `RenderBackend`: there are two contracts, and a */
39
+ /** speech vendor implements THIS one. */
61
40
  classifyRefusal(error: unknown): VendorRefusalClass;
62
41
  }
63
- /**
64
- * Склейка посимвольных таймингов в пословные.
65
- *
66
- * Живёт здесь, а не в адаптере ElevenLabs, потому что посимвольный формат
67
- * встречается у нескольких вендоров, и переписывать эту логику под каждого —
68
- * лишняя работа с одинаковыми граничными случаями.
69
- *
70
- * Границей слова считается пробельный символ; сам пробел в слово не входит,
71
- * но и не рвёт уже начатое. Пустые слова не порождаются.
72
- */
42
+ /** Joins per-character timings into words, shared by vendors with that format. Whitespace */
43
+ /** ends a word without joining it; empty words are never produced. */
73
44
  export declare function charTimingsToWords(characters: readonly string[], startTimes: readonly number[], endTimes: readonly number[]): WordTiming[];