transskill 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.
- package/README.md +187 -0
- package/README.zh.md +190 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +12 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/types.d.ts +105 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +249 -0
- package/dist/index.js.map +1 -0
- package/dist/mapper/default.mapper.d.ts +18 -0
- package/dist/mapper/default.mapper.d.ts.map +1 -0
- package/dist/mapper/default.mapper.js +107 -0
- package/dist/mapper/default.mapper.js.map +1 -0
- package/dist/mapper/index.d.ts +3 -0
- package/dist/mapper/index.d.ts.map +1 -0
- package/dist/mapper/index.js +2 -0
- package/dist/mapper/index.js.map +1 -0
- package/dist/mapper/mapper.interface.d.ts +25 -0
- package/dist/mapper/mapper.interface.d.ts.map +1 -0
- package/dist/mapper/mapper.interface.js +2 -0
- package/dist/mapper/mapper.interface.js.map +1 -0
- package/dist/parser/cursor-rules.parser.d.ts +16 -0
- package/dist/parser/cursor-rules.parser.d.ts.map +1 -0
- package/dist/parser/cursor-rules.parser.js +38 -0
- package/dist/parser/cursor-rules.parser.js.map +1 -0
- package/dist/parser/index.d.ts +6 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +5 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/mdc.parser.d.ts +17 -0
- package/dist/parser/mdc.parser.d.ts.map +1 -0
- package/dist/parser/mdc.parser.js +62 -0
- package/dist/parser/mdc.parser.js.map +1 -0
- package/dist/parser/parser-registry.d.ts +25 -0
- package/dist/parser/parser-registry.d.ts.map +1 -0
- package/dist/parser/parser-registry.js +44 -0
- package/dist/parser/parser-registry.js.map +1 -0
- package/dist/parser/parser.interface.d.ts +16 -0
- package/dist/parser/parser.interface.d.ts.map +1 -0
- package/dist/parser/parser.interface.js +2 -0
- package/dist/parser/parser.interface.js.map +1 -0
- package/dist/parser/skill-md.parser.d.ts +17 -0
- package/dist/parser/skill-md.parser.d.ts.map +1 -0
- package/dist/parser/skill-md.parser.js +117 -0
- package/dist/parser/skill-md.parser.js.map +1 -0
- package/dist/renderer/cursor-rules.renderer.d.ts +17 -0
- package/dist/renderer/cursor-rules.renderer.d.ts.map +1 -0
- package/dist/renderer/cursor-rules.renderer.js +61 -0
- package/dist/renderer/cursor-rules.renderer.js.map +1 -0
- package/dist/renderer/index.d.ts +6 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +5 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/mdc.renderer.d.ts +15 -0
- package/dist/renderer/mdc.renderer.d.ts.map +1 -0
- package/dist/renderer/mdc.renderer.js +52 -0
- package/dist/renderer/mdc.renderer.js.map +1 -0
- package/dist/renderer/renderer-registry.d.ts +6 -0
- package/dist/renderer/renderer-registry.d.ts.map +1 -0
- package/dist/renderer/renderer-registry.js +16 -0
- package/dist/renderer/renderer-registry.js.map +1 -0
- package/dist/renderer/renderer.interface.d.ts +15 -0
- package/dist/renderer/renderer.interface.d.ts.map +1 -0
- package/dist/renderer/renderer.interface.js +2 -0
- package/dist/renderer/renderer.interface.js.map +1 -0
- package/dist/renderer/skill-md.renderer.d.ts +15 -0
- package/dist/renderer/skill-md.renderer.d.ts.map +1 -0
- package/dist/renderer/skill-md.renderer.js +76 -0
- package/dist/renderer/skill-md.renderer.js.map +1 -0
- package/dist/resolver/github.resolver.d.ts +11 -0
- package/dist/resolver/github.resolver.d.ts.map +1 -0
- package/dist/resolver/github.resolver.js +89 -0
- package/dist/resolver/github.resolver.js.map +1 -0
- package/dist/resolver/index.d.ts +5 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +4 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/local.resolver.d.ts +11 -0
- package/dist/resolver/local.resolver.d.ts.map +1 -0
- package/dist/resolver/local.resolver.js +55 -0
- package/dist/resolver/local.resolver.js.map +1 -0
- package/dist/resolver/resolver-registry.d.ts +14 -0
- package/dist/resolver/resolver-registry.d.ts.map +1 -0
- package/dist/resolver/resolver-registry.js +31 -0
- package/dist/resolver/resolver-registry.js.map +1 -0
- package/dist/resolver/resolver.interface.d.ts +12 -0
- package/dist/resolver/resolver.interface.d.ts.map +1 -0
- package/dist/resolver/resolver.interface.js +2 -0
- package/dist/resolver/resolver.interface.js.map +1 -0
- package/dist/utils/file-utils.d.ts +9 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +37 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/format-detector.d.ts +11 -0
- package/dist/utils/format-detector.d.ts.map +1 -0
- package/dist/utils/format-detector.js +42 -0
- package/dist/utils/format-detector.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +20 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdc.parser.js","sourceRoot":"","sources":["../../src/parser/mdc.parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACX,MAAM,GAAe,MAAM,CAAC;IAErC,MAAM,CAAC,QAAgB,EAAE,QAAiB;QACxC,OAAO,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,QAAiB;QACtC,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAChF,OAAO;gBACL,IAAI;gBACJ,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;gBAC/E,YAAY;gBACZ,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;gBAClC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAA+B,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAChF,MAAM,WAAW,GACf,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/E,MAAM,cAAc,GAAgD,EAAE,CAAC;QACvE,IAAI,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,cAAc,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACjD,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QACvD,CAAC;QAED,OAAO;YACL,IAAI;YACJ,WAAW;YACX,YAAY;YACZ,QAAQ,EAAE;gBACR,YAAY,EAAE,MAAM;gBACpB,cAAc,EAAE,EAAE,GAAG,WAAW,EAAE,WAAW,EAAE,SAAS,EAA6B;aACtF;YACD,gBAAgB,EAAE;gBAChB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;aAC5E;SACF,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,MAAM,IAAI,eAAe,CACvB,uEAAuE,EACvE,mBAAmB,EACnB,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Parser } from './parser.interface.js';
|
|
2
|
+
import type { FormatType } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register a parser for a specific format.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerParser(parser: Parser): void;
|
|
7
|
+
/**
|
|
8
|
+
* Get a parser by format type.
|
|
9
|
+
* Throws if the format is not supported.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getParser(format: FormatType): Parser;
|
|
12
|
+
/**
|
|
13
|
+
* Try to detect the format from content and/or file path.
|
|
14
|
+
* Returns null if no parser can handle it.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectFormat(content: string, filePath?: string): FormatType | null;
|
|
17
|
+
/**
|
|
18
|
+
* List all registered format types.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRegisteredFormats(): FormatType[];
|
|
21
|
+
/**
|
|
22
|
+
* Check if a format is supported.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isFormatSupported(format: string): boolean;
|
|
25
|
+
//# sourceMappingURL=parser-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.d.ts","sourceRoot":"","sources":["../../src/parser/parser-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { TransSkillError } from '../core/errors.js';
|
|
2
|
+
const parserRegistry = new Map();
|
|
3
|
+
/**
|
|
4
|
+
* Register a parser for a specific format.
|
|
5
|
+
*/
|
|
6
|
+
export function registerParser(parser) {
|
|
7
|
+
parserRegistry.set(parser.format, parser);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get a parser by format type.
|
|
11
|
+
* Throws if the format is not supported.
|
|
12
|
+
*/
|
|
13
|
+
export function getParser(format) {
|
|
14
|
+
const parser = parserRegistry.get(format);
|
|
15
|
+
if (!parser) {
|
|
16
|
+
throw new TransSkillError(`Unsupported format: ${format}`, 'UNSUPPORTED_OUTPUT_FORMAT');
|
|
17
|
+
}
|
|
18
|
+
return parser;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Try to detect the format from content and/or file path.
|
|
22
|
+
* Returns null if no parser can handle it.
|
|
23
|
+
*/
|
|
24
|
+
export function detectFormat(content, filePath) {
|
|
25
|
+
for (const [, parser] of parserRegistry) {
|
|
26
|
+
if (parser.detect(content, filePath)) {
|
|
27
|
+
return parser.format;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* List all registered format types.
|
|
34
|
+
*/
|
|
35
|
+
export function getRegisteredFormats() {
|
|
36
|
+
return Array.from(parserRegistry.keys());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if a format is supported.
|
|
40
|
+
*/
|
|
41
|
+
export function isFormatSupported(format) {
|
|
42
|
+
return parserRegistry.has(format);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=parser-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.js","sourceRoot":"","sources":["../../src/parser/parser-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CAAC,uBAAuB,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAiB;IAC7D,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,cAAc,CAAC,GAAG,CAAC,MAAoB,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FormatType, IntermediateSkill, SkillDirectory } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parser interface - reads platform-specific skill formats
|
|
4
|
+
* and converts them to the platform-agnostic IntermediateSkill.
|
|
5
|
+
*/
|
|
6
|
+
export interface Parser {
|
|
7
|
+
/** The format this parser handles */
|
|
8
|
+
readonly format: FormatType;
|
|
9
|
+
/** Parse file content into an IntermediateSkill */
|
|
10
|
+
parse(content: string, filePath?: string): IntermediateSkill;
|
|
11
|
+
/** Scan a skill directory and extract its structure */
|
|
12
|
+
parseDirectory(dirPath: string): SkillDirectory;
|
|
13
|
+
/** Quick check if this parser can handle the given content */
|
|
14
|
+
detect(content: string, filePath?: string): boolean;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=parser.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.interface.d.ts","sourceRoot":"","sources":["../../src/parser/parser.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,mDAAmD;IACnD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAE7D,uDAAuD;IACvD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IAEhD,8DAA8D;IAC9D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.interface.js","sourceRoot":"","sources":["../../src/parser/parser.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Parser } from './parser.interface.js';
|
|
2
|
+
import type { FormatType, IntermediateSkill, SkillDirectory } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parser for SKILL.md format.
|
|
5
|
+
*
|
|
6
|
+
* SKILL.md uses YAML frontmatter for metadata (name, description)
|
|
7
|
+
* and Markdown body for instructions.
|
|
8
|
+
*
|
|
9
|
+
* Used by: Claude Code, Codex CLI, OpenClaw, Cursor (partial)
|
|
10
|
+
*/
|
|
11
|
+
export declare class SKILLMdParser implements Parser {
|
|
12
|
+
readonly format: FormatType;
|
|
13
|
+
detect(content: string, _filePath?: string): boolean;
|
|
14
|
+
parse(content: string, filePath?: string): IntermediateSkill;
|
|
15
|
+
parseDirectory(dirPath: string): SkillDirectory;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=skill-md.parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.parser.d.ts","sourceRoot":"","sources":["../../src/parser/skill-md.parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtF;;;;;;;GAOG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAc;IAEzC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IASpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAuD5D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;CAsDhD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import matter from 'gray-matter';
|
|
2
|
+
import { TransSkillError } from '../core/errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parser for SKILL.md format.
|
|
5
|
+
*
|
|
6
|
+
* SKILL.md uses YAML frontmatter for metadata (name, description)
|
|
7
|
+
* and Markdown body for instructions.
|
|
8
|
+
*
|
|
9
|
+
* Used by: Claude Code, Codex CLI, OpenClaw, Cursor (partial)
|
|
10
|
+
*/
|
|
11
|
+
export class SKILLMdParser {
|
|
12
|
+
format = 'skill.md';
|
|
13
|
+
detect(content, _filePath) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = matter(content);
|
|
16
|
+
return !!(parsed.data && typeof parsed.data === 'object');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
parse(content, filePath) {
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = matter(content);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new TransSkillError(`Invalid YAML frontmatter in SKILL.md${filePath ? `: ${filePath}` : ''}`, 'INVALID_FRONTMATTER', { filePath, originalError: String(err) });
|
|
29
|
+
}
|
|
30
|
+
const frontmatter = parsed.data;
|
|
31
|
+
// name is required
|
|
32
|
+
const name = typeof frontmatter.name === 'string' ? frontmatter.name : guessName(filePath);
|
|
33
|
+
if (!name) {
|
|
34
|
+
throw new TransSkillError(`SKILL.md is missing a "name" field in frontmatter${filePath ? `: ${filePath}` : ''}`, 'INVALID_FRONTMATTER', { filePath, frontmatter });
|
|
35
|
+
}
|
|
36
|
+
// description is required; fallback to empty
|
|
37
|
+
const description = typeof frontmatter.description === 'string'
|
|
38
|
+
? frontmatter.description
|
|
39
|
+
: '';
|
|
40
|
+
// Extract remaining frontmatter as raw
|
|
41
|
+
const rawFrontmatter = {};
|
|
42
|
+
for (const [key, value] of Object.entries(frontmatter)) {
|
|
43
|
+
if (key !== 'name' && key !== 'description') {
|
|
44
|
+
rawFrontmatter[key] = value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const instructions = parsed.content.trim();
|
|
48
|
+
return {
|
|
49
|
+
name,
|
|
50
|
+
description,
|
|
51
|
+
instructions,
|
|
52
|
+
metadata: {
|
|
53
|
+
sourceFormat: 'skill.md',
|
|
54
|
+
tags: Array.isArray(frontmatter.tags) ? frontmatter.tags : undefined,
|
|
55
|
+
author: typeof frontmatter.author === 'string' ? frontmatter.author : undefined,
|
|
56
|
+
version: typeof frontmatter.version === 'string' ? frontmatter.version : undefined,
|
|
57
|
+
rawFrontmatter: Object.keys(rawFrontmatter).length > 0 ? rawFrontmatter : undefined,
|
|
58
|
+
},
|
|
59
|
+
platformSpecific: {},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
parseDirectory(dirPath) {
|
|
63
|
+
const { join } = require('node:path');
|
|
64
|
+
const { existsSync, readdirSync, statSync } = require('node:fs');
|
|
65
|
+
const skillMdPath = join(dirPath, 'SKILL.md');
|
|
66
|
+
if (!existsSync(skillMdPath)) {
|
|
67
|
+
throw new TransSkillError(`Directory does not contain SKILL.md: ${dirPath}`, 'NO_SKILL_FOUND', { dirPath });
|
|
68
|
+
}
|
|
69
|
+
const name = require('node:path').basename(dirPath);
|
|
70
|
+
const extraFiles = [];
|
|
71
|
+
let scriptsDir;
|
|
72
|
+
let referencesDir;
|
|
73
|
+
let assetsDir;
|
|
74
|
+
try {
|
|
75
|
+
const entries = readdirSync(dirPath);
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
if (entry === 'SKILL.md' || entry === 'scripts' || entry === 'references' || entry === 'assets') {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const fullPath = join(dirPath, entry);
|
|
81
|
+
if (statSync(fullPath).isFile() || statSync(fullPath).isDirectory()) {
|
|
82
|
+
extraFiles.push(fullPath);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (existsSync(join(dirPath, 'scripts')) && statSync(join(dirPath, 'scripts')).isDirectory()) {
|
|
86
|
+
scriptsDir = join(dirPath, 'scripts');
|
|
87
|
+
}
|
|
88
|
+
if (existsSync(join(dirPath, 'references')) && statSync(join(dirPath, 'references')).isDirectory()) {
|
|
89
|
+
referencesDir = join(dirPath, 'references');
|
|
90
|
+
}
|
|
91
|
+
if (existsSync(join(dirPath, 'assets')) && statSync(join(dirPath, 'assets')).isDirectory()) {
|
|
92
|
+
assetsDir = join(dirPath, 'assets');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// If we can't read the directory, just return what we have
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
name,
|
|
100
|
+
rootPath: dirPath,
|
|
101
|
+
skillFile: skillMdPath,
|
|
102
|
+
scriptsDir,
|
|
103
|
+
referencesDir,
|
|
104
|
+
assetsDir,
|
|
105
|
+
extraFiles,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Guess skill name from file path */
|
|
110
|
+
function guessName(filePath) {
|
|
111
|
+
if (!filePath)
|
|
112
|
+
return undefined;
|
|
113
|
+
const { basename, extname } = require('node:path');
|
|
114
|
+
const name = basename(filePath, extname(filePath));
|
|
115
|
+
return name === 'SKILL' ? basename(require('node:path').dirname(filePath)) : name;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=skill-md.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.parser.js","sourceRoot":"","sources":["../../src/parser/skill-md.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Renderer } from './renderer.interface.js';
|
|
2
|
+
import type { FormatType, IntermediateSkill, SkillDirectory, DirectoryConversionResult } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Renders IntermediateSkill to .cursorrules format (Cursor IDE).
|
|
5
|
+
*
|
|
6
|
+
* .cursorrules is a plain text file with no frontmatter.
|
|
7
|
+
* Metadata is stored as # comments at the top of the file.
|
|
8
|
+
*
|
|
9
|
+
* Directory mode: copies scripts/assets alongside the .cursorrules file.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CursorRulesRenderer implements Renderer {
|
|
12
|
+
readonly format: FormatType;
|
|
13
|
+
readonly extension = ".cursorrules";
|
|
14
|
+
render(skill: IntermediateSkill): string;
|
|
15
|
+
renderDirectory(skillDir: SkillDirectory, skill: IntermediateSkill, outputPath: string): DirectoryConversionResult;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=cursor-rules.renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-rules.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEjH;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,QAAQ;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAkB;IAC7C,QAAQ,CAAC,SAAS,kBAAkB;IAEpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAexC,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB;CAqC7B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { writeFileSync, cpSync, mkdirSync, existsSync } from 'node:fs';
|
|
3
|
+
/**
|
|
4
|
+
* Renders IntermediateSkill to .cursorrules format (Cursor IDE).
|
|
5
|
+
*
|
|
6
|
+
* .cursorrules is a plain text file with no frontmatter.
|
|
7
|
+
* Metadata is stored as # comments at the top of the file.
|
|
8
|
+
*
|
|
9
|
+
* Directory mode: copies scripts/assets alongside the .cursorrules file.
|
|
10
|
+
*/
|
|
11
|
+
export class CursorRulesRenderer {
|
|
12
|
+
format = '.cursorrules';
|
|
13
|
+
extension = '.cursorrules';
|
|
14
|
+
render(skill) {
|
|
15
|
+
const parts = [];
|
|
16
|
+
parts.push(`# ${skill.name}`);
|
|
17
|
+
if (skill.description) {
|
|
18
|
+
parts.push(`# ${skill.description}`);
|
|
19
|
+
}
|
|
20
|
+
parts.push(`# Generated by TransSkill from ${skill.metadata.sourceFormat}`);
|
|
21
|
+
parts.push('');
|
|
22
|
+
parts.push(skill.instructions || '');
|
|
23
|
+
return parts.join('\n').trim() + '\n';
|
|
24
|
+
}
|
|
25
|
+
renderDirectory(skillDir, skill, outputPath) {
|
|
26
|
+
const copied = [];
|
|
27
|
+
const skipped = [];
|
|
28
|
+
const rulesPath = join(outputPath, `${skillDir.name}.cursorrules`);
|
|
29
|
+
writeFileSync(rulesPath, this.render(skill), 'utf-8');
|
|
30
|
+
if (skillDir.scriptsDir) {
|
|
31
|
+
const target = join(outputPath, 'scripts');
|
|
32
|
+
if (!existsSync(target)) {
|
|
33
|
+
mkdirSync(target, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
cpSync(skillDir.scriptsDir, target, { recursive: true });
|
|
37
|
+
copied.push(target);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
skipped.push(skillDir.scriptsDir);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (skillDir.assetsDir) {
|
|
44
|
+
const target = join(outputPath, 'assets');
|
|
45
|
+
try {
|
|
46
|
+
cpSync(skillDir.assetsDir, target, { recursive: true });
|
|
47
|
+
copied.push(target);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
skipped.push(skillDir.assetsDir);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
skillName: skill.name,
|
|
55
|
+
mainOutput: rulesPath,
|
|
56
|
+
copiedFiles: copied,
|
|
57
|
+
skippedFiles: skipped,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=cursor-rules.renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-rules.renderer.js","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIvE;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IACrB,MAAM,GAAe,cAAc,CAAC;IACpC,SAAS,GAAG,cAAc,CAAC;IAEpC,MAAM,CAAC,KAAwB;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kCAAkC,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAErC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,eAAe,CACb,QAAwB,EACxB,KAAwB,EACxB,UAAkB;QAElB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC;QACnE,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { registerRenderer, getRenderer, getRegisteredRenderers } from './renderer-registry.js';
|
|
2
|
+
export { SKILLMdRenderer } from './skill-md.renderer.js';
|
|
3
|
+
export { CursorRulesRenderer } from './cursor-rules.renderer.js';
|
|
4
|
+
export { MdcRenderer } from './mdc.renderer.js';
|
|
5
|
+
export type { Renderer } from './renderer.interface.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { registerRenderer, getRenderer, getRegisteredRenderers } from './renderer-registry.js';
|
|
2
|
+
export { SKILLMdRenderer } from './skill-md.renderer.js';
|
|
3
|
+
export { CursorRulesRenderer } from './cursor-rules.renderer.js';
|
|
4
|
+
export { MdcRenderer } from './mdc.renderer.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Renderer } from './renderer.interface.js';
|
|
2
|
+
import type { FormatType, IntermediateSkill, SkillDirectory, DirectoryConversionResult } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Renders IntermediateSkill to .mdc format (Cursor 2.3+).
|
|
5
|
+
*
|
|
6
|
+
* .mdc files have YAML frontmatter with description, globs, and alwaysApply.
|
|
7
|
+
* The body contains the rule instructions.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MdcRenderer implements Renderer {
|
|
10
|
+
readonly format: FormatType;
|
|
11
|
+
readonly extension = ".mdc";
|
|
12
|
+
render(skill: IntermediateSkill): string;
|
|
13
|
+
renderDirectory(skillDir: SkillDirectory, skill: IntermediateSkill, outputPath: string): DirectoryConversionResult;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mdc.renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdc.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEjH;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAU;IACrC,QAAQ,CAAC,SAAS,UAAU;IAE5B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAgBxC,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB;CA2B7B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { writeFileSync, cpSync, mkdirSync, existsSync } from 'node:fs';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
/**
|
|
5
|
+
* Renders IntermediateSkill to .mdc format (Cursor 2.3+).
|
|
6
|
+
*
|
|
7
|
+
* .mdc files have YAML frontmatter with description, globs, and alwaysApply.
|
|
8
|
+
* The body contains the rule instructions.
|
|
9
|
+
*/
|
|
10
|
+
export class MdcRenderer {
|
|
11
|
+
format = '.mdc';
|
|
12
|
+
extension = '.mdc';
|
|
13
|
+
render(skill) {
|
|
14
|
+
const frontmatter = {
|
|
15
|
+
description: skill.description,
|
|
16
|
+
};
|
|
17
|
+
const cursor = skill.platformSpecific.cursor;
|
|
18
|
+
if (cursor?.globs && cursor.globs.length > 0) {
|
|
19
|
+
frontmatter.globs = cursor.globs.length === 1 ? cursor.globs[0] : cursor.globs.join(', ');
|
|
20
|
+
}
|
|
21
|
+
if (cursor?.alwaysApply !== undefined) {
|
|
22
|
+
frontmatter.alwaysApply = cursor.alwaysApply;
|
|
23
|
+
}
|
|
24
|
+
return matter.stringify(skill.instructions || '', frontmatter);
|
|
25
|
+
}
|
|
26
|
+
renderDirectory(skillDir, skill, outputPath) {
|
|
27
|
+
const copied = [];
|
|
28
|
+
const skipped = [];
|
|
29
|
+
const mdcPath = join(outputPath, `${skillDir.name}.mdc`);
|
|
30
|
+
writeFileSync(mdcPath, this.render(skill), 'utf-8');
|
|
31
|
+
if (skillDir.scriptsDir) {
|
|
32
|
+
const target = join(outputPath, 'scripts');
|
|
33
|
+
if (!existsSync(target)) {
|
|
34
|
+
mkdirSync(target, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
cpSync(skillDir.scriptsDir, target, { recursive: true });
|
|
38
|
+
copied.push(target);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
skipped.push(skillDir.scriptsDir);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
skillName: skill.name,
|
|
46
|
+
mainOutput: mdcPath,
|
|
47
|
+
copiedFiles: copied,
|
|
48
|
+
skippedFiles: skipped,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=mdc.renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdc.renderer.js","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACb,MAAM,GAAe,MAAM,CAAC;IAC5B,SAAS,GAAG,MAAM,CAAC;IAE5B,MAAM,CAAC,KAAwB;QAC7B,MAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,eAAe,CACb,QAAwB,EACxB,KAAwB,EACxB,UAAkB;QAElB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Renderer } from './renderer.interface.js';
|
|
2
|
+
import type { FormatType } from '../core/types.js';
|
|
3
|
+
export declare function registerRenderer(renderer: Renderer): void;
|
|
4
|
+
export declare function getRenderer(format: FormatType): Renderer;
|
|
5
|
+
export declare function getRegisteredRenderers(): Renderer[];
|
|
6
|
+
//# sourceMappingURL=renderer-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-registry.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAEzD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CASxD;AAED,wBAAgB,sBAAsB,IAAI,QAAQ,EAAE,CAEnD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TransSkillError } from '../core/errors.js';
|
|
2
|
+
const rendererRegistry = new Map();
|
|
3
|
+
export function registerRenderer(renderer) {
|
|
4
|
+
rendererRegistry.set(renderer.format, renderer);
|
|
5
|
+
}
|
|
6
|
+
export function getRenderer(format) {
|
|
7
|
+
const renderer = rendererRegistry.get(format);
|
|
8
|
+
if (!renderer) {
|
|
9
|
+
throw new TransSkillError(`Unsupported output format: ${format}`, 'UNSUPPORTED_OUTPUT_FORMAT');
|
|
10
|
+
}
|
|
11
|
+
return renderer;
|
|
12
|
+
}
|
|
13
|
+
export function getRegisteredRenderers() {
|
|
14
|
+
return Array.from(rendererRegistry.values());
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=renderer-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-registry.js","sourceRoot":"","sources":["../../src/renderer/renderer-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,eAAe,CACvB,8BAA8B,MAAM,EAAE,EACtC,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FormatType, IntermediateSkill, SkillDirectory, DirectoryConversionResult } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Renderer interface - writes IntermediateSkill to a target platform format.
|
|
4
|
+
*/
|
|
5
|
+
export interface Renderer {
|
|
6
|
+
/** The format this renderer outputs */
|
|
7
|
+
readonly format: FormatType;
|
|
8
|
+
/** Output file extension (including dot) */
|
|
9
|
+
readonly extension: string;
|
|
10
|
+
/** Render a single skill to a string */
|
|
11
|
+
render(skill: IntermediateSkill): string;
|
|
12
|
+
/** Render a full skill directory (optional — only for formats that support directories) */
|
|
13
|
+
renderDirectory?(skillDir: SkillDirectory, skill: IntermediateSkill, outputPath: string): DirectoryConversionResult;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=renderer.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.interface.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEjH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,wCAAwC;IACxC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAEzC,2FAA2F;IAC3F,eAAe,CAAC,CACd,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.interface.js","sourceRoot":"","sources":["../../src/renderer/renderer.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Renderer } from './renderer.interface.js';
|
|
2
|
+
import type { FormatType, IntermediateSkill, SkillDirectory, DirectoryConversionResult } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Renders IntermediateSkill back to SKILL.md format.
|
|
5
|
+
*
|
|
6
|
+
* Output: YAML frontmatter (name, description, tags, author, version)
|
|
7
|
+
* + Markdown body (instructions)
|
|
8
|
+
*/
|
|
9
|
+
export declare class SKILLMdRenderer implements Renderer {
|
|
10
|
+
readonly format: FormatType;
|
|
11
|
+
readonly extension = ".md";
|
|
12
|
+
render(skill: IntermediateSkill): string;
|
|
13
|
+
renderDirectory(skillDir: SkillDirectory, skill: IntermediateSkill, outputPath: string): DirectoryConversionResult;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=skill-md.renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/skill-md.renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEjH;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAc;IACzC,QAAQ,CAAC,SAAS,SAAS;IAE3B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAqBxC,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB;CA4C7B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { writeFileSync, cpSync } from 'node:fs';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
/**
|
|
5
|
+
* Renders IntermediateSkill back to SKILL.md format.
|
|
6
|
+
*
|
|
7
|
+
* Output: YAML frontmatter (name, description, tags, author, version)
|
|
8
|
+
* + Markdown body (instructions)
|
|
9
|
+
*/
|
|
10
|
+
export class SKILLMdRenderer {
|
|
11
|
+
format = 'skill.md';
|
|
12
|
+
extension = '.md';
|
|
13
|
+
render(skill) {
|
|
14
|
+
const frontmatter = {
|
|
15
|
+
name: skill.name,
|
|
16
|
+
description: skill.description,
|
|
17
|
+
};
|
|
18
|
+
if (skill.metadata.tags)
|
|
19
|
+
frontmatter.tags = skill.metadata.tags;
|
|
20
|
+
if (skill.metadata.author)
|
|
21
|
+
frontmatter.author = skill.metadata.author;
|
|
22
|
+
if (skill.metadata.version)
|
|
23
|
+
frontmatter.version = skill.metadata.version;
|
|
24
|
+
if (skill.metadata.rawFrontmatter) {
|
|
25
|
+
for (const [key, value] of Object.entries(skill.metadata.rawFrontmatter)) {
|
|
26
|
+
if (!(key in frontmatter)) {
|
|
27
|
+
frontmatter[key] = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return matter.stringify(skill.instructions || '', frontmatter);
|
|
32
|
+
}
|
|
33
|
+
renderDirectory(skillDir, skill, outputPath) {
|
|
34
|
+
const copied = [];
|
|
35
|
+
const skipped = [];
|
|
36
|
+
const skillMdPath = join(outputPath, 'SKILL.md');
|
|
37
|
+
writeFileSync(skillMdPath, this.render(skill), 'utf-8');
|
|
38
|
+
if (skillDir.scriptsDir) {
|
|
39
|
+
const target = join(outputPath, 'scripts');
|
|
40
|
+
try {
|
|
41
|
+
cpSync(skillDir.scriptsDir, target, { recursive: true });
|
|
42
|
+
copied.push(target);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
skipped.push(skillDir.scriptsDir);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (skillDir.referencesDir) {
|
|
49
|
+
const target = join(outputPath, 'references');
|
|
50
|
+
try {
|
|
51
|
+
cpSync(skillDir.referencesDir, target, { recursive: true });
|
|
52
|
+
copied.push(target);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
skipped.push(skillDir.referencesDir);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (skillDir.assetsDir) {
|
|
59
|
+
const target = join(outputPath, 'assets');
|
|
60
|
+
try {
|
|
61
|
+
cpSync(skillDir.assetsDir, target, { recursive: true });
|
|
62
|
+
copied.push(target);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
skipped.push(skillDir.assetsDir);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
skillName: skill.name,
|
|
70
|
+
mainOutput: skillMdPath,
|
|
71
|
+
copiedFiles: copied,
|
|
72
|
+
skippedFiles: skipped,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=skill-md.renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.renderer.js","sourceRoot":"","sources":["../../src/renderer/skill-md.renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { InputResolver } from './resolver.interface.js';
|
|
2
|
+
import type { ResolvedInput } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves GitHub repository references by cloning them to a temporary directory.
|
|
5
|
+
* Supports: gh:owner/repo, gh:owner/repo/subpath, https://github.com/owner/repo
|
|
6
|
+
*/
|
|
7
|
+
export declare class GitHubResolver implements InputResolver {
|
|
8
|
+
supports(input: string): boolean;
|
|
9
|
+
resolve(input: string): Promise<ResolvedInput>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=github.resolver.d.ts.map
|