@clipwright/core 0.18.0 → 0.20.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 (124) hide show
  1. package/CHANGELOG.md +44 -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 +3 -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-short-61.d.ts +83 -0
  42. package/dist/faceless-short-61.js +152 -0
  43. package/dist/faceless-short-61.js.map +1 -0
  44. package/dist/faceless-storyboard-timing.d.ts +40 -0
  45. package/dist/faceless-storyboard-timing.js +97 -0
  46. package/dist/faceless-storyboard-timing.js.map +1 -0
  47. package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
  48. package/dist/faceless-storyboard-v2-plan.js +112 -0
  49. package/dist/faceless-storyboard-v2-plan.js.map +1 -0
  50. package/dist/faceless-storyboard-v2-timing.d.ts +52 -0
  51. package/dist/faceless-storyboard-v2-timing.js +136 -0
  52. package/dist/faceless-storyboard-v2-timing.js.map +1 -0
  53. package/dist/faceless-storyboard-v2.d.ts +44 -0
  54. package/dist/faceless-storyboard-v2.js +43 -0
  55. package/dist/faceless-storyboard-v2.js.map +1 -0
  56. package/dist/faceless-storyboard.d.ts +55 -0
  57. package/dist/faceless-storyboard.js +105 -0
  58. package/dist/faceless-storyboard.js.map +1 -0
  59. package/dist/idempotency.d.ts +8 -44
  60. package/dist/idempotency.js +10 -44
  61. package/dist/idempotency.js.map +1 -1
  62. package/dist/index.js +21 -25
  63. package/dist/index.js.map +1 -1
  64. package/dist/long-form-pricing.d.ts +4 -4
  65. package/dist/long-form-pricing.js +4 -4
  66. package/dist/long-form-pricing.js.map +1 -1
  67. package/dist/long-form-profile.d.ts +2 -2
  68. package/dist/long-form-profile.js +2 -2
  69. package/dist/long-form-profile.js.map +1 -1
  70. package/dist/pacing.d.ts +1 -1
  71. package/dist/pacing.js +1 -1
  72. package/dist/pacing.js.map +1 -1
  73. package/dist/public-endpoints.d.ts +9 -11
  74. package/dist/public-endpoints.js +11 -13
  75. package/dist/public-endpoints.js.map +1 -1
  76. package/dist/rate-limit.d.ts +23 -130
  77. package/dist/rate-limit.js +27 -132
  78. package/dist/rate-limit.js.map +1 -1
  79. package/dist/render-backend.d.ts +30 -145
  80. package/dist/render-backend.js +4 -27
  81. package/dist/render-backend.js.map +1 -1
  82. package/dist/run-preflight.d.ts +4 -4
  83. package/dist/run-preflight.js +10 -10
  84. package/dist/run-preflight.js.map +1 -1
  85. package/dist/run-static-warnings.d.ts +8 -8
  86. package/dist/run-static-warnings.js +24 -24
  87. package/dist/run-static-warnings.js.map +1 -1
  88. package/dist/runs.d.ts +18 -55
  89. package/dist/runs.js +26 -94
  90. package/dist/runs.js.map +1 -1
  91. package/dist/script-integrity.d.ts +6 -7
  92. package/dist/script-integrity.js +7 -8
  93. package/dist/script-integrity.js.map +1 -1
  94. package/dist/semantic-inserts.d.ts +4 -4
  95. package/dist/semantic-inserts.js +6 -6
  96. package/dist/semantic-inserts.js.map +1 -1
  97. package/dist/skills.d.ts +33 -107
  98. package/dist/skills.js +72 -161
  99. package/dist/skills.js.map +1 -1
  100. package/dist/tts-backend.d.ts +13 -42
  101. package/dist/tts-backend.js +2 -10
  102. package/dist/tts-backend.js.map +1 -1
  103. package/dist/uploads.d.ts +4 -4
  104. package/dist/uploads.js +4 -4
  105. package/dist/uploads.js.map +1 -1
  106. package/dist/vendor-response.d.ts +17 -80
  107. package/dist/vendor-response.js +19 -67
  108. package/dist/vendor-response.js.map +1 -1
  109. package/dist/voice-admission.d.ts +5 -5
  110. package/dist/voice-admission.js +6 -6
  111. package/dist/voice-admission.js.map +1 -1
  112. package/dist/voice-catalog-data.d.ts +2 -2
  113. package/dist/voice-catalog-data.js +2 -2
  114. package/dist/voice-catalog-data.js.map +1 -1
  115. package/dist/voice-catalog.d.ts +5 -5
  116. package/dist/voice-catalog.js +6 -6
  117. package/dist/voice-catalog.js.map +1 -1
  118. package/dist/voice-listing.d.ts +4 -4
  119. package/dist/voice-listing.js +6 -6
  120. package/dist/voice-listing.js.map +1 -1
  121. package/dist/voices.d.ts +40 -82
  122. package/dist/voices.js +56 -99
  123. package/dist/voices.js.map +1 -1
  124. package/package.json +1 -1
package/dist/skills.js CHANGED
@@ -6,95 +6,53 @@ 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`. */
29
+ /** Skills in the shared run namespace. `runs.skill` is text, so it is read through `parseSkill`. */
58
30
  export const SKILLS = ["make_ugc", "create_actor"];
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
- "run_id until the state is 'succeeded' (video_url) or 'failed'. Pass attempt=2,3,… to " +
45
+ "run_id until the state is 'succeeded' (video_url) or 'failed'. A 'failed' run whose paid " +
46
+ "vendor job we still hold can go back to 'queued' and reach 'succeeded' later; whenever that " +
47
+ "happens it is named in warnings[]. Pass attempt=2,3,… to " +
74
48
  "deliberately start a NEW run for the same input (retry after a failure).";
75
- /**
76
- * Сырой zod-shape входа make_ugc — БЕЗ `.refine()`.
77
- *
78
- * ЗАЧЕМ ОТДЕЛЬНО ОТ `makeUgcInput`: `makeUgcInput` после `.refine()` становится
79
- * `ZodEffects`, у которого НЕТ `.shape` (ловушка A12). MCP-тул (`tools/list`) и
80
- * прочие потребители, которым нужен именно объект полей, обязаны собираться из
81
- * этого shape, а не переписывать поля руками (правило проекта №2 — не дублировать
82
- * схему). `makeUgcInput` пересобирается из ЭТОГО ЖЕ shape ниже, чтобы они не
83
- * разошлись.
84
- */
85
- /**
86
- * Один сегмент ролика. Форма объявляется ЗДЕСЬ, в Slice 1, хотя реализация —
87
- * в Slice 2 (US-526): поле `segments` требует `script → .optional()`, а это
88
- * меняет `required[]` в `tools/list`. Приедь правка позже, публичная форма
89
- * сменилась бы ПОСЛЕ проверки вторым пользователем и обесценила бы её —
90
- * единственную внешне фальсифицируемую проверку продукта. Здесь required-набор
91
- * меняется один раз, до гейта, а Slice 2 сводится к снятию строки отказа.
92
- */
49
+ /** One clip segment. `segments` makes `script` optional, changing `required[]` in `tools/list`, */
50
+ /** so the shape was declared once up front instead of changing the public form later. */
93
51
  export const ugcSegment = z.object({
94
52
  kind: z.enum(["actor", "media"]),
95
- /** Реплика актёра. У `media`-сегмента отсутствует — там говорит соседний актёр. */
53
+ /** The actor's line. Absent on a `media` segment, where a neighboring actor speaks. */
96
54
  script: z.string().min(1).max(MAX_SCRIPT_CHARS).optional(),
97
- /** Полнокадровый врез. Обязателен у `media`, запрещён у `actor`. */
55
+ /** Full-frame cutaway. Required on `media`, forbidden on `actor`. */
98
56
  media_url: z.string().url().max(MAX_URL_LENGTH).optional(),
99
57
  media_type: z.enum(["image", "video"]).optional()
100
58
  .describe("Explicit media source type; omission means video, regardless of URL suffix. Availability follows the segments field."),
@@ -140,19 +98,17 @@ export const ugcInsert = z.object({
140
98
  }).strict().refine(insert => insert.image_motion === undefined || insert.media_type === "image", {
141
99
  path: ["image_motion"], message: "image_motion requires media_type=image",
142
100
  });
143
- /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
101
+ /** Actor segment cap: a limit on ONE run, not on daily spend. */
144
102
  export const MAX_ACTOR_SEGMENTS = 3;
145
103
  export const MAX_SEGMENTS = 5;
146
- /** Потолки НАРРАТИВНОГО пути — другие, потому что медиа-шот денег не стоит, */
147
- /** а актёрский стоит: вставок столько, сколько вмещает таймлайн (ADR #265). */
104
+ /** Narrated-path caps differ because a media shot costs nothing and an actor shot does: */
105
+ /** as many inserts as the timeline holds. */
148
106
  export const MAX_INSERTS = Math.floor((RESOLVED_TIMELINE_MAX_SLOTS - 1) / 2);
149
107
  export const MAX_NARRATED_ACTOR_SHOTS = 6;
150
108
  export const actorId = z.string().regex(/^actor_[a-z0-9][a-z0-9_-]{0,63}$/);
151
109
  export const makeUgcInputShape = {
152
- // НЕОБЯЗАТЕЛЬНЫЙ, но не «необязательный к заполнению»: ровно одно из
153
- // `script | segments` обязано присутствовать, и это держит `.refine` ниже.
154
- // JSON-Schema не умеет выразить «ровно одно из двух» через `required[]`,
155
- // поэтому информативность возвращается текстом описания (блокер B9).
110
+ // Exactly one of `script | segments` must be present, enforced by `.refine` below;
111
+ // JSON Schema cannot express that via `required[]`, so the description says it.
156
112
  script: z
157
113
  .string({ error: "script must be the text the actor says, as a string" })
158
114
  .min(1, "script is empty: pass the words the actor says")
@@ -173,10 +129,8 @@ export const makeUgcInputShape = {
173
129
  .optional()
174
130
  .describe("Saved Clipwright actor ID from list_actors. Choose actor_id, image, or person; do not combine them. " +
175
131
  "Without voice or voice_id the voice follows the actor's gender. Do not combine with actor_gender."),
176
- // ТОЛЬКО https-URL. Вариант `data:` снят (US-524): HeyGen принимает
177
- // исключительно `{type:"url"}`, а заливка data-URI в R2 с presigned-выдачей
178
- // вскрыла бы инвариант Этапа 4 «R2-URL вендору не передаются». Отказ на входе
179
- // честнее, чем приём поля, которое некуда деть.
132
+ // https URLs only: the vendor takes URLs, and storage URLs are never passed to vendors,
133
+ // so a `data:` URI is refused on input rather than accepted and dropped.
180
134
  image: z
181
135
  .string({ error: "image must be the https url of the photo, as a string" })
182
136
  .url("image is not a url: pass the https address of the photo, or upload it first")
@@ -188,7 +142,7 @@ export const makeUgcInputShape = {
188
142
  "use — private or loopback host, http, unreachable, redirecting, over 10 MB, or not one of " +
189
143
  "those image types — is refused (unusable_source) before any charge. We do not detect the " +
190
144
  "face's gender: pass actor_gender or voice, or the default male voice is used with a warning."),
191
- // Без .default(): молчание отличимо от подсказки, и на молчании приходит warning (clipwright#183).
145
+ // No .default(): silence differs from a hint, and silence gets a warning.
192
146
  actor_gender: z
193
147
  .enum(["female", "male"])
194
148
  .optional()
@@ -202,27 +156,22 @@ export const makeUgcInputShape = {
202
156
  captions: z.boolean().default(false),
203
157
  caption_style: z.enum(CAPTION_STYLES).default("hormozi"),
204
158
  look: z.enum(LOOKS).default("natural"),
205
- // Намеренно БЕЗ .default() — по той же причине, что и resolution ниже, но с
206
- // ПРОДУКТОВЫМ следствием: дефолт здесь означал бы «клиент всегда просит
207
- // 9:16», и резолвер формата не смог бы отличить молчание от явного выбора.
208
- // На этом различии стоит вся развилка: промолчал — снап к формату источника с
209
- // предупреждением, попросил явно и не сходится — отказ до платного вызова.
210
- // Дефолт подставляет DEFAULT_ASPECT_RATIO (aspect.ts).
159
+ // No .default(), so the resolver tells silence (snap with a warning) from an explicit
160
+ // choice (refused on conflict). DEFAULT_ASPECT_RATIO (aspect.ts) fills it in.
211
161
  aspect_ratio: z
212
162
  .enum(ASPECT_RATIOS)
213
163
  .optional()
214
164
  .describe(`Output format: ${ASPECT_RATIOS.join(" | ")}. Omitted means 9:16, and a source of another shape ` +
215
165
  "is snapped to 9:16 with a warning — pass it explicitly whenever you pass image. A mismatch " +
216
166
  "above 15% between the request and the source is refused (aspect_conflict) before any charge."),
217
- // Намеренно БЕЗ .default(): отличить «клиент попросил 1080p» от «клиент
218
- // промолчал» можно только так. Дефолт подставляет resolveResolution(),
219
- // потому что он зависит от окружения, а схема о нём знать не должна.
167
+ // No .default(): resolveResolution() fills it, since the default depends on the
168
+ // environment, which the schema must not know.
220
169
  resolution: z
221
170
  .enum(RESOLUTIONS)
222
171
  .optional()
223
172
  .describe(`Output resolution: ${RESOLUTIONS.join(" | ")} (short side 720 / 1080 / 2160 px). Omitted means 1080p.`),
224
- // Без .default(), как resolution: явный выбор голоса отличим от молчания (US-517).
225
- // voice — форма имени, список сверяет `serverUgcInput` (#164); voice_id — сырой id вендора.
173
+ // No .default(), like resolution: an explicit voice differs from silence. `voice` is a
174
+ // name form checked by `serverUgcInput`; `voice_id` is a raw vendor id.
226
175
  voice: z
227
176
  .string({ error: "voice must be a voice name from list_voices, as a string" })
228
177
  .regex(VOICE_NAME_PATTERN, "voice is not a voice name: take one from list_voices, or pass voice_id")
@@ -249,53 +198,32 @@ export const makeUgcInputShape = {
249
198
  "eleven_flash_v2_5 and eleven_turbo_v2_5 are cheaper alternatives for languages other than " +
250
199
  "Russian. " + SCRIPT_LENGTH_DESCRIPTION),
251
200
  webhook_url: z.string().url().max(MAX_URL_LENGTH).optional(),
252
- /**
253
- * Видимая плашка «сделано ИИ» поверх кадра — OPT-IN, а не обязательная.
254
- *
255
- * Обязательный вотермарк отменил бы заявленный дифференциатор («без
256
- * вотермарки»), поэтому раскрытие держится на контрактных полях и на теге
257
- * внутри файла, а плашка остаётся выбором вызывателя. Выжигание её в кадр
258
- * требует композиции: она появилась в US-527, и US-539 перевёл поле в
259
- * `implemented` (обусловлено флагом `CLIPWRIGHT_COMPOSE`).
260
- */
201
+ /** Visible "made with AI" overlay, OPT-IN: disclosure rests on contract fields and file */
202
+ /** metadata. Burning it in needs composition (gated by `CLIPWRIGHT_COMPOSE`). */
261
203
  disclosure_overlay: z.boolean().optional(),
262
- /**
263
- * Чем заполнять кадр, когда клип не покрывает его целиком (US-527).
264
- *
265
- * БЕЗ `.default()` НАМЕРЕННО. Дефолт здесь означал бы, что мы выбираем за
266
- * клиента, как выглядит его ролик там, где формат не совпал с источником, —
267
- * и выбираем МОЛЧА. Отсутствие поля значит «укладки не требуется»; если она
268
- * всё же понадобилась, ран обязан сказать об этом в `warnings[]`, а не
269
- * подобрать фон по своему вкусу.
270
- *
271
- * `contain` — вписать целиком (поля видны), `white` — белые поля как у
272
- * вендора, `blur` — размытая заливка тем же кадром.
273
- */
204
+ /** How to fill a frame the clip does not cover. No `.default()`: absence means no layout */
205
+ /** is needed. `contain` fits whole, `white` pads white, `blur` fills with the blurred frame. */
274
206
  background: z.enum(["white", "blur", "contain"]).optional(),
275
207
  };
276
- /**
277
- * Ретрай-параметр агентного скилла: НОМЕР попытки. Живёт в core (не рукописно в
278
- * MCP и CLI сразу), но ОТДЕЛЬНО от `makeUgcInputShape` — это вход СКИЛЛА
279
- * (порождает суффикс `:N` у ключа идемпотентности в SDK), а не параметр рендера.
280
- */
208
+ /** Agent retry parameter: the attempt NUMBER. Kept apart from `makeUgcInputShape` because it */
209
+ /** is a skill input (the `:N` idempotency-key suffix in the SDK), not a render parameter. */
281
210
  export const agentRetryShape = { attempt: z.number().int().min(1).optional() };
282
- // Общая схема REST/MCP/SDK: actor_id, person и image взаимоисключены.
283
- // character отклоняет реестр; person принимается с warning (docs/18, §14).
211
+ // Shared REST/MCP/SDK schema: actor_id, person and image are mutually exclusive.
212
+ // The registry rejects character; person is accepted with a warning.
284
213
  export const makeUgcInput = z
285
214
  .object(makeUgcInputShape)
286
- // Ровно одно из script | segments. Ни одного — рендерить нечего; оба —
287
- // непонятно, что говорить, и молча выбрать одно значило бы вернуть ту самую
288
- // молчаливую подмену.
215
+ // Exactly one of script | segments: with neither there is nothing to render; with
216
+ // both, silently picking one would be a silent substitution.
289
217
  .refine((v) => (v.script === undefined) !== (v.segments === undefined), {
290
218
  message: "pass exactly one of script | segments",
291
219
  })
292
220
  .refine(v => v.inserts === undefined || (v.script !== undefined && v.segments === undefined), {
293
221
  path: ["inserts"], message: "inserts requires script and cannot be combined with segments",
294
222
  })
295
- // Потолок символов — по модели: v3 короче v2 вдвое; отказ здесь, до резерва и вендора (#101).
296
- // Модель незнакомого клиенту голоса знает только сервер, и потолок он проверит сам (#164).
223
+ // The character cap depends on the model; refused here, before any reserve or vendor call.
224
+ // Only the server knows the model of a voice unknown to the client, and checks it there.
297
225
  .refine(
298
- // Пол `actor_id` клиенту неизвестен: у сегодняшних пресетов модель от пола не зависит.
226
+ // The client does not know an `actor_id`'s gender; today's preset models do not depend on it.
299
227
  (v) => modelUnknownToClient(v) ||
300
228
  ttsScriptLimitError(spokenTextOf(v), resolveTtsModel(v, v.actor_gender)) === undefined, {
301
229
  path: ["script"],
@@ -313,16 +241,15 @@ export const makeUgcInput = z
313
241
  path: ["actor_gender"],
314
242
  message: "actor_gender requires image: it describes the face in your photo; omit it, or pass image",
315
243
  })
316
- // Общие ограничения списка и обязательные поля ролей проверяются здесь.
317
- // Тип картинки, длительность и движение проверяет ugcSegment.
244
+ // List-wide limits and per-role required fields are checked here.
245
+ // Image type, duration and motion are checked by ugcSegment.
318
246
  .refine((v) => v.segments === undefined || v.segments.some((s) => s.kind === "actor"), {
319
247
  message: "segments must contain at least one actor segment: nobody speaks otherwise",
320
248
  })
321
249
  .refine((v) => v.segments === undefined ||
322
250
  v.segments.filter((s) => s.kind === "actor").length <= MAX_ACTOR_SEGMENTS, {
323
- // Потолок ограничивает ОДИН ран, а не суточные траты: денежная граница —
324
- // суточный потолок US-537, и путать их значило бы обещать защиту,
325
- // которую это число не даёт (PM3, принцип 5 плана).
251
+ // A per-run limit, not a daily spend cap: confusing the two would promise a
252
+ // protection this number does not give.
326
253
  message: `at most ${MAX_ACTOR_SEGMENTS} actor segments per clip`,
327
254
  })
328
255
  .refine((v) => v.segments === undefined ||
@@ -331,8 +258,8 @@ export const makeUgcInput = z
331
258
  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" })
332
259
  .refine((v) => v.segments === undefined ||
333
260
  v.segments.every((s) => s.kind !== "media" || s.media_url !== undefined), { message: "media segment requires `media_url`: there is no footage to show otherwise" })
334
- // Голос — ровно одним способом; здесь, а не в shape: .refine снимает .shape (ловушка A12).
335
- // Оба опущены → резолвер берёт голос по полу актёра (`resolveVoiceSelection`).
261
+ // One voice selector at most; checked here, not in the shape, since .refine drops .shape.
262
+ // With both omitted the resolver picks a voice by the actor's gender (`resolveVoiceSelection`).
336
263
  .refine((v) => !(v.voice !== undefined && v.voice_id !== undefined), { message: "pass at most one of voice | voice_id" })
337
264
  // Length includes whitespace; a nonempty string can still have no speech.
338
265
  .refine((v) => v.segments !== undefined || countWords(v.script ?? "") >= 1, {
@@ -341,15 +268,15 @@ export const makeUgcInput = z
341
268
  function modelUnknownToClient(v) {
342
269
  return v.tts_model === undefined && v.voice !== undefined && !isVoicePresetName(v.voice);
343
270
  }
344
- /** Вход API: имя голоса сверяет `voiceRefusal` сервера. Каталог сюда не импортируется — */
345
- /** баррел читают клиенты; сервер берёт готовую схему из `@clipwright/core/voice-admission`. */
271
+ /** API input: the server's `voiceRefusal` checks the voice name. The catalog is not imported */
272
+ /** here, since clients read this barrel; the server uses `@clipwright/core/voice-admission`. */
346
273
  export function serverUgcInputWith(voiceRefusal) {
347
274
  return makeUgcInput
348
275
  .refine((v) => v.voice === undefined || voiceRefusal(v.voice) === undefined, {
349
276
  path: ["voice"],
350
277
  error: (issue) => voiceRefusal(issue.input.voice),
351
278
  })
352
- // Потолок, пропущенный клиентом: модель допущенного голоса каталога сервер знает (#164).
279
+ // The cap the client skipped: the server knows the model of an admitted catalog voice.
353
280
  .refine((v) => !modelUnknownToClient(v) ||
354
281
  voiceRefusal(v.voice) !== undefined ||
355
282
  ttsScriptLimitError(spokenTextOf(v), resolveTtsModel(v, v.actor_gender)) === undefined, {
@@ -360,14 +287,14 @@ export function serverUgcInputWith(voiceRefusal) {
360
287
  },
361
288
  });
362
289
  }
363
- /** Сохранённый вход рана: правила допуска он уже прошёл, и смена модели или */
364
- /** потолка не должна делать старый ран нечитаемым (#145). Снимок — ради пола (#210). */
290
+ /** A stored run input already passed admission; a model or cap change must not make an */
291
+ /** old run unreadable. The snapshot keeps the actor's gender. */
365
292
  export const storedUgcInput = z.object({
366
293
  ...makeUgcInputShape,
367
294
  tts_model: z.string().optional(),
368
295
  actor_snapshot: z.object({ gender: z.enum(["female", "male"]).optional() }).optional(),
369
296
  });
370
- /** Склейка произносимого текста без проверок — общая база для гейтов и хелпера. */
297
+ /** Joins the spoken text without checks: the shared base for gates and the helper. */
371
298
  function spokenTextOf(input) {
372
299
  if (input.script !== undefined)
373
300
  return input.script;
@@ -376,18 +303,8 @@ function spokenTextOf(input) {
376
303
  .map((segment) => segment.script ?? "")
377
304
  .join(" ");
378
305
  }
379
- /**
380
- * ЕДИНСТВЕННОЕ место, где «`script` либо сам, либо склейка сегментов»
381
- * превращается в `string`.
382
- *
383
- * ЗАЧЕМ ХЕЛПЕР, А НЕ `!` НА СЕМИ CALL-SITE'АХ. Снятие обязательности со
384
- * `script` делает его `string | undefined` у каждого потребителя, и `.refine`
385
- * спасает в рантайме, а компилятор — нет. Самый чувствительный из них —
386
- * `elevenlabs-tts.ts`, где комментарий прямо опирался на `z.string().min(1)`
387
- * как на ГАРД ПЕРЕД ПЛАТНЫМ POST: заткни мы там типы, гард остался бы снятым,
388
- * а компилятор бы об этом молчал. Поэтому проверка непустоты живёт ВНУТРИ
389
- * хелпера и восстанавливает гард явно, а не полагается на снятую схему.
390
- */
306
+ /** The ONLY place where "script or joined segments" becomes a `string`. The non-empty */
307
+ /** check lives here, restoring the guard before the paid TTS call that the schema no longer holds. */
391
308
  export function resolvedScript(input) {
392
309
  const text = spokenTextOf(input);
393
310
  if (countWords(text) < 1) {
@@ -395,26 +312,20 @@ export function resolvedScript(input) {
395
312
  }
396
313
  return text;
397
314
  }
398
- // Тип ВХОДА (`MakeUgcInputArgs`) живёт в `contract-dispositions.ts`: он выводится
399
- // из ПРЕДЛАГАЕМОГО shape, а не из полного, иначе автокомплит SDK показывал бы
400
- // отклонённые поля, которые сервер отбивает четырёхсотым (блокер B4).
315
+ // The INPUT type (`MakeUgcInputArgs`) lives in `contract-dispositions.ts`: it comes from the
316
+ // OFFERED shape, so SDK autocomplete does not show rejected fields.
401
317
  export const quoteResponse = z.object({
402
318
  long_form_pricing: longFormQuoteSchema.optional(),
403
319
  skill: z.string(),
404
320
  credits_estimate: z.number().int().nonnegative(),
405
321
  duration_estimate_sec: z.number().positive(),
406
- // несоблюдаемые параметры объявляются заранее, а не молча игнорируются
322
+ // Unhonored parameters are declared up front, never silently ignored.
407
323
  warnings: z.array(z.string()).default([]),
408
- // Версия контракта в самом ответе, а не только в заголовке: агент, читающий
409
- // quote, обязан видеть, ПОД КАКОЙ контракт он получил цену.
324
+ // The contract version sits in the response too, so an agent reading the quote
325
+ // sees which contract the price was given under.
410
326
  contract_version: z.string(),
411
- /**
412
- * Что мы знаем об источнике кадра. `null` ТОЛЬКО когда `image` дан, но
413
- * пробу сделать не удалось — отсутствие `image` источником не является, там
414
- * стоит дефолтный актёр со своими размерами. Это и есть превращение
415
- * невидимой константы в наблюдаемую величину: агент видит, ПОЧЕМУ формат
416
- * получился таким, ещё до платного рендера.
417
- */
327
+ /** What we know about the frame source. `null` only when `image` was given but probing */
328
+ /** failed; without `image` the default actor's dimensions are reported. */
418
329
  source: z
419
330
  .object({
420
331
  width: z.number().positive(),
@@ -422,7 +333,7 @@ export const quoteResponse = z.object({
422
333
  aspect_ratio: z.string(),
423
334
  })
424
335
  .nullable(),
425
- /** Кто в кадре; `null` при клиентском `image`. Разбор — docs/18, Д50. */
336
+ /** Who is in the frame; `null` for a client `image`. */
426
337
  actor: z
427
338
  .object({
428
339
  gender: z.enum(["female", "male"]),
@@ -430,7 +341,7 @@ export const quoteResponse = z.object({
430
341
  version: z.number().int().positive().optional(),
431
342
  })
432
343
  .nullable(),
433
- /** Формат, который реально будет отрендерен на этом входе. */
344
+ /** The format that will actually be rendered for this input. */
434
345
  resolved_aspect_ratio: z.enum(ASPECT_RATIOS),
435
346
  tts_model: z.enum(TTS_MODELS),
436
347
  });
@@ -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[];
@@ -1,13 +1,5 @@
1
- /**
2
- * Склейка посимвольных таймингов в пословные.
3
- *
4
- * Живёт здесь, а не в адаптере ElevenLabs, потому что посимвольный формат
5
- * встречается у нескольких вендоров, и переписывать эту логику под каждого —
6
- * лишняя работа с одинаковыми граничными случаями.
7
- *
8
- * Границей слова считается пробельный символ; сам пробел в слово не входит,
9
- * но и не рвёт уже начатое. Пустые слова не порождаются.
10
- */
1
+ /** Joins per-character timings into words, shared by vendors with that format. Whitespace */
2
+ /** ends a word without joining it; empty words are never produced. */
11
3
  export function charTimingsToWords(characters, startTimes, endTimes) {
12
4
  if (characters.length !== startTimes.length || characters.length !== endTimes.length) {
13
5
  throw new Error(`character/timing length mismatch: ${characters.length} chars, ` +