@corvus-tools/skill-manager-core 0.1.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.
Files changed (86) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agents/AgentAdapter.d.ts +11 -0
  3. package/dist/agents/AgentAdapter.d.ts.map +1 -0
  4. package/dist/agents/AgentAdapter.js +2 -0
  5. package/dist/agents/AgentAdapter.js.map +1 -0
  6. package/dist/agents/adapters.d.ts +44 -0
  7. package/dist/agents/adapters.d.ts.map +1 -0
  8. package/dist/agents/adapters.js +56 -0
  9. package/dist/agents/adapters.js.map +1 -0
  10. package/dist/config/configSchema.d.ts +109 -0
  11. package/dist/config/configSchema.d.ts.map +1 -0
  12. package/dist/config/configSchema.js +46 -0
  13. package/dist/config/configSchema.js.map +1 -0
  14. package/dist/config/configStore.d.ts +24 -0
  15. package/dist/config/configStore.d.ts.map +1 -0
  16. package/dist/config/configStore.js +77 -0
  17. package/dist/config/configStore.js.map +1 -0
  18. package/dist/git/gitRunner.d.ts +10 -0
  19. package/dist/git/gitRunner.d.ts.map +1 -0
  20. package/dist/git/gitRunner.js +23 -0
  21. package/dist/git/gitRunner.js.map +1 -0
  22. package/dist/git/skillpackSetup.d.ts +37 -0
  23. package/dist/git/skillpackSetup.d.ts.map +1 -0
  24. package/dist/git/skillpackSetup.js +177 -0
  25. package/dist/git/skillpackSetup.js.map +1 -0
  26. package/dist/index.d.ts +20 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +18 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/links/applyEngine.d.ts +24 -0
  31. package/dist/links/applyEngine.d.ts.map +1 -0
  32. package/dist/links/applyEngine.js +230 -0
  33. package/dist/links/applyEngine.js.map +1 -0
  34. package/dist/links/linkPlan.d.ts +54 -0
  35. package/dist/links/linkPlan.d.ts.map +1 -0
  36. package/dist/links/linkPlan.js +121 -0
  37. package/dist/links/linkPlan.js.map +1 -0
  38. package/dist/lock/lockSchema.d.ts +84 -0
  39. package/dist/lock/lockSchema.d.ts.map +1 -0
  40. package/dist/lock/lockSchema.js +30 -0
  41. package/dist/lock/lockSchema.js.map +1 -0
  42. package/dist/lock/lockStore.d.ts +15 -0
  43. package/dist/lock/lockStore.d.ts.map +1 -0
  44. package/dist/lock/lockStore.js +56 -0
  45. package/dist/lock/lockStore.js.map +1 -0
  46. package/dist/manifest/manifestSchema.d.ts +86 -0
  47. package/dist/manifest/manifestSchema.d.ts.map +1 -0
  48. package/dist/manifest/manifestSchema.js +32 -0
  49. package/dist/manifest/manifestSchema.js.map +1 -0
  50. package/dist/manifest/manifestStore.d.ts +18 -0
  51. package/dist/manifest/manifestStore.d.ts.map +1 -0
  52. package/dist/manifest/manifestStore.js +47 -0
  53. package/dist/manifest/manifestStore.js.map +1 -0
  54. package/dist/paths.d.ts +14 -0
  55. package/dist/paths.d.ts.map +1 -0
  56. package/dist/paths.js +43 -0
  57. package/dist/paths.js.map +1 -0
  58. package/dist/registry/registrySchema.d.ts +73 -0
  59. package/dist/registry/registrySchema.d.ts.map +1 -0
  60. package/dist/registry/registrySchema.js +30 -0
  61. package/dist/registry/registrySchema.js.map +1 -0
  62. package/dist/reports/doctorReport.d.ts +5 -0
  63. package/dist/reports/doctorReport.d.ts.map +1 -0
  64. package/dist/reports/doctorReport.js +297 -0
  65. package/dist/reports/doctorReport.js.map +1 -0
  66. package/dist/reports/reportInternals.d.ts +48 -0
  67. package/dist/reports/reportInternals.d.ts.map +1 -0
  68. package/dist/reports/reportInternals.js +220 -0
  69. package/dist/reports/reportInternals.js.map +1 -0
  70. package/dist/reports/reportTypes.d.ts +54 -0
  71. package/dist/reports/reportTypes.d.ts.map +1 -0
  72. package/dist/reports/reportTypes.js +2 -0
  73. package/dist/reports/reportTypes.js.map +1 -0
  74. package/dist/reports/statusReport.d.ts +6 -0
  75. package/dist/reports/statusReport.d.ts.map +1 -0
  76. package/dist/reports/statusReport.js +49 -0
  77. package/dist/reports/statusReport.js.map +1 -0
  78. package/dist/skillpackDefaults.d.ts +5 -0
  79. package/dist/skillpackDefaults.d.ts.map +1 -0
  80. package/dist/skillpackDefaults.js +5 -0
  81. package/dist/skillpackDefaults.js.map +1 -0
  82. package/dist/skills/skillDiscovery.d.ts +36 -0
  83. package/dist/skills/skillDiscovery.d.ts.map +1 -0
  84. package/dist/skills/skillDiscovery.js +441 -0
  85. package/dist/skills/skillDiscovery.js.map +1 -0
  86. package/package.json +37 -0
@@ -0,0 +1,441 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ import matter from 'gray-matter';
4
+ import { z } from 'zod';
5
+ import { isPathInside, resolveUserPath } from '../paths.js';
6
+ import { registrySkillEntrySchema, } from '../registry/registrySchema.js';
7
+ const skillFrontmatterSchema = z
8
+ .object({
9
+ name: z.string().min(1),
10
+ description: z.string().min(1)
11
+ })
12
+ .passthrough();
13
+ const rawRegistrySchema = z
14
+ .object({
15
+ version: z.number().int().positive().optional(),
16
+ skills: z.array(z.unknown())
17
+ })
18
+ .strict();
19
+ const executableFilePattern = /\.(?:sh|bash|zsh|fish|ps1|bat|cmd|js|mjs|cjs|ts|tsx|py|rb|pl)$/i;
20
+ const suspiciousShellPatterns = [
21
+ {
22
+ code: 'suspicious-curl-pipe',
23
+ pattern: /\b(?:curl|wget)\b[\s\S]{0,120}\|\s*(?:sh|bash|zsh)\b/i,
24
+ message: 'SKILL.md contains a download piped into a shell.'
25
+ },
26
+ {
27
+ code: 'suspicious-rm-rf',
28
+ pattern: /\brm\s+-[^\n]*r[^\n]*f\b/i,
29
+ message: 'SKILL.md contains an rm -rf style command.'
30
+ },
31
+ {
32
+ code: 'suspicious-sudo',
33
+ pattern: /\bsudo\b/i,
34
+ message: 'SKILL.md mentions sudo.'
35
+ },
36
+ {
37
+ code: 'suspicious-chmod-exec',
38
+ pattern: /\bchmod\s+\+x\b/i,
39
+ message: 'SKILL.md mentions chmod +x.'
40
+ }
41
+ ];
42
+ export async function discoverSkillsFromCheckout(skillpackRoot) {
43
+ const resolvedRoot = resolveUserPath(skillpackRoot);
44
+ const registryPath = path.join(resolvedRoot, 'registry.json');
45
+ const result = {
46
+ skillpackRoot: resolvedRoot,
47
+ registryPath,
48
+ skills: [],
49
+ warnings: [],
50
+ errors: []
51
+ };
52
+ const registry = await loadRegistry(registryPath, result.errors);
53
+ if (registry.status === 'missing') {
54
+ result.warnings.push({
55
+ severity: 'warning',
56
+ code: 'missing-registry',
57
+ message: `Missing registry.json at ${registryPath}; discovering SKILL.md files in read-only fallback mode.`,
58
+ path: registryPath
59
+ });
60
+ await discoverSkillsWithoutRegistry(resolvedRoot, result);
61
+ return result;
62
+ }
63
+ if (registry.status === 'invalid') {
64
+ return result;
65
+ }
66
+ const seenSkillIds = new Set();
67
+ for (const rawEntry of registry.skills) {
68
+ const entryResult = registrySkillEntrySchema.safeParse(rawEntry);
69
+ if (!entryResult.success) {
70
+ const invalidEntryIssue = {
71
+ severity: 'error',
72
+ code: 'invalid-skill-entry',
73
+ message: `Invalid skill entry: ${formatZodIssues(entryResult.error)}`
74
+ };
75
+ const inferredSkillId = inferSkillId(rawEntry);
76
+ if (inferredSkillId !== undefined) {
77
+ invalidEntryIssue.skillId = inferredSkillId;
78
+ }
79
+ result.errors.push(invalidEntryIssue);
80
+ continue;
81
+ }
82
+ const entry = entryResult.data;
83
+ if (seenSkillIds.has(entry.id)) {
84
+ result.errors.push({
85
+ severity: 'error',
86
+ code: 'duplicate-skill-id',
87
+ message: `Duplicate skill id "${entry.id}".`,
88
+ skillId: entry.id
89
+ });
90
+ continue;
91
+ }
92
+ seenSkillIds.add(entry.id);
93
+ const resolvedSkillPath = validateSkillPath(resolvedRoot, entry, result.errors);
94
+ if (resolvedSkillPath === undefined) {
95
+ continue;
96
+ }
97
+ const skillFilePath = path.join(resolvedSkillPath, 'SKILL.md');
98
+ const skillFile = await readSkillFile(skillFilePath, entry, result.errors);
99
+ if (skillFile === undefined) {
100
+ continue;
101
+ }
102
+ const parsedFrontmatter = skillFrontmatterSchema.safeParse(skillFile.data);
103
+ if (!parsedFrontmatter.success) {
104
+ result.errors.push({
105
+ severity: 'error',
106
+ code: 'invalid-skill-frontmatter',
107
+ message: `Invalid frontmatter in ${entry.path}/SKILL.md: ${formatZodIssues(parsedFrontmatter.error)}`,
108
+ skillId: entry.id,
109
+ path: skillFilePath
110
+ });
111
+ continue;
112
+ }
113
+ const riskWarnings = await scanSkillRisk({
114
+ skillId: entry.id,
115
+ skillPath: resolvedSkillPath,
116
+ skillFileContent: skillFile.content
117
+ });
118
+ result.warnings.push(...riskWarnings);
119
+ result.skills.push({
120
+ id: entry.id,
121
+ title: entry.title,
122
+ description: entry.description,
123
+ supportedAgents: entry.supportedAgents,
124
+ tags: entry.tags ?? [],
125
+ relativePath: entry.path,
126
+ absolutePath: resolvedSkillPath,
127
+ skillFilePath,
128
+ frontmatter: {
129
+ name: parsedFrontmatter.data.name,
130
+ description: parsedFrontmatter.data.description
131
+ },
132
+ riskWarnings
133
+ });
134
+ }
135
+ return result;
136
+ }
137
+ async function loadRegistry(registryPath, errors) {
138
+ let rawRegistry;
139
+ try {
140
+ rawRegistry = await fs.readFile(registryPath, 'utf8');
141
+ }
142
+ catch (error) {
143
+ if (error instanceof Error &&
144
+ 'code' in error &&
145
+ error.code === 'ENOENT') {
146
+ return { status: 'missing' };
147
+ }
148
+ errors.push({
149
+ severity: 'error',
150
+ code: 'registry-read-failed',
151
+ message: `Failed to read registry.json at ${registryPath}: ${error instanceof Error ? error.message : String(error)}.`,
152
+ path: registryPath
153
+ });
154
+ return { status: 'invalid' };
155
+ }
156
+ let parsedRegistry;
157
+ try {
158
+ parsedRegistry = JSON.parse(rawRegistry);
159
+ }
160
+ catch (error) {
161
+ errors.push({
162
+ severity: 'error',
163
+ code: 'invalid-registry-json',
164
+ message: `registry.json is not valid JSON: ${error instanceof Error ? error.message : String(error)}.`,
165
+ path: registryPath
166
+ });
167
+ return { status: 'invalid' };
168
+ }
169
+ const registryResult = rawRegistrySchema.safeParse(parsedRegistry);
170
+ if (!registryResult.success) {
171
+ errors.push({
172
+ severity: 'error',
173
+ code: 'invalid-registry',
174
+ message: `registry.json failed validation: ${formatZodIssues(registryResult.error)}.`,
175
+ path: registryPath
176
+ });
177
+ return { status: 'invalid' };
178
+ }
179
+ return { status: 'loaded', skills: registryResult.data.skills };
180
+ }
181
+ async function discoverSkillsWithoutRegistry(skillpackRoot, result) {
182
+ const skillFilePaths = await findSkillFiles(skillpackRoot);
183
+ const seenSkillIds = new Set();
184
+ if (skillFilePaths.length === 0) {
185
+ result.errors.push({
186
+ severity: 'error',
187
+ code: 'no-skill-files',
188
+ message: `No SKILL.md files were found under ${skillpackRoot}.`,
189
+ path: skillpackRoot
190
+ });
191
+ return;
192
+ }
193
+ for (const skillFilePath of skillFilePaths) {
194
+ const skillPath = path.dirname(skillFilePath);
195
+ const relativePath = path.relative(skillpackRoot, skillPath);
196
+ const parsedSkillFile = await readSkillFileByPath(skillFilePath, result.errors);
197
+ if (parsedSkillFile === undefined) {
198
+ continue;
199
+ }
200
+ const parsedFrontmatter = skillFrontmatterSchema.safeParse(parsedSkillFile.data);
201
+ if (!parsedFrontmatter.success) {
202
+ result.errors.push({
203
+ severity: 'error',
204
+ code: 'invalid-skill-frontmatter',
205
+ message: `Invalid frontmatter in ${relativePath}/SKILL.md: ${formatZodIssues(parsedFrontmatter.error)}`,
206
+ path: skillFilePath
207
+ });
208
+ continue;
209
+ }
210
+ const entryResult = registrySkillEntrySchema.safeParse({
211
+ id: parsedFrontmatter.data.name,
212
+ path: relativePath,
213
+ title: parsedFrontmatter.data.name,
214
+ description: parsedFrontmatter.data.description,
215
+ supportedAgents: ['codex'],
216
+ tags: ['registryless']
217
+ });
218
+ if (!entryResult.success) {
219
+ result.errors.push({
220
+ severity: 'error',
221
+ code: 'invalid-discovered-skill',
222
+ message: `Discovered SKILL.md at ${skillFilePath} cannot be represented as a skill: ${formatZodIssues(entryResult.error)}`,
223
+ path: skillFilePath
224
+ });
225
+ continue;
226
+ }
227
+ const entry = entryResult.data;
228
+ if (seenSkillIds.has(entry.id)) {
229
+ result.errors.push({
230
+ severity: 'error',
231
+ code: 'duplicate-skill-id',
232
+ message: `Duplicate skill id "${entry.id}" discovered from SKILL.md frontmatter.`,
233
+ skillId: entry.id,
234
+ path: skillFilePath
235
+ });
236
+ continue;
237
+ }
238
+ seenSkillIds.add(entry.id);
239
+ const riskWarnings = await scanSkillRisk({
240
+ skillId: entry.id,
241
+ skillPath,
242
+ skillFileContent: parsedSkillFile.content
243
+ });
244
+ result.warnings.push(...riskWarnings);
245
+ result.skills.push({
246
+ id: entry.id,
247
+ title: entry.title,
248
+ description: entry.description,
249
+ supportedAgents: entry.supportedAgents,
250
+ tags: entry.tags ?? [],
251
+ relativePath: entry.path,
252
+ absolutePath: skillPath,
253
+ skillFilePath,
254
+ frontmatter: {
255
+ name: parsedFrontmatter.data.name,
256
+ description: parsedFrontmatter.data.description
257
+ },
258
+ riskWarnings
259
+ });
260
+ }
261
+ }
262
+ function validateSkillPath(skillpackRoot, entry, errors) {
263
+ if (path.isAbsolute(entry.path) || path.win32.isAbsolute(entry.path)) {
264
+ errors.push({
265
+ severity: 'error',
266
+ code: 'absolute-skill-path',
267
+ message: `Skill "${entry.id}" uses an absolute path, which is not allowed.`,
268
+ skillId: entry.id,
269
+ path: entry.path
270
+ });
271
+ return undefined;
272
+ }
273
+ const pathSegments = entry.path.split(/[\\/]+/);
274
+ if (pathSegments.includes('..')) {
275
+ errors.push({
276
+ severity: 'error',
277
+ code: 'skill-path-traversal',
278
+ message: `Skill "${entry.id}" path escapes the skillpack root.`,
279
+ skillId: entry.id,
280
+ path: entry.path
281
+ });
282
+ return undefined;
283
+ }
284
+ const normalizedRelativePath = path.normalize(entry.path);
285
+ const resolvedSkillPath = path.resolve(skillpackRoot, normalizedRelativePath);
286
+ if (!isPathInside(skillpackRoot, resolvedSkillPath)) {
287
+ errors.push({
288
+ severity: 'error',
289
+ code: 'skill-path-outside-root',
290
+ message: `Skill "${entry.id}" resolves outside the skillpack root.`,
291
+ skillId: entry.id,
292
+ path: entry.path
293
+ });
294
+ return undefined;
295
+ }
296
+ return resolvedSkillPath;
297
+ }
298
+ async function readSkillFile(skillFilePath, entry, errors) {
299
+ const parsed = await readSkillFileByPath(skillFilePath, errors);
300
+ if (parsed === undefined) {
301
+ errors.push({
302
+ severity: 'error',
303
+ code: 'missing-skill-file',
304
+ message: `Skill "${entry.id}" is missing SKILL.md at ${skillFilePath}.`,
305
+ skillId: entry.id,
306
+ path: skillFilePath
307
+ });
308
+ }
309
+ return parsed;
310
+ }
311
+ async function readSkillFileByPath(skillFilePath, errors) {
312
+ let content;
313
+ try {
314
+ content = await fs.readFile(skillFilePath, 'utf8');
315
+ }
316
+ catch (error) {
317
+ if (!(error instanceof Error &&
318
+ 'code' in error &&
319
+ error.code === 'ENOENT')) {
320
+ errors.push({
321
+ severity: 'error',
322
+ code: 'skill-file-read-failed',
323
+ message: `Failed to read SKILL.md at ${skillFilePath}: ${error instanceof Error ? error.message : String(error)}.`,
324
+ path: skillFilePath
325
+ });
326
+ }
327
+ return undefined;
328
+ }
329
+ const parsed = matter(content);
330
+ return {
331
+ content,
332
+ data: parsed.data
333
+ };
334
+ }
335
+ async function scanSkillRisk(options) {
336
+ const warnings = [];
337
+ const scriptsPath = path.join(options.skillPath, 'scripts');
338
+ if (await directoryExists(scriptsPath)) {
339
+ warnings.push({
340
+ severity: 'warning',
341
+ code: 'scripts-directory',
342
+ message: 'Skill contains a scripts/ directory.',
343
+ skillId: options.skillId,
344
+ path: scriptsPath
345
+ });
346
+ }
347
+ for (const filePath of await listFiles(options.skillPath)) {
348
+ const relativePath = path.relative(options.skillPath, filePath);
349
+ const stat = await fs.stat(filePath);
350
+ if ((stat.mode & 0o111) !== 0 || executableFilePattern.test(relativePath)) {
351
+ warnings.push({
352
+ severity: 'warning',
353
+ code: 'executable-looking-file',
354
+ message: `Skill contains executable-looking file: ${relativePath}.`,
355
+ skillId: options.skillId,
356
+ path: filePath
357
+ });
358
+ }
359
+ }
360
+ for (const suspiciousPattern of suspiciousShellPatterns) {
361
+ if (suspiciousPattern.pattern.test(options.skillFileContent)) {
362
+ warnings.push({
363
+ severity: 'warning',
364
+ code: suspiciousPattern.code,
365
+ message: suspiciousPattern.message,
366
+ skillId: options.skillId,
367
+ path: path.join(options.skillPath, 'SKILL.md')
368
+ });
369
+ }
370
+ }
371
+ return warnings;
372
+ }
373
+ async function listFiles(rootPath) {
374
+ const files = [];
375
+ async function visit(currentPath) {
376
+ const entries = (await fs.readdir(currentPath, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name));
377
+ for (const entry of entries) {
378
+ const childPath = path.join(currentPath, entry.name);
379
+ if (entry.isDirectory()) {
380
+ await visit(childPath);
381
+ continue;
382
+ }
383
+ if (entry.isFile()) {
384
+ files.push(childPath);
385
+ }
386
+ }
387
+ }
388
+ await visit(rootPath);
389
+ return files;
390
+ }
391
+ async function findSkillFiles(rootPath) {
392
+ const skillFilePaths = [];
393
+ async function visit(currentPath) {
394
+ const entries = (await fs.readdir(currentPath, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name));
395
+ for (const entry of entries) {
396
+ if (entry.name === '.git' || entry.name === 'node_modules') {
397
+ continue;
398
+ }
399
+ const childPath = path.join(currentPath, entry.name);
400
+ if (entry.isDirectory()) {
401
+ await visit(childPath);
402
+ continue;
403
+ }
404
+ if (entry.isFile() && entry.name === 'SKILL.md') {
405
+ skillFilePaths.push(childPath);
406
+ }
407
+ }
408
+ }
409
+ await visit(rootPath);
410
+ return skillFilePaths;
411
+ }
412
+ async function directoryExists(candidatePath) {
413
+ try {
414
+ const stat = await fs.stat(candidatePath);
415
+ return stat.isDirectory();
416
+ }
417
+ catch (error) {
418
+ if (error instanceof Error &&
419
+ 'code' in error &&
420
+ error.code === 'ENOENT') {
421
+ return false;
422
+ }
423
+ throw error;
424
+ }
425
+ }
426
+ function inferSkillId(rawEntry) {
427
+ if (rawEntry !== null && typeof rawEntry === 'object' && 'id' in rawEntry) {
428
+ const id = rawEntry.id;
429
+ return typeof id === 'string' ? id : undefined;
430
+ }
431
+ return undefined;
432
+ }
433
+ function formatZodIssues(error) {
434
+ return error.issues
435
+ .map((issue) => {
436
+ const issuePath = issue.path.length === 0 ? '<root>' : issue.path.join('.');
437
+ return `${issuePath}: ${issue.message}`;
438
+ })
439
+ .join('; ');
440
+ }
441
+ //# sourceMappingURL=skillDiscovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillDiscovery.js","sourceRoot":"","sources":["../../src/skills/skillDiscovery.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@corvus-tools/skill-manager-core",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Core config, discovery, planning, apply, status, and doctor logic for Corvus Skill Manager.",
7
+ "license": "MIT",
8
+ "files": [
9
+ "dist/**/*.js",
10
+ "dist/**/*.d.ts",
11
+ "dist/**/*.js.map",
12
+ "dist/**/*.d.ts.map"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "development": "./src/index.ts",
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "execa": "^9.5.2",
29
+ "gray-matter": "^4.0.3",
30
+ "zod": "^3.24.1"
31
+ },
32
+ "scripts": {
33
+ "build": "tsc -b",
34
+ "typecheck": "tsc -b --pretty false",
35
+ "test": "vitest run"
36
+ }
37
+ }