@amodalai/amodal 0.2.0 → 0.2.2
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/CHANGELOG.md +39 -0
- package/dist/src/commands/connect-channel.d.ts +11 -0
- package/dist/src/commands/connect-channel.d.ts.map +1 -0
- package/dist/src/commands/connect-channel.js +169 -0
- package/dist/src/commands/connect-channel.js.map +1 -0
- package/dist/src/commands/connect.d.ts +3 -1
- package/dist/src/commands/connect.d.ts.map +1 -1
- package/dist/src/commands/connect.js +27 -16
- package/dist/src/commands/connect.js.map +1 -1
- package/dist/src/commands/groups/connect.d.ts +8 -0
- package/dist/src/commands/groups/connect.d.ts.map +1 -0
- package/dist/src/commands/groups/connect.js +17 -0
- package/dist/src/commands/groups/connect.js.map +1 -0
- package/dist/src/commands/groups/pkg.d.ts.map +1 -1
- package/dist/src/commands/groups/pkg.js +0 -12
- package/dist/src/commands/groups/pkg.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +3 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +4 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/inspect.d.ts.map +1 -1
- package/dist/src/commands/inspect.js +32 -38
- package/dist/src/commands/inspect.js.map +1 -1
- package/dist/src/commands/install-pkg.d.ts +5 -5
- package/dist/src/commands/install-pkg.d.ts.map +1 -1
- package/dist/src/commands/install-pkg.js +35 -77
- package/dist/src/commands/install-pkg.js.map +1 -1
- package/dist/src/commands/uninstall.d.ts +2 -2
- package/dist/src/commands/uninstall.d.ts.map +1 -1
- package/dist/src/commands/uninstall.js +6 -32
- package/dist/src/commands/uninstall.js.map +1 -1
- package/dist/src/commands/validate.d.ts.map +1 -1
- package/dist/src/commands/validate.js +15 -21
- package/dist/src/commands/validate.js.map +1 -1
- package/dist/src/shared/tarball.js +1 -1
- package/dist/src/shared/tarball.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/commands/command-exports.test.ts +1 -1
- package/src/commands/connect-channel.ts +197 -0
- package/src/commands/connect.test.ts +28 -40
- package/src/commands/connect.ts +30 -24
- package/src/commands/groups/connect.ts +20 -0
- package/src/commands/groups/pkg.ts +0 -12
- package/src/commands/index.ts +5 -1
- package/src/commands/init.test.ts +2 -2
- package/src/commands/init.ts +5 -1
- package/src/commands/inspect.test.ts +1 -18
- package/src/commands/inspect.ts +31 -36
- package/src/commands/install-pkg.test.ts +39 -73
- package/src/commands/install-pkg.ts +38 -87
- package/src/commands/uninstall.test.ts +11 -51
- package/src/commands/uninstall.ts +7 -36
- package/src/commands/validate.test.ts +5 -26
- package/src/commands/validate.ts +15 -20
- package/src/e2e-commands.test.ts +0 -1
- package/src/e2e-plugins.test.ts +0 -1
- package/src/e2e.test.ts +0 -89
- package/src/shared/tarball.ts +1 -1
- package/dist/src/commands/diff.d.ts +0 -17
- package/dist/src/commands/diff.d.ts.map +0 -1
- package/dist/src/commands/diff.js +0 -118
- package/dist/src/commands/diff.js.map +0 -1
- package/dist/src/commands/list.d.ts +0 -18
- package/dist/src/commands/list.d.ts.map +0 -1
- package/dist/src/commands/list.js +0 -82
- package/dist/src/commands/list.js.map +0 -1
- package/dist/src/commands/publish.d.ts +0 -18
- package/dist/src/commands/publish.d.ts.map +0 -1
- package/dist/src/commands/publish.js +0 -121
- package/dist/src/commands/publish.js.map +0 -1
- package/dist/src/commands/search.d.ts +0 -19
- package/dist/src/commands/search.d.ts.map +0 -1
- package/dist/src/commands/search.js +0 -97
- package/dist/src/commands/search.js.map +0 -1
- package/dist/src/commands/update.d.ts +0 -19
- package/dist/src/commands/update.d.ts.map +0 -1
- package/dist/src/commands/update.js +0 -158
- package/dist/src/commands/update.js.map +0 -1
- package/src/commands/diff.test.ts +0 -165
- package/src/commands/diff.ts +0 -141
- package/src/commands/list.test.ts +0 -141
- package/src/commands/list.ts +0 -99
- package/src/commands/publish.test.ts +0 -169
- package/src/commands/publish.ts +0 -141
- package/src/commands/search.test.ts +0 -171
- package/src/commands/search.ts +0 -120
- package/src/commands/update.test.ts +0 -256
- package/src/commands/update.ts +0 -196
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
import { readFile, readdir, stat, writeFile } from 'node:fs/promises';
|
|
7
|
-
import { execFile } from 'node:child_process';
|
|
8
|
-
import * as path from 'node:path';
|
|
9
|
-
import { promisify } from 'node:util';
|
|
10
|
-
import { KNOWN_CONTENT_DIRS } from '@amodalai/core';
|
|
11
|
-
const execFileAsync = promisify(execFile);
|
|
12
|
-
const DEFAULT_REGISTRY = 'https://registry.amodalai.com';
|
|
13
|
-
/**
|
|
14
|
-
* Publish a package to the registry.
|
|
15
|
-
* Returns 0 on success, 1 on error.
|
|
16
|
-
*/
|
|
17
|
-
export async function runPublish(options = {}) {
|
|
18
|
-
const cwd = options.cwd ?? process.cwd();
|
|
19
|
-
const registry = options.registry ?? DEFAULT_REGISTRY;
|
|
20
|
-
// Validate package.json exists
|
|
21
|
-
const pkgJsonPath = path.join(cwd, 'package.json');
|
|
22
|
-
let pkgName;
|
|
23
|
-
let pkgVersion;
|
|
24
|
-
let manifestName;
|
|
25
|
-
try {
|
|
26
|
-
const content = await readFile(pkgJsonPath, 'utf-8');
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- config JSON
|
|
28
|
-
const pkg = JSON.parse(content);
|
|
29
|
-
pkgName = String(pkg['name'] ?? '');
|
|
30
|
-
pkgVersion = String(pkg['version'] ?? '');
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
32
|
-
const amodal = pkg['amodal'];
|
|
33
|
-
if (!amodal || typeof amodal !== 'object' || !amodal['name']) {
|
|
34
|
-
process.stderr.write('[publish] package.json must have an "amodal" block with a "name" field.\n');
|
|
35
|
-
return 1;
|
|
36
|
-
}
|
|
37
|
-
manifestName = String(amodal['name']);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
41
|
-
process.stderr.write(`[publish] Failed to read package.json: ${msg}\n`);
|
|
42
|
-
return 1;
|
|
43
|
-
}
|
|
44
|
-
// Scan for known content directories and auto-populate `contains`
|
|
45
|
-
const contains = [];
|
|
46
|
-
for (const dir of KNOWN_CONTENT_DIRS) {
|
|
47
|
-
try {
|
|
48
|
-
const s = await stat(path.join(cwd, dir));
|
|
49
|
-
if (s.isDirectory()) {
|
|
50
|
-
const entries = await readdir(path.join(cwd, dir));
|
|
51
|
-
if (entries.length > 0)
|
|
52
|
-
contains.push(dir);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// Directory doesn't exist
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (contains.length === 0) {
|
|
60
|
-
process.stderr.write('[publish] Warning: no known amodal directories found (connections, skills, etc.).\n');
|
|
61
|
-
}
|
|
62
|
-
// Write `contains` into package.json before publishing
|
|
63
|
-
try {
|
|
64
|
-
const rawContent = await readFile(pkgJsonPath, 'utf-8');
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- config JSON
|
|
66
|
-
const pkgObj = JSON.parse(rawContent);
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
68
|
-
const amodal = pkgObj['amodal'];
|
|
69
|
-
amodal['contains'] = contains;
|
|
70
|
-
await writeFile(pkgJsonPath, JSON.stringify(pkgObj, null, 2) + '\n', 'utf-8');
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Non-fatal — publish will proceed without contains
|
|
74
|
-
}
|
|
75
|
-
if (options.dryRun) {
|
|
76
|
-
process.stderr.write(`[publish] Dry run: would publish ${pkgName}@${pkgVersion}\n`);
|
|
77
|
-
process.stderr.write(`[publish] Name: ${manifestName}\n`);
|
|
78
|
-
process.stderr.write(`[publish] Contains: ${contains.length > 0 ? contains.join(', ') : '(none)'}\n`);
|
|
79
|
-
process.stderr.write(`[publish] Registry: ${registry}\n`);
|
|
80
|
-
return 0;
|
|
81
|
-
}
|
|
82
|
-
process.stderr.write(`[publish] Publishing ${pkgName}@${pkgVersion} to ${registry}...\n`);
|
|
83
|
-
try {
|
|
84
|
-
await execFileAsync('npm', ['publish', '--registry', registry], {
|
|
85
|
-
cwd,
|
|
86
|
-
timeout: 120_000,
|
|
87
|
-
});
|
|
88
|
-
process.stderr.write(`[publish] Published ${pkgName}@${pkgVersion}\n`);
|
|
89
|
-
return 0;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
93
|
-
if (msg.includes('403') || msg.includes('409') || msg.includes('EPUBLISHCONFLICT')) {
|
|
94
|
-
process.stderr.write(`[publish] Version ${pkgVersion} already exists. Bump the version and try again.\n`);
|
|
95
|
-
}
|
|
96
|
-
else if (msg.includes('ENEEDAUTH') || msg.includes('E401')) {
|
|
97
|
-
process.stderr.write(`[publish] Not authenticated. Run \`npm login --registry ${registry}\` first.\n`);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
process.stderr.write(`[publish] Publish failed: ${msg}\n`);
|
|
101
|
-
}
|
|
102
|
-
return 1;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
export const publishCommand = {
|
|
106
|
-
command: 'publish',
|
|
107
|
-
describe: 'Publish a package to the registry',
|
|
108
|
-
builder: (yargs) => yargs
|
|
109
|
-
.option('dry-run', { type: 'boolean', default: false, describe: 'Show what would be published' })
|
|
110
|
-
.option('registry', { type: 'string', describe: 'Registry URL' }),
|
|
111
|
-
handler: async (argv) => {
|
|
112
|
-
const code = await runPublish({
|
|
113
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
114
|
-
dryRun: argv['dryRun'],
|
|
115
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
116
|
-
registry: argv['registry'],
|
|
117
|
-
});
|
|
118
|
-
process.exit(code);
|
|
119
|
-
},
|
|
120
|
-
};
|
|
121
|
-
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
import type { CommandModule } from 'yargs';
|
|
7
|
-
export interface SearchOptions {
|
|
8
|
-
cwd?: string;
|
|
9
|
-
query?: string;
|
|
10
|
-
tag?: string;
|
|
11
|
-
json?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Search the registry for packages.
|
|
15
|
-
* Returns 0 on success, 1 on error.
|
|
16
|
-
*/
|
|
17
|
-
export declare function runSearch(options?: SearchOptions): Promise<number>;
|
|
18
|
-
export declare const searchCommand: CommandModule;
|
|
19
|
-
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAQzC,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyE5E;AAED,eAAO,MAAM,aAAa,EAAE,aAmB3B,CAAC"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
import { ensureNpmContext, fromNpmName, npmSearch, } from '@amodalai/core';
|
|
7
|
-
import { findRepoRoot } from '../shared/repo-discovery.js';
|
|
8
|
-
/**
|
|
9
|
-
* Search the registry for packages.
|
|
10
|
-
* Returns 0 on success, 1 on error.
|
|
11
|
-
*/
|
|
12
|
-
export async function runSearch(options = {}) {
|
|
13
|
-
let repoPath;
|
|
14
|
-
try {
|
|
15
|
-
repoPath = findRepoRoot(options.cwd);
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
// Not in a repo — use temp context
|
|
19
|
-
}
|
|
20
|
-
let paths;
|
|
21
|
-
try {
|
|
22
|
-
paths = await ensureNpmContext(repoPath ?? process.cwd());
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
26
|
-
process.stderr.write(`[search] Failed to set up npm context: ${msg}\n`);
|
|
27
|
-
return 1;
|
|
28
|
-
}
|
|
29
|
-
// Build query
|
|
30
|
-
let query = '@amodalai/';
|
|
31
|
-
if (options.tag) {
|
|
32
|
-
query += `${options.tag}-`;
|
|
33
|
-
}
|
|
34
|
-
if (options.query) {
|
|
35
|
-
query += options.query;
|
|
36
|
-
}
|
|
37
|
-
process.stderr.write(`[search] Searching for "${query}"...\n`);
|
|
38
|
-
let results;
|
|
39
|
-
try {
|
|
40
|
-
results = await npmSearch(paths, query);
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
44
|
-
process.stderr.write(`[search] Search failed: ${msg}\n`);
|
|
45
|
-
return 1;
|
|
46
|
-
}
|
|
47
|
-
// Filter to @amodalai/ packages only
|
|
48
|
-
results = results.filter((r) => r.name.startsWith('@amodalai/'));
|
|
49
|
-
// Filter by tag if specified (match against npm name prefix)
|
|
50
|
-
if (options.tag) {
|
|
51
|
-
const prefix = `@amodalai/${options.tag}-`;
|
|
52
|
-
results = results.filter((r) => r.name.startsWith(prefix));
|
|
53
|
-
}
|
|
54
|
-
if (results.length === 0) {
|
|
55
|
-
process.stderr.write('[search] No packages found.\n');
|
|
56
|
-
return 0;
|
|
57
|
-
}
|
|
58
|
-
if (options.json) {
|
|
59
|
-
const output = results.map((r) => ({
|
|
60
|
-
npm: r.name,
|
|
61
|
-
name: fromNpmName(r.name),
|
|
62
|
-
version: r.version,
|
|
63
|
-
description: r.description,
|
|
64
|
-
}));
|
|
65
|
-
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
66
|
-
return 0;
|
|
67
|
-
}
|
|
68
|
-
// Display results
|
|
69
|
-
const nameWidth = Math.max(4, ...results.map((r) => fromNpmName(r.name).length));
|
|
70
|
-
const versionWidth = Math.max(7, ...results.map((r) => r.version.length));
|
|
71
|
-
for (const r of results) {
|
|
72
|
-
const shortName = fromNpmName(r.name);
|
|
73
|
-
process.stdout.write(` ${shortName.padEnd(nameWidth)} ${r.version.padEnd(versionWidth)} ${r.description}\n`);
|
|
74
|
-
}
|
|
75
|
-
process.stderr.write(`\n[search] ${results.length} package${results.length === 1 ? '' : 's'} found.\n`);
|
|
76
|
-
return 0;
|
|
77
|
-
}
|
|
78
|
-
export const searchCommand = {
|
|
79
|
-
command: 'search [query]',
|
|
80
|
-
describe: 'Search the registry for packages',
|
|
81
|
-
builder: (yargs) => yargs
|
|
82
|
-
.positional('query', { type: 'string', describe: 'Search query' })
|
|
83
|
-
.option('tag', { type: 'string', describe: 'Filter by tag prefix (e.g., connection, skill)' })
|
|
84
|
-
.option('json', { type: 'boolean', default: false, describe: 'Output as JSON' }),
|
|
85
|
-
handler: async (argv) => {
|
|
86
|
-
const code = await runSearch({
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
88
|
-
query: argv['query'],
|
|
89
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
90
|
-
tag: argv['tag'],
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
92
|
-
json: argv['json'],
|
|
93
|
-
});
|
|
94
|
-
process.exit(code);
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
//# sourceMappingURL=search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
import type { CommandModule } from 'yargs';
|
|
7
|
-
export interface UpdateOptions {
|
|
8
|
-
cwd?: string;
|
|
9
|
-
name?: string;
|
|
10
|
-
latest?: boolean;
|
|
11
|
-
dryRun?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Update installed packages to newer versions.
|
|
15
|
-
* Returns the number of failures (0 = success).
|
|
16
|
-
*/
|
|
17
|
-
export declare function runUpdate(options?: UpdateOptions): Promise<number>;
|
|
18
|
-
export declare const updateCommand: CommandModule;
|
|
19
|
-
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAazC,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8G5E;AAED,eAAO,MAAM,aAAa,EAAE,aA+C3B,CAAC"}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
import { buildLockFile, discoverInstalledPackages, ensureNpmContext, fromNpmName, npmInstall, npmViewVersions, readLockFile, } from '@amodalai/core';
|
|
7
|
-
import * as semver from 'semver';
|
|
8
|
-
import { findRepoRoot } from '../shared/repo-discovery.js';
|
|
9
|
-
/**
|
|
10
|
-
* Update installed packages to newer versions.
|
|
11
|
-
* Returns the number of failures (0 = success).
|
|
12
|
-
*/
|
|
13
|
-
export async function runUpdate(options = {}) {
|
|
14
|
-
let repoPath;
|
|
15
|
-
try {
|
|
16
|
-
repoPath = findRepoRoot(options.cwd);
|
|
17
|
-
}
|
|
18
|
-
catch (err) {
|
|
19
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
20
|
-
process.stderr.write(`[update] ${msg}\n`);
|
|
21
|
-
return 1;
|
|
22
|
-
}
|
|
23
|
-
const paths = await ensureNpmContext(repoPath);
|
|
24
|
-
const lockFile = await readLockFile(repoPath);
|
|
25
|
-
if (!lockFile) {
|
|
26
|
-
process.stderr.write('[update] No lock file found. Install packages first.\n');
|
|
27
|
-
return 1;
|
|
28
|
-
}
|
|
29
|
-
// Build list of targets
|
|
30
|
-
const targets = [];
|
|
31
|
-
for (const [npmName, entry] of Object.entries(lockFile.packages)) {
|
|
32
|
-
const shortName = fromNpmName(npmName);
|
|
33
|
-
if (options.name && shortName !== options.name && npmName !== options.name)
|
|
34
|
-
continue;
|
|
35
|
-
targets.push({
|
|
36
|
-
npmName,
|
|
37
|
-
shortName,
|
|
38
|
-
currentVersion: entry.version,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
if (targets.length === 0) {
|
|
42
|
-
if (options.name) {
|
|
43
|
-
process.stderr.write('[update] No matching packages found in lock file.\n');
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
process.stderr.write('[update] No packages installed.\n');
|
|
47
|
-
}
|
|
48
|
-
return 0;
|
|
49
|
-
}
|
|
50
|
-
// Check for updates
|
|
51
|
-
const updates = [];
|
|
52
|
-
let failures = 0;
|
|
53
|
-
for (const target of targets) {
|
|
54
|
-
try {
|
|
55
|
-
const versions = await npmViewVersions(paths, target.npmName);
|
|
56
|
-
let newVersion;
|
|
57
|
-
if (options.latest) {
|
|
58
|
-
// Take the absolute latest
|
|
59
|
-
newVersion = semver.maxSatisfying(versions, '*');
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Stay within current major (^current)
|
|
63
|
-
newVersion = semver.maxSatisfying(versions, `^${target.currentVersion}`);
|
|
64
|
-
}
|
|
65
|
-
if (!newVersion || newVersion === target.currentVersion) {
|
|
66
|
-
process.stderr.write(`[update] ${target.npmName}@${target.currentVersion} is already up to date.\n`);
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
updates.push({ target, newVersion });
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
73
|
-
process.stderr.write(`[update] Failed to check ${target.npmName}: ${msg}\n`);
|
|
74
|
-
failures++;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (updates.length === 0) {
|
|
78
|
-
if (failures === 0) {
|
|
79
|
-
process.stderr.write('[update] All packages are up to date.\n');
|
|
80
|
-
}
|
|
81
|
-
return failures;
|
|
82
|
-
}
|
|
83
|
-
// Print what will be updated
|
|
84
|
-
if (options.dryRun) {
|
|
85
|
-
process.stderr.write('[update] Dry run — the following would be updated:\n');
|
|
86
|
-
for (const { target, newVersion } of updates) {
|
|
87
|
-
process.stderr.write(` ${target.npmName}: ${target.currentVersion} → ${newVersion}\n`);
|
|
88
|
-
}
|
|
89
|
-
return 0;
|
|
90
|
-
}
|
|
91
|
-
// Perform updates
|
|
92
|
-
for (const { target, newVersion } of updates) {
|
|
93
|
-
process.stderr.write(`[update] Updating ${target.npmName}: ${target.currentVersion} → ${newVersion}...\n`);
|
|
94
|
-
try {
|
|
95
|
-
const result = await npmInstall(paths, target.npmName, newVersion);
|
|
96
|
-
process.stderr.write(`[update] Updated ${target.npmName}@${result.version}\n`);
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
100
|
-
process.stderr.write(`[update] Failed to update ${target.npmName}: ${msg}\n`);
|
|
101
|
-
failures++;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Rebuild lock file from what's actually installed
|
|
105
|
-
const discovered = await discoverInstalledPackages(paths);
|
|
106
|
-
await buildLockFile(repoPath, discovered);
|
|
107
|
-
const successCount = updates.length - failures;
|
|
108
|
-
if (failures > 0) {
|
|
109
|
-
process.stderr.write(`[update] ${failures} of ${updates.length} update${updates.length === 1 ? '' : 's'} failed.\n`);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
process.stderr.write(`[update] ${successCount} package${successCount === 1 ? '' : 's'} updated.\n`);
|
|
113
|
-
}
|
|
114
|
-
return failures;
|
|
115
|
-
}
|
|
116
|
-
export const updateCommand = {
|
|
117
|
-
command: 'update [name]',
|
|
118
|
-
describe: 'Update packages. Use --all for all packages, --admin-agent for the admin agent, or specify a name.',
|
|
119
|
-
builder: (yargs) => yargs
|
|
120
|
-
.positional('name', { type: 'string', describe: 'Package name to update' })
|
|
121
|
-
.option('all', { type: 'boolean', default: false, describe: 'Update all installed packages' })
|
|
122
|
-
.option('admin-agent', { type: 'boolean', default: false, describe: 'Update the global admin agent cache' })
|
|
123
|
-
.option('latest', { type: 'boolean', default: false, describe: 'Allow major version updates' })
|
|
124
|
-
.option('dry-run', { type: 'boolean', default: false, describe: 'Show what would be updated' }),
|
|
125
|
-
handler: async (argv) => {
|
|
126
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
127
|
-
const name = argv['name'];
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
129
|
-
const all = argv['all'];
|
|
130
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
131
|
-
const adminAgent = argv['adminAgent'];
|
|
132
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
133
|
-
const latest = argv['latest'];
|
|
134
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
135
|
-
const dryRun = argv['dryRun'];
|
|
136
|
-
// Must specify at least one target
|
|
137
|
-
if (!name && !all && !adminAgent) {
|
|
138
|
-
process.stderr.write('Usage: amodal update <name> | --all | --admin-agent\n');
|
|
139
|
-
process.stderr.write(' <name> Update a specific package\n');
|
|
140
|
-
process.stderr.write(' --all Update all installed packages\n');
|
|
141
|
-
process.stderr.write(' --admin-agent Update the global admin agent\n');
|
|
142
|
-
process.stderr.write(' Flags can be combined: amodal update --all --admin-agent\n');
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
let failures = 0;
|
|
146
|
-
// Update admin agent if requested
|
|
147
|
-
if (adminAgent) {
|
|
148
|
-
const { updateAdminAgentCommand } = await import('./admin.js');
|
|
149
|
-
failures += await updateAdminAgentCommand();
|
|
150
|
-
}
|
|
151
|
-
// Update packages if requested
|
|
152
|
-
if (name || all) {
|
|
153
|
-
failures += await runUpdate({ name, latest, dryRun });
|
|
154
|
-
}
|
|
155
|
-
process.exit(failures > 0 ? 1 : 0);
|
|
156
|
-
},
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Amodal Labs, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
8
|
-
|
|
9
|
-
const mockFindRepoRoot = vi.fn(() => '/test/repo');
|
|
10
|
-
const mockEnsureNpmContext = vi.fn();
|
|
11
|
-
const mockGetLockEntry = vi.fn();
|
|
12
|
-
const mockNpmView = vi.fn();
|
|
13
|
-
const mockGetNpmContextPaths = vi.fn();
|
|
14
|
-
const mockReadPackageFile = vi.fn();
|
|
15
|
-
const mockListPackageFiles = vi.fn();
|
|
16
|
-
const mockToNpmName = vi.fn((name: string) => `@amodalai/${name}`);
|
|
17
|
-
const mockFromNpmName = vi.fn((npm: string) => npm.replace('@amodalai/', ''));
|
|
18
|
-
|
|
19
|
-
vi.mock('../shared/repo-discovery.js', () => ({
|
|
20
|
-
findRepoRoot: mockFindRepoRoot,
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
vi.mock('@amodalai/core', () => ({
|
|
24
|
-
ensureNpmContext: mockEnsureNpmContext,
|
|
25
|
-
getLockEntry: mockGetLockEntry,
|
|
26
|
-
npmView: mockNpmView,
|
|
27
|
-
getNpmContextPaths: mockGetNpmContextPaths,
|
|
28
|
-
readPackageFile: mockReadPackageFile,
|
|
29
|
-
listPackageFiles: mockListPackageFiles,
|
|
30
|
-
toNpmName: mockToNpmName,
|
|
31
|
-
fromNpmName: mockFromNpmName,
|
|
32
|
-
}));
|
|
33
|
-
|
|
34
|
-
const mockPaths = {
|
|
35
|
-
root: '/test/repo/.amodal/packages',
|
|
36
|
-
npmDir: '/test/repo/.amodal/packages/.npm',
|
|
37
|
-
npmrc: '/test/repo/.amodal/packages/.npm/.npmrc',
|
|
38
|
-
packageJson: '/test/repo/.amodal/packages/.npm/package.json',
|
|
39
|
-
nodeModules: '/test/repo/.amodal/packages/.npm/node_modules',
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
describe('runDiff', () => {
|
|
43
|
-
let stderrOutput: string;
|
|
44
|
-
let stdoutOutput: string;
|
|
45
|
-
|
|
46
|
-
beforeEach(() => {
|
|
47
|
-
vi.clearAllMocks();
|
|
48
|
-
mockFindRepoRoot.mockReturnValue('/test/repo');
|
|
49
|
-
mockEnsureNpmContext.mockResolvedValue(mockPaths);
|
|
50
|
-
mockGetNpmContextPaths.mockReturnValue(mockPaths);
|
|
51
|
-
stderrOutput = '';
|
|
52
|
-
stdoutOutput = '';
|
|
53
|
-
vi.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
|
|
54
|
-
stderrOutput += String(chunk);
|
|
55
|
-
return true;
|
|
56
|
-
});
|
|
57
|
-
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
58
|
-
stdoutOutput += String(chunk);
|
|
59
|
-
return true;
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('should show diff when version differs', async () => {
|
|
64
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
65
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
66
|
-
mockListPackageFiles.mockResolvedValue(['spec.json', 'surface.md', 'package.json']);
|
|
67
|
-
mockReadPackageFile.mockResolvedValue('content\nline2\n');
|
|
68
|
-
|
|
69
|
-
const {runDiff} = await import('./diff.js');
|
|
70
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
71
|
-
expect(result).toBe(0);
|
|
72
|
-
expect(stdoutOutput).toContain('1.0.0');
|
|
73
|
-
expect(stdoutOutput).toContain('2.0.0');
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('should report already latest', async () => {
|
|
77
|
-
mockGetLockEntry.mockResolvedValue({version: '2.0.0', integrity: 'sha512-old'});
|
|
78
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
79
|
-
|
|
80
|
-
const {runDiff} = await import('./diff.js');
|
|
81
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
82
|
-
expect(result).toBe(0);
|
|
83
|
-
expect(stderrOutput).toContain('already the latest');
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should return 1 when not installed', async () => {
|
|
87
|
-
mockGetLockEntry.mockResolvedValue(null);
|
|
88
|
-
|
|
89
|
-
const {runDiff} = await import('./diff.js');
|
|
90
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
91
|
-
expect(result).toBe(1);
|
|
92
|
-
expect(stderrOutput).toContain('not installed');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should return 1 when registry unreachable', async () => {
|
|
96
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
97
|
-
mockNpmView.mockRejectedValue(new Error('Registry unreachable'));
|
|
98
|
-
|
|
99
|
-
const {runDiff} = await import('./diff.js');
|
|
100
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
101
|
-
expect(result).toBe(1);
|
|
102
|
-
expect(stderrOutput).toContain('Failed to query registry');
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should return 1 when repo not found', async () => {
|
|
106
|
-
mockFindRepoRoot.mockImplementation(() => {
|
|
107
|
-
throw new Error('Not found');
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const {runDiff} = await import('./diff.js');
|
|
111
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
112
|
-
expect(result).toBe(1);
|
|
113
|
-
expect(stderrOutput).toContain('Not found');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should show surface endpoint count', async () => {
|
|
117
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
118
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
119
|
-
mockListPackageFiles.mockResolvedValue(['surface.md']);
|
|
120
|
-
mockReadPackageFile.mockResolvedValue('## GET /users\nList users\n\n## POST /users\nCreate user\n');
|
|
121
|
-
|
|
122
|
-
const {runDiff} = await import('./diff.js');
|
|
123
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
124
|
-
expect(result).toBe(0);
|
|
125
|
-
expect(stdoutOutput).toContain('2 endpoints');
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('should show spec.json keys', async () => {
|
|
129
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
130
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
131
|
-
mockListPackageFiles.mockResolvedValue(['spec.json']);
|
|
132
|
-
mockReadPackageFile.mockResolvedValue(JSON.stringify({baseUrl: 'https://api.example.com', specUrl: 'https://api.example.com/spec', format: 'openapi'}));
|
|
133
|
-
|
|
134
|
-
const {runDiff} = await import('./diff.js');
|
|
135
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
136
|
-
expect(result).toBe(0);
|
|
137
|
-
expect(stdoutOutput).toContain('specUrl');
|
|
138
|
-
expect(stdoutOutput).toContain('format');
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it('should show access.json rule count', async () => {
|
|
142
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
143
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
144
|
-
mockListPackageFiles.mockResolvedValue(['access.json']);
|
|
145
|
-
mockReadPackageFile.mockResolvedValue(JSON.stringify({
|
|
146
|
-
'GET /users': {confirm: true},
|
|
147
|
-
'POST /users': {confirm: 'review'},
|
|
148
|
-
}));
|
|
149
|
-
|
|
150
|
-
const {runDiff} = await import('./diff.js');
|
|
151
|
-
const result = await runDiff({name: 'connection-salesforce'});
|
|
152
|
-
expect(result).toBe(0);
|
|
153
|
-
expect(stdoutOutput).toContain('2 rules');
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
it('should suggest update command', async () => {
|
|
157
|
-
mockGetLockEntry.mockResolvedValue({version: '1.0.0', integrity: 'sha512-old'});
|
|
158
|
-
mockNpmView.mockResolvedValue({name: '@amodalai/connection-salesforce', version: '2.0.0', versions: ['1.0.0', '2.0.0']});
|
|
159
|
-
mockListPackageFiles.mockResolvedValue([]);
|
|
160
|
-
|
|
161
|
-
const {runDiff} = await import('./diff.js');
|
|
162
|
-
await runDiff({name: 'connection-salesforce'});
|
|
163
|
-
expect(stdoutOutput).toContain('amodal update connection-salesforce');
|
|
164
|
-
});
|
|
165
|
-
});
|