@drawcall/market 0.1.21 → 0.1.23
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 +1 -1
- package/dist/asset-implementation.d.ts.map +1 -1
- package/dist/commands/install.d.ts +8 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +14 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/skill.d.ts +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +3 -3
- package/package.json +2 -2
- package/src/asset-implementation.ts +1 -1
- package/src/commands/install.ts +18 -1
- package/src/skill.ts +3 -3
- package/tests/install-command.test.ts +78 -0
|
@@ -41,7 +41,7 @@ export interface AssetProvider {
|
|
|
41
41
|
}): Promise<AssetVersion>;
|
|
42
42
|
downloadZip(input: AssetDownloadZipInput): Promise<Blob>;
|
|
43
43
|
downloadPreviewImage?(input: AssetDownloadZipInput): Promise<Blob>;
|
|
44
|
-
generate(input: AssetGenerateInput): Promise<GenerateAssetResult>;
|
|
44
|
+
generate?(input: AssetGenerateInput): Promise<GenerateAssetResult>;
|
|
45
45
|
}
|
|
46
46
|
export type AssetImplementation = AssetProvider;
|
|
47
47
|
//# sourceMappingURL=asset-implementation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,EAAE,IAAI,CAAA;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC1E,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAChE,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACjG,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,oBAAoB,CAAC,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,EAAE,IAAI,CAAA;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC1E,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAChE,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACjG,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,oBAAoB,CAAC,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,QAAQ,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACnE;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import { type Ora } from 'ora';
|
|
1
2
|
import { type AssetType } from '../schemas.js';
|
|
3
|
+
import type { MarketClient } from '../client.js';
|
|
2
4
|
export interface InstallCommandOptions {
|
|
3
5
|
type?: AssetType;
|
|
4
6
|
unapproved?: boolean;
|
|
5
7
|
cwd?: string;
|
|
6
8
|
baseUrl?: string;
|
|
7
9
|
}
|
|
10
|
+
interface AssetRequest {
|
|
11
|
+
name: string;
|
|
12
|
+
range: string;
|
|
13
|
+
}
|
|
8
14
|
export declare function installCommand(args: string[], opts: InstallCommandOptions): Promise<void>;
|
|
15
|
+
export declare function resolveArg(client: MarketClient, arg: string, type: AssetType | undefined, spinner: Ora, canGenerate: boolean, includeUnapproved: boolean): Promise<AssetRequest>;
|
|
16
|
+
export {};
|
|
9
17
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAInC,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAAC,YAAY,CAAC,CAqEvB"}
|
package/dist/commands/install.js
CHANGED
|
@@ -36,7 +36,7 @@ export async function installCommand(args, opts) {
|
|
|
36
36
|
throw err;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
async function resolveArg(client, arg, type, spinner, canGenerate, includeUnapproved) {
|
|
39
|
+
export async function resolveArg(client, arg, type, spinner, canGenerate, includeUnapproved) {
|
|
40
40
|
const parsed = parseNameAndRange(arg);
|
|
41
41
|
if (parsed) {
|
|
42
42
|
const existing = await client.asset.exact({
|
|
@@ -46,6 +46,19 @@ async function resolveArg(client, arg, type, spinner, canGenerate, includeUnappr
|
|
|
46
46
|
});
|
|
47
47
|
if (existing)
|
|
48
48
|
return parsed;
|
|
49
|
+
if (!includeUnapproved) {
|
|
50
|
+
const hidden = await client.asset.exact({
|
|
51
|
+
name: parsed.name,
|
|
52
|
+
type,
|
|
53
|
+
includeUnapproved: true,
|
|
54
|
+
});
|
|
55
|
+
if (hidden) {
|
|
56
|
+
throw new Error(`Asset "${parsed.name}" exists but has no approved versions. Re-run with \`--unapproved\` if you have access.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (arg.includes('@')) {
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
49
62
|
}
|
|
50
63
|
spinner.text = `Searching "${truncate(arg, 40)}"`;
|
|
51
64
|
const results = await client.asset.search({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAe7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc,EAAE,IAA2B;IAC9E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAEtC,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,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;IACV,IAAI,CAAC;QACH,MAAM,QAAQ,GAAmB,EAAE,CAAA;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA;YACjD,QAAQ,CAAC,IAAI,CACX,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CACzF,CAAA;QACH,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;YACvD,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;SAC5C,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;YAClD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/skill.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const marketSkill = "---\nname: market\ndescription: Find, preview, install, generate, and publish Drawcall Market assets from a coding agent.\n---\n\n# Drawcall Market\n\nUse the `market` CLI. Keep commands short and read the summary line plus asset bullets.\n\n## Quick Start\n\n```sh\nmarket search \"wooden chair\" --type model --limit 3\nmarket install wooden-chair --type model --cwd \"$PWD\"\nmarket preview wooden-chair --out /tmp/wooden-chair.png\n```\n\n## Workflow\n\n1. Search first unless the user gave an exact asset name.\n2. Search requires `--type`; use `model` unless the user names another supported type: `humanoid-model`, `texture`, `humanoid-animation`, `template`, `sound-effect`, or `environment`.\n3. Use `--limit 1` for lookup, `--limit 3` for choice. Search caps at 5.\n4. Use `--verbose` only when the one-line descriptions are not enough.\n5. Use `--unapproved` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.\n6. Preview before installing when visual fit matters: `market preview <name> --out <file>`. Preview is not supported for `humanoid-animation`, `template`, or `sound-effect`.\n7. Generate only when the user wants a new asset
|
|
1
|
+
export declare const marketSkill = "---\nname: market\ndescription: Find, preview, install, generate, and publish Drawcall Market assets from a coding agent.\n---\n\n# Drawcall Market\n\nUse the `market` CLI. Keep commands short and read the summary line plus asset bullets.\n\n## Quick Start\n\n```sh\nmarket search \"wooden chair\" --type model --limit 3\nmarket install wooden-chair --type model --cwd \"$PWD\"\nmarket preview wooden-chair --out /tmp/wooden-chair.png\n```\n\n## Workflow\n\n1. Search first unless the user gave an exact asset name.\n2. Search requires `--type`; use `model` unless the user names another supported type: `humanoid-model`, `texture`, `humanoid-animation`, `template`, `sound-effect`, or `environment`.\n3. Use `--limit 1` for lookup, `--limit 3` for choice. Search caps at 5.\n4. Use `--verbose` only when the one-line descriptions are not enough.\n5. Use `--unapproved` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.\n6. Preview before installing when visual fit matters: `market preview <name> --out <file>`. Preview is not supported for `humanoid-animation`, `template`, or `sound-effect`.\n7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.\n8. Upload only when publishing is requested.\n9. Installed `environment` assets contain `public/environment/<name>.hdr` for Three.js IBL lighting and `public/environment/<name>-background.webp` for the visible equirectangular background. Use `market preview` to fetch the preview image separately.\n\n## Output\n\nCommands print concise summaries:\n\n```text\nResults: 2/8 query=\"wooden chair\" type=model approval=approved\n- wooden-chair@1.0.0 | model | approved | Low-poly wooden chair\nInstalled 1 asset: wooden-chair@1.0.0\nSaved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png\n```\n\nIf search returns no results, try one broader noun phrase. If a command returns `Error: Not logged in...`, ask before running `market login`.\n";
|
|
2
2
|
//# sourceMappingURL=skill.d.ts.map
|
package/dist/skill.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,giEAyCvB,CAAA"}
|
package/dist/skill.js
CHANGED
|
@@ -23,9 +23,9 @@ market preview wooden-chair --out /tmp/wooden-chair.png
|
|
|
23
23
|
4. Use \`--verbose\` only when the one-line descriptions are not enough.
|
|
24
24
|
5. Use \`--unapproved\` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.
|
|
25
25
|
6. Preview before installing when visual fit matters: \`market preview <name> --out <file>\`. Preview is not supported for \`humanoid-animation\`, \`template\`, or \`sound-effect\`.
|
|
26
|
-
7. Generate only when the user wants a new asset
|
|
26
|
+
7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.
|
|
27
27
|
8. Upload only when publishing is requested.
|
|
28
|
-
9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background.
|
|
28
|
+
9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background. Use \`market preview\` to fetch the preview image separately.
|
|
29
29
|
|
|
30
30
|
## Output
|
|
31
31
|
|
|
@@ -38,6 +38,6 @@ Installed 1 asset: wooden-chair@1.0.0
|
|
|
38
38
|
Saved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png
|
|
39
39
|
\`\`\`
|
|
40
40
|
|
|
41
|
-
If search returns no results, try one broader noun phrase
|
|
41
|
+
If search returns no results, try one broader noun phrase. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
|
|
42
42
|
`;
|
|
43
43
|
//# sourceMappingURL=skill.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drawcall/market",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/drawcall-ai/market",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc",
|
|
33
33
|
"dev": "tsx src/cli.ts",
|
|
34
|
-
"test:install-layout": "tsx --test tests/install-layout.test.ts",
|
|
34
|
+
"test:install-layout": "tsx --test tests/install-layout.test.ts tests/install-command.test.ts",
|
|
35
35
|
"typecheck": "tsc --noEmit"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
@@ -49,7 +49,7 @@ export interface AssetProvider {
|
|
|
49
49
|
uploadZip(input: AssetUploadZipInput, owner: { id: string; role: string }): Promise<AssetVersion>
|
|
50
50
|
downloadZip(input: AssetDownloadZipInput): Promise<Blob>
|
|
51
51
|
downloadPreviewImage?(input: AssetDownloadZipInput): Promise<Blob>
|
|
52
|
-
generate(input: AssetGenerateInput): Promise<GenerateAssetResult>
|
|
52
|
+
generate?(input: AssetGenerateInput): Promise<GenerateAssetResult>
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export type AssetImplementation = AssetProvider
|
package/src/commands/install.ts
CHANGED
|
@@ -56,7 +56,7 @@ export async function installCommand(args: string[], opts: InstallCommandOptions
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
async function resolveArg(
|
|
59
|
+
export async function resolveArg(
|
|
60
60
|
client: MarketClient,
|
|
61
61
|
arg: string,
|
|
62
62
|
type: AssetType | undefined,
|
|
@@ -72,6 +72,23 @@ async function resolveArg(
|
|
|
72
72
|
includeUnapproved,
|
|
73
73
|
})
|
|
74
74
|
if (existing) return parsed
|
|
75
|
+
|
|
76
|
+
if (!includeUnapproved) {
|
|
77
|
+
const hidden = await client.asset.exact({
|
|
78
|
+
name: parsed.name,
|
|
79
|
+
type,
|
|
80
|
+
includeUnapproved: true,
|
|
81
|
+
})
|
|
82
|
+
if (hidden) {
|
|
83
|
+
throw new Error(
|
|
84
|
+
`Asset "${parsed.name}" exists but has no approved versions. Re-run with \`--unapproved\` if you have access.`,
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (arg.includes('@')) {
|
|
90
|
+
return parsed
|
|
91
|
+
}
|
|
75
92
|
}
|
|
76
93
|
|
|
77
94
|
spinner.text = `Searching "${truncate(arg, 40)}"`
|
package/src/skill.ts
CHANGED
|
@@ -23,9 +23,9 @@ market preview wooden-chair --out /tmp/wooden-chair.png
|
|
|
23
23
|
4. Use \`--verbose\` only when the one-line descriptions are not enough.
|
|
24
24
|
5. Use \`--unapproved\` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.
|
|
25
25
|
6. Preview before installing when visual fit matters: \`market preview <name> --out <file>\`. Preview is not supported for \`humanoid-animation\`, \`template\`, or \`sound-effect\`.
|
|
26
|
-
7. Generate only when the user wants a new asset
|
|
26
|
+
7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.
|
|
27
27
|
8. Upload only when publishing is requested.
|
|
28
|
-
9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background.
|
|
28
|
+
9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background. Use \`market preview\` to fetch the preview image separately.
|
|
29
29
|
|
|
30
30
|
## Output
|
|
31
31
|
|
|
@@ -38,5 +38,5 @@ Installed 1 asset: wooden-chair@1.0.0
|
|
|
38
38
|
Saved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png
|
|
39
39
|
\`\`\`
|
|
40
40
|
|
|
41
|
-
If search returns no results, try one broader noun phrase
|
|
41
|
+
If search returns no results, try one broader noun phrase. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
|
|
42
42
|
`
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import assert from 'node:assert/strict'
|
|
2
|
+
import test from 'node:test'
|
|
3
|
+
import { resolveArg } from '../src/commands/install.js'
|
|
4
|
+
|
|
5
|
+
test('resolveArg reports unapproved explicit assets instead of falling through to generation', async () => {
|
|
6
|
+
let searchCalls = 0
|
|
7
|
+
const client = {
|
|
8
|
+
asset: {
|
|
9
|
+
exact: async ({
|
|
10
|
+
includeUnapproved,
|
|
11
|
+
}: {
|
|
12
|
+
name: string
|
|
13
|
+
type?: string
|
|
14
|
+
includeUnapproved: boolean
|
|
15
|
+
}) =>
|
|
16
|
+
includeUnapproved
|
|
17
|
+
? {
|
|
18
|
+
name: 'qwantani-moon-noon-puresky',
|
|
19
|
+
latestVersion: '1.0.2',
|
|
20
|
+
approved: false,
|
|
21
|
+
}
|
|
22
|
+
: null,
|
|
23
|
+
search: async () => {
|
|
24
|
+
searchCalls += 1
|
|
25
|
+
return { items: [], total: 0, page: 1, limit: 1, totalPages: 0 }
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
} as never
|
|
29
|
+
|
|
30
|
+
await assert.rejects(
|
|
31
|
+
resolveArg(
|
|
32
|
+
client,
|
|
33
|
+
'qwantani-moon-noon-puresky@1.0.2',
|
|
34
|
+
'environment',
|
|
35
|
+
silentSpinner(),
|
|
36
|
+
true,
|
|
37
|
+
false,
|
|
38
|
+
),
|
|
39
|
+
/has no approved versions/u,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
assert.equal(searchCalls, 0)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('resolveArg keeps explicit versioned asset refs exact when nothing matches yet', async () => {
|
|
46
|
+
let searchCalls = 0
|
|
47
|
+
const client = {
|
|
48
|
+
asset: {
|
|
49
|
+
exact: async () => null,
|
|
50
|
+
search: async () => {
|
|
51
|
+
searchCalls += 1
|
|
52
|
+
return { items: [], total: 0, page: 1, limit: 1, totalPages: 0 }
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
} as never
|
|
56
|
+
|
|
57
|
+
const request = await resolveArg(
|
|
58
|
+
client,
|
|
59
|
+
'fresh-sky@1.2.3',
|
|
60
|
+
'environment',
|
|
61
|
+
silentSpinner(),
|
|
62
|
+
true,
|
|
63
|
+
false,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
assert.deepEqual(request, { name: 'fresh-sky', range: '1.2.3' })
|
|
67
|
+
assert.equal(searchCalls, 0)
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
function silentSpinner() {
|
|
71
|
+
return {
|
|
72
|
+
text: '',
|
|
73
|
+
info() {},
|
|
74
|
+
start() {
|
|
75
|
+
return this
|
|
76
|
+
},
|
|
77
|
+
} as never
|
|
78
|
+
}
|