@drawcall/market 0.6.2 → 0.6.3
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/README.md +13 -13
- package/dist/install-lock.d.ts +6 -1
- package/dist/install-lock.d.ts.map +1 -1
- package/dist/install-lock.js +12 -4
- package/dist/install-lock.js.map +1 -1
- package/dist/project-walk.d.ts.map +1 -1
- package/dist/project-walk.js +4 -5
- package/dist/project-walk.js.map +1 -1
- package/package.json +2 -2
- package/src/install-lock.ts +12 -4
- package/src/project-walk.ts +4 -5
package/README.md
CHANGED
|
@@ -72,23 +72,21 @@ Each `AssetSearchResult` is:
|
|
|
72
72
|
updatedAt: Date
|
|
73
73
|
latestVersion: string // semver of the latest published version
|
|
74
74
|
approved: boolean
|
|
75
|
-
npmDependencies:
|
|
76
|
-
assetDependencies:
|
|
77
|
-
skillDependencies:
|
|
75
|
+
npmDependencies: Record<string, string>
|
|
76
|
+
assetDependencies: AssetDependencies // range string or { version, alias } per entry
|
|
77
|
+
skillDependencies: Record<string, string>
|
|
78
78
|
previewUrl: string | null // image URL for an <img>, or null
|
|
79
79
|
}
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
-
The three `*Dependencies` fields are JSON strings (parse with `JSON.parse`); everything else is ready to use.
|
|
83
|
-
|
|
84
82
|
### Previews
|
|
85
83
|
|
|
86
84
|
`previewUrl` is the fetch-ready image URL for a result, or `null` for types without a preview (only `model`, `humanoid-model`, `texture`, `environment`, and `flipbook` have one). Drop it straight into an `<img src>`; private and unapproved results already carry the capability when the caller is entitled to see them:
|
|
87
85
|
|
|
88
86
|
```ts
|
|
89
|
-
import {
|
|
87
|
+
import { v1 } from '@drawcall/market'
|
|
90
88
|
|
|
91
|
-
const client =
|
|
89
|
+
const client = v1.createClient()
|
|
92
90
|
const { items } = await client.asset.search({
|
|
93
91
|
query: 'robot',
|
|
94
92
|
type: 'model',
|
|
@@ -111,9 +109,9 @@ The runnable Market frontend renders results immediately and lets the browser lo
|
|
|
111
109
|
Resolve a set of assets (and their transitive asset/npm/skill dependencies) to a concrete, installable plan. The CLI and any server-side caller share this resolver:
|
|
112
110
|
|
|
113
111
|
```ts
|
|
114
|
-
import {
|
|
112
|
+
import { v1, resolve } from '@drawcall/market'
|
|
115
113
|
|
|
116
|
-
const client =
|
|
114
|
+
const client = v1.createClient()
|
|
117
115
|
const plan = await resolve(client.asset, [{ name: 'my-model', range: '^1.0.0' }])
|
|
118
116
|
|
|
119
117
|
plan.assets // resolved name@version per asset (with its type)
|
|
@@ -122,15 +120,17 @@ plan.skillDependencies // merged skill sources
|
|
|
122
120
|
```
|
|
123
121
|
|
|
124
122
|
The Node-only filesystem APIs are available from `@drawcall/market/install`. `install` downloads and
|
|
125
|
-
writes resolved assets; `listInstalledAssets` reads the
|
|
126
|
-
`getCliClient` uses `DRAWCALL_AUTH_TOKEN` or the saved
|
|
123
|
+
writes resolved assets; `listInstalledAssets` reads the declared `assetDependencies` (name, range,
|
|
124
|
+
aliases) from the nearest `package.json`; `getCliClient` uses `DRAWCALL_AUTH_TOKEN` or the saved
|
|
125
|
+
Market login when private assets must resolve.
|
|
127
126
|
|
|
128
127
|
```ts
|
|
129
128
|
import { getCliClient, listInstalledAssets } from '@drawcall/market/install'
|
|
130
129
|
|
|
131
130
|
const { assets } = await listInstalledAssets(process.cwd())
|
|
132
131
|
const { client } = await getCliClient()
|
|
133
|
-
const
|
|
132
|
+
const plan = await resolve(client.asset, assets.map(({ name, range }) => ({ name, range })))
|
|
133
|
+
const index = await client.asset.files({ name: plan.assets[0].name, version: plan.assets[0].version })
|
|
134
134
|
await fetch(index.files[0].url)
|
|
135
135
|
```
|
|
136
136
|
|
|
@@ -152,6 +152,6 @@ Reads (`types`, `install`, `list`, `search`, `preview`) work without auth; `pack
|
|
|
152
152
|
|
|
153
153
|
`pack` creates the same asset zip that `upload` sends. It runs offline, infers template packing from a root `package.json`, and accepts `--type` only when you need to override that inference. `upload` calls the shared pack step internally, then publishes.
|
|
154
154
|
|
|
155
|
-
`list` is an offline local inventory command. It reads
|
|
155
|
+
`list` is an offline local inventory command. It reads `assetDependencies` from the nearest `package.json` and prints each declared asset with its range and file aliases.
|
|
156
156
|
|
|
157
157
|
Run `npx @drawcall/market skill` to print the agent workflow guidance, or `npx @drawcall/market --help` for the full command list.
|
package/dist/install-lock.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The install mutex is per-machine (staleness is judged by pid + hostname), so it lives in the OS
|
|
3
|
+
* temp dir keyed by the project root — never inside the project, where it could leak into packs
|
|
4
|
+
* or version control.
|
|
5
|
+
*/
|
|
6
|
+
export declare function projectInstallLockPath(projectRoot: string): string;
|
|
2
7
|
export interface ProjectInstallLockOptions {
|
|
3
8
|
timeoutMs?: number;
|
|
4
9
|
retryDelayMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-lock.d.ts","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"install-lock.d.ts","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGlE;AAqBD,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
package/dist/install-lock.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
|
-
import { hostname } from 'node:os';
|
|
3
|
+
import { hostname, tmpdir } from 'node:os';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The install mutex is per-machine (staleness is judged by pid + hostname), so it lives in the OS
|
|
7
|
+
* temp dir keyed by the project root — never inside the project, where it could leak into packs
|
|
8
|
+
* or version control.
|
|
9
|
+
*/
|
|
10
|
+
export function projectInstallLockPath(projectRoot) {
|
|
11
|
+
const key = createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 16);
|
|
12
|
+
return path.join(tmpdir(), `drawcall-market-install-${key}.lock`);
|
|
13
|
+
}
|
|
6
14
|
const OWNER_FILE = 'owner.json';
|
|
7
15
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
8
16
|
const DEFAULT_RETRY_DELAY_MS = 50;
|
|
9
17
|
const DEFAULT_STALE_MS = 5 * 60_000;
|
|
10
18
|
export async function withProjectInstallLock(projectRoot, task, options = {}) {
|
|
11
|
-
const lockPath =
|
|
19
|
+
const lockPath = projectInstallLockPath(projectRoot);
|
|
12
20
|
const owner = await acquireLock(lockPath, options);
|
|
13
21
|
try {
|
|
14
22
|
return await task();
|
package/dist/install-lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-lock.js","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"install-lock.js","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-walk.d.ts","sourceRoot":"","sources":["../src/project-walk.ts"],"names":[],"mappings":"AAOA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,eAAO,MAAM,kBAAkB,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"project-walk.d.ts","sourceRoot":"","sources":["../src/project-walk.ts"],"names":[],"mappings":"AAOA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,eAAO,MAAM,kBAAkB,eAAe,CAAA;AAI9C,eAAO,MAAM,mBAAmB,aAAoC,CAAA;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;CAClC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAQhF;AAED;0BAC0B;AAC1B,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B9C;AAED,wFAAwF;AACxF,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF"}
|
package/dist/project-walk.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Directory walking with git semantics, shared by pack/sync (dependency-layout resolution) and
|
|
3
3
|
* install (rename adoption): each directory's `.gitignore` governs its own subtree, an ignored
|
|
4
|
-
* directory is pruned without entering it, and `.git`/`node_modules
|
|
4
|
+
* directory is pruned without entering it, and `.git`/`node_modules` never count.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'fs/promises';
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import ignore from 'ignore';
|
|
9
9
|
export const GITIGNORE_FILENAME = '.gitignore';
|
|
10
|
-
// Directories that never belong in a published asset — VCS
|
|
11
|
-
// dependencies
|
|
12
|
-
|
|
13
|
-
export const ALWAYS_IGNORED_DIRS = new Set(['.git', 'node_modules', '.drawcall']);
|
|
10
|
+
// Directories that never belong in a published asset — VCS metadata and reinstallable
|
|
11
|
+
// dependencies. Excluded structurally in every walk, regardless of any `.gitignore`.
|
|
12
|
+
export const ALWAYS_IGNORED_DIRS = new Set(['.git', 'node_modules']);
|
|
14
13
|
export function isGitignored(name, matchers) {
|
|
15
14
|
// Directory candidates carry a trailing slash; the `ignore` lib matches directory patterns
|
|
16
15
|
// (`dist/`) against exactly that form, so the path is passed through unchanged.
|
package/dist/project-walk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-walk.js","sourceRoot":"","sources":["../src/project-walk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAE9C,
|
|
1
|
+
{"version":3,"file":"project-walk.js","sourceRoot":"","sources":["../src/project-walk.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drawcall/market",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/drawcall-ai/market",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"market": "./dist/cli.js"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
|
-
"build": "tsc",
|
|
30
|
+
"build": "rm -rf dist && tsc",
|
|
31
31
|
"prepack": "npm run build && node scripts/prepare-publish.mjs",
|
|
32
32
|
"dev": "tsx src/cli.ts",
|
|
33
33
|
"test": "tsx --test tests/*.test.ts",
|
package/src/install-lock.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto'
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto'
|
|
2
2
|
import * as fs from 'node:fs/promises'
|
|
3
|
-
import { hostname } from 'node:os'
|
|
3
|
+
import { hostname, tmpdir } from 'node:os'
|
|
4
4
|
import * as path from 'node:path'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* The install mutex is per-machine (staleness is judged by pid + hostname), so it lives in the OS
|
|
8
|
+
* temp dir keyed by the project root — never inside the project, where it could leak into packs
|
|
9
|
+
* or version control.
|
|
10
|
+
*/
|
|
11
|
+
export function projectInstallLockPath(projectRoot: string): string {
|
|
12
|
+
const key = createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 16)
|
|
13
|
+
return path.join(tmpdir(), `drawcall-market-install-${key}.lock`)
|
|
14
|
+
}
|
|
7
15
|
|
|
8
16
|
const OWNER_FILE = 'owner.json'
|
|
9
17
|
const DEFAULT_TIMEOUT_MS = 30_000
|
|
@@ -35,7 +43,7 @@ export async function withProjectInstallLock<T>(
|
|
|
35
43
|
task: () => Promise<T>,
|
|
36
44
|
options: ProjectInstallLockOptions = {},
|
|
37
45
|
): Promise<T> {
|
|
38
|
-
const lockPath =
|
|
46
|
+
const lockPath = projectInstallLockPath(projectRoot)
|
|
39
47
|
const owner = await acquireLock(lockPath, options)
|
|
40
48
|
|
|
41
49
|
try {
|
package/src/project-walk.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Directory walking with git semantics, shared by pack/sync (dependency-layout resolution) and
|
|
3
3
|
* install (rename adoption): each directory's `.gitignore` governs its own subtree, an ignored
|
|
4
|
-
* directory is pruned without entering it, and `.git`/`node_modules
|
|
4
|
+
* directory is pruned without entering it, and `.git`/`node_modules` never count.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'fs/promises'
|
|
7
7
|
import * as path from 'path'
|
|
@@ -9,10 +9,9 @@ import ignore from 'ignore'
|
|
|
9
9
|
|
|
10
10
|
export const GITIGNORE_FILENAME = '.gitignore'
|
|
11
11
|
|
|
12
|
-
// Directories that never belong in a published asset — VCS
|
|
13
|
-
// dependencies
|
|
14
|
-
|
|
15
|
-
export const ALWAYS_IGNORED_DIRS = new Set(['.git', 'node_modules', '.drawcall'])
|
|
12
|
+
// Directories that never belong in a published asset — VCS metadata and reinstallable
|
|
13
|
+
// dependencies. Excluded structurally in every walk, regardless of any `.gitignore`.
|
|
14
|
+
export const ALWAYS_IGNORED_DIRS = new Set(['.git', 'node_modules'])
|
|
16
15
|
|
|
17
16
|
export interface GitignoreMatcher {
|
|
18
17
|
/** Directory the `.gitignore` governs: '' for the root, or e.g. 'sub/'. */
|