@hypersoniclabs/helix-cli 0.1.0
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 +61 -0
- package/dist/ability.d.ts +73 -0
- package/dist/ability.js +120 -0
- package/dist/ability.js.map +1 -0
- package/dist/api.d.ts +24 -0
- package/dist/api.js +83 -0
- package/dist/api.js.map +1 -0
- package/dist/bundle.d.ts +12 -0
- package/dist/bundle.js +75 -0
- package/dist/bundle.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.js +62 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +274 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +87 -0
- package/dist/init.js.map +1 -0
- package/dist/initAbility.d.ts +1 -0
- package/dist/initAbility.js +71 -0
- package/dist/initAbility.js.map +1 -0
- package/dist/install.d.ts +51 -0
- package/dist/install.js +201 -0
- package/dist/install.js.map +1 -0
- package/dist/lib.d.ts +82 -0
- package/dist/lib.js +258 -0
- package/dist/lib.js.map +1 -0
- package/dist/package.d.ts +11 -0
- package/dist/package.js +136 -0
- package/dist/package.js.map +1 -0
- package/dist/prompt.d.ts +2 -0
- package/dist/prompt.js +55 -0
- package/dist/prompt.js.map +1 -0
- package/dist/resolve.d.ts +57 -0
- package/dist/resolve.js +103 -0
- package/dist/resolve.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +48 -0
- package/vendor/ability-manifest.mjs +558 -0
- package/vendor/installed-index.mjs +71 -0
package/dist/install.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RUNTIME_MODULE = exports.LOCKFILE = exports.INSTALLED_INDEX = exports.MODULES_DIR = void 0;
|
|
4
|
+
exports.installWorld = installWorld;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const ability_1 = require("./ability");
|
|
8
|
+
const resolve_1 = require("./resolve");
|
|
9
|
+
// `helix install` for a v0.2 world (consumer-plan decisions #2/#4/#8). Resolves the helix.json
|
|
10
|
+
// system/ability pins to exact versions, downloads CODE ONLY into public/helix_modules/<slug>/
|
|
11
|
+
// (assets always stream from the CDN — §11), and writes the v2 installed.json the runtime loader
|
|
12
|
+
// reads. The full resolution is locked in helix.lock.json: a bare re-run replays the lock (never
|
|
13
|
+
// re-resolves), `--update` re-resolves the live catalog and rewrites the lock.
|
|
14
|
+
exports.MODULES_DIR = 'helix_modules';
|
|
15
|
+
exports.INSTALLED_INDEX = 'installed.json';
|
|
16
|
+
exports.LOCKFILE = 'helix.lock.json';
|
|
17
|
+
exports.RUNTIME_MODULE = 'helix.runtime.ts'; // generated under src/
|
|
18
|
+
// The import map between these markers in index.html is (re)written by install with the resolved
|
|
19
|
+
// platform runtime URL, so the world's bare `three` resolves to the single hosted instance.
|
|
20
|
+
const IMPORTMAP_BLOCK = /(<!--\s*helix:three:start\s*-->)[\s\S]*?(<!--\s*helix:three:end\s*-->)/;
|
|
21
|
+
// Belt-and-suspenders: the server already splits code from assets, but a code channel must never
|
|
22
|
+
// carry a clip/texture/sound — that would put a HELIX asset on the consumer's disk.
|
|
23
|
+
const ASSET_EXT = /\.(glb|gltf|bin|ktx2|png|jpe?g|webp|mp3|ogg|wav)$/i;
|
|
24
|
+
const WORLD_MANIFEST_LOCATIONS = ['helix.json', (0, node_path_1.join)('public', 'helix.json')];
|
|
25
|
+
function readWorldManifest(worldDir) {
|
|
26
|
+
const manifestPath = WORLD_MANIFEST_LOCATIONS.map((rel) => (0, node_path_1.join)(worldDir, rel)).find((p) => (0, node_fs_1.existsSync)(p));
|
|
27
|
+
if (!manifestPath) {
|
|
28
|
+
throw new Error(`no helix.json found (looked in ./ and ./public/) — run \`helix install\` from a world project, or \`helix install <bundle> --first-party\` for a local ability`);
|
|
29
|
+
}
|
|
30
|
+
let manifest;
|
|
31
|
+
try {
|
|
32
|
+
manifest = JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8'));
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new Error(`${manifestPath} is not valid JSON: ${err instanceof Error ? err.message : err}`);
|
|
36
|
+
}
|
|
37
|
+
if (manifest.helixVersion !== '0.2') {
|
|
38
|
+
throw new Error(`helix install resolves v0.2 pins, but ${manifestPath} is helixVersion "${manifest.helixVersion ?? '0.1'}" — add "helixVersion": "0.2" and "systems"/"abilities" maps`);
|
|
39
|
+
}
|
|
40
|
+
return { manifestPath, pins: { systems: manifest.systems ?? {}, abilities: manifest.abilities ?? {} } };
|
|
41
|
+
}
|
|
42
|
+
// A bare re-run must replay the existing lock verbatim; it may only do so when helix.json hasn't
|
|
43
|
+
// drifted. Any added/removed pin, a changed range, or an out-of-range locked version means the
|
|
44
|
+
// lock is stale and the user must opt into re-resolving with --update.
|
|
45
|
+
function verifyLockMatchesPins(lock, pins, satisfies) {
|
|
46
|
+
const want = new Map();
|
|
47
|
+
for (const [slug, range] of Object.entries(pins.systems ?? {}))
|
|
48
|
+
want.set(slug, range);
|
|
49
|
+
for (const [slug, range] of Object.entries(pins.abilities ?? {}))
|
|
50
|
+
want.set(slug, range);
|
|
51
|
+
const have = new Map([...lock.systems, ...lock.abilities].map((p) => [p.slug, p]));
|
|
52
|
+
const drift = [];
|
|
53
|
+
for (const [slug, range] of want) {
|
|
54
|
+
const locked = have.get(slug);
|
|
55
|
+
if (!locked)
|
|
56
|
+
drift.push(`${slug} is newly pinned (${range})`);
|
|
57
|
+
else if (locked.range !== range)
|
|
58
|
+
drift.push(`${slug} pinned ${range}, lock has ${locked.range}`);
|
|
59
|
+
else if (!satisfies(locked.version, (0, resolve_1.normalizePinRange)(range)))
|
|
60
|
+
drift.push(`${slug}@${locked.version} no longer satisfies ${range}`);
|
|
61
|
+
}
|
|
62
|
+
for (const slug of have.keys())
|
|
63
|
+
if (!want.has(slug))
|
|
64
|
+
drift.push(`${slug} is in the lock but no longer pinned`);
|
|
65
|
+
if (drift.length) {
|
|
66
|
+
throw new Error(`helix.json pins differ from ${exports.LOCKFILE} — run \`helix install --update\` to re-resolve:\n${drift.map((d) => ` - ${d}`).join('\n')}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function assertCodeOnly(pkg) {
|
|
70
|
+
const leaked = pkg.codeFiles.filter((f) => ASSET_EXT.test(f));
|
|
71
|
+
if (leaked.length) {
|
|
72
|
+
throw new Error(`refusing to install ${pkg.slug}: asset files in its code channel (assets must stream from the CDN): ${leaked.join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function defaultDownload(codeBaseUrl, files, destDir) {
|
|
76
|
+
const base = codeBaseUrl.replace(/\/+$/, '');
|
|
77
|
+
for (const rel of files) {
|
|
78
|
+
const res = await fetch(`${base}/${rel}`);
|
|
79
|
+
if (!res.ok)
|
|
80
|
+
throw new Error(`could not download ${rel} from ${base} (${res.status} ${res.statusText})`);
|
|
81
|
+
const dest = (0, node_path_1.join)(destDir, rel);
|
|
82
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(dest), { recursive: true });
|
|
83
|
+
(0, node_fs_1.writeFileSync)(dest, Buffer.from(await res.arrayBuffer()));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// The platform CDN base is the resolved code URL up to /packages/ — the hosted runtime lives at
|
|
87
|
+
// <base>/runtime/ on the same CDN. Deriving it from a real resolved URL means install never needs
|
|
88
|
+
// the base hardcoded or a separate endpoint.
|
|
89
|
+
function cdnRootFrom(url) {
|
|
90
|
+
const i = url.indexOf('/packages/');
|
|
91
|
+
return i > 0 ? url.slice(0, i) : null;
|
|
92
|
+
}
|
|
93
|
+
// Point the world at the single hosted three: rewrite index.html's import map and (re)generate
|
|
94
|
+
// src/helix.runtime.ts (the three module URL, KTX2 transcoder path, and the system's CDN asset
|
|
95
|
+
// base) for main.ts to import. Returns null when no system is pinned (nothing imports three by version).
|
|
96
|
+
function wireRuntime(worldDir, resolution, onProgress) {
|
|
97
|
+
const system = resolution.systems.find((s) => s.three);
|
|
98
|
+
if (!system || !system.three)
|
|
99
|
+
return null;
|
|
100
|
+
const cdnRoot = cdnRootFrom(system.codeUrl);
|
|
101
|
+
if (!cdnRoot)
|
|
102
|
+
throw new Error(`cannot derive the platform CDN base from "${system.codeUrl}" (expected a /packages/ path)`);
|
|
103
|
+
const threeVersion = system.three;
|
|
104
|
+
const threeModuleUrl = `${cdnRoot}/runtime/three/${threeVersion}/three.module.js`;
|
|
105
|
+
const transcoderPath = `${cdnRoot}/runtime/basis/three-${threeVersion}/`;
|
|
106
|
+
const htmlPath = (0, node_path_1.join)(worldDir, 'index.html');
|
|
107
|
+
if ((0, node_fs_1.existsSync)(htmlPath)) {
|
|
108
|
+
const html = (0, node_fs_1.readFileSync)(htmlPath, 'utf8');
|
|
109
|
+
if (IMPORTMAP_BLOCK.test(html)) {
|
|
110
|
+
const block = `$1\n <script type="importmap">\n { "imports": { "three": "${threeModuleUrl}" } }\n </script>\n $2`;
|
|
111
|
+
(0, node_fs_1.writeFileSync)(htmlPath, html.replace(IMPORTMAP_BLOCK, block));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
onProgress('! index.html has no <!-- helix:three:start/end --> markers — import map not written');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const runtimeTs = [
|
|
118
|
+
'// GENERATED by `helix install` — do not edit; re-run install to update.',
|
|
119
|
+
`export const THREE_VERSION = ${JSON.stringify(threeVersion)};`,
|
|
120
|
+
`export const THREE_MODULE_URL = ${JSON.stringify(threeModuleUrl)};`,
|
|
121
|
+
`export const TRANSCODER_PATH = ${JSON.stringify(transcoderPath)};`,
|
|
122
|
+
`export const SYSTEM_ASSET_BASE = ${JSON.stringify(system.assetBaseUrl ?? '')};`,
|
|
123
|
+
'',
|
|
124
|
+
].join('\n');
|
|
125
|
+
const srcDir = (0, node_path_1.join)(worldDir, 'src');
|
|
126
|
+
(0, node_fs_1.mkdirSync)(srcDir, { recursive: true });
|
|
127
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(srcDir, exports.RUNTIME_MODULE), runtimeTs);
|
|
128
|
+
return { threeVersion, threeModuleUrl, transcoderPath };
|
|
129
|
+
}
|
|
130
|
+
async function defaultDeps(apiUrl) {
|
|
131
|
+
const validator = await (0, ability_1.loadVendoredValidator)();
|
|
132
|
+
const indexValidator = await (0, ability_1.loadInstalledIndexValidator)();
|
|
133
|
+
if (!validator.satisfiesSystemPin)
|
|
134
|
+
throw new Error('vendored validator is missing satisfiesSystemPin — re-vendor ability-manifest.mjs');
|
|
135
|
+
const satisfies = validator.satisfiesSystemPin;
|
|
136
|
+
return {
|
|
137
|
+
resolve: (pins) => (0, resolve_1.resolvePins)(apiUrl, pins),
|
|
138
|
+
download: defaultDownload,
|
|
139
|
+
satisfies,
|
|
140
|
+
validateIndex: (value) => indexValidator.validateInstalledIndex(value),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async function installWorld(worldDir, opts) {
|
|
144
|
+
const onProgress = opts.onProgress ?? (() => undefined);
|
|
145
|
+
const deps = opts.deps ?? (await defaultDeps(opts.apiUrl));
|
|
146
|
+
const { manifestPath, pins } = readWorldManifest(worldDir);
|
|
147
|
+
const lockPath = (0, node_path_1.join)(worldDir, exports.LOCKFILE);
|
|
148
|
+
let resolution;
|
|
149
|
+
let reresolved;
|
|
150
|
+
if (!opts.update && (0, node_fs_1.existsSync)(lockPath)) {
|
|
151
|
+
const lock = JSON.parse((0, node_fs_1.readFileSync)(lockPath, 'utf8'));
|
|
152
|
+
verifyLockMatchesPins(lock, pins, deps.satisfies);
|
|
153
|
+
resolution = { systems: lock.systems, abilities: lock.abilities };
|
|
154
|
+
reresolved = false;
|
|
155
|
+
onProgress(`Replaying ${exports.LOCKFILE} (run with --update to re-resolve)`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
onProgress(opts.update ? 'Re-resolving pins against the live catalog' : 'Resolving pins');
|
|
159
|
+
resolution = await deps.resolve(pins);
|
|
160
|
+
const lock = { lockfileVersion: 1, systems: resolution.systems, abilities: resolution.abilities };
|
|
161
|
+
(0, node_fs_1.writeFileSync)(lockPath, `${JSON.stringify(lock, null, 2)}\n`);
|
|
162
|
+
reresolved = true;
|
|
163
|
+
}
|
|
164
|
+
const all = [...resolution.systems, ...resolution.abilities];
|
|
165
|
+
all.forEach(assertCodeOnly);
|
|
166
|
+
// Clean rebuild of the managed dir so a re-run is byte-deterministic (no orphaned stale code).
|
|
167
|
+
const modulesDir = (0, node_path_1.join)(worldDir, 'public', exports.MODULES_DIR);
|
|
168
|
+
(0, node_fs_1.rmSync)(modulesDir, { recursive: true, force: true });
|
|
169
|
+
(0, node_fs_1.mkdirSync)(modulesDir, { recursive: true });
|
|
170
|
+
for (const pkg of all) {
|
|
171
|
+
onProgress(`Downloading ${pkg.slug}@${pkg.version} (${pkg.codeFiles.length} code files)`);
|
|
172
|
+
await deps.download(pkg.codeUrl, pkg.codeFiles, (0, node_path_1.join)(modulesDir, pkg.slug));
|
|
173
|
+
}
|
|
174
|
+
// Only abilities go in installed.json — the system is build-time-embedded via the alias. codeUrl is
|
|
175
|
+
// the ability's dir RELATIVE to the index base (just the slug); the loader resolves it against the
|
|
176
|
+
// base the world passes (document-derived), so a published world works from any deployment sub-path
|
|
177
|
+
// — a root-absolute "/helix_modules/<id>" would 404 once the world isn't at the origin root. Clips
|
|
178
|
+
// stream from the CDN assetBaseUrl.
|
|
179
|
+
const entries = resolution.abilities
|
|
180
|
+
.map((ab) => {
|
|
181
|
+
if (!ab.assetBaseUrl)
|
|
182
|
+
throw new Error(`ability "${ab.slug}" has no CDN asset base — cannot write a v2 installed.json entry`);
|
|
183
|
+
return { id: ab.slug, version: ab.version, codeUrl: ab.slug, assetBaseUrl: ab.assetBaseUrl };
|
|
184
|
+
})
|
|
185
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
186
|
+
const issues = deps.validateIndex(entries);
|
|
187
|
+
if (issues.length) {
|
|
188
|
+
throw new Error(`generated installed.json failed validation:\n${issues.map((i) => ` ${i.path || '(root)'}: ${i.message}`).join('\n')}`);
|
|
189
|
+
}
|
|
190
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(modulesDir, exports.INSTALLED_INDEX), `${JSON.stringify(entries, null, 2)}\n`);
|
|
191
|
+
const runtime = wireRuntime(worldDir, resolution, onProgress);
|
|
192
|
+
return {
|
|
193
|
+
manifestPath,
|
|
194
|
+
modulesDir,
|
|
195
|
+
systems: resolution.systems.map((s) => ({ slug: s.slug, version: s.version })),
|
|
196
|
+
abilities: resolution.abilities.map((a) => ({ slug: a.slug, version: a.version })),
|
|
197
|
+
reresolved,
|
|
198
|
+
runtime,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { HelixApi } from './api';
|
|
2
|
+
import { CliCredentials } from './config';
|
|
3
|
+
export { ApiError, HelixApi, uploadToTicket } from './api';
|
|
4
|
+
export { checkBundle, type BundleCheck, type BundleFile } from './bundle';
|
|
5
|
+
export { checkPackageBundle, type PackageBundleCheck } from './package';
|
|
6
|
+
export { checkAbilityBundle, installLocalAbility, loadVendoredValidator, loadInstalledIndexValidator, type AbilityValidator, } from './ability';
|
|
7
|
+
export { normalizePinRange, resolvePins, type PinMap, type ResolveDeps, type ResolvedPackage, type ResolvedPins, type VersionDetail, type WorldPins, } from './resolve';
|
|
8
|
+
export { installWorld, INSTALLED_INDEX, LOCKFILE, MODULES_DIR, type InstalledEntry, type InstallDeps, type InstallWorldOptions, type InstallWorldResult, type WorldLock, } from './install';
|
|
9
|
+
export { DEFAULT_API_URL, loadCredentials, saveCredentials, clearCredentials, jwtExpiresAtIso, type CliCredentials, } from './config';
|
|
10
|
+
export { initTemplate } from './init';
|
|
11
|
+
export { initAbilityTemplate } from './initAbility';
|
|
12
|
+
export type PublishResult = {
|
|
13
|
+
slug: string;
|
|
14
|
+
title: string;
|
|
15
|
+
buildId: string;
|
|
16
|
+
buildNumber: number;
|
|
17
|
+
playUrl: string | null;
|
|
18
|
+
worldUrl: string;
|
|
19
|
+
};
|
|
20
|
+
export type PublishProgress = (message: string) => void;
|
|
21
|
+
type WorldSummary = {
|
|
22
|
+
id: string;
|
|
23
|
+
slug: string;
|
|
24
|
+
title: string;
|
|
25
|
+
status: string;
|
|
26
|
+
hasActiveBuild: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare function publishWorld(root: string, creds: CliCredentials, onProgress?: PublishProgress): Promise<PublishResult>;
|
|
29
|
+
export type PublishPackageResult = {
|
|
30
|
+
kind: string;
|
|
31
|
+
slug: string;
|
|
32
|
+
version: string;
|
|
33
|
+
revision: number;
|
|
34
|
+
codeBaseUrl: string;
|
|
35
|
+
assetBaseUrl: string | null;
|
|
36
|
+
};
|
|
37
|
+
export declare function publishPackage(root: string, creds: CliCredentials, onProgress?: PublishProgress): Promise<PublishPackageResult>;
|
|
38
|
+
export type CatalogPackage = {
|
|
39
|
+
kind: string;
|
|
40
|
+
slug: string;
|
|
41
|
+
title: string;
|
|
42
|
+
description: string | null;
|
|
43
|
+
latestVersion: string | null;
|
|
44
|
+
targetSystem: {
|
|
45
|
+
id: string;
|
|
46
|
+
range: string | null;
|
|
47
|
+
} | null;
|
|
48
|
+
};
|
|
49
|
+
export type CatalogList = {
|
|
50
|
+
data: CatalogPackage[];
|
|
51
|
+
pageInfo: {
|
|
52
|
+
hasNextPage: boolean;
|
|
53
|
+
nextCursor: string | null;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export declare function listPackages(apiUrl: string, kind?: string, system?: string): Promise<CatalogList>;
|
|
57
|
+
export declare function getPackageManifest(apiUrl: string, slug: string, version?: string): Promise<Record<string, unknown>>;
|
|
58
|
+
export declare function authStatus(): {
|
|
59
|
+
loggedIn: boolean;
|
|
60
|
+
username?: string;
|
|
61
|
+
apiUrl?: string;
|
|
62
|
+
expiresAt?: string;
|
|
63
|
+
};
|
|
64
|
+
export type WhoAmI = {
|
|
65
|
+
id: string;
|
|
66
|
+
username: string;
|
|
67
|
+
};
|
|
68
|
+
export declare function whoAmI(api: HelixApi): Promise<WhoAmI>;
|
|
69
|
+
export declare function listMyWorlds(creds: CliCredentials): Promise<WorldSummary[]>;
|
|
70
|
+
export declare const TOOLCHAIN_PACKAGES: readonly ["@hypersoniclabs/helix-cli", "@hypersoniclabs/helix-manifest", "@hypersoniclabs/helix-sdk", "@hypersoniclabs/helix-mcp"];
|
|
71
|
+
export type ToolchainStatus = {
|
|
72
|
+
name: string;
|
|
73
|
+
installed: string | null;
|
|
74
|
+
latest: string | null;
|
|
75
|
+
status: 'current' | 'update-available' | 'unknown';
|
|
76
|
+
updateHint: string;
|
|
77
|
+
};
|
|
78
|
+
export declare function cliVersion(): string;
|
|
79
|
+
export declare function checkForUpdates(opts?: {
|
|
80
|
+
projectDir?: string;
|
|
81
|
+
installed?: Record<string, string>;
|
|
82
|
+
}): Promise<ToolchainStatus[]>;
|
package/dist/lib.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Programmatic API for everything the `helix` bin does — also the surface an
|
|
3
|
+
// MCP server calls so AI agents run the exact same code paths as humans.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.TOOLCHAIN_PACKAGES = exports.initAbilityTemplate = exports.initTemplate = exports.jwtExpiresAtIso = exports.clearCredentials = exports.saveCredentials = exports.loadCredentials = exports.DEFAULT_API_URL = exports.MODULES_DIR = exports.LOCKFILE = exports.INSTALLED_INDEX = exports.installWorld = exports.resolvePins = exports.normalizePinRange = exports.loadInstalledIndexValidator = exports.loadVendoredValidator = exports.installLocalAbility = exports.checkAbilityBundle = exports.checkPackageBundle = exports.checkBundle = exports.uploadToTicket = exports.HelixApi = exports.ApiError = void 0;
|
|
6
|
+
exports.publishWorld = publishWorld;
|
|
7
|
+
exports.publishPackage = publishPackage;
|
|
8
|
+
exports.listPackages = listPackages;
|
|
9
|
+
exports.getPackageManifest = getPackageManifest;
|
|
10
|
+
exports.authStatus = authStatus;
|
|
11
|
+
exports.whoAmI = whoAmI;
|
|
12
|
+
exports.listMyWorlds = listMyWorlds;
|
|
13
|
+
exports.cliVersion = cliVersion;
|
|
14
|
+
exports.checkForUpdates = checkForUpdates;
|
|
15
|
+
const node_fs_1 = require("node:fs");
|
|
16
|
+
const node_path_1 = require("node:path");
|
|
17
|
+
const api_1 = require("./api");
|
|
18
|
+
const bundle_1 = require("./bundle");
|
|
19
|
+
const package_1 = require("./package");
|
|
20
|
+
const ability_1 = require("./ability");
|
|
21
|
+
const config_1 = require("./config");
|
|
22
|
+
var api_2 = require("./api");
|
|
23
|
+
Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return api_2.ApiError; } });
|
|
24
|
+
Object.defineProperty(exports, "HelixApi", { enumerable: true, get: function () { return api_2.HelixApi; } });
|
|
25
|
+
Object.defineProperty(exports, "uploadToTicket", { enumerable: true, get: function () { return api_2.uploadToTicket; } });
|
|
26
|
+
var bundle_2 = require("./bundle");
|
|
27
|
+
Object.defineProperty(exports, "checkBundle", { enumerable: true, get: function () { return bundle_2.checkBundle; } });
|
|
28
|
+
var package_2 = require("./package");
|
|
29
|
+
Object.defineProperty(exports, "checkPackageBundle", { enumerable: true, get: function () { return package_2.checkPackageBundle; } });
|
|
30
|
+
var ability_2 = require("./ability");
|
|
31
|
+
Object.defineProperty(exports, "checkAbilityBundle", { enumerable: true, get: function () { return ability_2.checkAbilityBundle; } });
|
|
32
|
+
Object.defineProperty(exports, "installLocalAbility", { enumerable: true, get: function () { return ability_2.installLocalAbility; } });
|
|
33
|
+
Object.defineProperty(exports, "loadVendoredValidator", { enumerable: true, get: function () { return ability_2.loadVendoredValidator; } });
|
|
34
|
+
Object.defineProperty(exports, "loadInstalledIndexValidator", { enumerable: true, get: function () { return ability_2.loadInstalledIndexValidator; } });
|
|
35
|
+
var resolve_1 = require("./resolve");
|
|
36
|
+
Object.defineProperty(exports, "normalizePinRange", { enumerable: true, get: function () { return resolve_1.normalizePinRange; } });
|
|
37
|
+
Object.defineProperty(exports, "resolvePins", { enumerable: true, get: function () { return resolve_1.resolvePins; } });
|
|
38
|
+
var install_1 = require("./install");
|
|
39
|
+
Object.defineProperty(exports, "installWorld", { enumerable: true, get: function () { return install_1.installWorld; } });
|
|
40
|
+
Object.defineProperty(exports, "INSTALLED_INDEX", { enumerable: true, get: function () { return install_1.INSTALLED_INDEX; } });
|
|
41
|
+
Object.defineProperty(exports, "LOCKFILE", { enumerable: true, get: function () { return install_1.LOCKFILE; } });
|
|
42
|
+
Object.defineProperty(exports, "MODULES_DIR", { enumerable: true, get: function () { return install_1.MODULES_DIR; } });
|
|
43
|
+
var config_2 = require("./config");
|
|
44
|
+
Object.defineProperty(exports, "DEFAULT_API_URL", { enumerable: true, get: function () { return config_2.DEFAULT_API_URL; } });
|
|
45
|
+
Object.defineProperty(exports, "loadCredentials", { enumerable: true, get: function () { return config_2.loadCredentials; } });
|
|
46
|
+
Object.defineProperty(exports, "saveCredentials", { enumerable: true, get: function () { return config_2.saveCredentials; } });
|
|
47
|
+
Object.defineProperty(exports, "clearCredentials", { enumerable: true, get: function () { return config_2.clearCredentials; } });
|
|
48
|
+
Object.defineProperty(exports, "jwtExpiresAtIso", { enumerable: true, get: function () { return config_2.jwtExpiresAtIso; } });
|
|
49
|
+
var init_1 = require("./init");
|
|
50
|
+
Object.defineProperty(exports, "initTemplate", { enumerable: true, get: function () { return init_1.initTemplate; } });
|
|
51
|
+
var initAbility_1 = require("./initAbility");
|
|
52
|
+
Object.defineProperty(exports, "initAbilityTemplate", { enumerable: true, get: function () { return initAbility_1.initAbilityTemplate; } });
|
|
53
|
+
const UPLOAD_CONCURRENCY = 6;
|
|
54
|
+
// Validate + resolve-or-create world + upload + finalize. Throws ApiError /
|
|
55
|
+
// Error with human-readable messages on any failure.
|
|
56
|
+
async function publishWorld(root, creds, onProgress = () => undefined) {
|
|
57
|
+
const bundle = (0, bundle_1.checkBundle)(root);
|
|
58
|
+
if (bundle.errors.length) {
|
|
59
|
+
throw new Error(`Bundle is invalid:\n${bundle.errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
60
|
+
}
|
|
61
|
+
const manifest = bundle.manifest;
|
|
62
|
+
const api = api_1.HelixApi.forCredentials(creds);
|
|
63
|
+
const mine = await api.request('GET', '/api/v1/instant-worlds/me');
|
|
64
|
+
let world = mine.data.find((w) => w.slug === manifest.slug);
|
|
65
|
+
if (!world) {
|
|
66
|
+
onProgress(`Creating world "${manifest.title}" (${manifest.slug})`);
|
|
67
|
+
world = await api.requestItem('POST', '/api/v1/instant-worlds', {
|
|
68
|
+
title: manifest.title,
|
|
69
|
+
slug: manifest.slug,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
onProgress(`Requesting upload for ${bundle.files.length} files`);
|
|
73
|
+
const build = await api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/builds`, {
|
|
74
|
+
manifest,
|
|
75
|
+
files: bundle.files.map((f) => ({ path: f.path, size: f.size })),
|
|
76
|
+
});
|
|
77
|
+
let done = 0;
|
|
78
|
+
const queue = [...build.uploads];
|
|
79
|
+
await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
|
|
80
|
+
for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
|
|
81
|
+
const file = bundle.files.find((f) => f.path === ticket.path);
|
|
82
|
+
await (0, api_1.uploadToTicket)(ticket.url, (0, node_fs_1.readFileSync)(file.absolutePath), ticket.contentType, ticket.cacheControl);
|
|
83
|
+
done += 1;
|
|
84
|
+
onProgress(`Uploaded ${done}/${build.uploads.length}`);
|
|
85
|
+
}
|
|
86
|
+
}));
|
|
87
|
+
onProgress('Finalizing');
|
|
88
|
+
await api.request('POST', `/api/v1/instant-worlds/${world.id}/builds/${build.buildId}/finalize`);
|
|
89
|
+
const detail = await api.requestItem('GET', `/api/v1/instant-worlds/${manifest.slug}`);
|
|
90
|
+
return {
|
|
91
|
+
slug: manifest.slug,
|
|
92
|
+
title: manifest.title,
|
|
93
|
+
buildId: build.buildId,
|
|
94
|
+
buildNumber: build.buildNumber,
|
|
95
|
+
playUrl: detail.playUrl,
|
|
96
|
+
worldUrl: `${creds.apiUrl}/api/v1/instant-worlds/${manifest.slug}`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Validate the bundle → create the version (presigned tickets per code/asset
|
|
100
|
+
// channel) → upload → finalize. Admin-only on the server.
|
|
101
|
+
async function publishPackage(root, creds, onProgress = () => undefined) {
|
|
102
|
+
const validator = await (0, ability_1.loadVendoredValidator)();
|
|
103
|
+
const check = (0, package_1.checkPackageBundle)(root, validator);
|
|
104
|
+
if (check.errors.length || !check.envelope) {
|
|
105
|
+
throw new Error(`Bundle is invalid:\n${check.errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
106
|
+
}
|
|
107
|
+
const envelope = check.envelope;
|
|
108
|
+
const api = api_1.HelixApi.forCredentials(creds);
|
|
109
|
+
onProgress(`Publishing ${envelope.kind} "${envelope.title}" (${envelope.slug}@${envelope.version}) — ${check.files.length} files`);
|
|
110
|
+
const created = await api.requestItem('POST', `/api/v1/instant-packages/${envelope.slug}/versions`, {
|
|
111
|
+
manifest: envelope,
|
|
112
|
+
payload: check.payload ?? undefined,
|
|
113
|
+
files: check.files.map((f) => ({ path: f.path, size: f.size })),
|
|
114
|
+
});
|
|
115
|
+
let done = 0;
|
|
116
|
+
const queue = [...created.uploads];
|
|
117
|
+
await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
|
|
118
|
+
for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
|
|
119
|
+
const file = check.files.find((f) => f.path === ticket.path);
|
|
120
|
+
await (0, api_1.uploadToTicket)(ticket.url, (0, node_fs_1.readFileSync)(file.absolutePath), ticket.contentType, ticket.cacheControl);
|
|
121
|
+
done += 1;
|
|
122
|
+
onProgress(`Uploaded ${done}/${created.uploads.length}`);
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
onProgress('Finalizing');
|
|
126
|
+
const final = await api.requestItem('POST', `/api/v1/instant-packages/${envelope.slug}/versions/${encodeURIComponent(envelope.version)}/finalize`);
|
|
127
|
+
return {
|
|
128
|
+
kind: final.kind,
|
|
129
|
+
slug: final.slug,
|
|
130
|
+
version: final.version,
|
|
131
|
+
revision: final.revision,
|
|
132
|
+
codeBaseUrl: final.codeBaseUrl,
|
|
133
|
+
assetBaseUrl: final.assetBaseUrl,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Public discovery — no auth. List published systems/abilities/asset-packs.
|
|
137
|
+
function listPackages(apiUrl, kind, system) {
|
|
138
|
+
const api = new api_1.HelixApi(apiUrl);
|
|
139
|
+
const qs = new URLSearchParams();
|
|
140
|
+
if (kind)
|
|
141
|
+
qs.set('kind', kind);
|
|
142
|
+
if (system)
|
|
143
|
+
qs.set('system', system);
|
|
144
|
+
const query = qs.toString();
|
|
145
|
+
return api.request('GET', `/api/v1/instant-packages${query ? `?${query}` : ''}`);
|
|
146
|
+
}
|
|
147
|
+
// Public discovery — the full manifest + payload (the documentation an agent
|
|
148
|
+
// reads before configuring). `version` defaults to the highest active semver.
|
|
149
|
+
function getPackageManifest(apiUrl, slug, version = 'latest') {
|
|
150
|
+
const api = new api_1.HelixApi(apiUrl);
|
|
151
|
+
return api.requestItem('GET', `/api/v1/instant-packages/${slug}/versions/${encodeURIComponent(version)}`);
|
|
152
|
+
}
|
|
153
|
+
// Convenience for tools: current login state without throwing.
|
|
154
|
+
function authStatus() {
|
|
155
|
+
const creds = (0, config_1.loadCredentials)();
|
|
156
|
+
if (!creds)
|
|
157
|
+
return { loggedIn: false };
|
|
158
|
+
return {
|
|
159
|
+
loggedIn: true,
|
|
160
|
+
username: creds.username,
|
|
161
|
+
apiUrl: creds.apiUrl,
|
|
162
|
+
expiresAt: creds.expiresAt || undefined,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Validates a token and returns the authenticated user (the CLI's whoami).
|
|
166
|
+
async function whoAmI(api) {
|
|
167
|
+
return api.requestItem('GET', '/api/v1/users/me');
|
|
168
|
+
}
|
|
169
|
+
async function listMyWorlds(creds) {
|
|
170
|
+
const api = api_1.HelixApi.forCredentials(creds);
|
|
171
|
+
const res = await api.request('GET', '/api/v1/instant-worlds/me');
|
|
172
|
+
return res.data;
|
|
173
|
+
}
|
|
174
|
+
// --- Toolchain version / update checks --------------------------------------
|
|
175
|
+
// The @helix packages an agent's toolchain is built from: the CLI + MCP (tools,
|
|
176
|
+
// ideally run via `npx -y <pkg>@latest`) and manifest + sdk (libs a
|
|
177
|
+
// world/ability project pins).
|
|
178
|
+
exports.TOOLCHAIN_PACKAGES = [
|
|
179
|
+
'@hypersoniclabs/helix-cli',
|
|
180
|
+
'@hypersoniclabs/helix-manifest',
|
|
181
|
+
'@hypersoniclabs/helix-sdk',
|
|
182
|
+
'@hypersoniclabs/helix-mcp',
|
|
183
|
+
];
|
|
184
|
+
const REGISTRY = 'https://registry.npmjs.org';
|
|
185
|
+
const isLib = (name) => name === '@hypersoniclabs/helix-manifest' || name === '@hypersoniclabs/helix-sdk';
|
|
186
|
+
function compareVersions(a, b) {
|
|
187
|
+
const parse = (v) => v.split('-')[0].split('.').map((n) => Number(n) || 0);
|
|
188
|
+
const [pa, pb] = [parse(a), parse(b)];
|
|
189
|
+
for (let i = 0; i < 3; i++) {
|
|
190
|
+
if (pa[i] !== pb[i])
|
|
191
|
+
return (pa[i] ?? 0) < (pb[i] ?? 0) ? -1 : 1;
|
|
192
|
+
}
|
|
193
|
+
return 0;
|
|
194
|
+
}
|
|
195
|
+
// This CLI's own version, read from its package.json (dist/.. at runtime).
|
|
196
|
+
function cliVersion() {
|
|
197
|
+
try {
|
|
198
|
+
return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, '..', 'package.json'), 'utf8')).version;
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return '0.0.0';
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async function latestOnNpm(name) {
|
|
205
|
+
try {
|
|
206
|
+
const res = await fetch(`${REGISTRY}/${name.replace('/', '%2f')}/latest`);
|
|
207
|
+
if (!res.ok)
|
|
208
|
+
return null;
|
|
209
|
+
return (await res.json()).version ?? null;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function installedVersion(name, projectDir) {
|
|
216
|
+
if (name === '@hypersoniclabs/helix-cli')
|
|
217
|
+
return cliVersion();
|
|
218
|
+
const candidates = [];
|
|
219
|
+
if (projectDir) {
|
|
220
|
+
candidates.push((0, node_path_1.join)(projectDir, 'node_modules', name, 'package.json'));
|
|
221
|
+
}
|
|
222
|
+
try {
|
|
223
|
+
candidates.push(require.resolve(`${name}/package.json`));
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// not resolvable from here — fall through to the project-dir candidate
|
|
227
|
+
}
|
|
228
|
+
for (const p of candidates) {
|
|
229
|
+
try {
|
|
230
|
+
if ((0, node_fs_1.existsSync)(p)) {
|
|
231
|
+
return JSON.parse((0, node_fs_1.readFileSync)(p, 'utf8'))
|
|
232
|
+
.version;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// unreadable / parse error — try the next candidate
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
// Compare each toolchain package's installed version against the latest on npm.
|
|
242
|
+
// `installed` overrides let the running tool report its own version.
|
|
243
|
+
async function checkForUpdates(opts = {}) {
|
|
244
|
+
return Promise.all(exports.TOOLCHAIN_PACKAGES.map(async (name) => {
|
|
245
|
+
const installed = opts.installed?.[name] ?? installedVersion(name, opts.projectDir);
|
|
246
|
+
const latest = await latestOnNpm(name);
|
|
247
|
+
const status = installed && latest
|
|
248
|
+
? compareVersions(installed, latest) < 0
|
|
249
|
+
? 'update-available'
|
|
250
|
+
: 'current'
|
|
251
|
+
: 'unknown';
|
|
252
|
+
const updateHint = isLib(name)
|
|
253
|
+
? `npm i ${name}@latest`
|
|
254
|
+
: `run via "npx -y ${name}@latest" (always current), or update a global install: npm i -g ${name}@latest`;
|
|
255
|
+
return { name, installed, latest, status, updateHint };
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,yEAAyE;;;AAsFzE,oCA2EC;AA6BD,wCA2DC;AAgBD,oCAcC;AAID,gDAUC;AAGD,gCAcC;AAKD,wBAEC;AAED,oCASC;AAoCD,gCAUC;AAsCD,0CAoBC;AA9aD,qCAAmD;AACnD,yCAAiC;AACjC,+BAAiD;AACjD,qCAAuC;AACvC,uCAA+C;AAC/C,uCAAkD;AAClD,qCAA2D;AAE3D,6BAA2D;AAAlD,+FAAA,QAAQ,OAAA;AAAE,+FAAA,QAAQ,OAAA;AAAE,qGAAA,cAAc,OAAA;AAC3C,mCAA0E;AAAjE,qGAAA,WAAW,OAAA;AACpB,qCAAwE;AAA/D,6GAAA,kBAAkB,OAAA;AAC3B,qCAMmB;AALjB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AACnB,gHAAA,qBAAqB,OAAA;AACrB,sHAAA,2BAA2B,OAAA;AAG7B,qCASmB;AARjB,4GAAA,iBAAiB,OAAA;AACjB,sGAAA,WAAW,OAAA;AAQb,qCAUmB;AATjB,uGAAA,YAAY,OAAA;AACZ,0GAAA,eAAe,OAAA;AACf,mGAAA,QAAQ,OAAA;AACR,sGAAA,WAAW,OAAA;AAOb,mCAOkB;AANhB,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,0GAAA,gBAAgB,OAAA;AAChB,yGAAA,eAAe,OAAA;AAGjB,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;AACrB,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAE5B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAgC7B,4EAA4E;AAC5E,qDAAqD;AAC9C,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,KAAqB,EACrB,aAA8B,GAAG,EAAE,CAAC,SAAS;IAE7C,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;IAClC,MAAM,GAAG,GAAG,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAC5B,KAAK,EACL,2BAA2B,CAC5B,CAAC;IACF,IAAI,KAAK,GAA6B,IAAI,CAAC,IAAI,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAChC,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,mBAAmB,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CAAe,MAAM,EAAE,wBAAwB,EAAE;YAC5E,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CACjC,MAAM,EACN,0BAA0B,KAAK,CAAC,EAAE,SAAS,EAC3C;QACE,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACjE,CACF,CAAC;IAEF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,KAAK,IAAI,EAAE;QACpD,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAE,CAAC;YAC/D,MAAM,IAAA,oBAAc,EAClB,MAAM,CAAC,GAAG,EACV,IAAA,sBAAY,EAAC,IAAI,CAAC,YAAY,CAAC,EAC/B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;YACF,IAAI,IAAI,CAAC,CAAC;YACV,UAAU,CAAC,YAAY,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,GAAG,CAAC,OAAO,CACf,MAAM,EACN,0BAA0B,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,OAAO,WAAW,CACtE,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAClC,KAAK,EACL,0BAA0B,QAAQ,CAAC,IAAI,EAAE,CAC1C,CAAC;IACF,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,0BAA0B,QAAQ,CAAC,IAAI,EAAE;KACnE,CAAC;AACJ,CAAC;AA2BD,6EAA6E;AAC7E,0DAA0D;AACnD,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAqB,EACrB,aAA8B,GAAG,EAAE,CAAC,SAAS;IAE7C,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAqB,GAAE,CAAC;IAChD,MAAM,KAAK,GAAG,IAAA,4BAAkB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,GAAG,GAAG,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE3C,UAAU,CACR,cAAc,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CACvH,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CACnC,MAAM,EACN,4BAA4B,QAAQ,CAAC,IAAI,WAAW,EACpD;QACE,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;QACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAChE,CACF,CAAC;IAEF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,KAAK,IAAI,EAAE;QACpD,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAE,CAAC;YAC9D,MAAM,IAAA,oBAAc,EAClB,MAAM,CAAC,GAAG,EACV,IAAA,sBAAY,EAAC,IAAI,CAAC,YAAY,CAAC,EAC/B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;YACF,IAAI,IAAI,CAAC,CAAC;YACV,UAAU,CAAC,YAAY,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CACjC,MAAM,EACN,4BAA4B,QAAQ,CAAC,IAAI,aAAa,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CACtG,CAAC;IACF,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAeD,4EAA4E;AAC5E,SAAgB,YAAY,CAC1B,MAAc,EACd,IAAa,EACb,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,cAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,IAAI,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,OAAO,CAChB,KAAK,EACL,2BAA2B,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,8EAA8E;AAC9E,SAAgB,kBAAkB,CAChC,MAAc,EACd,IAAY,EACZ,OAAO,GAAG,QAAQ;IAElB,MAAM,GAAG,GAAG,IAAI,cAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,WAAW,CACpB,KAAK,EACL,4BAA4B,IAAI,aAAa,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC3E,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,SAAgB,UAAU;IAMxB,MAAM,KAAK,GAAG,IAAA,wBAAe,GAAE,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;KACxC,CAAC;AACJ,CAAC;AAID,2EAA2E;AACpE,KAAK,UAAU,MAAM,CAAC,GAAa;IACxC,OAAO,GAAG,CAAC,WAAW,CAAS,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC5D,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,KAAqB;IAErB,MAAM,GAAG,GAAG,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAC3B,KAAK,EACL,2BAA2B,CAC5B,CAAC;IACF,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,+EAA+E;AAE/E,gFAAgF;AAChF,oEAAoE;AACpE,+BAA+B;AAClB,QAAA,kBAAkB,GAAG;IAChC,2BAA2B;IAC3B,gCAAgC;IAChC,2BAA2B;IAC3B,2BAA2B;CACnB,CAAC;AAUX,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAC9C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,IAAI,KAAK,gCAAgC,IAAI,IAAI,KAAK,2BAA2B,CAAC;AAEpF,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2EAA2E;AAC3E,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,OACE,IAAI,CAAC,KAAK,CACR,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE9D,CAAC,OAAO,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAC,OAAO,IAAI,IAAI,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,UAAmB;IACzD,IAAI,IAAI,KAAK,2BAA2B;QAAE,OAAO,UAAU,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,IAAA,oBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,OAAQ,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAyB;qBAChE,OAAO,CAAC;YACb,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,qEAAqE;AAC9D,KAAK,UAAU,eAAe,CACnC,OAAoE,EAAE;IAEtE,OAAO,OAAO,CAAC,GAAG,CAChB,0BAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAA4B,EAAE;QAC9D,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GACV,SAAS,IAAI,MAAM;YACjB,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;gBACtC,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;YAC5B,CAAC,CAAC,SAAS,IAAI,SAAS;YACxB,CAAC,CAAC,mBAAmB,IAAI,mEAAmE,IAAI,SAAS,CAAC;QAC5G,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACzD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type HelixPackageEnvelope } from '@hypersoniclabs/helix-manifest';
|
|
2
|
+
import { type AbilityValidator } from './ability';
|
|
3
|
+
import type { BundleFile } from './bundle';
|
|
4
|
+
export type PackageBundleCheck = {
|
|
5
|
+
kind: string | null;
|
|
6
|
+
envelope: HelixPackageEnvelope | null;
|
|
7
|
+
payload: Record<string, unknown> | null;
|
|
8
|
+
files: BundleFile[];
|
|
9
|
+
errors: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare function checkPackageBundle(root: string, validator: AbilityValidator): PackageBundleCheck;
|