@drawcall/market 0.1.75 → 0.1.77

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 (57) hide show
  1. package/dist/agent.d.ts +2 -2
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +15 -3
  4. package/dist/agent.js.map +1 -1
  5. package/dist/asset-implementation.d.ts +7 -0
  6. package/dist/asset-implementation.d.ts.map +1 -1
  7. package/dist/asset-implementation.js +1 -0
  8. package/dist/asset-implementation.js.map +1 -1
  9. package/dist/cli.js +8 -21
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/agent.d.ts +2 -42
  12. package/dist/commands/agent.d.ts.map +1 -1
  13. package/dist/commands/agent.js +8 -382
  14. package/dist/commands/agent.js.map +1 -1
  15. package/dist/commands/generate.d.ts +2 -0
  16. package/dist/commands/generate.d.ts.map +1 -1
  17. package/dist/commands/generate.js +3 -0
  18. package/dist/commands/generate.js.map +1 -1
  19. package/dist/commands/reference-images.d.ts +6 -0
  20. package/dist/commands/reference-images.d.ts.map +1 -0
  21. package/dist/commands/reference-images.js +28 -0
  22. package/dist/commands/reference-images.js.map +1 -0
  23. package/dist/contract.d.ts +4 -46
  24. package/dist/contract.d.ts.map +1 -1
  25. package/dist/contract.js +2 -8
  26. package/dist/contract.js.map +1 -1
  27. package/dist/generate.d.ts +2 -0
  28. package/dist/generate.d.ts.map +1 -1
  29. package/dist/generate.js.map +1 -1
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/output.js +6 -6
  35. package/dist/output.js.map +1 -1
  36. package/dist/schemas.d.ts +3 -46
  37. package/dist/schemas.d.ts.map +1 -1
  38. package/dist/schemas.js +20 -46
  39. package/dist/schemas.js.map +1 -1
  40. package/dist/skill.d.ts +1 -1
  41. package/dist/skill.d.ts.map +1 -1
  42. package/dist/skill.js +2 -0
  43. package/dist/skill.js.map +1 -1
  44. package/package.json +1 -1
  45. package/skills/market/SKILL.md +2 -0
  46. package/src/agent.ts +17 -4
  47. package/src/asset-implementation.ts +8 -0
  48. package/src/cli.ts +19 -33
  49. package/src/commands/agent.ts +11 -474
  50. package/src/commands/generate.ts +5 -0
  51. package/src/commands/reference-images.ts +25 -0
  52. package/src/contract.ts +3 -9
  53. package/src/generate.ts +2 -0
  54. package/src/index.ts +0 -7
  55. package/src/output.ts +5 -5
  56. package/src/schemas.ts +24 -53
  57. package/src/skill.ts +2 -0
@@ -1,381 +1,21 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { link, mkdir, open, readFile, rm } from 'node:fs/promises';
3
- import { basename, dirname, extname, join } from 'node:path';
4
- import { ORPCError } from '@orpc/client';
5
1
  import ora from 'ora';
6
2
  import { getCliClient } from '../cli-client.js';
7
- import { agentAndWait, AgentError } from '../agent.js';
3
+ import { agentAndWait } from '../agent.js';
4
+ import { loadReferenceImages } from './reference-images.js';
8
5
  import { assetVersionRef } from '../output.js';
9
6
  export async function agentCommand(goal, opts) {
10
- validateDeferredOptions(opts);
11
7
  const { client } = await getCliClient({ baseUrl: opts.baseUrl, requireAuth: true });
12
- const images = await Promise.all((opts.images ?? []).map(toDataUrl));
8
+ const referenceImages = await loadReferenceImages(opts.referenceImages ?? []);
13
9
  const spinner = ora({
14
10
  text: `Working on "${goal}"`,
15
11
  isEnabled: Boolean(process.stderr.isTTY),
16
12
  isSilent: !process.stderr.isTTY,
17
13
  }).start();
18
- try {
19
- const result = opts.deferGeneration
20
- ? await runDeferredAgent(client, { goal }, requiredApprovalFile(opts), requiredRunFile(opts))
21
- : await agentAndWait(client, { goal, images: images.length ? images : undefined });
22
- spinner.stop();
23
- printResult(result, opts.json ?? false);
24
- }
25
- catch (err) {
26
- spinner.stop();
27
- throw err;
28
- }
29
- }
30
- export async function waitAgentCommand(runFile, opts) {
31
- const { client } = await getCliClient({ baseUrl: opts.baseUrl, requireAuth: true });
32
- const handle = await readRunHandle(runFile);
33
- await ensureDeferredStarted(client, handle);
34
- const { runId } = handle;
35
- const interrupt = interruptSignal();
36
- const spinner = ora({
37
- text: `Waiting for Market agent run ${runId}`,
38
- isEnabled: Boolean(process.stderr.isTTY),
39
- isSilent: !process.stderr.isTTY,
40
- }).start();
41
- let settled = false;
42
- try {
43
- const result = opts.approvalFile
44
- ? await resumeExistingAgent(client, runId, opts.approvalFile, interrupt.signal, writeAgentDiagnostic)
45
- : await waitForExistingAgent(client, runId, interrupt.signal, writeAgentDiagnostic);
46
- settled = true;
47
- spinner.stop();
48
- printResult(result, opts.json ?? false);
49
- }
50
- catch (error) {
51
- spinner.stop();
52
- throw error;
53
- }
54
- finally {
55
- interrupt.dispose();
56
- if (!settled && opts.approvalFile) {
57
- await client.asset.agent.cancel({ runId }).catch(() => undefined);
58
- }
59
- }
60
- }
61
- function validateDeferredOptions(opts) {
62
- if (opts.deferGeneration && !opts.approvalFile) {
63
- throw new Error('--defer-generation requires --approval-file <path>');
64
- }
65
- if (opts.deferGeneration && !opts.runFile) {
66
- throw new Error('--defer-generation requires --run-file <path>');
67
- }
68
- if (opts.approvalFile && !opts.deferGeneration) {
69
- throw new Error('--approval-file requires --defer-generation');
70
- }
71
- if (opts.runFile && !opts.deferGeneration) {
72
- throw new Error('--run-file requires --defer-generation');
73
- }
74
- if (opts.deferGeneration && opts.images?.length) {
75
- throw new Error('--image is not supported with --defer-generation');
76
- }
77
- }
78
- function requiredRunFile(opts) {
79
- if (!opts.runFile)
80
- throw new Error('Run file is required');
81
- return opts.runFile;
82
- }
83
- function requiredApprovalFile(opts) {
84
- if (!opts.approvalFile)
85
- throw new Error('Approval file is required');
86
- return opts.approvalFile;
87
- }
88
- export async function runDeferredAgent(client, input, approvalFile, runFile, emitDiagnostic = writeAgentDiagnostic) {
89
- const interrupt = interruptSignal();
90
- const watch = new AbortController();
91
- const stopWatch = () => watch.abort(interrupt.signal.reason);
92
- interrupt.signal.addEventListener('abort', stopWatch, { once: true });
93
- const runId = randomUUID();
94
- const handle = { version: 1, runId, input };
95
- let runReachable = false;
96
- let settled = false;
97
- try {
98
- // Persist the client-selected idempotency key and restart input before the
99
- // RPC. A lost start response is recoverable without creating a second run.
100
- await persistRunHandle(runFile, handle);
101
- emitDiagnostic(runHandleDiagnosticLine(runId, runFile));
102
- await ensureDeferredStarted(client, handle);
103
- runReachable = true;
104
- const outcome = await resumeExistingAgent(client, runId, approvalFile, watch.signal, emitDiagnostic);
105
- settled = true;
106
- return outcome;
107
- }
108
- finally {
109
- watch.abort();
110
- interrupt.dispose();
111
- if (!settled && runReachable) {
112
- try {
113
- await client.asset.agent.cancel({ runId });
114
- }
115
- catch {
116
- // Best-effort cleanup must not replace the actionable local error that
117
- // brought us here. Before approval, the server run remains safely gated
118
- // even if this request is lost.
119
- }
120
- }
121
- }
122
- }
123
- export function runHandleDiagnosticLine(runId, runFile) {
124
- return JSON.stringify({ event: 'market.agent.run.persisted', runId, runFile });
125
- }
126
- function writeAgentDiagnostic(line) {
127
- process.stderr.write(`${line}\n`);
128
- }
129
- export function waitForExistingAgent(client, runId, signal = new AbortController().signal, emitDiagnostic = ignoreDiagnostic) {
130
- return waitForResult(client, runId, signal, emitDiagnostic);
131
- }
132
- export async function resumeExistingAgent(client, runId, approvalFile, signal = new AbortController().signal, emitDiagnostic = ignoreDiagnostic) {
133
- const operation = new AbortController();
134
- const abortOperation = () => operation.abort(signal.reason);
135
- if (signal.aborted)
136
- abortOperation();
137
- else
138
- signal.addEventListener('abort', abortOperation, { once: true });
139
- try {
140
- const result = waitForResult(client, runId, operation.signal, emitDiagnostic).then((value) => ({ kind: 'result', value }), (error) => ({ kind: 'error', error }));
141
- const decision = waitForApprovalFile(approvalFile, operation.signal).then((value) => ({ kind: 'decision', value }), (error) => ({ kind: 'error', error }));
142
- const first = await Promise.race([result, decision]);
143
- if (first.kind === 'error')
144
- throw first.error;
145
- if (first.kind === 'result')
146
- return first.value;
147
- if (operation.signal.aborted)
148
- throw abortReason(operation.signal);
149
- const controlRequest = first.value === 'approve'
150
- ? client.asset.agent.approve({ runId })
151
- : client.asset.agent.cancel({ runId });
152
- const control = await raceAbort(controlRequest, operation.signal);
153
- if (!control.accepted && control.state !== 'generation-started') {
154
- if (isSettledControlState(control.state))
155
- return unwrapResult(await result);
156
- throw new AgentError(`Agent ${first.value} rejected: ${control.state}`);
157
- }
158
- if (first.value === 'cancel' && control.accepted) {
159
- // Observe the durable terminal status before returning the cancellation
160
- // error so callers receive generationStarted evidence for handle cleanup.
161
- return unwrapResult(await result);
162
- }
163
- return unwrapResult(await result);
164
- }
165
- finally {
166
- operation.abort();
167
- signal.removeEventListener('abort', abortOperation);
168
- }
169
- }
170
- function unwrapResult(outcome) {
171
- if (outcome.kind === 'error')
172
- throw outcome.error;
173
- return outcome.value;
174
- }
175
- function isSettledControlState(state) {
176
- return state === 'completed' || state === 'failed' || state === 'cancelled';
177
- }
178
- async function waitForResult(client, runId, signal, emitDiagnostic) {
179
- for (;;) {
180
- if (signal.aborted)
181
- throw abortReason(signal);
182
- const status = await raceAbort(client.asset.agent.status({ runId }), signal);
183
- const result = settledResult(runId, status, emitDiagnostic);
184
- if (result)
185
- return result;
186
- if (status.status === 'running' &&
187
- (status.generation === 'deferred' || status.generation === 'awaiting-approval')) {
188
- await abortableDelay(250, signal);
189
- }
190
- }
191
- }
192
- function raceAbort(promise, signal) {
193
- if (signal.aborted)
194
- return Promise.reject(abortReason(signal));
195
- return new Promise((resolve, reject) => {
196
- signal.addEventListener('abort', aborted, { once: true });
197
- promise.then(completed, failed);
198
- function completed(value) {
199
- signal.removeEventListener('abort', aborted);
200
- resolve(value);
201
- }
202
- function failed(error) {
203
- signal.removeEventListener('abort', aborted);
204
- reject(error);
205
- }
206
- function aborted() {
207
- reject(abortReason(signal));
208
- }
209
- });
210
- }
211
- function settledResult(runId, status, emitDiagnostic) {
212
- if (status.status === 'running')
213
- return undefined;
214
- emitDiagnostic(agentTerminalDiagnosticLine(runId, status));
215
- if (status.status === 'completed')
216
- return status.result;
217
- if (status.status === 'failed')
218
- throw new AgentError(status.error);
219
- throw new AgentError('Agent run cancelled');
220
- }
221
- export function agentTerminalDiagnosticLine(runId, status) {
222
- return JSON.stringify({
223
- event: 'market.agent.run.terminal',
224
- runId,
225
- status: status.status,
226
- generationStarted: status.generationStarted ?? null,
227
- });
228
- }
229
- function ignoreDiagnostic() { }
230
- async function waitForApprovalFile(path, signal) {
231
- for (;;) {
232
- if (signal.aborted)
233
- throw abortReason(signal);
234
- try {
235
- const value = (await readFile(path, 'utf8')).trim();
236
- if (value === 'approve' || value === 'cancel')
237
- return value;
238
- if (value) {
239
- throw new Error(`Approval file must contain exactly "approve" or "cancel": ${path}`);
240
- }
241
- }
242
- catch (error) {
243
- if (!isMissingFile(error))
244
- throw error;
245
- }
246
- await abortableDelay(100, signal);
247
- }
248
- }
249
- function interruptSignal() {
250
- const controller = new AbortController();
251
- const onSigint = () => controller.abort(new AgentError('Interrupted by SIGINT'));
252
- const onSigterm = () => controller.abort(new AgentError('Interrupted by SIGTERM'));
253
- process.once('SIGINT', onSigint);
254
- process.once('SIGTERM', onSigterm);
255
- return {
256
- signal: controller.signal,
257
- dispose() {
258
- process.off('SIGINT', onSigint);
259
- process.off('SIGTERM', onSigterm);
260
- },
261
- };
262
- }
263
- function abortableDelay(ms, signal) {
264
- if (signal.aborted)
265
- return Promise.reject(abortReason(signal));
266
- return new Promise((resolve, reject) => {
267
- const timeout = setTimeout(done, ms);
268
- signal.addEventListener('abort', aborted, { once: true });
269
- function done() {
270
- signal.removeEventListener('abort', aborted);
271
- resolve();
272
- }
273
- function aborted() {
274
- clearTimeout(timeout);
275
- reject(abortReason(signal));
276
- }
277
- });
278
- }
279
- function abortReason(signal) {
280
- return signal.reason instanceof Error ? signal.reason : new AgentError('Agent command aborted');
281
- }
282
- function isMissingFile(error) {
283
- return hasErrorCode(error, 'ENOENT');
284
- }
285
- function hasErrorCode(error, code) {
286
- return error instanceof Error && 'code' in error && error.code === code;
287
- }
288
- async function persistRunHandle(path, handle) {
289
- const directory = dirname(path);
290
- await mkdir(directory, { recursive: true });
291
- const temporary = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);
292
- let file;
293
- try {
294
- file = await open(temporary, 'wx', 0o600);
295
- await file.writeFile(`${JSON.stringify(handle)}\n`, 'utf8');
296
- await file.sync();
297
- await file.close();
298
- file = undefined;
299
- // A same-directory hard link is an atomic create-if-absent. Refusing to
300
- // replace a previous handle prevents a new run from orphaning an older one.
301
- try {
302
- await link(temporary, path);
303
- }
304
- catch (error) {
305
- if (hasErrorCode(error, 'EEXIST')) {
306
- throw new Error(`Run file already exists; recover or remove it first: ${path}`, {
307
- cause: error,
308
- });
309
- }
310
- throw error;
311
- }
312
- await rm(temporary);
313
- const directoryHandle = await open(directory, 'r');
314
- try {
315
- await directoryHandle.sync();
316
- }
317
- finally {
318
- await directoryHandle.close();
319
- }
320
- }
321
- finally {
322
- await file?.close().catch(() => undefined);
323
- await rm(temporary, { force: true }).catch(() => undefined);
324
- }
325
- }
326
- async function readRunHandle(path) {
327
- let value;
328
- try {
329
- value = JSON.parse(await readFile(path, 'utf8'));
330
- }
331
- catch (error) {
332
- throw new Error(`Run file does not contain a valid Market run handle: ${path}`, {
333
- cause: error,
334
- });
335
- }
336
- if (!isDeferredRunHandle(value)) {
337
- throw new Error(`Run file does not contain a valid Market run handle: ${path}`);
338
- }
339
- return value;
340
- }
341
- function isDeferredRunHandle(value) {
342
- if (!value || typeof value !== 'object')
343
- return false;
344
- const record = value;
345
- const input = record.input;
346
- return (record.version === 1 &&
347
- typeof record.runId === 'string' &&
348
- /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(record.runId) &&
349
- Boolean(input) &&
350
- typeof input === 'object' &&
351
- typeof input.goal === 'string' &&
352
- Object.keys(input).length === 1);
353
- }
354
- async function ensureDeferredStarted(client, handle) {
355
- try {
356
- const started = await client.asset.agent.startDeferred({
357
- ...handle.input,
358
- runId: handle.runId,
359
- });
360
- if (started.runId !== handle.runId) {
361
- throw new Error('Market returned a different deferred run ID');
362
- }
363
- }
364
- catch (startError) {
365
- if (isAuthoritativeStartRejection(startError))
366
- throw startError;
367
- // The start response may be lost after the Durable Object committed. A
368
- // successful owner-checked status proves that this exact run is reachable.
369
- try {
370
- await client.asset.agent.status({ runId: handle.runId });
371
- }
372
- catch {
373
- throw startError;
374
- }
375
- }
376
- }
377
- function isAuthoritativeStartRejection(error) {
378
- return error instanceof ORPCError && error.status >= 400 && error.status < 500;
14
+ const result = await agentAndWait(client, {
15
+ goal,
16
+ referenceImages: referenceImages.length ? referenceImages : undefined,
17
+ }).finally(() => spinner.stop());
18
+ printResult(result, opts.json ?? false);
379
19
  }
380
20
  function printResult(result, asJson) {
381
21
  if (asJson) {
@@ -398,18 +38,4 @@ function printResult(result, asJson) {
398
38
  console.log(`Notes: ${notes}`);
399
39
  }
400
40
  }
401
- async function toDataUrl(path) {
402
- const data = await readFile(path);
403
- return `data:${mimeFor(path)};base64,${data.toString('base64')}`;
404
- }
405
- function mimeFor(path) {
406
- const ext = extname(path).toLowerCase();
407
- if (ext === '.jpg' || ext === '.jpeg')
408
- return 'image/jpeg';
409
- if (ext === '.webp')
410
- return 'image/webp';
411
- if (ext === '.gif')
412
- return 'image/gif';
413
- return 'image/png';
414
- }
415
41
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAU9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAyB;IACxE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAA;IAE7E,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,eAAe,IAAI,GAAG;QAC5B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;KAChC,CAAC,CAAC,KAAK,EAAE,CAAA;IAEV,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE;QACxC,IAAI;QACJ,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB,EAAE,MAAe;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;QACnC,OAAM;IACR,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;QACjF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;QACvE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC;AACH,CAAC"}
@@ -4,6 +4,8 @@ import type { MarketClient } from '../client.js';
4
4
  import type { AssetAccess, AssetType } from '../schemas.js';
5
5
  export interface GenerateCommandOptions {
6
6
  type: AssetType;
7
+ /** `--reference-image` values: file paths or http(s) URLs. */
8
+ referenceImages?: string[];
7
9
  cwd?: string;
8
10
  baseUrl?: string;
9
11
  access?: AssetAccess;
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,GAAG,CAAA;CACb;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,CAQjB;AA8BD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM9C"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAKhD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAA;IACf,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,GAAG,CAAA;CACb;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,CAQjB;AA8BD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM9C"}
@@ -4,7 +4,9 @@ import { GenerateError, startGeneration, waitForGeneration } from '../generate.j
4
4
  import { resolve } from '../resolve.js';
5
5
  import { install as runInstall } from '../install.js';
6
6
  import { generatedInstallResult, generationStartedResult } from '../output.js';
7
+ import { loadReferenceImages } from './reference-images.js';
7
8
  export async function generateCommand(description, opts) {
9
+ const referenceImages = await loadReferenceImages(opts.referenceImages ?? []);
8
10
  const { client, baseUrl, authToken } = await getCliClient({
9
11
  baseUrl: opts.baseUrl,
10
12
  requireAuth: true,
@@ -14,6 +16,7 @@ export async function generateCommand(description, opts) {
14
16
  const started = await startGeneration(client, {
15
17
  description,
16
18
  type: opts.type,
19
+ referenceImages: referenceImages.length ? referenceImages : undefined,
17
20
  access: opts.access,
18
21
  });
19
22
  // Fast providers finish inline; slow, job-based ones return a job to poll.
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAoB,MAAM,gBAAgB,CAAA;AAEpG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAY3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,IAA4B;IAE5B,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAA;IAC7E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC;QACxD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,WAAW,GAAG,CAAC,CAAA;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAChC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE;YAC5C,WAAW;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YACrE,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAA;QACF,2EAA2E;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;QAC1F,CAAC;QACD,kGAAkG;QAClG,4EAA4E;QAC5E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;YAC7D,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gBACtB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;YACxB,CAAC;SACF,CAAC,CAAA;QACF,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO;YACP,SAAS;YACT,OAAO;YACP,YAAY,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC;SACrD,CAAC,CAAA;IACJ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AASD,kGAAkG;AAClG,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,OAAoB,EACpB,GAA8C;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,YAAY,CAAA;AACzB,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,gBAAgB,CAC7B,MAAoB,EACpB,SAAiD,EACjD,GAAmB;IAEnB,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAA;IAC1E,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,SAAS,CAAC,SAAS;QACzB,KAAK,EAAE,SAAS,CAAC,OAAO;QACxB,SAAS,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE;QAClC,IAAI,EAAE,IAAI;KACX,CAAA;IACD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAA;IAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;QAClD,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,YAAY,EAAE,CAAC,OAAO,CAAC;QACvB,eAAe;QACf,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACtB,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;QAC5B,CAAC;KACF,CAAC,CAAA;IACF,OAAO,sBAAsB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,GAAG,CAAC;QACT,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;KAChC,CAAC,CAAC,KAAK,EAAE,CAAA;AACZ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resolve repeatable `--reference-image` values into what the Market API takes: an http(s) URL
3
+ * passes through untouched (the provider fetches it), a local file becomes a data URI.
4
+ */
5
+ export declare function loadReferenceImages(refs: string[]): Promise<string[]>;
6
+ //# sourceMappingURL=reference-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-images.d.ts","sourceRoot":"","sources":["../../src/commands/reference-images.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErE"}
@@ -0,0 +1,28 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { extname } from 'node:path';
3
+ /**
4
+ * Resolve repeatable `--reference-image` values into what the Market API takes: an http(s) URL
5
+ * passes through untouched (the provider fetches it), a local file becomes a data URI.
6
+ */
7
+ export function loadReferenceImages(refs) {
8
+ return Promise.all(refs.map(loadReferenceImage));
9
+ }
10
+ async function loadReferenceImage(ref) {
11
+ if (ref.startsWith('http://') || ref.startsWith('https://'))
12
+ return ref;
13
+ const data = await readFile(ref);
14
+ return `data:${mimeFor(ref)};base64,${data.toString('base64')}`;
15
+ }
16
+ function mimeFor(path) {
17
+ const ext = extname(path).toLowerCase();
18
+ if (ext === '.png')
19
+ return 'image/png';
20
+ if (ext === '.jpg' || ext === '.jpeg')
21
+ return 'image/jpeg';
22
+ if (ext === '.webp')
23
+ return 'image/webp';
24
+ if (ext === '.gif')
25
+ return 'image/gif';
26
+ throw new Error(`Unsupported reference image type "${ext}": ${path}`);
27
+ }
28
+ //# sourceMappingURL=reference-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-images.js","sourceRoot":"","sources":["../../src/commands/reference-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,CAAA;IACvE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAA;IAChC,OAAO,QAAQ,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IACvC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,WAAW,CAAA;IACtC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,YAAY,CAAA;IAC1D,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,YAAY,CAAA;IACxC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,WAAW,CAAA;IACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,MAAM,IAAI,EAAE,CAAC,CAAA;AACvE,CAAC"}
@@ -77,6 +77,8 @@ export interface AssetInstallMetadata {
77
77
  installMessage?: string;
78
78
  /** Omitted by Market APIs released before capability discovery. */
79
79
  canGenerate?: boolean;
80
+ /** Whether `generate` takes reference images for this type. */
81
+ acceptsReferenceImages?: boolean;
80
82
  saveOnInstall: boolean;
81
83
  readAssetDependenciesFromPackageJson: boolean;
82
84
  omitUnchangedInstalledFilesOnUpload: boolean;
@@ -167,6 +169,7 @@ export declare const contract: {
167
169
  environment: "environment";
168
170
  flipbook: "flipbook";
169
171
  }>>;
172
+ referenceImages: z.ZodOptional<z.ZodArray<z.ZodString>>;
170
173
  access: z.ZodOptional<z.ZodEnum<{
171
174
  public: "public";
172
175
  private: "private";
@@ -195,13 +198,7 @@ export declare const contract: {
195
198
  agent: {
196
199
  start: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
197
200
  goal: z.ZodString;
198
- images: z.ZodOptional<z.ZodArray<z.ZodString>>;
199
- }, z.core.$strict>, z.ZodObject<{
200
- runId: z.ZodString;
201
- }, z.core.$strip>, Record<never, never>, Record<never, never>>;
202
- startDeferred: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
203
- goal: z.ZodString;
204
- runId: z.ZodString;
201
+ referenceImages: z.ZodOptional<z.ZodArray<z.ZodString>>;
205
202
  }, z.core.$strict>, z.ZodObject<{
206
203
  runId: z.ZodString;
207
204
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
@@ -209,12 +206,6 @@ export declare const contract: {
209
206
  runId: z.ZodString;
210
207
  }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
211
208
  status: z.ZodLiteral<"running">;
212
- generation: z.ZodOptional<z.ZodEnum<{
213
- deferred: "deferred";
214
- "awaiting-approval": "awaiting-approval";
215
- approved: "approved";
216
- "generation-started": "generation-started";
217
- }>>;
218
209
  }, z.core.$strip>, z.ZodObject<{
219
210
  status: z.ZodLiteral<"completed">;
220
211
  result: z.ZodObject<{
@@ -229,43 +220,10 @@ export declare const contract: {
229
220
  }>;
230
221
  }, z.core.$strip>>;
231
222
  }, z.core.$strip>;
232
- generationStarted: z.ZodOptional<z.ZodBoolean>;
233
223
  }, z.core.$strip>, z.ZodObject<{
234
224
  status: z.ZodLiteral<"failed">;
235
225
  error: z.ZodString;
236
- generationStarted: z.ZodOptional<z.ZodBoolean>;
237
- }, z.core.$strip>, z.ZodObject<{
238
- status: z.ZodLiteral<"cancelled">;
239
- generationStarted: z.ZodOptional<z.ZodBoolean>;
240
226
  }, z.core.$strip>], "status">, Record<never, never>, Record<never, never>>;
241
- approve: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
242
- runId: z.ZodString;
243
- }, z.core.$strip>, z.ZodObject<{
244
- accepted: z.ZodBoolean;
245
- state: z.ZodEnum<{
246
- completed: "completed";
247
- failed: "failed";
248
- deferred: "deferred";
249
- "awaiting-approval": "awaiting-approval";
250
- approved: "approved";
251
- "generation-started": "generation-started";
252
- cancelled: "cancelled";
253
- }>;
254
- }, z.core.$strip>, Record<never, never>, Record<never, never>>;
255
- cancel: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
256
- runId: z.ZodString;
257
- }, z.core.$strip>, z.ZodObject<{
258
- accepted: z.ZodBoolean;
259
- state: z.ZodEnum<{
260
- completed: "completed";
261
- failed: "failed";
262
- deferred: "deferred";
263
- "awaiting-approval": "awaiting-approval";
264
- approved: "approved";
265
- "generation-started": "generation-started";
266
- cancelled: "cancelled";
267
- }>;
268
- }, z.core.$strip>, Record<never, never>, Record<never, never>>;
269
227
  };
270
228
  };
271
229
  user: {
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}