@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
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ type WordTiming = {
3
+ word: string;
4
+ startSec: number;
5
+ endSec: number;
6
+ };
7
+ type PhraseRange = {
8
+ wordStart: number;
9
+ wordEnd: number;
10
+ accentWord: number;
11
+ };
12
+ declare const proposalSchema: z.ZodObject<{
13
+ version: z.ZodLiteral<"faceless_storyboard_61_v1">;
14
+ premise: z.ZodString;
15
+ script: z.ZodString;
16
+ provenance: z.ZodDiscriminatedUnion<[z.ZodObject<{
17
+ kind: z.ZodLiteral<"fixture">;
18
+ }, z.core.$strict>, z.ZodObject<{
19
+ kind: z.ZodLiteral<"model">;
20
+ model: z.ZodString;
21
+ promptSha256: z.ZodString;
22
+ responseSha256: z.ZodString;
23
+ }, z.core.$strict>], "kind">;
24
+ beats: z.ZodArray<z.ZodObject<{
25
+ wordStart: z.ZodNumber;
26
+ wordEnd: z.ZodNumber;
27
+ id: z.ZodString;
28
+ reason: z.ZodEnum<{
29
+ action: "action";
30
+ emphasis: "emphasis";
31
+ place: "place";
32
+ reveal: "reveal";
33
+ }>;
34
+ mediaType: z.ZodEnum<{
35
+ image: "image";
36
+ video: "video";
37
+ }>;
38
+ visualPrompt: z.ZodString;
39
+ }, z.core.$strict>>;
40
+ captionPhrases: z.ZodArray<z.ZodObject<{
41
+ wordStart: z.ZodNumber;
42
+ wordEnd: z.ZodNumber;
43
+ accentWord: z.ZodNumber;
44
+ }, z.core.$strict>>;
45
+ }, z.core.$strict>;
46
+ export type StoryboardProposal = Omit<z.infer<typeof proposalSchema>, "captionPhrases"> & {
47
+ captionPhrases: PhraseRange[];
48
+ };
49
+ export declare function parseStoryboardProposal(input: unknown): StoryboardProposal;
50
+ export declare function assertStoryboardWords(script: string, words: readonly WordTiming[]): void;
51
+ export declare function storyboardImageBudget(sceneCount: number, replacementCount: number): {
52
+ allowance: 24;
53
+ remaining: number;
54
+ };
55
+ export {};
@@ -0,0 +1,105 @@
1
+ import { z } from "zod";
2
+ const tokenPattern = /[\p{L}\p{N}\p{M}]+(?:['’][\p{L}\p{N}\p{M}]+)*/gu;
3
+ const nonblank = z.string().trim().min(1);
4
+ const index = z.number().int().nonnegative();
5
+ const sha256 = z.string().regex(/^[0-9a-fA-F]{64}$/);
6
+ const range = {
7
+ wordStart: index,
8
+ wordEnd: index,
9
+ };
10
+ const proposalSchema = z.strictObject({
11
+ version: z.literal("faceless_storyboard_61_v1"),
12
+ premise: nonblank,
13
+ script: nonblank,
14
+ provenance: z.discriminatedUnion("kind", [
15
+ z.strictObject({ kind: z.literal("fixture") }),
16
+ z.strictObject({
17
+ kind: z.literal("model"),
18
+ model: nonblank,
19
+ promptSha256: sha256,
20
+ responseSha256: sha256,
21
+ }),
22
+ ]),
23
+ beats: z.array(z.strictObject({
24
+ id: nonblank,
25
+ ...range,
26
+ reason: z.enum(["action", "place", "reveal", "emphasis"]),
27
+ mediaType: z.enum(["video", "image"]),
28
+ visualPrompt: nonblank,
29
+ })).min(2),
30
+ captionPhrases: z.array(z.strictObject({
31
+ ...range,
32
+ accentWord: index,
33
+ })).min(1),
34
+ });
35
+ function tokens(input) {
36
+ return input.normalize("NFKC").match(tokenPattern) ?? [];
37
+ }
38
+ function lexical(input) {
39
+ return input.normalize("NFKC").replace(/[’]/gu, "'").normalize("NFD")
40
+ .replace(/\p{M}/gu, "").toLocaleLowerCase("und");
41
+ }
42
+ export function parseStoryboardProposal(input) {
43
+ const proposal = proposalSchema.parse(input);
44
+ const wordCount = tokens(proposal.script).length;
45
+ if (wordCount === 0)
46
+ throw new Error("storyboard script has no words");
47
+ let nextWord = 0;
48
+ const ids = new Set();
49
+ for (const [position, beat] of proposal.beats.entries()) {
50
+ if (ids.has(beat.id))
51
+ throw new Error("storyboard beat IDs must be unique");
52
+ ids.add(beat.id);
53
+ if (beat.wordStart !== nextWord || beat.wordEnd <= beat.wordStart || beat.wordEnd > wordCount) {
54
+ throw new Error("storyboard beats must partition script words");
55
+ }
56
+ if (beat.mediaType !== (position === 0 ? "video" : "image")) {
57
+ throw new Error("storyboard requires one first VIDEO beat and later IMAGE beats");
58
+ }
59
+ nextWord = beat.wordEnd;
60
+ }
61
+ if (nextWord !== wordCount)
62
+ throw new Error("storyboard beats must partition script words");
63
+ nextWord = 0;
64
+ for (const phrase of proposal.captionPhrases) {
65
+ if (phrase.wordStart !== nextWord || phrase.wordEnd <= phrase.wordStart || phrase.wordEnd > wordCount) {
66
+ throw new Error("storyboard caption phrases must partition script words");
67
+ }
68
+ if (phrase.accentWord < phrase.wordStart || phrase.accentWord >= phrase.wordEnd) {
69
+ throw new Error("storyboard caption accent must belong to its phrase");
70
+ }
71
+ nextWord = phrase.wordEnd;
72
+ }
73
+ if (nextWord !== wordCount)
74
+ throw new Error("storyboard caption phrases must partition script words");
75
+ return proposal;
76
+ }
77
+ export function assertStoryboardWords(script, words) {
78
+ const scriptWords = tokens(script);
79
+ if (scriptWords.length === 0 || scriptWords.length !== words.length) {
80
+ throw new Error("storyboard word count mismatch");
81
+ }
82
+ for (let i = 0; i < words.length; i++) {
83
+ const timed = words[i];
84
+ const measured = tokens(timed.word);
85
+ if (measured.length !== 1 || lexical(measured[0]) !== lexical(scriptWords[i])) {
86
+ throw new Error(`storyboard word ${i} differs from script`);
87
+ }
88
+ if (!Number.isFinite(timed.startSec) || !Number.isFinite(timed.endSec) ||
89
+ timed.startSec < 0 || timed.endSec <= timed.startSec ||
90
+ (i > 0 && timed.startSec < words[i - 1].endSec)) {
91
+ throw new Error(`storyboard word ${i} has invalid timing`);
92
+ }
93
+ }
94
+ }
95
+ export function storyboardImageBudget(sceneCount, replacementCount) {
96
+ if (!Number.isSafeInteger(sceneCount) || sceneCount < 0 ||
97
+ !Number.isSafeInteger(replacementCount) || replacementCount < 2) {
98
+ throw new Error("storyboard image allowance requires valid scenes and two reserved replacements");
99
+ }
100
+ const remaining = 24 - 2 - 1 - sceneCount - replacementCount;
101
+ if (remaining < 0)
102
+ throw new Error("storyboard image allowance exceeded");
103
+ return { allowance: 24, remaining };
104
+ }
105
+ //# sourceMappingURL=faceless-storyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faceless-storyboard.js","sourceRoot":"","sources":["../src/faceless-storyboard.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,14 @@
1
- /**
2
- * Отпечаток запроса под ключом идемпотентности + ключ идемпотентности per-client.
3
- *
4
- * ЗАЧЕМ ЭТОТ МОДУЛЬ ЖИВЁТ ПОДПУТЁМ `@clipwright/core/idempotency`, А НЕ В barrel:
5
- * он тянет `node:crypto`. Barrel `@clipwright/core` импортируют И `apps/web`
6
- * (через `transpilePackages` в `next.config.ts`), и клиентские компоненты Next.
7
- * Стоит `node:crypto` протечь в barrel — `next build` падает на клиентском
8
- * бандле. Поэтому barrel НЕ реэкспортирует этот файл; те, кому нужен ключ (SDK,
9
- * apps/api), импортируют строго подпуть.
10
- */
11
- /**
12
- * Canonical JSON: ключи объектов отсортированы, порядок элементов массива
13
- * сохранён (в массиве порядок — часть значения, сортировать его нельзя).
14
- *
15
- * Нужен потому, что JSON.stringify сохраняет порядок вставки ключей, а он
16
- * зависит от того, как агент собрал тело запроса. Два побайтово разных, но
17
- * семантически одинаковых запроса обязаны дать один хеш, иначе штатный ретрай
18
- * прилетит в 409 и агент будет считать это конфликтом.
19
- *
20
- * `undefined` внутри объектов отбрасывается — как и в JSON.stringify, чтобы
21
- * «ключ отсутствует» и «ключ = undefined» не расходились в хеше.
22
- */
1
+ /** Canonical JSON: object keys sorted, array order kept (order is part of an array's value), */
2
+ /** `undefined` dropped. Semantically equal bodies must hash alike, or a retry gets a 409. */
23
3
  export declare function canonicalize(value: unknown): unknown;
24
- /**
25
- * Хешируется вход ПОСЛЕ zod-парсинга, то есть с уже подставленными дефолтами.
26
- * Это осознанная нормализация: «captions не передан» и «captions: false» —
27
- * один и тот же запрос и обязаны совпасть по хешу. Хешировать сырое тело
28
- * нельзя ещё и потому, что тогда лишний пробел в JSON давал бы 409.
29
- */
4
+ /** Hashes the input AFTER zod parsing, defaults filled in: "captions omitted" and */
5
+ /** "captions: false" are one request. Hashing the raw body would 409 on extra whitespace. */
30
6
  export declare function requestHash(input: unknown): string;
31
- /**
32
- * Ключ идемпотентности, детерминированный от входа И идентичности клиента.
33
- *
34
- * ЗАЧЕМ ПАРСИТЬ ВНУТРИ, А НЕ ПРИНИМАТЬ ГОТОВЫЙ ХЕШ: единственный корректный
35
- * путь построить ключ — прогнать сырой вход через `makeUgcInput.parse`, чтобы
36
- * подставились дефолты, и только потом канонизировать. Прямой `requestHash`
37
- * по сырому телу (без parse) даёт РАЗНЫЕ ключи для «captions не передан» и
38
- * «captions: false» — это дефект 3.1 (штатный ретрай агента → ложный новый ран).
39
- *
40
- * ЗАЧЕМ ПРИМЕШИВАТЬ `clientId`: два разных клиента могут прислать побайтово
41
- * один вход; без разделения по клиенту второй получил бы ран первого. `clientId`
42
- * идёт ПРЕФИКСОМ хеша — разные клиенты на одном входе дают разные ключи
43
- * (дефект 3.2), один клиент на одном входе — стабильный ключ (дедуп денег).
44
- */
7
+ /** Idempotency key from input AND client identity. Parses inside so defaults are filled */
8
+ /** before hashing; `clientId` prefixes the hash so clients never share a run. */
45
9
  export declare function idempotencyKeyFor(input: unknown, clientId: string): string;
46
- /** Тот же ключ для `create_actor` (clipwright#120): своя схема, свои дефолты. */
47
- /** Разбором `make_ugc` здесь не обойтись — он срезал бы поля актёра в ноль. */
10
+ /** The same key for `create_actor`, with its own schema and defaults: the `make_ugc` */
11
+ /** parse would strip every actor field. */
48
12
  export declare function actorIdempotencyKeyFor(input: unknown, clientId: string): string;
13
+ /** The same key for `make_faceless`, parsed by its own union schema. */
14
+ export declare function facelessIdempotencyKeyFor(input: unknown, clientId: string): string;
@@ -1,28 +1,11 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { createActorInput } from "./account-actors.js";
3
+ import { makeFacelessInput } from "./faceless-public.js";
3
4
  import { makeUgcInput } from "./skills.js";
4
- /**
5
- * Отпечаток запроса под ключом идемпотентности + ключ идемпотентности per-client.
6
- *
7
- * ЗАЧЕМ ЭТОТ МОДУЛЬ ЖИВЁТ ПОДПУТЁМ `@clipwright/core/idempotency`, А НЕ В barrel:
8
- * он тянет `node:crypto`. Barrel `@clipwright/core` импортируют И `apps/web`
9
- * (через `transpilePackages` в `next.config.ts`), и клиентские компоненты Next.
10
- * Стоит `node:crypto` протечь в barrel — `next build` падает на клиентском
11
- * бандле. Поэтому barrel НЕ реэкспортирует этот файл; те, кому нужен ключ (SDK,
12
- * apps/api), импортируют строго подпуть.
13
- */
14
- /**
15
- * Canonical JSON: ключи объектов отсортированы, порядок элементов массива
16
- * сохранён (в массиве порядок — часть значения, сортировать его нельзя).
17
- *
18
- * Нужен потому, что JSON.stringify сохраняет порядок вставки ключей, а он
19
- * зависит от того, как агент собрал тело запроса. Два побайтово разных, но
20
- * семантически одинаковых запроса обязаны дать один хеш, иначе штатный ретрай
21
- * прилетит в 409 и агент будет считать это конфликтом.
22
- *
23
- * `undefined` внутри объектов отбрасывается — как и в JSON.stringify, чтобы
24
- * «ключ отсутствует» и «ключ = undefined» не расходились в хеше.
25
- */
5
+ // Request fingerprint and per-client idempotency key. A subpath export, not the barrel:
6
+ // `node:crypto` in the barrel would break Next client bundles.
7
+ /** Canonical JSON: object keys sorted, array order kept (order is part of an array's value), */
8
+ /** `undefined` dropped. Semantically equal bodies must hash alike, or a retry gets a 409. */
26
9
  export function canonicalize(value) {
27
10
  if (Array.isArray(value)) {
28
11
  return value.map(canonicalize);
@@ -39,43 +22,34 @@ export function canonicalize(value) {
39
22
  }
40
23
  return value;
41
24
  }
42
- /**
43
- * Хешируется вход ПОСЛЕ zod-парсинга, то есть с уже подставленными дефолтами.
44
- * Это осознанная нормализация: «captions не передан» и «captions: false» —
45
- * один и тот же запрос и обязаны совпасть по хешу. Хешировать сырое тело
46
- * нельзя ещё и потому, что тогда лишний пробел в JSON давал бы 409.
47
- */
25
+ /** Hashes the input AFTER zod parsing, defaults filled in: "captions omitted" and */
26
+ /** "captions: false" are one request. Hashing the raw body would 409 on extra whitespace. */
48
27
  export function requestHash(input) {
49
28
  return createHash("sha256")
50
29
  .update(JSON.stringify(canonicalize(input)))
51
30
  .digest("hex");
52
31
  }
53
- /**
54
- * Ключ идемпотентности, детерминированный от входа И идентичности клиента.
55
- *
56
- * ЗАЧЕМ ПАРСИТЬ ВНУТРИ, А НЕ ПРИНИМАТЬ ГОТОВЫЙ ХЕШ: единственный корректный
57
- * путь построить ключ — прогнать сырой вход через `makeUgcInput.parse`, чтобы
58
- * подставились дефолты, и только потом канонизировать. Прямой `requestHash`
59
- * по сырому телу (без parse) даёт РАЗНЫЕ ключи для «captions не передан» и
60
- * «captions: false» — это дефект 3.1 (штатный ретрай агента → ложный новый ран).
61
- *
62
- * ЗАЧЕМ ПРИМЕШИВАТЬ `clientId`: два разных клиента могут прислать побайтово
63
- * один вход; без разделения по клиенту второй получил бы ран первого. `clientId`
64
- * идёт ПРЕФИКСОМ хеша — разные клиенты на одном входе дают разные ключи
65
- * (дефект 3.2), один клиент на одном входе — стабильный ключ (дедуп денег).
66
- */
32
+ /** Idempotency key from input AND client identity. Parses inside so defaults are filled */
33
+ /** before hashing; `clientId` prefixes the hash so clients never share a run. */
67
34
  export function idempotencyKeyFor(input, clientId) {
68
35
  const parsed = makeUgcInput.parse(input);
69
36
  return createHash("sha256")
70
37
  .update(clientId + JSON.stringify(canonicalize(parsed)))
71
38
  .digest("hex");
72
39
  }
73
- /** Тот же ключ для `create_actor` (clipwright#120): своя схема, свои дефолты. */
74
- /** Разбором `make_ugc` здесь не обойтись — он срезал бы поля актёра в ноль. */
40
+ /** The same key for `create_actor`, with its own schema and defaults: the `make_ugc` */
41
+ /** parse would strip every actor field. */
75
42
  export function actorIdempotencyKeyFor(input, clientId) {
76
43
  const parsed = createActorInput.parse(input);
77
44
  return createHash("sha256")
78
45
  .update(clientId + JSON.stringify(canonicalize(parsed)))
79
46
  .digest("hex");
80
47
  }
48
+ /** The same key for `make_faceless`, parsed by its own union schema. */
49
+ export function facelessIdempotencyKeyFor(input, clientId) {
50
+ const parsed = makeFacelessInput.parse(input);
51
+ return createHash("sha256")
52
+ .update(clientId + JSON.stringify(canonicalize(parsed)))
53
+ .digest("hex");
54
+ }
81
55
  //# sourceMappingURL=idempotency.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;GASG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SAC3C,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,QAAgB;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wFAAwF;AACxF,+DAA+D;AAE/D,gGAAgG;AAChG,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SAC3C,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,2FAA2F;AAC3F,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,wFAAwF;AACxF,2CAA2C;AAC3C,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,QAAgB;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,QAAgB;IACxE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from "./skills.js";
2
+ export * from "./faceless-public.js";
3
+ export * from "./faceless-price.js";
2
4
  export * from "./actors.js";
3
5
  export * from "./account-actors.js";
4
6
  export * from "./contract-dispositions.js";
@@ -30,3 +32,4 @@ export * from "./media-timebase.js";
30
32
  export * from "./billing-terms.js";
31
33
  export * from "./voice-preview-approval.js";
32
34
  export * from "./face-delivery.js";
35
+ export * from "./faceless-public-plan.js";
package/dist/index.js CHANGED
@@ -1,50 +1,48 @@
1
1
  export * from "./skills.js";
2
+ export * from "./faceless-public.js";
3
+ export * from "./faceless-price.js";
2
4
  export * from "./actors.js";
3
- // Личные актёры аккаунта: вход и итог скилла `create_actor` (clipwright#120).
5
+ // Personal actors of an account: input and result of the `create_actor` skill.
4
6
  export * from "./account-actors.js";
5
- // Реестр диспозиций импортирует shape из skills.js — направление одностороннее,
6
- // цикла нет. Отсюда же приходит MakeUgcInputArgs (выводится из предлагаемого
7
- // shape, а не из полного).
7
+ // The disposition registry imports the shape from skills.js one way, so there is no cycle.
8
+ // MakeUgcInputArgs comes from here, derived from the offered shape, not the full one.
8
9
  export * from "./contract-dispositions.js";
9
- // Резолвер формата: чистые функции, ноль сети. Импортирует ASPECT_RATIOS из
10
- // skills.js — направление то же одностороннее, что и у реестра.
10
+ // Format resolver: pure functions, no network; imports ASPECT_RATIOS from skills.js one way.
11
11
  export * from "./aspect.js";
12
- // Актёр отдельным модулем: `aspect.js` реэкспортирует из него источник кадра.
12
+ // The actor is its own module: `aspect.js` re-exports the frame source from it.
13
13
  export * from "./default-actor.js";
14
14
  export * from "./voices.js";
15
15
  export * from "./voice-catalog.js";
16
16
  export * from "./runs.js";
17
- // Тела отказов: форма ответа об ошибке — тоже контракт, и с появлением чисел в
18
- // теле (402) она перестала быть выводимой из кода ответа.
17
+ // Refusal bodies: the error shape is contract too, and once a 402 carries numbers it no
18
+ // longer follows from the status code.
19
19
  export * from "./errors.js";
20
20
  export * from "./script-integrity.js";
21
- // Rate limit: форма 429 и имена заголовков — тот же контракт, что и тела
22
- // отказов выше, и по той же причине не выводится из кода ответа.
21
+ // Rate limit: the 429 shape and header names, the same kind of contract as the refusal
22
+ // bodies above.
23
23
  export * from "./rate-limit.js";
24
- // Разбор отказа: тела уже описаны выше, здесь — что с ними ДЕЛАТЬ. Живёт в
25
- // core, потому что решение «ретраить или остановиться» обязано быть общим у
26
- // SDK, MCP и CLI (US-622).
24
+ // Failure parsing: what to DO with the bodies above. In core so SDK, MCP and CLI share
25
+ // one retry decision.
27
26
  export * from "./api-failure.js";
28
27
  export * from "./account.js";
29
- // Загрузка изображения для `image` (clipwright#99): контракт ответа, потолки, проба типа.
28
+ // Image upload for `image`: response contract, caps, type probe.
30
29
  export * from "./uploads.js";
31
30
  export * from "./pacing.js";
32
- // Вендор-нейтральные контракты: всё вендорское живёт в адаптерах, не здесь.
31
+ // Vendor-neutral contracts: everything vendor-specific lives in adapters, not here.
33
32
  export * from "./render-backend.js";
34
33
  export * from "./tts-backend.js";
35
- // Обязанность реализаций обоих контрактов выше: пометить ошибку кодом ответа,
36
- // если ответ был. Без неё «вендор отказал» и «ответа не было» неразличимы
37
- // (US-606a).
34
+ // Implementations of both contracts above mark errors with the response status, if any;
35
+ // without it "the vendor refused" and "no response" look the same.
38
36
  export * from "./vendor-response.js";
39
- // Публичные адреса и имена пакетов: их печатают SDK, документация и лендинг,
40
- // поэтому расхождение видит посетитель, а не тест (US-614).
37
+ // Public addresses and package names, printed by the SDK, docs and landing page, so a
38
+ // mismatch is seen by visitors, not tests.
41
39
  export * from "./public-endpoints.js";
42
- // Маршруты API и их цена: сверяются с `app.routes`, печатаются квикстартом (clipwright#135).
40
+ // API routes and their price: checked against `app.routes`, printed by the quickstart.
43
41
  export * from "./endpoints.js";
44
- // Статические warnings рана выводятся из сохранённого входа — один ответ у API
45
- // и у кабинета на любом состоянии рана (clipwright#64).
42
+ // A run's static warnings are derived from its stored input: one answer for the API
43
+ // and the dashboard in any run state.
46
44
  export * from "./run-static-warnings.js";
47
- // Невыводимые исходы префлайта: форма долговечного факта (clipwright#146).
45
+ // Preflight outcomes that cannot be derived: the durable fact shape.
48
46
  export * from "./run-preflight.js";
49
47
  export * from "./speech-rhythm.js";
50
48
  export * from "./broll-policy.js";
@@ -55,4 +53,5 @@ export * from "./media-timebase.js";
55
53
  export * from "./billing-terms.js";
56
54
  export * from "./voice-preview-approval.js";
57
55
  export * from "./face-delivery.js";
56
+ export * from "./faceless-public-plan.js";
58
57
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,8EAA8E;AAC9E,cAAc,qBAAqB,CAAC;AACpC,gFAAgF;AAChF,6EAA6E;AAC7E,2BAA2B;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,4EAA4E;AAC5E,gEAAgE;AAChE,cAAc,aAAa,CAAC;AAC5B,8EAA8E;AAC9E,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,+EAA+E;AAC/E,0DAA0D;AAC1D,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,yEAAyE;AACzE,iEAAiE;AACjE,cAAc,iBAAiB,CAAC;AAChC,2EAA2E;AAC3E,4EAA4E;AAC5E,2BAA2B;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,0FAA0F;AAC1F,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,4EAA4E;AAC5E,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,8EAA8E;AAC9E,0EAA0E;AAC1E,aAAa;AACb,cAAc,sBAAsB,CAAC;AACrC,6EAA6E;AAC7E,4DAA4D;AAC5D,cAAc,uBAAuB,CAAC;AACtC,6FAA6F;AAC7F,cAAc,gBAAgB,CAAC;AAC/B,+EAA+E;AAC/E,wDAAwD;AACxD,cAAc,0BAA0B,CAAC;AACzC,2EAA2E;AAC3E,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,+EAA+E;AAC/E,cAAc,qBAAqB,CAAC;AACpC,2FAA2F;AAC3F,sFAAsF;AACtF,cAAc,4BAA4B,CAAC;AAC3C,6FAA6F;AAC7F,cAAc,aAAa,CAAC;AAC5B,gFAAgF;AAChF,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,wFAAwF;AACxF,uCAAuC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,uFAAuF;AACvF,gBAAgB;AAChB,cAAc,iBAAiB,CAAC;AAChC,uFAAuF;AACvF,sBAAsB;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,iEAAiE;AACjE,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,oFAAoF;AACpF,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,wFAAwF;AACxF,mEAAmE;AACnE,cAAc,sBAAsB,CAAC;AACrC,sFAAsF;AACtF,2CAA2C;AAC3C,cAAc,uBAAuB,CAAC;AACtC,uFAAuF;AACvF,cAAc,gBAAgB,CAAC;AAC/B,oFAAoF;AACpF,sCAAsC;AACtC,cAAc,0BAA0B,CAAC;AACzC,qEAAqE;AACrE,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -8,8 +8,8 @@ export declare const LONG_FORM_LAUNCH_TARIFF: Readonly<{
8
8
  readonly rounding: "ceil_aggregate_seconds";
9
9
  readonly failurePolicy: "verified_delivery_only";
10
10
  }>;
11
- /** Действующие тарифы лица ПЕРЕЧНЕМ: публичный текст обходит его, а не две */
12
- /** известные константы, иначе третий тариф уехал бы молча (#255). */
11
+ /** Active face tariffs as a LIST: public text walks it, not two known constants, so a */
12
+ /** third tariff cannot ship silently. */
13
13
  export declare const FACE_BILLING_TARIFFS: readonly FaceBillingTariff[];
14
14
  export declare function faceTariffRate(tariff: FaceBillingTariff): number;
15
15
  export declare function faceTariffPricingVersion(tariff: FaceBillingTariff): string;
@@ -22,8 +22,8 @@ export declare function calculateFaceCharge(intervals: readonly FaceBillingInter
22
22
  credits: number;
23
23
  minimumApplied: boolean;
24
24
  };
25
- /** ЗАПАС РЕЗЕРВА НА ФОРМУ РЕЧИ — НАЗВАННАЯ граница, не выведенное число: */
26
- /** честное произведение трёх членов плавает по раскладкам (ADR #265). */
25
+ /** Reserve headroom for speech shape: a NAMED bound, not a derived number, since the */
26
+ /** honest product of three terms varies by layout. */
27
27
  export declare const FACE_RESERVE_SHAPE_MARGIN = 1.15;
28
28
  export declare const longFormQuoteSchema: z.ZodReadonly<z.ZodObject<{
29
29
  pricingVersion: z.ZodString;
@@ -4,8 +4,8 @@ export const LONG_FORM_LAUNCH_TARIFF = Object.freeze({
4
4
  version: 2, pricingVersion: "long-form-v1", rateCreditsPerFaceSecond: 10,
5
5
  minimumCredits: 400, rounding: "ceil_aggregate_seconds", failurePolicy: "verified_delivery_only",
6
6
  });
7
- /** Действующие тарифы лица ПЕРЕЧНЕМ: публичный текст обходит его, а не две */
8
- /** известные константы, иначе третий тариф уехал бы молча (#255). */
7
+ /** Active face tariffs as a LIST: public text walks it, not two known constants, so a */
8
+ /** third tariff cannot ship silently. */
9
9
  export const FACE_BILLING_TARIFFS = Object.freeze([
10
10
  LONG_FORM_LAUNCH_TARIFF,
11
11
  ]);
@@ -46,8 +46,8 @@ export function calculateFaceCharge(intervals, fps, tariff) {
46
46
  return { faceFrames: Number(frames), billableFaceSeconds: Number(seconds), credits: Number(credits),
47
47
  minimumApplied: usageCredits < minimum };
48
48
  }
49
- /** ЗАПАС РЕЗЕРВА НА ФОРМУ РЕЧИ — НАЗВАННАЯ граница, не выведенное число: */
50
- /** честное произведение трёх членов плавает по раскладкам (ADR #265). */
49
+ /** Reserve headroom for speech shape: a NAMED bound, not a derived number, since the */
50
+ /** honest product of three terms varies by layout. */
51
51
  export const FACE_RESERVE_SHAPE_MARGIN = 1.15;
52
52
  const credits = z.number().int().nonnegative().max(2_147_483_647);
53
53
  const pricing = {
@@ -1 +1 @@
1
- {"version":3,"file":"long-form-pricing.js","sourceRoot":"","sources":["../src/long-form-pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"long-form-pricing.js","sourceRoot":"","sources":["../src/long-form-pricing.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** Test ceiling, not a claim that this profile has passed live qualification. */
2
2
  export declare const LONG_FORM_QUALIFICATION_MAX_DURATION_SEC = 300;
3
- /** Потолок слотов замороженного таймлайна; из него выводится MAX_INSERTS, */
4
- /** поэтому числа не разъезжаются (`docs/adr/0004-insert-word-coverage.md`). */
3
+ /** Slot cap of a frozen timeline; MAX_INSERTS is derived from it, so the numbers */
4
+ /** cannot drift. */
5
5
  export declare const RESOLVED_TIMELINE_MAX_SLOTS = 100;
@@ -1,6 +1,6 @@
1
1
  /** Test ceiling, not a claim that this profile has passed live qualification. */
2
2
  export const LONG_FORM_QUALIFICATION_MAX_DURATION_SEC = 300;
3
- /** Потолок слотов замороженного таймлайна; из него выводится MAX_INSERTS, */
4
- /** поэтому числа не разъезжаются (`docs/adr/0004-insert-word-coverage.md`). */
3
+ /** Slot cap of a frozen timeline; MAX_INSERTS is derived from it, so the numbers */
4
+ /** cannot drift. */
5
5
  export const RESOLVED_TIMELINE_MAX_SLOTS = 100;
6
6
  //# sourceMappingURL=long-form-profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"long-form-profile.js","sourceRoot":"","sources":["../src/long-form-profile.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,wCAAwC,GAAG,GAAG,CAAC;AAE5D,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"long-form-profile.js","sourceRoot":"","sources":["../src/long-form-profile.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,wCAAwC,GAAG,GAAG,CAAC;AAE5D,oFAAoF;AACpF,oBAAoB;AACpB,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC"}
package/dist/pacing.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- /** Пейсинг речи (docs/09 §5): 2–4 слова в секунду. */
1
+ /** Speech pacing: 2–4 words per second. */
2
2
  export declare const WORDS_PER_SECOND_MIN = 2;
3
3
  export declare const WORDS_PER_SECOND_MAX = 4;
4
4
  export declare function countWords(script: string): number;
package/dist/pacing.js CHANGED
@@ -1,4 +1,4 @@
1
- /** Пейсинг речи (docs/09 §5): 2–4 слова в секунду. */
1
+ /** Speech pacing: 2–4 words per second. */
2
2
  export const WORDS_PER_SECOND_MIN = 2;
3
3
  export const WORDS_PER_SECOND_MAX = 4;
4
4
  export function countWords(script) {
@@ -1 +1 @@
1
- {"version":3,"file":"pacing.js","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"pacing.js","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC3D,CAAC"}
@@ -1,19 +1,17 @@
1
- /** Публичные адреса продукта — одной константой на всех: клиент и лендинг */
2
- /** обязаны называть один адрес. Разбор и переезд — `docs/03-api.md` §1. */
3
- /** Свой домен с US-613; адрес площадки жив и не снят (`docs/03-api.md` §1). */
1
+ /** Public product addresses, one constant for everyone: the client and the landing page */
2
+ /** must name the same address. */
3
+ /** Our own domain; the platform-generated address still answers and is not retired. */
4
4
  export declare const PUBLIC_API_BASE_URL = "https://api.clipwright.io";
5
- /** Кабинет; пути клеятся к нему. НЕ `APP_ORIGIN` — тот из окружения. */
5
+ /** The dashboard; paths are appended to it. NOT `APP_ORIGIN`, which comes from the environment. */
6
6
  export declare const PUBLIC_APP_BASE_URL = "https://app.clipwright.io";
7
- /**
8
- * Пакеты npm, которыми продукт вызывается. Названия печатает и лендинг, и
9
- * `--help`, и документация — значит это тоже контракт, а не текст страницы.
10
- */
7
+ /** npm packages the product is called through. The landing page, `--help` and docs print */
8
+ /** these names, so they are contract, not page copy. */
11
9
  export declare const CLI_PACKAGE = "@clipwright/cli";
12
10
  export declare const CLI_BIN = "clipwright";
13
11
  export declare const MCP_PACKAGE = "@clipwright/mcp-server";
14
12
  export declare const SDK_PACKAGE = "@clipwright/sdk";
15
- /** Мажор Node из `engines` клиентских пакетов; квикстарт называет его (clipwright#129). */
13
+ /** Node major from the client packages' `engines`; the quickstart names it. */
16
14
  export declare const NODE_MIN_MAJOR = 20;
17
- /** Адрес API ИЗ ОКРУЖЕНИЯ — только `https:`: по нему уходит `Authorization: Bearer */
18
- /** cw_…`. Программный `baseUrl` встраивателя не трогаем — его выбирает автор кода. */
15
+ /** API address FROM THE ENVIRONMENT, `https:` only: `Authorization: Bearer cw_…` goes there. */
16
+ /** An embedder's programmatic `baseUrl` is left alone; the code's author chooses it. */
19
17
  export declare function apiBaseUrlFromEnv(raw: string | undefined): string | undefined;