@clipwright/core 0.27.0 → 0.29.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 (111) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/dist/api-failure.d.ts +70 -5
  3. package/dist/api-failure.js +108 -4
  4. package/dist/api-failure.js.map +1 -1
  5. package/dist/contract-dispositions.js +3 -3
  6. package/dist/contract-dispositions.js.map +1 -1
  7. package/dist/contracts/v1/workflow-brief.d.ts +402 -0
  8. package/dist/contracts/v1/workflow-brief.js +40 -0
  9. package/dist/contracts/v1/workflow-brief.js.map +1 -0
  10. package/dist/contracts/v1/workflow-catalog.d.ts +1062 -0
  11. package/dist/contracts/v1/workflow-catalog.js +45 -0
  12. package/dist/contracts/v1/workflow-catalog.js.map +1 -0
  13. package/dist/contracts/v1/workflow-client.d.ts +319 -0
  14. package/dist/contracts/v1/workflow-client.js +37 -0
  15. package/dist/contracts/v1/workflow-client.js.map +1 -0
  16. package/dist/contracts/v1/workflow-dto.d.ts +18 -0
  17. package/dist/contracts/v1/workflow-dto.js +25 -0
  18. package/dist/contracts/v1/workflow-dto.js.map +1 -0
  19. package/dist/contracts/v1/workflow-evidence.d.ts +115 -0
  20. package/dist/contracts/v1/workflow-evidence.js +33 -0
  21. package/dist/contracts/v1/workflow-evidence.js.map +1 -0
  22. package/dist/contracts/v1/workflow-execution.d.ts +822 -0
  23. package/dist/contracts/v1/workflow-execution.js +64 -0
  24. package/dist/contracts/v1/workflow-execution.js.map +1 -0
  25. package/dist/contracts/v1/workflow-plan.d.ts +1078 -0
  26. package/dist/contracts/v1/workflow-plan.js +31 -0
  27. package/dist/contracts/v1/workflow-plan.js.map +1 -0
  28. package/dist/contracts/v1/workflow-primitives.d.ts +63 -0
  29. package/dist/contracts/v1/workflow-primitives.js +19 -0
  30. package/dist/contracts/v1/workflow-primitives.js.map +1 -0
  31. package/dist/contracts/v1/workflow-run-read.d.ts +929 -0
  32. package/dist/contracts/v1/workflow-run-read.js +23 -0
  33. package/dist/contracts/v1/workflow-run-read.js.map +1 -0
  34. package/dist/edit-billing.d.ts +65 -0
  35. package/dist/edit-billing.js +30 -0
  36. package/dist/edit-billing.js.map +1 -0
  37. package/dist/edit-candidate.d.ts +158 -0
  38. package/dist/edit-candidate.js +64 -0
  39. package/dist/edit-candidate.js.map +1 -0
  40. package/dist/edit-revision.d.ts +162 -0
  41. package/dist/edit-revision.js +36 -0
  42. package/dist/edit-revision.js.map +1 -0
  43. package/dist/edit.d.ts +3 -0
  44. package/dist/edit.js +4 -1
  45. package/dist/edit.js.map +1 -1
  46. package/dist/endpoints.d.ts +8 -0
  47. package/dist/endpoints.js +25 -4
  48. package/dist/endpoints.js.map +1 -1
  49. package/dist/errors.d.ts +109 -1
  50. package/dist/errors.js +92 -0
  51. package/dist/errors.js.map +1 -1
  52. package/dist/faceless-customer-anchors.d.ts +7 -0
  53. package/dist/faceless-customer-anchors.js +31 -0
  54. package/dist/faceless-customer-anchors.js.map +1 -0
  55. package/dist/faceless-image-placement.d.ts +23 -0
  56. package/dist/faceless-image-placement.js +30 -0
  57. package/dist/faceless-image-placement.js.map +1 -0
  58. package/dist/faceless-public-plan.d.ts +2 -0
  59. package/dist/faceless-public-plan.js +6 -2
  60. package/dist/faceless-public-plan.js.map +1 -1
  61. package/dist/faceless-public.d.ts +257 -0
  62. package/dist/faceless-public.js +20 -0
  63. package/dist/faceless-public.js.map +1 -1
  64. package/dist/idempotency.d.ts +4 -0
  65. package/dist/idempotency.js +17 -0
  66. package/dist/idempotency.js.map +1 -1
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.js +3 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/run-static-warnings.js +3 -0
  71. package/dist/run-static-warnings.js.map +1 -1
  72. package/dist/runs.d.ts +110 -1
  73. package/dist/runs.js +28 -2
  74. package/dist/runs.js.map +1 -1
  75. package/dist/skills.d.ts +1 -1
  76. package/dist/skills.js +1 -1
  77. package/dist/skills.js.map +1 -1
  78. package/dist/workflows/catalog.d.ts +4 -0
  79. package/dist/workflows/catalog.js +57 -0
  80. package/dist/workflows/catalog.js.map +1 -0
  81. package/dist/workflows/index.d.ts +11 -0
  82. package/dist/workflows/index.js +12 -0
  83. package/dist/workflows/index.js.map +1 -0
  84. package/dist/workflows/methods/faceless-explainer.d.ts +175 -0
  85. package/dist/workflows/methods/faceless-explainer.js +20 -0
  86. package/dist/workflows/methods/faceless-explainer.js.map +1 -0
  87. package/dist/workflows/methods/kinetic-launch.d.ts +175 -0
  88. package/dist/workflows/methods/kinetic-launch.js +19 -0
  89. package/dist/workflows/methods/kinetic-launch.js.map +1 -0
  90. package/dist/workflows/methods/product-image-story.d.ts +175 -0
  91. package/dist/workflows/methods/product-image-story.js +20 -0
  92. package/dist/workflows/methods/product-image-story.js.map +1 -0
  93. package/dist/workflows/methods/shared.d.ts +190 -0
  94. package/dist/workflows/methods/shared.js +13 -0
  95. package/dist/workflows/methods/shared.js.map +1 -0
  96. package/dist/workflows/methods/ugc-faq-answer.d.ts +175 -0
  97. package/dist/workflows/methods/ugc-faq-answer.js +19 -0
  98. package/dist/workflows/methods/ugc-faq-answer.js.map +1 -0
  99. package/dist/workflows/methods/ugc-product-intro.d.ts +175 -0
  100. package/dist/workflows/methods/ugc-product-intro.js +19 -0
  101. package/dist/workflows/methods/ugc-product-intro.js.map +1 -0
  102. package/dist/workflows/methods/website-proof-demo.d.ts +175 -0
  103. package/dist/workflows/methods/website-proof-demo.js +19 -0
  104. package/dist/workflows/methods/website-proof-demo.js.map +1 -0
  105. package/dist/workflows/validate.d.ts +10 -0
  106. package/dist/workflows/validate.js +229 -0
  107. package/dist/workflows/validate.js.map +1 -0
  108. package/dist/workflows.d.ts +1 -0
  109. package/dist/workflows.js +2 -0
  110. package/dist/workflows.js.map +1 -0
  111. package/package.json +7 -2
@@ -0,0 +1,229 @@
1
+ import { workflowBrief } from '../contracts/v1/workflow-brief.js';
2
+ import { workflowPlanDocument } from '../contracts/v1/workflow-plan.js';
3
+ import { damagedTextPaths } from '../script-integrity.js';
4
+ import { planSemanticInserts } from '../semantic-inserts.js';
5
+ import { resolveFacelessCustomerAnchors } from '../faceless-customer-anchors.js';
6
+ import { FIELD_DISPOSITIONS } from '../contract-dispositions.js';
7
+ import { makeUgcInputShape } from '../skills.js';
8
+ import { queryWorkflowMethod } from './catalog.js';
9
+ const result = (issues, warnings) => ({ ready: issues.length === 0, issues, warnings });
10
+ const semanticAnchor = (anchor) => 'startWord' in anchor ? anchor
11
+ : { quote: anchor.quote, ...(anchor.occurrence === undefined ? {} : { occurrence: anchor.occurrence }) };
12
+ const nativeFieldRequested = (input, field, skill) => {
13
+ if (field === 'captions')
14
+ return input[field] === true;
15
+ if (input[field] === undefined)
16
+ return false;
17
+ if (skill === 'make_ugc' && field in FIELD_DISPOSITIONS) {
18
+ const key = field, disposition = FIELD_DISPOSITIONS[key];
19
+ if (disposition.kind === 'warned' && disposition.triggersWhen === 'differs-from-default') {
20
+ const standard = makeUgcInputShape[key].safeParse(undefined);
21
+ return !standard.success || input[field] !== standard.data;
22
+ }
23
+ }
24
+ return true;
25
+ };
26
+ function nativeTransportPaths(native) {
27
+ const paths = [];
28
+ if (native.skill === 'make_ugc') {
29
+ for (const field of ['image', 'broll_url'])
30
+ if (native.input[field] !== undefined)
31
+ paths.push(field);
32
+ for (const [index, segment] of (native.input.segments ?? []).entries())
33
+ if (segment.media_url !== undefined)
34
+ paths.push(`segments.${index}.media_url`);
35
+ for (const [index] of (native.input.inserts ?? []).entries())
36
+ paths.push(`inserts.${index}.media_url`);
37
+ }
38
+ else {
39
+ for (const field of ['style_reference', 'character_reference'])
40
+ if (native.input[field] !== undefined)
41
+ paths.push(field);
42
+ for (const [index] of (native.input.scene_images ?? []).entries())
43
+ paths.push(`scene_images.${index}.image_url`);
44
+ }
45
+ return paths;
46
+ }
47
+ /** Semantic readiness only: ownership, expiry, media placement, pricing and permission remain native admission work. */
48
+ export function checkWorkflowBrief(methodId, input, capabilities) {
49
+ const issues = [];
50
+ const warnings = [];
51
+ const add = (code, path, message) => issues.push({ kind: code, path, message });
52
+ const method = queryWorkflowMethod(methodId, capabilities);
53
+ if (!method)
54
+ return result([{ kind: 'unknown_method', path: 'method', message: 'Workflow method does not exist.' }], []);
55
+ issues.push(...method.availability.reasons);
56
+ const parsed = workflowBrief.safeParse(input);
57
+ if (!parsed.success)
58
+ return result([...issues, ...parsed.error.issues.map(issue => ({ kind: 'invalid_brief', path: issue.path.join('.'), message: issue.message }))], warnings);
59
+ const brief = parsed.data;
60
+ const descriptor = method.descriptor;
61
+ for (const field of descriptor.required_inputs) {
62
+ if (field === 'assets')
63
+ continue;
64
+ if (brief[field] === undefined)
65
+ add(field === 'script' ? 'needs_script' : 'missing_method_input', `brief.${field}`, `This method requires ${field}.`);
66
+ }
67
+ for (const path of damagedTextPaths(brief))
68
+ add('damaged_text', `brief.${path}`, 'Text contains a replacement character: repair it before approval.');
69
+ for (const term of brief.required_terms) {
70
+ if (brief.script !== undefined && !brief.script.includes(term))
71
+ add('required_term_missing', 'brief.script', `The accepted script must contain the exact required term: ${term}`);
72
+ }
73
+ if (descriptor.binding.kind === 'native') {
74
+ const executor = capabilities.executors.find(item => item.skill === descriptor.binding.skill);
75
+ for (const requirement of brief.requirements) {
76
+ if (!executor?.features.includes(requirement.feature) || ['warned', 'rejected', 'stored'].includes(executor.field_dispositions[requirement.feature] ?? '')) {
77
+ if (requirement.required)
78
+ add('missing_capability', 'brief.requirements', `Required capability ${requirement.feature} is not honored by this binding.`);
79
+ else
80
+ warnings.push(`Optional capability ${requirement.feature} is not honored by this binding.`);
81
+ }
82
+ }
83
+ if (brief.requested_format && (!descriptor.output.formats.some(format => format.aspect_ratio === brief.requested_format.aspect_ratio && format.resolution === brief.requested_format.resolution) ||
84
+ !executor?.formats.some(format => format.aspect_ratio === brief.requested_format.aspect_ratio && format.resolution === brief.requested_format.resolution))) {
85
+ add('unsupported_format', 'brief.requested_format', 'Requested geometry is not qualified for this workflow binding.');
86
+ }
87
+ if (brief.native === undefined)
88
+ add('needs_native_input', 'brief.native', 'Choose the supported native input before approval and launch.');
89
+ else if (brief.native.skill !== descriptor.binding.skill)
90
+ add('executor_mismatch', 'brief.native.skill', 'Native input does not match the method executor.');
91
+ else {
92
+ const native = brief.native.input;
93
+ if (!('script' in native) || native.script !== brief.script)
94
+ add('script_mismatch', 'brief.native.input.script', 'Native execution must use the exact accepted script. Brief mode and segmented narration cannot replace it.');
95
+ const format = brief.native.skill === 'make_ugc' ? { aspect_ratio: brief.native.input.aspect_ratio ?? '9:16', resolution: brief.native.input.resolution ?? '1080p' }
96
+ : { aspect_ratio: '9:16', resolution: '1080p' };
97
+ if (!descriptor.output.formats.some(actual => actual.aspect_ratio === format.aspect_ratio && actual.resolution === format.resolution)) {
98
+ add('unsupported_format', 'brief.native.input', 'Native output settings contradict this method output profile.');
99
+ }
100
+ if (brief.requested_format && (format.aspect_ratio !== brief.requested_format.aspect_ratio || format.resolution !== brief.requested_format.resolution)) {
101
+ add('format_mismatch', 'brief.requested_format', 'The requested format must match the effective native output settings.');
102
+ }
103
+ for (const path of nativeTransportPaths(brief.native))
104
+ add('unbound_native_source', `brief.native.input.${path}`, 'Use stable asset bindings; native transport URLs are resolved only by launch preflight.');
105
+ if (brief.native.skill === 'make_ugc') {
106
+ const settings = brief.native.input;
107
+ if ((settings.inserts !== undefined || settings.segments !== undefined) &&
108
+ (!executor?.features.includes('long_form') || ['warned', 'rejected', 'stored'].includes(executor.field_dispositions.long_form ?? ''))) {
109
+ add('missing_capability', 'brief.native.input', 'Segments and inserts require native long-form qualification on this deployment.');
110
+ }
111
+ if (!executor?.formats.some(actual => actual.aspect_ratio === format.aspect_ratio && actual.resolution === format.resolution)) {
112
+ add('unsupported_format', 'brief.native.input', 'Native output settings are not qualified on this deployment.');
113
+ }
114
+ for (const [field, disposition] of Object.entries(FIELD_DISPOSITIONS)) {
115
+ if ((disposition.kind === 'rejected' || executor?.field_dispositions[field] === 'rejected') && nativeFieldRequested(settings, field, 'make_ugc')) {
116
+ add('native_field_rejected', `brief.native.input.${field}`, disposition.kind === 'rejected' ? disposition.message : `Native ${field} is rejected on this deployment.`);
117
+ }
118
+ }
119
+ for (const field of ['captions', 'look', 'person', 'caption_style', 'name']) {
120
+ if (nativeFieldRequested(settings, field, 'make_ugc') &&
121
+ executor?.field_dispositions[field] !== 'implemented')
122
+ warnings.push(`Native ${field} is advisory or not honored; launch keeps the native disposition.`);
123
+ }
124
+ }
125
+ else {
126
+ for (const [field, disposition] of Object.entries(executor?.field_dispositions ?? {})) {
127
+ if (disposition === 'rejected' && nativeFieldRequested(native, field, 'make_faceless')) {
128
+ add('native_field_rejected', `brief.native.input.${field}`, `Native ${field} is rejected on this deployment.`);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return result(issues, warnings);
135
+ }
136
+ export function validateWorkflowPlan(input, capabilities) {
137
+ const parsed = workflowPlanDocument.safeParse(input);
138
+ if (!parsed.success)
139
+ return result(parsed.error.issues.map(issue => ({ kind: 'invalid_plan', path: issue.path.join('.'), message: issue.message })), []);
140
+ const document = parsed.data;
141
+ const readiness = checkWorkflowBrief(document.method.method_id, document.brief, capabilities);
142
+ const { issues, warnings } = readiness;
143
+ const add = (code, path, message) => issues.push({ kind: code, path, message });
144
+ const method = queryWorkflowMethod(document.method.method_id, capabilities);
145
+ if (document.method.version !== method.descriptor.version || document.method.content_digest !== method.descriptor.content_digest) {
146
+ add('method_pin_changed', 'method', 'The method content has changed; save a new revision and approve its exact digest.');
147
+ }
148
+ if (document.method.capability_digest !== capabilities.content_digest)
149
+ add('capability_pin_changed', 'method.capability_digest', 'Capabilities changed; revalidate, save and approve a new revision before a new launch.');
150
+ for (const claim of document.claims) {
151
+ if (claim.status !== 'checked') {
152
+ if (claim.required)
153
+ add('unresolved_claim', `claims.${claim.id}`, 'Required product evidence is not checked.');
154
+ else
155
+ warnings.push(`Claim ${claim.id} is ${claim.status}; it is not checked proof.`);
156
+ }
157
+ }
158
+ const script = document.brief.script;
159
+ const faceless = method.descriptor.binding.kind === 'native' && method.descriptor.binding.skill === 'make_faceless';
160
+ let previousRole = -1;
161
+ let previousWord = -1;
162
+ for (const beat of document.beats) {
163
+ const role = method.descriptor.script_rules.structure.indexOf(beat.role);
164
+ if (role < 0 || role < previousRole)
165
+ add('invalid_method_structure', `beats.${beat.id}.role`, 'Beat roles must follow this method script structure in order.');
166
+ previousRole = role;
167
+ if (beat.visual !== undefined && method.descriptor.binding.kind === 'native') {
168
+ if (beat.required)
169
+ add('unsupported_visual_directive', `beats.${beat.id}`, 'The native binding does not enforce authored visual directions.');
170
+ else
171
+ warnings.push(`Visual direction for beat ${beat.id} is advisory; the executor chooses its actual layout.`);
172
+ }
173
+ if (script !== undefined) {
174
+ try {
175
+ const first = faceless ? resolveFacelessCustomerAnchors(script, [{ image_url: beat.id, anchor: beat.anchor }])[0].first
176
+ : planSemanticInserts(script, [{ insertId: beat.id, mediaId: beat.id, anchor: semanticAnchor(beat.anchor) }]).inserts[0].startWord;
177
+ if (first < previousWord)
178
+ add('invalid_method_structure', `beats.${beat.id}.anchor`, 'Accepted semantic beats must follow the script order.');
179
+ previousWord = first;
180
+ }
181
+ catch (error) {
182
+ add('invalid_anchor', `beats.${beat.id}.anchor`, error instanceof Error ? error.message : 'Invalid semantic anchor.');
183
+ }
184
+ }
185
+ }
186
+ const instances = new Set();
187
+ if (document.assets.length > 0 && method.descriptor.binding.kind === 'native') {
188
+ const executor = capabilities.executors.find(item => item.skill === method.descriptor.binding.skill);
189
+ if (method.descriptor.binding.skill === 'make_ugc')
190
+ add('unsupported_asset_binding', 'assets', 'This B1 UGC binding does not compile faceless asset placements.');
191
+ else if (!executor?.features.includes('scene_images') || ['warned', 'rejected', 'stored'].includes(executor.field_dispositions.scene_images ?? '')) {
192
+ add('missing_capability', 'assets', 'Supplied assets require qualified scene_images support.');
193
+ }
194
+ }
195
+ for (const asset of document.assets) {
196
+ if (instances.has(asset.instance_id))
197
+ add('duplicate_instance', 'assets', 'Each asset placement needs its own instance ID.');
198
+ instances.add(asset.instance_id);
199
+ if (asset.rights === 'unresolved')
200
+ add('unresolved_rights', `assets.${asset.instance_id}`, 'Asset rights are unresolved.');
201
+ if (asset.protected_area !== undefined) {
202
+ const executor = faceless ? capabilities.executors.find(item => item.skill === 'make_faceless') : undefined;
203
+ if (!executor?.configured || !executor.qualified || !executor.enabled || !executor.features.includes('protected_product_area') ||
204
+ executor.field_dispositions.protected_product_area !== 'implemented') {
205
+ add('placement_preflight_required', `assets.${asset.instance_id}.protected_area`, 'A measured crop and motion preflight must prove that this product area remains visible.');
206
+ }
207
+ }
208
+ if (asset.purpose !== 'illustration' && asset.provenance === 'generated_illustration')
209
+ add('unsupported_proof', `assets.${asset.instance_id}`, 'Generated illustration cannot establish product or UI proof.');
210
+ }
211
+ if (method.descriptor.required_inputs.includes('assets') && document.assets.length === 0)
212
+ add('missing_method_input', 'assets', 'This method requires supplied asset bindings.');
213
+ if (method.descriptor.id === 'product-image-story' && document.assets.length > 0 && !document.assets.some(asset => asset.purpose === 'product_proof' && asset.provenance !== 'generated_illustration')) {
214
+ add('missing_product_proof', 'assets', 'This method requires original product proof; illustrative assets cannot replace it.');
215
+ }
216
+ if (script !== undefined && document.assets.length > 0) {
217
+ try {
218
+ if (faceless)
219
+ resolveFacelessCustomerAnchors(script, document.assets.map(asset => ({ image_url: asset.asset_id, anchor: asset.anchor })));
220
+ else
221
+ planSemanticInserts(script, document.assets.map(asset => ({ insertId: asset.instance_id, mediaId: asset.asset_id, anchor: semanticAnchor(asset.anchor) })));
222
+ }
223
+ catch (error) {
224
+ add('invalid_anchor', 'assets', error instanceof Error ? error.message : 'Asset anchors are invalid or overlap.');
225
+ }
226
+ }
227
+ return result(issues, warnings);
228
+ }
229
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/workflows/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './workflows/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './workflows/index.js';
2
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipwright/core",
3
- "version": "0.27.0",
3
+ "version": "0.29.0",
4
4
  "description": "Zod schemas and the shared request/response contract of the Clipwright UGC video API",
5
5
  "license": "MIT",
6
6
  "author": "Dimantika Sp. z o.o.",
@@ -17,6 +17,10 @@
17
17
  "node": ">=20"
18
18
  },
19
19
  "exports": {
20
+ "./workflows": {
21
+ "types": "./dist/workflows.d.ts",
22
+ "default": "./dist/workflows.js"
23
+ },
20
24
  "./media-timebase": {
21
25
  "types": "./dist/media-timebase.d.ts",
22
26
  "default": "./dist/media-timebase.js"
@@ -54,7 +58,8 @@
54
58
  "zod": "^4.4.3"
55
59
  },
56
60
  "devDependencies": {
57
- "@types/node": "^26.1.1"
61
+ "@types/node": "^26.1.1",
62
+ "esbuild": "0.28.2"
58
63
  },
59
64
  "scripts": {
60
65
  "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",