@ngxtm/devkit 2.0.0 → 2.0.2
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/cli/config.js +149 -84
- package/cli/install.js +34 -19
- package/package.json +1 -1
- package/settings.json +1 -92
package/cli/config.js
CHANGED
|
@@ -8,130 +8,188 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
// Core skills that are always installed with --minimal
|
|
11
|
-
//
|
|
11
|
+
// Using exact directory names for accurate matching
|
|
12
12
|
const MINIMAL_SKILLS = [
|
|
13
13
|
// Best practices
|
|
14
14
|
'react-best-practices',
|
|
15
|
-
'typescript-
|
|
15
|
+
'typescript-expert',
|
|
16
|
+
'typescript-pro',
|
|
16
17
|
'postgres-best-practices',
|
|
17
18
|
'api-security-best-practices',
|
|
19
|
+
'nodejs-best-practices',
|
|
18
20
|
// Core workflows
|
|
19
|
-
'git-commit',
|
|
20
21
|
'code-review',
|
|
21
22
|
'debugging',
|
|
22
|
-
'testing',
|
|
23
|
-
'refactoring',
|
|
23
|
+
'testing-patterns',
|
|
24
|
+
'code-refactoring',
|
|
24
25
|
// Architecture
|
|
25
26
|
'api-patterns',
|
|
26
27
|
'architecture',
|
|
27
28
|
'clean-code',
|
|
29
|
+
'software-architecture',
|
|
28
30
|
// Operations
|
|
29
|
-
'documentation',
|
|
30
|
-
'
|
|
31
|
-
'logging',
|
|
32
|
-
'performance-optimization',
|
|
33
|
-
'security-best-practices',
|
|
31
|
+
'code-documentation',
|
|
32
|
+
'performance-profiling',
|
|
34
33
|
// AI/MCP
|
|
35
34
|
'mcp-management',
|
|
36
|
-
'sequential-thinking'
|
|
35
|
+
'sequential-thinking',
|
|
36
|
+
// Git
|
|
37
|
+
'git-pushing'
|
|
37
38
|
];
|
|
38
39
|
|
|
39
40
|
// Skill categories for --category option
|
|
41
|
+
// Using patterns that match actual directory names
|
|
40
42
|
const SKILL_CATEGORIES = {
|
|
41
43
|
'react': [
|
|
42
44
|
'react-best-practices',
|
|
43
|
-
'react-
|
|
44
|
-
'
|
|
45
|
-
'
|
|
46
|
-
'
|
|
47
|
-
'react-
|
|
48
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
45
|
+
'react-expert',
|
|
46
|
+
'react-patterns',
|
|
47
|
+
'react-ui-patterns',
|
|
48
|
+
'react-native-expert',
|
|
49
|
+
'react-flow-node',
|
|
50
|
+
'nextjs-best-practices',
|
|
51
|
+
'nextjs-developer',
|
|
52
|
+
'nextjs-supabase-auth',
|
|
53
|
+
'expo-app-design',
|
|
54
|
+
'expo-deployment'
|
|
51
55
|
],
|
|
52
56
|
'typescript': [
|
|
53
|
-
'typescript-
|
|
54
|
-
'typescript-
|
|
55
|
-
'typescript
|
|
56
|
-
'
|
|
57
|
+
'typescript-expert',
|
|
58
|
+
'typescript-pro',
|
|
59
|
+
'javascript-typescript',
|
|
60
|
+
'javascript-mastery',
|
|
61
|
+
'javascript-pro'
|
|
57
62
|
],
|
|
58
63
|
'node': [
|
|
59
|
-
'nodejs',
|
|
60
|
-
'nestjs',
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'prisma',
|
|
64
|
-
'
|
|
64
|
+
'nodejs-best-practices',
|
|
65
|
+
'nestjs-expert',
|
|
66
|
+
'fastapi-expert',
|
|
67
|
+
'fastapi-router',
|
|
68
|
+
'prisma-expert',
|
|
69
|
+
'bullmq-specialist',
|
|
70
|
+
'bun-development'
|
|
71
|
+
],
|
|
72
|
+
'python': [
|
|
73
|
+
'python-development',
|
|
74
|
+
'python-patterns',
|
|
75
|
+
'python-pro',
|
|
76
|
+
'django-expert',
|
|
77
|
+
'fastapi-expert',
|
|
78
|
+
'pydantic-models',
|
|
79
|
+
'pandas-pro'
|
|
65
80
|
],
|
|
66
81
|
'database': [
|
|
67
82
|
'postgres-best-practices',
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
71
|
-
'database-
|
|
83
|
+
'postgres-pro',
|
|
84
|
+
'neon-postgres',
|
|
85
|
+
'database-design',
|
|
86
|
+
'database-optimizer',
|
|
87
|
+
'databases',
|
|
88
|
+
'nosql-expert',
|
|
89
|
+
'sql-pro'
|
|
72
90
|
],
|
|
73
91
|
'devops': [
|
|
74
|
-
'docker',
|
|
75
|
-
'kubernetes',
|
|
76
|
-
'
|
|
77
|
-
'github-
|
|
78
|
-
'
|
|
79
|
-
'aws',
|
|
80
|
-
'
|
|
92
|
+
'docker-expert',
|
|
93
|
+
'kubernetes-specialist',
|
|
94
|
+
'terraform-engineer',
|
|
95
|
+
'github-workflow-automation',
|
|
96
|
+
'aws-serverless',
|
|
97
|
+
'aws-cdk-development',
|
|
98
|
+
'aws-cost-operations',
|
|
99
|
+
'gcp-cloud-run',
|
|
100
|
+
'cloudflare-expert',
|
|
101
|
+
'vercel-deploy',
|
|
102
|
+
'vercel-deployment',
|
|
103
|
+
'devops',
|
|
104
|
+
'devops-engineer'
|
|
81
105
|
],
|
|
82
106
|
'testing': [
|
|
83
|
-
'testing',
|
|
84
|
-
'
|
|
85
|
-
'
|
|
86
|
-
'
|
|
87
|
-
'
|
|
88
|
-
'test-
|
|
107
|
+
'testing-patterns',
|
|
108
|
+
'test-driven-development',
|
|
109
|
+
'tdd-workflow',
|
|
110
|
+
'playwright-expert',
|
|
111
|
+
'playwright-skill',
|
|
112
|
+
'test-master',
|
|
113
|
+
'test-fixing',
|
|
114
|
+
'qa-regression'
|
|
89
115
|
],
|
|
90
116
|
'security': [
|
|
91
|
-
'security-best-practices',
|
|
92
117
|
'api-security-best-practices',
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
118
|
+
'secure-code-guardian',
|
|
119
|
+
'security-reviewer',
|
|
120
|
+
'ethical-hacking-methodology',
|
|
121
|
+
'pentest-checklist',
|
|
122
|
+
'pentest-commands',
|
|
123
|
+
'aws-penetration-testing',
|
|
124
|
+
'cloud-penetration-testing',
|
|
125
|
+
'top-web-vulnerabilities'
|
|
96
126
|
],
|
|
97
127
|
'ai': [
|
|
98
128
|
'ai-agents-architect',
|
|
99
129
|
'ai-product',
|
|
130
|
+
'ai-multimodal',
|
|
100
131
|
'mcp-management',
|
|
132
|
+
'mcp-developer',
|
|
133
|
+
'mcp-builder',
|
|
101
134
|
'prompt-engineering',
|
|
102
|
-
'
|
|
103
|
-
'
|
|
135
|
+
'prompt-engineer',
|
|
136
|
+
'langgraph',
|
|
137
|
+
'langfuse',
|
|
138
|
+
'crewai',
|
|
139
|
+
'rag-architect',
|
|
140
|
+
'rag-engineer',
|
|
141
|
+
'rag-implementation',
|
|
142
|
+
'llm-application-dev',
|
|
143
|
+
'llm-app-patterns',
|
|
144
|
+
'sequential-thinking',
|
|
145
|
+
'agent-memory-mcp',
|
|
146
|
+
'agent-memory-systems',
|
|
147
|
+
'autonomous-agent-patterns'
|
|
104
148
|
],
|
|
105
149
|
'mobile': [
|
|
106
|
-
'react-native',
|
|
107
|
-
'flutter',
|
|
108
|
-
'
|
|
109
|
-
'
|
|
110
|
-
'mobile-
|
|
150
|
+
'react-native-expert',
|
|
151
|
+
'flutter-expert',
|
|
152
|
+
'expo-app-design',
|
|
153
|
+
'expo-deployment',
|
|
154
|
+
'mobile-design',
|
|
155
|
+
'mobile-development',
|
|
156
|
+
'swift-expert',
|
|
157
|
+
'kotlin-specialist'
|
|
111
158
|
],
|
|
112
159
|
'frontend': [
|
|
113
|
-
'
|
|
114
|
-
'
|
|
115
|
-
'
|
|
116
|
-
'
|
|
117
|
-
'
|
|
118
|
-
'
|
|
160
|
+
'frontend-development',
|
|
161
|
+
'frontend-design',
|
|
162
|
+
'frontend-dev-guidelines',
|
|
163
|
+
'tailwind-patterns',
|
|
164
|
+
'ui-design-system',
|
|
165
|
+
'ui-styling',
|
|
166
|
+
'ui-ux-pro-max',
|
|
167
|
+
'web-design-guidelines',
|
|
168
|
+
'web-performance-optimization',
|
|
169
|
+
'threejs',
|
|
170
|
+
'vue-expert',
|
|
171
|
+
'angular-architect'
|
|
119
172
|
],
|
|
120
173
|
'backend': [
|
|
174
|
+
'backend-development',
|
|
175
|
+
'backend-dev-guidelines',
|
|
121
176
|
'api-patterns',
|
|
122
|
-
'
|
|
123
|
-
'
|
|
124
|
-
'
|
|
125
|
-
'
|
|
126
|
-
'
|
|
177
|
+
'api-designer',
|
|
178
|
+
'microservices-architect',
|
|
179
|
+
'graphql',
|
|
180
|
+
'graphql-architect',
|
|
181
|
+
'websocket-engineer'
|
|
127
182
|
],
|
|
128
183
|
'tools': [
|
|
129
|
-
'git-
|
|
184
|
+
'git-pushing',
|
|
130
185
|
'code-review',
|
|
131
186
|
'debugging',
|
|
132
|
-
'
|
|
133
|
-
'
|
|
134
|
-
'
|
|
187
|
+
'debugging-wizard',
|
|
188
|
+
'code-refactoring',
|
|
189
|
+
'code-documentation',
|
|
190
|
+
'repomix',
|
|
191
|
+
'browser-automation',
|
|
192
|
+
'cli-developer'
|
|
135
193
|
]
|
|
136
194
|
};
|
|
137
195
|
|
|
@@ -157,30 +215,37 @@ function getSkillsForCategories(categories) {
|
|
|
157
215
|
// Check if a skill matches the filter
|
|
158
216
|
function shouldIncludeSkill(skillName, options = {}) {
|
|
159
217
|
const { minimal, categories, selectedSkills } = options;
|
|
218
|
+
const lowerSkillName = skillName.toLowerCase();
|
|
160
219
|
|
|
161
220
|
// If specific skills are selected, check against that list
|
|
162
221
|
if (selectedSkills && selectedSkills.length > 0) {
|
|
163
|
-
return selectedSkills.some(s =>
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
222
|
+
return selectedSkills.some(s => {
|
|
223
|
+
const lowerS = s.toLowerCase();
|
|
224
|
+
return lowerSkillName === lowerS ||
|
|
225
|
+
lowerSkillName.includes(lowerS) ||
|
|
226
|
+
lowerS.includes(lowerSkillName);
|
|
227
|
+
});
|
|
167
228
|
}
|
|
168
229
|
|
|
169
230
|
// If minimal mode, only include minimal skills
|
|
170
231
|
if (minimal) {
|
|
171
|
-
return MINIMAL_SKILLS.some(s =>
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
232
|
+
return MINIMAL_SKILLS.some(s => {
|
|
233
|
+
const lowerS = s.toLowerCase();
|
|
234
|
+
return lowerSkillName === lowerS ||
|
|
235
|
+
lowerSkillName.includes(lowerS) ||
|
|
236
|
+
lowerS.includes(lowerSkillName);
|
|
237
|
+
});
|
|
175
238
|
}
|
|
176
239
|
|
|
177
240
|
// If categories specified, check against category skills
|
|
178
241
|
if (categories && categories.length > 0) {
|
|
179
242
|
const categorySkills = getSkillsForCategories(categories);
|
|
180
|
-
return categorySkills.some(s =>
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
243
|
+
return categorySkills.some(s => {
|
|
244
|
+
const lowerS = s.toLowerCase();
|
|
245
|
+
return lowerSkillName === lowerS ||
|
|
246
|
+
lowerSkillName.includes(lowerS) ||
|
|
247
|
+
lowerS.includes(lowerSkillName);
|
|
248
|
+
});
|
|
184
249
|
}
|
|
185
250
|
|
|
186
251
|
// Default: include all
|
package/cli/install.js
CHANGED
|
@@ -172,9 +172,28 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
// 2. Install
|
|
175
|
+
// 2. Install commands to the official commands directory (for slash commands)
|
|
176
|
+
if (tool.commandsPath) {
|
|
177
|
+
// Install commands from commands/ folder
|
|
178
|
+
const srcCommands = path.join(PACKAGE_ROOT, 'commands');
|
|
179
|
+
if (fs.existsSync(srcCommands)) {
|
|
180
|
+
const count = copyDir(srcCommands, tool.commandsPath, replacements, options);
|
|
181
|
+
console.log(` ✅ Commands: ${count} files`);
|
|
182
|
+
totalFiles += count;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Install commands from commands-claudekit/ folder (merged into same directory)
|
|
186
|
+
const srcCommandsClaudekit = path.join(PACKAGE_ROOT, 'commands-claudekit');
|
|
187
|
+
if (fs.existsSync(srcCommandsClaudekit)) {
|
|
188
|
+
const count = copyDir(srcCommandsClaudekit, tool.commandsPath, replacements, options);
|
|
189
|
+
console.log(` ✅ Commands (claudekit): ${count} files`);
|
|
190
|
+
totalFiles += count;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// 3. Install core framework under agent-assistant subfolder (agents, matrix-skills only)
|
|
176
195
|
const coreDir = path.join(tool.skillsPath, 'agent-assistant');
|
|
177
|
-
const coreComponents = ['agents', '
|
|
196
|
+
const coreComponents = ['agents', 'matrix-skills'];
|
|
178
197
|
|
|
179
198
|
for (const name of coreComponents) {
|
|
180
199
|
const srcPath = path.join(PACKAGE_ROOT, name);
|
|
@@ -186,20 +205,16 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
186
205
|
}
|
|
187
206
|
}
|
|
188
207
|
|
|
189
|
-
//
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const count = copyDir(srcPath, destPath, replacements, options);
|
|
197
|
-
console.log(` ✅ claudekit/${destName}: ${count} files`);
|
|
198
|
-
totalFiles += count;
|
|
199
|
-
}
|
|
208
|
+
// 4. Install claudekit agents if available
|
|
209
|
+
const srcAgentsClaudekit = path.join(PACKAGE_ROOT, 'agents-claudekit');
|
|
210
|
+
if (fs.existsSync(srcAgentsClaudekit)) {
|
|
211
|
+
const destPath = path.join(coreDir, 'claudekit', 'agents');
|
|
212
|
+
const count = copyDir(srcAgentsClaudekit, destPath, replacements, options);
|
|
213
|
+
console.log(` ✅ claudekit/agents: ${count} files`);
|
|
214
|
+
totalFiles += count;
|
|
200
215
|
}
|
|
201
216
|
|
|
202
|
-
//
|
|
217
|
+
// 5. Install rules
|
|
203
218
|
const srcRules = path.join(PACKAGE_ROOT, 'rules');
|
|
204
219
|
if (fs.existsSync(srcRules) && tool.rulesPath) {
|
|
205
220
|
const count = copyDir(srcRules, tool.rulesPath, replacements, options);
|
|
@@ -207,7 +222,7 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
207
222
|
totalFiles += count;
|
|
208
223
|
}
|
|
209
224
|
|
|
210
|
-
//
|
|
225
|
+
// 6. Install hooks (Claude Code only)
|
|
211
226
|
if (tool.supportsHooks && tool.hooksPath) {
|
|
212
227
|
const srcHooks = path.join(PACKAGE_ROOT, 'hooks');
|
|
213
228
|
if (fs.existsSync(srcHooks)) {
|
|
@@ -217,7 +232,7 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
234
|
|
|
220
|
-
//
|
|
235
|
+
// 7. Install output-styles (Claude Code only)
|
|
221
236
|
if (toolId === 'claude') {
|
|
222
237
|
const srcStyles = path.join(PACKAGE_ROOT, 'output-styles');
|
|
223
238
|
if (fs.existsSync(srcStyles)) {
|
|
@@ -227,7 +242,7 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
227
242
|
totalFiles += count;
|
|
228
243
|
}
|
|
229
244
|
|
|
230
|
-
//
|
|
245
|
+
// 8. Install workflows
|
|
231
246
|
const srcWorkflows = path.join(PACKAGE_ROOT, 'workflows');
|
|
232
247
|
if (fs.existsSync(srcWorkflows)) {
|
|
233
248
|
const destWorkflows = path.join(tool.basePath, 'workflows');
|
|
@@ -236,7 +251,7 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
236
251
|
totalFiles += count;
|
|
237
252
|
}
|
|
238
253
|
|
|
239
|
-
//
|
|
254
|
+
// 9. Copy statusline scripts
|
|
240
255
|
const statuslineFiles = ['statusline.cjs', 'statusline.ps1', 'statusline.sh'];
|
|
241
256
|
for (const file of statuslineFiles) {
|
|
242
257
|
const srcFile = path.join(PACKAGE_ROOT, file);
|
|
@@ -247,7 +262,7 @@ function installToTool(toolId, tool, options = {}) {
|
|
|
247
262
|
}
|
|
248
263
|
}
|
|
249
264
|
|
|
250
|
-
//
|
|
265
|
+
// 10. Copy settings.json if not exists
|
|
251
266
|
const srcSettings = path.join(PACKAGE_ROOT, 'settings.json');
|
|
252
267
|
const destSettings = path.join(tool.basePath, 'settings.json');
|
|
253
268
|
if (fs.existsSync(srcSettings) && !fs.existsSync(destSettings)) {
|
package/package.json
CHANGED
package/settings.json
CHANGED
|
@@ -1,94 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"includeCoAuthoredBy": false
|
|
3
|
-
"statusLine": {
|
|
4
|
-
"type": "command",
|
|
5
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/statusline.cjs",
|
|
6
|
-
"padding": 0
|
|
7
|
-
},
|
|
8
|
-
"hooks": {
|
|
9
|
-
"SessionStart": [
|
|
10
|
-
{
|
|
11
|
-
"matcher": "startup|resume|clear|compact",
|
|
12
|
-
"hooks": [
|
|
13
|
-
{
|
|
14
|
-
"type": "command",
|
|
15
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/session-init.cjs"
|
|
16
|
-
}
|
|
17
|
-
]
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"SubagentStart": [
|
|
21
|
-
{
|
|
22
|
-
"matcher": "*",
|
|
23
|
-
"hooks": [
|
|
24
|
-
{
|
|
25
|
-
"type": "command",
|
|
26
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/subagent-init.cjs"
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"UserPromptSubmit": [
|
|
32
|
-
{
|
|
33
|
-
"hooks": [
|
|
34
|
-
{
|
|
35
|
-
"type": "command",
|
|
36
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/dev-rules-reminder.cjs"
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"hooks": [
|
|
42
|
-
{
|
|
43
|
-
"type": "command",
|
|
44
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/dev-rules-reminder.cjs",
|
|
45
|
-
"_origin": "engineer"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"type": "command",
|
|
49
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/usage-context-awareness.cjs",
|
|
50
|
-
"timeout": 30,
|
|
51
|
-
"_origin": "engineer"
|
|
52
|
-
}
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
"PreToolUse": [
|
|
57
|
-
{
|
|
58
|
-
"matcher": "Bash|Glob|Grep|Read|Edit|Write",
|
|
59
|
-
"hooks": [
|
|
60
|
-
{
|
|
61
|
-
"type": "command",
|
|
62
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/scout-block.cjs"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"type": "command",
|
|
66
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/privacy-block.cjs"
|
|
67
|
-
}
|
|
68
|
-
]
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
"PostToolUse": [
|
|
72
|
-
{
|
|
73
|
-
"matcher": "Edit|Write|MultiEdit",
|
|
74
|
-
"hooks": [
|
|
75
|
-
{
|
|
76
|
-
"type": "command",
|
|
77
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/post-edit-simplify-reminder.cjs",
|
|
78
|
-
"_origin": "engineer"
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"matcher": "*",
|
|
84
|
-
"hooks": [
|
|
85
|
-
{
|
|
86
|
-
"type": "command",
|
|
87
|
-
"command": "node \"%CLAUDE_PROJECT_DIR%\"/.claude/hooks/usage-context-awareness.cjs",
|
|
88
|
-
"_origin": "engineer"
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
}
|
|
2
|
+
"includeCoAuthoredBy": false
|
|
94
3
|
}
|