@openreef/cli 0.4.0 → 0.5.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 +15 -1
- package/dist/commands/diff.d.ts +9 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +34 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +32 -7
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/lock.d.ts +5 -1
- package/dist/commands/lock.d.ts.map +1 -1
- package/dist/commands/lock.js +37 -3
- package/dist/commands/lock.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +261 -13
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +146 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +32 -207
- package/dist/commands/update.js.map +1 -1
- package/dist/core/diff-engine.d.ts +21 -0
- package/dist/core/diff-engine.d.ts.map +1 -0
- package/dist/core/diff-engine.js +140 -0
- package/dist/core/diff-engine.js.map +1 -0
- package/dist/core/github-api.d.ts +37 -0
- package/dist/core/github-api.d.ts.map +1 -0
- package/dist/core/github-api.js +163 -0
- package/dist/core/github-api.js.map +1 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +17 -39
- package/dist/core/registry.js.map +1 -1
- package/dist/core/skills-registry.d.ts +32 -0
- package/dist/core/skills-registry.d.ts.map +1 -0
- package/dist/core/skills-registry.js +186 -0
- package/dist/core/skills-registry.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +289 -225
- package/dist/index.js.map +1 -1
- package/dist/types/lockfile.d.ts +9 -0
- package/dist/types/lockfile.d.ts.map +1 -0
- package/dist/types/lockfile.js +2 -0
- package/dist/types/lockfile.js.map +1 -0
- package/dist/utils/download.d.ts +18 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +72 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/plan-display.d.ts +3 -0
- package/dist/utils/plan-display.d.ts.map +1 -0
- package/dist/utils/plan-display.js +80 -0
- package/dist/utils/plan-display.js.map +1 -0
- package/dist/utils/semver.d.ts +12 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +82 -0
- package/dist/utils/semver.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile, writeFile, unlink } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
export class ArtifactDownloadError extends Error {
|
|
6
|
+
cause;
|
|
7
|
+
constructor(message, cause) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.cause = cause;
|
|
10
|
+
this.name = 'ArtifactDownloadError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ArtifactIntegrityError extends Error {
|
|
14
|
+
expected;
|
|
15
|
+
actual;
|
|
16
|
+
constructor(expected, actual) {
|
|
17
|
+
super(`Integrity check failed: expected sha256 ${expected}, got ${actual}`);
|
|
18
|
+
this.expected = expected;
|
|
19
|
+
this.actual = actual;
|
|
20
|
+
this.name = 'ArtifactIntegrityError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function validateUrlScheme(url) {
|
|
24
|
+
if (!url.startsWith('https://') && !url.startsWith('http://')) {
|
|
25
|
+
throw new ArtifactDownloadError(`Invalid URL scheme: only https:// and http:// are allowed, got "${url}"`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function downloadArtifact(options) {
|
|
29
|
+
const { url, sha256, cacheDir, cacheName, userAgent } = options;
|
|
30
|
+
const hasHash = !!sha256;
|
|
31
|
+
const subdir = hasHash ? 'verified' : 'unverified';
|
|
32
|
+
const cachePath = join(cacheDir, subdir, cacheName);
|
|
33
|
+
// Verified artifacts: reuse from cache after re-checking hash
|
|
34
|
+
if (hasHash && existsSync(cachePath)) {
|
|
35
|
+
const cached = await readFile(cachePath);
|
|
36
|
+
const cachedHash = createHash('sha256').update(cached).digest('hex');
|
|
37
|
+
if (cachedHash === sha256) {
|
|
38
|
+
return cachePath;
|
|
39
|
+
}
|
|
40
|
+
await unlink(cachePath).catch(() => { });
|
|
41
|
+
}
|
|
42
|
+
if (!hasHash) {
|
|
43
|
+
console.warn(`WARNING: No integrity hash — artifact is UNVERIFIED`);
|
|
44
|
+
}
|
|
45
|
+
validateUrlScheme(url);
|
|
46
|
+
let response;
|
|
47
|
+
try {
|
|
48
|
+
response = await fetch(url, {
|
|
49
|
+
headers: { 'User-Agent': userAgent },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
throw new ArtifactDownloadError(`Failed to download: ${err instanceof Error ? err.message : String(err)}`, err);
|
|
54
|
+
}
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
throw new ArtifactDownloadError(`Download returned HTTP ${response.status}: ${response.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
59
|
+
// Verify SHA-256 if present
|
|
60
|
+
if (sha256) {
|
|
61
|
+
const actual = createHash('sha256').update(buffer).digest('hex');
|
|
62
|
+
if (actual !== sha256) {
|
|
63
|
+
throw new ArtifactIntegrityError(sha256, actual);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Write to cache
|
|
67
|
+
const parentDir = join(cacheDir, subdir);
|
|
68
|
+
await mkdir(parentDir, { recursive: true });
|
|
69
|
+
await writeFile(cachePath, buffer);
|
|
70
|
+
return cachePath;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/utils/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAW1C,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACV;IAApC,YAAY,OAAe,EAAS,KAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,UAAK,GAAL,KAAK,CAAU;QAEjD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEtC;IACA;IAFT,YACS,QAAgB,EAChB,MAAc;QAErB,KAAK,CAAC,2CAA2C,QAAQ,SAAS,MAAM,EAAE,CAAC,CAAC;QAHrE,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAGrB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAC7B,mEAAmE,GAAG,GAAG,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAEpD,8DAA8D;IAC9D,IAAI,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACtE,CAAC;IAED,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAEvB,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC1B,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAC7B,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzE,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,qBAAqB,CAC7B,0BAA0B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAEzD,4BAA4B;IAC5B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-display.d.ts","sourceRoot":"","sources":["../../src/utils/plan-display.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAOlE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,IAAI,CAuFN"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { header, label } from './output.js';
|
|
3
|
+
import { extractChannelType, isBareChannel, } from '../core/config-patcher.js';
|
|
4
|
+
export function displayMigrationPlan(plan, namespace, name) {
|
|
5
|
+
console.log('');
|
|
6
|
+
const versionStr = plan.versionChange
|
|
7
|
+
? ` v${plan.versionChange.from} → v${plan.versionChange.to}`
|
|
8
|
+
: '';
|
|
9
|
+
console.log(header(`Migration Plan: ${namespace}/${name}${versionStr}`));
|
|
10
|
+
console.log('');
|
|
11
|
+
// Agents
|
|
12
|
+
console.log(label('Agents:'));
|
|
13
|
+
for (const a of plan.agents) {
|
|
14
|
+
switch (a.type) {
|
|
15
|
+
case 'add':
|
|
16
|
+
console.log(` ${chalk.green('+')} ${a.slug} (add)`);
|
|
17
|
+
break;
|
|
18
|
+
case 'remove':
|
|
19
|
+
console.log(` ${chalk.red('-')} ${a.slug} (remove)`);
|
|
20
|
+
break;
|
|
21
|
+
case 'update':
|
|
22
|
+
console.log(` ${chalk.yellow('~')} ${a.slug} (${a.changedFiles?.length} files changed)`);
|
|
23
|
+
break;
|
|
24
|
+
case 'unchanged':
|
|
25
|
+
console.log(` ${chalk.dim('=')} ${a.slug} (unchanged)`);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Bindings
|
|
30
|
+
if (plan.bindings.length > 0) {
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(label('Bindings:'));
|
|
33
|
+
for (const b of plan.bindings) {
|
|
34
|
+
if (b.type === 'add') {
|
|
35
|
+
const channelType = extractChannelType(b.binding.match.channel);
|
|
36
|
+
const bare = isBareChannel(b.binding.match.channel);
|
|
37
|
+
let annotation = '';
|
|
38
|
+
if (bare) {
|
|
39
|
+
annotation = chalk.dim(' (bare channel — shadows main)');
|
|
40
|
+
}
|
|
41
|
+
console.log(` ${chalk.green('+')} ${b.binding.match.channel} → ${b.binding.agentId}${annotation}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(` ${chalk.red('-')} ${b.binding.match.channel} → ${b.binding.agentId}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Cron
|
|
49
|
+
if (plan.cron.length > 0) {
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(label('Cron Jobs:'));
|
|
52
|
+
for (const c of plan.cron) {
|
|
53
|
+
switch (c.type) {
|
|
54
|
+
case 'add':
|
|
55
|
+
console.log(` ${chalk.green('+')} ${c.name}`);
|
|
56
|
+
break;
|
|
57
|
+
case 'remove':
|
|
58
|
+
console.log(` ${chalk.red('-')} ${c.name}`);
|
|
59
|
+
break;
|
|
60
|
+
case 'update':
|
|
61
|
+
console.log(` ${chalk.yellow('~')} ${c.name}`);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// A2a
|
|
67
|
+
if (plan.a2a.length > 0) {
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(label('Agent-to-Agent:'));
|
|
70
|
+
for (const edge of plan.a2a) {
|
|
71
|
+
const prefix = edge.type === 'add'
|
|
72
|
+
? chalk.green('+')
|
|
73
|
+
: edge.type === 'remove'
|
|
74
|
+
? chalk.red('-')
|
|
75
|
+
: chalk.yellow('~');
|
|
76
|
+
console.log(` ${prefix} ${edge.from} → ${edge.to}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=plan-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-display.js","sourceRoot":"","sources":["../../src/utils/plan-display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class UnsupportedSemverRange extends Error {
|
|
2
|
+
constructor(range: string);
|
|
3
|
+
}
|
|
4
|
+
export declare function parseSemver(v: string): {
|
|
5
|
+
major: number;
|
|
6
|
+
minor: number;
|
|
7
|
+
patch: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
10
|
+
export declare function satisfiesRange(version: string, range: string): boolean;
|
|
11
|
+
export declare function resolveRange(versions: string[], range: string): string | null;
|
|
12
|
+
//# sourceMappingURL=semver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/utils/semver.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,KAAK,EAAE,MAAM;CAI1B;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAWtF;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoDtE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK7E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class UnsupportedSemverRange extends Error {
|
|
2
|
+
constructor(range) {
|
|
3
|
+
super(`Unsupported semver range: "${range}"`);
|
|
4
|
+
this.name = 'UnsupportedSemverRange';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function parseSemver(v) {
|
|
8
|
+
const cleaned = v.startsWith('v') ? v.slice(1) : v;
|
|
9
|
+
const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(cleaned);
|
|
10
|
+
if (!match) {
|
|
11
|
+
throw new Error(`Invalid semver version: "${v}"`);
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
major: parseInt(match[1], 10),
|
|
15
|
+
minor: parseInt(match[2], 10),
|
|
16
|
+
patch: parseInt(match[3], 10),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function compareSemver(a, b) {
|
|
20
|
+
const pa = parseSemver(a);
|
|
21
|
+
const pb = parseSemver(b);
|
|
22
|
+
if (pa.major !== pb.major)
|
|
23
|
+
return pa.major - pb.major;
|
|
24
|
+
if (pa.minor !== pb.minor)
|
|
25
|
+
return pa.minor - pb.minor;
|
|
26
|
+
return pa.patch - pb.patch;
|
|
27
|
+
}
|
|
28
|
+
export function satisfiesRange(version, range) {
|
|
29
|
+
const trimmed = range.trim();
|
|
30
|
+
// Wildcard — matches everything
|
|
31
|
+
if (trimmed === '*')
|
|
32
|
+
return true;
|
|
33
|
+
// Exact match: 1.2.3
|
|
34
|
+
if (/^\d+\.\d+\.\d+$/.test(trimmed)) {
|
|
35
|
+
return compareSemver(version, trimmed) === 0;
|
|
36
|
+
}
|
|
37
|
+
// Caret: ^1.2.3
|
|
38
|
+
const caretMatch = /^\^(\d+\.\d+\.\d+)$/.exec(trimmed);
|
|
39
|
+
if (caretMatch) {
|
|
40
|
+
const base = parseSemver(caretMatch[1]);
|
|
41
|
+
const v = parseSemver(version);
|
|
42
|
+
if (base.major > 0) {
|
|
43
|
+
// ^1.2.3 := >=1.2.3, <2.0.0
|
|
44
|
+
return v.major === base.major &&
|
|
45
|
+
compareSemver(version, caretMatch[1]) >= 0;
|
|
46
|
+
}
|
|
47
|
+
if (base.minor > 0) {
|
|
48
|
+
// ^0.2.3 := >=0.2.3, <0.3.0
|
|
49
|
+
return v.major === 0 &&
|
|
50
|
+
v.minor === base.minor &&
|
|
51
|
+
compareSemver(version, caretMatch[1]) >= 0;
|
|
52
|
+
}
|
|
53
|
+
// ^0.0.3 := >=0.0.3, <0.0.4
|
|
54
|
+
return v.major === 0 &&
|
|
55
|
+
v.minor === 0 &&
|
|
56
|
+
v.patch === base.patch;
|
|
57
|
+
}
|
|
58
|
+
// Tilde: ~1.2.3
|
|
59
|
+
const tildeMatch = /^~(\d+\.\d+\.\d+)$/.exec(trimmed);
|
|
60
|
+
if (tildeMatch) {
|
|
61
|
+
const base = parseSemver(tildeMatch[1]);
|
|
62
|
+
const v = parseSemver(version);
|
|
63
|
+
// ~1.2.3 := >=1.2.3, <1.3.0
|
|
64
|
+
return v.major === base.major &&
|
|
65
|
+
v.minor === base.minor &&
|
|
66
|
+
compareSemver(version, tildeMatch[1]) >= 0;
|
|
67
|
+
}
|
|
68
|
+
// GTE: >=1.2.3
|
|
69
|
+
const gteMatch = /^>=(\d+\.\d+\.\d+)$/.exec(trimmed);
|
|
70
|
+
if (gteMatch) {
|
|
71
|
+
return compareSemver(version, gteMatch[1]) >= 0;
|
|
72
|
+
}
|
|
73
|
+
throw new UnsupportedSemverRange(range);
|
|
74
|
+
}
|
|
75
|
+
export function resolveRange(versions, range) {
|
|
76
|
+
const matching = versions.filter((v) => satisfiesRange(v, range));
|
|
77
|
+
if (matching.length === 0)
|
|
78
|
+
return null;
|
|
79
|
+
matching.sort(compareSemver);
|
|
80
|
+
return matching[matching.length - 1];
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=semver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/utils/semver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openreef/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "CLI toolchain for OpenReef formations — package and deploy multi-agent teams",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"reef": "
|
|
7
|
+
"reef": "dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
@@ -51,6 +51,6 @@
|
|
|
51
51
|
"license": "MIT",
|
|
52
52
|
"repository": {
|
|
53
53
|
"type": "git",
|
|
54
|
-
"url": "https://github.com/openreefai/openreef.git"
|
|
54
|
+
"url": "git+https://github.com/openreefai/openreef.git"
|
|
55
55
|
}
|
|
56
56
|
}
|