library-skills 0.0.5 → 0.0.7
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/package.json +2 -2
- package/ts/dist/{chunk-UGJ6NJYF.js → chunk-DKDHRFD4.js} +5 -0
- package/ts/dist/cli.js +47 -12
- package/ts/dist/deps.cjs +43 -12
- package/ts/dist/deps.d.cts +2 -0
- package/ts/dist/deps.d.ts +2 -0
- package/ts/dist/deps.js +44 -13
- package/ts/dist/scanner.cjs +5 -0
- package/ts/dist/scanner.d.cts +2 -1
- package/ts/dist/scanner.d.ts +2 -1
- package/ts/dist/scanner.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "library-skills",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Library Skills, AI Agents using libraries, as intended, always up to date.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@inquirer/checkbox": "^5.1.4",
|
|
48
|
-
"commander": "^
|
|
48
|
+
"commander": "^15.0.0",
|
|
49
49
|
"csv-parse": "^6.2.1",
|
|
50
50
|
"smol-toml": "^1.6.1"
|
|
51
51
|
},
|
|
@@ -48,6 +48,7 @@ function scanPythonDistributions(sitePackages) {
|
|
|
48
48
|
if (found.skills.length === 0) {
|
|
49
49
|
const fallback = scanEditableDirectUrl({
|
|
50
50
|
distInfo,
|
|
51
|
+
sitePackages,
|
|
51
52
|
packageName: dist.name,
|
|
52
53
|
packageVersion: dist.version,
|
|
53
54
|
seenSkillDirs
|
|
@@ -231,6 +232,7 @@ function isSkillFileRecord(installedPath) {
|
|
|
231
232
|
}
|
|
232
233
|
function scanEditableDirectUrl({
|
|
233
234
|
distInfo,
|
|
235
|
+
sitePackages,
|
|
234
236
|
packageName,
|
|
235
237
|
packageVersion,
|
|
236
238
|
seenSkillDirs
|
|
@@ -245,6 +247,9 @@ function scanEditableDirectUrl({
|
|
|
245
247
|
if (!isRelativeTo(resolvedSkillMd, sourceRoot)) {
|
|
246
248
|
continue;
|
|
247
249
|
}
|
|
250
|
+
if (sitePackages && isRelativeTo(resolvedSkillMd, sitePackages)) {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
248
253
|
const skillDir = dirname(resolvedSkillMd);
|
|
249
254
|
if (seenSkillDirs.has(skillDir)) {
|
|
250
255
|
continue;
|
package/ts/dist/cli.js
CHANGED
|
@@ -62,6 +62,7 @@ function scanPythonDistributions(sitePackages) {
|
|
|
62
62
|
if (found.skills.length === 0) {
|
|
63
63
|
const fallback = scanEditableDirectUrl({
|
|
64
64
|
distInfo,
|
|
65
|
+
sitePackages,
|
|
65
66
|
packageName: dist.name,
|
|
66
67
|
packageVersion: dist.version,
|
|
67
68
|
seenSkillDirs
|
|
@@ -245,6 +246,7 @@ function isSkillFileRecord(installedPath) {
|
|
|
245
246
|
}
|
|
246
247
|
function scanEditableDirectUrl({
|
|
247
248
|
distInfo,
|
|
249
|
+
sitePackages,
|
|
248
250
|
packageName,
|
|
249
251
|
packageVersion,
|
|
250
252
|
seenSkillDirs
|
|
@@ -259,6 +261,9 @@ function scanEditableDirectUrl({
|
|
|
259
261
|
if (!isRelativeTo(resolvedSkillMd, sourceRoot)) {
|
|
260
262
|
continue;
|
|
261
263
|
}
|
|
264
|
+
if (sitePackages && isRelativeTo(resolvedSkillMd, sitePackages)) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
262
267
|
const skillDir = dirname(resolvedSkillMd);
|
|
263
268
|
if (seenSkillDirs.has(skillDir)) {
|
|
264
269
|
continue;
|
|
@@ -471,21 +476,26 @@ function getPythonTopLevelDeps(projectRoot) {
|
|
|
471
476
|
}
|
|
472
477
|
const deps = /* @__PURE__ */ new Set();
|
|
473
478
|
const project = data["project"];
|
|
474
|
-
if (
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
extractDepsFromSpecs(groupDependencies, deps);
|
|
479
|
+
if (isRecord2(project)) {
|
|
480
|
+
const dependencies = project["dependencies"];
|
|
481
|
+
if (Array.isArray(dependencies)) {
|
|
482
|
+
extractDepsFromSpecs(dependencies, deps);
|
|
483
|
+
}
|
|
484
|
+
const optionalDependencies = project["optional-dependencies"];
|
|
485
|
+
if (isRecord2(optionalDependencies)) {
|
|
486
|
+
for (const groupDependencies of Object.values(optionalDependencies)) {
|
|
487
|
+
if (Array.isArray(groupDependencies)) {
|
|
488
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
489
|
+
}
|
|
486
490
|
}
|
|
487
491
|
}
|
|
488
492
|
}
|
|
493
|
+
const dependencyGroups = data["dependency-groups"];
|
|
494
|
+
if (isRecord2(dependencyGroups)) {
|
|
495
|
+
for (const groupName of Object.keys(dependencyGroups)) {
|
|
496
|
+
extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, /* @__PURE__ */ new Set());
|
|
497
|
+
}
|
|
498
|
+
}
|
|
489
499
|
return deps;
|
|
490
500
|
}
|
|
491
501
|
function getNodeTopLevelDeps(projectRoot) {
|
|
@@ -540,6 +550,31 @@ function extractDepsFromSpecs(depSpecs, deps) {
|
|
|
540
550
|
}
|
|
541
551
|
}
|
|
542
552
|
}
|
|
553
|
+
function extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, visited) {
|
|
554
|
+
if (visited.has(groupName)) {
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
visited.add(groupName);
|
|
558
|
+
if (typeof groupName !== "string") {
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
const groupDependencies = dependencyGroups[groupName];
|
|
562
|
+
if (!Array.isArray(groupDependencies)) {
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
566
|
+
for (const groupDependency of groupDependencies) {
|
|
567
|
+
if (!isRecord2(groupDependency)) {
|
|
568
|
+
continue;
|
|
569
|
+
}
|
|
570
|
+
extractDepsFromDependencyGroup(
|
|
571
|
+
groupDependency["include-group"],
|
|
572
|
+
dependencyGroups,
|
|
573
|
+
deps,
|
|
574
|
+
visited
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
543
578
|
function isRecord2(value) {
|
|
544
579
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
545
580
|
}
|
package/ts/dist/deps.cjs
CHANGED
|
@@ -53,21 +53,26 @@ function getPythonTopLevelDeps(projectRoot) {
|
|
|
53
53
|
}
|
|
54
54
|
const deps = /* @__PURE__ */ new Set();
|
|
55
55
|
const project = data["project"];
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
extractDepsFromSpecs(groupDependencies, deps);
|
|
56
|
+
if (isRecord(project)) {
|
|
57
|
+
const dependencies = project["dependencies"];
|
|
58
|
+
if (Array.isArray(dependencies)) {
|
|
59
|
+
extractDepsFromSpecs(dependencies, deps);
|
|
60
|
+
}
|
|
61
|
+
const optionalDependencies = project["optional-dependencies"];
|
|
62
|
+
if (isRecord(optionalDependencies)) {
|
|
63
|
+
for (const groupDependencies of Object.values(optionalDependencies)) {
|
|
64
|
+
if (Array.isArray(groupDependencies)) {
|
|
65
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
66
|
+
}
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
}
|
|
70
|
+
const dependencyGroups = data["dependency-groups"];
|
|
71
|
+
if (isRecord(dependencyGroups)) {
|
|
72
|
+
for (const groupName of Object.keys(dependencyGroups)) {
|
|
73
|
+
extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, /* @__PURE__ */ new Set());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
71
76
|
return deps;
|
|
72
77
|
}
|
|
73
78
|
function getNodeTopLevelDeps(projectRoot) {
|
|
@@ -122,11 +127,37 @@ function extractDepsFromSpecs(depSpecs, deps) {
|
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
}
|
|
130
|
+
function extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, visited) {
|
|
131
|
+
if (visited.has(groupName)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
visited.add(groupName);
|
|
135
|
+
if (typeof groupName !== "string") {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const groupDependencies = dependencyGroups[groupName];
|
|
139
|
+
if (!Array.isArray(groupDependencies)) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
143
|
+
for (const groupDependency of groupDependencies) {
|
|
144
|
+
if (!isRecord(groupDependency)) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
extractDepsFromDependencyGroup(
|
|
148
|
+
groupDependency["include-group"],
|
|
149
|
+
dependencyGroups,
|
|
150
|
+
deps,
|
|
151
|
+
visited
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
125
155
|
function isRecord(value) {
|
|
126
156
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
127
157
|
}
|
|
128
158
|
var testing = {
|
|
129
159
|
extractDepsFromSpecs,
|
|
160
|
+
extractDepsFromDependencyGroup,
|
|
130
161
|
isRecord
|
|
131
162
|
};
|
|
132
163
|
// Annotate the CommonJS export names for ESM import in node:
|
package/ts/dist/deps.d.cts
CHANGED
|
@@ -2,9 +2,11 @@ declare function getPythonTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
|
2
2
|
declare function getNodeTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
3
3
|
declare function getTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
4
4
|
declare function extractDepsFromSpecs(depSpecs: unknown[], deps: Set<string>): void;
|
|
5
|
+
declare function extractDepsFromDependencyGroup(groupName: unknown, dependencyGroups: Record<string, unknown>, deps: Set<string>, visited: Set<unknown>): void;
|
|
5
6
|
declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
6
7
|
declare const testing: {
|
|
7
8
|
extractDepsFromSpecs: typeof extractDepsFromSpecs;
|
|
9
|
+
extractDepsFromDependencyGroup: typeof extractDepsFromDependencyGroup;
|
|
8
10
|
isRecord: typeof isRecord;
|
|
9
11
|
};
|
|
10
12
|
|
package/ts/dist/deps.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ declare function getPythonTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
|
2
2
|
declare function getNodeTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
3
3
|
declare function getTopLevelDeps(projectRoot: string): Set<string> | null;
|
|
4
4
|
declare function extractDepsFromSpecs(depSpecs: unknown[], deps: Set<string>): void;
|
|
5
|
+
declare function extractDepsFromDependencyGroup(groupName: unknown, dependencyGroups: Record<string, unknown>, deps: Set<string>, visited: Set<unknown>): void;
|
|
5
6
|
declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
6
7
|
declare const testing: {
|
|
7
8
|
extractDepsFromSpecs: typeof extractDepsFromSpecs;
|
|
9
|
+
extractDepsFromDependencyGroup: typeof extractDepsFromDependencyGroup;
|
|
8
10
|
isRecord: typeof isRecord;
|
|
9
11
|
};
|
|
10
12
|
|
package/ts/dist/deps.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizePackageName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DKDHRFD4.js";
|
|
4
4
|
|
|
5
5
|
// ts/src/deps.ts
|
|
6
6
|
import { existsSync, readFileSync } from "fs";
|
|
@@ -19,21 +19,26 @@ function getPythonTopLevelDeps(projectRoot) {
|
|
|
19
19
|
}
|
|
20
20
|
const deps = /* @__PURE__ */ new Set();
|
|
21
21
|
const project = data["project"];
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
extractDepsFromSpecs(groupDependencies, deps);
|
|
22
|
+
if (isRecord(project)) {
|
|
23
|
+
const dependencies = project["dependencies"];
|
|
24
|
+
if (Array.isArray(dependencies)) {
|
|
25
|
+
extractDepsFromSpecs(dependencies, deps);
|
|
26
|
+
}
|
|
27
|
+
const optionalDependencies = project["optional-dependencies"];
|
|
28
|
+
if (isRecord(optionalDependencies)) {
|
|
29
|
+
for (const groupDependencies of Object.values(optionalDependencies)) {
|
|
30
|
+
if (Array.isArray(groupDependencies)) {
|
|
31
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
32
|
+
}
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
}
|
|
36
|
+
const dependencyGroups = data["dependency-groups"];
|
|
37
|
+
if (isRecord(dependencyGroups)) {
|
|
38
|
+
for (const groupName of Object.keys(dependencyGroups)) {
|
|
39
|
+
extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, /* @__PURE__ */ new Set());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
37
42
|
return deps;
|
|
38
43
|
}
|
|
39
44
|
function getNodeTopLevelDeps(projectRoot) {
|
|
@@ -88,11 +93,37 @@ function extractDepsFromSpecs(depSpecs, deps) {
|
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
95
|
}
|
|
96
|
+
function extractDepsFromDependencyGroup(groupName, dependencyGroups, deps, visited) {
|
|
97
|
+
if (visited.has(groupName)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
visited.add(groupName);
|
|
101
|
+
if (typeof groupName !== "string") {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const groupDependencies = dependencyGroups[groupName];
|
|
105
|
+
if (!Array.isArray(groupDependencies)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
extractDepsFromSpecs(groupDependencies, deps);
|
|
109
|
+
for (const groupDependency of groupDependencies) {
|
|
110
|
+
if (!isRecord(groupDependency)) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
extractDepsFromDependencyGroup(
|
|
114
|
+
groupDependency["include-group"],
|
|
115
|
+
dependencyGroups,
|
|
116
|
+
deps,
|
|
117
|
+
visited
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
91
121
|
function isRecord(value) {
|
|
92
122
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
93
123
|
}
|
|
94
124
|
var testing = {
|
|
95
125
|
extractDepsFromSpecs,
|
|
126
|
+
extractDepsFromDependencyGroup,
|
|
96
127
|
isRecord
|
|
97
128
|
};
|
|
98
129
|
export {
|
package/ts/dist/scanner.cjs
CHANGED
|
@@ -61,6 +61,7 @@ function scanPythonDistributions(sitePackages) {
|
|
|
61
61
|
if (found.skills.length === 0) {
|
|
62
62
|
const fallback = scanEditableDirectUrl({
|
|
63
63
|
distInfo,
|
|
64
|
+
sitePackages,
|
|
64
65
|
packageName: dist.name,
|
|
65
66
|
packageVersion: dist.version,
|
|
66
67
|
seenSkillDirs
|
|
@@ -244,6 +245,7 @@ function isSkillFileRecord(installedPath) {
|
|
|
244
245
|
}
|
|
245
246
|
function scanEditableDirectUrl({
|
|
246
247
|
distInfo,
|
|
248
|
+
sitePackages,
|
|
247
249
|
packageName,
|
|
248
250
|
packageVersion,
|
|
249
251
|
seenSkillDirs
|
|
@@ -258,6 +260,9 @@ function scanEditableDirectUrl({
|
|
|
258
260
|
if (!isRelativeTo(resolvedSkillMd, sourceRoot)) {
|
|
259
261
|
continue;
|
|
260
262
|
}
|
|
263
|
+
if (sitePackages && isRelativeTo(resolvedSkillMd, sitePackages)) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
261
266
|
const skillDir = (0, import_node_path.dirname)(resolvedSkillMd);
|
|
262
267
|
if (seenSkillDirs.has(skillDir)) {
|
|
263
268
|
continue;
|
package/ts/dist/scanner.d.cts
CHANGED
|
@@ -21,8 +21,9 @@ declare function iterNodePackageRoots(nodeModules: string): string[];
|
|
|
21
21
|
declare function readNodePackageInfo(packageRoot: string): DistributionInfo | null;
|
|
22
22
|
declare function findNodeSkillMarkdownFiles(packageRoot: string): string[];
|
|
23
23
|
declare function isSkillFileRecord(installedPath: string): boolean;
|
|
24
|
-
declare function scanEditableDirectUrl({ distInfo, packageName, packageVersion, seenSkillDirs, }: {
|
|
24
|
+
declare function scanEditableDirectUrl({ distInfo, sitePackages, packageName, packageVersion, seenSkillDirs, }: {
|
|
25
25
|
distInfo: string;
|
|
26
|
+
sitePackages?: string;
|
|
26
27
|
packageName: string;
|
|
27
28
|
packageVersion: string;
|
|
28
29
|
seenSkillDirs: Set<string>;
|
package/ts/dist/scanner.d.ts
CHANGED
|
@@ -21,8 +21,9 @@ declare function iterNodePackageRoots(nodeModules: string): string[];
|
|
|
21
21
|
declare function readNodePackageInfo(packageRoot: string): DistributionInfo | null;
|
|
22
22
|
declare function findNodeSkillMarkdownFiles(packageRoot: string): string[];
|
|
23
23
|
declare function isSkillFileRecord(installedPath: string): boolean;
|
|
24
|
-
declare function scanEditableDirectUrl({ distInfo, packageName, packageVersion, seenSkillDirs, }: {
|
|
24
|
+
declare function scanEditableDirectUrl({ distInfo, sitePackages, packageName, packageVersion, seenSkillDirs, }: {
|
|
25
25
|
distInfo: string;
|
|
26
|
+
sitePackages?: string;
|
|
26
27
|
packageName: string;
|
|
27
28
|
packageVersion: string;
|
|
28
29
|
seenSkillDirs: Set<string>;
|