@cliangdev/conductor 0.24.1 → 0.26.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 (41) hide show
  1. package/assets/claude/commands/conductor/creative.md +90 -0
  2. package/assets/claude/skills/conductor-creative/SKILL.md +129 -51
  3. package/assets/claude/skills/conductor-creative/references/brand-kit-setup.md +41 -0
  4. package/assets/cli-manifest.json +38 -3
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +2 -1
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/start.d.ts.map +1 -1
  9. package/dist/commands/start.js +2 -0
  10. package/dist/commands/start.js.map +1 -1
  11. package/dist/creative/assertions.js +22 -11
  12. package/dist/creative/frame.js +3 -3
  13. package/dist/creative/job/file-transport.mjs +211 -0
  14. package/dist/creative/job/render.mjs +84 -2
  15. package/dist/creative/job/server.mjs +70 -13
  16. package/dist/lib/creative-render.d.ts +62 -0
  17. package/dist/lib/creative-render.d.ts.map +1 -1
  18. package/dist/lib/creative-render.js +51 -0
  19. package/dist/lib/creative-render.js.map +1 -1
  20. package/dist/lib/plugin-assets.d.ts +48 -1
  21. package/dist/lib/plugin-assets.d.ts.map +1 -1
  22. package/dist/lib/plugin-assets.js +272 -22
  23. package/dist/lib/plugin-assets.js.map +1 -1
  24. package/dist/mcp/api.d.ts +18 -1
  25. package/dist/mcp/api.d.ts.map +1 -1
  26. package/dist/mcp/api.js +20 -2
  27. package/dist/mcp/api.js.map +1 -1
  28. package/dist/mcp/index.d.ts +2414 -471
  29. package/dist/mcp/index.d.ts.map +1 -1
  30. package/dist/mcp/index.js +246 -77
  31. package/dist/mcp/index.js.map +1 -1
  32. package/dist/mcp/tools/creative-drafts.d.ts +134 -0
  33. package/dist/mcp/tools/creative-drafts.d.ts.map +1 -0
  34. package/dist/mcp/tools/creative-drafts.js +405 -0
  35. package/dist/mcp/tools/creative-drafts.js.map +1 -0
  36. package/dist/mcp/tools/creatives.d.ts +60 -0
  37. package/dist/mcp/tools/creatives.d.ts.map +1 -1
  38. package/dist/mcp/tools/creatives.js +219 -23
  39. package/dist/mcp/tools/creatives.js.map +1 -1
  40. package/package.json +1 -1
  41. package/scripts/build-creative.mjs +1 -0
@@ -0,0 +1,405 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { lstat, mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
4
+ import { basename, isAbsolute, join, resolve, sep } from 'node:path';
5
+ import { apiPost, ApiError } from '../api.js';
6
+ import { readImageDimensions } from '../../lib/image-dimensions.js';
7
+ import { probeMedia } from '../../lib/media-probe.js';
8
+ import { renderCreative as runLocalRender, renderDraft } from '../../lib/creative-render.js';
9
+ import { createCreative, getCreative, updateCreative, uploadCreativeMedia, } from './creatives.js';
10
+ /**
11
+ * Draft-first Creatives: render a Creative on this machine from a spec the backend resolves WITHOUT
12
+ * saving anything, so a person looks at the artwork before a Creative row or a media upload exists.
13
+ *
14
+ * preview_creative_draft -> POST .../creatives/draft-spec (writes nothing server-side), render the
15
+ * frames locally into `<project>/.conductor/drafts/<stamp>-<slug>/`, and
16
+ * leave a `draft.json` describing what was previewed.
17
+ * commit_creative_draft -> only after the person approved: upload the local files, create (or
18
+ * update) the Creative, run the real render, mark the draft committed.
19
+ *
20
+ * Local files ride in the draft as `local:<key>` media ids (photo, clip, audio, per-beat photos); the
21
+ * backend validates them as if they were media and echoes `local:<key>` back as the URL, and
22
+ * conductor-creative/job/file-transport.mjs swaps each for a loopback URL while rendering.
23
+ */
24
+ const V2_PROJECT = (config) => `/api/v2/projects/${config.projectId}`;
25
+ const creativesBase = (config) => `${V2_PROJECT(config)}/marketing/creatives`;
26
+ const MAX_INLINE_IMAGE_BYTES = 1000000; // same ceiling preview_creative uses
27
+ const DRAFT_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
28
+ const LOCAL_REF = /^local:([a-z0-9][a-z0-9-]{0,63})$/;
29
+ export const DRAFTS_SUBDIR = join('.conductor', 'drafts');
30
+ // --- Paths and cleanup ---------------------------------------------------------
31
+ /** The git root of `cwd` when there is one, else `cwd` itself. */
32
+ export function findProjectRoot(cwd = process.cwd()) {
33
+ try {
34
+ const root = execFileSync('git', ['rev-parse', '--show-toplevel'], {
35
+ cwd,
36
+ encoding: 'utf8',
37
+ stdio: ['ignore', 'pipe', 'ignore'],
38
+ }).trim();
39
+ return root || cwd;
40
+ }
41
+ catch {
42
+ return cwd;
43
+ }
44
+ }
45
+ function draftsRoot(projectRoot) {
46
+ return join(resolve(projectRoot), DRAFTS_SUBDIR);
47
+ }
48
+ function stamp(now) {
49
+ const p = (n, w = 2) => String(n).padStart(w, '0');
50
+ return `${now.getFullYear()}${p(now.getMonth() + 1)}${p(now.getDate())}-${p(now.getHours())}${p(now.getMinutes())}${p(now.getSeconds())}`;
51
+ }
52
+ function slugify(text) {
53
+ const slug = (text ?? '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 40).replace(/-+$/, '');
54
+ return slug || 'draft';
55
+ }
56
+ async function readDraftFile(draftDir) {
57
+ try {
58
+ return JSON.parse(await readFile(join(draftDir, 'draft.json'), 'utf8'));
59
+ }
60
+ catch {
61
+ return undefined;
62
+ }
63
+ }
64
+ /**
65
+ * Removes draft folders under `<projectRoot>/.conductor/drafts` that are committed or older than 14
66
+ * days. Deliberately narrow: it only lists that one directory, only touches real (non-symlink)
67
+ * sub-folders that hold a `draft.json` written by these tools, and re-checks that each target resolves
68
+ * inside the drafts directory before removing it. `keep` names folders to skip (the draft a tool is
69
+ * working on, so a second commit still gets "already committed" rather than "not found"). Never throws — pruning is housekeeping.
70
+ */
71
+ export async function pruneDrafts(projectRoot, now = new Date(), keep = []) {
72
+ const root = draftsRoot(projectRoot);
73
+ const removed = [];
74
+ let entries;
75
+ try {
76
+ entries = await readdir(root);
77
+ }
78
+ catch {
79
+ return removed;
80
+ }
81
+ for (const name of entries) {
82
+ const dir = resolve(root, name);
83
+ if (!dir.startsWith(root + sep) || keep.map((k) => resolve(k)).includes(dir))
84
+ continue;
85
+ try {
86
+ const info = await lstat(dir);
87
+ if (!info.isDirectory() || info.isSymbolicLink())
88
+ continue;
89
+ const draft = await readDraftFile(dir);
90
+ if (!draft)
91
+ continue;
92
+ const created = Date.parse(draft.createdAt);
93
+ const age = now.getTime() - (Number.isNaN(created) ? info.mtimeMs : created);
94
+ if (draft.committed || age > DRAFT_MAX_AGE_MS) {
95
+ await rm(dir, { recursive: true, force: true });
96
+ removed.push(dir);
97
+ }
98
+ }
99
+ catch {
100
+ /* leave it */
101
+ }
102
+ }
103
+ return removed;
104
+ }
105
+ /** Splits the tool params into the create-creative body (with `local:<key>` references) and the key ->
106
+ * file map, refusing a combination that names the same slot twice. */
107
+ function buildDraftRequest(params) {
108
+ const { photoPath, clipPath, audioPath, baseCreativeId: _b, draftDir: _d, full: _f, ...fields } = params;
109
+ const request = { ...fields };
110
+ delete request['variantOf'];
111
+ const localFiles = {};
112
+ const abs = (p) => (isAbsolute(p) ? p : resolve(p));
113
+ if (photoPath) {
114
+ if (request['photoId'])
115
+ throw new Error('Pass photoPath or photoId, not both.');
116
+ request['photoId'] = 'local:photo';
117
+ localFiles['photo'] = abs(photoPath);
118
+ }
119
+ if (clipPath) {
120
+ const motion = (request['motion'] ?? {});
121
+ const background = (motion['background'] ?? {});
122
+ if (background['clipMediaId'])
123
+ throw new Error('Pass clipPath or motion.background.clipMediaId, not both.');
124
+ request['motion'] = { ...motion, background: { ...background, source: 'clip', clipMediaId: 'local:clip' } };
125
+ localFiles['clip'] = abs(clipPath);
126
+ }
127
+ if (audioPath) {
128
+ const audio = (request['audio'] ?? {});
129
+ if (audio['trackId'])
130
+ throw new Error('Pass audioPath or audio.trackId, not both.');
131
+ request['audio'] = { source: 'track', ...audio, trackId: 'local:audio' };
132
+ localFiles['audio'] = abs(audioPath);
133
+ }
134
+ if (Array.isArray(request['sequence'])) {
135
+ request['sequence'] = request['sequence'].map((beat, i) => {
136
+ const { photoPath: beatPath, ...rest } = beat;
137
+ if (!beatPath)
138
+ return rest;
139
+ if (rest['photoId'])
140
+ throw new Error(`sequence[${i}]: pass photoPath or photoId, not both.`);
141
+ const key = `beat-${i + 1}`;
142
+ localFiles[key] = abs(beatPath);
143
+ return { ...rest, photoId: `local:${key}` };
144
+ });
145
+ }
146
+ return { request, localFiles };
147
+ }
148
+ /** Reads one local file's metadata the way `upload_creative_media` does: image dimensions from the
149
+ * bytes, everything else (video/audio) from ffprobe. */
150
+ async function readLocalMediaMeta(path) {
151
+ const bytes = new Uint8Array(await readFile(path));
152
+ const image = readImageDimensions(bytes);
153
+ if (image)
154
+ return { kind: 'IMAGE', width: image.width, height: image.height };
155
+ const probe = await probeMedia(path);
156
+ if (probe.kind !== 'VIDEO' && probe.kind !== 'AUDIO') {
157
+ throw new Error(`"${basename(path)}" is not a recognizable photo, video or audio file.`);
158
+ }
159
+ return {
160
+ kind: probe.kind,
161
+ ...(probe.width !== undefined ? { width: probe.width } : {}),
162
+ ...(probe.height !== undefined ? { height: probe.height } : {}),
163
+ ...(probe.durationSeconds !== undefined ? { durationSeconds: probe.durationSeconds } : {}),
164
+ ...(probe.kind === 'VIDEO' ? { hasAudio: !!probe.hasAudio } : {}),
165
+ };
166
+ }
167
+ function replaceLocalRefs(value, idFor) {
168
+ if (typeof value === 'string') {
169
+ const m = LOCAL_REF.exec(value);
170
+ return m ? idFor(m[1]) : value;
171
+ }
172
+ if (Array.isArray(value))
173
+ return value.map((v) => replaceLocalRefs(v, idFor));
174
+ if (value && typeof value === 'object') {
175
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, replaceLocalRefs(v, idFor)]));
176
+ }
177
+ return value;
178
+ }
179
+ // --- preview_creative_draft ---------------------------------------------------------
180
+ function summariseChecks(checks) {
181
+ return checks
182
+ .map((c) => `${c.placementKey}${c.index !== undefined ? `[${c.index}]` : ''}: ${c.message}`)
183
+ .join('; ');
184
+ }
185
+ export async function previewCreativeDraft(params, config, options = {}) {
186
+ const log = options.log ?? (() => { });
187
+ const projectRoot = options.projectRoot ?? findProjectRoot();
188
+ await pruneDrafts(projectRoot);
189
+ if (params.kind === 'CLIP') {
190
+ return {
191
+ ok: false,
192
+ rendered: false,
193
+ error: 'A CLIP Creative is a finished video used as-is — there is no artwork to render and preview. ' +
194
+ 'Look at the video itself, then upload_creative_media and create_creative with kind CLIP.',
195
+ };
196
+ }
197
+ let built;
198
+ try {
199
+ built = buildDraftRequest(params);
200
+ }
201
+ catch (err) {
202
+ return { ok: false, rendered: false, error: err instanceof Error ? err.message : String(err) };
203
+ }
204
+ const { request, localFiles } = built;
205
+ const localMedia = {};
206
+ try {
207
+ for (const [key, path] of Object.entries(localFiles)) {
208
+ try {
209
+ await stat(path);
210
+ }
211
+ catch {
212
+ throw new Error(`The file for local:${key} does not exist: ${path}`);
213
+ }
214
+ localMedia[key] = await readLocalMediaMeta(path);
215
+ }
216
+ }
217
+ catch (err) {
218
+ return { ok: false, rendered: false, error: err instanceof Error ? err.message : String(err) };
219
+ }
220
+ const full = !!params.full;
221
+ const body = { ...request, previewOnly: !full };
222
+ if (params.baseCreativeId)
223
+ body['baseCreativeId'] = params.baseCreativeId;
224
+ if (Object.keys(localMedia).length)
225
+ body['localMedia'] = localMedia;
226
+ let response;
227
+ try {
228
+ response = await apiPost(`${creativesBase(config)}/draft-spec`, body, config);
229
+ }
230
+ catch (err) {
231
+ if (err instanceof ApiError && err.status === 422) {
232
+ const violations = err.violations;
233
+ const error = violations?.length
234
+ ? violations.map((v) => `[${v.field ?? v.ruleId ?? '?'}] ${v.message}`).join('; ')
235
+ : err.message;
236
+ return { ok: false, rendered: false, status: 422, error, ...(violations?.length ? { violations } : {}) };
237
+ }
238
+ throw err;
239
+ }
240
+ const spec = response.spec;
241
+ if (!spec)
242
+ throw new Error('The draft-spec response carried no spec.');
243
+ const draftDir = params.draftDir
244
+ ? resolve(params.draftDir)
245
+ : join(draftsRoot(projectRoot), `${stamp(new Date())}-${slugify(params.headline ?? params.name)}`);
246
+ await mkdir(draftDir, { recursive: true });
247
+ if (!params.draftDir) {
248
+ // Keep the drafts (images, copies of work in progress) out of git without asking anyone to edit .gitignore.
249
+ await writeFile(join(draftsRoot(projectRoot), '.gitignore'), '*\n').catch(() => { });
250
+ }
251
+ const draft = {
252
+ version: 1,
253
+ createdAt: new Date().toISOString(),
254
+ committed: false,
255
+ projectId: config.projectId,
256
+ ...(params.baseCreativeId ? { baseCreativeId: params.baseCreativeId } : {}),
257
+ full,
258
+ request,
259
+ localFiles,
260
+ localMedia,
261
+ specSha256: createHash('sha256').update(JSON.stringify(spec)).digest('hex'),
262
+ };
263
+ await writeFile(join(draftDir, 'draft.json'), JSON.stringify(draft, null, 2));
264
+ const rendered = await renderDraft({ spec, localFiles, outDir: draftDir }, log);
265
+ if (!rendered.ok || !rendered.manifest) {
266
+ return { ok: false, rendered: false, error: rendered.error ?? 'The draft render failed.', draftDir };
267
+ }
268
+ const manifest = rendered.manifest;
269
+ const files = manifest.frames.map((f) => ({
270
+ placementKey: f.placementKey,
271
+ ...(f.index !== undefined ? { index: f.index } : {}),
272
+ file: join(draftDir, f.file),
273
+ ...(f.width !== undefined ? { width: f.width } : {}),
274
+ ...(f.height !== undefined ? { height: f.height } : {}),
275
+ }));
276
+ // The contact sheet when there is one; in a full render, the first frame (its poster, for a video).
277
+ const shown = manifest.frames.find((f) => f.placementKey === 'sheet') ?? manifest.frames[0];
278
+ let image;
279
+ let note;
280
+ if (shown) {
281
+ const shownFile = join(draftDir, shown.poster ?? shown.file);
282
+ const bytes = await readFile(shownFile);
283
+ if (bytes.byteLength > MAX_INLINE_IMAGE_BYTES) {
284
+ note = `The image is ${Math.round(bytes.byteLength / 1024)} KB, larger than this tool can inline (~1 MB) — open ${shownFile} directly.`;
285
+ }
286
+ else {
287
+ const mimeType = shown.poster ? 'image/jpeg' : shown.contentType.startsWith('image/') ? shown.contentType : undefined;
288
+ if (mimeType)
289
+ image = { data: bytes, mimeType };
290
+ }
291
+ }
292
+ const spec2 = spec;
293
+ if (!full && spec2.creative?.kind === 'MOTION') {
294
+ const secs = spec2.creative.motion?.durationSec ?? 8;
295
+ note = `${secs}s animation — this image shows three key moments across the timeline, not the finished video.${note ? ` ${note}` : ''}`;
296
+ }
297
+ // A full draft render already failed (ok: false) on any error, so reaching here with no `checks` means
298
+ // every placement was rendered and checked.
299
+ const checks = manifest.checks ?? [];
300
+ const failing = checks.filter((c) => c.severity === 'error');
301
+ const passed = manifest.passed ?? failing.length === 0;
302
+ return {
303
+ ok: true,
304
+ committed: false,
305
+ draftDir,
306
+ previewOnly: !full,
307
+ ...(image ? { image } : {}),
308
+ files,
309
+ readiness: response.readiness,
310
+ warnings: manifest.warnings,
311
+ checks,
312
+ passed,
313
+ ...(note ? { note } : {}),
314
+ nextStep: passed
315
+ ? 'Nothing has been saved to Conductor. All placement checks passed. Show the image to the person and ask whether to approve it. ' +
316
+ 'Only after they approve, call commit_creative_draft({draftDir}); to change something, call preview_creative_draft again.'
317
+ : `NOT ready for approval: ${failing.length} placement check${failing.length === 1 ? '' : 's'} failed (${summariseChecks(failing)}) — ` +
318
+ 'the full render would fail them after the person approved. Nothing has been saved. Fix the design (shorter copy, a different layout, ' +
319
+ 'layoutOverrides, typeOverrides, or drop the body) and call preview_creative_draft again until `passed` is true. Do not ask the person to ' +
320
+ 'approve and do not call commit_creative_draft while a check fails; tell them what you changed.',
321
+ };
322
+ }
323
+ /**
324
+ * Commits an approved draft: uploads each local file, creates (or, with a baseCreativeId, updates) the
325
+ * Creative with the real media ids swapped in, then runs the full local render. The draft is marked
326
+ * committed as soon as the Creative exists — before the render — so a failed render can never lead to
327
+ * a second commit creating a duplicate; re-run render_creative instead.
328
+ */
329
+ export async function commitCreativeDraft(params, config, options = {}) {
330
+ const log = options.log ?? (() => { });
331
+ const projectRoot = options.projectRoot ?? findProjectRoot();
332
+ const draftDir = resolve(params.draftDir);
333
+ await pruneDrafts(projectRoot, new Date(), [draftDir]);
334
+ const draft = await readDraftFile(draftDir);
335
+ if (!draft)
336
+ throw new Error(`No draft.json found in ${draftDir} — pass the draftDir preview_creative_draft returned.`);
337
+ if (draft.committed) {
338
+ throw new Error(`This draft was already committed${draft.creativeId ? ` (Creative ${draft.creativeId})` : ''}. ` +
339
+ 'Preview a new draft to make further changes, or use update_creative.');
340
+ }
341
+ if (draft.projectId && draft.projectId !== config.projectId) {
342
+ throw new Error(`This draft was made for project ${draft.projectId}, not the active project ${config.projectId}.`);
343
+ }
344
+ // Check every file is still there before the first upload, so a missing one leaves nothing half-done.
345
+ for (const [key, path] of Object.entries(draft.localFiles)) {
346
+ if (draft.uploaded?.[key])
347
+ continue;
348
+ try {
349
+ await stat(path);
350
+ }
351
+ catch {
352
+ throw new Error(`The file for local:${key} no longer exists: ${path}`);
353
+ }
354
+ }
355
+ const warnings = [];
356
+ const uploaded = { ...(draft.uploaded ?? {}) };
357
+ for (const [key, path] of Object.entries(draft.localFiles)) {
358
+ if (uploaded[key])
359
+ continue;
360
+ const result = await uploadCreativeMedia({ filePath: path, source: params.source, licence: params.licence, aiGenerated: params.aiGenerated }, config);
361
+ const id = result.media['id'];
362
+ if (!id)
363
+ throw new Error(`Uploading ${basename(path)} returned no media id.`);
364
+ uploaded[key] = id;
365
+ warnings.push(...result.warnings);
366
+ // Persist as we go: a failure further on must not re-upload what already landed.
367
+ await writeFile(join(draftDir, 'draft.json'), JSON.stringify({ ...draft, uploaded }, null, 2));
368
+ }
369
+ const fields = replaceLocalRefs(draft.request, (key) => {
370
+ const id = uploaded[key];
371
+ if (!id)
372
+ throw new Error(`The draft references local:${key} but no file was uploaded for it.`);
373
+ return id;
374
+ });
375
+ let created;
376
+ if (draft.baseCreativeId) {
377
+ const current = await getCreative({ creativeId: draft.baseCreativeId }, config);
378
+ created = await updateCreative({ ...fields, creativeId: draft.baseCreativeId, version: current['version'] }, config);
379
+ }
380
+ else {
381
+ created = await createCreative(fields, config);
382
+ }
383
+ const creativeId = created['id'] ?? draft.baseCreativeId;
384
+ if (!creativeId)
385
+ throw new Error('The Creative was saved but the response carried no id.');
386
+ await writeFile(join(draftDir, 'draft.json'), JSON.stringify({ ...draft, uploaded, committed: true, committedAt: new Date().toISOString(), creativeId }, null, 2));
387
+ const rendered = await runLocalRender({ creativeId, previewOnly: false, renderer: 'mcp' }, config, log);
388
+ const verified = await getCreative({ creativeId }, config).catch(() => undefined);
389
+ const renderError = rendered.ok ? undefined : rendered.error ?? 'The render failed.';
390
+ return {
391
+ ok: rendered.ok,
392
+ creativeId,
393
+ displayId: (verified?.['displayId'] ?? created['displayId']),
394
+ version: (verified?.['version'] ?? created['version']),
395
+ frames: rendered.frames,
396
+ readiness: verified?.['readiness'],
397
+ uploaded,
398
+ warnings,
399
+ ...(renderError ? { renderError } : {}),
400
+ nextStep: rendered.ok
401
+ ? 'Creative saved and rendered. Fix anything readiness lists, then attach_creative_to_post with the Post id.'
402
+ : `The Creative is saved but its render failed (${renderError}). Call render_creative({creativeId}) to retry — do not commit this draft again.`,
403
+ };
404
+ }
405
+ //# sourceMappingURL=creative-drafts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creative-drafts.js","sourceRoot":"","sources":["../../../src/mcp/tools/creative-drafts.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,42 @@ import { Config } from '../config.js';
2
2
  export declare function getBrandKit(params: {
3
3
  kitId?: string;
4
4
  }, config: Config): Promise<Record<string, unknown>>;
5
+ export interface UpdateBrandKitParams {
6
+ kitId?: string;
7
+ name?: string;
8
+ fontFamily?: string;
9
+ fontUrl?: string;
10
+ /** Merged onto the kit's existing tokens — only the keys given here change; every other existing
11
+ * token is kept. Against a backend new enough to merge atomically server-side, this is sent as a
12
+ * partial. Against an older one (no boolean `configured` field in the GET below — see
13
+ * {@link updateBrandKit}), it's merged client-side from the kit this call just read and sent as the
14
+ * full map instead, so the older backend's plain "replace tokens with what I sent" PATCH still ends
15
+ * up correct. */
16
+ tokens?: Record<string, string>;
17
+ ctaClaim?: string;
18
+ accentPhraseRequired?: boolean;
19
+ /** Replaces the whole list. */
20
+ copyRules?: Array<Record<string, unknown>>;
21
+ /** Replaces the whole list. Mutually exclusive with addApprovedLines. */
22
+ approvedLines?: string[];
23
+ /** Appended to the existing list — atomically server-side against a backend that supports it,
24
+ * otherwise appended (and deduped) client-side and sent as the full list. Mutually exclusive with
25
+ * approvedLines. */
26
+ addApprovedLines?: string[];
27
+ enabledPlacements?: string[];
28
+ knowledgePagePath?: string;
29
+ }
30
+ /**
31
+ * Always GETs the kit first — both to resolve its id when `kitId` is omitted, and to detect whether
32
+ * this backend supports the atomic partial-merge PATCH semantics for `tokens`/`addApprovedLines` at
33
+ * all: a boolean `configured` field in the response is the tell (it shipped alongside partial-merge
34
+ * support), so its *absence* means an older backend that will simply overwrite `tokens`/`approvedLines`
35
+ * with whatever this PATCH sends. That older-backend case matters in practice — the CLI can publish
36
+ * ahead of a self-hosted or slow-to-redeploy backend — so this merges `tokens` (full map) and
37
+ * `addApprovedLines` (appended + deduped onto the existing list) client-side from the kit just read,
38
+ * and sends full values instead of partials, rather than losing whatever the GET didn't name.
39
+ */
40
+ export declare function updateBrandKit(params: UpdateBrandKitParams, config: Config): Promise<Record<string, unknown>>;
5
41
  export declare function listCreatives(params: {
6
42
  state?: string;
7
43
  brandKitId?: string;
@@ -58,6 +94,9 @@ export interface CreativeFields {
58
94
  lockup?: string;
59
95
  /** Per-placement overrides of layout-derived numbers, in pixels — see conductor-creative/README.md. */
60
96
  layoutOverrides?: CreativeLayoutOverrides;
97
+ /** Pinned headline type per placement: {"9x16": [fontSize, lineHeight?, letterSpacing?]} — fontSize in
98
+ * artboard px, lineHeight a multiplier, letterSpacing in px. A placement with no entry is auto-fitted. */
99
+ typeOverrides?: Record<string, number[]>;
61
100
  }
62
101
  export interface CreateCreativeParams extends CreativeFields {
63
102
  /** Cuts a lettered variant of this existing Creative instead of creating a fresh one — everything
@@ -70,6 +109,16 @@ export interface UpdateCreativeParams extends CreativeFields {
70
109
  version: number;
71
110
  }
72
111
  export declare function updateCreative(params: UpdateCreativeParams, config: Config): Promise<Record<string, unknown>>;
112
+ export interface ListCreativeMediaParams {
113
+ kind?: string;
114
+ includeBlocked?: boolean;
115
+ }
116
+ /**
117
+ * The project's media library, trimmed to what's worth an agent's context — call this before
118
+ * uploading a new photo/video/audio file, so an existing, already-checked one gets reused instead
119
+ * of a duplicate upload.
120
+ */
121
+ export declare function listCreativeMedia(params: ListCreativeMediaParams, config: Config): Promise<Array<Record<string, unknown>>>;
73
122
  export interface UploadCreativeMediaParams {
74
123
  filePath?: string;
75
124
  url?: string;
@@ -92,6 +141,17 @@ export declare function uploadCreativeMedia(params: UploadCreativeMediaParams, c
92
141
  /** Deprecated alias for {@link uploadCreativeMedia}, kept so existing callers naming the old tool
93
142
  * still work — same implementation, same behavior, including for photos. */
94
143
  export declare const uploadCreativePhoto: typeof uploadCreativeMedia;
144
+ export interface UploadBrandImageParams {
145
+ kitId?: string;
146
+ slot: string;
147
+ filePath?: string;
148
+ url?: string;
149
+ }
150
+ /**
151
+ * Uploads a workspace's logo mark, wordmark or badge into one Brand Kit image slot from a local file
152
+ * or a public URL — mint, PUT the bytes, confirm, in one call.
153
+ */
154
+ export declare function uploadBrandImage(params: UploadBrandImageParams, config: Config): Promise<Record<string, unknown>>;
95
155
  export declare function renderCreativeTool(params: {
96
156
  creativeId: string;
97
157
  previewOnly?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"creatives.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/creatives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"creatives.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/creatives.ts"],"names":[],"mappings":"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"}