@skillsmith/cli 0.2.2 → 0.2.3
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 +71 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/author.d.ts +31 -1
- package/dist/src/commands/author.d.ts.map +1 -1
- package/dist/src/commands/author.js +353 -2
- package/dist/src/commands/author.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +1 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/index.js +15 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/templates/index.d.ts +1 -0
- package/dist/src/templates/index.d.ts.map +1 -1
- package/dist/src/templates/index.js +1 -0
- package/dist/src/templates/index.js.map +1 -1
- package/dist/src/templates/subagent.md.template.d.ts +38 -0
- package/dist/src/templates/subagent.md.template.d.ts.map +1 -0
- package/dist/src/templates/subagent.md.template.js +128 -0
- package/dist/src/templates/subagent.md.template.js.map +1 -0
- package/dist/src/utils/tool-analyzer.d.ts +54 -0
- package/dist/src/utils/tool-analyzer.d.ts.map +1 -0
- package/dist/src/utils/tool-analyzer.js +156 -0
- package/dist/src/utils/tool-analyzer.js.map +1 -0
- package/dist/tests/author.test.js +220 -0
- package/dist/tests/author.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1389: Subagent Definition Template
|
|
3
|
+
*
|
|
4
|
+
* Templates for generating companion specialist agents that enable
|
|
5
|
+
* parallel skill execution with 37-97% token savings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Main subagent definition template
|
|
9
|
+
* Generates ~/.claude/agents/[skill-name]-specialist.md
|
|
10
|
+
*/
|
|
11
|
+
export const SUBAGENT_MD_TEMPLATE = `---
|
|
12
|
+
name: {{skillName}}-specialist
|
|
13
|
+
description: {{description}} Use when {{triggerPhrases}}.
|
|
14
|
+
skills: {{skillName}}
|
|
15
|
+
tools: {{tools}}
|
|
16
|
+
model: {{model}}
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Operating Protocol
|
|
20
|
+
|
|
21
|
+
1. Execute the {{skillName}} skill for the delegated task
|
|
22
|
+
2. Process all intermediate results internally
|
|
23
|
+
3. Return ONLY a structured summary to the orchestrator
|
|
24
|
+
|
|
25
|
+
## Output Format
|
|
26
|
+
|
|
27
|
+
- **Task:** [what was requested]
|
|
28
|
+
- **Actions:** [what you did]
|
|
29
|
+
- **Results:** [key outcomes, max 3-5 bullet points]
|
|
30
|
+
- **Artifacts:** [file paths or outputs created]
|
|
31
|
+
|
|
32
|
+
Keep response under 500 tokens unless explicitly requested otherwise.
|
|
33
|
+
|
|
34
|
+
## Tool Usage Guidelines
|
|
35
|
+
|
|
36
|
+
{{toolGuidelines}}
|
|
37
|
+
|
|
38
|
+
## Error Handling
|
|
39
|
+
|
|
40
|
+
If the task cannot be completed:
|
|
41
|
+
- Report specific blocking issue
|
|
42
|
+
- Suggest alternative approaches
|
|
43
|
+
- Do not retry indefinitely
|
|
44
|
+
`;
|
|
45
|
+
/**
|
|
46
|
+
* CLAUDE.md integration snippet template
|
|
47
|
+
* Users can copy this to their project's CLAUDE.md
|
|
48
|
+
*/
|
|
49
|
+
export const CLAUDE_MD_SNIPPET_TEMPLATE = `
|
|
50
|
+
### Subagent Delegation: {{skillName}}
|
|
51
|
+
|
|
52
|
+
When tasks match {{skillName}} triggers, delegate to the {{skillName}}-specialist
|
|
53
|
+
subagent instead of executing directly. This provides context isolation and
|
|
54
|
+
~37-97% token savings.
|
|
55
|
+
|
|
56
|
+
**Trigger Patterns:**
|
|
57
|
+
{{triggerPatterns}}
|
|
58
|
+
|
|
59
|
+
**Delegation Example:**
|
|
60
|
+
\`\`\`
|
|
61
|
+
Task("{{skillName}}-specialist", "{{exampleTask}}", "{{skillName}}-specialist")
|
|
62
|
+
\`\`\`
|
|
63
|
+
`;
|
|
64
|
+
/**
|
|
65
|
+
* Generate tool usage guidelines based on detected tools
|
|
66
|
+
*/
|
|
67
|
+
function generateToolGuidelines(tools) {
|
|
68
|
+
const guidelines = [];
|
|
69
|
+
if (tools.includes('Read')) {
|
|
70
|
+
guidelines.push('- **Read**: Use to examine files before modifications');
|
|
71
|
+
}
|
|
72
|
+
if (tools.includes('Write')) {
|
|
73
|
+
guidelines.push('- **Write**: Use for creating new files only');
|
|
74
|
+
}
|
|
75
|
+
if (tools.includes('Edit')) {
|
|
76
|
+
guidelines.push('- **Edit**: Use for modifying existing files');
|
|
77
|
+
}
|
|
78
|
+
if (tools.includes('Bash')) {
|
|
79
|
+
guidelines.push('- **Bash**: Use for command execution, prefer non-destructive commands');
|
|
80
|
+
}
|
|
81
|
+
if (tools.includes('Grep')) {
|
|
82
|
+
guidelines.push('- **Grep**: Use for searching file contents');
|
|
83
|
+
}
|
|
84
|
+
if (tools.includes('Glob')) {
|
|
85
|
+
guidelines.push('- **Glob**: Use for finding files by pattern');
|
|
86
|
+
}
|
|
87
|
+
if (tools.includes('WebFetch')) {
|
|
88
|
+
guidelines.push('- **WebFetch**: Use for fetching web content');
|
|
89
|
+
}
|
|
90
|
+
if (tools.includes('WebSearch')) {
|
|
91
|
+
guidelines.push('- **WebSearch**: Use for searching the web');
|
|
92
|
+
}
|
|
93
|
+
return guidelines.length > 0 ? guidelines.join('\n') : '- Use tools minimally and efficiently';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Render the subagent definition template
|
|
97
|
+
*
|
|
98
|
+
* @param data - Template data including skill name, description, tools, etc.
|
|
99
|
+
* @returns Rendered subagent markdown content
|
|
100
|
+
*/
|
|
101
|
+
export function renderSubagentTemplate(data) {
|
|
102
|
+
const toolGuidelines = generateToolGuidelines(data.tools);
|
|
103
|
+
const triggerPhrasesFormatted = data.triggerPhrases.length > 0
|
|
104
|
+
? data.triggerPhrases.map((p) => `"${p}"`).join(', ')
|
|
105
|
+
: '[describe trigger conditions]';
|
|
106
|
+
return SUBAGENT_MD_TEMPLATE.replace(/\{\{skillName\}\}/g, data.skillName)
|
|
107
|
+
.replace(/\{\{description\}\}/g, data.description)
|
|
108
|
+
.replace(/\{\{triggerPhrases\}\}/g, triggerPhrasesFormatted)
|
|
109
|
+
.replace(/\{\{tools\}\}/g, data.tools.join(', '))
|
|
110
|
+
.replace(/\{\{model\}\}/g, data.model)
|
|
111
|
+
.replace(/\{\{toolGuidelines\}\}/g, toolGuidelines);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Render the CLAUDE.md integration snippet
|
|
115
|
+
*
|
|
116
|
+
* @param data - Template data
|
|
117
|
+
* @returns Rendered CLAUDE.md snippet
|
|
118
|
+
*/
|
|
119
|
+
export function renderClaudeMdSnippet(data) {
|
|
120
|
+
const triggerPatterns = data.triggerPhrases.length > 0
|
|
121
|
+
? data.triggerPhrases.map((p) => `- "${p}"`).join('\n')
|
|
122
|
+
: '- [add trigger patterns]';
|
|
123
|
+
const exampleTask = data.triggerPhrases.length > 0 ? `${data.triggerPhrases[0]}` : `execute ${data.skillName} task`;
|
|
124
|
+
return CLAUDE_MD_SNIPPET_TEMPLATE.replace(/\{\{skillName\}\}/g, data.skillName)
|
|
125
|
+
.replace(/\{\{triggerPatterns\}\}/g, triggerPatterns)
|
|
126
|
+
.replace(/\{\{exampleTask\}\}/g, exampleTask);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=subagent.md.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.md.template.js","sourceRoot":"","sources":["../../../src/templates/subagent.md.template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1389: Tool Detection for Subagent Generation
|
|
3
|
+
*
|
|
4
|
+
* Analyzes SKILL.md content to determine minimal required tools
|
|
5
|
+
* for subagent execution, enabling context isolation and token savings.
|
|
6
|
+
*/
|
|
7
|
+
export interface ToolAnalysis {
|
|
8
|
+
requiredTools: string[];
|
|
9
|
+
recommendedTools: string[];
|
|
10
|
+
detectedPatterns: string[];
|
|
11
|
+
confidence: 'high' | 'medium' | 'low';
|
|
12
|
+
}
|
|
13
|
+
interface ToolPattern {
|
|
14
|
+
always?: boolean;
|
|
15
|
+
patterns: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Tool detection patterns
|
|
19
|
+
* Each tool has patterns that indicate its requirement
|
|
20
|
+
*/
|
|
21
|
+
export declare const TOOL_PATTERNS: Record<string, ToolPattern>;
|
|
22
|
+
/**
|
|
23
|
+
* Analyze skill content to determine required tools
|
|
24
|
+
*
|
|
25
|
+
* @param skillContent - The full SKILL.md content
|
|
26
|
+
* @returns Analysis of required and recommended tools
|
|
27
|
+
*/
|
|
28
|
+
export declare function analyzeToolRequirements(skillContent: string): ToolAnalysis;
|
|
29
|
+
/**
|
|
30
|
+
* Format tool list for YAML output
|
|
31
|
+
*
|
|
32
|
+
* @param tools - Array of tool names
|
|
33
|
+
* @returns Formatted string for YAML tools field
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatToolList(tools: string[]): string;
|
|
36
|
+
/**
|
|
37
|
+
* Parse comma-separated tools string into array
|
|
38
|
+
*
|
|
39
|
+
* @param toolsString - Comma-separated tools (e.g., "Read, Write, Bash")
|
|
40
|
+
* @returns Array of tool names
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseToolsString(toolsString: string): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Validate that all tools in the list are recognized
|
|
45
|
+
*
|
|
46
|
+
* @param tools - Array of tool names to validate
|
|
47
|
+
* @returns Object with valid boolean and any unrecognized tools
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateTools(tools: string[]): {
|
|
50
|
+
valid: boolean;
|
|
51
|
+
unrecognized: string[];
|
|
52
|
+
};
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=tool-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-analyzer.d.ts","sourceRoot":"","sources":["../../../src/utils/tool-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;CACtC;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAsErD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAmC1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAQzF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1389: Tool Detection for Subagent Generation
|
|
3
|
+
*
|
|
4
|
+
* Analyzes SKILL.md content to determine minimal required tools
|
|
5
|
+
* for subagent execution, enabling context isolation and token savings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Tool detection patterns
|
|
9
|
+
* Each tool has patterns that indicate its requirement
|
|
10
|
+
*/
|
|
11
|
+
export const TOOL_PATTERNS = {
|
|
12
|
+
Read: { always: true, patterns: [] },
|
|
13
|
+
Write: {
|
|
14
|
+
patterns: [
|
|
15
|
+
'write',
|
|
16
|
+
'create file',
|
|
17
|
+
'save',
|
|
18
|
+
'output to file',
|
|
19
|
+
'generate file',
|
|
20
|
+
'write to',
|
|
21
|
+
'create new file',
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
Edit: {
|
|
25
|
+
patterns: [
|
|
26
|
+
'edit',
|
|
27
|
+
'modify',
|
|
28
|
+
'update file',
|
|
29
|
+
'patch',
|
|
30
|
+
'change file',
|
|
31
|
+
'replace in file',
|
|
32
|
+
'refactor',
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
Bash: {
|
|
36
|
+
patterns: [
|
|
37
|
+
'bash',
|
|
38
|
+
'npm',
|
|
39
|
+
'npx',
|
|
40
|
+
'run command',
|
|
41
|
+
'execute',
|
|
42
|
+
'terminal',
|
|
43
|
+
'shell',
|
|
44
|
+
'command line',
|
|
45
|
+
'cli',
|
|
46
|
+
'git ',
|
|
47
|
+
'docker',
|
|
48
|
+
'yarn',
|
|
49
|
+
'pnpm',
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
Grep: {
|
|
53
|
+
patterns: [
|
|
54
|
+
'search',
|
|
55
|
+
'find text',
|
|
56
|
+
'grep',
|
|
57
|
+
'pattern match',
|
|
58
|
+
'search for',
|
|
59
|
+
'look for',
|
|
60
|
+
'find in files',
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
Glob: {
|
|
64
|
+
patterns: ['find file', 'glob', 'file pattern', 'locate file', 'list files', 'find files'],
|
|
65
|
+
},
|
|
66
|
+
WebFetch: {
|
|
67
|
+
patterns: [
|
|
68
|
+
'fetch',
|
|
69
|
+
'http',
|
|
70
|
+
'api call',
|
|
71
|
+
'url',
|
|
72
|
+
'web request',
|
|
73
|
+
'download',
|
|
74
|
+
'get from url',
|
|
75
|
+
'request',
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
WebSearch: {
|
|
79
|
+
patterns: ['web search', 'search online', 'google', 'lookup online', 'search the web'],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Analyze skill content to determine required tools
|
|
84
|
+
*
|
|
85
|
+
* @param skillContent - The full SKILL.md content
|
|
86
|
+
* @returns Analysis of required and recommended tools
|
|
87
|
+
*/
|
|
88
|
+
export function analyzeToolRequirements(skillContent) {
|
|
89
|
+
const content = skillContent.toLowerCase();
|
|
90
|
+
const tools = new Set();
|
|
91
|
+
const patterns = [];
|
|
92
|
+
for (const [tool, config] of Object.entries(TOOL_PATTERNS)) {
|
|
93
|
+
// Always include tools marked as 'always'
|
|
94
|
+
if (config.always) {
|
|
95
|
+
tools.add(tool);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// Check each pattern for the tool
|
|
99
|
+
for (const pattern of config.patterns) {
|
|
100
|
+
if (content.includes(pattern)) {
|
|
101
|
+
tools.add(tool);
|
|
102
|
+
patterns.push(`${tool}: matched "${pattern}"`);
|
|
103
|
+
break; // Only need one match per tool
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Determine confidence based on pattern matches
|
|
108
|
+
const matchCount = patterns.length;
|
|
109
|
+
const confidence = matchCount >= 3 ? 'high' : matchCount >= 1 ? 'medium' : 'low';
|
|
110
|
+
const toolList = Array.from(tools);
|
|
111
|
+
return {
|
|
112
|
+
requiredTools: toolList,
|
|
113
|
+
recommendedTools: toolList,
|
|
114
|
+
detectedPatterns: patterns,
|
|
115
|
+
confidence,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format tool list for YAML output
|
|
120
|
+
*
|
|
121
|
+
* @param tools - Array of tool names
|
|
122
|
+
* @returns Formatted string for YAML tools field
|
|
123
|
+
*/
|
|
124
|
+
export function formatToolList(tools) {
|
|
125
|
+
if (tools.length === 0) {
|
|
126
|
+
return 'Read';
|
|
127
|
+
}
|
|
128
|
+
return tools.join(', ');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Parse comma-separated tools string into array
|
|
132
|
+
*
|
|
133
|
+
* @param toolsString - Comma-separated tools (e.g., "Read, Write, Bash")
|
|
134
|
+
* @returns Array of tool names
|
|
135
|
+
*/
|
|
136
|
+
export function parseToolsString(toolsString) {
|
|
137
|
+
return toolsString
|
|
138
|
+
.split(',')
|
|
139
|
+
.map((t) => t.trim())
|
|
140
|
+
.filter((t) => t.length > 0);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Validate that all tools in the list are recognized
|
|
144
|
+
*
|
|
145
|
+
* @param tools - Array of tool names to validate
|
|
146
|
+
* @returns Object with valid boolean and any unrecognized tools
|
|
147
|
+
*/
|
|
148
|
+
export function validateTools(tools) {
|
|
149
|
+
const validTools = new Set(Object.keys(TOOL_PATTERNS));
|
|
150
|
+
const unrecognized = tools.filter((t) => !validTools.has(t));
|
|
151
|
+
return {
|
|
152
|
+
valid: unrecognized.length === 0,
|
|
153
|
+
unrecognized,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=tool-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-analyzer.js","sourceRoot":"","sources":["../../../src/utils/tool-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpC,KAAK,EAAE;QACL,QAAQ,EAAE;YACR,OAAO;YACP,aAAa;YACb,MAAM;YACN,gBAAgB;YAChB,eAAe;YACf,UAAU;YACV,iBAAiB;SAClB;KACF;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,MAAM;YACN,QAAQ;YACR,aAAa;YACb,OAAO;YACP,aAAa;YACb,iBAAiB;YACjB,UAAU;SACX;KACF;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,MAAM;YACN,KAAK;YACL,KAAK;YACL,aAAa;YACb,SAAS;YACT,UAAU;YACV,OAAO;YACP,cAAc;YACd,KAAK;YACL,MAAM;YACN,QAAQ;YACR,MAAM;YACN,MAAM;SACP;KACF;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,QAAQ;YACR,WAAW;YACX,MAAM;YACN,eAAe;YACf,YAAY;YACZ,UAAU;YACV,eAAe;SAChB;KACF;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;KAC3F;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,OAAO;YACP,MAAM;YACN,UAAU;YACV,KAAK;YACL,aAAa;YACb,UAAU;YACV,cAAc;YACd,SAAS;SACV;KACF;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,CAAC;KACvF;CACF,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IAC1D,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,0CAA0C;QAC1C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACf,SAAQ;QACV,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,OAAO,GAAG,CAAC,CAAA;gBAC9C,MAAK,CAAC,+BAA+B;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA;IAClC,MAAM,UAAU,GACd,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;IAE/D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAElC,OAAO;QACL,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,QAAQ;QAC1B,gBAAgB,EAAE,QAAQ;QAC1B,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,WAAW;SACf,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IACtD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5D,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC;QAChC,YAAY;KACb,CAAA;AACH,CAAC"}
|
|
@@ -109,6 +109,80 @@ describe('SMI-746: Skill Authoring Commands', () => {
|
|
|
109
109
|
});
|
|
110
110
|
});
|
|
111
111
|
});
|
|
112
|
+
describe('SMI-1389: Subagent Command', () => {
|
|
113
|
+
describe('createSubagentCommand', () => {
|
|
114
|
+
it('creates a command with correct name', async () => {
|
|
115
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
116
|
+
const cmd = createSubagentCommand();
|
|
117
|
+
expect(cmd).toBeInstanceOf(Command);
|
|
118
|
+
expect(cmd.name()).toBe('subagent');
|
|
119
|
+
});
|
|
120
|
+
it('has output option with default', async () => {
|
|
121
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
122
|
+
const cmd = createSubagentCommand();
|
|
123
|
+
const outputOpt = cmd.options.find((o) => o.short === '-o');
|
|
124
|
+
expect(outputOpt).toBeDefined();
|
|
125
|
+
expect(outputOpt?.defaultValue).toBe('~/.claude/agents');
|
|
126
|
+
});
|
|
127
|
+
it('has model option with default sonnet', async () => {
|
|
128
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
129
|
+
const cmd = createSubagentCommand();
|
|
130
|
+
const modelOpt = cmd.options.find((o) => o.long === '--model');
|
|
131
|
+
expect(modelOpt).toBeDefined();
|
|
132
|
+
expect(modelOpt?.defaultValue).toBe('sonnet');
|
|
133
|
+
});
|
|
134
|
+
it('has force flag', async () => {
|
|
135
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
136
|
+
const cmd = createSubagentCommand();
|
|
137
|
+
const forceOpt = cmd.options.find((o) => o.long === '--force');
|
|
138
|
+
expect(forceOpt).toBeDefined();
|
|
139
|
+
});
|
|
140
|
+
it('has skip-claude-md flag', async () => {
|
|
141
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
142
|
+
const cmd = createSubagentCommand();
|
|
143
|
+
const skipOpt = cmd.options.find((o) => o.long === '--skip-claude-md');
|
|
144
|
+
expect(skipOpt).toBeDefined();
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('SMI-1390: Transform Command', () => {
|
|
149
|
+
describe('createTransformCommand', () => {
|
|
150
|
+
it('creates a command with correct name', async () => {
|
|
151
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
152
|
+
const cmd = createTransformCommand();
|
|
153
|
+
expect(cmd).toBeInstanceOf(Command);
|
|
154
|
+
expect(cmd.name()).toBe('transform');
|
|
155
|
+
});
|
|
156
|
+
it('has dry-run flag', async () => {
|
|
157
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
158
|
+
const cmd = createTransformCommand();
|
|
159
|
+
const dryRunOpt = cmd.options.find((o) => o.long === '--dry-run');
|
|
160
|
+
expect(dryRunOpt).toBeDefined();
|
|
161
|
+
});
|
|
162
|
+
it('has batch flag', async () => {
|
|
163
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
164
|
+
const cmd = createTransformCommand();
|
|
165
|
+
const batchOpt = cmd.options.find((o) => o.long === '--batch');
|
|
166
|
+
expect(batchOpt).toBeDefined();
|
|
167
|
+
});
|
|
168
|
+
it('has force flag', async () => {
|
|
169
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
170
|
+
const cmd = createTransformCommand();
|
|
171
|
+
const forceOpt = cmd.options.find((o) => o.long === '--force');
|
|
172
|
+
expect(forceOpt).toBeDefined();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('Exported Functions', () => {
|
|
176
|
+
it('exports generateSubagent function', async () => {
|
|
177
|
+
const module = await import('../src/commands/author.js');
|
|
178
|
+
expect(typeof module.generateSubagent).toBe('function');
|
|
179
|
+
});
|
|
180
|
+
it('exports transformSkill function', async () => {
|
|
181
|
+
const module = await import('../src/commands/author.js');
|
|
182
|
+
expect(typeof module.transformSkill).toBe('function');
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
|
112
186
|
describe('Templates', () => {
|
|
113
187
|
describe('SKILL_MD_TEMPLATE', () => {
|
|
114
188
|
it('is exported from templates', async () => {
|
|
@@ -145,5 +219,151 @@ describe('Templates', () => {
|
|
|
145
219
|
expect(README_MD_TEMPLATE).toContain('~/.claude/skills/');
|
|
146
220
|
});
|
|
147
221
|
});
|
|
222
|
+
describe('SUBAGENT_MD_TEMPLATE', () => {
|
|
223
|
+
it('is exported from templates', async () => {
|
|
224
|
+
const { SUBAGENT_MD_TEMPLATE } = await import('../src/templates/index.js');
|
|
225
|
+
expect(typeof SUBAGENT_MD_TEMPLATE).toBe('string');
|
|
226
|
+
});
|
|
227
|
+
it('contains required placeholders', async () => {
|
|
228
|
+
const { SUBAGENT_MD_TEMPLATE } = await import('../src/templates/index.js');
|
|
229
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('{{skillName}}');
|
|
230
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('{{description}}');
|
|
231
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('{{tools}}');
|
|
232
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('{{model}}');
|
|
233
|
+
});
|
|
234
|
+
it('contains YAML frontmatter delimiters', async () => {
|
|
235
|
+
const { SUBAGENT_MD_TEMPLATE } = await import('../src/templates/index.js');
|
|
236
|
+
expect(SUBAGENT_MD_TEMPLATE).toMatch(/^---/);
|
|
237
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('---\n\n##');
|
|
238
|
+
});
|
|
239
|
+
it('contains Operating Protocol section', async () => {
|
|
240
|
+
const { SUBAGENT_MD_TEMPLATE } = await import('../src/templates/index.js');
|
|
241
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('## Operating Protocol');
|
|
242
|
+
});
|
|
243
|
+
it('contains Output Format section', async () => {
|
|
244
|
+
const { SUBAGENT_MD_TEMPLATE } = await import('../src/templates/index.js');
|
|
245
|
+
expect(SUBAGENT_MD_TEMPLATE).toContain('## Output Format');
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
describe('renderSubagentTemplate', () => {
|
|
249
|
+
it('renders template with provided data', async () => {
|
|
250
|
+
const { renderSubagentTemplate } = await import('../src/templates/index.js');
|
|
251
|
+
const result = renderSubagentTemplate({
|
|
252
|
+
skillName: 'test-skill',
|
|
253
|
+
description: 'A test skill',
|
|
254
|
+
triggerPhrases: ['run test', 'execute test'],
|
|
255
|
+
tools: ['Read', 'Bash'],
|
|
256
|
+
model: 'sonnet',
|
|
257
|
+
});
|
|
258
|
+
expect(result).toContain('name: test-skill-specialist');
|
|
259
|
+
expect(result).toContain('A test skill');
|
|
260
|
+
expect(result).toContain('Read, Bash');
|
|
261
|
+
expect(result).toContain('model: sonnet');
|
|
262
|
+
});
|
|
263
|
+
it('formats trigger phrases correctly', async () => {
|
|
264
|
+
const { renderSubagentTemplate } = await import('../src/templates/index.js');
|
|
265
|
+
const result = renderSubagentTemplate({
|
|
266
|
+
skillName: 'my-skill',
|
|
267
|
+
description: 'Description',
|
|
268
|
+
triggerPhrases: ['phrase one', 'phrase two'],
|
|
269
|
+
tools: ['Read'],
|
|
270
|
+
model: 'haiku',
|
|
271
|
+
});
|
|
272
|
+
expect(result).toContain('"phrase one"');
|
|
273
|
+
expect(result).toContain('"phrase two"');
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
describe('renderClaudeMdSnippet', () => {
|
|
277
|
+
it('renders CLAUDE.md snippet', async () => {
|
|
278
|
+
const { renderClaudeMdSnippet } = await import('../src/templates/index.js');
|
|
279
|
+
const result = renderClaudeMdSnippet({
|
|
280
|
+
skillName: 'my-skill',
|
|
281
|
+
description: 'A cool skill',
|
|
282
|
+
triggerPhrases: ['do something'],
|
|
283
|
+
tools: ['Read', 'Write'],
|
|
284
|
+
model: 'opus',
|
|
285
|
+
});
|
|
286
|
+
expect(result).toContain('Subagent Delegation: my-skill');
|
|
287
|
+
expect(result).toContain('my-skill-specialist');
|
|
288
|
+
expect(result).toContain('do something');
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
describe('Tool Analyzer', () => {
|
|
293
|
+
describe('analyzeToolRequirements', () => {
|
|
294
|
+
it('always includes Read tool', async () => {
|
|
295
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
296
|
+
const result = analyzeToolRequirements('Some basic content');
|
|
297
|
+
expect(result.requiredTools).toContain('Read');
|
|
298
|
+
});
|
|
299
|
+
it('detects Write tool from content', async () => {
|
|
300
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
301
|
+
const result = analyzeToolRequirements('This skill will write files');
|
|
302
|
+
expect(result.requiredTools).toContain('Write');
|
|
303
|
+
});
|
|
304
|
+
it('detects Bash tool from npm commands', async () => {
|
|
305
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
306
|
+
const result = analyzeToolRequirements('Run npm install to set up');
|
|
307
|
+
expect(result.requiredTools).toContain('Bash');
|
|
308
|
+
});
|
|
309
|
+
it('detects Grep tool from search patterns', async () => {
|
|
310
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
311
|
+
const result = analyzeToolRequirements('Search for text in files');
|
|
312
|
+
expect(result.requiredTools).toContain('Grep');
|
|
313
|
+
});
|
|
314
|
+
it('detects WebFetch from URL mentions', async () => {
|
|
315
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
316
|
+
const result = analyzeToolRequirements('Fetch data from the API using http requests');
|
|
317
|
+
expect(result.requiredTools).toContain('WebFetch');
|
|
318
|
+
});
|
|
319
|
+
it('returns high confidence for many matches', async () => {
|
|
320
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
321
|
+
const result = analyzeToolRequirements('Write files, run bash commands, search text, and fetch URLs');
|
|
322
|
+
expect(result.confidence).toBe('high');
|
|
323
|
+
});
|
|
324
|
+
it('returns low confidence for no matches', async () => {
|
|
325
|
+
const { analyzeToolRequirements } = await import('../src/utils/tool-analyzer.js');
|
|
326
|
+
const result = analyzeToolRequirements('Simple description with no tool keywords');
|
|
327
|
+
expect(result.confidence).toBe('low');
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
describe('formatToolList', () => {
|
|
331
|
+
it('formats tool array to comma-separated string', async () => {
|
|
332
|
+
const { formatToolList } = await import('../src/utils/tool-analyzer.js');
|
|
333
|
+
const result = formatToolList(['Read', 'Write', 'Bash']);
|
|
334
|
+
expect(result).toBe('Read, Write, Bash');
|
|
335
|
+
});
|
|
336
|
+
it('returns Read for empty array', async () => {
|
|
337
|
+
const { formatToolList } = await import('../src/utils/tool-analyzer.js');
|
|
338
|
+
const result = formatToolList([]);
|
|
339
|
+
expect(result).toBe('Read');
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
describe('parseToolsString', () => {
|
|
343
|
+
it('parses comma-separated tools', async () => {
|
|
344
|
+
const { parseToolsString } = await import('../src/utils/tool-analyzer.js');
|
|
345
|
+
const result = parseToolsString('Read, Write, Bash');
|
|
346
|
+
expect(result).toEqual(['Read', 'Write', 'Bash']);
|
|
347
|
+
});
|
|
348
|
+
it('trims whitespace', async () => {
|
|
349
|
+
const { parseToolsString } = await import('../src/utils/tool-analyzer.js');
|
|
350
|
+
const result = parseToolsString(' Read , Write ');
|
|
351
|
+
expect(result).toEqual(['Read', 'Write']);
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
describe('validateTools', () => {
|
|
355
|
+
it('validates known tools', async () => {
|
|
356
|
+
const { validateTools } = await import('../src/utils/tool-analyzer.js');
|
|
357
|
+
const result = validateTools(['Read', 'Write', 'Bash']);
|
|
358
|
+
expect(result.valid).toBe(true);
|
|
359
|
+
expect(result.unrecognized).toEqual([]);
|
|
360
|
+
});
|
|
361
|
+
it('identifies unrecognized tools', async () => {
|
|
362
|
+
const { validateTools } = await import('../src/utils/tool-analyzer.js');
|
|
363
|
+
const result = validateTools(['Read', 'UnknownTool']);
|
|
364
|
+
expect(result.valid).toBe(false);
|
|
365
|
+
expect(result.unrecognized).toContain('UnknownTool');
|
|
366
|
+
});
|
|
367
|
+
});
|
|
148
368
|
});
|
|
149
369
|
//# sourceMappingURL=author.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"author.test.js","sourceRoot":"","sources":["../../tests/author.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"author.test.js","sourceRoot":"","sources":["../../tests/author.test.ts"],"names":[],"mappings":"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"}
|