@volter/live 0.5.211 → 0.5.213
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/BUNDLED_NOTICES +13 -13
- package/README.md +10 -11
- package/dist/asset-library.d.ts +98 -0
- package/dist/asset-library.js +7 -0
- package/dist/asset-library.js.map +7 -0
- package/dist/chunk-7WKVJGHZ.js +15 -0
- package/dist/chunk-7WKVJGHZ.js.map +7 -0
- package/dist/chunk-B2HUWFTT.js +25 -0
- package/dist/chunk-B2HUWFTT.js.map +7 -0
- package/dist/chunk-IZJOOON2.js +805 -0
- package/dist/chunk-IZJOOON2.js.map +7 -0
- package/dist/chunk-JDOIPALX.js +158 -0
- package/dist/chunk-JDOIPALX.js.map +7 -0
- package/dist/chunk-JFAHP5CC.js +218 -0
- package/dist/chunk-JFAHP5CC.js.map +7 -0
- package/dist/chunk-PC56TDHV.js +189 -0
- package/dist/chunk-PC56TDHV.js.map +7 -0
- package/dist/chunk-WIAH4XZE.js +82 -0
- package/dist/chunk-WIAH4XZE.js.map +7 -0
- package/dist/client.d.ts +376 -0
- package/dist/client.js +10 -0
- package/dist/client.js.map +7 -0
- package/dist/discovery.d.ts +32 -0
- package/dist/discovery.js +19 -0
- package/dist/discovery.js.map +7 -0
- package/dist/editor-document.d.ts +12 -47
- package/dist/editor.d.ts +45 -183
- package/dist/http-transport.d.ts +6 -0
- package/dist/index.d.ts +3 -6
- package/dist/index.js +83 -1762
- package/dist/index.js.map +4 -4
- package/dist/installed-package.d.ts +6 -0
- package/dist/installed-package.js +7 -0
- package/dist/installed-package.js.map +7 -0
- package/dist/lazy-proxy.d.ts +11 -11
- package/dist/member-hints.d.ts +6 -9
- package/dist/product-create.d.ts +29 -0
- package/dist/product-create.js +13 -0
- package/dist/product-create.js.map +7 -0
- package/dist/product-locator.d.ts +100 -0
- package/dist/product-locator.js +25 -0
- package/dist/product-locator.js.map +7 -0
- package/dist/registry-format.d.ts +72 -0
- package/dist/registry-format.js +31 -0
- package/dist/registry-format.js.map +7 -0
- package/dist/session.d.ts +11 -15
- package/dist/singleton.d.ts +1 -13
- package/dist/volter-manifest.d.ts +55 -0
- package/dist/volter-manifest.js +9 -0
- package/dist/volter-manifest.js.map +7 -0
- package/dist/workbench-locator.d.ts +84 -0
- package/dist/workbench-locator.js +416 -0
- package/dist/workbench-locator.js.map +7 -0
- package/package.json +39 -3
- package/src/asset-library.ts +104 -0
- package/src/client.ts +1093 -0
- package/src/discovery.ts +105 -0
- package/src/editor-document.ts +12 -49
- package/src/editor.ts +56 -215
- package/src/http-transport.ts +19 -0
- package/src/index.ts +5 -8
- package/src/installed-package.ts +15 -0
- package/src/lazy-proxy.ts +11 -11
- package/src/member-hints.ts +8 -12
- package/src/product-create.ts +38 -0
- package/src/product-locator.ts +327 -0
- package/src/registry-format.ts +248 -0
- package/src/session.ts +36 -144
- package/src/singleton.ts +1 -16
- package/src/volter-manifest.ts +97 -0
- package/src/workbench-locator.ts +625 -0
- package/dist/tools.d.ts +0 -23
- package/src/tools.ts +0 -45
package/BUNDLED_NOTICES
CHANGED
|
@@ -3,9 +3,9 @@ Bundled license notices
|
|
|
3
3
|
These notices accompany code incorporated into this package. Separate npm dependencies retain their own licenses.
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
@volter/project@0.5.
|
|
6
|
+
@volter/project@0.5.213
|
|
7
7
|
Declared license: Apache-2.0
|
|
8
|
-
Source: the unmodified npm package @volter/project@0.5.
|
|
8
|
+
Source: the unmodified npm package @volter/project@0.5.213, from https://github.com/volter-ai/editor.git
|
|
9
9
|
|
|
10
10
|
--- packages/project/LICENSE ---
|
|
11
11
|
|
|
@@ -219,13 +219,13 @@ Copyright 2026 Volter AI, Inc.
|
|
|
219
219
|
|
|
220
220
|
The project contract was transferred from the Apache-2.0 packages of
|
|
221
221
|
volter-ai/volter-engine and is developed in the public volter-ai/editor
|
|
222
|
-
repository. Original source
|
|
223
|
-
|
|
222
|
+
repository. Original source revision:
|
|
223
|
+
cf9cb8e22dd7ae5709ed0dd8a46dd6f16d1e4945. LICENSE contains the Apache-2.0 text.
|
|
224
224
|
|
|
225
225
|
|
|
226
|
-
@volter/sdk@0.5.
|
|
226
|
+
@volter/sdk@0.5.213
|
|
227
227
|
Declared license: Apache-2.0
|
|
228
|
-
Source: the unmodified npm package @volter/sdk@0.5.
|
|
228
|
+
Source: the unmodified npm package @volter/sdk@0.5.213, from https://github.com/volter-ai/editor.git
|
|
229
229
|
|
|
230
230
|
--- packages/sdk/LICENSE ---
|
|
231
231
|
|
|
@@ -438,16 +438,16 @@ Source: the unmodified npm package @volter/sdk@0.5.211, from https://github.com/
|
|
|
438
438
|
Copyright 2026 Volter AI, Inc.
|
|
439
439
|
|
|
440
440
|
Project tool registry, provider execution and related types were transferred
|
|
441
|
-
from the Apache-2.0 SDK package of volter-ai/volter-engine.
|
|
442
|
-
|
|
443
|
-
recorded in provenance/editor-server.json.
|
|
441
|
+
from the Apache-2.0 SDK package of volter-ai/volter-engine. The original source
|
|
442
|
+
revision is cf9cb8e22dd7ae5709ed0dd8a46dd6f16d1e4945.
|
|
444
443
|
|
|
445
444
|
The project output-root policy is Apache-2.0, transferred from the original
|
|
446
|
-
SDK
|
|
445
|
+
SDK at revision cf9cb8e22dd7ae5709ed0dd8a46dd6f16d1e4945.
|
|
447
446
|
|
|
448
|
-
|
|
449
|
-
@volter/editor-core's src/ (commits 818f6de1,
|
|
450
|
-
the moves after them, all in this repository),
|
|
447
|
+
The modules integrations share, which sat in src/kit/ and now sit directly
|
|
448
|
+
under src/, were moved here from @volter/editor-core's src/ (commits 818f6de1,
|
|
449
|
+
94a374b7, 98b22ef6, cb5c1539 and the moves after them, all in this repository),
|
|
450
|
+
where they carried
|
|
451
451
|
AGPL-3.0-only as part of the editor package imported from
|
|
452
452
|
volter-ai/volter-engine. They are Volter AI, Inc.'s own work and are licensed
|
|
453
453
|
under Apache-2.0 here. The owner's words are "the runtime should be apache,
|
package/README.md
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
# Live client
|
|
2
2
|
|
|
3
|
-
Attach to an existing editor session and drive its documents,
|
|
4
|
-
inspection, history and registered project tools. This package never
|
|
5
|
-
session or runs
|
|
3
|
+
Attach to an existing editor session and drive its documents, contributed
|
|
4
|
+
verbs, inspection, history and registered project tools. This package never
|
|
5
|
+
starts a session or runs an integration outside the editor tab.
|
|
6
6
|
|
|
7
7
|
```js
|
|
8
8
|
import { connect } from '@volter/live';
|
|
9
9
|
const { editor } = await connect('/path/to/project');
|
|
10
|
-
await editor.
|
|
10
|
+
await editor.contributedVerb('<package>-status');
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Connection selection matches the project's canonical path and refuses a missing
|
|
14
|
-
or mismatched session.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
with them. See the repository WORK.md for the remaining release gates.
|
|
14
|
+
or mismatched session. A session answers only requests that carry its connection
|
|
15
|
+
token, which this package reads from the session's entry in the owner's session
|
|
16
|
+
registry (`~/.volter/editor-sessions.json`); a script's own request to a session
|
|
17
|
+
goes through `sessionFetch` from `@volter/live/registry-format`, which adds it. Runtime JavaScript is bundled for Node; source and
|
|
18
|
+
declarations ship beside it. The running document's registered commands remain
|
|
19
|
+
the authority for the operations an integration exposes.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE ASSET LIBRARY, as the session's `/__editor/asset-library/*` routes answer it (editor-core's
|
|
3
|
+
* `server/asset-library-routes.ts`, which takes these shapes from here): search a source, list an asset's files, and
|
|
4
|
+
* download one into the project. `editor.assetLibrary` reaches it through `EditorClient`, so a request carries the
|
|
5
|
+
* session's connection token as every other one does.
|
|
6
|
+
*/
|
|
7
|
+
import type { EditorClient } from './client.js';
|
|
8
|
+
/** An asset as a search answers it. */
|
|
9
|
+
export interface OnlineAsset {
|
|
10
|
+
id: string;
|
|
11
|
+
source: 'polyhaven' | 'ambientcg' | 'local';
|
|
12
|
+
name: string;
|
|
13
|
+
type: 'model' | 'animation' | 'source' | 'hdri' | 'texture' | 'material';
|
|
14
|
+
thumbnailUrl: string;
|
|
15
|
+
categories: string[];
|
|
16
|
+
tags: string[];
|
|
17
|
+
downloadCount?: number;
|
|
18
|
+
license?: string;
|
|
19
|
+
author?: string;
|
|
20
|
+
sourceUrl?: string;
|
|
21
|
+
cloudHosted?: boolean;
|
|
22
|
+
variantId?: string;
|
|
23
|
+
variantCount?: number;
|
|
24
|
+
sizeBytes?: number;
|
|
25
|
+
animationCount?: number;
|
|
26
|
+
deliveryKinds?: ('local-ssd' | 'cloud' | 'remote')[];
|
|
27
|
+
addedAt?: string;
|
|
28
|
+
capabilities?: {
|
|
29
|
+
previewable: boolean;
|
|
30
|
+
importable: boolean;
|
|
31
|
+
runtimeReady: boolean;
|
|
32
|
+
animated: boolean;
|
|
33
|
+
deliveryAvailable: boolean;
|
|
34
|
+
health: 'healthy' | 'source-only' | 'unsupported';
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** One file of an asset that can be downloaded (`files`); `download` takes it with the asset. */
|
|
38
|
+
export interface AssetFileOption {
|
|
39
|
+
label: string;
|
|
40
|
+
format: string;
|
|
41
|
+
url: string;
|
|
42
|
+
sizeBytes?: number;
|
|
43
|
+
/** Additional files that must be downloaded alongside the main URL (GLTF includes). */
|
|
44
|
+
includes?: {
|
|
45
|
+
relativePath: string;
|
|
46
|
+
url: string;
|
|
47
|
+
size: number;
|
|
48
|
+
}[];
|
|
49
|
+
}
|
|
50
|
+
/** `GET /search`'s query. `type` is the kind the source names (`model`, `hdri`, …; `all` in the local catalog). */
|
|
51
|
+
export interface AssetSearchQuery {
|
|
52
|
+
source: OnlineAsset['source'];
|
|
53
|
+
type: string;
|
|
54
|
+
q?: string;
|
|
55
|
+
category?: string;
|
|
56
|
+
offset?: number;
|
|
57
|
+
limit?: number;
|
|
58
|
+
}
|
|
59
|
+
/** `POST /download`'s body: the asset and the file `files` offered for it. `license` is the search result's, which the
|
|
60
|
+
* route records for a remote source; the local catalog's own license is recorded whatever is passed. */
|
|
61
|
+
export interface AssetDownloadRequest {
|
|
62
|
+
source: OnlineAsset['source'];
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
url: string;
|
|
66
|
+
format: string;
|
|
67
|
+
includes?: AssetFileOption['includes'];
|
|
68
|
+
license?: string;
|
|
69
|
+
}
|
|
70
|
+
/** What a download answers: the file's path under the project's `public/`, the provenance operation that wrote it, and
|
|
71
|
+
* `ledgerError` when the asset and its license could not be recorded in `.volter/assets.json`. */
|
|
72
|
+
export interface AssetDownloadResult {
|
|
73
|
+
ok: true;
|
|
74
|
+
path: string;
|
|
75
|
+
provenanceOperationId?: string;
|
|
76
|
+
ledgerError?: string;
|
|
77
|
+
alreadyExists?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** `editor.assetLibrary`: the routes, one call each. */
|
|
80
|
+
export declare class LiveAssetLibrary {
|
|
81
|
+
#private;
|
|
82
|
+
constructor(client: EditorClient);
|
|
83
|
+
/** Search one source: `{ assets, total }`, each asset with its tags, license, author and source address. */
|
|
84
|
+
search(query: AssetSearchQuery): Promise<{
|
|
85
|
+
assets: OnlineAsset[];
|
|
86
|
+
total: number;
|
|
87
|
+
}>;
|
|
88
|
+
/** The files an asset can be downloaded as. */
|
|
89
|
+
files(asset: {
|
|
90
|
+
source: OnlineAsset['source'];
|
|
91
|
+
id: string;
|
|
92
|
+
}): Promise<{
|
|
93
|
+
files: AssetFileOption[];
|
|
94
|
+
}>;
|
|
95
|
+
/** Download one file of an asset into the project's `public/asset-library/`, recording the asset and its license in
|
|
96
|
+
* the project's `.volter/assets.json`. */
|
|
97
|
+
download(request: AssetDownloadRequest): Promise<AssetDownloadResult>;
|
|
98
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// src/installed-package.ts
|
|
2
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
function installedPackageDir(fromDir, name) {
|
|
5
|
+
for (let dir = fromDir; ; dir = dirname(dir)) {
|
|
6
|
+
const candidate = join(dir, "node_modules", ...name.split("/"));
|
|
7
|
+
if (existsSync(join(candidate, "package.json"))) return realpathSync(candidate);
|
|
8
|
+
if (dirname(dir) === dir) return null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
installedPackageDir
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chunk-7WKVJGHZ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/installed-package.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, realpathSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\n/**\n * The real directory of installed package `name` as Node finds it from `fromDir`: up the `node_modules` folders, or\n * null when none holds it. It is found by its folder rather than by resolving `<name>/package.json`, which fails for a\n * package whose `exports` does not list that file (`@volter/sdk`).\n */\nexport function installedPackageDir(fromDir: string, name: string): string | null {\n for (let dir = fromDir; ; dir = dirname(dir)) {\n const candidate = join(dir, 'node_modules', ...name.split('/'));\n if (existsSync(join(candidate, 'package.json'))) return realpathSync(candidate);\n if (dirname(dir) === dir) return null;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,YAAY,oBAAoB;AACzC,SAAS,SAAS,YAAY;AAOvB,SAAS,oBAAoB,SAAiB,MAA6B;AAChF,WAAS,MAAM,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC5C,UAAM,YAAY,KAAK,KAAK,gBAAgB,GAAG,KAAK,MAAM,GAAG,CAAC;AAC9D,QAAI,WAAW,KAAK,WAAW,cAAc,CAAC,EAAG,QAAO,aAAa,SAAS;AAC9E,QAAI,QAAQ,GAAG,MAAM,IAAK,QAAO;AAAA,EACnC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/asset-library.ts
|
|
2
|
+
var LiveAssetLibrary = class {
|
|
3
|
+
#client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.#client = client;
|
|
6
|
+
}
|
|
7
|
+
/** Search one source: `{ assets, total }`, each asset with its tags, license, author and source address. */
|
|
8
|
+
async search(query) {
|
|
9
|
+
return this.#client.assetLibraryRequest("GET", "search", query);
|
|
10
|
+
}
|
|
11
|
+
/** The files an asset can be downloaded as. */
|
|
12
|
+
async files(asset) {
|
|
13
|
+
return this.#client.assetLibraryRequest("GET", "files", asset);
|
|
14
|
+
}
|
|
15
|
+
/** Download one file of an asset into the project's `public/asset-library/`, recording the asset and its license in
|
|
16
|
+
* the project's `.volter/assets.json`. */
|
|
17
|
+
async download(request) {
|
|
18
|
+
return this.#client.assetLibraryRequest("POST", "download", request);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
LiveAssetLibrary
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-B2HUWFTT.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/asset-library.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * THE ASSET LIBRARY, as the session's `/__editor/asset-library/*` routes answer it (editor-core's\n * `server/asset-library-routes.ts`, which takes these shapes from here): search a source, list an asset's files, and\n * download one into the project. `editor.assetLibrary` reaches it through `EditorClient`, so a request carries the\n * session's connection token as every other one does.\n */\nimport type { EditorClient } from './client.js';\n\n/** An asset as a search answers it. */\nexport interface OnlineAsset {\n id: string;\n source: 'polyhaven' | 'ambientcg' | 'local';\n name: string;\n type: 'model' | 'animation' | 'source' | 'hdri' | 'texture' | 'material';\n thumbnailUrl: string;\n categories: string[];\n tags: string[];\n downloadCount?: number;\n license?: string;\n author?: string;\n sourceUrl?: string;\n cloudHosted?: boolean;\n variantId?: string;\n variantCount?: number;\n sizeBytes?: number;\n animationCount?: number;\n deliveryKinds?: ('local-ssd' | 'cloud' | 'remote')[];\n addedAt?: string;\n capabilities?: {\n previewable: boolean;\n importable: boolean;\n runtimeReady: boolean;\n animated: boolean;\n deliveryAvailable: boolean;\n health: 'healthy' | 'source-only' | 'unsupported';\n };\n}\n\n/** One file of an asset that can be downloaded (`files`); `download` takes it with the asset. */\nexport interface AssetFileOption {\n label: string;\n format: string;\n url: string;\n sizeBytes?: number;\n /** Additional files that must be downloaded alongside the main URL (GLTF includes). */\n includes?: { relativePath: string; url: string; size: number }[];\n}\n\n/** `GET /search`'s query. `type` is the kind the source names (`model`, `hdri`, \u2026; `all` in the local catalog). */\nexport interface AssetSearchQuery {\n source: OnlineAsset['source'];\n type: string;\n q?: string;\n category?: string;\n offset?: number;\n limit?: number;\n}\n\n/** `POST /download`'s body: the asset and the file `files` offered for it. `license` is the search result's, which the\n * route records for a remote source; the local catalog's own license is recorded whatever is passed. */\nexport interface AssetDownloadRequest {\n source: OnlineAsset['source'];\n id: string;\n name: string;\n url: string;\n format: string;\n includes?: AssetFileOption['includes'];\n license?: string;\n}\n\n/** What a download answers: the file's path under the project's `public/`, the provenance operation that wrote it, and\n * `ledgerError` when the asset and its license could not be recorded in `.volter/assets.json`. */\nexport interface AssetDownloadResult {\n ok: true;\n path: string;\n provenanceOperationId?: string;\n ledgerError?: string;\n alreadyExists?: boolean;\n}\n\n/** `editor.assetLibrary`: the routes, one call each. */\nexport class LiveAssetLibrary {\n readonly #client: EditorClient;\n\n constructor(client: EditorClient) {\n this.#client = client;\n }\n\n /** Search one source: `{ assets, total }`, each asset with its tags, license, author and source address. */\n async search(query: AssetSearchQuery): Promise<{ assets: OnlineAsset[]; total: number }> {\n return this.#client.assetLibraryRequest('GET', 'search', query);\n }\n\n /** The files an asset can be downloaded as. */\n async files(asset: { source: OnlineAsset['source']; id: string }): Promise<{ files: AssetFileOption[] }> {\n return this.#client.assetLibraryRequest('GET', 'files', asset);\n }\n\n /** Download one file of an asset into the project's `public/asset-library/`, recording the asset and its license in\n * the project's `.volter/assets.json`. */\n async download(request: AssetDownloadRequest): Promise<AssetDownloadResult> {\n return this.#client.assetLibraryRequest('POST', 'download', request);\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAiFO,IAAM,mBAAN,MAAuB;AAAA,EACnB;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,MAAM,OAAO,OAA4E;AACvF,WAAO,KAAK,QAAQ,oBAAoB,OAAO,UAAU,KAAK;AAAA,EAChE;AAAA;AAAA,EAGA,MAAM,MAAM,OAA6F;AACvG,WAAO,KAAK,QAAQ,oBAAoB,OAAO,SAAS,KAAK;AAAA,EAC/D;AAAA;AAAA;AAAA,EAIA,MAAM,SAAS,SAA6D;AAC1E,WAAO,KAAK,QAAQ,oBAAoB,QAAQ,YAAY,OAAO;AAAA,EACrE;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|