@amrhas82/agentic-kit 1.8.1 → 1.9.1
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/installer/cli.js +85 -46
- package/installer/package-manager.js +4 -2
- package/package.json +1 -1
package/installer/cli.js
CHANGED
|
@@ -83,8 +83,8 @@ class InteractiveInstaller {
|
|
|
83
83
|
|
|
84
84
|
this.variants = [
|
|
85
85
|
{ id: 'lite', name: 'Lite', agents: 3, skills: 0, description: 'Minimal setup, CI/CD' },
|
|
86
|
-
{ id: 'standard', name: 'Standard', agents:
|
|
87
|
-
{ id: 'pro', name: 'Pro', agents:
|
|
86
|
+
{ id: 'standard', name: 'Standard', agents: 14, skills: 8, description: 'Most users, general dev' },
|
|
87
|
+
{ id: 'pro', name: 'Pro', agents: 14, skills: 20, description: 'Full installation, all features' }
|
|
88
88
|
];
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -198,8 +198,8 @@ ${colors.bright}TOOLS:${colors.reset}
|
|
|
198
198
|
|
|
199
199
|
${colors.bright}VARIANTS:${colors.reset}
|
|
200
200
|
${colors.cyan}lite${colors.reset} - Minimal setup (3 agents, 0 skills) - For CI/CD
|
|
201
|
-
${colors.cyan}standard${colors.reset} - Standard setup (
|
|
202
|
-
${colors.cyan}pro${colors.reset} - Full setup (
|
|
201
|
+
${colors.cyan}standard${colors.reset} - Standard setup (14 agents, 8 skills) - For most users
|
|
202
|
+
${colors.cyan}pro${colors.reset} - Full setup (14 agents, 20 commands) - Default for everyone
|
|
203
203
|
|
|
204
204
|
${colors.bright}EXAMPLES:${colors.reset}
|
|
205
205
|
# Interactive installation (default)
|
|
@@ -680,10 +680,9 @@ ${colors.bright}For more information, visit:${colors.reset}
|
|
|
680
680
|
}
|
|
681
681
|
|
|
682
682
|
// Display summary
|
|
683
|
-
const variantInfo = this.variants.find(v => v.id === variant);
|
|
684
683
|
console.log(`${colors.bright}Installation Summary:${colors.reset}`);
|
|
685
|
-
console.log(`${colors.cyan}
|
|
686
|
-
console.log(`${colors.cyan}
|
|
684
|
+
console.log(`${colors.cyan}Installing:${colors.reset} ${this.selections.tools.join(', ')}`);
|
|
685
|
+
console.log(`${colors.cyan}Each tool includes:${colors.reset} 14 agents + 20 commands`);
|
|
687
686
|
console.log('');
|
|
688
687
|
|
|
689
688
|
for (const toolId of this.selections.tools) {
|
|
@@ -1107,48 +1106,89 @@ ${colors.yellow}Press Enter to begin or Ctrl+C to exit${colors.reset}
|
|
|
1107
1106
|
}
|
|
1108
1107
|
|
|
1109
1108
|
async selectTools() {
|
|
1110
|
-
console.log(`\n${colors.bright}
|
|
1109
|
+
console.log(`\n${colors.bright}Select tools to install${colors.reset}\n`);
|
|
1110
|
+
console.log(`${colors.cyan}(↑↓ navigate, space=toggle, a=all, enter=confirm)${colors.reset}\n`);
|
|
1111
|
+
|
|
1112
|
+
// Interactive checkbox selection
|
|
1113
|
+
const selected = new Set(['claude']); // Default to claude
|
|
1114
|
+
let currentIndex = 0;
|
|
1115
|
+
|
|
1116
|
+
const renderList = () => {
|
|
1117
|
+
// Clear previous list
|
|
1118
|
+
process.stdout.write('\x1b[' + (this.tools.length + 1) + 'A'); // Move up
|
|
1119
|
+
process.stdout.write('\x1b[0J'); // Clear from cursor down
|
|
1120
|
+
|
|
1121
|
+
this.tools.forEach((tool, index) => {
|
|
1122
|
+
const isSelected = selected.has(tool.id);
|
|
1123
|
+
const isCurrent = index === currentIndex;
|
|
1124
|
+
const checkbox = isSelected ? '●' : '○';
|
|
1125
|
+
const pointer = isCurrent ? '»' : ' ';
|
|
1126
|
+
const color = isCurrent ? colors.cyan : colors.reset;
|
|
1127
|
+
|
|
1128
|
+
console.log(`${pointer} ${color}${checkbox} ${tool.name.padEnd(20)}${colors.reset} - ${tool.description}`);
|
|
1129
|
+
});
|
|
1130
|
+
console.log(''); // Empty line at bottom
|
|
1131
|
+
};
|
|
1111
1132
|
|
|
1112
|
-
//
|
|
1113
|
-
this.tools.forEach((tool) => {
|
|
1114
|
-
|
|
1115
|
-
|
|
1133
|
+
// Initial render
|
|
1134
|
+
this.tools.forEach((tool, index) => {
|
|
1135
|
+
const isSelected = selected.has(tool.id);
|
|
1136
|
+
const isCurrent = index === currentIndex;
|
|
1137
|
+
const checkbox = isSelected ? '●' : '○';
|
|
1138
|
+
const pointer = isCurrent ? '»' : ' ';
|
|
1139
|
+
const color = isCurrent ? colors.cyan : colors.reset;
|
|
1116
1140
|
|
|
1117
|
-
|
|
1118
|
-
|
|
1141
|
+
console.log(`${pointer} ${color}${checkbox} ${tool.name.padEnd(20)}${colors.reset} - ${tool.description}`);
|
|
1142
|
+
});
|
|
1143
|
+
console.log('');
|
|
1119
1144
|
|
|
1120
|
-
return new Promise(resolve => {
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1145
|
+
return new Promise((resolve) => {
|
|
1146
|
+
const stdin = process.stdin;
|
|
1147
|
+
stdin.setRawMode(true);
|
|
1148
|
+
stdin.resume();
|
|
1149
|
+
stdin.setEncoding('utf8');
|
|
1150
|
+
|
|
1151
|
+
const onKeypress = (key) => {
|
|
1152
|
+
if (key === '\u0003' || key === '\u001b') { // Ctrl+C or ESC
|
|
1153
|
+
stdin.setRawMode(false);
|
|
1154
|
+
stdin.pause();
|
|
1155
|
+
process.exit(0);
|
|
1156
|
+
} else if (key === '\r' || key === '\n') { // Enter
|
|
1157
|
+
stdin.setRawMode(false);
|
|
1158
|
+
stdin.removeListener('data', onKeypress);
|
|
1159
|
+
|
|
1160
|
+
this.selections.tools = Array.from(selected);
|
|
1161
|
+
|
|
1162
|
+
// Show selection summary
|
|
1163
|
+
console.log(`${colors.green}Installing ${this.selections.tools.length} tool(s):${colors.reset}`);
|
|
1164
|
+
this.selections.tools.forEach(id => {
|
|
1165
|
+
const tool = this.tools.find(t => t.id === id);
|
|
1166
|
+
console.log(` ${colors.green}✓${colors.reset} ${tool.name} ${colors.cyan}(14 agents + 20 commands)${colors.reset}`);
|
|
1167
|
+
});
|
|
1168
|
+
console.log('');
|
|
1127
1169
|
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
)
|
|
1132
|
-
|
|
1133
|
-
|
|
1170
|
+
resolve();
|
|
1171
|
+
} else if (key === ' ') { // Space - toggle
|
|
1172
|
+
const toolId = this.tools[currentIndex].id;
|
|
1173
|
+
if (selected.has(toolId)) {
|
|
1174
|
+
selected.delete(toolId);
|
|
1175
|
+
} else {
|
|
1176
|
+
selected.add(toolId);
|
|
1134
1177
|
}
|
|
1178
|
+
renderList();
|
|
1179
|
+
} else if (key === 'a' || key === 'A') { // Select all
|
|
1180
|
+
this.tools.forEach(tool => selected.add(tool.id));
|
|
1181
|
+
renderList();
|
|
1182
|
+
} else if (key === '\u001b[A') { // Up arrow
|
|
1183
|
+
currentIndex = currentIndex > 0 ? currentIndex - 1 : this.tools.length - 1;
|
|
1184
|
+
renderList();
|
|
1185
|
+
} else if (key === '\u001b[B') { // Down arrow
|
|
1186
|
+
currentIndex = currentIndex < this.tools.length - 1 ? currentIndex + 1 : 0;
|
|
1187
|
+
renderList();
|
|
1135
1188
|
}
|
|
1189
|
+
};
|
|
1136
1190
|
|
|
1137
|
-
|
|
1138
|
-
if (this.selections.tools.length === 0) {
|
|
1139
|
-
this.selections.tools = ['claude'];
|
|
1140
|
-
console.log(`${colors.blue}Using default: claude${colors.reset}`);
|
|
1141
|
-
}
|
|
1142
|
-
|
|
1143
|
-
// Show selection summary
|
|
1144
|
-
console.log(`\n${colors.green}Installing:${colors.reset}`);
|
|
1145
|
-
this.selections.tools.forEach(id => {
|
|
1146
|
-
const tool = this.tools.find(t => t.id === id);
|
|
1147
|
-
console.log(` ${colors.green}✓${colors.reset} ${tool.name} ${colors.cyan}(14 agents + 20 commands)${colors.reset}`);
|
|
1148
|
-
});
|
|
1149
|
-
|
|
1150
|
-
resolve();
|
|
1151
|
-
});
|
|
1191
|
+
stdin.on('data', onKeypress);
|
|
1152
1192
|
});
|
|
1153
1193
|
}
|
|
1154
1194
|
|
|
@@ -1345,11 +1385,10 @@ ${colors.yellow}Press Enter to begin or Ctrl+C to exit${colors.reset}
|
|
|
1345
1385
|
async showSummary() {
|
|
1346
1386
|
console.log(`\n${colors.bright}Step 4/4 — Installation Summary${colors.reset}\n`);
|
|
1347
1387
|
|
|
1348
|
-
|
|
1349
|
-
console.log(`Package: ${variant.name} (${variant.agents} agents, ${variant.skills} skills)`);
|
|
1350
|
-
console.log(`Tools: ${this.selections.tools.map(id =>
|
|
1388
|
+
console.log(`Installing: ${this.selections.tools.map(id =>
|
|
1351
1389
|
this.tools.find(t => t.id === id).name
|
|
1352
|
-
).join(', ')}
|
|
1390
|
+
).join(', ')}`);
|
|
1391
|
+
console.log(`Each tool includes: 14 agents + 20 commands\n`);
|
|
1353
1392
|
|
|
1354
1393
|
console.log('Installation Details:');
|
|
1355
1394
|
console.log('┌─────────────┬──────────────────┬──────────┬─────────────┐');
|
|
@@ -73,9 +73,10 @@ class PackageManager {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// Validate each variant has required fields
|
|
76
|
+
// Note: 'skills' is optional (some tools only have commands)
|
|
76
77
|
for (const variant of requiredVariants) {
|
|
77
78
|
const variantConfig = config[variant];
|
|
78
|
-
const requiredFields = ['name', 'description', 'agents', '
|
|
79
|
+
const requiredFields = ['name', 'description', 'agents', 'resources', 'hooks'];
|
|
79
80
|
|
|
80
81
|
for (const field of requiredFields) {
|
|
81
82
|
if (variantConfig[field] === undefined) {
|
|
@@ -486,7 +487,8 @@ class PackageManager {
|
|
|
486
487
|
}
|
|
487
488
|
|
|
488
489
|
// Check 5: Each variant has required fields
|
|
489
|
-
|
|
490
|
+
// Note: 'skills' is optional (some tools only have commands)
|
|
491
|
+
const requiredFields = ['name', 'description', 'agents', 'resources', 'hooks'];
|
|
490
492
|
for (const reqVariant of requiredVariants) {
|
|
491
493
|
const variantConfig = config[reqVariant];
|
|
492
494
|
for (const field of requiredFields) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amrhas82/agentic-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.1",
|
|
4
4
|
"description": "AI development toolkit with 14 specialized agents and 20 commands. Simple one-question installer for Claude, Opencode, Ampcode, and Droid.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|