@clipwright/core 0.6.0 → 0.8.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.
package/dist/runs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Целостность присланного текста: ловим ДОКАЗАННУЮ потерю байтов, а не догадку */
2
+ /** о ней. Разбор и границы — `docs/18-render-contract.md` §13. */
3
+ /** Знак-заменителя Unicode. Его появление означает, что байты уже потеряны. */
4
+ export declare const REPLACEMENT_CHAR = "\uFFFD";
5
+ /** СТОРОЖ ПОЛУЧАЕТ ПРОЦЕДУРУ, А НЕ ПЕРЕЧЕНЬ ПОЛЕЙ (`docs/35` §2): обходим все */
6
+ /** строковые листья, поэтому новое текстовое поле попадает под проверку само. */
7
+ export declare function damagedTextPaths(input: unknown): string[];
8
+ /** Сколько знаков-заменителя во всех строковых листьях вместе. Число идёт в */
9
+ /** сообщение: одно вхождение и сотня — разные аварии для того, кто чинит. */
10
+ export declare function damagedCharCount(input: unknown): number;
@@ -0,0 +1,58 @@
1
+ /** Целостность присланного текста: ловим ДОКАЗАННУЮ потерю байтов, а не догадку */
2
+ /** о ней. Разбор и границы — `docs/18-render-contract.md` §13. */
3
+ /** Знак-заменителя Unicode. Его появление означает, что байты уже потеряны. */
4
+ export const REPLACEMENT_CHAR = "�";
5
+ /** Ограничитель обхода: вход разбирается zod-схемой, но глубина у неё не задана. */
6
+ const MAX_DEPTH = 16;
7
+ function walk(value, path, depth, hits) {
8
+ if (depth > MAX_DEPTH)
9
+ return;
10
+ if (typeof value === "string") {
11
+ if (value.includes(REPLACEMENT_CHAR))
12
+ hits.push(path);
13
+ return;
14
+ }
15
+ if (Array.isArray(value)) {
16
+ value.forEach((item, index) => {
17
+ walk(item, path === "" ? String(index) : `${path}.${index}`, depth + 1, hits);
18
+ });
19
+ return;
20
+ }
21
+ if (value !== null && typeof value === "object") {
22
+ for (const [key, item] of Object.entries(value)) {
23
+ walk(item, path === "" ? key : `${path}.${key}`, depth + 1, hits);
24
+ }
25
+ }
26
+ }
27
+ /** СТОРОЖ ПОЛУЧАЕТ ПРОЦЕДУРУ, А НЕ ПЕРЕЧЕНЬ ПОЛЕЙ (`docs/35` §2): обходим все */
28
+ /** строковые листья, поэтому новое текстовое поле попадает под проверку само. */
29
+ export function damagedTextPaths(input) {
30
+ const hits = [];
31
+ walk(input, "", 0, hits);
32
+ return hits.sort();
33
+ }
34
+ /** Сколько знаков-заменителя во всех строковых листьях вместе. Число идёт в */
35
+ /** сообщение: одно вхождение и сотня — разные аварии для того, кто чинит. */
36
+ export function damagedCharCount(input) {
37
+ const paths = damagedTextPaths(input);
38
+ if (paths.length === 0)
39
+ return 0;
40
+ let total = 0;
41
+ const count = (value) => {
42
+ if (typeof value === "string") {
43
+ for (const ch of value)
44
+ if (ch === REPLACEMENT_CHAR)
45
+ total += 1;
46
+ return;
47
+ }
48
+ if (Array.isArray(value)) {
49
+ value.forEach(count);
50
+ return;
51
+ }
52
+ if (value !== null && typeof value === "object")
53
+ Object.values(value).forEach(count);
54
+ };
55
+ count(input);
56
+ return total;
57
+ }
58
+ //# sourceMappingURL=script-integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-integrity.js","sourceRoot":"","sources":["../src/script-integrity.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,kEAAkE;AAElE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,oFAAoF;AACpF,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,SAAS,IAAI,CAAC,KAAc,EAAE,IAAY,EAAE,KAAa,EAAE,IAAc;IACvE,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO;IAE9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,CAAC,KAAc,EAAQ,EAAE;QACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,MAAM,EAAE,IAAI,KAAK;gBAAE,IAAI,EAAE,KAAK,gBAAgB;oBAAE,KAAK,IAAI,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,CAAC;IACb,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/skills.d.ts CHANGED
@@ -44,36 +44,6 @@ export declare const DEV_RESOLUTION: Resolution;
44
44
  * иначе dev-окружение молча подменяло бы то, что пользователь запросил.
45
45
  */
46
46
  export declare function resolveResolution(requested: Resolution | undefined, isDev: boolean): Resolution;
47
- /**
48
- * ⚠️ ЭТО БАЗИС ВЫВОДА ПОТОЛКА СЛОВ, А НЕ ПОТОЛОК СЕКУНД, и имя переименовано
49
- * ровно поэтому (находка внешней приёмки, круг 23). Прежнее — `MAX_SCRIPT_SECONDS`
50
- * — читалось как «максимум секунд» и дважды подряд стало источником ДЕНЕЖНОГО
51
- * дефекта на публичной странице цены: ею зажимали длительность, обещая клиенту
52
- * меньше возможного счёта. Схема ограничивает только СЛОВА; сколько из них выйдет
53
- * секунд, не ограничено ничем, потому что гейт пейсинга удалён.
54
- *
55
- * Число осталось прежним, роль названа честно: это множимое, из которого вместе
56
- * с быстрым краем пейсинга получается `MAX_SCRIPT_WORDS`.
57
- *
58
- * ⚠️ ИСХОДНЫЙ ДОВОД НИЖЕ ОПИСЫВАЕТ ПОЛОЖЕНИЕ ДО УДАЛЕНИЯ ГЕЙТА ПЕЙСИНГА и
59
- * оставлен как история, а не как действующее объяснение (находка внешней
60
- * приёмки, круг 24): он объясняет число через «~45с озвучки» и пейсинг-гейт,
61
- * которого с 2026-07-22 не существует. Действующее объяснение — абзац выше:
62
- * это множимое, и ограничивает контракт только слова.
63
- *
64
- * Исходный довод (docs/12 §11) — временная замена
65
- * мульти-тейка (docs/12 §3: длинные скрипты раньше резались на несколько
66
- * тейков, эта логика вырезана на время прототипа). Пока мульти-тейк не
67
- * вернули, скрипт длиннее одного тейка нужно отклонять на входе, а не
68
- * молча обрезать или рендерить с нарушением пейсинг-гейта.
69
- *
70
- * Число слов считаем от ВЕРХНЕЙ границы пейсинга (WORDS_PER_SECOND_MAX из
71
- * pacing.ts) — это самый длинный скрипт, который ещё способен уложиться в
72
- * потолок секунд без нарушения пейсинг-гейта. Числа пейсинга не дублируем,
73
- * берём готовые константы из pacing.ts.
74
- */
75
- export declare const SCRIPT_SECONDS_BASIS = 45;
76
- export declare const MAX_SCRIPT_WORDS: number;
77
47
  /** Потолок длины ЛЮБОГО адреса из чужого тела: без него поле берёт весь потолок */
78
48
  /** тела запроса. Число — верхний предел, который переваривает любой браузер и CDN. */
79
49
  export declare const MAX_URL_LENGTH = 2048;
@@ -113,6 +83,7 @@ export type UgcSegment = z.infer<typeof ugcSegment>;
113
83
  /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
114
84
  export declare const MAX_ACTOR_SEGMENTS = 3;
115
85
  export declare const MAX_SEGMENTS = 5;
86
+ export declare const actorId: z.ZodString;
116
87
  export declare const makeUgcInputShape: {
117
88
  readonly script: z.ZodOptional<z.ZodString>;
118
89
  readonly segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -124,6 +95,7 @@ export declare const makeUgcInputShape: {
124
95
  media_url: z.ZodOptional<z.ZodString>;
125
96
  }, z.core.$strip>>>;
126
97
  readonly person: z.ZodOptional<z.ZodString>;
98
+ readonly actor_id: z.ZodOptional<z.ZodString>;
127
99
  readonly image: z.ZodOptional<z.ZodString>;
128
100
  readonly character: z.ZodOptional<z.ZodString>;
129
101
  readonly name: z.ZodOptional<z.ZodString>;
@@ -198,16 +170,6 @@ export declare const makeUgcInputShape: {
198
170
  export declare const agentRetryShape: {
199
171
  readonly attempt: z.ZodOptional<z.ZodNumber>;
200
172
  };
201
- /**
202
- * Вход make_ugc. Не более одного из person | image задаёт идентичность (оба
203
- * опущены → дефолтный актёр). Схема — единый источник правды для REST, MCP
204
- * (tools/list) и SDK.
205
- *
206
- * `character` из взаимоисключения ВЫВЕДЕН, а не забыт: его диспозиция —
207
- * `rejected` (`contract-dispositions.ts`), то есть поле отбивается на входе
208
- * раньше, чем дойдёт до этой проверки. Держать его здесь значило бы
209
- * валидировать выбор между вариантами, один из которых не существует.
210
- */
211
173
  export declare const makeUgcInput: z.ZodObject<{
212
174
  script: z.ZodOptional<z.ZodString>;
213
175
  segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -219,6 +181,7 @@ export declare const makeUgcInput: z.ZodObject<{
219
181
  media_url: z.ZodOptional<z.ZodString>;
220
182
  }, z.core.$strip>>>;
221
183
  person: z.ZodOptional<z.ZodString>;
184
+ actor_id: z.ZodOptional<z.ZodString>;
222
185
  image: z.ZodOptional<z.ZodString>;
223
186
  character: z.ZodOptional<z.ZodString>;
224
187
  name: z.ZodOptional<z.ZodString>;
@@ -294,6 +257,14 @@ export declare const quoteResponse: z.ZodObject<{
294
257
  height: z.ZodNumber;
295
258
  aspect_ratio: z.ZodString;
296
259
  }, z.core.$strip>>;
260
+ actor: z.ZodNullable<z.ZodObject<{
261
+ gender: z.ZodEnum<{
262
+ female: "female";
263
+ male: "male";
264
+ }>;
265
+ actor_id: z.ZodOptional<z.ZodString>;
266
+ version: z.ZodOptional<z.ZodNumber>;
267
+ }, z.core.$strip>>;
297
268
  resolved_aspect_ratio: z.ZodEnum<{
298
269
  "16:9": "16:9";
299
270
  "1:1": "1:1";
package/dist/skills.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import { WORDS_PER_SECOND_MAX, countWords } from "./pacing.js";
3
- import { resolveTtsModel, TTS_MODEL_CHAR_CAP, TTS_MODELS, VOICE_ID_PATTERN, VOICE_PRESET_NAMES, } from "./voices.js";
2
+ import { countWords } from "./pacing.js";
3
+ import { resolveTtsModel, MAX_SCRIPT_CHARS, SCRIPT_LENGTH_DESCRIPTION, ttsScriptLimitError, TTS_MODELS, VOICE_ID_PATTERN, VOICE_PRESET_NAMES, } from "./voices.js";
4
4
  export const CAPTION_STYLES = ["hormozi", "tiktok", "minimal"];
5
5
  export const LOOKS = ["natural", "commercial", "raw_iphone"];
6
6
  /**
@@ -48,42 +48,12 @@ export function resolveResolution(requested, isDev) {
48
48
  return requested;
49
49
  return isDev ? DEV_RESOLUTION : DEFAULT_RESOLUTION;
50
50
  }
51
- /**
52
- * ⚠️ ЭТО БАЗИС ВЫВОДА ПОТОЛКА СЛОВ, А НЕ ПОТОЛОК СЕКУНД, и имя переименовано
53
- * ровно поэтому (находка внешней приёмки, круг 23). Прежнее — `MAX_SCRIPT_SECONDS`
54
- * — читалось как «максимум секунд» и дважды подряд стало источником ДЕНЕЖНОГО
55
- * дефекта на публичной странице цены: ею зажимали длительность, обещая клиенту
56
- * меньше возможного счёта. Схема ограничивает только СЛОВА; сколько из них выйдет
57
- * секунд, не ограничено ничем, потому что гейт пейсинга удалён.
58
- *
59
- * Число осталось прежним, роль названа честно: это множимое, из которого вместе
60
- * с быстрым краем пейсинга получается `MAX_SCRIPT_WORDS`.
61
- *
62
- * ⚠️ ИСХОДНЫЙ ДОВОД НИЖЕ ОПИСЫВАЕТ ПОЛОЖЕНИЕ ДО УДАЛЕНИЯ ГЕЙТА ПЕЙСИНГА и
63
- * оставлен как история, а не как действующее объяснение (находка внешней
64
- * приёмки, круг 24): он объясняет число через «~45с озвучки» и пейсинг-гейт,
65
- * которого с 2026-07-22 не существует. Действующее объяснение — абзац выше:
66
- * это множимое, и ограничивает контракт только слова.
67
- *
68
- * Исходный довод (docs/12 §11) — временная замена
69
- * мульти-тейка (docs/12 §3: длинные скрипты раньше резались на несколько
70
- * тейков, эта логика вырезана на время прототипа). Пока мульти-тейк не
71
- * вернули, скрипт длиннее одного тейка нужно отклонять на входе, а не
72
- * молча обрезать или рендерить с нарушением пейсинг-гейта.
73
- *
74
- * Число слов считаем от ВЕРХНЕЙ границы пейсинга (WORDS_PER_SECOND_MAX из
75
- * pacing.ts) — это самый длинный скрипт, который ещё способен уложиться в
76
- * потолок секунд без нарушения пейсинг-гейта. Числа пейсинга не дублируем,
77
- * берём готовые константы из pacing.ts.
78
- */
79
- export const SCRIPT_SECONDS_BASIS = 45;
80
- export const MAX_SCRIPT_WORDS = SCRIPT_SECONDS_BASIS * WORDS_PER_SECOND_MAX;
81
51
  /** Потолок длины ЛЮБОГО адреса из чужого тела: без него поле берёт весь потолок */
82
52
  /** тела запроса. Число — верхний предел, который переваривает любой браузер и CDN. */
83
53
  export const MAX_URL_LENGTH = 2048;
84
54
  /** ЧТО ДЕЛАЕТ `make_ugc` — один текст на обе контрактные поверхности: публичный */
85
55
  /** REST-каталог и MCP `tools/list`. Разойдясь, они описали бы РАЗНЫЙ скилл. */
86
- export const MAKE_UGC_DESCRIPTION = "Start generation of a lip-synced UGC video. Give a script (any length); the actor comes " +
56
+ 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 " +
87
57
  "from person (described in words) or image. Format and resolution follow the request and " +
88
58
  "the source, defaulting to 1080x1920. Captions are OPT-IN: ask the user first. Fields the " +
89
59
  "renderer does not honor yet carry a NOT HONORED YET note in their own description — read " +
@@ -115,13 +85,14 @@ export const MAKE_UGC_AGENT_PROTOCOL = "Call quote_ugc before generating and sho
115
85
  export const ugcSegment = z.object({
116
86
  kind: z.enum(["actor", "media"]),
117
87
  /** Реплика актёра. У `media`-сегмента отсутствует — там говорит соседний актёр. */
118
- script: z.string().min(1).max(10_000).optional(),
88
+ script: z.string().min(1).max(MAX_SCRIPT_CHARS).optional(),
119
89
  /** Полнокадровый врез. Обязателен у `media`, запрещён у `actor`. */
120
90
  media_url: z.string().url().max(MAX_URL_LENGTH).optional(),
121
91
  });
122
92
  /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
123
93
  export const MAX_ACTOR_SEGMENTS = 3;
124
94
  export const MAX_SEGMENTS = 5;
95
+ export const actorId = z.string().regex(/^actor_[a-z0-9][a-z0-9_-]{0,63}$/);
125
96
  export const makeUgcInputShape = {
126
97
  // НЕОБЯЗАТЕЛЬНЫЙ, но не «необязательный к заполнению»: ровно одно из
127
98
  // `script | segments` обязано присутствовать, и это держит `.refine` ниже.
@@ -130,11 +101,12 @@ export const makeUgcInputShape = {
130
101
  script: z
131
102
  .string()
132
103
  .min(1)
133
- .max(10_000)
104
+ .max(MAX_SCRIPT_CHARS)
134
105
  .optional()
135
- .describe("required unless `segments` is provided; `segments` is currently rejected"),
106
+ .describe(`required unless \`segments\` is provided; \`segments\` is currently rejected. ${SCRIPT_LENGTH_DESCRIPTION}`),
136
107
  segments: z.array(ugcSegment).min(1).max(MAX_SEGMENTS).optional(),
137
108
  person: z.string().min(1).max(500).optional(),
109
+ actor_id: actorId.optional().describe("Saved Clipwright actor ID from list_actors. Choose actor_id, image, or person; do not combine them."),
138
110
  // ТОЛЬКО https-URL. Вариант `data:` снят (US-524): HeyGen принимает
139
111
  // исключительно `{type:"url"}`, а заливка data-URI в R2 с presigned-выдачей
140
112
  // вскрыла бы инвариант Этапа 4 «R2-URL вендору не передаются». Отказ на входе
@@ -195,7 +167,7 @@ export const makeUgcInputShape = {
195
167
  .optional()
196
168
  .describe(`Speech model: ${TTS_MODELS.join(" | ")}. Omitted means the model of the chosen preset ` +
197
169
  "(list_voices shows it; owner_ru_clone speaks eleven_v3) or eleven_multilingual_v2 for a " +
198
- "raw voice_id. eleven_v3 caps the script at 5000 chars."),
170
+ "raw voice_id. " + SCRIPT_LENGTH_DESCRIPTION),
199
171
  webhook_url: z.string().url().max(MAX_URL_LENGTH).optional(),
200
172
  /**
201
173
  * Видимая плашка «сделано ИИ» поверх кадра — OPT-IN, а не обязательная.
@@ -227,16 +199,8 @@ export const makeUgcInputShape = {
227
199
  * (порождает суффикс `:N` у ключа идемпотентности в SDK), а не параметр рендера.
228
200
  */
229
201
  export const agentRetryShape = { attempt: z.number().int().min(1).optional() };
230
- /**
231
- * Вход make_ugc. Не более одного из person | image задаёт идентичность (оба
232
- * опущены → дефолтный актёр). Схема — единый источник правды для REST, MCP
233
- * (tools/list) и SDK.
234
- *
235
- * `character` из взаимоисключения ВЫВЕДЕН, а не забыт: его диспозиция —
236
- * `rejected` (`contract-dispositions.ts`), то есть поле отбивается на входе
237
- * раньше, чем дойдёт до этой проверки. Держать его здесь значило бы
238
- * валидировать выбор между вариантами, один из которых не существует.
239
- */
202
+ // Общая схема REST/MCP/SDK: actor_id, person и image взаимоисключены.
203
+ // character отклоняет реестр; person принимается с warning (docs/18, §14).
240
204
  export const makeUgcInput = z
241
205
  .object(makeUgcInputShape)
242
206
  // Ровно одно из script | segments. Ни одного — рендерить нечего; оба —
@@ -246,10 +210,14 @@ export const makeUgcInput = z
246
210
  message: "pass exactly one of script | segments",
247
211
  })
248
212
  // Потолок символов — по модели: v3 короче v2 вдвое; отказ здесь, до резерва и вендора (#101).
249
- .refine((v) => spokenTextOf(v).length <= TTS_MODEL_CHAR_CAP[resolveTtsModel(v)], {
250
- message: `script exceeds the character ceiling of the speech model (${TTS_MODELS.map((m) => `${m}: ${TTS_MODEL_CHAR_CAP[m]}`).join(", ")})`,
213
+ .refine((v) => ttsScriptLimitError(spokenTextOf(v), resolveTtsModel(v)) === undefined, {
214
+ path: ["script"],
215
+ error: (issue) => {
216
+ const input = issue.input;
217
+ return ttsScriptLimitError(spokenTextOf(input), resolveTtsModel(input));
218
+ },
251
219
  })
252
- .refine((v) => [v.person, v.image].filter(Boolean).length <= 1, { message: "pass at most one of person | image" })
220
+ .refine((v) => [v.actor_id, v.person, v.image].filter(Boolean).length <= 1, { message: "pass at most one of actor_id | person | image; use list_actors to select a saved actor" })
253
221
  // ПРАВИЛА СЕГМЕНТОВ (US-526). Каждое — ОТДЕЛЬНЫЙ .refine, а не одна проверка
254
222
  // с общим текстом: сообщение обязано называть нарушенное правило, иначе агент
255
223
  // получает «invalid input» и чинит вход перебором. Порядок правил — от того,
@@ -280,32 +248,9 @@ export const makeUgcInput = z
280
248
  // ZodEffects, у которого нет .shape (ловушка A12), а shape порождает
281
249
  // tools/list. Оба опущены → резолвер подставит дефолт (клон владельца).
282
250
  .refine((v) => !(v.voice !== undefined && v.voice_id !== undefined), { message: "pass at most one of voice | voice_id" })
283
- // Скрипт из одних пробелов/пустоты проходит символьный .min(1) выше (там
284
- // считаются сырые символы), но даёт 0 произносимых слов — countWords тримит
285
- // и схлопывает пробелы. Используем ТУ ЖЕ нормализацию, что и весь пейсинг-гейт
286
- // (pacing.ts), не переизобретаем "trim && length".
251
+ // Length includes whitespace; a nonempty string can still have no speech.
287
252
  .refine((v) => v.segments !== undefined || countWords(v.script ?? "") >= 1, {
288
253
  message: "script has 0 speakable words",
289
- })
290
- // Счёт СЛОВ, не символов: символьный .max(10_000) выше — грубая защита от
291
- // мусорного ввода, а реальный потолок привязан к произносимой длине
292
- // (пейсинг-гейт меряет слова/сек, не байты).
293
- // Потолок слов считается по ТОМУ из двух, что задан: у сегментного ролика
294
- // произносимый текст — это сумма реплик, и мерить его по отсутствующему
295
- // `script` значило бы не мерить вовсе.
296
- .refine((v) => countWords(spokenTextOf(v)) <= MAX_SCRIPT_WORDS, {
297
- error: (issue) => {
298
- const wordCount = countWords(spokenTextOf(issue.input));
299
- /*
300
- * ⚠️ ССЫЛКА НА «≈45s of speech at the pacing gate» СНЯТА (находка
301
- * внешней приёмки, круг 23), и снята как ЛОЖЬ, а не как многословие.
302
- * Гейта пейсинга не существует с 2026-07-22 — `validatePacing` не
303
- * вызывается ниоткуда, — а число секунд агент читал как границу, хотя
304
- * ограничены только слова. Текст ошибки на платной поверхности чинят
305
- * перебором, и перебор по несуществующей границе стоит денег.
306
- */
307
- return `script is ~${wordCount} words; ceiling is ${MAX_SCRIPT_WORDS} words`;
308
- },
309
254
  });
310
255
  /** Склейка произносимого текста без проверок — общая база для гейтов и хелпера. */
311
256
  function spokenTextOf(input) {
@@ -361,6 +306,14 @@ export const quoteResponse = z.object({
361
306
  aspect_ratio: z.string(),
362
307
  })
363
308
  .nullable(),
309
+ /** Кто в кадре; `null` при клиентском `image`. Разбор — docs/18, Д50. */
310
+ actor: z
311
+ .object({
312
+ gender: z.enum(["female", "male"]),
313
+ actor_id: actorId.optional(),
314
+ version: z.number().int().positive().optional(),
315
+ })
316
+ .nullable(),
364
317
  /** Формат, который реально будет отрендерен на этом входе. */
365
318
  resolved_aspect_ratio: z.enum(ASPECT_RATIOS),
366
319
  });
@@ -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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"}
@@ -41,7 +41,7 @@ export interface SpeechResult {
41
41
  words: WordTiming[] | null;
42
42
  }
43
43
  export interface TtsCapabilities {
44
- /** Максимум символов за запрос. null — вендор не документирует (случай ElevenLabs). */
44
+ /** Верхняя граница по моделям; адаптер проверяет лимит выбранной модели. null — неизвестно. */
45
45
  maxChars: number | null;
46
46
  /** Отдаёт ли тайминги вообще. */
47
47
  providesTimings: boolean;
package/dist/voices.d.ts CHANGED
@@ -1,20 +1,23 @@
1
1
  import { z } from "zod";
2
+ import type { Gender } from "./default-actor.js";
2
3
  /** Модели синтеза ElevenLabs, которые контракт разрешает назвать (clipwright#101). */
3
4
  export declare const TTS_MODELS: readonly ["eleven_multilingual_v2", "eleven_v3"];
4
5
  export type TtsModelId = (typeof TTS_MODELS)[number];
5
6
  export declare const DEFAULT_TTS_MODEL: TtsModelId;
6
7
  /** Потолок символов запроса по документации вендора; у v3 он вдвое ниже. */
7
- export declare const TTS_MODEL_CHAR_CAP: Record<TtsModelId, number>;
8
+ export declare const TTS_MODEL_CHAR_CAP: Readonly<Record<TtsModelId, number>>;
9
+ export declare const MAX_SCRIPT_CHARS: number;
10
+ export declare const SCRIPT_LENGTH_DESCRIPTION: string;
11
+ /** Match the API's string length, including whitespace and surrogate pairs. */
12
+ export declare function ttsScriptLimitError(text: string, modelId: string): string | undefined;
8
13
  /** Каталог голосовых пресетов — НАШИ имена и метадата, БЕЗ вендорских id: имена */
9
14
  /** порождают `tools/list` и типы SDK, id живут только в адаптере воркера. */
10
15
  export interface VoicePreset {
11
16
  /** Язык голоса в терминах BCP-47-подобного короткого кода (ru/en). */
12
17
  language: string;
13
- /**
14
- * Гендерный лейбл голоса. ОПУЩЕН намеренно, если у вендора его нет
15
- * (клон владельца): отсутствие ≠ "неизвестно", это осознанный сигнал.
16
- */
17
- gender?: "female" | "male";
18
+ /** Пол голоса. Опускается, только если он НАМ неизвестен: молчание вендора */
19
+ /** про наш собственный клон незнанием не является (docs/18, Д50). */
20
+ gender?: Gender;
18
21
  /** Человекочитаемое описание для list_voices (US-516). */
19
22
  description: string;
20
23
  /** Модель синтеза, на которую голос настроен; клиент может перебить полем `tts_model`. */
@@ -27,6 +30,7 @@ export interface VoicePreset {
27
30
  export declare const VOICE_PRESETS: {
28
31
  readonly owner_ru_clone: {
29
32
  readonly language: "ru";
33
+ readonly gender: "male";
30
34
  readonly description: "Клон голоса владельца (David-Dmitry-Ru); русский — на английском даёт акцент";
31
35
  readonly model: "eleven_v3";
32
36
  };
@@ -171,6 +175,12 @@ export declare function resolveTtsModel(input: {
171
175
  * Только уверенное доминирование (≥60%) даёт "cyrillic"/"latin".
172
176
  */
173
177
  export declare const SCRIPT_DOMINANCE_THRESHOLD = 0.6;
178
+ /** Буквы каждого письма по отдельности. Их же складывает `detectScriptFamily`; */
179
+ /** отдельно они нужны, чтобы отличить «мало» от «нет вовсе» (clipwright#131). */
180
+ export declare function scriptLetterCounts(script: string): {
181
+ cyrillic: number;
182
+ latin: number;
183
+ };
174
184
  export declare function detectScriptFamily(script: string): "cyrillic" | "latin" | "neutral";
175
185
  /** Только путь QUOTE (US-517); почему не на пути рана — docs/18, Д41. */
176
186
  export declare const RAW_VOICE_ID_VALIDATION_WARNING = "raw voice_id is verified against your account at run start, not at quote time";
@@ -188,13 +198,13 @@ export declare const RAW_VOICE_ID_VALIDATION_WARNING = "raw voice_id is verified
188
198
  * заменяется. Поэтому правило старшинства здесь не применяется — но зафиксировано,
189
199
  * чтобы будущая подмена не была ошибочно заглушена условием (iii).
190
200
  *
191
- * ПОЧЕМУ НЕТ ГЕНДЕР-WARNING (осознанное отсутствие, а не упущение): у нас нет
192
- * источника правды о гендере АВАТАРА — модель персонажа ещё не приземлилась (план
193
- * §D, открытый вопрос 4), а у клона владельца (`owner_ru_clone`) вендор не даёт и
194
- * гендера ГОЛОСА (правило проекта — не выдумывать метадату за вендора, условие §6).
195
- * Нормативно: warning о несовпадении голос/аватар опирался бы на ОТСУТСТВУЮЩИЕ
196
- * данные (нарушение условия ii) и на дефолтном пути шумел бы (нарушение iii). Ни
197
- * один кодовый путь ниже не порождает строки со словом gender по построению.
201
+ * ПОЧЕМУ НЕТ ГЕНДЕР-WARNING, И ДОВОД ТЕПЕРЬ ДРУГОЙ. Прежний ссылался на
202
+ * отсутствие источника правды о поле АВАТАРА; источник измерен и записан
203
+ * (`default-actor.ts`), поэтому довод снят как устаревший. Warning'а всё равно
204
+ * нет по причине сильнее: пол актёра отдаётся ДАННЫМИ в поле `actor` ответа
205
+ * `quote`, объявлять несоблюдённым нечего (голос исполняется как запрошен), а
206
+ * предупреждение на каждом женском голосе клиент снять не может — docs/18, Д50.
207
+ * Ни один кодовый путь ниже не порождает строки со словом gender по построению.
198
208
  *
199
209
  * ПОЧЕМУ тест не подавляет обязательный warning про подмену №3 (принцип DR-2):
200
210
  * обязанность №3 крепится к НЕИСПОЛНЕННОМУ явному запросу (клиент попросил 1080p,
package/dist/voices.js CHANGED
@@ -7,6 +7,21 @@ export const TTS_MODEL_CHAR_CAP = {
7
7
  eleven_multilingual_v2: 10_000,
8
8
  eleven_v3: 5_000,
9
9
  };
10
+ export const MAX_SCRIPT_CHARS = Math.max(...Object.values(TTS_MODEL_CHAR_CAP));
11
+ export const SCRIPT_LENGTH_DESCRIPTION = `Script limits by speech model: ${TTS_MODELS.map((model) => `${model}: ${TTS_MODEL_CHAR_CAP[model]} characters`).join("; ")}. ` +
12
+ "Count includes spaces and audio tags; emoji may count as two characters. " +
13
+ "There is no word-count limit. Duration and price are estimates until measured.";
14
+ /** Match the API's string length, including whitespace and surrogate pairs. */
15
+ export function ttsScriptLimitError(text, modelId) {
16
+ const model = TTS_MODELS.find((model) => model === modelId);
17
+ if (!model)
18
+ return `unsupported speech model: ${modelId}`;
19
+ const limit = TTS_MODEL_CHAR_CAP[model];
20
+ if (text.length > limit) {
21
+ return `script has ${text.length} characters; ${model} allows at most ${limit} characters (including spaces and tags; emoji may count as two)`;
22
+ }
23
+ return undefined;
24
+ }
10
25
  /**
11
26
  * Стартовый набор из 5 пресетов (условие плана §4). Порядок значим только для
12
27
  * презентации; дефолт задаётся отдельно через `DEFAULT_VOICE_PRESET`.
@@ -14,6 +29,8 @@ export const TTS_MODEL_CHAR_CAP = {
14
29
  export const VOICE_PRESETS = {
15
30
  owner_ru_clone: {
16
31
  language: "ru",
32
+ // Пол — НАШ факт о своём клоне, а не метадата вендора (docs/18, Д50).
33
+ gender: "male",
17
34
  description: "Клон голоса владельца (David-Dmitry-Ru); русский — на английском даёт акцент",
18
35
  // Клон настроен на v3: на multilingual_v2 другой тембр и ошибки в русских ударениях (#101).
19
36
  model: "eleven_v3",
@@ -117,7 +134,9 @@ export function resolveTtsModel(input) {
117
134
  * Только уверенное доминирование (≥60%) даёт "cyrillic"/"latin".
118
135
  */
119
136
  export const SCRIPT_DOMINANCE_THRESHOLD = 0.6;
120
- export function detectScriptFamily(script) {
137
+ /** Буквы каждого письма по отдельности. Их же складывает `detectScriptFamily`; */
138
+ /** отдельно они нужны, чтобы отличить «мало» от «нет вовсе» (clipwright#131). */
139
+ export function scriptLetterCounts(script) {
121
140
  let cyrillic = 0;
122
141
  let latin = 0;
123
142
  for (const ch of script) {
@@ -128,6 +147,10 @@ export function detectScriptFamily(script) {
128
147
  latin += 1;
129
148
  }
130
149
  }
150
+ return { cyrillic, latin };
151
+ }
152
+ export function detectScriptFamily(script) {
153
+ const { cyrillic, latin } = scriptLetterCounts(script);
131
154
  const total = cyrillic + latin;
132
155
  // «Мало букв» → нейтрально: судить о языке не на чем (условие ii — данных нет).
133
156
  if (total < 2) {
@@ -167,13 +190,13 @@ export const RAW_VOICE_ID_VALIDATION_WARNING = "raw voice_id is verified against
167
190
  * заменяется. Поэтому правило старшинства здесь не применяется — но зафиксировано,
168
191
  * чтобы будущая подмена не была ошибочно заглушена условием (iii).
169
192
  *
170
- * ПОЧЕМУ НЕТ ГЕНДЕР-WARNING (осознанное отсутствие, а не упущение): у нас нет
171
- * источника правды о гендере АВАТАРА — модель персонажа ещё не приземлилась (план
172
- * §D, открытый вопрос 4), а у клона владельца (`owner_ru_clone`) вендор не даёт и
173
- * гендера ГОЛОСА (правило проекта — не выдумывать метадату за вендора, условие §6).
174
- * Нормативно: warning о несовпадении голос/аватар опирался бы на ОТСУТСТВУЮЩИЕ
175
- * данные (нарушение условия ii) и на дефолтном пути шумел бы (нарушение iii). Ни
176
- * один кодовый путь ниже не порождает строки со словом gender по построению.
193
+ * ПОЧЕМУ НЕТ ГЕНДЕР-WARNING, И ДОВОД ТЕПЕРЬ ДРУГОЙ. Прежний ссылался на
194
+ * отсутствие источника правды о поле АВАТАРА; источник измерен и записан
195
+ * (`default-actor.ts`), поэтому довод снят как устаревший. Warning'а всё равно
196
+ * нет по причине сильнее: пол актёра отдаётся ДАННЫМИ в поле `actor` ответа
197
+ * `quote`, объявлять несоблюдённым нечего (голос исполняется как запрошен), а
198
+ * предупреждение на каждом женском голосе клиент снять не может — docs/18, Д50.
199
+ * Ни один кодовый путь ниже не порождает строки со словом gender по построению.
177
200
  *
178
201
  * ПОЧЕМУ тест не подавляет обязательный warning про подмену №3 (принцип DR-2):
179
202
  * обязанность №3 крепится к НЕИСПОЛНЕННОМУ явному запросу (клиент попросил 1080p,
@@ -211,6 +234,16 @@ export function buildVoiceWarnings(input) {
211
234
  if (scriptFamily === "neutral" || scriptFamily === voiceFamily) {
212
235
  return [];
213
236
  }
237
+ // «БУКВ НЕТ ВОВСЕ» И «НЕ ТОТ ЯЗЫК» — РАЗНЫЕ СОВЕТЫ ЧИТАТЕЛЮ (clipwright#131):
238
+ // первое чинят текстом или доставкой, второе — выбором голоса.
239
+ const counts = scriptLetterCounts(input.script);
240
+ if (counts[voiceFamily] === 0) {
241
+ return [
242
+ `voice "${input.voice}" is labeled ${preset.language}, but the script contains ` +
243
+ `no ${voiceFamily} letters at all (${counts[scriptFamily]} ${scriptFamily} letters); ` +
244
+ `it will be voiced in a ${preset.language} voice`,
245
+ ];
246
+ }
214
247
  return [
215
248
  `voice "${input.voice}" is labeled ${preset.language}, but the script looks ${scriptFamily}; it will be voiced in a ${preset.language} voice`,
216
249
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"voices.js","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,wBAAwB,EAAE,WAAW,CAAU,CAAC;AAE3E,MAAM,CAAC,MAAM,iBAAiB,GAAe,wBAAwB,CAAC;AAEtE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,sBAAsB,EAAE,MAAM;IAC9B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GACpC,kCAAkC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAC/H,2EAA2E;IAC3E,gFAAgF,CAAC;AAEnF,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,6BAA6B,OAAO,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACxB,OAAO,cAAc,IAAI,CAAC,MAAM,gBAAgB,KAAK,mBAAmB,KAAK,iEAAiE,CAAC;IACjJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAgBD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE;QACd,QAAQ,EAAE,IAAI;QACd,sEAAsE;QACtE,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,8EAA8E;QAC3F,4FAA4F;QAC5F,KAAK,EAAE,WAAW;KACnB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,wBAAwB;KAChC;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,wBAAwB;KAChC;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,wBAAwB;KAChC;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,wBAAwB;KAChC;CAC6C,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAG1D,CAAC;AAIF,uFAAuF;AACvF,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;CAC1B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAG/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAiB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAYvD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;AAC1D,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,eAAe,CAAC,KAI/B;IACC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC;IAC1D,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACjG,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C,kFAAkF;AAClF,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAI/C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;YAC3B,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;YAChE,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAc;IAEd,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/B,gFAAgF;IAChF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,IAAI,0BAA0B,EAAE,CAAC;QACnD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,IAAI,0BAA0B,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,yBAAyB,GAAyC;IACtE,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,+EAA+E,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAOlC;IACC,+EAA+E;IAC/E,2EAA2E;IAC3E,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,8EAA8E;IAC9E,iFAAiF;IACjF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,0EAA0E;IAC1E,+EAA+E;IAC/E,yEAAyE;IACzE,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,UAAU,KAAK,CAAC,KAAK,gBAAgB,MAAM,CAAC,QAAQ,4BAA4B;gBAC9E,MAAM,WAAW,oBAAoB,MAAM,CAAC,YAAY,CAAC,IAAI,YAAY,aAAa;gBACtF,0BAA0B,MAAM,CAAC,QAAQ,QAAQ;SACpD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,KAAK,CAAC,KAAK,gBAAgB,MAAM,CAAC,QAAQ,0BAA0B,YAAY,4BAA4B,MAAM,CAAC,QAAQ,QAAQ;KAC9I,CAAC;AACJ,CAAC"}