@clipwright/core 0.12.0 → 0.14.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.
@@ -0,0 +1,20 @@
1
+ import { serverUgcInputWith } from "./skills.js";
2
+ import { VOICE_CATALOG } from "./voice-catalog-data.js";
3
+ import { isVoicePresetName } from "./voices.js";
4
+ // Подпуть, а не баррел: каталог весит сотни килобайт, и клиентам SDK он не нужен (docs/16).
5
+ /** Почему API не допускает имя голоса; `undefined` — пресет или живой голос каталога. */
6
+ export function catalogVoiceRefusal(voice, voices = VOICE_CATALOG.voices) {
7
+ if (isVoicePresetName(voice))
8
+ return undefined;
9
+ const entry = voices.find((item) => item.slug === voice);
10
+ if (entry === undefined) {
11
+ return `unknown voice "${voice}": call list_voices for the voice names this API accepts`;
12
+ }
13
+ if (entry.retired_at !== undefined) {
14
+ return (`voice "${voice}" was retired from the catalog on ${entry.retired_at.slice(0, 10)} ` +
15
+ "and is no longer accepted; call list_voices to choose another voice");
16
+ }
17
+ return undefined;
18
+ }
19
+ export const serverUgcInput = serverUgcInputWith((voice) => catalogVoiceRefusal(voice));
20
+ //# sourceMappingURL=voice-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-admission.js","sourceRoot":"","sources":["../src/voice-admission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,4FAA4F;AAE5F,yFAAyF;AACzF,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,MAAM,GAAgC,aAAa,CAAC,MAAM;IAE1D,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,kBAAkB,KAAK,0DAA0D,CAAC;IAC3F,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CACL,UAAU,KAAK,qCAAqC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;YACpF,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /** Сгенерированные файлы, разобранные схемой. В баррел не входит: клиентам SDK */
2
+ /** каталог не нужен, а подключать ли его подпутём, решает S5 (#164). */
3
+ export declare const VOICE_CATALOG: {
4
+ shortfall: Partial<Record<"bg" | "cs" | "da" | "de" | "el" | "en" | "es" | "fi" | "fil" | "fr" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "ko" | "ms" | "nl" | "no" | "pl" | "pt" | "ro" | "ru" | "sk" | "sv" | "ta" | "tr" | "uk" | "vi" | "zh", {
5
+ female?: number | undefined;
6
+ male?: number | undefined;
7
+ }>>;
8
+ voices: {
9
+ slug: string;
10
+ language: "bg" | "cs" | "da" | "de" | "el" | "en" | "es" | "fi" | "fil" | "fr" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "ko" | "ms" | "nl" | "no" | "pl" | "pt" | "ro" | "ru" | "sk" | "sv" | "ta" | "tr" | "uk" | "vi" | "zh";
11
+ locale: string | null;
12
+ accent: string | null;
13
+ gender_raw: string | null;
14
+ age_raw: string | null;
15
+ use_case_raw: string | null;
16
+ descriptive_raw: string | null;
17
+ name: string;
18
+ description: string | null;
19
+ category: string | null;
20
+ verified_models: ("eleven_flash_v2_5" | "eleven_turbo_v2_5" | "eleven_v3")[];
21
+ notice_period_days: number;
22
+ featured: boolean;
23
+ rank: number;
24
+ retired_at?: string | undefined;
25
+ refreshed_at: string;
26
+ }[];
27
+ };
28
+ export declare const TTS_MODEL_LANGUAGES: {
29
+ models: {
30
+ id: "eleven_flash_v2_5" | "eleven_turbo_v2_5" | "eleven_v3";
31
+ languages: string[];
32
+ }[];
33
+ };
@@ -0,0 +1,8 @@
1
+ import catalogJson from "./voice-catalog.generated.json" with { type: "json" };
2
+ import modelsJson from "./tts-model-languages.generated.json" with { type: "json" };
3
+ import { ttsModelLanguagesFile, voiceCatalogFile } from "./voice-catalog.js";
4
+ /** Сгенерированные файлы, разобранные схемой. В баррел не входит: клиентам SDK */
5
+ /** каталог не нужен, а подключать ли его подпутём, решает S5 (#164). */
6
+ export const VOICE_CATALOG = voiceCatalogFile.parse(catalogJson);
7
+ export const TTS_MODEL_LANGUAGES = ttsModelLanguagesFile.parse(modelsJson);
8
+ //# sourceMappingURL=voice-catalog-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-catalog-data.js","sourceRoot":"","sources":["../src/voice-catalog-data.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/E,OAAO,UAAU,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,kFAAkF;AAClF,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,271 @@
1
+ import { z } from "zod";
2
+ /** Языки каталога голосов — ЕДИНСТВЕННЫЙ список (#164); остальное выводится из него. */
3
+ export declare const CATALOG_LANGUAGES: readonly ["bg", "cs", "da", "de", "el", "en", "es", "fi", "fil", "fr", "hi", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "zh"];
4
+ export type CatalogLanguage = (typeof CATALOG_LANGUAGES)[number];
5
+ export declare const CATALOG_GENDERS: readonly ["female", "male"];
6
+ export type CatalogGender = (typeof CATALOG_GENDERS)[number];
7
+ export declare const CATALOG_VOICES_PER_GENDER = 5;
8
+ /** Запись сгенерированного файла; не путать с `voiceCatalogEntry` — ответом `/v1/voices`. */
9
+ export declare const catalogFileVoice: z.ZodObject<{
10
+ slug: z.ZodString;
11
+ language: z.ZodEnum<{
12
+ bg: "bg";
13
+ cs: "cs";
14
+ da: "da";
15
+ de: "de";
16
+ el: "el";
17
+ en: "en";
18
+ es: "es";
19
+ fi: "fi";
20
+ fil: "fil";
21
+ fr: "fr";
22
+ hi: "hi";
23
+ hr: "hr";
24
+ hu: "hu";
25
+ id: "id";
26
+ it: "it";
27
+ ja: "ja";
28
+ ko: "ko";
29
+ ms: "ms";
30
+ nl: "nl";
31
+ no: "no";
32
+ pl: "pl";
33
+ pt: "pt";
34
+ ro: "ro";
35
+ ru: "ru";
36
+ sk: "sk";
37
+ sv: "sv";
38
+ ta: "ta";
39
+ tr: "tr";
40
+ uk: "uk";
41
+ vi: "vi";
42
+ zh: "zh";
43
+ }>;
44
+ locale: z.ZodNullable<z.ZodString>;
45
+ accent: z.ZodNullable<z.ZodString>;
46
+ gender_raw: z.ZodNullable<z.ZodString>;
47
+ age_raw: z.ZodNullable<z.ZodString>;
48
+ use_case_raw: z.ZodNullable<z.ZodString>;
49
+ descriptive_raw: z.ZodNullable<z.ZodString>;
50
+ name: z.ZodString;
51
+ description: z.ZodNullable<z.ZodString>;
52
+ category: z.ZodNullable<z.ZodString>;
53
+ verified_models: z.ZodArray<z.ZodEnum<{
54
+ eleven_flash_v2_5: "eleven_flash_v2_5";
55
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
56
+ eleven_v3: "eleven_v3";
57
+ }>>;
58
+ notice_period_days: z.ZodNumber;
59
+ featured: z.ZodBoolean;
60
+ rank: z.ZodNumber;
61
+ retired_at: z.ZodOptional<z.ZodISODateTime>;
62
+ refreshed_at: z.ZodISODateTime;
63
+ }, z.core.$strict>;
64
+ export type CatalogFileVoice = z.infer<typeof catalogFileVoice>;
65
+ export declare const catalogShortfall: z.ZodObject<{
66
+ female: z.ZodOptional<z.ZodNumber>;
67
+ male: z.ZodOptional<z.ZodNumber>;
68
+ }, z.core.$strict>;
69
+ export declare const voiceCatalogFile: z.ZodObject<{
70
+ shortfall: z.ZodRecord<z.ZodEnum<{
71
+ bg: "bg";
72
+ cs: "cs";
73
+ da: "da";
74
+ de: "de";
75
+ el: "el";
76
+ en: "en";
77
+ es: "es";
78
+ fi: "fi";
79
+ fil: "fil";
80
+ fr: "fr";
81
+ hi: "hi";
82
+ hr: "hr";
83
+ hu: "hu";
84
+ id: "id";
85
+ it: "it";
86
+ ja: "ja";
87
+ ko: "ko";
88
+ ms: "ms";
89
+ nl: "nl";
90
+ no: "no";
91
+ pl: "pl";
92
+ pt: "pt";
93
+ ro: "ro";
94
+ ru: "ru";
95
+ sk: "sk";
96
+ sv: "sv";
97
+ ta: "ta";
98
+ tr: "tr";
99
+ uk: "uk";
100
+ vi: "vi";
101
+ zh: "zh";
102
+ }> & z.core.$partial, z.ZodObject<{
103
+ female: z.ZodOptional<z.ZodNumber>;
104
+ male: z.ZodOptional<z.ZodNumber>;
105
+ }, z.core.$strict>>;
106
+ voices: z.ZodArray<z.ZodObject<{
107
+ slug: z.ZodString;
108
+ language: z.ZodEnum<{
109
+ bg: "bg";
110
+ cs: "cs";
111
+ da: "da";
112
+ de: "de";
113
+ el: "el";
114
+ en: "en";
115
+ es: "es";
116
+ fi: "fi";
117
+ fil: "fil";
118
+ fr: "fr";
119
+ hi: "hi";
120
+ hr: "hr";
121
+ hu: "hu";
122
+ id: "id";
123
+ it: "it";
124
+ ja: "ja";
125
+ ko: "ko";
126
+ ms: "ms";
127
+ nl: "nl";
128
+ no: "no";
129
+ pl: "pl";
130
+ pt: "pt";
131
+ ro: "ro";
132
+ ru: "ru";
133
+ sk: "sk";
134
+ sv: "sv";
135
+ ta: "ta";
136
+ tr: "tr";
137
+ uk: "uk";
138
+ vi: "vi";
139
+ zh: "zh";
140
+ }>;
141
+ locale: z.ZodNullable<z.ZodString>;
142
+ accent: z.ZodNullable<z.ZodString>;
143
+ gender_raw: z.ZodNullable<z.ZodString>;
144
+ age_raw: z.ZodNullable<z.ZodString>;
145
+ use_case_raw: z.ZodNullable<z.ZodString>;
146
+ descriptive_raw: z.ZodNullable<z.ZodString>;
147
+ name: z.ZodString;
148
+ description: z.ZodNullable<z.ZodString>;
149
+ category: z.ZodNullable<z.ZodString>;
150
+ verified_models: z.ZodArray<z.ZodEnum<{
151
+ eleven_flash_v2_5: "eleven_flash_v2_5";
152
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
153
+ eleven_v3: "eleven_v3";
154
+ }>>;
155
+ notice_period_days: z.ZodNumber;
156
+ featured: z.ZodBoolean;
157
+ rank: z.ZodNumber;
158
+ retired_at: z.ZodOptional<z.ZodISODateTime>;
159
+ refreshed_at: z.ZodISODateTime;
160
+ }, z.core.$strict>>;
161
+ }, z.core.$strict>;
162
+ export type VoiceCatalogFile = z.infer<typeof voiceCatalogFile>;
163
+ export declare const ttsModelLanguagesFile: z.ZodObject<{
164
+ models: z.ZodArray<z.ZodObject<{
165
+ id: z.ZodEnum<{
166
+ eleven_flash_v2_5: "eleven_flash_v2_5";
167
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
168
+ eleven_v3: "eleven_v3";
169
+ }>;
170
+ languages: z.ZodArray<z.ZodString>;
171
+ }, z.core.$strict>>;
172
+ }, z.core.$strict>;
173
+ export type TtsModelLanguagesFile = z.infer<typeof ttsModelLanguagesFile>;
174
+ /** Фильтры `/v1/voices`: разбор запроса, `inputSchema` MCP и параметры SDK. Метки */
175
+ /** `age` и `use_case` берутся из данных каталога, поэтому их допустимый набор знает сервер. */
176
+ export declare const voicesQueryShape: {
177
+ language: z.ZodOptional<z.ZodEnum<{
178
+ bg: "bg";
179
+ cs: "cs";
180
+ da: "da";
181
+ de: "de";
182
+ el: "el";
183
+ en: "en";
184
+ es: "es";
185
+ fi: "fi";
186
+ fil: "fil";
187
+ fr: "fr";
188
+ hi: "hi";
189
+ hr: "hr";
190
+ hu: "hu";
191
+ id: "id";
192
+ it: "it";
193
+ ja: "ja";
194
+ ko: "ko";
195
+ ms: "ms";
196
+ nl: "nl";
197
+ no: "no";
198
+ pl: "pl";
199
+ pt: "pt";
200
+ ro: "ro";
201
+ ru: "ru";
202
+ sk: "sk";
203
+ sv: "sv";
204
+ ta: "ta";
205
+ tr: "tr";
206
+ uk: "uk";
207
+ vi: "vi";
208
+ zh: "zh";
209
+ }>>;
210
+ gender: z.ZodOptional<z.ZodEnum<{
211
+ female: "female";
212
+ male: "male";
213
+ }>>;
214
+ age: z.ZodOptional<z.ZodString>;
215
+ use_case: z.ZodOptional<z.ZodString>;
216
+ model: z.ZodOptional<z.ZodEnum<{
217
+ eleven_flash_v2_5: "eleven_flash_v2_5";
218
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
219
+ eleven_v3: "eleven_v3";
220
+ }>>;
221
+ };
222
+ export declare const voicesQuery: z.ZodObject<{
223
+ language: z.ZodOptional<z.ZodEnum<{
224
+ bg: "bg";
225
+ cs: "cs";
226
+ da: "da";
227
+ de: "de";
228
+ el: "el";
229
+ en: "en";
230
+ es: "es";
231
+ fi: "fi";
232
+ fil: "fil";
233
+ fr: "fr";
234
+ hi: "hi";
235
+ hr: "hr";
236
+ hu: "hu";
237
+ id: "id";
238
+ it: "it";
239
+ ja: "ja";
240
+ ko: "ko";
241
+ ms: "ms";
242
+ nl: "nl";
243
+ no: "no";
244
+ pl: "pl";
245
+ pt: "pt";
246
+ ro: "ro";
247
+ ru: "ru";
248
+ sk: "sk";
249
+ sv: "sv";
250
+ ta: "ta";
251
+ tr: "tr";
252
+ uk: "uk";
253
+ vi: "vi";
254
+ zh: "zh";
255
+ }>>;
256
+ gender: z.ZodOptional<z.ZodEnum<{
257
+ female: "female";
258
+ male: "male";
259
+ }>>;
260
+ age: z.ZodOptional<z.ZodString>;
261
+ use_case: z.ZodOptional<z.ZodString>;
262
+ model: z.ZodOptional<z.ZodEnum<{
263
+ eleven_flash_v2_5: "eleven_flash_v2_5";
264
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
265
+ eleven_v3: "eleven_v3";
266
+ }>>;
267
+ }, z.core.$strip>;
268
+ export type VoicesQuery = z.infer<typeof voicesQuery>;
269
+ export declare const VOICES_QUERY_FIELDS: (keyof VoicesQuery)[];
270
+ /** Нормализация метки на чтении: `middle-aged` → `middle_aged`, пустая → нет метки. */
271
+ export declare function normalizeVoiceLabel(raw: string | null | undefined): string | undefined;