@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.
Files changed (35) hide show
  1. package/dist/cli/args.d.ts.map +1 -1
  2. package/dist/cli/args.js +9 -0
  3. package/dist/cli/args.js.map +1 -1
  4. package/dist/cli/commands/doctor.d.ts +11 -0
  5. package/dist/cli/commands/doctor.d.ts.map +1 -0
  6. package/dist/cli/commands/doctor.js +163 -0
  7. package/dist/cli/commands/doctor.js.map +1 -0
  8. package/dist/cli/commands/introspect.d.ts +42 -0
  9. package/dist/cli/commands/introspect.d.ts.map +1 -0
  10. package/dist/cli/commands/introspect.js +107 -0
  11. package/dist/cli/commands/introspect.js.map +1 -0
  12. package/dist/cli/commands/update.d.ts +7 -0
  13. package/dist/cli/commands/update.d.ts.map +1 -0
  14. package/dist/cli/commands/update.js +53 -0
  15. package/dist/cli/commands/update.js.map +1 -0
  16. package/dist/cli/commands/validate.d.ts +3 -0
  17. package/dist/cli/commands/validate.d.ts.map +1 -0
  18. package/dist/cli/commands/validate.js +167 -0
  19. package/dist/cli/commands/validate.js.map +1 -0
  20. package/dist/cli/commands/version.d.ts +7 -0
  21. package/dist/cli/commands/version.d.ts.map +1 -0
  22. package/dist/cli/commands/version.js +23 -0
  23. package/dist/cli/commands/version.js.map +1 -0
  24. package/dist/cli/constants.d.ts.map +1 -1
  25. package/dist/cli/constants.js +9 -0
  26. package/dist/cli/constants.js.map +1 -1
  27. package/dist/cli/npm-registry.d.ts +40 -0
  28. package/dist/cli/npm-registry.d.ts.map +1 -0
  29. package/dist/cli/npm-registry.js +118 -0
  30. package/dist/cli/npm-registry.js.map +1 -0
  31. package/dist/cli/vurb.d.ts +5 -1
  32. package/dist/cli/vurb.d.ts.map +1 -1
  33. package/dist/cli/vurb.js +18 -1
  34. package/dist/cli/vurb.js.map +1 -1
  35. package/package.json +1 -1
@@ -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,CA0HjD"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
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,7 @@
1
+ /**
2
+ * `vurb update` — update all @vurb/* packages to the latest version.
3
+ * @module
4
+ */
5
+ import type { CliArgs } from '../args.js';
6
+ export declare function commandUpdate(args: CliArgs): Promise<void>;
7
+ //# sourceMappingURL=update.d.ts.map
@@ -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,3 @@
1
+ import type { CliArgs } from '../args.js';
2
+ export declare function commandValidate(args: CliArgs): Promise<void>;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * `vurb version` — display CLI version and installed @vurb/* packages.
3
+ * @module
4
+ */
5
+ import type { CliArgs } from '../args.js';
6
+ export declare function commandVersion(args: CliArgs): Promise<void>;
7
+ //# sourceMappingURL=version.d.ts.map
@@ -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,QAsET,CAAC"}
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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgErE,CAAC,IAAI,EAAE,CAAC"}
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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"}
@@ -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
@@ -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;AAInD,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;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,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);
@@ -1 +1 @@
1
- {"version":3,"file":"vurb.js","sourceRoot":"","sources":["../../src/cli/vurb.ts"],"names":[],"mappings":"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"}
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;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;AAEzD,kEAAkE;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEvE,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;AAEjC,oEAAoE;AAEpE,KAAK,UAAU,IAAI;IACf,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,QAAQ;YACT,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM;QACV,KAAK,KAAK;YACN,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACV,KAAK,MAAM;YACP,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QACV,KAAK,QAAQ;YACT,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM;QACV,KAAK,OAAO;YACR,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM;QACV,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACzD,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,CAAC,KAAK,CACT,4EAA4E;oBAC5E,iCAAiC,CACpC,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,MAAM;QACV,CAAC;QACD,KAAK,SAAS;YACV,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM;QACV,KAAK,UAAU;YACX,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QACV;YACI,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACL,CAAC;AAED,8CAA8C;AAC9C,SAAS,SAAS;IACd,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACxE,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,KAAK,MAAM,CAAC;AAC3B,CAAC;AACD,IAAI,SAAS,EAAE,EAAE,CAAC;IACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vurb/core",
3
- "version": "3.11.1",
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",