@clipwright/core 0.19.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.
- package/CHANGELOG.md +14 -0
- package/dist/__fixtures__/queue-promises.d.ts +5 -84
- package/dist/__fixtures__/queue-promises.js +7 -84
- package/dist/__fixtures__/queue-promises.js.map +1 -1
- package/dist/account-actors.d.ts +25 -25
- package/dist/account-actors.js +25 -25
- package/dist/account-actors.js.map +1 -1
- package/dist/account.d.ts +4 -10
- package/dist/account.js +6 -12
- package/dist/account.js.map +1 -1
- package/dist/actor-bounds.d.ts +4 -4
- package/dist/actor-bounds.js +4 -4
- package/dist/actor-bounds.js.map +1 -1
- package/dist/actor-qualities.d.ts +3 -3
- package/dist/actor-qualities.js +3 -3
- package/dist/actor-qualities.js.map +1 -1
- package/dist/actors.d.ts +8 -8
- package/dist/actors.js +9 -9
- package/dist/actors.js.map +1 -1
- package/dist/api-failure.d.ts +28 -129
- package/dist/api-failure.js +52 -225
- package/dist/api-failure.js.map +1 -1
- package/dist/aspect.d.ts +26 -96
- package/dist/aspect.js +32 -108
- package/dist/aspect.js.map +1 -1
- package/dist/contract-dispositions.d.ts +42 -167
- package/dist/contract-dispositions.js +54 -184
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/endpoints.d.ts +5 -5
- package/dist/endpoints.js +3 -3
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +33 -101
- package/dist/errors.js +42 -108
- package/dist/errors.js.map +1 -1
- package/dist/faceless-cut-style.d.ts +115 -0
- package/dist/faceless-cut-style.js +109 -0
- package/dist/faceless-cut-style.js.map +1 -0
- package/dist/faceless-image-qualification.d.ts +97 -0
- package/dist/faceless-image-qualification.js +145 -0
- package/dist/faceless-image-qualification.js.map +1 -0
- package/dist/faceless-short-61.d.ts +83 -0
- package/dist/faceless-short-61.js +152 -0
- package/dist/faceless-short-61.js.map +1 -0
- package/dist/faceless-storyboard-timing.d.ts +40 -0
- package/dist/faceless-storyboard-timing.js +97 -0
- package/dist/faceless-storyboard-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
- package/dist/faceless-storyboard-v2-plan.js +112 -0
- package/dist/faceless-storyboard-v2-plan.js.map +1 -0
- package/dist/faceless-storyboard-v2-timing.d.ts +52 -0
- package/dist/faceless-storyboard-v2-timing.js +136 -0
- package/dist/faceless-storyboard-v2-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2.d.ts +44 -0
- package/dist/faceless-storyboard-v2.js +43 -0
- package/dist/faceless-storyboard-v2.js.map +1 -0
- package/dist/faceless-storyboard.d.ts +55 -0
- package/dist/faceless-storyboard.js +105 -0
- package/dist/faceless-storyboard.js.map +1 -0
- package/dist/idempotency.d.ts +8 -44
- package/dist/idempotency.js +10 -44
- package/dist/idempotency.js.map +1 -1
- package/dist/index.js +21 -25
- package/dist/index.js.map +1 -1
- package/dist/long-form-pricing.d.ts +4 -4
- package/dist/long-form-pricing.js +4 -4
- package/dist/long-form-pricing.js.map +1 -1
- package/dist/long-form-profile.d.ts +2 -2
- package/dist/long-form-profile.js +2 -2
- package/dist/long-form-profile.js.map +1 -1
- package/dist/pacing.d.ts +1 -1
- package/dist/pacing.js +1 -1
- package/dist/pacing.js.map +1 -1
- package/dist/public-endpoints.d.ts +9 -11
- package/dist/public-endpoints.js +11 -13
- package/dist/public-endpoints.js.map +1 -1
- package/dist/rate-limit.d.ts +23 -130
- package/dist/rate-limit.js +27 -132
- package/dist/rate-limit.js.map +1 -1
- package/dist/render-backend.d.ts +30 -145
- package/dist/render-backend.js +4 -27
- package/dist/render-backend.js.map +1 -1
- package/dist/run-preflight.d.ts +4 -4
- package/dist/run-preflight.js +10 -10
- package/dist/run-preflight.js.map +1 -1
- package/dist/run-static-warnings.d.ts +8 -8
- package/dist/run-static-warnings.js +24 -24
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/runs.d.ts +18 -55
- package/dist/runs.js +26 -94
- package/dist/runs.js.map +1 -1
- package/dist/script-integrity.d.ts +6 -7
- package/dist/script-integrity.js +7 -8
- package/dist/script-integrity.js.map +1 -1
- package/dist/semantic-inserts.d.ts +4 -4
- package/dist/semantic-inserts.js +6 -6
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +33 -107
- package/dist/skills.js +69 -160
- package/dist/skills.js.map +1 -1
- package/dist/tts-backend.d.ts +13 -42
- package/dist/tts-backend.js +2 -10
- package/dist/tts-backend.js.map +1 -1
- package/dist/uploads.d.ts +4 -4
- package/dist/uploads.js +4 -4
- package/dist/uploads.js.map +1 -1
- package/dist/vendor-response.d.ts +17 -80
- package/dist/vendor-response.js +19 -67
- package/dist/vendor-response.js.map +1 -1
- package/dist/voice-admission.d.ts +5 -5
- package/dist/voice-admission.js +6 -6
- package/dist/voice-admission.js.map +1 -1
- package/dist/voice-catalog-data.d.ts +2 -2
- package/dist/voice-catalog-data.js +2 -2
- package/dist/voice-catalog-data.js.map +1 -1
- package/dist/voice-catalog.d.ts +5 -5
- package/dist/voice-catalog.js +6 -6
- package/dist/voice-catalog.js.map +1 -1
- package/dist/voice-listing.d.ts +4 -4
- package/dist/voice-listing.js +6 -6
- package/dist/voice-listing.js.map +1 -1
- package/dist/voices.d.ts +40 -82
- package/dist/voices.js +56 -99
- package/dist/voices.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,30 +1,20 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { makeUgcInputShape } from "./skills.js";
|
|
3
3
|
import { BROLL_POLICY_DESCRIPTION } from "./broll-policy.js";
|
|
4
|
-
/**
|
|
5
|
-
/**
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
* полем `contract_version` в ответе quote. Любое следующее ломающее изменение
|
|
9
|
-
* обязано её двигать; до этого пересмотра версии не было вообще, поэтому первое
|
|
10
|
-
* её значение совпадает с месяцем самого пересмотра.
|
|
11
|
-
*/
|
|
4
|
+
/** Disposition registry for `make_ugc` input fields: every field must have a recorded */
|
|
5
|
+
/** decision. The type guards completeness; the egress test proves truth. */
|
|
6
|
+
/** Public contract version, sent as the `X-Clipwright-Contract` header and as `contract_version` */
|
|
7
|
+
/** in the quote response. Every breaking change must bump it. */
|
|
12
8
|
export const CONTRACT_VERSION = "2026-09-14";
|
|
13
9
|
export const CONTRACT_VERSION_HEADER = "X-Clipwright-Contract";
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
* `satisfies` — страж полноты (поле входа без строки здесь не компилируется),
|
|
17
|
-
* `as const` — литеральные типы, из которых ниже выводится множество
|
|
18
|
-
* отклонённых полей. Обычная аннотация `: Record<…>` дала бы только первое, и
|
|
19
|
-
* `offeredUgcInputShape` пришлось бы перечислять руками — то есть завести
|
|
20
|
-
* второй источник правды ровно там, где мы чиним последствия первого.
|
|
21
|
-
*/
|
|
10
|
+
/** `satisfies` guards completeness; `as const` keeps literal types, from which the rejected */
|
|
11
|
+
/** set is derived below instead of being listed by hand. */
|
|
22
12
|
export const FIELD_DISPOSITIONS = {
|
|
23
13
|
script: { kind: "implemented", provenBy: "egress" },
|
|
24
14
|
voice: { kind: "implemented", provenBy: "egress" },
|
|
25
15
|
voice_id: { kind: "implemented", provenBy: "egress" },
|
|
26
16
|
tts_model: { kind: "implemented", provenBy: "egress" },
|
|
27
|
-
//
|
|
17
|
+
// Fields that do not reach the render and are reported as not honored.
|
|
28
18
|
person: {
|
|
29
19
|
kind: "warned",
|
|
30
20
|
warning: "person is not honored yet: this request uses the default actor; choose actor_id from list_actors or provide image to select a different face",
|
|
@@ -50,16 +40,11 @@ export const FIELD_DISPOSITIONS = {
|
|
|
50
40
|
warning: "caption_style is not honored: captions are not rendered in this prototype (stage-B)",
|
|
51
41
|
triggersWhen: "differs-from-default",
|
|
52
42
|
},
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
// `resolution` был самым опасным полем аудита — он ЧИТАЛСЯ в таске и потому
|
|
56
|
-
// выглядел рабочим, а до вендора не доезжал. Поэтому обе строки прикрыты
|
|
57
|
-
// egress-тестами: три разрешения обязаны дать три РАЗНЫХ тела `/v3/videos`.
|
|
43
|
+
// Both reach the vendor from the request; egress tests require three resolutions
|
|
44
|
+
// to produce three different request bodies.
|
|
58
45
|
resolution: { kind: "implemented", provenBy: "egress" },
|
|
59
46
|
aspect_ratio: { kind: "implemented", provenBy: "egress" },
|
|
60
|
-
//
|
|
61
|
-
// `CLIPWRIGHT_REMOTE_FETCH`: базовая строка здесь — `implemented`, а при
|
|
62
|
-
// выключенном флаге `resolveDispositions` переводит её в `rejected` (см. ниже).
|
|
47
|
+
// Gated by `CLIPWRIGHT_REMOTE_FETCH`: `resolveDispositions` rejects it when the flag is off.
|
|
63
48
|
image: { kind: "implemented", provenBy: "egress" },
|
|
64
49
|
actor_id: { kind: "implemented", provenBy: "egress" },
|
|
65
50
|
actor_gender: { kind: "implemented", provenBy: "egress" },
|
|
@@ -75,51 +60,33 @@ export const FIELD_DISPOSITIONS = {
|
|
|
75
60
|
kind: "rejected",
|
|
76
61
|
message: "broll_url is not supported yet: b-roll requires segmented composition. Omit it",
|
|
77
62
|
},
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
// композиции, — она появилась в US-527 и доказана живым `composed.mp4`.
|
|
81
|
-
// Диспозиция ОБУСЛОВЛЕНА килсвитчем `CLIPWRIGHT_COMPOSE` тем же приёмом, что
|
|
82
|
-
// и `background`: при выключенной стадии выжечь плашку некому, и поле снова
|
|
83
|
-
// отклоняется, а не принимается и тихо игнорируется.
|
|
63
|
+
// Burned in by composition; gated by `CLIPWRIGHT_COMPOSE`, so with composition off
|
|
64
|
+
// the field is rejected rather than silently ignored.
|
|
84
65
|
disclosure_overlay: { kind: "implemented", provenBy: "composition" },
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
// бы выбор фона, которого некому исполнить. Переключение доказывается
|
|
88
|
-
// рендером, а не готовностью схемы.
|
|
89
|
-
// US-527 перевёл строку из `rejected` в `implemented`: композиция реально
|
|
90
|
-
// кладёт клип в кадр и объявляет долю полей в `warnings[]`. Диспозиция
|
|
91
|
-
// ОБУСЛОВЛЕНА килсвитчем `CLIPWRIGHT_COMPOSE` — как `image` обусловлен
|
|
92
|
-
// `CLIPWRIGHT_REMOTE_FETCH`: при выключенной стадии поле снова отклоняется,
|
|
93
|
-
// потому что исполнять выбор фона в этот момент некому.
|
|
66
|
+
// Applied by composition and gated by `CLIPWRIGHT_COMPOSE`, like `image` is gated
|
|
67
|
+
// by `CLIPWRIGHT_REMOTE_FETCH`.
|
|
94
68
|
background: { kind: "implemented", provenBy: "composition" },
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
// `webhook_url` ломает интеграцию: агент подписался и ПЕРЕСТАЛ поллить, а
|
|
98
|
-
// `warnings[]` доставляются через `get_run` — по тому самому каналу, от
|
|
99
|
-
// которого клиент отказался. Предупреждение на канале, который никто не
|
|
100
|
-
// слушает, раскрытием не является; поэтому здесь только синхронный отказ.
|
|
69
|
+
// Only a synchronous refusal reaches the caller: a subscriber stops polling, and
|
|
70
|
+
// `warnings[]` arrive through the very `get_run` channel it abandoned.
|
|
101
71
|
webhook_url: {
|
|
102
72
|
kind: "rejected",
|
|
103
73
|
message: "webhook_url is not supported: no webhook is ever delivered. Poll get_run with the run_id instead",
|
|
104
74
|
},
|
|
105
75
|
};
|
|
106
|
-
/**
|
|
76
|
+
/** Input fields in shape declaration order: a deterministic walk of the registry. */
|
|
107
77
|
const CONTRACT_FIELDS = Object.keys(makeUgcInputShape);
|
|
108
|
-
/** `create_actor`
|
|
78
|
+
/** `create_actor` is open only with the fetch surface: a personal actor cannot render without it. */
|
|
109
79
|
export function isActorGenerationEnabled(env = process.env) {
|
|
110
80
|
return env.CLIPWRIGHT_ACTOR_GENERATION === "1" && env.CLIPWRIGHT_REMOTE_FETCH === "1";
|
|
111
81
|
}
|
|
112
|
-
/**
|
|
82
|
+
/** `create_actor` builds a face from words, so with generation on the advice points there. */
|
|
113
83
|
const PERSON_WITH_ACTOR_GENERATION = {
|
|
114
84
|
kind: "warned",
|
|
115
85
|
warning: "person is not honored: this request uses the default actor; create a personal actor from the description with create_actor, then pass its actor_id",
|
|
116
86
|
triggersWhen: "present",
|
|
117
87
|
};
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
* на деплое, а не меняется от запроса к запросу, и `tools/list` не должен
|
|
121
|
-
* дрожать между двумя соседними вызовами.
|
|
122
|
-
*/
|
|
88
|
+
/** Flags from the environment, read once per process: a kill switch is set at deploy, */
|
|
89
|
+
/** and `tools/list` must not flicker between calls. */
|
|
123
90
|
export function contractFlagsFromEnv(env = process.env) {
|
|
124
91
|
return {
|
|
125
92
|
remoteFetch: env.CLIPWRIGHT_REMOTE_FETCH === "1",
|
|
@@ -136,26 +103,24 @@ const REMOTE_FETCH_DISABLED = {
|
|
|
136
103
|
kind: "rejected",
|
|
137
104
|
message: "image is temporarily disabled (remote media fetch is off); omit it to render with the default actor",
|
|
138
105
|
};
|
|
139
|
-
/**
|
|
140
|
-
* Таблица диспозиций С УЧЁТОМ флагов. Базовая `FIELD_DISPOSITIONS` описывает,
|
|
141
|
-
* что код умеет; эта функция — что он предлагает ПРЯМО СЕЙЧАС.
|
|
142
|
-
*/
|
|
143
|
-
/** Отказ по `background`, когда стадия композиции выключена. */
|
|
106
|
+
/** Refusal for `background` when the composition stage is off. */
|
|
144
107
|
const COMPOSE_DISABLED = {
|
|
145
108
|
kind: "rejected",
|
|
146
109
|
message: "background is not available: composition is disabled on this deployment. Request an aspect_ratio close to your image instead",
|
|
147
110
|
};
|
|
148
|
-
/**
|
|
111
|
+
/** Refusal for `disclosure_overlay` when the composition stage is off. */
|
|
149
112
|
const DISCLOSURE_OVERLAY_DISABLED = {
|
|
150
113
|
kind: "rejected",
|
|
151
114
|
message: "disclosure_overlay is not available: composition is disabled on this deployment. The output is still marked in the run contract and in the file metadata",
|
|
152
115
|
};
|
|
153
|
-
/**
|
|
154
|
-
/**
|
|
116
|
+
/** Long-form prerequisites in ONE expression for all its fields: two copies could */
|
|
117
|
+
/** open `segments` while `inserts` stay closed. */
|
|
155
118
|
function longFormReady(flags) {
|
|
156
119
|
return flags.longForm === true && flags.remoteFetch && flags.compose;
|
|
157
120
|
}
|
|
158
121
|
const LONG_FORM_DISABLED = { kind: "rejected", message: LONG_FORM_DISABLED_MESSAGE };
|
|
122
|
+
/** Dispositions with flags applied: the base table says what the code can do, this */
|
|
123
|
+
/** says what it offers right now. */
|
|
159
124
|
export function resolveDispositions(flags) {
|
|
160
125
|
const longForm = longFormReady(flags);
|
|
161
126
|
return {
|
|
@@ -167,57 +132,31 @@ export function resolveDispositions(flags) {
|
|
|
167
132
|
actor_id: flags.remoteFetch ? FIELD_DISPOSITIONS.actor_id : {
|
|
168
133
|
kind: "rejected", message: "actor_id is temporarily disabled (remote media fetch is off); omit it to use the default actor",
|
|
169
134
|
},
|
|
170
|
-
//
|
|
135
|
+
// A face hint for `image` means nothing without `image`, so it switches off with it.
|
|
171
136
|
actor_gender: flags.remoteFetch ? FIELD_DISPOSITIONS.actor_gender : {
|
|
172
137
|
kind: "rejected", message: "actor_gender is temporarily disabled together with image (remote media fetch is off); omit both to use the default actor",
|
|
173
138
|
},
|
|
174
|
-
//
|
|
175
|
-
// РАБОТАЕТ, а выключенный флаг переводит её в отказ. Обещать выбор фона,
|
|
176
|
-
// когда стадия композиции выключена, значило бы принять поле, которое
|
|
177
|
-
// некому исполнить.
|
|
139
|
+
// With composition off nothing can apply a background, so the field is rejected.
|
|
178
140
|
background: flags.compose ? FIELD_DISPOSITIONS.background : COMPOSE_DISABLED,
|
|
179
|
-
//
|
|
180
|
-
// стадией композиции, и при выключенном флаге исполнять её некому.
|
|
141
|
+
// Same gating as `background`: the visible overlay is burned in by composition.
|
|
181
142
|
disclosure_overlay: flags.compose
|
|
182
143
|
? FIELD_DISPOSITIONS.disclosure_overlay
|
|
183
144
|
: DISCLOSURE_OVERLAY_DISABLED,
|
|
184
145
|
};
|
|
185
146
|
}
|
|
186
|
-
/**
|
|
187
|
-
|
|
188
|
-
*
|
|
189
|
-
* Отличается от `FIELD_DISPOSITIONS` ровно на применённые флаги: базовая
|
|
190
|
-
* таблица говорит, что код УМЕЕТ, эта — что он предлагает прямо сейчас.
|
|
191
|
-
*/
|
|
147
|
+
/** The process's effective table, from which every surface is built: `FIELD_DISPOSITIONS` */
|
|
148
|
+
/** with the flags applied. */
|
|
192
149
|
export const EFFECTIVE_DISPOSITIONS = resolveDispositions({
|
|
193
150
|
...contractFlagsFromEnv(),
|
|
194
151
|
actorGeneration: isActorGenerationEnabled(),
|
|
195
152
|
});
|
|
196
|
-
/**
|
|
197
|
-
* Дефолт поля — то, что схема подставит на `undefined`. Берём у самой схемы, а
|
|
198
|
-
* не переписываем значения рядом: второй список дефолтов разошёлся бы с первым
|
|
199
|
-
* тем же способом, которым разошлись схема и рендер.
|
|
200
|
-
*/
|
|
153
|
+
/** A field's default, taken from the schema itself: a second list of defaults would drift. */
|
|
201
154
|
const FIELD_DEFAULTS = Object.fromEntries(CONTRACT_FIELDS.map((field) => {
|
|
202
155
|
const parsed = makeUgcInputShape[field].safeParse(undefined);
|
|
203
156
|
return [field, parsed.success ? parsed.data : undefined];
|
|
204
157
|
}));
|
|
205
|
-
/**
|
|
206
|
-
|
|
207
|
-
*
|
|
208
|
-
* ЗАЧЕМ: `offeredUgcInputShape` убирает отклонённое поле из схемы, но там, где
|
|
209
|
-
* поле почему-либо остаётся видимым, вызыватель обязан прочитать ПРИЧИНУ прямо
|
|
210
|
-
* в описании. Тогда самоописательность — свойство схемы по построению, а не
|
|
211
|
-
* разовая правка двух файлов, которую следующее поле воспроизведёт заново.
|
|
212
|
-
*/
|
|
213
|
-
/**
|
|
214
|
-
* Примечание для JSON-Schema `description` — по БАЗОВОЙ таблице.
|
|
215
|
-
*
|
|
216
|
-
* Варианта «по действующей таблице» здесь нет НАМЕРЕННО, и это следствие
|
|
217
|
-
* топологии: схему видит клиент, а флаги принадлежат серверу. Причину
|
|
218
|
-
* аварийного отказа вызыватель узнаёт из текста 400, а не из описания поля,
|
|
219
|
-
* которое у него в схеме и так осталось.
|
|
220
|
-
*/
|
|
158
|
+
/** Disposition note for the JSON Schema `description`, from the base table: the schema */
|
|
159
|
+
/** belongs to the client, the flags to the server, whose 400 text names emergency refusals. */
|
|
221
160
|
export function dispositionNote(field) {
|
|
222
161
|
return noteFor(FIELD_DISPOSITIONS[field]);
|
|
223
162
|
}
|
|
@@ -237,60 +176,19 @@ function annotate(field) {
|
|
|
237
176
|
const schema = makeUgcInputShape[field];
|
|
238
177
|
return (note ? schema.describe(note) : schema);
|
|
239
178
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
* stdio-процесс НА МАШИНЕ ПОЛЬЗОВАТЕЛЯ, говорящий с нашим API по HTTP. Значит
|
|
245
|
-
* его `process.env` — окружение КЛИЕНТА, а не сервера. Строй мы предлагаемую
|
|
246
|
-
* поверхность по флагам, аварийный рубильник сервера начал бы управлять
|
|
247
|
-
* клиентской схемой: у пользователя без `CLIPWRIGHT_REMOTE_FETCH` поле `image`
|
|
248
|
-
* пропадало бы из `tools/list`, даже когда на сервере оно работает, — и
|
|
249
|
-
* наоборот, выставив переменную у себя, клиент вернул бы поле в схему, а
|
|
250
|
-
* сервер ответил бы 400.
|
|
251
|
-
*
|
|
252
|
-
* Поэтому граница проведена так:
|
|
253
|
-
* - ЧТО ПРЕДЛАГАЕТСЯ (схема, типы SDK, `--help`) — из БАЗОВОЙ таблицы: это
|
|
254
|
-
* форма контракта, одинаковая у всех;
|
|
255
|
-
* - ЧТО ПРИНИМАЕТСЯ ПРЯМО СЕЙЧАС (`rejectedFields`, `dispositionWarnings`) —
|
|
256
|
-
* из ДЕЙСТВУЮЩЕЙ: это решение сервера, и принимает его сервер.
|
|
257
|
-
* Килсвитч остаётся аварийным отказом на входе API, а не правкой чужой схемы.
|
|
258
|
-
*/
|
|
259
|
-
/**
|
|
260
|
-
* Полный shape входа, где каждое несоблюдённое поле несёт причину в описании.
|
|
261
|
-
* Нужен там, где поверхность обязана показать ВСЕ поля (например, таблица
|
|
262
|
-
* диспозиций в доках); предлагать поля вызывателю следует не отсюда, а из
|
|
263
|
-
* `offeredUgcInputShape`.
|
|
264
|
-
*/
|
|
179
|
+
// The MCP server runs on the user's machine, so its env is the client's. What is offered
|
|
180
|
+
// comes from the base table; what is accepted right now comes from the effective one.
|
|
181
|
+
/** Full input shape where every unhonored field carries its reason. For surfaces that list */
|
|
182
|
+
/** all fields; offer fields to callers from `offeredUgcInputShape` instead. */
|
|
265
183
|
export const annotatedUgcInputShape = Object.fromEntries(CONTRACT_FIELDS.map((field) => [field, annotate(field)]));
|
|
266
|
-
/**
|
|
267
|
-
|
|
268
|
-
* (блокер B4).
|
|
269
|
-
*
|
|
270
|
-
* Отбивать отклонённое поле четырёхсотым, продолжая объявлять его в
|
|
271
|
-
* `tools/list`, в `--help` и в типах SDK, — это «предлагаем и наказываем»:
|
|
272
|
-
* агент читает схему, видит `character`, вызывает и получает 400. Множество
|
|
273
|
-
* выводится ИЗ РЕЕСТРА, поэтому смена диспозиции переносит поле между
|
|
274
|
-
* поверхностями одной строкой, а не правкой каждого потребителя.
|
|
275
|
-
*/
|
|
184
|
+
/** Offered input surface = full shape minus rejected fields, so no schema offers a field */
|
|
185
|
+
/** that then gets a 400. Derived from the registry, so one line moves a field. */
|
|
276
186
|
export const offeredUgcInputShape = Object.fromEntries(CONTRACT_FIELDS.filter((field) => FIELD_DISPOSITIONS[field].kind !== "rejected").map((field) => [field, annotate(field)]));
|
|
277
|
-
/**
|
|
278
|
-
|
|
279
|
-
* полного (блокер B4 на поверхности типов). Раньше он строился из полной схемы,
|
|
280
|
-
* и TypeScript-пользователь получал автокомплит на `character`/`webhook_url`,
|
|
281
|
-
* вызывал и получал 400 — тот же дефект «предлагаем и наказываем», только не в
|
|
282
|
-
* MCP. По правилу проекта №2 типы SDK — контрактная поверхность наравне с
|
|
283
|
-
* остальными.
|
|
284
|
-
*
|
|
285
|
-
* ЗАЧЕМ отдельно от `MakeUgcInput` (= выход `z.infer`, где дефолты уже
|
|
286
|
-
* обязательны): без него SDK ждал бы полностью заполненный объект.
|
|
287
|
-
*/
|
|
187
|
+
/** Input type for SDK/CLI/MCP, from the offered shape. Separate from `MakeUgcInput` (the */
|
|
188
|
+
/** `z.infer` output, where defaults are required) so callers need not fill every field. */
|
|
288
189
|
export const offeredUgcInput = z.object(offeredUgcInputShape);
|
|
289
|
-
/**
|
|
290
|
-
|
|
291
|
-
* зовётся на входе API (400 до создания рана и до резервирования кредитов), в
|
|
292
|
-
* MCP и в SDK.
|
|
293
|
-
*/
|
|
190
|
+
/** Rejected fields present in the input. Called by the API (400 before a run or a */
|
|
191
|
+
/** reserve), by MCP and by the SDK. */
|
|
294
192
|
export function rejectedFields(input) {
|
|
295
193
|
const hits = [];
|
|
296
194
|
for (const field of CONTRACT_FIELDS) {
|
|
@@ -304,10 +202,10 @@ export function rejectedFields(input) {
|
|
|
304
202
|
return hits;
|
|
305
203
|
}
|
|
306
204
|
const normalizedFieldName = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
307
|
-
/**
|
|
205
|
+
/** Fields offered to the client; rejected ones are not listed. */
|
|
308
206
|
export const ACCEPTED_UGC_FIELDS = Object.keys(offeredUgcInputShape);
|
|
309
|
-
/**
|
|
310
|
-
/**
|
|
207
|
+
/** Keys outside `fields` (the contract by default). Rejected contract fields are not */
|
|
208
|
+
/** included: `rejectedFields` names them with their reason. */
|
|
311
209
|
export function unknownFields(raw, fields = CONTRACT_FIELDS) {
|
|
312
210
|
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
313
211
|
return [];
|
|
@@ -319,20 +217,8 @@ export function unknownFields(raw, fields = CONTRACT_FIELDS) {
|
|
|
319
217
|
suggestion: fields.find((candidate) => normalizedFieldName(candidate) === normalizedFieldName(field)),
|
|
320
218
|
}));
|
|
321
219
|
}
|
|
322
|
-
/**
|
|
323
|
-
|
|
324
|
-
*
|
|
325
|
-
* Вход ожидается УЖЕ РАСПАРСЕННЫМ: дефолты подставлены, поэтому сравнение с
|
|
326
|
-
* дефолтом различает «клиент промолчал» и «клиент явно попросил другое».
|
|
327
|
-
* Сравнение через `===` достаточно: все дефолтные значения контракта —
|
|
328
|
-
* примитивы (строка или булев).
|
|
329
|
-
*
|
|
330
|
-
* Это статические тексты диспозиций. ДИНАМИЧЕСКИЕ warnings (подмена
|
|
331
|
-
* разрешения/формата, голосовые) порождаются именованными генераторами
|
|
332
|
-
* (`negotiateCapabilities`, `buildVoiceWarnings`,
|
|
333
|
-
* `RAW_VOICE_ID_VALIDATION_WARNING`) — каждый со своим тестом; реестр их не
|
|
334
|
-
* поглощает и на них не претендует.
|
|
335
|
-
*/
|
|
220
|
+
/** Registry warnings for a parsed run input; defaults are filled in, so `===` tells silence */
|
|
221
|
+
/** from an explicit different value. Dynamic warnings come from their own generators. */
|
|
336
222
|
export function dispositionWarnings(input) {
|
|
337
223
|
const warnings = [];
|
|
338
224
|
for (const field of CONTRACT_FIELDS) {
|
|
@@ -353,27 +239,11 @@ export function dispositionWarnings(input) {
|
|
|
353
239
|
}
|
|
354
240
|
return warnings;
|
|
355
241
|
}
|
|
356
|
-
/**
|
|
357
|
-
|
|
358
|
-
*
|
|
359
|
-
* Считается по БАЗОВОЙ таблице, а не по действующей: доказательство относится к
|
|
360
|
-
* КОДУ, и выключенный операционный килсвитч его не отменяет.
|
|
361
|
-
*/
|
|
242
|
+
/** Fields with an `implemented` disposition, input to the coverage meta-tests. From the */
|
|
243
|
+
/** base table: proof belongs to the code, and a disabled kill switch does not revoke it. */
|
|
362
244
|
export const IMPLEMENTED_FIELDS = CONTRACT_FIELDS.filter((field) => FIELD_DISPOSITIONS[field].kind === "implemented");
|
|
363
|
-
/**
|
|
364
|
-
|
|
365
|
-
*
|
|
366
|
-
* До этой стори `implemented` означало ровно одно: «поле доезжает до вендора»,
|
|
367
|
-
* и мета-тест сверял весь список с egress-покрытием. Композиция ввела второй
|
|
368
|
-
* род: `background` до вендора не доезжает НИКОГДА — он применяется у нас, уже
|
|
369
|
-
* после того как вендор отдал клип. Сверять его egress-тестом бессмысленно,
|
|
370
|
-
* а записать в тот же список — значит либо получить вечно красный мета-тест,
|
|
371
|
-
* либо ослабить его до бесполезности.
|
|
372
|
-
*
|
|
373
|
-
* Поэтому список разделён по `provenBy`, и у каждого рода — свой мета-тест:
|
|
374
|
-
* egress-поля сверяются с захватом исходящих запросов, композиционные — с
|
|
375
|
-
* тестами стадии композиции.
|
|
376
|
-
*/
|
|
245
|
+
/** Two kinds of proof, not interchangeable: egress fields are checked against captured */
|
|
246
|
+
/** outgoing requests, composition fields (applied after the vendor) against composition tests. */
|
|
377
247
|
export const EGRESS_PROVEN_FIELDS = CONTRACT_FIELDS.filter((field) => {
|
|
378
248
|
const disposition = FIELD_DISPOSITIONS[field];
|
|
379
249
|
return disposition.kind === "implemented" && disposition.provenBy === "egress";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-dispositions.js","sourceRoot":"","sources":["../src/contract-dispositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,
|
|
1
|
+
{"version":3,"file":"contract-dispositions.js","sourceRoot":"","sources":["../src/contract-dispositions.ts"],"names":[],"mappings":"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"}
|
package/dist/endpoints.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export interface ApiEndpoint {
|
|
2
2
|
method: "GET" | "POST" | "DELETE";
|
|
3
|
-
/**
|
|
3
|
+
/** The path in Hono notation: a parameter is `:id`. */
|
|
4
4
|
path: string;
|
|
5
|
-
/**
|
|
5
|
+
/** Whether the call may charge credits. */
|
|
6
6
|
billed: boolean;
|
|
7
|
-
/**
|
|
7
|
+
/** Whether the quickstart names it. */
|
|
8
8
|
onQuickstart: boolean;
|
|
9
|
-
/**
|
|
9
|
+
/** Whether the route parses the body as JSON. `POST /v1/uploads` takes bytes. */
|
|
10
10
|
jsonBody: boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare const API_ENDPOINTS: readonly ApiEndpoint[];
|
|
13
|
-
/** `GET /v1/runs/{id}
|
|
13
|
+
/** `GET /v1/runs/{id}`: the human notation, with the parameter in curly braces. */
|
|
14
14
|
export declare function endpointLabel(endpoint: ApiEndpoint): string;
|
|
15
15
|
export declare const QUICKSTART_ENDPOINTS: readonly ApiEndpoint[];
|
package/dist/endpoints.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
/**
|
|
1
|
+
/** API routes: the API contract test checks them against `app.routes`, and the quickstart */
|
|
2
|
+
/** prints the "what costs money" list from here. */
|
|
3
3
|
import { ACTOR_DEFAULTS_PATH } from "./broll-policy.js";
|
|
4
4
|
export const API_ENDPOINTS = [
|
|
5
5
|
{ method: "GET", path: "/health", billed: false, onQuickstart: true, jsonBody: false },
|
|
@@ -18,7 +18,7 @@ export const API_ENDPOINTS = [
|
|
|
18
18
|
{ method: "POST", path: "/v1/uploads", billed: false, onQuickstart: false, jsonBody: false },
|
|
19
19
|
{ method: "GET", path: "/internal/portfolio-metrics", billed: false, onQuickstart: false, jsonBody: false },
|
|
20
20
|
];
|
|
21
|
-
/** `GET /v1/runs/{id}
|
|
21
|
+
/** `GET /v1/runs/{id}`: the human notation, with the parameter in curly braces. */
|
|
22
22
|
export function endpointLabel(endpoint) {
|
|
23
23
|
return `${endpoint.method} ${endpoint.path.replace(/:(\w+)/g, "{$1}")}`;
|
|
24
24
|
}
|
package/dist/endpoints.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"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"}
|