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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "library-skills",
3
- "version": "0.0.5",
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": "^14.0.3",
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 (!isRecord2(project)) {
475
- return deps;
476
- }
477
- const dependencies = project["dependencies"];
478
- if (Array.isArray(dependencies)) {
479
- extractDepsFromSpecs(dependencies, deps);
480
- }
481
- const optionalDependencies = project["optional-dependencies"];
482
- if (isRecord2(optionalDependencies)) {
483
- for (const groupDependencies of Object.values(optionalDependencies)) {
484
- if (Array.isArray(groupDependencies)) {
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 (!isRecord(project)) {
57
- return deps;
58
- }
59
- const dependencies = project["dependencies"];
60
- if (Array.isArray(dependencies)) {
61
- extractDepsFromSpecs(dependencies, deps);
62
- }
63
- const optionalDependencies = project["optional-dependencies"];
64
- if (isRecord(optionalDependencies)) {
65
- for (const groupDependencies of Object.values(optionalDependencies)) {
66
- if (Array.isArray(groupDependencies)) {
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:
@@ -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-UGJ6NJYF.js";
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 (!isRecord(project)) {
23
- return deps;
24
- }
25
- const dependencies = project["dependencies"];
26
- if (Array.isArray(dependencies)) {
27
- extractDepsFromSpecs(dependencies, deps);
28
- }
29
- const optionalDependencies = project["optional-dependencies"];
30
- if (isRecord(optionalDependencies)) {
31
- for (const groupDependencies of Object.values(optionalDependencies)) {
32
- if (Array.isArray(groupDependencies)) {
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 {
@@ -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;
@@ -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>;
@@ -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>;
@@ -3,7 +3,7 @@ import {
3
3
  scanNodePackages,
4
4
  scanPythonDistributions,
5
5
  testing
6
- } from "./chunk-UGJ6NJYF.js";
6
+ } from "./chunk-DKDHRFD4.js";
7
7
  export {
8
8
  normalizePackageName,
9
9
  scanNodePackages,