skill-creator 0.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/README.md +53 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +378 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/chromaSearch.d.ts +24 -0
- package/dist/core/chromaSearch.d.ts.map +1 -0
- package/dist/core/chromaSearch.js +192 -0
- package/dist/core/chromaSearch.js.map +1 -0
- package/dist/core/contentManager.d.ts +40 -0
- package/dist/core/contentManager.d.ts.map +1 -0
- package/dist/core/contentManager.js +355 -0
- package/dist/core/contentManager.js.map +1 -0
- package/dist/core/runScript.d.ts +5 -0
- package/dist/core/runScript.d.ts.map +1 -0
- package/dist/core/runScript.js +220 -0
- package/dist/core/runScript.js.map +1 -0
- package/dist/core/searchEngine.d.ts +25 -0
- package/dist/core/searchEngine.d.ts.map +1 -0
- package/dist/core/searchEngine.js +198 -0
- package/dist/core/searchEngine.js.map +1 -0
- package/dist/core/simpleSearch.d.ts +21 -0
- package/dist/core/simpleSearch.d.ts.map +1 -0
- package/dist/core/simpleSearch.js +113 -0
- package/dist/core/simpleSearch.js.map +1 -0
- package/dist/core/skillCreator.d.ts +16 -0
- package/dist/core/skillCreator.d.ts.map +1 -0
- package/dist/core/skillCreator.js +291 -0
- package/dist/core/skillCreator.js.map +1 -0
- package/dist/core/templateManager.d.ts +28 -0
- package/dist/core/templateManager.d.ts.map +1 -0
- package/dist/core/templateManager.js +612 -0
- package/dist/core/templateManager.js.map +1 -0
- package/dist/core/unifiedSearch.d.ts +23 -0
- package/dist/core/unifiedSearch.d.ts.map +1 -0
- package/dist/core/unifiedSearch.js +46 -0
- package/dist/core/unifiedSearch.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +47 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +69 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/package.d.ts +57 -0
- package/dist/utils/package.d.ts.map +1 -0
- package/dist/utils/package.js +170 -0
- package/dist/utils/package.js.map +1 -0
- package/package.json +57 -0
- package/templates/skill-creator.md +182 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified search engine that can use either ChromaDB or simple search
|
|
3
|
+
*/
|
|
4
|
+
import { ChromaSearchEngine } from './chromaSearch.js';
|
|
5
|
+
import { SimpleSearchEngine } from './simpleSearch.js';
|
|
6
|
+
export class UnifiedSearchEngine {
|
|
7
|
+
engine = null;
|
|
8
|
+
options;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
async getEngine() {
|
|
13
|
+
if (!this.engine) {
|
|
14
|
+
if (this.options.type === 'chroma') {
|
|
15
|
+
this.engine = new ChromaSearchEngine({
|
|
16
|
+
dbPath: this.options.dbPath,
|
|
17
|
+
collectionName: this.options.collectionName,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.engine = new SimpleSearchEngine({
|
|
22
|
+
referencesDir: this.options.referencesDir,
|
|
23
|
+
collectionName: this.options.collectionName,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return this.engine;
|
|
28
|
+
}
|
|
29
|
+
async buildIndex(referencesDir, hashFile) {
|
|
30
|
+
const engine = await this.getEngine();
|
|
31
|
+
await engine.buildIndex(referencesDir, hashFile);
|
|
32
|
+
}
|
|
33
|
+
async search(query, topK = 5, where) {
|
|
34
|
+
const engine = await this.getEngine();
|
|
35
|
+
return engine.search(query, topK, where);
|
|
36
|
+
}
|
|
37
|
+
async searchByPriority(query, topK = 5) {
|
|
38
|
+
const engine = await this.getEngine();
|
|
39
|
+
return engine.searchByPriority(query, topK);
|
|
40
|
+
}
|
|
41
|
+
async getStats() {
|
|
42
|
+
const engine = await this.getEngine();
|
|
43
|
+
return engine.getStats();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=unifiedSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unifiedSearch.js","sourceRoot":"","sources":["../../src/core/unifiedSearch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAStD,MAAM,OAAO,mBAAmB;IACtB,MAAM,GAAmD,IAAI,CAAA;IAC7D,OAAO,CAAsB;IAErC,YAAY,OAA6B;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC;oBACnC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;iBAC5C,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC;oBACnC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;oBACzC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;iBAC5C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,aAAqB,EAAE,QAAgB;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACrC,MAAM,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAAe,CAAC,EAChB,KAA2B;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,OAAe,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACrC,OAAO,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACrC,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Creator - Main exports
|
|
3
|
+
*/
|
|
4
|
+
export { SkillCreator } from './core/skillCreator.js';
|
|
5
|
+
export { SearchEngine } from './core/searchEngine.js';
|
|
6
|
+
export { ContentManager } from './core/contentManager.js';
|
|
7
|
+
export { Config } from './utils/config.js';
|
|
8
|
+
export { PackageUtils } from './utils/package.js';
|
|
9
|
+
export type { SkillConfig, SearchResult, ContentStats, ContentItem, CreateSkillOptions, CreateSkillResult, UpdateContext7Result, AddContentResult, PackageVersion, Context7Library, } from './types/index.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Creator - Main exports
|
|
3
|
+
*/
|
|
4
|
+
export { SkillCreator } from './core/skillCreator.js';
|
|
5
|
+
export { SearchEngine } from './core/searchEngine.js';
|
|
6
|
+
export { ContentManager } from './core/contentManager.js';
|
|
7
|
+
export { Config } from './utils/config.js';
|
|
8
|
+
export { PackageUtils } from './utils/package.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for skill creator
|
|
3
|
+
*/
|
|
4
|
+
export interface SkillConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
context7LibraryId: string;
|
|
8
|
+
version: string;
|
|
9
|
+
chunkSize: number;
|
|
10
|
+
chunkOverlap: number;
|
|
11
|
+
embeddingModel: string;
|
|
12
|
+
similarityThreshold: number;
|
|
13
|
+
maxSearchResults: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SearchResult {
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
score: number;
|
|
20
|
+
source: 'user' | 'context7';
|
|
21
|
+
file_path: string;
|
|
22
|
+
metadata: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface ContentStats {
|
|
25
|
+
userFiles: number;
|
|
26
|
+
context7Files: number;
|
|
27
|
+
totalFiles: number;
|
|
28
|
+
userDirExists: boolean;
|
|
29
|
+
context7DirExists: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ContentItem {
|
|
32
|
+
title: string;
|
|
33
|
+
filename: string;
|
|
34
|
+
source: 'user' | 'context7';
|
|
35
|
+
path: string;
|
|
36
|
+
size: number;
|
|
37
|
+
modified: Date;
|
|
38
|
+
}
|
|
39
|
+
export interface CreateSkillOptions {
|
|
40
|
+
packageName: string;
|
|
41
|
+
path?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
context7Id?: string;
|
|
44
|
+
noInitDocs?: boolean;
|
|
45
|
+
storage?: 'project' | 'user';
|
|
46
|
+
version?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface CreateSkillResult {
|
|
49
|
+
created: boolean;
|
|
50
|
+
skillPath?: string;
|
|
51
|
+
message: string;
|
|
52
|
+
docsInitialized: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface UpdateContext7Result {
|
|
55
|
+
updated: boolean;
|
|
56
|
+
skipped: boolean;
|
|
57
|
+
filesCreated: number;
|
|
58
|
+
message: string;
|
|
59
|
+
}
|
|
60
|
+
export interface AddContentResult {
|
|
61
|
+
added: boolean;
|
|
62
|
+
updated: boolean;
|
|
63
|
+
skipped: boolean;
|
|
64
|
+
filePath?: string;
|
|
65
|
+
message: string;
|
|
66
|
+
similarFound: number;
|
|
67
|
+
similarContent?: Array<{
|
|
68
|
+
title: string;
|
|
69
|
+
score: number;
|
|
70
|
+
source: string;
|
|
71
|
+
preview: string;
|
|
72
|
+
}>;
|
|
73
|
+
}
|
|
74
|
+
export interface PackageVersion {
|
|
75
|
+
version: string;
|
|
76
|
+
formatted: string;
|
|
77
|
+
}
|
|
78
|
+
export interface Context7Library {
|
|
79
|
+
context7_compatible_library_id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
description: string;
|
|
82
|
+
code_snippets: number;
|
|
83
|
+
trust_score: number;
|
|
84
|
+
versions?: string[];
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B,EAAE,MAAM,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { SkillConfig } from '../types/index.js';
|
|
6
|
+
export declare const SkillConfigSchema: z.ZodObject<{
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
description: z.ZodString;
|
|
9
|
+
context7_library_id: z.ZodString;
|
|
10
|
+
version: z.ZodString;
|
|
11
|
+
chunk_size: z.ZodNumber;
|
|
12
|
+
chunk_overlap: z.ZodNumber;
|
|
13
|
+
embedding_model: z.ZodString;
|
|
14
|
+
similarity_threshold: z.ZodNumber;
|
|
15
|
+
max_search_results: z.ZodNumber;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
context7_library_id: string;
|
|
20
|
+
version: string;
|
|
21
|
+
chunk_size: number;
|
|
22
|
+
chunk_overlap: number;
|
|
23
|
+
embedding_model: string;
|
|
24
|
+
similarity_threshold: number;
|
|
25
|
+
max_search_results: number;
|
|
26
|
+
}, {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
context7_library_id: string;
|
|
30
|
+
version: string;
|
|
31
|
+
chunk_size: number;
|
|
32
|
+
chunk_overlap: number;
|
|
33
|
+
embedding_model: string;
|
|
34
|
+
similarity_threshold: number;
|
|
35
|
+
max_search_results: number;
|
|
36
|
+
}>;
|
|
37
|
+
export type SkillConfigInput = z.input<typeof SkillConfigSchema>;
|
|
38
|
+
export declare class Config {
|
|
39
|
+
static createDefault(options: {
|
|
40
|
+
skillName: string;
|
|
41
|
+
description: string;
|
|
42
|
+
context7Id: string;
|
|
43
|
+
}): SkillConfig;
|
|
44
|
+
static load(filePath: string): SkillConfig;
|
|
45
|
+
static save(config: SkillConfig, filePath: string): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU5B,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEhE,qBAAa,MAAM;IACjB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE;QAC5B,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAA;KACnB,GAAG,WAAW;IAcf,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAuB1C,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAgBzD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
6
|
+
export const SkillConfigSchema = z.object({
|
|
7
|
+
name: z.string(),
|
|
8
|
+
description: z.string(),
|
|
9
|
+
context7_library_id: z.string(),
|
|
10
|
+
version: z.string(),
|
|
11
|
+
chunk_size: z.number(),
|
|
12
|
+
chunk_overlap: z.number(),
|
|
13
|
+
embedding_model: z.string(),
|
|
14
|
+
similarity_threshold: z.number(),
|
|
15
|
+
max_search_results: z.number(),
|
|
16
|
+
});
|
|
17
|
+
export class Config {
|
|
18
|
+
static createDefault(options) {
|
|
19
|
+
return {
|
|
20
|
+
name: options.skillName,
|
|
21
|
+
description: options.description,
|
|
22
|
+
context7LibraryId: options.context7Id,
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
chunkSize: 1000,
|
|
25
|
+
chunkOverlap: 200,
|
|
26
|
+
embeddingModel: 'all-MiniLM-L6-v2',
|
|
27
|
+
similarityThreshold: 0.85,
|
|
28
|
+
maxSearchResults: 10,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
static load(filePath) {
|
|
32
|
+
try {
|
|
33
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
34
|
+
const raw = JSON.parse(content);
|
|
35
|
+
const config = SkillConfigSchema.parse(raw);
|
|
36
|
+
// Convert snake_case to camelCase
|
|
37
|
+
return {
|
|
38
|
+
name: config.name,
|
|
39
|
+
description: config.description,
|
|
40
|
+
context7LibraryId: config.context7_library_id,
|
|
41
|
+
version: config.version,
|
|
42
|
+
chunkSize: config.chunk_size,
|
|
43
|
+
chunkOverlap: config.chunk_overlap,
|
|
44
|
+
embeddingModel: config.embedding_model,
|
|
45
|
+
similarityThreshold: config.similarity_threshold,
|
|
46
|
+
maxSearchResults: config.max_search_results,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Failed to load config from ${filePath}: ${error}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static save(config, filePath) {
|
|
54
|
+
// Convert camelCase to snake_case for JSON
|
|
55
|
+
const raw = {
|
|
56
|
+
name: config.name,
|
|
57
|
+
description: config.description,
|
|
58
|
+
context7_library_id: config.context7LibraryId,
|
|
59
|
+
version: config.version,
|
|
60
|
+
chunk_size: config.chunkSize,
|
|
61
|
+
chunk_overlap: config.chunkOverlap,
|
|
62
|
+
embedding_model: config.embeddingModel,
|
|
63
|
+
similarity_threshold: config.similarityThreshold,
|
|
64
|
+
max_search_results: config.maxSearchResults,
|
|
65
|
+
};
|
|
66
|
+
writeFileSync(filePath, JSON.stringify(raw, null, 2));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;IAChC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAA;AAIF,MAAM,OAAO,MAAM;IACjB,MAAM,CAAC,aAAa,CAAC,OAIpB;QACC,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,UAAU;YACrC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,GAAG;YACjB,cAAc,EAAE,kBAAkB;YAClC,mBAAmB,EAAE,IAAI;YACzB,gBAAgB,EAAE,EAAE;SACrB,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,QAAgB;QAC1B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAE3C,kCAAkC;YAClC,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,iBAAiB,EAAE,MAAM,CAAC,mBAAmB;gBAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,UAAU;gBAC5B,YAAY,EAAE,MAAM,CAAC,aAAa;gBAClC,cAAc,EAAE,MAAM,CAAC,eAAe;gBACtC,mBAAmB,EAAE,MAAM,CAAC,oBAAoB;gBAChD,gBAAgB,EAAE,MAAM,CAAC,kBAAkB;aAC5C,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAmB,EAAE,QAAgB;QAC/C,2CAA2C;QAC3C,MAAM,GAAG,GAAG;YACV,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,mBAAmB,EAAE,MAAM,CAAC,iBAAiB;YAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,eAAe,EAAE,MAAM,CAAC,cAAc;YACtC,oBAAoB,EAAE,MAAM,CAAC,mBAAmB;YAChD,kBAAkB,EAAE,MAAM,CAAC,gBAAgB;SAC5C,CAAA;QAED,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package utilities
|
|
3
|
+
*/
|
|
4
|
+
export interface SearchResult {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
version: string;
|
|
8
|
+
date: string;
|
|
9
|
+
publisher: string;
|
|
10
|
+
score: number;
|
|
11
|
+
}
|
|
12
|
+
export interface SearchOptions {
|
|
13
|
+
limit?: number;
|
|
14
|
+
minScore?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class PackageUtils {
|
|
17
|
+
/**
|
|
18
|
+
* Get package version from npm registry
|
|
19
|
+
*/
|
|
20
|
+
static getPackageVersion(packageName: string): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Format version according to doc-downloader rules
|
|
23
|
+
*/
|
|
24
|
+
static formatVersion(version: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Create skill folder name according to spec
|
|
27
|
+
*/
|
|
28
|
+
static createSkillFolderName(packageName: string, version: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Normalize package name (remove @ prefix)
|
|
31
|
+
*/
|
|
32
|
+
static normalizePackageName(packageName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Validate package name format
|
|
35
|
+
*/
|
|
36
|
+
static validatePackageName(packageName: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Search for packages on npm registry
|
|
39
|
+
*/
|
|
40
|
+
static searchPackages(keywords: string[], options?: SearchOptions): Promise<SearchResult[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Find exact package match
|
|
43
|
+
*/
|
|
44
|
+
static findExactPackage(packageName: string): Promise<SearchResult | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Suggest packages based on keywords
|
|
47
|
+
*/
|
|
48
|
+
static suggestPackages(input: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Select package from multiple options
|
|
51
|
+
*/
|
|
52
|
+
static selectPackage(input: string): Promise<{
|
|
53
|
+
name: string;
|
|
54
|
+
version: string;
|
|
55
|
+
} | null>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/utils/package.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,YAAY;IACvB;;OAEG;WACU,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY3E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAqB7C;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAY1E;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAOxD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAUxD;;OAEG;WACU,cAAc,CACzB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAkC1B;;OAEG;WACU,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoBhF;;OAEG;WACU,eAAe,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB1B;;OAEG;WACU,aAAa,CACxB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAsBrD"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package utilities
|
|
3
|
+
*/
|
|
4
|
+
export class PackageUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Get package version from npm registry
|
|
7
|
+
*/
|
|
8
|
+
static async getPackageVersion(packageName) {
|
|
9
|
+
try {
|
|
10
|
+
const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
|
|
11
|
+
if (!response.ok)
|
|
12
|
+
return null;
|
|
13
|
+
const data = await response.json();
|
|
14
|
+
return data.version;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format version according to doc-downloader rules
|
|
22
|
+
*/
|
|
23
|
+
static formatVersion(version) {
|
|
24
|
+
if (!version)
|
|
25
|
+
return '';
|
|
26
|
+
// Remove 'v' prefix if present
|
|
27
|
+
if (version.startsWith('v')) {
|
|
28
|
+
version = version.slice(1);
|
|
29
|
+
}
|
|
30
|
+
const parts = version.split('.');
|
|
31
|
+
if (parts.length >= 2) {
|
|
32
|
+
const major = parseInt(parts[0], 10);
|
|
33
|
+
if (major >= 1) {
|
|
34
|
+
return String(major);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return `${major}.${parts[1]}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return version;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create skill folder name according to spec
|
|
44
|
+
*/
|
|
45
|
+
static createSkillFolderName(packageName, version) {
|
|
46
|
+
// Replace / with __ as specified in doc-downloader.md
|
|
47
|
+
const safePackage = packageName.replace(/\//g, '__');
|
|
48
|
+
const formattedVersion = this.formatVersion(version);
|
|
49
|
+
if (formattedVersion) {
|
|
50
|
+
return `${safePackage}@${formattedVersion}`;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return safePackage;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Normalize package name (remove @ prefix)
|
|
58
|
+
*/
|
|
59
|
+
static normalizePackageName(packageName) {
|
|
60
|
+
if (packageName.startsWith('@')) {
|
|
61
|
+
return packageName.slice(1);
|
|
62
|
+
}
|
|
63
|
+
return packageName;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate package name format
|
|
67
|
+
*/
|
|
68
|
+
static validatePackageName(packageName) {
|
|
69
|
+
if (!packageName || packageName.length === 0) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// Basic validation for npm package names
|
|
73
|
+
const validNamePattern = /^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
|
|
74
|
+
return validNamePattern.test(packageName);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Search for packages on npm registry
|
|
78
|
+
*/
|
|
79
|
+
static async searchPackages(keywords, options = {}) {
|
|
80
|
+
const { limit = 10, minScore = 0.3 } = options;
|
|
81
|
+
try {
|
|
82
|
+
const query = keywords.join(' ');
|
|
83
|
+
const response = await fetch(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query)}&size=${limit * 2}`);
|
|
84
|
+
if (!response.ok)
|
|
85
|
+
return [];
|
|
86
|
+
const data = await response.json();
|
|
87
|
+
const results = [];
|
|
88
|
+
for (const pkg of data.objects || []) {
|
|
89
|
+
const score = pkg.score?.detail?.popularity || 0;
|
|
90
|
+
if (score >= minScore) {
|
|
91
|
+
results.push({
|
|
92
|
+
name: pkg.package.name,
|
|
93
|
+
description: pkg.package.description || '',
|
|
94
|
+
version: pkg.package.version,
|
|
95
|
+
date: pkg.package.date,
|
|
96
|
+
publisher: pkg.package.publisher?.username || 'unknown',
|
|
97
|
+
score,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return results.slice(0, limit);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Find exact package match
|
|
109
|
+
*/
|
|
110
|
+
static async findExactPackage(packageName) {
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
|
|
113
|
+
if (!response.ok)
|
|
114
|
+
return null;
|
|
115
|
+
const data = await response.json();
|
|
116
|
+
return {
|
|
117
|
+
name: data.name,
|
|
118
|
+
description: data.description || '',
|
|
119
|
+
version: data.version,
|
|
120
|
+
date: data.time?.modified || new Date().toISOString(),
|
|
121
|
+
publisher: data.publisher?.username || 'unknown',
|
|
122
|
+
score: 1.0,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Suggest packages based on keywords
|
|
131
|
+
*/
|
|
132
|
+
static async suggestPackages(input, options = {}) {
|
|
133
|
+
// Check if input looks like an exact package name
|
|
134
|
+
if (PackageUtils.validatePackageName(input)) {
|
|
135
|
+
const exact = await PackageUtils.findExactPackage(input);
|
|
136
|
+
if (exact)
|
|
137
|
+
return [exact];
|
|
138
|
+
}
|
|
139
|
+
// Extract keywords from input
|
|
140
|
+
const keywords = input
|
|
141
|
+
.split(/[\s-]+/)
|
|
142
|
+
.filter(word => word.length > 2)
|
|
143
|
+
.slice(0, 3);
|
|
144
|
+
if (keywords.length === 0) {
|
|
145
|
+
// Fallback: search with the whole input
|
|
146
|
+
keywords.push(input);
|
|
147
|
+
}
|
|
148
|
+
return PackageUtils.searchPackages(keywords, options);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Select package from multiple options
|
|
152
|
+
*/
|
|
153
|
+
static async selectPackage(input) {
|
|
154
|
+
const suggestions = await PackageUtils.suggestPackages(input, { limit: 5 });
|
|
155
|
+
if (suggestions.length === 0) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
if (suggestions.length === 1) {
|
|
159
|
+
const pkg = suggestions[0];
|
|
160
|
+
const version = await PackageUtils.getPackageVersion(pkg.name);
|
|
161
|
+
return { name: pkg.name, version: version || pkg.version };
|
|
162
|
+
}
|
|
163
|
+
// Multiple options found - would need interactive selection in CLI
|
|
164
|
+
// For now, return the highest scored package
|
|
165
|
+
const best = suggestions.reduce((prev, curr) => curr.score > prev.score ? curr : prev);
|
|
166
|
+
const version = await PackageUtils.getPackageVersion(best.name);
|
|
167
|
+
return { name: best.name, version: version || best.version };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/utils/package.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "skill-creator",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Create claude-code-skills with documentation management",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsx watch src/index.ts",
|
|
10
|
+
"start": "node dist/index.js",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"format": "prettier --write .",
|
|
13
|
+
"type-check": "tsc --noEmit"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude-code",
|
|
17
|
+
"skills",
|
|
18
|
+
"documentation",
|
|
19
|
+
"chromadb",
|
|
20
|
+
"search"
|
|
21
|
+
],
|
|
22
|
+
"author": "Gaubee",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@chroma-core/default-embed": "^0.1.8",
|
|
26
|
+
"chromadb": "^1.8.1",
|
|
27
|
+
"commander": "^12.1.0",
|
|
28
|
+
"dedent": "^1.5.3",
|
|
29
|
+
"glob": "^11.0.0",
|
|
30
|
+
"gradient-string": "^3.0.0",
|
|
31
|
+
"inquirer": "^10.2.2",
|
|
32
|
+
"markdown-it": "^14.1.0",
|
|
33
|
+
"ora": "^8.1.0",
|
|
34
|
+
"zod": "^3.24.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/inquirer": "^9.0.9",
|
|
38
|
+
"@types/markdown-it": "^14.1.2",
|
|
39
|
+
"@types/node": "^22.10.2",
|
|
40
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
41
|
+
"prettier": "^3.4.2",
|
|
42
|
+
"tsx": "^4.19.2",
|
|
43
|
+
"typescript": "^5.7.2",
|
|
44
|
+
"vitest": "^2.1.8"
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist",
|
|
48
|
+
"templates",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"bin": {
|
|
52
|
+
"skill-creator": "dist/cli.js"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18.0.0"
|
|
56
|
+
}
|
|
57
|
+
}
|