@drawcall/market 0.1.42 → 0.1.43
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/dist/asset-implementation.d.ts +12 -1
- package/dist/asset-implementation.d.ts.map +1 -1
- package/dist/asset-implementation.js.map +1 -1
- package/dist/contract.d.ts +20 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +9 -2
- package/dist/contract.js.map +1 -1
- package/dist/generate-job.d.ts +21 -0
- package/dist/generate-job.d.ts.map +1 -0
- package/dist/generate-job.js +29 -0
- package/dist/generate-job.js.map +1 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +27 -4
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +27 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +22 -0
- package/dist/schemas.js.map +1 -1
- package/package.json +1 -1
- package/src/asset-implementation.ts +10 -1
- package/src/contract.ts +12 -1
- package/src/generate-job.ts +31 -0
- package/src/generate.ts +30 -4
- package/src/index.ts +19 -1
- package/src/schemas.ts +28 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssetInstallMetadata, AssetSearchResult, AssetVersion, GenerateAssetResult, PaginatedList } from './contract.js';
|
|
2
|
-
import type { AssetType } from './schemas.js';
|
|
2
|
+
import type { AssetType, GenerateJobStatus } from './schemas.js';
|
|
3
3
|
export declare const ASSET_RELEVANCE_SCORE: unique symbol;
|
|
4
4
|
export interface RankedAssetSearchResult extends AssetSearchResult {
|
|
5
5
|
[ASSET_RELEVANCE_SCORE]?: number;
|
|
@@ -55,6 +55,17 @@ export interface AssetProvider {
|
|
|
55
55
|
uploadZip(input: AssetUploadZipInput, owner: AssetOwner): Promise<AssetVersion>;
|
|
56
56
|
downloadZip(input: AssetDownloadZipInput): Promise<Blob>;
|
|
57
57
|
generate?(input: AssetGenerateInput, owner: AssetOwner): Promise<GenerateAssetResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Job-based generation for providers whose upstream work runs for minutes (the humanoid model).
|
|
60
|
+
* `startGeneration` kicks off the upstream job and returns a pollable jobId WITHOUT waiting;
|
|
61
|
+
* `generationStatus` checks that job on each poll and, once the upstream work is done, persists it
|
|
62
|
+
* and returns the asset. A provider implements EITHER `generate` (fast, inline) OR this pair (slow,
|
|
63
|
+
* polled) — never relying on one long-held request. See generate-job.ts.
|
|
64
|
+
*/
|
|
65
|
+
startGeneration?(input: AssetGenerateInput, owner: AssetOwner): Promise<{
|
|
66
|
+
jobId: string;
|
|
67
|
+
}>;
|
|
68
|
+
generationStatus?(jobId: string, owner: AssetOwner): Promise<GenerateJobStatus>;
|
|
58
69
|
}
|
|
59
70
|
export type AssetImplementation = AssetProvider;
|
|
60
71
|
export declare function assetRelevanceScore(asset: AssetSearchResult): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-implementation.js","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,qBAAqB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"asset-implementation.js","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,qBAAqB,CAAC,CAAA;AA4EjF,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,OAAQ,KAAiC,CAAC,qBAAqB,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAuB;IAChE,OAAO;QACL,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;QAC7C,oCAAoC,EAAE,QAAQ,CAAC,oCAAoC,IAAI,KAAK;QAC5F,mCAAmC,EAAE,QAAQ,CAAC,mCAAmC,IAAI,KAAK;KAC3F,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAwB,EACxB,KAAa;IAEb,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAA6B,CAAA;IACtD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE;QACnD,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,KAAK;KAClB,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -142,7 +142,26 @@ export declare const contract: {
|
|
|
142
142
|
environment: "environment";
|
|
143
143
|
flipbook: "flipbook";
|
|
144
144
|
}>>;
|
|
145
|
-
}, z.core.$strip>, z.
|
|
145
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
146
|
+
assetName: z.ZodString;
|
|
147
|
+
version: z.ZodString;
|
|
148
|
+
status: z.ZodLiteral<"completed">;
|
|
149
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
150
|
+
status: z.ZodLiteral<"pending">;
|
|
151
|
+
jobId: z.ZodString;
|
|
152
|
+
}, z.core.$strip>], "status">, Record<never, never>, Record<never, never>>;
|
|
153
|
+
generateStatus: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
|
|
154
|
+
jobId: z.ZodString;
|
|
155
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
156
|
+
status: z.ZodLiteral<"running">;
|
|
157
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
158
|
+
assetName: z.ZodString;
|
|
159
|
+
version: z.ZodString;
|
|
160
|
+
status: z.ZodLiteral<"completed">;
|
|
161
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
162
|
+
status: z.ZodLiteral<"failed">;
|
|
163
|
+
error: z.ZodString;
|
|
164
|
+
}, z.core.$strip>], "status">, Record<never, never>, Record<never, never>>;
|
|
146
165
|
installMetadata: import("@orpc/contract").ContractProcedureBuilderWithOutput<import("@orpc/contract").Schema<unknown, unknown>, z.ZodCustom<Record<string, AssetInstallMetadata>, Record<string, AssetInstallMetadata>>, Record<never, never>, Record<never, never>>;
|
|
147
166
|
agent: {
|
|
148
167
|
start: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,oCAAoC,EAAE,OAAO,CAAA;IAC7C,mCAAmC,EAAE,OAAO,CAAA;CAC7C;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8C0B,MAAM;uBAAa,IAAI;;oBAAvB,MAAM;uBAAa,IAAI;;;;;;;CAIrE,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,QAAQ,CAAA"}
|
package/dist/contract.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { oc } from '@orpc/contract';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { MAX_UPLOAD_ZIP_SIZE_BYTES, agentRunStatusSchema, agentStartSchema, agentStatusSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, listAssetsSchema, updateProfileSchema, uploadZipSchema, } from './schemas.js';
|
|
3
|
+
import { MAX_UPLOAD_ZIP_SIZE_BYTES, agentRunStatusSchema, agentStartSchema, agentStatusSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, generateJobStatusSchema, generateResponseSchema, generateStatusInputSchema, listAssetsSchema, updateProfileSchema, uploadZipSchema, } from './schemas.js';
|
|
4
4
|
export const contract = {
|
|
5
5
|
asset: {
|
|
6
6
|
search: oc.input(listAssetsSchema).output(z.custom()),
|
|
@@ -14,7 +14,14 @@ export const contract = {
|
|
|
14
14
|
}))
|
|
15
15
|
.output(z.custom()),
|
|
16
16
|
downloadZip: oc.input(downloadZipSchema).output(z.instanceof(Blob)),
|
|
17
|
-
generate:
|
|
17
|
+
// Generation is a caller-polled job. `generate` starts it and answers immediately: `completed`
|
|
18
|
+
// for fast providers that finish inline, or `pending` with a jobId for slow ones (the humanoid
|
|
19
|
+
// model runs for minutes upstream). `generateStatus` polls that jobId until it settles. Nothing
|
|
20
|
+
// is held open for the length of the job — the market proxies the upstream service's async job
|
|
21
|
+
// statelessly (see generate-job.ts), so no request outlives a client/proxy timeout. The
|
|
22
|
+
// `generateAndWait` client helper drives both.
|
|
23
|
+
generate: oc.input(generateAssetSchema).output(generateResponseSchema),
|
|
24
|
+
generateStatus: oc.input(generateStatusInputSchema).output(generateJobStatusSchema),
|
|
18
25
|
installMetadata: oc.output(z.custom()),
|
|
19
26
|
// The agent plans, searches, judges and (where supported) generates a set of
|
|
20
27
|
// assets from a goal. `start` kicks off an async run; `status` long-polls it
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAA;AA2ErB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAoC,CAAC;QAEvF,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAA4B,CAAC;QAE9E,SAAS,EAAE,EAAE;aACV,KAAK,CACJ,eAAe;aACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,yBAAyB,EAAE;YAC7D,OAAO,EAAE,sCAAsC;YAC/C,IAAI,EAAE,CAAC,KAAK,CAAC;SACd,CAAC,CACL;aACA,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAA;AA2ErB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAoC,CAAC;QAEvF,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAA4B,CAAC;QAE9E,SAAS,EAAE,EAAE;aACV,KAAK,CACJ,eAAe;aACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,yBAAyB,EAAE;YAC7D,OAAO,EAAE,sCAAsC;YAC/C,IAAI,EAAE,CAAC,KAAK,CAAC;SACd,CAAC,CACL;aACA,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnE,+FAA+F;QAC/F,+FAA+F;QAC/F,gGAAgG;QAChG,+FAA+F;QAC/F,wFAAwF;QACxF,+CAA+C;QAC/C,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;QAEtE,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC;QAEnF,eAAe,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAwC,CAAC;QAE5E,6EAA6E;QAC7E,6EAA6E;QAC7E,oEAAoE;QACpE,4CAA4C;QAC5C,KAAK,EAAE;YACL,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC;SACjE;KACF;IAED,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAe,CAAC;QAE9C,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAQ,CAAC;QAErE,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAA8C,CAAC;QAE/E,eAAe,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KAChF;CACF,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const generationJobSchema: z.ZodObject<{
|
|
3
|
+
type: z.ZodEnum<{
|
|
4
|
+
model: "model";
|
|
5
|
+
"humanoid-model": "humanoid-model";
|
|
6
|
+
texture: "texture";
|
|
7
|
+
"humanoid-animation": "humanoid-animation";
|
|
8
|
+
template: "template";
|
|
9
|
+
"sound-effect": "sound-effect";
|
|
10
|
+
"background-music": "background-music";
|
|
11
|
+
environment: "environment";
|
|
12
|
+
flipbook: "flipbook";
|
|
13
|
+
}>;
|
|
14
|
+
providerJobId: z.ZodString;
|
|
15
|
+
description: z.ZodString;
|
|
16
|
+
assetName: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type GenerationJob = z.infer<typeof generationJobSchema>;
|
|
19
|
+
export declare function encodeGenerationJobId(job: GenerationJob): string;
|
|
20
|
+
export declare function decodeGenerationJobId(jobId: string): GenerationJob;
|
|
21
|
+
//# sourceMappingURL=generate-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-job.d.ts","sourceRoot":"","sources":["../src/generate-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;iBAK9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAEhE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQlE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { assetTypeSchema } from './schemas.js';
|
|
3
|
+
// A long-running generation is exposed to the caller as a job it polls (see `generate` /
|
|
4
|
+
// `generateStatus` in the contract). The market itself keeps NO state between polls: everything
|
|
5
|
+
// `generateStatus` needs to resume a job lives in the opaque jobId — which provider (`type`), the
|
|
6
|
+
// upstream provider's own job id (`providerJobId`, e.g. the character API job), the original
|
|
7
|
+
// `description` (stored metadata + search text), and the `assetName` pinned at start so a finalize
|
|
8
|
+
// re-run persists to the SAME name@version (idempotent) instead of minting a fresh unique name. The
|
|
9
|
+
// upstream service is the source of truth, so the market is a thin stateless proxy over its job.
|
|
10
|
+
export const generationJobSchema = z.object({
|
|
11
|
+
type: assetTypeSchema,
|
|
12
|
+
providerJobId: z.string().min(1),
|
|
13
|
+
description: z.string().min(1),
|
|
14
|
+
assetName: z.string().min(1),
|
|
15
|
+
});
|
|
16
|
+
export function encodeGenerationJobId(job) {
|
|
17
|
+
return Buffer.from(JSON.stringify(job), 'utf8').toString('base64url');
|
|
18
|
+
}
|
|
19
|
+
export function decodeGenerationJobId(jobId) {
|
|
20
|
+
let parsed;
|
|
21
|
+
try {
|
|
22
|
+
parsed = JSON.parse(Buffer.from(jobId, 'base64url').toString('utf8'));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new Error('Malformed generation job id');
|
|
26
|
+
}
|
|
27
|
+
return generationJobSchema.parse(parsed);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=generate-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-job.js","sourceRoot":"","sources":["../src/generate-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,yFAAyF;AACzF,gGAAgG;AAChG,kGAAkG;AAClG,6FAA6F;AAC7F,mGAAmG;AACnG,oGAAoG;AACpG,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAA;AAGF,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC"}
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AASD,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
|
package/dist/generate.js
CHANGED
|
@@ -4,13 +4,36 @@ export class GenerateError extends Error {
|
|
|
4
4
|
this.name = 'GenerateError';
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
+
// Poll cadence for a job-based generation. Each poll is a short, independently-retriable request;
|
|
8
|
+
// the client sleeps between them, so no single request is held open for the length of the job (that
|
|
9
|
+
// is exactly the client/proxy-timeout trap the async flow removes). The deadline sits above the
|
|
10
|
+
// slowest provider's own budget (the humanoid model's upstream job runs up to ~10 min).
|
|
11
|
+
const POLL_INTERVAL_MS = 4_000;
|
|
12
|
+
const POLL_DEADLINE_MS = 15 * 60_000;
|
|
7
13
|
export async function generateAndWait(client, input, opts = {}) {
|
|
8
14
|
const report = opts.onProgress ?? (() => { });
|
|
9
15
|
report('Generating asset');
|
|
10
|
-
const
|
|
11
|
-
if (
|
|
12
|
-
|
|
16
|
+
const started = await client.asset.generate(input);
|
|
17
|
+
if (started.status === 'completed') {
|
|
18
|
+
return { assetName: started.assetName, version: started.version };
|
|
13
19
|
}
|
|
14
|
-
|
|
20
|
+
const startedAt = Date.now();
|
|
21
|
+
for (;;) {
|
|
22
|
+
if (Date.now() - startedAt > POLL_DEADLINE_MS) {
|
|
23
|
+
throw new GenerateError('Generation timed out.');
|
|
24
|
+
}
|
|
25
|
+
await delay(POLL_INTERVAL_MS);
|
|
26
|
+
report('Generating asset');
|
|
27
|
+
const status = await client.asset.generateStatus({ jobId: started.jobId });
|
|
28
|
+
if (status.status === 'completed') {
|
|
29
|
+
return { assetName: status.assetName, version: status.version };
|
|
30
|
+
}
|
|
31
|
+
if (status.status === 'failed') {
|
|
32
|
+
throw new GenerateError(status.error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function delay(ms) {
|
|
37
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
15
38
|
}
|
|
16
39
|
//# sourceMappingURL=generate.js.map
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF;AAgBD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,KAAoB,EACpB,OAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAE5C,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF;AAgBD,kGAAkG;AAClG,oGAAoG;AACpG,gGAAgG;AAChG,wFAAwF;AACxF,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAC9B,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,KAAoB,EACpB,OAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAE5C,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAClD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,SAAS,CAAC;QACR,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,gBAAgB,EAAE,CAAC;YAC9C,MAAM,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAA;QAClD,CAAC;QACD,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC7B,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ export { generateAndWait, GenerateError } from './generate.js';
|
|
|
11
11
|
export type { GenerateInput, GenerateResult, GenerateOptions } from './generate.js';
|
|
12
12
|
export { agentAndWait, AgentError } from './agent.js';
|
|
13
13
|
export type { AgentInput } from './agent.js';
|
|
14
|
-
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, agentStartSchema, agentStatusSchema, agentResultAssetSchema, agentResultSchema, agentRunStatusSchema, } from './schemas.js';
|
|
15
|
-
export type { AssetType, AgentResultAsset, AgentResult, AgentRunStatus } from './schemas.js';
|
|
14
|
+
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, agentStartSchema, agentStatusSchema, agentResultAssetSchema, agentResultSchema, agentRunStatusSchema, generatedAssetSchema, generateResponseSchema, generateStatusInputSchema, generateJobStatusSchema, } from './schemas.js';
|
|
15
|
+
export type { AssetType, AgentResultAsset, AgentResult, AgentRunStatus, GenerateResponse, GenerateJobStatus, } from './schemas.js';
|
|
16
|
+
export { encodeGenerationJobId, decodeGenerationJobId, generationJobSchema, } from './generate-job.js';
|
|
17
|
+
export type { GenerationJob } from './generate-job.js';
|
|
16
18
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js';
|
|
17
19
|
export { packageJsonAssetDependencies, packageJsonAssetDependenciesFromFiles, parsePackageJson, } from './package-json.js';
|
|
18
20
|
export type { PackageJson } from './package-json.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGnF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGnF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAErF,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,EACrC,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,8 @@ export { generateAndWait, GenerateError } from './generate.js';
|
|
|
10
10
|
// Agent
|
|
11
11
|
export { agentAndWait, AgentError } from './agent.js';
|
|
12
12
|
// Schemas
|
|
13
|
-
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, agentStartSchema, agentStatusSchema, agentResultAssetSchema, agentResultSchema, agentRunStatusSchema, } from './schemas.js';
|
|
13
|
+
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, agentStartSchema, agentStatusSchema, agentResultAssetSchema, agentResultSchema, agentRunStatusSchema, generatedAssetSchema, generateResponseSchema, generateStatusInputSchema, generateJobStatusSchema, } from './schemas.js';
|
|
14
|
+
export { encodeGenerationJobId, decodeGenerationJobId, generationJobSchema, } from './generate-job.js';
|
|
14
15
|
// Constants
|
|
15
16
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js';
|
|
16
17
|
export { packageJsonAssetDependencies, packageJsonAssetDependenciesFromFiles, parsePackageJson, } from './package-json.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAyBxC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAElC,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGvD,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG9D,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGrD,UAAU;AACV,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAyBxC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAElC,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGvD,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG9D,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGrD,UAAU;AACV,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAUrB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAG1B,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAErF,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,EACrC,gBAAgB,GACjB,MAAM,mBAAmB,CAAA"}
|
package/dist/schemas.d.ts
CHANGED
|
@@ -99,6 +99,33 @@ export declare const generateAssetSchema: z.ZodObject<{
|
|
|
99
99
|
flipbook: "flipbook";
|
|
100
100
|
}>>;
|
|
101
101
|
}, z.core.$strip>;
|
|
102
|
+
export declare const generatedAssetSchema: z.ZodObject<{
|
|
103
|
+
assetName: z.ZodString;
|
|
104
|
+
version: z.ZodString;
|
|
105
|
+
}, z.core.$strip>;
|
|
106
|
+
export declare const generateResponseSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
107
|
+
assetName: z.ZodString;
|
|
108
|
+
version: z.ZodString;
|
|
109
|
+
status: z.ZodLiteral<"completed">;
|
|
110
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
111
|
+
status: z.ZodLiteral<"pending">;
|
|
112
|
+
jobId: z.ZodString;
|
|
113
|
+
}, z.core.$strip>], "status">;
|
|
114
|
+
export type GenerateResponse = z.infer<typeof generateResponseSchema>;
|
|
115
|
+
export declare const generateStatusInputSchema: z.ZodObject<{
|
|
116
|
+
jobId: z.ZodString;
|
|
117
|
+
}, z.core.$strip>;
|
|
118
|
+
export declare const generateJobStatusSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
119
|
+
status: z.ZodLiteral<"running">;
|
|
120
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
121
|
+
assetName: z.ZodString;
|
|
122
|
+
version: z.ZodString;
|
|
123
|
+
status: z.ZodLiteral<"completed">;
|
|
124
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
125
|
+
status: z.ZodLiteral<"failed">;
|
|
126
|
+
error: z.ZodString;
|
|
127
|
+
}, z.core.$strip>], "status">;
|
|
128
|
+
export type GenerateJobStatus = z.infer<typeof generateJobStatusSchema>;
|
|
102
129
|
export declare const agentStartSchema: z.ZodObject<{
|
|
103
130
|
goal: z.ZodString;
|
|
104
131
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW,kJAUd,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,eAAO,MAAM,eAAe;;;;;;;;;;EAAsB,CAAA;AAElD,eAAO,MAAM,yBAAyB,QAAqB,CAAA;AAC3D,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD,eAAO,MAAM,YAAY,aAKtB,CAAA;AAEH,eAAO,MAAM,eAAe,aAUxB,CAAA;AAEJ,eAAO,MAAM,qBAAqB,qDAA+C,CAAA;AAEjF,eAAO,MAAM,uBAAuB,qDAA+C,CAAA;AAKnF,eAAO,MAAM,uBAAuB,qDAA+C,CAAA;AAEnF,eAAO,MAAM,sBAAsB,aAA+C,CAAA;AAElF,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAO3B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;iBAI3B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;iBAS1B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAG9B,CAAA;AAKF,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;iBAE5B,CAAA;AAIF,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAKrE,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;6BAI/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW,kJAUd,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,eAAO,MAAM,eAAe;;;;;;;;;;EAAsB,CAAA;AAElD,eAAO,MAAM,yBAAyB,QAAqB,CAAA;AAC3D,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD,eAAO,MAAM,YAAY,aAKtB,CAAA;AAEH,eAAO,MAAM,eAAe,aAUxB,CAAA;AAEJ,eAAO,MAAM,qBAAqB,qDAA+C,CAAA;AAEjF,eAAO,MAAM,uBAAuB,qDAA+C,CAAA;AAKnF,eAAO,MAAM,uBAAuB,qDAA+C,CAAA;AAEnF,eAAO,MAAM,sBAAsB,aAA+C,CAAA;AAElF,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAO3B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;iBAI3B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;iBAS1B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAG9B,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAA;AAKF,eAAO,MAAM,sBAAsB;;;;;;;6BAGjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,yBAAyB;;iBAEpC,CAAA;AAIF,eAAO,MAAM,uBAAuB;;;;;;;;;6BAIlC,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAKvE,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;iBAE5B,CAAA;AAIF,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAKrE,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;6BAI/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
package/dist/schemas.js
CHANGED
|
@@ -66,6 +66,28 @@ export const generateAssetSchema = z.object({
|
|
|
66
66
|
description: assetDescriptionSchema.min(3),
|
|
67
67
|
type: assetTypeSchema.optional(),
|
|
68
68
|
});
|
|
69
|
+
// The completed asset of a generation: an installable name@version.
|
|
70
|
+
export const generatedAssetSchema = z.object({
|
|
71
|
+
assetName: assetNameSchema,
|
|
72
|
+
version: semverSchema,
|
|
73
|
+
});
|
|
74
|
+
// `generate` answers either immediately (fast providers finish inline) or with a job to poll (slow
|
|
75
|
+
// providers like the humanoid model, whose upstream job runs for minutes — see generate-job.ts). A
|
|
76
|
+
// discriminated union keeps "pending without a job id" and "done without an asset" unrepresentable.
|
|
77
|
+
export const generateResponseSchema = z.discriminatedUnion('status', [
|
|
78
|
+
generatedAssetSchema.extend({ status: z.literal('completed') }),
|
|
79
|
+
z.object({ status: z.literal('pending'), jobId: z.string().min(1) }),
|
|
80
|
+
]);
|
|
81
|
+
export const generateStatusInputSchema = z.object({
|
|
82
|
+
jobId: z.string().min(1),
|
|
83
|
+
});
|
|
84
|
+
// The state of a polled generation job: still running, or settled (completed with the asset / failed
|
|
85
|
+
// with a reason). Mirrors agentRunStatusSchema so the two async flows read the same.
|
|
86
|
+
export const generateJobStatusSchema = z.discriminatedUnion('status', [
|
|
87
|
+
z.object({ status: z.literal('running') }),
|
|
88
|
+
generatedAssetSchema.extend({ status: z.literal('completed') }),
|
|
89
|
+
z.object({ status: z.literal('failed'), error: z.string() }),
|
|
90
|
+
]);
|
|
69
91
|
// The agent takes a natural-language goal (which carries the count and kinds,
|
|
70
92
|
// e.g. "3 low poly stones" or "a template for a zombie game, none if no fit")
|
|
71
93
|
// and optional reference images as base64 (raw or data URLs).
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,gBAAgB;IAChB,SAAS;IACT,oBAAoB;IACpB,UAAU;IACV,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,UAAU;CACF,CAAA;AAGV,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,KAAK,CACJ,oDAAoD,EACpD,6CAA6C,CAC9C,CAAA;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CACJ,8BAA8B,EAC9B,0EAA0E,CAC3E;KACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;IAC5C,OAAO,EAAE,0EAA0E;CACpF,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAEjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAEnF,yEAAyE;AACzE,8EAA8E;AAC9E,4BAA4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAElF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;CACxE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC9C,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,YAAY;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,8EAA8E;AAC9E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAA;AAEF,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAA;AAGF,8EAA8E;AAC9E,6EAA6E;AAC7E,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;CACxC,CAAC,CAAA;AAGF,gFAAgF;AAChF,0EAA0E;AAC1E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACjE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACvE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC7D,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
GenerateAssetResult,
|
|
6
6
|
PaginatedList,
|
|
7
7
|
} from './contract.js'
|
|
8
|
-
import type { AssetType } from './schemas.js'
|
|
8
|
+
import type { AssetType, GenerateJobStatus } from './schemas.js'
|
|
9
9
|
|
|
10
10
|
export const ASSET_RELEVANCE_SCORE: unique symbol = Symbol('assetRelevanceScore')
|
|
11
11
|
|
|
@@ -70,6 +70,15 @@ export interface AssetProvider {
|
|
|
70
70
|
uploadZip(input: AssetUploadZipInput, owner: AssetOwner): Promise<AssetVersion>
|
|
71
71
|
downloadZip(input: AssetDownloadZipInput): Promise<Blob>
|
|
72
72
|
generate?(input: AssetGenerateInput, owner: AssetOwner): Promise<GenerateAssetResult>
|
|
73
|
+
/**
|
|
74
|
+
* Job-based generation for providers whose upstream work runs for minutes (the humanoid model).
|
|
75
|
+
* `startGeneration` kicks off the upstream job and returns a pollable jobId WITHOUT waiting;
|
|
76
|
+
* `generationStatus` checks that job on each poll and, once the upstream work is done, persists it
|
|
77
|
+
* and returns the asset. A provider implements EITHER `generate` (fast, inline) OR this pair (slow,
|
|
78
|
+
* polled) — never relying on one long-held request. See generate-job.ts.
|
|
79
|
+
*/
|
|
80
|
+
startGeneration?(input: AssetGenerateInput, owner: AssetOwner): Promise<{ jobId: string }>
|
|
81
|
+
generationStatus?(jobId: string, owner: AssetOwner): Promise<GenerateJobStatus>
|
|
73
82
|
}
|
|
74
83
|
|
|
75
84
|
export type AssetImplementation = AssetProvider
|
package/src/contract.ts
CHANGED
|
@@ -8,6 +8,9 @@ import {
|
|
|
8
8
|
downloadZipSchema,
|
|
9
9
|
exactAssetSchema,
|
|
10
10
|
generateAssetSchema,
|
|
11
|
+
generateJobStatusSchema,
|
|
12
|
+
generateResponseSchema,
|
|
13
|
+
generateStatusInputSchema,
|
|
11
14
|
listAssetsSchema,
|
|
12
15
|
updateProfileSchema,
|
|
13
16
|
uploadZipSchema,
|
|
@@ -105,7 +108,15 @@ export const contract = {
|
|
|
105
108
|
|
|
106
109
|
downloadZip: oc.input(downloadZipSchema).output(z.instanceof(Blob)),
|
|
107
110
|
|
|
108
|
-
generate:
|
|
111
|
+
// Generation is a caller-polled job. `generate` starts it and answers immediately: `completed`
|
|
112
|
+
// for fast providers that finish inline, or `pending` with a jobId for slow ones (the humanoid
|
|
113
|
+
// model runs for minutes upstream). `generateStatus` polls that jobId until it settles. Nothing
|
|
114
|
+
// is held open for the length of the job — the market proxies the upstream service's async job
|
|
115
|
+
// statelessly (see generate-job.ts), so no request outlives a client/proxy timeout. The
|
|
116
|
+
// `generateAndWait` client helper drives both.
|
|
117
|
+
generate: oc.input(generateAssetSchema).output(generateResponseSchema),
|
|
118
|
+
|
|
119
|
+
generateStatus: oc.input(generateStatusInputSchema).output(generateJobStatusSchema),
|
|
109
120
|
|
|
110
121
|
installMetadata: oc.output(z.custom<Record<string, AssetInstallMetadata>>()),
|
|
111
122
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { assetTypeSchema } from './schemas.js'
|
|
3
|
+
|
|
4
|
+
// A long-running generation is exposed to the caller as a job it polls (see `generate` /
|
|
5
|
+
// `generateStatus` in the contract). The market itself keeps NO state between polls: everything
|
|
6
|
+
// `generateStatus` needs to resume a job lives in the opaque jobId — which provider (`type`), the
|
|
7
|
+
// upstream provider's own job id (`providerJobId`, e.g. the character API job), the original
|
|
8
|
+
// `description` (stored metadata + search text), and the `assetName` pinned at start so a finalize
|
|
9
|
+
// re-run persists to the SAME name@version (idempotent) instead of minting a fresh unique name. The
|
|
10
|
+
// upstream service is the source of truth, so the market is a thin stateless proxy over its job.
|
|
11
|
+
export const generationJobSchema = z.object({
|
|
12
|
+
type: assetTypeSchema,
|
|
13
|
+
providerJobId: z.string().min(1),
|
|
14
|
+
description: z.string().min(1),
|
|
15
|
+
assetName: z.string().min(1),
|
|
16
|
+
})
|
|
17
|
+
export type GenerationJob = z.infer<typeof generationJobSchema>
|
|
18
|
+
|
|
19
|
+
export function encodeGenerationJobId(job: GenerationJob): string {
|
|
20
|
+
return Buffer.from(JSON.stringify(job), 'utf8').toString('base64url')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function decodeGenerationJobId(jobId: string): GenerationJob {
|
|
24
|
+
let parsed: unknown
|
|
25
|
+
try {
|
|
26
|
+
parsed = JSON.parse(Buffer.from(jobId, 'base64url').toString('utf8'))
|
|
27
|
+
} catch {
|
|
28
|
+
throw new Error('Malformed generation job id')
|
|
29
|
+
}
|
|
30
|
+
return generationJobSchema.parse(parsed)
|
|
31
|
+
}
|
package/src/generate.ts
CHANGED
|
@@ -22,6 +22,13 @@ export interface GenerateOptions {
|
|
|
22
22
|
onProgress?: (message: string) => void
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
// Poll cadence for a job-based generation. Each poll is a short, independently-retriable request;
|
|
26
|
+
// the client sleeps between them, so no single request is held open for the length of the job (that
|
|
27
|
+
// is exactly the client/proxy-timeout trap the async flow removes). The deadline sits above the
|
|
28
|
+
// slowest provider's own budget (the humanoid model's upstream job runs up to ~10 min).
|
|
29
|
+
const POLL_INTERVAL_MS = 4_000
|
|
30
|
+
const POLL_DEADLINE_MS = 15 * 60_000
|
|
31
|
+
|
|
25
32
|
export async function generateAndWait(
|
|
26
33
|
client: MarketClient,
|
|
27
34
|
input: GenerateInput,
|
|
@@ -30,9 +37,28 @@ export async function generateAndWait(
|
|
|
30
37
|
const report = opts.onProgress ?? (() => {})
|
|
31
38
|
|
|
32
39
|
report('Generating asset')
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
35
|
-
|
|
40
|
+
const started = await client.asset.generate(input)
|
|
41
|
+
if (started.status === 'completed') {
|
|
42
|
+
return { assetName: started.assetName, version: started.version }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const startedAt = Date.now()
|
|
46
|
+
for (;;) {
|
|
47
|
+
if (Date.now() - startedAt > POLL_DEADLINE_MS) {
|
|
48
|
+
throw new GenerateError('Generation timed out.')
|
|
49
|
+
}
|
|
50
|
+
await delay(POLL_INTERVAL_MS)
|
|
51
|
+
report('Generating asset')
|
|
52
|
+
const status = await client.asset.generateStatus({ jobId: started.jobId })
|
|
53
|
+
if (status.status === 'completed') {
|
|
54
|
+
return { assetName: status.assetName, version: status.version }
|
|
55
|
+
}
|
|
56
|
+
if (status.status === 'failed') {
|
|
57
|
+
throw new GenerateError(status.error)
|
|
58
|
+
}
|
|
36
59
|
}
|
|
37
|
-
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function delay(ms: number): Promise<void> {
|
|
63
|
+
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
38
64
|
}
|
package/src/index.ts
CHANGED
|
@@ -68,8 +68,26 @@ export {
|
|
|
68
68
|
agentResultAssetSchema,
|
|
69
69
|
agentResultSchema,
|
|
70
70
|
agentRunStatusSchema,
|
|
71
|
+
generatedAssetSchema,
|
|
72
|
+
generateResponseSchema,
|
|
73
|
+
generateStatusInputSchema,
|
|
74
|
+
generateJobStatusSchema,
|
|
71
75
|
} from './schemas.js'
|
|
72
|
-
export type {
|
|
76
|
+
export type {
|
|
77
|
+
AssetType,
|
|
78
|
+
AgentResultAsset,
|
|
79
|
+
AgentResult,
|
|
80
|
+
AgentRunStatus,
|
|
81
|
+
GenerateResponse,
|
|
82
|
+
GenerateJobStatus,
|
|
83
|
+
} from './schemas.js'
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
encodeGenerationJobId,
|
|
87
|
+
decodeGenerationJobId,
|
|
88
|
+
generationJobSchema,
|
|
89
|
+
} from './generate-job.js'
|
|
90
|
+
export type { GenerationJob } from './generate-job.js'
|
|
73
91
|
|
|
74
92
|
// Constants
|
|
75
93
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js'
|
package/src/schemas.ts
CHANGED
|
@@ -89,6 +89,34 @@ export const generateAssetSchema = z.object({
|
|
|
89
89
|
type: assetTypeSchema.optional(),
|
|
90
90
|
})
|
|
91
91
|
|
|
92
|
+
// The completed asset of a generation: an installable name@version.
|
|
93
|
+
export const generatedAssetSchema = z.object({
|
|
94
|
+
assetName: assetNameSchema,
|
|
95
|
+
version: semverSchema,
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// `generate` answers either immediately (fast providers finish inline) or with a job to poll (slow
|
|
99
|
+
// providers like the humanoid model, whose upstream job runs for minutes — see generate-job.ts). A
|
|
100
|
+
// discriminated union keeps "pending without a job id" and "done without an asset" unrepresentable.
|
|
101
|
+
export const generateResponseSchema = z.discriminatedUnion('status', [
|
|
102
|
+
generatedAssetSchema.extend({ status: z.literal('completed') }),
|
|
103
|
+
z.object({ status: z.literal('pending'), jobId: z.string().min(1) }),
|
|
104
|
+
])
|
|
105
|
+
export type GenerateResponse = z.infer<typeof generateResponseSchema>
|
|
106
|
+
|
|
107
|
+
export const generateStatusInputSchema = z.object({
|
|
108
|
+
jobId: z.string().min(1),
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// The state of a polled generation job: still running, or settled (completed with the asset / failed
|
|
112
|
+
// with a reason). Mirrors agentRunStatusSchema so the two async flows read the same.
|
|
113
|
+
export const generateJobStatusSchema = z.discriminatedUnion('status', [
|
|
114
|
+
z.object({ status: z.literal('running') }),
|
|
115
|
+
generatedAssetSchema.extend({ status: z.literal('completed') }),
|
|
116
|
+
z.object({ status: z.literal('failed'), error: z.string() }),
|
|
117
|
+
])
|
|
118
|
+
export type GenerateJobStatus = z.infer<typeof generateJobStatusSchema>
|
|
119
|
+
|
|
92
120
|
// The agent takes a natural-language goal (which carries the count and kinds,
|
|
93
121
|
// e.g. "3 low poly stones" or "a template for a zombie game, none if no fit")
|
|
94
122
|
// and optional reference images as base64 (raw or data URLs).
|