overskill 1.0.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/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +121 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/bundle.d.ts +3 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +58 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +109 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +64 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +93 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/edit.d.ts +3 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +69 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +514 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/info.d.ts +3 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +89 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +88 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +84 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +143 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/new.d.ts +3 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +262 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/publish.d.ts +3 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +215 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/push.d.ts +3 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +151 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/registry.d.ts +3 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +169 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +48 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +48 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +160 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +130 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +94 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +60 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +340 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +78 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +241 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +94 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +294 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/editor.d.ts +6 -0
- package/dist/lib/editor.d.ts.map +1 -0
- package/dist/lib/editor.js +60 -0
- package/dist/lib/editor.js.map +1 -0
- package/dist/lib/fs.d.ts +74 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +235 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/index-gen.d.ts +18 -0
- package/dist/lib/index-gen.d.ts.map +1 -0
- package/dist/lib/index-gen.js +75 -0
- package/dist/lib/index-gen.js.map +1 -0
- package/dist/lib/local-registry/index.d.ts +15 -0
- package/dist/lib/local-registry/index.d.ts.map +1 -0
- package/dist/lib/local-registry/index.js +18 -0
- package/dist/lib/local-registry/index.js.map +1 -0
- package/dist/lib/local-registry/objects.d.ts +51 -0
- package/dist/lib/local-registry/objects.d.ts.map +1 -0
- package/dist/lib/local-registry/objects.js +148 -0
- package/dist/lib/local-registry/objects.js.map +1 -0
- package/dist/lib/local-registry/paths.d.ts +53 -0
- package/dist/lib/local-registry/paths.d.ts.map +1 -0
- package/dist/lib/local-registry/paths.js +85 -0
- package/dist/lib/local-registry/paths.js.map +1 -0
- package/dist/lib/local-registry/skills.d.ts +83 -0
- package/dist/lib/local-registry/skills.d.ts.map +1 -0
- package/dist/lib/local-registry/skills.js +261 -0
- package/dist/lib/local-registry/skills.js.map +1 -0
- package/dist/lib/local-registry/types.d.ts +79 -0
- package/dist/lib/local-registry/types.d.ts.map +1 -0
- package/dist/lib/local-registry/types.js +5 -0
- package/dist/lib/local-registry/types.js.map +1 -0
- package/dist/lib/local-registry/versions.d.ts +61 -0
- package/dist/lib/local-registry/versions.d.ts.map +1 -0
- package/dist/lib/local-registry/versions.js +163 -0
- package/dist/lib/local-registry/versions.js.map +1 -0
- package/dist/lib/lockfile.d.ts +38 -0
- package/dist/lib/lockfile.d.ts.map +1 -0
- package/dist/lib/lockfile.js +102 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/meta-skill.d.ts +6 -0
- package/dist/lib/meta-skill.d.ts.map +1 -0
- package/dist/lib/meta-skill.js +72 -0
- package/dist/lib/meta-skill.js.map +1 -0
- package/dist/lib/semver.d.ts +63 -0
- package/dist/lib/semver.d.ts.map +1 -0
- package/dist/lib/semver.js +107 -0
- package/dist/lib/semver.js.map +1 -0
- package/dist/types.d.ts +147 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the local registry module
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Provenance information - tracks where a skill version came from
|
|
6
|
+
*/
|
|
7
|
+
export interface Provenance {
|
|
8
|
+
kind: 'local' | 'cloud';
|
|
9
|
+
source: string;
|
|
10
|
+
fetchedAt?: string;
|
|
11
|
+
publishedBy?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A single version entry in versions.yaml
|
|
15
|
+
*/
|
|
16
|
+
export interface VersionEntry {
|
|
17
|
+
version: string;
|
|
18
|
+
sha256: string;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
provenance: Provenance;
|
|
21
|
+
changelog?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The structure of versions.yaml
|
|
25
|
+
*/
|
|
26
|
+
export interface VersionsFile {
|
|
27
|
+
versions: VersionEntry[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Skill metadata stored in meta.yaml
|
|
31
|
+
*/
|
|
32
|
+
export interface LocalSkillMeta {
|
|
33
|
+
slug: string;
|
|
34
|
+
name: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
tags: string[];
|
|
37
|
+
compat: string[];
|
|
38
|
+
updatedAt: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parameters for putting a new version
|
|
42
|
+
*/
|
|
43
|
+
export interface PutVersionParams {
|
|
44
|
+
slug: string;
|
|
45
|
+
version: string;
|
|
46
|
+
content: string;
|
|
47
|
+
meta: Omit<LocalSkillMeta, 'slug' | 'updatedAt'>;
|
|
48
|
+
provenance?: Partial<Provenance>;
|
|
49
|
+
changelog?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Result of getting a version
|
|
53
|
+
*/
|
|
54
|
+
export interface GetVersionResult {
|
|
55
|
+
content: string;
|
|
56
|
+
meta: LocalSkillMeta;
|
|
57
|
+
sha256: string;
|
|
58
|
+
version: string;
|
|
59
|
+
provenance: Provenance;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Summary of a skill in the registry
|
|
63
|
+
*/
|
|
64
|
+
export interface SkillSummary {
|
|
65
|
+
slug: string;
|
|
66
|
+
latestVersion: string;
|
|
67
|
+
meta: LocalSkillMeta;
|
|
68
|
+
versionCount: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Search result
|
|
72
|
+
*/
|
|
73
|
+
export interface SearchResult {
|
|
74
|
+
slug: string;
|
|
75
|
+
latestVersion: string;
|
|
76
|
+
meta: LocalSkillMeta;
|
|
77
|
+
matchedOn: 'slug' | 'name' | 'tags' | 'description';
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/local-registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/local-registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version management for skills in the local registry
|
|
3
|
+
*/
|
|
4
|
+
import type { VersionEntry, VersionsFile, Provenance } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Read versions.yaml for a skill
|
|
7
|
+
*/
|
|
8
|
+
export declare function readVersionsFile(slug: string): VersionsFile | null;
|
|
9
|
+
/**
|
|
10
|
+
* Write versions.yaml for a skill (atomic)
|
|
11
|
+
*/
|
|
12
|
+
export declare function writeVersionsFile(slug: string, data: VersionsFile): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get all versions for a skill
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAllVersions(slug: string): VersionEntry[];
|
|
17
|
+
/**
|
|
18
|
+
* Get all version strings for a skill (sorted descending)
|
|
19
|
+
*/
|
|
20
|
+
export declare function getVersionStrings(slug: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Get the latest version for a skill (highest semver)
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLatestVersion(slug: string): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get a specific version entry
|
|
27
|
+
*/
|
|
28
|
+
export declare function getVersionEntry(slug: string, version: string): VersionEntry | null;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve a version based on a constraint
|
|
31
|
+
*
|
|
32
|
+
* @param slug - Skill slug
|
|
33
|
+
* @param constraint - Optional semver constraint (e.g., "^1.0.0", ">=2.0.0")
|
|
34
|
+
* @returns The resolved version, or null if no match
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveVersion(slug: string, constraint?: string): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Add a new version entry
|
|
39
|
+
*/
|
|
40
|
+
export declare function addVersionEntry(slug: string, entry: Omit<VersionEntry, 'createdAt'> & {
|
|
41
|
+
createdAt?: string;
|
|
42
|
+
}): void;
|
|
43
|
+
/**
|
|
44
|
+
* Remove a version entry
|
|
45
|
+
*
|
|
46
|
+
* @returns true if removed, false if didn't exist
|
|
47
|
+
*/
|
|
48
|
+
export declare function removeVersionEntry(slug: string, version: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a specific version exists
|
|
51
|
+
*/
|
|
52
|
+
export declare function versionExists(slug: string, version: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get version count for a skill
|
|
55
|
+
*/
|
|
56
|
+
export declare function getVersionCount(slug: string): number;
|
|
57
|
+
/**
|
|
58
|
+
* Create default provenance for a locally created skill
|
|
59
|
+
*/
|
|
60
|
+
export declare function createLocalProvenance(source?: string): Provenance;
|
|
61
|
+
//# sourceMappingURL=versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../../src/lib/local-registry/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CASlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAqBxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAG3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGlF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc/E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,IAAI,CA8BN;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAazE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,MAAkB,GAAG,UAAU,CAK5E"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version management for skills in the local registry
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as yaml from 'yaml';
|
|
6
|
+
import { getVersionsPath, ensureDir, getSkillDir } from './paths.js';
|
|
7
|
+
import { sortVersionsDesc, maxSatisfying, isValidVersion } from '../semver.js';
|
|
8
|
+
/**
|
|
9
|
+
* Read versions.yaml for a skill
|
|
10
|
+
*/
|
|
11
|
+
export function readVersionsFile(slug) {
|
|
12
|
+
const versionsPath = getVersionsPath(slug);
|
|
13
|
+
if (!fs.existsSync(versionsPath)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const content = fs.readFileSync(versionsPath, 'utf-8');
|
|
17
|
+
return yaml.parse(content);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write versions.yaml for a skill (atomic)
|
|
21
|
+
*/
|
|
22
|
+
export function writeVersionsFile(slug, data) {
|
|
23
|
+
const versionsPath = getVersionsPath(slug);
|
|
24
|
+
ensureDir(getSkillDir(slug));
|
|
25
|
+
const content = yaml.stringify(data, { lineWidth: 0 });
|
|
26
|
+
// Atomic write
|
|
27
|
+
const tempPath = `${versionsPath}.tmp.${process.pid}.${Date.now()}`;
|
|
28
|
+
try {
|
|
29
|
+
fs.writeFileSync(tempPath, content, 'utf-8');
|
|
30
|
+
fs.renameSync(tempPath, versionsPath);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
try {
|
|
34
|
+
if (fs.existsSync(tempPath)) {
|
|
35
|
+
fs.unlinkSync(tempPath);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Ignore cleanup errors
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all versions for a skill
|
|
46
|
+
*/
|
|
47
|
+
export function getAllVersions(slug) {
|
|
48
|
+
const file = readVersionsFile(slug);
|
|
49
|
+
return file?.versions || [];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get all version strings for a skill (sorted descending)
|
|
53
|
+
*/
|
|
54
|
+
export function getVersionStrings(slug) {
|
|
55
|
+
const entries = getAllVersions(slug);
|
|
56
|
+
const versions = entries.map((e) => e.version);
|
|
57
|
+
return sortVersionsDesc(versions);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the latest version for a skill (highest semver)
|
|
61
|
+
*/
|
|
62
|
+
export function getLatestVersion(slug) {
|
|
63
|
+
const versions = getVersionStrings(slug);
|
|
64
|
+
return versions[0] || null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a specific version entry
|
|
68
|
+
*/
|
|
69
|
+
export function getVersionEntry(slug, version) {
|
|
70
|
+
const entries = getAllVersions(slug);
|
|
71
|
+
return entries.find((e) => e.version === version) || null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve a version based on a constraint
|
|
75
|
+
*
|
|
76
|
+
* @param slug - Skill slug
|
|
77
|
+
* @param constraint - Optional semver constraint (e.g., "^1.0.0", ">=2.0.0")
|
|
78
|
+
* @returns The resolved version, or null if no match
|
|
79
|
+
*/
|
|
80
|
+
export function resolveVersion(slug, constraint) {
|
|
81
|
+
const versions = getVersionStrings(slug);
|
|
82
|
+
if (versions.length === 0) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (!constraint) {
|
|
86
|
+
// No constraint = latest version
|
|
87
|
+
return versions[0];
|
|
88
|
+
}
|
|
89
|
+
// Use semver to find the best match
|
|
90
|
+
return maxSatisfying(versions, constraint);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Add a new version entry
|
|
94
|
+
*/
|
|
95
|
+
export function addVersionEntry(slug, entry) {
|
|
96
|
+
const file = readVersionsFile(slug) || { versions: [] };
|
|
97
|
+
// Check if version already exists
|
|
98
|
+
const existingIndex = file.versions.findIndex((v) => v.version === entry.version);
|
|
99
|
+
const fullEntry = {
|
|
100
|
+
...entry,
|
|
101
|
+
createdAt: entry.createdAt || new Date().toISOString(),
|
|
102
|
+
};
|
|
103
|
+
if (existingIndex >= 0) {
|
|
104
|
+
// Update existing version
|
|
105
|
+
file.versions[existingIndex] = fullEntry;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Add new version
|
|
109
|
+
file.versions.push(fullEntry);
|
|
110
|
+
}
|
|
111
|
+
// Sort versions descending (newest first)
|
|
112
|
+
file.versions.sort((a, b) => {
|
|
113
|
+
const aValid = isValidVersion(a.version);
|
|
114
|
+
const bValid = isValidVersion(b.version);
|
|
115
|
+
if (!aValid && !bValid)
|
|
116
|
+
return 0;
|
|
117
|
+
if (!aValid)
|
|
118
|
+
return 1;
|
|
119
|
+
if (!bValid)
|
|
120
|
+
return -1;
|
|
121
|
+
return sortVersionsDesc([a.version, b.version])[0] === a.version ? -1 : 1;
|
|
122
|
+
});
|
|
123
|
+
writeVersionsFile(slug, file);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove a version entry
|
|
127
|
+
*
|
|
128
|
+
* @returns true if removed, false if didn't exist
|
|
129
|
+
*/
|
|
130
|
+
export function removeVersionEntry(slug, version) {
|
|
131
|
+
const file = readVersionsFile(slug);
|
|
132
|
+
if (!file)
|
|
133
|
+
return false;
|
|
134
|
+
const initialLength = file.versions.length;
|
|
135
|
+
file.versions = file.versions.filter((v) => v.version !== version);
|
|
136
|
+
if (file.versions.length < initialLength) {
|
|
137
|
+
writeVersionsFile(slug, file);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check if a specific version exists
|
|
144
|
+
*/
|
|
145
|
+
export function versionExists(slug, version) {
|
|
146
|
+
return getVersionEntry(slug, version) !== null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get version count for a skill
|
|
150
|
+
*/
|
|
151
|
+
export function getVersionCount(slug) {
|
|
152
|
+
return getAllVersions(slug).length;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create default provenance for a locally created skill
|
|
156
|
+
*/
|
|
157
|
+
export function createLocalProvenance(source = 'created') {
|
|
158
|
+
return {
|
|
159
|
+
kind: 'local',
|
|
160
|
+
source,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/lib/local-registry/versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SkillsLock, LockedSkill } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the path to .skills.lock
|
|
4
|
+
*/
|
|
5
|
+
export declare function getLockfilePath(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Check if lockfile exists
|
|
8
|
+
*/
|
|
9
|
+
export declare function lockfileExists(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Read .skills.lock
|
|
12
|
+
*/
|
|
13
|
+
export declare function readLockfile(): SkillsLock | null;
|
|
14
|
+
/**
|
|
15
|
+
* Write .skills.lock
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeLockfile(lock: SkillsLock): void;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new lockfile
|
|
20
|
+
*/
|
|
21
|
+
export declare function createLockfile(skills: LockedSkill[]): SkillsLock;
|
|
22
|
+
/**
|
|
23
|
+
* Get a locked skill by slug
|
|
24
|
+
*/
|
|
25
|
+
export declare function getLockedSkill(slug: string): LockedSkill | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Update or add a skill in the lockfile
|
|
28
|
+
*/
|
|
29
|
+
export declare function updateLockedSkill(skill: LockedSkill): void;
|
|
30
|
+
/**
|
|
31
|
+
* Remove a skill from the lockfile
|
|
32
|
+
*/
|
|
33
|
+
export declare function removeLockedSkill(slug: string, registry?: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a skill has changed (compare hash)
|
|
36
|
+
*/
|
|
37
|
+
export declare function hasSkillChanged(slug: string, registry: string, newHash: string): boolean;
|
|
38
|
+
//# sourceMappingURL=lockfile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,GAAG,IAAI,CAShD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAKhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAIpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoB1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAcvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as yaml from 'yaml';
|
|
4
|
+
import { findProjectRoot } from './config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get the path to .skills.lock
|
|
7
|
+
*/
|
|
8
|
+
export function getLockfilePath() {
|
|
9
|
+
const projectRoot = findProjectRoot() || process.cwd();
|
|
10
|
+
return path.join(projectRoot, '.skills.lock');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check if lockfile exists
|
|
14
|
+
*/
|
|
15
|
+
export function lockfileExists() {
|
|
16
|
+
return fs.existsSync(getLockfilePath());
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read .skills.lock
|
|
20
|
+
*/
|
|
21
|
+
export function readLockfile() {
|
|
22
|
+
const lockfilePath = getLockfilePath();
|
|
23
|
+
if (!fs.existsSync(lockfilePath)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const content = fs.readFileSync(lockfilePath, 'utf-8');
|
|
27
|
+
return yaml.parse(content);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Write .skills.lock
|
|
31
|
+
*/
|
|
32
|
+
export function writeLockfile(lock) {
|
|
33
|
+
const lockfilePath = getLockfilePath();
|
|
34
|
+
const content = `# .skills.lock — auto-generated, commit to repo\n${yaml.stringify(lock, {
|
|
35
|
+
lineWidth: 0,
|
|
36
|
+
})}`;
|
|
37
|
+
fs.writeFileSync(lockfilePath, content, 'utf-8');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a new lockfile
|
|
41
|
+
*/
|
|
42
|
+
export function createLockfile(skills) {
|
|
43
|
+
return {
|
|
44
|
+
locked_at: new Date().toISOString(),
|
|
45
|
+
skills,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get a locked skill by slug
|
|
50
|
+
*/
|
|
51
|
+
export function getLockedSkill(slug) {
|
|
52
|
+
const lock = readLockfile();
|
|
53
|
+
if (!lock)
|
|
54
|
+
return undefined;
|
|
55
|
+
return lock.skills.find(s => s.slug === slug);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Update or add a skill in the lockfile
|
|
59
|
+
*/
|
|
60
|
+
export function updateLockedSkill(skill) {
|
|
61
|
+
let lock = readLockfile();
|
|
62
|
+
if (!lock) {
|
|
63
|
+
lock = createLockfile([skill]);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const existingIndex = lock.skills.findIndex(s => s.slug === skill.slug && s.registry === skill.registry);
|
|
67
|
+
if (existingIndex >= 0) {
|
|
68
|
+
lock.skills[existingIndex] = skill;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
lock.skills.push(skill);
|
|
72
|
+
}
|
|
73
|
+
lock.locked_at = new Date().toISOString();
|
|
74
|
+
}
|
|
75
|
+
writeLockfile(lock);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Remove a skill from the lockfile
|
|
79
|
+
*/
|
|
80
|
+
export function removeLockedSkill(slug, registry) {
|
|
81
|
+
const lock = readLockfile();
|
|
82
|
+
if (!lock)
|
|
83
|
+
return;
|
|
84
|
+
if (registry) {
|
|
85
|
+
lock.skills = lock.skills.filter(s => !(s.slug === slug && s.registry === registry));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
lock.skills = lock.skills.filter(s => s.slug !== slug);
|
|
89
|
+
}
|
|
90
|
+
lock.locked_at = new Date().toISOString();
|
|
91
|
+
writeLockfile(lock);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if a skill has changed (compare hash)
|
|
95
|
+
*/
|
|
96
|
+
export function hasSkillChanged(slug, registry, newHash) {
|
|
97
|
+
const locked = getLockedSkill(slug);
|
|
98
|
+
if (!locked || locked.registry !== registry)
|
|
99
|
+
return true;
|
|
100
|
+
return locked.sha256 !== newHash;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=lockfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The meta-skill content that teaches AI agents how to use the skills system.
|
|
3
|
+
* This is bundled with the CLI and installed to _system/SKILL.md during sync.
|
|
4
|
+
*/
|
|
5
|
+
export declare const META_SKILL_CONTENT = "# Skills System \u2014 Agent Instructions\n\nYou have access to a skills system that provides curated instruction files\nto guide your work. This file explains how to use it.\n\n## Discovering Skills\n\nCheck the file `SKILLS_INDEX.md` in this directory. It lists every skill\ninstalled in this project with its name, description, tags, and file path.\n\nBefore starting any task, scan SKILLS_INDEX.md to identify relevant skills.\nMatch skills to your task by:\n- Name and description (most reliable)\n- Tags (e.g. if working with Supabase, look for \"supabase\" tag)\n- Compatibility (check if your agent type is listed)\n\n## Using Skills\n\nWhen you find a relevant skill:\n1. Read the full SKILL.md file at the path listed in SKILLS_INDEX.md\n2. Follow its instructions as authoritative guidance for your work\n3. If multiple skills are relevant, read all of them before starting\n4. Skills take precedence over your default patterns when they conflict\n\n## Managing Skills (When Asked by the User)\n\nIf the user asks you to manage skills, you have these CLI commands available.\nRun them in the terminal:\n\n### Viewing Available Skills\n- `skills list` \u2014 Show all skills available in remote registries\n- `skills list --installed` \u2014 Show skills installed in this project\n- `skills search <query>` \u2014 Search for skills by keyword\n- `skills info <name>` \u2014 Show full details about a skill\n\n### Installing and Removing\n- `skills add <name>` \u2014 Add a skill to this project and sync it\n- `skills remove <name>` \u2014 Remove a skill from this project\n- `skills sync` \u2014 Re-sync all installed skills from remote\n- `skills update` \u2014 Pull latest versions of all skills\n\n### Editing and Publishing\n- `skills edit <name>` \u2014 Open a skill for editing in the default editor\n- `skills push <name>` \u2014 Publish local edits to the remote registry\n- `skills diff <name>` \u2014 See what changed between local and remote\n- `skills validate <name>` \u2014 Check skill file structure\n\n### Creating New Skills\nTo create a new skill:\n1. Write a SKILL.md file following the format of existing skills\n2. Run `skills push <name> --from-stdin` piping in the content, or\n3. Create the file in the skills folder and run `skills push <name>`\n\nA good SKILL.md includes:\n- A clear title (# heading)\n- A description of what the skill covers\n- Specific, actionable instructions\n- Code examples where relevant\n- Common pitfalls or anti-patterns to avoid\n\n## Rules\n\n- Do NOT modify .skills.yaml directly \u2014 use the CLI commands\n- Do NOT delete or rename skill folders manually\n- Do NOT assume a skill exists without checking SKILLS_INDEX.md\n- The _system folder (where this file lives) is managed by the CLI \u2014 do not modify it\n";
|
|
6
|
+
//# sourceMappingURL=meta-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-skill.d.ts","sourceRoot":"","sources":["../../src/lib/meta-skill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,quFAkE9B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The meta-skill content that teaches AI agents how to use the skills system.
|
|
3
|
+
* This is bundled with the CLI and installed to _system/SKILL.md during sync.
|
|
4
|
+
*/
|
|
5
|
+
export const META_SKILL_CONTENT = `# Skills System — Agent Instructions
|
|
6
|
+
|
|
7
|
+
You have access to a skills system that provides curated instruction files
|
|
8
|
+
to guide your work. This file explains how to use it.
|
|
9
|
+
|
|
10
|
+
## Discovering Skills
|
|
11
|
+
|
|
12
|
+
Check the file \`SKILLS_INDEX.md\` in this directory. It lists every skill
|
|
13
|
+
installed in this project with its name, description, tags, and file path.
|
|
14
|
+
|
|
15
|
+
Before starting any task, scan SKILLS_INDEX.md to identify relevant skills.
|
|
16
|
+
Match skills to your task by:
|
|
17
|
+
- Name and description (most reliable)
|
|
18
|
+
- Tags (e.g. if working with Supabase, look for "supabase" tag)
|
|
19
|
+
- Compatibility (check if your agent type is listed)
|
|
20
|
+
|
|
21
|
+
## Using Skills
|
|
22
|
+
|
|
23
|
+
When you find a relevant skill:
|
|
24
|
+
1. Read the full SKILL.md file at the path listed in SKILLS_INDEX.md
|
|
25
|
+
2. Follow its instructions as authoritative guidance for your work
|
|
26
|
+
3. If multiple skills are relevant, read all of them before starting
|
|
27
|
+
4. Skills take precedence over your default patterns when they conflict
|
|
28
|
+
|
|
29
|
+
## Managing Skills (When Asked by the User)
|
|
30
|
+
|
|
31
|
+
If the user asks you to manage skills, you have these CLI commands available.
|
|
32
|
+
Run them in the terminal:
|
|
33
|
+
|
|
34
|
+
### Viewing Available Skills
|
|
35
|
+
- \`skills list\` — Show all skills available in remote registries
|
|
36
|
+
- \`skills list --installed\` — Show skills installed in this project
|
|
37
|
+
- \`skills search <query>\` — Search for skills by keyword
|
|
38
|
+
- \`skills info <name>\` — Show full details about a skill
|
|
39
|
+
|
|
40
|
+
### Installing and Removing
|
|
41
|
+
- \`skills add <name>\` — Add a skill to this project and sync it
|
|
42
|
+
- \`skills remove <name>\` — Remove a skill from this project
|
|
43
|
+
- \`skills sync\` — Re-sync all installed skills from remote
|
|
44
|
+
- \`skills update\` — Pull latest versions of all skills
|
|
45
|
+
|
|
46
|
+
### Editing and Publishing
|
|
47
|
+
- \`skills edit <name>\` — Open a skill for editing in the default editor
|
|
48
|
+
- \`skills push <name>\` — Publish local edits to the remote registry
|
|
49
|
+
- \`skills diff <name>\` — See what changed between local and remote
|
|
50
|
+
- \`skills validate <name>\` — Check skill file structure
|
|
51
|
+
|
|
52
|
+
### Creating New Skills
|
|
53
|
+
To create a new skill:
|
|
54
|
+
1. Write a SKILL.md file following the format of existing skills
|
|
55
|
+
2. Run \`skills push <name> --from-stdin\` piping in the content, or
|
|
56
|
+
3. Create the file in the skills folder and run \`skills push <name>\`
|
|
57
|
+
|
|
58
|
+
A good SKILL.md includes:
|
|
59
|
+
- A clear title (# heading)
|
|
60
|
+
- A description of what the skill covers
|
|
61
|
+
- Specific, actionable instructions
|
|
62
|
+
- Code examples where relevant
|
|
63
|
+
- Common pitfalls or anti-patterns to avoid
|
|
64
|
+
|
|
65
|
+
## Rules
|
|
66
|
+
|
|
67
|
+
- Do NOT modify .skills.yaml directly — use the CLI commands
|
|
68
|
+
- Do NOT delete or rename skill folders manually
|
|
69
|
+
- Do NOT assume a skill exists without checking SKILLS_INDEX.md
|
|
70
|
+
- The _system folder (where this file lives) is managed by the CLI — do not modify it
|
|
71
|
+
`;
|
|
72
|
+
//# sourceMappingURL=meta-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-skill.js","sourceRoot":"","sources":["../../src/lib/meta-skill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEjC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a version string is valid semver
|
|
4
|
+
*/
|
|
5
|
+
export declare function isValidVersion(version: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Parse a version string
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseVersion(version: string): semver.SemVer | null;
|
|
10
|
+
/**
|
|
11
|
+
* Compare two versions
|
|
12
|
+
* Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
13
|
+
*/
|
|
14
|
+
export declare function compareVersions(v1: string, v2: string): number;
|
|
15
|
+
/**
|
|
16
|
+
* Check if a version satisfies a constraint
|
|
17
|
+
*/
|
|
18
|
+
export declare function satisfies(version: string, constraint: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Get the highest version from a list that satisfies a constraint
|
|
21
|
+
*/
|
|
22
|
+
export declare function maxSatisfying(versions: string[], constraint: string): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Bump a version by type
|
|
25
|
+
*/
|
|
26
|
+
export declare function bumpVersion(version: string, type: 'major' | 'minor' | 'patch'): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Auto-bump version (patch by default)
|
|
29
|
+
*/
|
|
30
|
+
export declare function autoBump(version: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Check if v1 is greater than v2
|
|
33
|
+
*/
|
|
34
|
+
export declare function isGreaterThan(v1: string, v2: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check if v1 is less than v2
|
|
37
|
+
*/
|
|
38
|
+
export declare function isLessThan(v1: string, v2: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if two versions are equal
|
|
41
|
+
*/
|
|
42
|
+
export declare function isEqual(v1: string, v2: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Parse a version constraint
|
|
45
|
+
* Supports: exact (1.0.0), range (>=1.0.0, ^1.0.0, ~1.0.0)
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseConstraint(constraint: string): {
|
|
48
|
+
type: 'exact' | 'range';
|
|
49
|
+
value: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a version from a list based on constraint
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveVersion(versions: string[], constraint?: string): string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Sort versions in descending order (newest first)
|
|
57
|
+
*/
|
|
58
|
+
export declare function sortVersionsDesc(versions: string[]): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Sort versions in ascending order (oldest first)
|
|
61
|
+
*/
|
|
62
|
+
export declare function sortVersionsAsc(versions: string[]): string[];
|
|
63
|
+
//# sourceMappingURL=semver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/lib/semver.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAE7F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IACnD,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAeA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAcf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE5D"}
|