@vurb/core 3.11.1 → 3.12.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/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +11 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +163 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/introspect.d.ts +42 -0
- package/dist/cli/commands/introspect.d.ts.map +1 -0
- package/dist/cli/commands/introspect.js +107 -0
- package/dist/cli/commands/introspect.js.map +1 -0
- package/dist/cli/commands/update.d.ts +7 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +53 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +167 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/version.d.ts +7 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +23 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/constants.d.ts.map +1 -1
- package/dist/cli/constants.js +9 -0
- package/dist/cli/constants.js.map +1 -1
- package/dist/cli/npm-registry.d.ts +40 -0
- package/dist/cli/npm-registry.d.ts.map +1 -0
- package/dist/cli/npm-registry.js +118 -0
- package/dist/cli/npm-registry.js.map +1 -0
- package/dist/cli/vurb.d.ts +5 -1
- package/dist/cli/vurb.d.ts.map +1 -1
- package/dist/cli/vurb.js +18 -1
- package/dist/cli/vurb.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAehF,qCAAqC;AACrC,MAAM,WAAW,OAAO;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;IAEb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAExB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IAEvB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;CACvB;AAID,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAehF,qCAAqC;AACrC,MAAM,WAAW,OAAO;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;IAEb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAExB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IAEvB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;CACvB;AAID,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAmIjD"}
|
package/dist/cli/args.js
CHANGED
|
@@ -47,9 +47,18 @@ export function parseArgs(argv) {
|
|
|
47
47
|
case 'insp':
|
|
48
48
|
case 'debug':
|
|
49
49
|
case 'dbg':
|
|
50
|
+
case 'update':
|
|
51
|
+
case 'version':
|
|
52
|
+
case 'validate':
|
|
53
|
+
case 'doctor':
|
|
50
54
|
result.command = arg;
|
|
51
55
|
seenCommand = true;
|
|
52
56
|
break;
|
|
57
|
+
case '-v':
|
|
58
|
+
case '--version':
|
|
59
|
+
result.command = 'version';
|
|
60
|
+
seenCommand = true;
|
|
61
|
+
break;
|
|
53
62
|
case '--check':
|
|
54
63
|
result.check = true;
|
|
55
64
|
break;
|
package/dist/cli/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAMA,oEAAoE;AAEpE,qFAAqF;AACrF,SAAS,YAAY,CAAC,IAAc,EAAE,CAAS,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AA+BD,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAY;QACpB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,KAAK;KACpB,CAAC;IAEF,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,QAAQ,GAAG,EAAE,CAAC;YACV,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,SAAS,CAAC;YACf,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,KAAK;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vurb doctor` — environment diagnostics.
|
|
3
|
+
*
|
|
4
|
+
* Checks Node version, installed packages, .vurbrc config, token validity,
|
|
5
|
+
* entrypoint resolution, esbuild availability, and lockfile status.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { CliArgs } from '../args.js';
|
|
10
|
+
export declare function commandDoctor(args: CliArgs): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AA2I1C,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChE"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { ansi, VURB_VERSION, VINKIUS_CLOUD_URL } from '../constants.js';
|
|
2
|
+
import { readVurbRc } from '../rc.js';
|
|
3
|
+
import { inferServerEntry } from '../utils.js';
|
|
4
|
+
import { scanInstalledVurbPackages, enrichWithLatest } from '../npm-registry.js';
|
|
5
|
+
function pass(label, detail) {
|
|
6
|
+
return { status: 'pass', label, detail };
|
|
7
|
+
}
|
|
8
|
+
function warn(label, detail) {
|
|
9
|
+
return { status: 'warn', label, detail };
|
|
10
|
+
}
|
|
11
|
+
function fail(label, detail) {
|
|
12
|
+
return { status: 'fail', label, detail };
|
|
13
|
+
}
|
|
14
|
+
function printResult(r) {
|
|
15
|
+
const icon = r.status === 'pass'
|
|
16
|
+
? ansi.green('✓')
|
|
17
|
+
: r.status === 'warn'
|
|
18
|
+
? ansi.yellow('⚠')
|
|
19
|
+
: ansi.red('✗');
|
|
20
|
+
const detail = r.status === 'warn' || r.status === 'fail'
|
|
21
|
+
? ansi.yellow(r.detail)
|
|
22
|
+
: r.detail;
|
|
23
|
+
process.stderr.write(` ${icon} ${r.label.padEnd(20)} ${detail}\n`);
|
|
24
|
+
}
|
|
25
|
+
// ─── Individual Checks ──────────────────────────────────────────
|
|
26
|
+
function checkNode() {
|
|
27
|
+
const major = parseInt(process.version.slice(1), 10);
|
|
28
|
+
if (major < 18)
|
|
29
|
+
return warn('Node.js', `${process.version} — v18+ recommended`);
|
|
30
|
+
return pass('Node.js', process.version);
|
|
31
|
+
}
|
|
32
|
+
function checkCore() {
|
|
33
|
+
return pass('@vurb/core', VURB_VERSION);
|
|
34
|
+
}
|
|
35
|
+
async function checkPackageVersions(cwd) {
|
|
36
|
+
const packages = scanInstalledVurbPackages(cwd);
|
|
37
|
+
if (packages.length === 0)
|
|
38
|
+
return [];
|
|
39
|
+
const enriched = await enrichWithLatest(packages);
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const pkg of enriched) {
|
|
42
|
+
if (!pkg.latest || pkg.current === pkg.latest) {
|
|
43
|
+
results.push(pass(pkg.name, `${pkg.current} ${ansi.dim('(latest)')}`));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
results.push(warn(pkg.name, `${pkg.current} → ${pkg.latest} ${ansi.dim('(run: vurb update)')}`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return results;
|
|
50
|
+
}
|
|
51
|
+
function checkVurbRc(cwd) {
|
|
52
|
+
const { existsSync } = require('node:fs');
|
|
53
|
+
const { resolve } = require('node:path');
|
|
54
|
+
const rcPath = resolve(cwd, '.vurbrc');
|
|
55
|
+
if (!existsSync(rcPath)) {
|
|
56
|
+
return [warn('.vurbrc', 'not found — run: vurb remote <url>')];
|
|
57
|
+
}
|
|
58
|
+
const config = readVurbRc(cwd);
|
|
59
|
+
const parts = [];
|
|
60
|
+
if (config.token)
|
|
61
|
+
parts.push('token');
|
|
62
|
+
if (config.remote)
|
|
63
|
+
parts.push('remote');
|
|
64
|
+
if (config.serverId)
|
|
65
|
+
parts.push('serverId');
|
|
66
|
+
if (parts.length === 0) {
|
|
67
|
+
return [warn('.vurbrc', 'exists but empty')];
|
|
68
|
+
}
|
|
69
|
+
return [pass('.vurbrc', `configured (${parts.join(' + ')})`)];
|
|
70
|
+
}
|
|
71
|
+
async function checkToken(cwd) {
|
|
72
|
+
const config = readVurbRc(cwd);
|
|
73
|
+
const token = config.token ?? process.env['VURB_DEPLOY_TOKEN'];
|
|
74
|
+
if (!token)
|
|
75
|
+
return warn('Connection token', 'not set (run: vurb token <token>)');
|
|
76
|
+
const remote = config.remote ?? VINKIUS_CLOUD_URL;
|
|
77
|
+
try {
|
|
78
|
+
const res = await fetch(`${remote.replace(/\/+$/, '')}/token/info`, {
|
|
79
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json' },
|
|
80
|
+
signal: AbortSignal.timeout(5_000),
|
|
81
|
+
});
|
|
82
|
+
if (res.ok) {
|
|
83
|
+
const data = await res.json();
|
|
84
|
+
return pass('Connection token', `active${data.server_name ? ` (${data.server_name})` : ''}`);
|
|
85
|
+
}
|
|
86
|
+
if (res.status === 401)
|
|
87
|
+
return fail('Connection token', 'expired or invalid');
|
|
88
|
+
return warn('Connection token', `API returned ${res.status}`);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return warn('Connection token', 'API unreachable — could not verify');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function checkEntrypoint(cwd) {
|
|
95
|
+
const entry = inferServerEntry(cwd);
|
|
96
|
+
if (!entry)
|
|
97
|
+
return warn('Entrypoint', 'not found (expected src/server.ts)');
|
|
98
|
+
return pass('Entrypoint', entry);
|
|
99
|
+
}
|
|
100
|
+
function checkEsbuild(cwd) {
|
|
101
|
+
try {
|
|
102
|
+
const { resolve } = require('node:path');
|
|
103
|
+
const { existsSync } = require('node:fs');
|
|
104
|
+
const esbuildPkg = resolve(cwd, 'node_modules', 'esbuild', 'package.json');
|
|
105
|
+
if (existsSync(esbuildPkg)) {
|
|
106
|
+
const { readFileSync } = require('node:fs');
|
|
107
|
+
const pkg = JSON.parse(readFileSync(esbuildPkg, 'utf-8'));
|
|
108
|
+
return pass('esbuild', pkg.version);
|
|
109
|
+
}
|
|
110
|
+
return warn('esbuild', 'not installed (required for vurb deploy)');
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return warn('esbuild', 'not installed (required for vurb deploy)');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function checkLockfile(cwd) {
|
|
117
|
+
const { existsSync } = require('node:fs');
|
|
118
|
+
const { resolve } = require('node:path');
|
|
119
|
+
if (existsSync(resolve(cwd, 'vurb.lock'))) {
|
|
120
|
+
return pass('vurb.lock', 'present');
|
|
121
|
+
}
|
|
122
|
+
return warn('vurb.lock', 'missing (run: vurb lock)');
|
|
123
|
+
}
|
|
124
|
+
// ─── Command ─────────────────────────────────────────────────────
|
|
125
|
+
export async function commandDoctor(args) {
|
|
126
|
+
const cwd = args.cwd;
|
|
127
|
+
process.stderr.write(`\n ${ansi.bold('Vurb Doctor')}\n\n`);
|
|
128
|
+
const results = [];
|
|
129
|
+
// Synchronous checks
|
|
130
|
+
results.push(checkNode());
|
|
131
|
+
results.push(checkCore());
|
|
132
|
+
// Async checks — run concurrently
|
|
133
|
+
const [packageResults, tokenResult] = await Promise.all([
|
|
134
|
+
checkPackageVersions(cwd),
|
|
135
|
+
checkToken(cwd),
|
|
136
|
+
]);
|
|
137
|
+
results.push(...packageResults);
|
|
138
|
+
results.push(...checkVurbRc(cwd));
|
|
139
|
+
results.push(tokenResult);
|
|
140
|
+
results.push(checkEntrypoint(cwd));
|
|
141
|
+
results.push(checkEsbuild(cwd));
|
|
142
|
+
results.push(checkLockfile(cwd));
|
|
143
|
+
// Print
|
|
144
|
+
for (const r of results)
|
|
145
|
+
printResult(r);
|
|
146
|
+
const passed = results.filter(r => r.status === 'pass').length;
|
|
147
|
+
const warned = results.filter(r => r.status === 'warn').length;
|
|
148
|
+
const failed = results.filter(r => r.status === 'fail').length;
|
|
149
|
+
process.stderr.write('\n');
|
|
150
|
+
if (failed > 0) {
|
|
151
|
+
process.stderr.write(` ${ansi.red(`${failed} error${failed !== 1 ? 's' : ''}`)}`);
|
|
152
|
+
if (warned > 0)
|
|
153
|
+
process.stderr.write(`, ${ansi.yellow(`${warned} warning${warned !== 1 ? 's' : ''}`)}`);
|
|
154
|
+
process.stderr.write(`, ${passed} passed.\n\n`);
|
|
155
|
+
}
|
|
156
|
+
else if (warned > 0) {
|
|
157
|
+
process.stderr.write(` ${passed} passed, ${ansi.yellow(`${warned} warning${warned !== 1 ? 's' : ''}`)}.\n\n`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
process.stderr.write(` ${ansi.green(`All ${passed} checks passed ✓`)}\n\n`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared introspection pipeline — boot server + compile contracts.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `deploy.ts` so both `deploy` and `validate` can reuse
|
|
5
|
+
* the same introspection logic without duplication.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
export interface ToolEntry {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IntrospectResult {
|
|
14
|
+
serverName: string;
|
|
15
|
+
version: string;
|
|
16
|
+
registry: {
|
|
17
|
+
getBuilders(): Iterable<{
|
|
18
|
+
getName(): string;
|
|
19
|
+
getActionNames(): string[];
|
|
20
|
+
buildToolDefinition(): unknown;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface IntrospectionReport {
|
|
25
|
+
serverName: string;
|
|
26
|
+
version: string;
|
|
27
|
+
tools: ToolEntry[];
|
|
28
|
+
contracts: Record<string, unknown>;
|
|
29
|
+
lockfile: Record<string, unknown>;
|
|
30
|
+
bootTimeMs: number;
|
|
31
|
+
buildTimeMs: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Boot the server via `VURB_INTROSPECT=1`, compile contracts, and
|
|
35
|
+
* generate the lockfile manifest.
|
|
36
|
+
*
|
|
37
|
+
* @param absEntry - Absolute path to the server entrypoint.
|
|
38
|
+
* @returns Full introspection report including tools, contracts, lockfile.
|
|
39
|
+
* @throws If esbuild build fails, server doesn't boot, or contracts fail to compile.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runIntrospection(absEntry: string): Promise<IntrospectionReport>;
|
|
42
|
+
//# sourceMappingURL=introspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/introspect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACN,WAAW,IAAI,QAAQ,CAAC;YACpB,OAAO,IAAI,MAAM,CAAC;YAClB,cAAc,IAAI,MAAM,EAAE,CAAC;YAC3B,mBAAmB,IAAI,OAAO,CAAC;SAClC,CAAC,CAAC;KACN,CAAC;CACL;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAID;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmGrF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared introspection pipeline — boot server + compile contracts.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `deploy.ts` so both `deploy` and `validate` can reuse
|
|
5
|
+
* the same introspection logic without duplication.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
// ─── Pipeline ────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Boot the server via `VURB_INTROSPECT=1`, compile contracts, and
|
|
12
|
+
* generate the lockfile manifest.
|
|
13
|
+
*
|
|
14
|
+
* @param absEntry - Absolute path to the server entrypoint.
|
|
15
|
+
* @returns Full introspection report including tools, contracts, lockfile.
|
|
16
|
+
* @throws If esbuild build fails, server doesn't boot, or contracts fail to compile.
|
|
17
|
+
*/
|
|
18
|
+
export async function runIntrospection(absEntry) {
|
|
19
|
+
const esbuild = await import('esbuild');
|
|
20
|
+
// ── 1. Build (Node platform, ESM — for local execution, not edge) ──
|
|
21
|
+
const buildStart = Date.now();
|
|
22
|
+
const introspectBuild = await esbuild.build({
|
|
23
|
+
entryPoints: [absEntry],
|
|
24
|
+
bundle: true,
|
|
25
|
+
format: 'esm',
|
|
26
|
+
platform: 'node',
|
|
27
|
+
target: 'es2022',
|
|
28
|
+
treeShaking: true,
|
|
29
|
+
minify: false,
|
|
30
|
+
write: false,
|
|
31
|
+
logLevel: 'silent',
|
|
32
|
+
});
|
|
33
|
+
const buildTimeMs = Date.now() - buildStart;
|
|
34
|
+
const introspectCode = new TextDecoder().decode(introspectBuild.outputFiles[0].contents);
|
|
35
|
+
// ── 2. Boot server in introspect mode ──
|
|
36
|
+
const bootStart = Date.now();
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
const g = globalThis;
|
|
39
|
+
let resolveIntrospect;
|
|
40
|
+
const introspectReady = new Promise(resolve => {
|
|
41
|
+
resolveIntrospect = resolve;
|
|
42
|
+
});
|
|
43
|
+
g.__vurb_introspect_resolve = resolveIntrospect;
|
|
44
|
+
process.env['VURB_INTROSPECT'] = '1';
|
|
45
|
+
const { tmpdir } = await import('node:os');
|
|
46
|
+
const { join } = await import('node:path');
|
|
47
|
+
const { writeFileSync, unlinkSync } = await import('node:fs');
|
|
48
|
+
const { pathToFileURL } = await import('node:url');
|
|
49
|
+
const tmpBundle = join(tmpdir(), `vurb-introspect-${Date.now()}.mjs`);
|
|
50
|
+
writeFileSync(tmpBundle, introspectCode, 'utf-8');
|
|
51
|
+
try {
|
|
52
|
+
await import(pathToFileURL(tmpBundle).href);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
try {
|
|
56
|
+
unlinkSync(tmpBundle);
|
|
57
|
+
}
|
|
58
|
+
catch { /* ignore cleanup errors */ }
|
|
59
|
+
}
|
|
60
|
+
// Wait for startServer to fire (it resolves via globalThis)
|
|
61
|
+
const result = await Promise.race([
|
|
62
|
+
introspectReady,
|
|
63
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('startServer() was not called within 5s')), 5_000)),
|
|
64
|
+
]);
|
|
65
|
+
const bootTimeMs = Date.now() - bootStart;
|
|
66
|
+
// Clean up
|
|
67
|
+
delete process.env['VURB_INTROSPECT'];
|
|
68
|
+
delete g.__vurb_introspect_resolve;
|
|
69
|
+
delete g.__vurb_introspect_result;
|
|
70
|
+
// ── 3. Compile contracts + generate lockfile ──
|
|
71
|
+
const { compileContracts } = await import('../../introspection/ToolContract.js');
|
|
72
|
+
const { generateLockfile } = await import('../../introspection/CapabilityLockfile.js');
|
|
73
|
+
const { VURB_VERSION } = await import('../constants.js');
|
|
74
|
+
const builders = [...result.registry.getBuilders()];
|
|
75
|
+
const contracts = await compileContracts(builders);
|
|
76
|
+
const lockfile = await generateLockfile(result.serverName, contracts, VURB_VERSION);
|
|
77
|
+
// ── 4. Extract tool names ──
|
|
78
|
+
const tools = [];
|
|
79
|
+
for (const [namespace, contract] of Object.entries(contracts)) {
|
|
80
|
+
const c = contract;
|
|
81
|
+
const actionEntries = Object.entries(c.surface.actions);
|
|
82
|
+
if (actionEntries.length <= 1) {
|
|
83
|
+
tools.push({
|
|
84
|
+
name: namespace,
|
|
85
|
+
description: c.surface.description ?? '',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
for (const [actionKey, action] of actionEntries) {
|
|
90
|
+
tools.push({
|
|
91
|
+
name: `${namespace}.${actionKey}`,
|
|
92
|
+
description: action.description ?? c.surface.description ?? '',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
serverName: result.serverName,
|
|
99
|
+
version: result.version,
|
|
100
|
+
tools,
|
|
101
|
+
contracts: contracts,
|
|
102
|
+
lockfile: lockfile,
|
|
103
|
+
bootTimeMs,
|
|
104
|
+
buildTimeMs,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../../src/cli/commands/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAmB1C,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DhE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ansi } from '../constants.js';
|
|
2
|
+
import { scanDeclaredVurbPackages, getInstalledVersion, fetchLatestVersion, } from '../npm-registry.js';
|
|
3
|
+
// ─── Command ─────────────────────────────────────────────────────
|
|
4
|
+
export async function commandUpdate(args) {
|
|
5
|
+
const cwd = args.cwd;
|
|
6
|
+
process.stderr.write(`\n ${ansi.bold('Vurb Update')}\n\n`);
|
|
7
|
+
// 1. Scan declared @vurb/* packages
|
|
8
|
+
const declared = scanDeclaredVurbPackages(cwd);
|
|
9
|
+
if (declared.length === 0) {
|
|
10
|
+
process.stderr.write(` ${ansi.yellow('⚠')} No @vurb/* packages found in package.json\n\n`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
// 2. Fetch latest + current for each
|
|
14
|
+
process.stderr.write(` ${ansi.dim('Checking')} ${declared.length} package${declared.length !== 1 ? 's' : ''}${ansi.dim('...')}\n\n`);
|
|
15
|
+
const entries = await Promise.all(declared.map(async (name) => {
|
|
16
|
+
const current = getInstalledVersion(cwd, name) ?? '0.0.0';
|
|
17
|
+
const latest = await fetchLatestVersion(name) ?? current;
|
|
18
|
+
return { name, current, latest, needsUpdate: current !== latest };
|
|
19
|
+
}));
|
|
20
|
+
// 3. Display table
|
|
21
|
+
const maxName = Math.max(...entries.map(e => e.name.length));
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const padded = entry.name.padEnd(maxName + 2);
|
|
24
|
+
if (entry.needsUpdate) {
|
|
25
|
+
process.stderr.write(` ${padded} ${ansi.dim(entry.current)} ${ansi.yellow('→')} ${ansi.green(entry.latest)} ${ansi.yellow('↑ update')}\n`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
process.stderr.write(` ${padded} ${entry.current} ${ansi.green('✓ latest')}\n`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 4. Install updates
|
|
32
|
+
const toUpdate = entries.filter(e => e.needsUpdate);
|
|
33
|
+
if (toUpdate.length === 0) {
|
|
34
|
+
process.stderr.write(`\n ${ansi.green('✓')} All packages up to date.\n\n`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
process.stderr.write(`\n ${ansi.dim('Installing updates...')}\n`);
|
|
38
|
+
const installArgs = toUpdate.map(e => `${e.name}@${e.latest}`);
|
|
39
|
+
const { execSync } = await import('node:child_process');
|
|
40
|
+
try {
|
|
41
|
+
execSync(`npm install ${installArgs.join(' ')}`, {
|
|
42
|
+
cwd,
|
|
43
|
+
stdio: 'pipe',
|
|
44
|
+
timeout: 60_000,
|
|
45
|
+
});
|
|
46
|
+
process.stderr.write(`\n ${ansi.green('✓')} ${toUpdate.length} package${toUpdate.length !== 1 ? 's' : ''} updated.\n\n`);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
process.stderr.write(`\n ${ansi.red('✗')} npm install failed: ${err instanceof Error ? err.message : String(err)}\n\n`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAuH1C,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgElE"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vurb validate` — live server smoke test.
|
|
3
|
+
*
|
|
4
|
+
* Boots the server via introspection, validates all tools/prompts/resources,
|
|
5
|
+
* checks schema consistency, handler coverage, and lockfile drift.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { resolve } from 'node:path';
|
|
10
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
11
|
+
import { createHash } from 'node:crypto';
|
|
12
|
+
import { ansi } from '../constants.js';
|
|
13
|
+
import { inferServerEntry } from '../utils.js';
|
|
14
|
+
import { runIntrospection } from './introspect.js';
|
|
15
|
+
function pass(label, detail) {
|
|
16
|
+
return { status: 'pass', label, detail };
|
|
17
|
+
}
|
|
18
|
+
function warn(label, detail) {
|
|
19
|
+
return { status: 'warn', label, detail };
|
|
20
|
+
}
|
|
21
|
+
function fail(label, detail) {
|
|
22
|
+
return { status: 'fail', label, detail };
|
|
23
|
+
}
|
|
24
|
+
function printResult(r) {
|
|
25
|
+
const icon = r.status === 'pass'
|
|
26
|
+
? ansi.green('✓')
|
|
27
|
+
: r.status === 'warn'
|
|
28
|
+
? ansi.yellow('⚠')
|
|
29
|
+
: ansi.red('✗');
|
|
30
|
+
const detail = r.status === 'fail'
|
|
31
|
+
? ansi.red(r.detail)
|
|
32
|
+
: r.status === 'warn'
|
|
33
|
+
? ansi.yellow(r.detail)
|
|
34
|
+
: r.detail;
|
|
35
|
+
process.stderr.write(` ${icon} ${r.label.padEnd(20)} ${detail}\n`);
|
|
36
|
+
}
|
|
37
|
+
// ─── Lockfile drift ──────────────────────────────────────────────
|
|
38
|
+
function checkLockfileDrift(cwd, report) {
|
|
39
|
+
const lockfilePath = resolve(cwd, 'vurb.lock');
|
|
40
|
+
if (!existsSync(lockfilePath)) {
|
|
41
|
+
return warn('Lockfile', 'vurb.lock not found — run: vurb lock');
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const onDisk = readFileSync(lockfilePath, 'utf-8');
|
|
45
|
+
const freshJson = JSON.stringify(report.lockfile, null, 2);
|
|
46
|
+
const diskSha = createHash('sha256').update(onDisk).digest('hex').slice(0, 12);
|
|
47
|
+
const freshSha = createHash('sha256').update(freshJson).digest('hex').slice(0, 12);
|
|
48
|
+
if (diskSha === freshSha) {
|
|
49
|
+
return pass('Lockfile', `vurb.lock matches — no drift ${ansi.dim(`(${diskSha})`)}`);
|
|
50
|
+
}
|
|
51
|
+
return warn('Lockfile', `drift detected (disk:${diskSha} ≠ live:${freshSha}) — run: vurb lock`);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return warn('Lockfile', `could not read: ${err instanceof Error ? err.message : String(err)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ─── Tool analysis ───────────────────────────────────────────────
|
|
58
|
+
function analyzeTools(report) {
|
|
59
|
+
const results = [];
|
|
60
|
+
const contracts = report.contracts;
|
|
61
|
+
const totalNamespaces = Object.keys(contracts).length;
|
|
62
|
+
const totalTools = report.tools.length;
|
|
63
|
+
const grouped = Object.entries(contracts).filter(([, c]) => Object.keys(c.surface.actions).length > 1);
|
|
64
|
+
// Tools summary
|
|
65
|
+
if (totalTools === 0) {
|
|
66
|
+
results.push(warn('Tools', 'no tools registered'));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const groupDetail = grouped.length > 0
|
|
70
|
+
? ` (${grouped.length} grouped → ${totalTools - totalNamespaces + grouped.length} actions, ${totalNamespaces - grouped.length} flat)`
|
|
71
|
+
: '';
|
|
72
|
+
results.push(pass('Tools', `${totalTools} registered${groupDetail}`));
|
|
73
|
+
}
|
|
74
|
+
// Check for empty descriptions
|
|
75
|
+
const noDesc = report.tools.filter(t => !t.description || t.description.trim() === '');
|
|
76
|
+
if (noDesc.length > 0) {
|
|
77
|
+
results.push(warn('Descriptions', `${noDesc.length} tool${noDesc.length !== 1 ? 's' : ''} missing description`));
|
|
78
|
+
}
|
|
79
|
+
else if (totalTools > 0) {
|
|
80
|
+
results.push(pass('Descriptions', 'all tools have descriptions'));
|
|
81
|
+
}
|
|
82
|
+
// Check for duplicate action keys within groups
|
|
83
|
+
for (const [namespace, contract] of Object.entries(contracts)) {
|
|
84
|
+
const actions = Object.keys(contract.surface.actions);
|
|
85
|
+
const unique = new Set(actions);
|
|
86
|
+
if (unique.size < actions.length) {
|
|
87
|
+
results.push(fail('Duplicates', `${namespace} has duplicate action keys`));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Schema validation — count total parameters
|
|
91
|
+
let totalParams = 0;
|
|
92
|
+
for (const [, contract] of Object.entries(contracts)) {
|
|
93
|
+
for (const [, action] of Object.entries(contract.surface.actions)) {
|
|
94
|
+
const a = action;
|
|
95
|
+
if (a.parameters)
|
|
96
|
+
totalParams += Object.keys(a.parameters).length;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (totalTools > 0) {
|
|
100
|
+
results.push(pass('Schemas', `all valid (${totalParams} parameter${totalParams !== 1 ? 's' : ''} across ${totalTools} tool${totalTools !== 1 ? 's' : ''})`));
|
|
101
|
+
}
|
|
102
|
+
return results;
|
|
103
|
+
}
|
|
104
|
+
// ─── Command ─────────────────────────────────────────────────────
|
|
105
|
+
export async function commandValidate(args) {
|
|
106
|
+
const cwd = args.cwd;
|
|
107
|
+
process.stderr.write(`\n ${ansi.bold('Vurb Validate')} ${ansi.dim('— Live Server Check')}\n\n`);
|
|
108
|
+
// 1. Resolve entrypoint
|
|
109
|
+
const serverPath = args.server ?? inferServerEntry(cwd);
|
|
110
|
+
if (!serverPath) {
|
|
111
|
+
process.stderr.write(` ${ansi.red('✗')} Could not resolve server entrypoint.\n`);
|
|
112
|
+
process.stderr.write(` ${ansi.dim(' hint: create src/server.ts or use --server <path>')}\n\n`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const absEntry = resolve(cwd, serverPath);
|
|
116
|
+
if (!existsSync(absEntry)) {
|
|
117
|
+
process.stderr.write(` ${ansi.red('✗')} Entrypoint not found: ${absEntry}\n\n`);
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
printResult(pass('Entrypoint', `${serverPath} ${ansi.dim('(resolved)')}`));
|
|
121
|
+
// 2. Run introspection
|
|
122
|
+
let report;
|
|
123
|
+
try {
|
|
124
|
+
report = await runIntrospection(absEntry);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
printResult(fail('Server boot', `failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
128
|
+
process.stderr.write('\n');
|
|
129
|
+
process.exit(1);
|
|
130
|
+
return; // unreachable, but satisfies TS
|
|
131
|
+
}
|
|
132
|
+
printResult(pass('Build', `compiled in ${report.buildTimeMs}ms`));
|
|
133
|
+
printResult(pass('Server boot', `initialized in ${report.bootTimeMs}ms ${ansi.dim(`(${report.serverName} v${report.version})`)}`));
|
|
134
|
+
// 3. Tool analysis
|
|
135
|
+
const toolResults = analyzeTools(report);
|
|
136
|
+
for (const r of toolResults)
|
|
137
|
+
printResult(r);
|
|
138
|
+
// 4. Lockfile drift
|
|
139
|
+
const lockResult = checkLockfileDrift(cwd, report);
|
|
140
|
+
printResult(lockResult);
|
|
141
|
+
// 5. Summary
|
|
142
|
+
const all = [
|
|
143
|
+
pass('Entrypoint', ''),
|
|
144
|
+
pass('Build', ''),
|
|
145
|
+
pass('Server boot', ''),
|
|
146
|
+
...toolResults,
|
|
147
|
+
lockResult,
|
|
148
|
+
];
|
|
149
|
+
const passed = all.filter(r => r.status === 'pass').length;
|
|
150
|
+
const warned = all.filter(r => r.status === 'warn').length;
|
|
151
|
+
const failed = all.filter(r => r.status === 'fail').length;
|
|
152
|
+
process.stderr.write('\n');
|
|
153
|
+
if (failed > 0) {
|
|
154
|
+
process.stderr.write(` ${ansi.red(`Validation failed — ${failed} error${failed !== 1 ? 's' : ''}`)}`);
|
|
155
|
+
if (warned > 0)
|
|
156
|
+
process.stderr.write(`, ${ansi.yellow(`${warned} warning${warned !== 1 ? 's' : ''}`)}`);
|
|
157
|
+
process.stderr.write(`.\n\n`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
else if (warned > 0) {
|
|
161
|
+
process.stderr.write(` ${passed} checks passed, ${ansi.yellow(`${warned} warning${warned !== 1 ? 's' : ''}`)}.\n\n`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
process.stderr.write(` ${ansi.green(`All checks passed ✓`)}\n\n`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBjE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ansi, VURB_VERSION } from '../constants.js';
|
|
2
|
+
import { scanInstalledVurbPackages } from '../npm-registry.js';
|
|
3
|
+
export async function commandVersion(args) {
|
|
4
|
+
const cwd = args.cwd;
|
|
5
|
+
// ── Runtime info ──
|
|
6
|
+
const nodeVersion = process.version;
|
|
7
|
+
process.stderr.write('\n');
|
|
8
|
+
process.stderr.write(` ${ansi.bold('Vurb CLI')} ${ansi.cyan(VURB_VERSION)}\n`);
|
|
9
|
+
process.stderr.write(` ${ansi.bold('Node.js')} ${nodeVersion}\n`);
|
|
10
|
+
process.stderr.write(` ${ansi.bold('OS')} ${process.platform}-${process.arch}\n`);
|
|
11
|
+
// ── Installed packages ──
|
|
12
|
+
const packages = scanInstalledVurbPackages(cwd);
|
|
13
|
+
if (packages.length > 0) {
|
|
14
|
+
process.stderr.write(`\n ${ansi.dim('Installed Packages:')}\n`);
|
|
15
|
+
const maxName = Math.max(...packages.map(p => p.name.length));
|
|
16
|
+
for (const pkg of packages) {
|
|
17
|
+
const padded = pkg.name.padEnd(maxName + 2);
|
|
18
|
+
process.stderr.write(` ${ansi.dim(padded)} ${pkg.current}\n`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
process.stderr.write('\n');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAa;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAErB,qBAAqB;IACrB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,WAAW,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAEjG,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AASA,qCAAqC;AACrC,eAAO,MAAM,IAAI;uBACD,MAAM,KAAG,MAAM;wBACf,MAAM,KAAG,MAAM;yBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;uBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;;CAErB,CAAC;AAMX,eAAO,MAAM,YAAY,EAAE,MAGvB,CAAC;AAEL,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAI9D,eAAO,MAAM,gBAAgB,2BAA4B,CAAC;AAC1D,eAAO,MAAM,aAAa,2DAA4D,CAAC;AACvF,eAAO,MAAM,aAAa,8CAA+C,CAAC;AAI1E,qCAAqC;AACrC,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AASA,qCAAqC;AACrC,eAAO,MAAM,IAAI;uBACD,MAAM,KAAG,MAAM;wBACf,MAAM,KAAG,MAAM;yBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;uBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;;CAErB,CAAC;AAMX,eAAO,MAAM,YAAY,EAAE,MAGvB,CAAC;AAEL,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAI9D,eAAO,MAAM,gBAAgB,2BAA4B,CAAC;AAC1D,eAAO,MAAM,aAAa,2DAA4D,CAAC;AACvF,eAAO,MAAM,aAAa,8CAA+C,CAAC;AAI1E,qCAAqC;AACrC,eAAO,MAAM,IAAI,QA+ET,CAAC"}
|
package/dist/cli/constants.js
CHANGED
|
@@ -47,6 +47,10 @@ USAGE
|
|
|
47
47
|
vurb token Show current token status
|
|
48
48
|
vurb inspect Launch the real-time TUI dashboard
|
|
49
49
|
vurb insp --demo Launch TUI with built-in simulator
|
|
50
|
+
vurb version Show CLI and installed package versions
|
|
51
|
+
vurb update Update all @vurb/* packages to latest
|
|
52
|
+
vurb doctor Run environment diagnostics
|
|
53
|
+
vurb validate Validate server tools, schemas & lockfile
|
|
50
54
|
|
|
51
55
|
CREATE OPTIONS
|
|
52
56
|
--transport <stdio|sse> Transport layer (default: stdio)
|
|
@@ -104,5 +108,10 @@ EXAMPLES
|
|
|
104
108
|
vurb token --clear
|
|
105
109
|
vurb inspect --demo
|
|
106
110
|
vurb insp --pid 12345
|
|
111
|
+
vurb version
|
|
112
|
+
vurb update
|
|
113
|
+
vurb doctor
|
|
114
|
+
vurb validate
|
|
115
|
+
vurb validate --server ./src/server.ts
|
|
107
116
|
`.trim();
|
|
108
117
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,MAAM,EAAE,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAE,SAAS;CACV,CAAC;AAEX,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAW,CAAC,GAAG,EAAE;IACtC,IAAI,CAAC;QAAC,OAAQ,QAAQ,CAAC,oBAAoB,CAAyB,CAAC,OAAO,CAAC;IAAC,CAAC;IAC/E,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC;IAAC,CAAC;AAC7B,CAAC,CAAC,EAAE,CAAC;AAEL,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAE9D,oEAAoE;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;AAE1E,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;yDAMqC,aAAa
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,MAAM,EAAE,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAE,SAAS;CACV,CAAC;AAEX,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAW,CAAC,GAAG,EAAE;IACtC,IAAI,CAAC;QAAC,OAAQ,QAAQ,CAAC,oBAAoB,CAAyB,CAAC,OAAO,CAAC;IAAC,CAAC;IAC/E,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC;IAAC,CAAC;AAC7B,CAAC,CAAC,EAAE,CAAC;AAEL,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAE9D,oEAAoE;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;AAE1E,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;yDAMqC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyErE,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Scope prefix for Vurb packages. */
|
|
2
|
+
export declare const VURB_SCOPE = "@vurb";
|
|
3
|
+
export interface PackageVersion {
|
|
4
|
+
name: string;
|
|
5
|
+
current: string;
|
|
6
|
+
latest?: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Read `@vurb/*` dependencies from the project's `package.json`.
|
|
10
|
+
*
|
|
11
|
+
* Returns a deduplicated list of package names found across
|
|
12
|
+
* `dependencies`, `devDependencies`, and `peerDependencies`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function scanDeclaredVurbPackages(cwd: string): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Read the installed version from `node_modules/<pkg>/package.json`.
|
|
17
|
+
* Returns `undefined` if the package is not installed.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getInstalledVersion(cwd: string, pkgName: string): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Scan `node_modules/@vurb/` to discover all installed Vurb packages.
|
|
22
|
+
*
|
|
23
|
+
* Combines packages declared in `package.json` with those physically
|
|
24
|
+
* present in `node_modules` for a complete view.
|
|
25
|
+
*/
|
|
26
|
+
export declare function scanInstalledVurbPackages(cwd: string): PackageVersion[];
|
|
27
|
+
/**
|
|
28
|
+
* Fetch the latest published version of a package from npm.
|
|
29
|
+
*
|
|
30
|
+
* Uses the abbreviated metadata endpoint for speed (~100ms per call).
|
|
31
|
+
* Returns `undefined` on network/parse failure.
|
|
32
|
+
*/
|
|
33
|
+
export declare function fetchLatestVersion(pkgName: string): Promise<string | undefined>;
|
|
34
|
+
/**
|
|
35
|
+
* Enrich a list of installed packages with their latest npm versions.
|
|
36
|
+
*
|
|
37
|
+
* All fetches run in parallel for speed.
|
|
38
|
+
*/
|
|
39
|
+
export declare function enrichWithLatest(packages: PackageVersion[]): Promise<PackageVersion[]>;
|
|
40
|
+
//# sourceMappingURL=npm-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.d.ts","sourceRoot":"","sources":["../../src/cli/npm-registry.ts"],"names":[],"mappings":"AAWA,sCAAsC;AACtC,eAAO,MAAM,UAAU,UAAU,CAAC;AAOlC,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAID;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMpF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAkBvE;AAID;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAWrF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAQ5F"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared npm-registry utilities — fetch latest versions, scan installed packages.
|
|
3
|
+
*
|
|
4
|
+
* Used by `vurb version`, `vurb update`, and `vurb doctor`.
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { resolve, join } from 'node:path';
|
|
8
|
+
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
9
|
+
// ─── Constants ───────────────────────────────────────────────────
|
|
10
|
+
/** Scope prefix for Vurb packages. */
|
|
11
|
+
export const VURB_SCOPE = '@vurb';
|
|
12
|
+
/** npm registry URL for fetching latest versions. */
|
|
13
|
+
const NPM_REGISTRY = 'https://registry.npmjs.org';
|
|
14
|
+
// ─── Local Scanning ──────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Read `@vurb/*` dependencies from the project's `package.json`.
|
|
17
|
+
*
|
|
18
|
+
* Returns a deduplicated list of package names found across
|
|
19
|
+
* `dependencies`, `devDependencies`, and `peerDependencies`.
|
|
20
|
+
*/
|
|
21
|
+
export function scanDeclaredVurbPackages(cwd) {
|
|
22
|
+
const pkgPath = resolve(cwd, 'package.json');
|
|
23
|
+
if (!existsSync(pkgPath))
|
|
24
|
+
return [];
|
|
25
|
+
try {
|
|
26
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
27
|
+
const names = new Set();
|
|
28
|
+
for (const section of ['dependencies', 'devDependencies', 'peerDependencies']) {
|
|
29
|
+
const deps = pkg[section];
|
|
30
|
+
if (!deps)
|
|
31
|
+
continue;
|
|
32
|
+
for (const name of Object.keys(deps)) {
|
|
33
|
+
if (name.startsWith(`${VURB_SCOPE}/`))
|
|
34
|
+
names.add(name);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return [...names].sort();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read the installed version from `node_modules/<pkg>/package.json`.
|
|
45
|
+
* Returns `undefined` if the package is not installed.
|
|
46
|
+
*/
|
|
47
|
+
export function getInstalledVersion(cwd, pkgName) {
|
|
48
|
+
const pkgJsonPath = join(cwd, 'node_modules', ...pkgName.split('/'), 'package.json');
|
|
49
|
+
try {
|
|
50
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
51
|
+
return pkg.version;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Scan `node_modules/@vurb/` to discover all installed Vurb packages.
|
|
59
|
+
*
|
|
60
|
+
* Combines packages declared in `package.json` with those physically
|
|
61
|
+
* present in `node_modules` for a complete view.
|
|
62
|
+
*/
|
|
63
|
+
export function scanInstalledVurbPackages(cwd) {
|
|
64
|
+
const declared = scanDeclaredVurbPackages(cwd);
|
|
65
|
+
const found = new Set(declared);
|
|
66
|
+
// Also discover transitive installs not in package.json
|
|
67
|
+
const scopeDir = join(cwd, 'node_modules', VURB_SCOPE);
|
|
68
|
+
try {
|
|
69
|
+
for (const entry of readdirSync(scopeDir, { withFileTypes: true })) {
|
|
70
|
+
if (entry.isDirectory())
|
|
71
|
+
found.add(`${VURB_SCOPE}/${entry.name}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch { /* no @vurb scope installed */ }
|
|
75
|
+
const results = [];
|
|
76
|
+
for (const name of [...found].sort()) {
|
|
77
|
+
const current = getInstalledVersion(cwd, name);
|
|
78
|
+
if (current)
|
|
79
|
+
results.push({ name, current });
|
|
80
|
+
}
|
|
81
|
+
return results;
|
|
82
|
+
}
|
|
83
|
+
// ─── npm Registry ────────────────────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* Fetch the latest published version of a package from npm.
|
|
86
|
+
*
|
|
87
|
+
* Uses the abbreviated metadata endpoint for speed (~100ms per call).
|
|
88
|
+
* Returns `undefined` on network/parse failure.
|
|
89
|
+
*/
|
|
90
|
+
export async function fetchLatestVersion(pkgName) {
|
|
91
|
+
try {
|
|
92
|
+
const url = `${NPM_REGISTRY}/${pkgName}/latest`;
|
|
93
|
+
const res = await fetch(url, {
|
|
94
|
+
headers: { 'Accept': 'application/json' },
|
|
95
|
+
signal: AbortSignal.timeout(5_000),
|
|
96
|
+
});
|
|
97
|
+
if (!res.ok)
|
|
98
|
+
return undefined;
|
|
99
|
+
const data = await res.json();
|
|
100
|
+
return data.version;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Enrich a list of installed packages with their latest npm versions.
|
|
108
|
+
*
|
|
109
|
+
* All fetches run in parallel for speed.
|
|
110
|
+
*/
|
|
111
|
+
export async function enrichWithLatest(packages) {
|
|
112
|
+
const results = await Promise.all(packages.map(async (pkg) => {
|
|
113
|
+
const latest = await fetchLatestVersion(pkg.name);
|
|
114
|
+
return { name: pkg.name, current: pkg.current, latest };
|
|
115
|
+
}));
|
|
116
|
+
return results;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=npm-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../src/cli/npm-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/vurb.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { commandLock } from './commands/lock.js';
|
|
|
3
3
|
import { commandDev } from './commands/dev.js';
|
|
4
4
|
import { commandCreate } from './commands/create.js';
|
|
5
5
|
import { commandToken } from './commands/token.js';
|
|
6
|
+
import { commandVersion } from './commands/version.js';
|
|
7
|
+
import { commandUpdate } from './commands/update.js';
|
|
8
|
+
import { commandDoctor } from './commands/doctor.js';
|
|
9
|
+
import { commandValidate } from './commands/validate.js';
|
|
6
10
|
export { parseArgs } from './args.js';
|
|
7
11
|
export type { CliArgs } from './args.js';
|
|
8
12
|
export { VURB_VERSION, HELP, ansi } from './constants.js';
|
|
@@ -11,6 +15,6 @@ export { ProgressTracker, createDefaultReporter } from './progress.js';
|
|
|
11
15
|
export type { RegistryLike, PromptRegistryLike } from './registry.js';
|
|
12
16
|
export { resolveRegistry } from './registry.js';
|
|
13
17
|
export { collectConfig } from './commands/create.js';
|
|
14
|
-
export { commandLock, commandDev, commandCreate, commandToken };
|
|
18
|
+
export { commandLock, commandDev, commandCreate, commandToken, commandVersion, commandUpdate, commandDoctor, commandValidate };
|
|
15
19
|
export { ask } from './utils.js';
|
|
16
20
|
//# sourceMappingURL=vurb.d.ts.map
|
package/dist/cli/vurb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vurb.d.ts","sourceRoot":"","sources":["../../src/cli/vurb.ts"],"names":[],"mappings":";AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"vurb.d.ts","sourceRoot":"","sources":["../../src/cli/vurb.ts"],"names":[],"mappings":";AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAC/H,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/cli/vurb.js
CHANGED
|
@@ -15,13 +15,17 @@ import { commandCreate } from './commands/create.js';
|
|
|
15
15
|
import { commandRemote } from './commands/remote.js';
|
|
16
16
|
import { commandDeploy } from './commands/deploy.js';
|
|
17
17
|
import { commandToken } from './commands/token.js';
|
|
18
|
+
import { commandVersion } from './commands/version.js';
|
|
19
|
+
import { commandUpdate } from './commands/update.js';
|
|
20
|
+
import { commandDoctor } from './commands/doctor.js';
|
|
21
|
+
import { commandValidate } from './commands/validate.js';
|
|
18
22
|
// ─── Re-exports (backward compat — tests import from vurb.js) ──
|
|
19
23
|
export { parseArgs } from './args.js';
|
|
20
24
|
export { VURB_VERSION, HELP, ansi } from './constants.js';
|
|
21
25
|
export { ProgressTracker, createDefaultReporter } from './progress.js';
|
|
22
26
|
export { resolveRegistry } from './registry.js';
|
|
23
27
|
export { collectConfig } from './commands/create.js';
|
|
24
|
-
export { commandLock, commandDev, commandCreate, commandToken };
|
|
28
|
+
export { commandLock, commandDev, commandCreate, commandToken, commandVersion, commandUpdate, commandDoctor, commandValidate };
|
|
25
29
|
export { ask } from './utils.js';
|
|
26
30
|
// ─── Main ────────────────────────────────────────────────────────
|
|
27
31
|
async function main() {
|
|
@@ -67,6 +71,19 @@ async function main() {
|
|
|
67
71
|
}
|
|
68
72
|
break;
|
|
69
73
|
}
|
|
74
|
+
case 'version':
|
|
75
|
+
await commandVersion(args);
|
|
76
|
+
break;
|
|
77
|
+
case 'update':
|
|
78
|
+
await commandUpdate(args);
|
|
79
|
+
break;
|
|
80
|
+
case 'doctor':
|
|
81
|
+
await commandDoctor(args);
|
|
82
|
+
break;
|
|
83
|
+
case 'validate':
|
|
84
|
+
await commandValidate(args);
|
|
85
|
+
process.exit(0);
|
|
86
|
+
break;
|
|
70
87
|
default:
|
|
71
88
|
console.error(`Unknown command: "${args.command}"\n`);
|
|
72
89
|
console.log(HELP);
|
package/dist/cli/vurb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vurb.js","sourceRoot":"","sources":["../../src/cli/vurb.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"vurb.js","sourceRoot":"","sources":["../../src/cli/vurb.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vurb/core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
4
|
"description": "MVA (Model-View-Agent) framework for the Model Context Protocol. Structured perception packages with Presenters, cognitive guardrails, self-healing errors, action consolidation, and tRPC-style type safety — so AI agents perceive and act on your data deterministically.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|