@studio-foundation/cli 0.11.1 → 0.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/README.md +33 -30
- package/dist/commands/init.d.ts +7 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -21
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrations.d.ts.map +1 -1
- package/dist/commands/integrations.js +20 -28
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/marketplace.d.ts +17 -0
- package/dist/commands/marketplace.d.ts.map +1 -0
- package/dist/commands/marketplace.js +132 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/plugin.d.ts +8 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +42 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/registry/audit.d.ts +2 -1
- package/dist/commands/registry/audit.d.ts.map +1 -1
- package/dist/commands/registry/audit.js +32 -22
- package/dist/commands/registry/audit.js.map +1 -1
- package/dist/commands/registry/index.d.ts.map +1 -1
- package/dist/commands/registry/index.js +4 -3
- package/dist/commands/registry/index.js.map +1 -1
- package/dist/commands/registry/install.d.ts +4 -2
- package/dist/commands/registry/install.d.ts.map +1 -1
- package/dist/commands/registry/install.js +132 -73
- package/dist/commands/registry/install.js.map +1 -1
- package/dist/commands/registry/remove.d.ts.map +1 -1
- package/dist/commands/registry/remove.js +11 -25
- package/dist/commands/registry/remove.js.map +1 -1
- package/dist/commands/registry/search.d.ts +1 -1
- package/dist/commands/registry/search.d.ts.map +1 -1
- package/dist/commands/registry/search.js +33 -17
- package/dist/commands/registry/search.js.map +1 -1
- package/dist/commands/registry/sync.d.ts +1 -0
- package/dist/commands/registry/sync.d.ts.map +1 -1
- package/dist/commands/registry/sync.js +46 -12
- package/dist/commands/registry/sync.js.map +1 -1
- package/dist/commands/registry/update.d.ts +14 -2
- package/dist/commands/registry/update.d.ts.map +1 -1
- package/dist/commands/registry/update.js +70 -18
- package/dist/commands/registry/update.js.map +1 -1
- package/dist/commands/templates.d.ts.map +1 -1
- package/dist/commands/templates.js +13 -16
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +6 -2
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/upgrade.d.ts +3 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +79 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/generated/bundled-assets.d.ts +1 -1
- package/dist/generated/bundled-assets.d.ts.map +1 -1
- package/dist/generated/bundled-assets.js +77 -2
- package/dist/generated/bundled-assets.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/output/map-progress.d.ts +11 -1
- package/dist/output/map-progress.d.ts.map +1 -1
- package/dist/output/map-progress.js +43 -4
- package/dist/output/map-progress.js.map +1 -1
- package/dist/output/progress.d.ts.map +1 -1
- package/dist/output/progress.js +1 -1
- package/dist/output/progress.js.map +1 -1
- package/dist/registry/cache.d.ts +1 -1
- package/dist/registry/cache.d.ts.map +1 -1
- package/dist/registry/cache.js +3 -2
- package/dist/registry/cache.js.map +1 -1
- package/dist/registry/client.d.ts +20 -11
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/client.js +145 -45
- package/dist/registry/client.js.map +1 -1
- package/dist/registry/constraints.d.ts +17 -0
- package/dist/registry/constraints.d.ts.map +1 -0
- package/dist/registry/constraints.js +30 -0
- package/dist/registry/constraints.js.map +1 -0
- package/dist/registry/dependency-spec.d.ts +15 -0
- package/dist/registry/dependency-spec.d.ts.map +1 -0
- package/dist/registry/dependency-spec.js +17 -0
- package/dist/registry/dependency-spec.js.map +1 -0
- package/dist/registry/git-source.d.ts +16 -0
- package/dist/registry/git-source.d.ts.map +1 -0
- package/dist/registry/git-source.js +92 -0
- package/dist/registry/git-source.js.map +1 -0
- package/dist/registry/legacy-paths.d.ts +3 -0
- package/dist/registry/legacy-paths.d.ts.map +1 -0
- package/dist/registry/legacy-paths.js +31 -0
- package/dist/registry/legacy-paths.js.map +1 -0
- package/dist/registry/lockfile.d.ts +5 -1
- package/dist/registry/lockfile.d.ts.map +1 -1
- package/dist/registry/lockfile.js +28 -7
- package/dist/registry/lockfile.js.map +1 -1
- package/dist/registry/marketplaces.d.ts +23 -0
- package/dist/registry/marketplaces.d.ts.map +1 -0
- package/dist/registry/marketplaces.js +83 -0
- package/dist/registry/marketplaces.js.map +1 -0
- package/dist/registry/registry-index.d.ts +36 -0
- package/dist/registry/registry-index.d.ts.map +1 -0
- package/dist/registry/registry-index.js +57 -0
- package/dist/registry/registry-index.js.map +1 -0
- package/dist/registry/resolver.d.ts +15 -3
- package/dist/registry/resolver.d.ts.map +1 -1
- package/dist/registry/resolver.js +82 -72
- package/dist/registry/resolver.js.map +1 -1
- package/dist/registry/seed.d.ts +10 -0
- package/dist/registry/seed.d.ts.map +1 -0
- package/dist/registry/seed.js +25 -0
- package/dist/registry/seed.js.map +1 -0
- package/dist/registry/types.d.ts +66 -7
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +28 -8
- package/dist/registry/types.js.map +1 -1
- package/dist/registry/verify.d.ts +15 -0
- package/dist/registry/verify.d.ts.map +1 -0
- package/dist/registry/verify.js +86 -0
- package/dist/registry/verify.js.map +1 -0
- package/dist/upgrade.d.ts +28 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +64 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/version-guard.d.ts +3 -1
- package/dist/version-guard.d.ts.map +1 -1
- package/dist/version-guard.js +8 -2
- package/dist/version-guard.js.map +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { RegistryCache } from '../registry/cache.js';
|
|
4
|
+
import { RegistryClient } from '../registry/client.js';
|
|
5
|
+
import { addMarketplace, loadMarketplaces, marketplaceNameFromUrl, removeMarketplace, } from '../registry/marketplaces.js';
|
|
6
|
+
import { DEFAULT_MARKETPLACE } from '../registry/dependency-spec.js';
|
|
7
|
+
export async function addMarketplaceCommand(url, options = {}) {
|
|
8
|
+
const marketplace = { name: options.name ?? marketplaceNameFromUrl(url), url };
|
|
9
|
+
// Fetching first is what makes the confirmation worth anything: the user sees
|
|
10
|
+
// the origin and what it actually serves, not just the URL they typed.
|
|
11
|
+
process.stdout.write(`Fetching ${chalk.bold(marketplace.url)}... `);
|
|
12
|
+
const index = await new RegistryClient(marketplace).fetchIndex();
|
|
13
|
+
console.log(chalk.green(`✓ ${index.packages.length} packages`));
|
|
14
|
+
console.log(`\n name: ${chalk.bold(marketplace.name)}`);
|
|
15
|
+
console.log(` origin: ${marketplace.url}`);
|
|
16
|
+
console.log(` packages: ${index.packages.map(p => p.name).slice(0, 8).join(', ')}${index.packages.length > 8 ? ', …' : ''}`);
|
|
17
|
+
console.log(chalk.yellow(`\n Packages installed from a marketplace run on your machine with your credentials.`));
|
|
18
|
+
if (!options.yes) {
|
|
19
|
+
const { confirm } = await import('@inquirer/prompts');
|
|
20
|
+
const proceed = await confirm({ message: `Register '${marketplace.name}'?`, default: false });
|
|
21
|
+
if (!proceed) {
|
|
22
|
+
console.log('Cancelled.');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
await addMarketplace(marketplace);
|
|
27
|
+
await new RegistryCache(undefined, marketplace.name).write(index);
|
|
28
|
+
console.log(chalk.green(`✓ Registered '${marketplace.name}'`));
|
|
29
|
+
console.log(chalk.gray(` Install from it: studio registry install ${marketplace.name}:<package>`));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Assert every externally-hosted entry of an index against its payload. Run by a
|
|
33
|
+
* marketplace's CI, where it is the only gate: a `git` entry is merged as a URL,
|
|
34
|
+
* so nothing else ever compares what it claims with what it serves.
|
|
35
|
+
*/
|
|
36
|
+
export async function validateMarketplaceCommand(indexPath = 'index.json') {
|
|
37
|
+
const { readFile } = await import('node:fs/promises');
|
|
38
|
+
const { materializeGit } = await import('../registry/git-source.js');
|
|
39
|
+
const { verifyPayload } = await import('../registry/verify.js');
|
|
40
|
+
const { RegistryClient } = await import('../registry/client.js');
|
|
41
|
+
const index = JSON.parse(await readFile(indexPath, 'utf8'));
|
|
42
|
+
const hosted = index.packages.filter(p => p.source?.type === 'git');
|
|
43
|
+
if (hosted.length === 0) {
|
|
44
|
+
console.log(chalk.gray('No git-sourced entries to validate.'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let failed = false;
|
|
48
|
+
for (const entry of hosted) {
|
|
49
|
+
const source = entry.source;
|
|
50
|
+
try {
|
|
51
|
+
await materializeGit(source);
|
|
52
|
+
const problems = verifyPayload(await new RegistryClient().fetchDirectoryFiles(source), entry);
|
|
53
|
+
if (problems.length === 0) {
|
|
54
|
+
console.log(chalk.green(` ✓ ${entry.name} @ ${source.sha.slice(0, 7)}`));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
failed = true;
|
|
58
|
+
console.log(chalk.red(` ✗ ${entry.name}`));
|
|
59
|
+
for (const problem of problems)
|
|
60
|
+
console.log(` ${problem}`);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
failed = true;
|
|
64
|
+
console.log(chalk.red(` ✗ ${entry.name} — ${err instanceof Error ? err.message : err}`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (failed)
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
export async function listMarketplacesCommand() {
|
|
71
|
+
const marketplaces = await loadMarketplaces();
|
|
72
|
+
console.log();
|
|
73
|
+
for (const marketplace of marketplaces) {
|
|
74
|
+
const suffix = marketplace.name === DEFAULT_MARKETPLACE ? chalk.gray(' (default)') : '';
|
|
75
|
+
console.log(` ${chalk.bold(marketplace.name)}${suffix}`);
|
|
76
|
+
console.log(` ${chalk.gray(marketplace.url)}`);
|
|
77
|
+
}
|
|
78
|
+
console.log();
|
|
79
|
+
}
|
|
80
|
+
export async function removeMarketplaceCommand(name) {
|
|
81
|
+
await removeMarketplace(name);
|
|
82
|
+
console.log(chalk.green(`✓ Removed '${name}'`));
|
|
83
|
+
console.log(chalk.gray(' Packages already installed from it are untouched.'));
|
|
84
|
+
}
|
|
85
|
+
export function createMarketplaceCommand() {
|
|
86
|
+
const marketplace = new Command('marketplace')
|
|
87
|
+
.description('Manage the registries packages are installed from');
|
|
88
|
+
marketplace
|
|
89
|
+
.command('add <url>')
|
|
90
|
+
.description('Register a marketplace repository')
|
|
91
|
+
.option('--name <name>', 'Name to qualify its packages with (defaults to the repository name)')
|
|
92
|
+
.option('-y, --yes', 'Skip the confirmation prompt')
|
|
93
|
+
.action(async (url, options) => {
|
|
94
|
+
try {
|
|
95
|
+
await addMarketplaceCommand(url, options);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
marketplace
|
|
103
|
+
.command('list')
|
|
104
|
+
.description('List registered marketplaces')
|
|
105
|
+
.action(() => listMarketplacesCommand());
|
|
106
|
+
marketplace
|
|
107
|
+
.command('validate [index]')
|
|
108
|
+
.description("Check a marketplace index's git-sourced entries against their payloads")
|
|
109
|
+
.action(async (index) => {
|
|
110
|
+
try {
|
|
111
|
+
await validateMarketplaceCommand(index);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
marketplace
|
|
119
|
+
.command('remove <name>')
|
|
120
|
+
.description('Unregister a marketplace')
|
|
121
|
+
.action(async (name) => {
|
|
122
|
+
try {
|
|
123
|
+
await removeMarketplaceCommand(name);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return marketplace;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/commands/marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* `studio plugin add` is the documented verb for adding to an existing `.studio/`
|
|
4
|
+
* (ADR 0002); `studio registry install` stays as the name muscle memory and older
|
|
5
|
+
* docs use.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createPluginCommand(): Command;
|
|
8
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAoB7C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { installCommand } from './registry/install.js';
|
|
5
|
+
import { removeCommand } from './registry/remove.js';
|
|
6
|
+
import { RegistryLockfile } from '../registry/lockfile.js';
|
|
7
|
+
import { findStudioDir } from '../studio-dir.js';
|
|
8
|
+
async function listCommand() {
|
|
9
|
+
const studioDir = await findStudioDir(process.cwd()) ?? resolve(process.cwd(), '.studio');
|
|
10
|
+
const installed = (await new RegistryLockfile(studioDir).list())
|
|
11
|
+
.filter((entry) => entry.type !== 'template');
|
|
12
|
+
if (installed.length === 0) {
|
|
13
|
+
console.log(chalk.gray('No plugins installed.'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
for (const entry of installed) {
|
|
17
|
+
console.log(` ${chalk.bold(entry.name)} ${chalk.gray(`v${entry.version}`)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `studio plugin add` is the documented verb for adding to an existing `.studio/`
|
|
22
|
+
* (ADR 0002); `studio registry install` stays as the name muscle memory and older
|
|
23
|
+
* docs use.
|
|
24
|
+
*/
|
|
25
|
+
export function createPluginCommand() {
|
|
26
|
+
const plugin = new Command('plugin').description('Add plugins to an existing project');
|
|
27
|
+
plugin
|
|
28
|
+
.command('add <name>')
|
|
29
|
+
.description('Install a plugin (use name@version for a specific version)')
|
|
30
|
+
.option('--force', 'Reinstall even if already installed')
|
|
31
|
+
.action((name, options) => installCommand(name, options));
|
|
32
|
+
plugin
|
|
33
|
+
.command('remove <name>')
|
|
34
|
+
.description('Uninstall a plugin')
|
|
35
|
+
.action((name) => removeCommand(name));
|
|
36
|
+
plugin
|
|
37
|
+
.command('list')
|
|
38
|
+
.description('List installed plugins')
|
|
39
|
+
.action(() => listCommand());
|
|
40
|
+
return plugin;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,UAAU,WAAW;IACxB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAEhD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAEvF,MAAM;SACH,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;SACxD,MAAM,CAAC,CAAC,IAAY,EAAE,OAA4B,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzF,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/audit.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/audit.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgDtF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBlD"}
|
|
@@ -5,14 +5,8 @@ import { existsSync } from 'node:fs';
|
|
|
5
5
|
import { createHash } from 'node:crypto';
|
|
6
6
|
import { RegistryLockfile } from '../../registry/lockfile.js';
|
|
7
7
|
import { findStudioDir } from '../../studio-dir.js';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
tool: '.tool.yaml',
|
|
11
|
-
pipeline: '.pipeline.yaml',
|
|
12
|
-
integration: '.integration.yaml',
|
|
13
|
-
agent: '.agent.yaml',
|
|
14
|
-
skill: '.skill.md',
|
|
15
|
-
};
|
|
8
|
+
import { legacyInstallPaths } from '../../registry/legacy-paths.js';
|
|
9
|
+
import { constraintsOf, formatConstraints, unsatisfied } from '../../registry/constraints.js';
|
|
16
10
|
export async function auditPackages(options = {}) {
|
|
17
11
|
const studioDir = options.studioDir ??
|
|
18
12
|
(await findStudioDir(options.cwd ?? process.cwd()) ?? resolve(process.cwd(), '.studio'));
|
|
@@ -20,23 +14,40 @@ export async function auditPackages(options = {}) {
|
|
|
20
14
|
const installed = await lockfile.list();
|
|
21
15
|
const results = [];
|
|
22
16
|
for (const entry of installed) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
// The installed version against the ranges its dependents declared. Both live
|
|
18
|
+
// in the lockfile, so a graph that drifted since install is caught offline.
|
|
19
|
+
const broken = unsatisfied(entry.version, constraintsOf(entry));
|
|
20
|
+
const conflict = broken.length === 0 ? null : {
|
|
21
|
+
name: entry.name,
|
|
22
|
+
ok: false,
|
|
23
|
+
status: 'conflict',
|
|
24
|
+
detail: `v${entry.version} does not satisfy ${formatConstraints(broken)}`,
|
|
25
|
+
};
|
|
26
|
+
// A template's payload is a whole tree hashed against remote paths at download
|
|
27
|
+
// time — not reconstructible from disk. Only plugins are verifiable here.
|
|
28
|
+
const legacy = entry.files === undefined;
|
|
29
|
+
const files = entry.type === 'template'
|
|
30
|
+
? []
|
|
31
|
+
: entry.files ?? legacyInstallPaths(entry.name, entry.type);
|
|
32
|
+
if (files.length === 0) {
|
|
33
|
+
results.push(conflict ?? { name: entry.name, ok: true, status: 'ok' });
|
|
28
34
|
continue;
|
|
29
35
|
}
|
|
30
|
-
|
|
31
|
-
const filePath = resolve(destDir, `${entry.name}${ext}`);
|
|
32
|
-
if (!existsSync(filePath)) {
|
|
36
|
+
if (files.some((f) => !existsSync(resolve(studioDir, f)))) {
|
|
33
37
|
results.push({ name: entry.name, ok: false, status: 'missing' });
|
|
34
38
|
continue;
|
|
35
39
|
}
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
+
// Pre-`files` entries were hashed over content alone; the path went in later.
|
|
41
|
+
const hash = createHash('sha256');
|
|
42
|
+
for (const relPath of files) {
|
|
43
|
+
const content = await readFile(resolve(studioDir, relPath), 'utf8');
|
|
44
|
+
hash.update(legacy ? content : relPath + content);
|
|
45
|
+
}
|
|
46
|
+
if (hash.digest('hex') !== entry.sha256) {
|
|
47
|
+
results.push({ name: entry.name, ok: false, status: 'tampered' });
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
results.push(conflict ?? { name: entry.name, ok: true, status: 'ok' });
|
|
40
51
|
}
|
|
41
52
|
return results;
|
|
42
53
|
}
|
|
@@ -53,8 +64,7 @@ export async function auditCommand() {
|
|
|
53
64
|
}
|
|
54
65
|
else {
|
|
55
66
|
hasIssues = true;
|
|
56
|
-
|
|
57
|
-
console.log(` ✗ ${r.name} — ${label}`);
|
|
67
|
+
console.log(` ✗ ${r.name} — ${chalk.red(r.status.toUpperCase())}${r.detail ? `: ${r.detail}` : ''}`);
|
|
58
68
|
}
|
|
59
69
|
}
|
|
60
70
|
if (hasIssues) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/registry/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/registry/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAc9F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAwB,EAAE;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,8EAA8E;QAC9E,4EAA4E;QAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,qBAAqB,iBAAiB,CAAC,MAAM,CAAC,EAAE;SAC1E,CAAC;QAEF,+EAA+E;QAC/E,0EAA0E;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QAED,8EAA8E;QAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qEAAqE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,IAAI,OAAO,CAsD/C"}
|
|
@@ -12,7 +12,7 @@ export function createRegistryCommand() {
|
|
|
12
12
|
registry
|
|
13
13
|
.command('search <query>')
|
|
14
14
|
.description('Search packages in the registry')
|
|
15
|
-
.option('--type <type>', 'Filter by type
|
|
15
|
+
.option('--type <type>', 'Filter by packaging type (template, plugin) or content kind (tool, agent, skill, integration, pipeline, contract, input)')
|
|
16
16
|
.action((query, options) => searchCommand(query, options));
|
|
17
17
|
registry
|
|
18
18
|
.command('browse')
|
|
@@ -29,8 +29,9 @@ export function createRegistryCommand() {
|
|
|
29
29
|
.action((name) => removeCommand(name));
|
|
30
30
|
registry
|
|
31
31
|
.command('update <name>')
|
|
32
|
-
.description('Update an installed package to
|
|
33
|
-
.
|
|
32
|
+
.description('Update an installed package to the highest version its dependents accept')
|
|
33
|
+
.option('--latest', 'Update to the latest published version, even if it breaks a declared range')
|
|
34
|
+
.action((name, options) => updateCommand(name, options));
|
|
34
35
|
registry
|
|
35
36
|
.command('outdated')
|
|
36
37
|
.description('List packages with available updates')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;SACrC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErD,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;SACrC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErD,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,eAAe,EAAE,0HAA0H,CAAC;SACnJ,MAAM,CAAC,CAAC,KAAa,EAAE,OAA0B,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAExF,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEjC,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;SACxD,MAAM,CAAC,CAAC,IAAY,EAAE,OAA4B,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzF,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,UAAU,EAAE,4EAA4E,CAAC;SAChG,MAAM,CAAC,CAAC,IAAY,EAAE,OAA6B,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzF,QAAQ;SACL,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnC,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,MAAM,CAAC,CAAC,IAAY,EAAE,OAA6B,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1F,QAAQ;SACL,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhC,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -4,13 +4,15 @@ interface InstallOptions {
|
|
|
4
4
|
force?: boolean;
|
|
5
5
|
cwd?: string;
|
|
6
6
|
requiredBy?: string;
|
|
7
|
+
/** Range `requiredBy` declared on this package, recorded for later updates. */
|
|
8
|
+
requiredRange?: string;
|
|
7
9
|
/** Skip interactive prompts (auto-accept). Use when called under a spinner. */
|
|
8
10
|
interactive?: boolean;
|
|
9
11
|
_depth?: number;
|
|
10
12
|
_metaCache?: Map<string, PackageMetadata>;
|
|
11
13
|
}
|
|
12
|
-
export declare function installPackage(
|
|
13
|
-
export declare function installCommand(
|
|
14
|
+
export declare function installPackage(ref: string, options?: InstallOptions): Promise<void>;
|
|
15
|
+
export declare function installCommand(ref: string, options?: {
|
|
14
16
|
force?: boolean;
|
|
15
17
|
}): Promise<void>;
|
|
16
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/install.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,eAAe,EAA2B,MAAM,yBAAyB,CAAC;AA8DxF,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAyKD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB7F;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlG"}
|