@neyugn/agent-kits 0.1.0 → 0.2.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/README.md CHANGED
@@ -68,24 +68,29 @@ npx @neyugn/agent-kits
68
68
  ```
69
69
 
70
70
  ```
71
- ╔═══════════════════════════════════════════════════════════════╗
72
- ║ █████╗ ██████╗ ███████╗███╗ ██╗████████╗ ║
73
- ║ ██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝ ║
74
- ║ ███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ║
75
- ║ ██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ║
76
- ║ ██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ║
77
- ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ K I T S ║
78
- ╚═══════════════════════════════════════════════════════════════╝
79
-
80
- Which AI tool are you using?
71
+ ╭──────────────────────────────────────────────────────────────────────────╮
72
+ │ │
73
+ │ _ ____ _____ _ _ _____ _ __ ___ _____ ____ │
74
+ │ / \ / ___|| ____|| \ | ||_ _| | |/ /|_ _||_ _|/ ___| │
75
+ │ / _ \ | | _ | _| | \| | | | | ' / | | | | \___ \ │
76
+ │ / ___ \| |_| || |___ | |\ | | | | . \ | | | | ___) | │
77
+ /_/ \_\\____||_____||_| \_| |_| |_|\_\|___| |_| |____/ │
78
+ │ │
79
+ │ ⚡ The Universal AI Agent Toolkit ⚡ │
80
+ │ │
81
+ ╰──────────────────────────────────────────────────────────────────────────╯
82
+
83
+ SETUP WIZARD
84
+
85
+ ◆ 🤖 Which AI assistant are you using?
81
86
  │ ○ Claude Code (.claude/)
82
87
  │ ● Gemini CLI (.gemini/)
83
88
  │ ○ Cursor (.cursor/)
84
89
  │ ○ Custom...
85
90
 
86
- ◆ Where do you want to install?
87
- │ ● 📁 Workspace (Current Project)
88
- │ ○ 🌍 Global (All Projects)
91
+ 📂 Where should we install?
92
+ │ ● Workspace (Project)
93
+ │ ○ Global (System)
89
94
  ```
90
95
 
91
96
  ### 🌍 Global vs Workspace Installation
@@ -131,11 +136,11 @@ If the installer detects an existing installation, you'll be prompted:
131
136
 
132
137
  Works on **Windows**, **macOS**, and **Linux** with automatic path adaptation:
133
138
 
134
- | Platform | Example Global Path |
135
- | -------- | -------------------------- |
136
- | Windows | `C:\Users\darien\.claude\` |
137
- | macOS | `/Users/darien/.claude/` |
138
- | Linux | `/home/darien/.claude/` |
139
+ | Platform | Example Global Path |
140
+ | -------- | ---------------------------- |
141
+ | Windows | `C:\Users\username\.claude\` |
142
+ | macOS | `/Users/username/.claude/` |
143
+ | Linux | `/home/username/.claude/` |
139
144
 
140
145
  <br/>
141
146
 
package/README.vi.md CHANGED
@@ -60,24 +60,29 @@ npx @neyugn/agent-kits
60
60
  ```
61
61
 
62
62
  ```
63
- ╔═══════════════════════════════════════════════════════════════╗
64
- ║ █████╗ ██████╗ ███████╗███╗ ██╗████████╗ ║
65
- ║ ██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝ ║
66
- ║ ███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ║
67
- ║ ██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ║
68
- ║ ██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ║
69
- ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ K I T S ║
70
- ╚═══════════════════════════════════════════════════════════════╝
71
-
72
- Bạn đang sử dụng công cụ AI nào?
63
+ ╭──────────────────────────────────────────────────────────────────────────╮
64
+ │ │
65
+ │ _ ____ _____ _ _ _____ _ __ ___ _____ ____ │
66
+ │ / \ / ___|| ____|| \ | ||_ _| | |/ /|_ _||_ _|/ ___| │
67
+ │ / _ \ | | _ | _| | \| | | | | ' / | | | | \___ \ │
68
+ │ / ___ \| |_| || |___ | |\ | | | | . \ | | | | ___) | │
69
+ /_/ \_\\____||_____||_| \_| |_| |_|\_\|___| |_| |____/ │
70
+ │ │
71
+ │ ⚡ The Universal AI Agent Toolkit ⚡ │
72
+ │ │
73
+ ╰──────────────────────────────────────────────────────────────────────────╯
74
+
75
+ SETUP WIZARD
76
+
77
+ ◆ 🤖 Bạn đang sử dụng công cụ AI nào?
73
78
  │ ○ Claude Code (.claude/)
74
79
  │ ● Gemini CLI (.gemini/)
75
80
  │ ○ Cursor (.cursor/)
76
81
  │ ○ Tùy chỉnh...
77
82
 
78
- ◆ Bạn muốn cài đặt ở đâu?
79
- │ ● 📁 Workspace (Dự án hiện tại)
80
- │ ○ 🌍 Global (Tất cả dự án)
83
+ 📂 Bạn muốn cài đặt ở đâu?
84
+ │ ● Workspace (Dự án hiện tại)
85
+ │ ○ Global (Tất cả dự án)
81
86
  ```
82
87
 
83
88
  ### 🌍 Global vs Workspace
@@ -123,11 +128,11 @@ Nếu installer phát hiện cài đặt đã tồn tại, bạn sẽ được h
123
128
 
124
129
  Hoạt động trên **Windows**, **macOS**, và **Linux** với đường dẫn được tự động điều chỉnh:
125
130
 
126
- | Nền tảng | Đường dẫn Global ví dụ |
127
- | -------- | -------------------------- |
128
- | Windows | `C:\Users\darien\.claude\` |
129
- | macOS | `/Users/darien/.claude/` |
130
- | Linux | `/home/darien/.claude/` |
131
+ | Nền tảng | Đường dẫn Global ví dụ |
132
+ | -------- | ---------------------------- |
133
+ | Windows | `C:\Users\username\.claude\` |
134
+ | macOS | `/Users/username/.claude/` |
135
+ | Linux | `/home/username/.claude/` |
131
136
 
132
137
  <br/>
133
138
 
package/README.zh.md CHANGED
@@ -60,24 +60,29 @@ npx @neyugn/agent-kits
60
60
  ```
61
61
 
62
62
  ```
63
- ╔═══════════════════════════════════════════════════════════════╗
64
- ║ █████╗ ██████╗ ███████╗███╗ ██╗████████╗ ║
65
- ║ ██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝ ║
66
- ║ ███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ║
67
- ║ ██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ║
68
- ║ ██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ║
69
- ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ K I T S ║
70
- ╚═══════════════════════════════════════════════════════════════╝
71
-
72
- 您正在使用哪个 AI 工具?
63
+ ╭──────────────────────────────────────────────────────────────────────────╮
64
+ │ │
65
+ │ _ ____ _____ _ _ _____ _ __ ___ _____ ____ │
66
+ │ / \ / ___|| ____|| \ | ||_ _| | |/ /|_ _||_ _|/ ___| │
67
+ │ / _ \ | | _ | _| | \| | | | | ' / | | | | \___ \ │
68
+ │ / ___ \| |_| || |___ | |\ | | | | . \ | | | | ___) | │
69
+ /_/ \_\\____||_____||_| \_| |_| |_|\_\|___| |_| |____/ │
70
+ │ │
71
+ │ ⚡ The Universal AI Agent Toolkit ⚡ │
72
+ │ │
73
+ ╰──────────────────────────────────────────────────────────────────────────╯
74
+
75
+ SETUP WIZARD
76
+
77
+ ◆ 🤖 您正在使用哪个 AI 工具?
73
78
  │ ○ Claude Code (.claude/)
74
79
  │ ● Gemini CLI (.gemini/)
75
80
  │ ○ Cursor (.cursor/)
76
81
  │ ○ 自定义...
77
82
 
78
- ◆ 您想安装在哪里?
79
- │ ● 📁 Workspace(当前项目)
80
- │ ○ 🌍 Global(所有项目)
83
+ 📂 您想安装在哪里?
84
+ │ ● Workspace(当前项目)
85
+ │ ○ Global(所有项目)
81
86
  ```
82
87
 
83
88
  ### 🌍 Global vs Workspace 安装
@@ -123,11 +128,11 @@ npx @neyugn/agent-kits
123
128
 
124
129
  支持 **Windows**、**macOS** 和 **Linux**,路径自动适配:
125
130
 
126
- | 平台 | Global 路径示例 |
127
- | ------- | -------------------------- |
128
- | Windows | `C:\Users\darien\.claude\` |
129
- | macOS | `/Users/darien/.claude/` |
130
- | Linux | `/home/darien/.claude/` |
131
+ | 平台 | Global 路径示例 |
132
+ | ------- | ---------------------------- |
133
+ | Windows | `C:\Users\username\.claude\` |
134
+ | macOS | `/Users/username/.claude/` |
135
+ | Linux | `/home/username/.claude/` |
131
136
 
132
137
  <br/>
133
138
 
package/dist/cli.js CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  // src/cli.ts
4
4
  import * as p from "@clack/prompts";
5
+ import boxen from "boxen";
6
+ import figlet from "figlet";
5
7
  import fs2 from "fs";
8
+ import gradient from "gradient-string";
6
9
  import os2 from "os";
7
10
  import path3 from "path";
8
11
  import pc from "picocolors";
@@ -126,8 +129,8 @@ import fs from "fs/promises";
126
129
  import path2 from "path";
127
130
  import { fileURLToPath } from "url";
128
131
  var __dirname = path2.dirname(fileURLToPath(import.meta.url));
129
- var KITS_DIR = path2.resolve(__dirname, "../../kits");
130
- var COMMON_DIR = path2.resolve(__dirname, "../../common");
132
+ var KITS_DIR = path2.resolve(__dirname, "../kits");
133
+ var COMMON_DIR = path2.resolve(__dirname, "../common");
131
134
  async function installKit(options) {
132
135
  const { aiTool, kits, targetPath } = options;
133
136
  const results = [];
@@ -240,61 +243,69 @@ function getDisplayPath(absolutePath) {
240
243
  }
241
244
  return absolutePath;
242
245
  }
243
- async function main() {
246
+ function displayBanner() {
244
247
  console.clear();
248
+ const text2 = figlet.textSync("AGENT KITS", {
249
+ font: "Standard",
250
+ horizontalLayout: "fitted"
251
+ });
252
+ const title = gradient.passion(text2);
245
253
  console.log(
246
- pc.cyan(`
247
- \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
248
- \u2551 \u2551
249
- \u2551 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2551
250
- \u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D \u2551
251
- \u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2551
252
- \u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2551
253
- \u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2551
254
- \u2551 \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u2551
255
- \u2551 ${pc.bold("K I T S")} \u2551
256
- \u2551 \u2551
257
- \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
258
- `)
254
+ boxen(title, {
255
+ padding: 1,
256
+ margin: 1,
257
+ borderStyle: "round",
258
+ borderColor: "cyan",
259
+ float: "center"
260
+ })
259
261
  );
260
- p.intro(pc.bgCyan(pc.black(" Universal AI Agent Toolkit ")));
262
+ console.log(
263
+ gradient.morning.multiline(
264
+ " \u26A1 The Universal AI Agent Toolkit \u26A1 "
265
+ )
266
+ );
267
+ console.log("");
268
+ }
269
+ async function main() {
270
+ displayBanner();
271
+ p.intro(pc.bgCyan(pc.black(" SETUP WIZARD ")));
261
272
  const aiToolResult = await p.select({
262
- message: "Which AI tool are you using?",
273
+ message: "\u{1F916} Which AI assistant are you using?",
263
274
  options: AI_TOOLS.map((tool) => ({
264
275
  value: tool.id,
265
- label: `${tool.icon} ${tool.name}`,
266
- hint: `workspace: ${tool.path} | global: ${getGlobalPathDisplay(tool)}`
276
+ label: `${tool.name}`,
277
+ hint: `${getGlobalPathDisplay(tool)}`
267
278
  }))
268
279
  });
269
280
  if (p.isCancel(aiToolResult)) {
270
- p.cancel("Installation cancelled.");
281
+ p.cancel("Operation cancelled.");
271
282
  process.exit(0);
272
283
  }
273
284
  const aiTool = AI_TOOLS.find((t) => t.id === aiToolResult);
274
285
  const scopeResult = await p.select({
275
- message: "Where do you want to install?",
286
+ message: "\u{1F4C2} Where should we install?",
276
287
  options: [
277
288
  {
278
289
  value: "workspace",
279
- label: "\u{1F4C1} Workspace (Current Project)",
280
- hint: `Install to ${path3.join(process.cwd(), aiTool.path)}`
290
+ label: "Workspace (Project)",
291
+ hint: `Best for sharing with team (${path3.join(process.cwd(), aiTool.path)})`
281
292
  },
282
293
  {
283
294
  value: "global",
284
- label: "\u{1F30D} Global (All Projects)",
285
- hint: `Install to ${getGlobalPathDisplay(aiTool)}`
295
+ label: "Global (System)",
296
+ hint: `Best for personal use across projects (${getGlobalPathDisplay(aiTool)})`
286
297
  }
287
298
  ]
288
299
  });
289
300
  if (p.isCancel(scopeResult)) {
290
- p.cancel("Installation cancelled.");
301
+ p.cancel("Operation cancelled.");
291
302
  process.exit(0);
292
303
  }
293
304
  const scope = scopeResult;
294
305
  let workspacePath = process.cwd();
295
306
  if (scope === "workspace") {
296
307
  const pathResult = await p.text({
297
- message: "Workspace path:",
308
+ message: "\u{1F4CD} Confirm workspace path:",
298
309
  placeholder: process.cwd(),
299
310
  defaultValue: process.cwd(),
300
311
  validate: (value) => {
@@ -306,7 +317,7 @@ async function main() {
306
317
  }
307
318
  });
308
319
  if (p.isCancel(pathResult)) {
309
- p.cancel("Installation cancelled.");
320
+ p.cancel("Operation cancelled.");
310
321
  process.exit(0);
311
322
  }
312
323
  workspacePath = expandPath(pathResult);
@@ -315,48 +326,50 @@ async function main() {
315
326
  const rulesFilePath = scope === "global" ? path3.join(os2.homedir(), aiTool.rulesFile) : path3.join(workspacePath, aiTool.rulesFile);
316
327
  if (directoryExists(finalInstallPath)) {
317
328
  p.log.warn(
318
- `${pc.yellow("\u26A0")} Existing installation detected at: ${pc.cyan(getDisplayPath(finalInstallPath))}`
329
+ `${pc.yellow("\u26A0")} Existing toolkit found at: ${pc.cyan(getDisplayPath(finalInstallPath))}`
319
330
  );
320
331
  const replaceResult = await p.select({
321
- message: "What would you like to do?",
332
+ message: "How should we proceed?",
322
333
  options: [
323
334
  {
324
335
  value: "replace",
325
- label: "\u{1F504} Replace",
326
- hint: "Remove existing and install fresh"
336
+ label: "\u{1F680} Replace",
337
+ hint: "Fresh install (Recommended)"
327
338
  },
328
339
  {
329
340
  value: "merge",
330
- label: "\u{1F500} Merge",
331
- hint: "Keep config files, update skills only"
341
+ label: "\u{1F504} Merge",
342
+ hint: "Update skills, keep configs"
332
343
  },
333
344
  {
334
345
  value: "skip",
335
346
  label: "\u23ED\uFE0F Skip",
336
- hint: "Keep existing, don't install"
347
+ hint: "Don't install files"
337
348
  },
338
349
  {
339
350
  value: "cancel",
340
351
  label: "\u274C Cancel",
341
- hint: "Exit installer"
352
+ hint: "Exit setup"
342
353
  }
343
354
  ]
344
355
  });
345
356
  if (p.isCancel(replaceResult) || replaceResult === "cancel") {
346
- p.cancel("Installation cancelled.");
357
+ p.cancel("Operation cancelled.");
347
358
  process.exit(0);
348
359
  }
349
360
  if (replaceResult === "skip") {
350
- p.log.info("Skipping installation. Existing files preserved.");
361
+ p.log.info("Skipping installation. Have a nice day! \u{1F44B}");
351
362
  process.exit(0);
352
363
  }
353
364
  if (replaceResult === "replace") {
354
- p.log.step(`Removing existing installation...`);
365
+ const s_rm = p.spinner();
366
+ s_rm.start("Cleaning up old files...");
355
367
  fs2.rmSync(finalInstallPath, { recursive: true, force: true });
368
+ s_rm.stop("Cleanup complete.");
356
369
  }
357
370
  }
358
371
  const selectedKits = await p.multiselect({
359
- message: "Select kits to install:",
372
+ message: "\u{1F4E6} Select kits to include:",
360
373
  options: KITS.filter((kit) => kit.available).map((kit) => ({
361
374
  value: kit.id,
362
375
  label: `${kit.icon} ${kit.name}`,
@@ -365,28 +378,34 @@ async function main() {
365
378
  required: true
366
379
  });
367
380
  if (p.isCancel(selectedKits)) {
368
- p.cancel("Installation cancelled.");
381
+ p.cancel("Operation cancelled.");
369
382
  process.exit(0);
370
383
  }
371
384
  const displayInstallPath = getDisplayPath(finalInstallPath);
372
- const displayRulesPath = getDisplayPath(rulesFilePath);
373
- const summaryLines = [
374
- `${pc.bold("AI Tool:")} ${aiTool.icon} ${aiTool.name}`,
375
- `${pc.bold("Scope:")} ${scope === "global" ? "\u{1F30D} Global" : "\u{1F4C1} Workspace"}`,
376
- `${pc.bold("Install Path:")} ${pc.cyan(displayInstallPath)}`,
377
- `${pc.bold("Rules File:")} ${pc.cyan(displayRulesPath)}`,
378
- `${pc.bold("Kits:")} ${selectedKits.join(", ")}`
379
- ];
380
- p.note(summaryLines.join("\n"), "Installation Summary");
385
+ console.log("");
386
+ console.log(
387
+ boxen(
388
+ [
389
+ `${pc.cyan(pc.bold("TARGET SUMMARY"))}`,
390
+ "",
391
+ `${pc.dim("Tool:")} ${aiTool.name}`,
392
+ `${pc.dim("Scope:")} ${scope === "global" ? "Global" : "Workspace"}`,
393
+ `${pc.dim("Path:")} ${displayInstallPath}`,
394
+ `${pc.dim("Kits:")} ${selectedKits.join(", ")}`
395
+ ].join("\n"),
396
+ { padding: 1, borderStyle: "single", borderColor: "dim" }
397
+ )
398
+ );
399
+ console.log("");
381
400
  const confirmed = await p.confirm({
382
- message: `Proceed with installation?`
401
+ message: `Ready to install?`
383
402
  });
384
403
  if (p.isCancel(confirmed) || !confirmed) {
385
- p.cancel("Installation cancelled.");
404
+ p.cancel("Operation cancelled.");
386
405
  process.exit(0);
387
406
  }
388
407
  const s = p.spinner();
389
- s.start(`Installing to ${pc.cyan(displayInstallPath)}...`);
408
+ s.start(`Installing \u2728 magic...`);
390
409
  try {
391
410
  const results = await installKit({
392
411
  aiTool,
@@ -394,27 +413,35 @@ async function main() {
394
413
  targetPath: scope === "global" ? os2.homedir() : workspacePath,
395
414
  scope
396
415
  });
397
- s.stop("Installation complete!");
398
- p.note(
399
- [
400
- `${pc.bold("\u{1F4CD} Location:")} ${displayInstallPath}`,
401
- `${pc.bold("\u{1F4DC} Rules:")} ${displayRulesPath}`,
402
- "",
403
- ...results.map(
404
- (r) => `${pc.green("\u2713")} ${r.kit}: ${r.agents} agents, ${r.skills} skills, ${r.workflows} workflows`
405
- )
406
- ].join("\n"),
407
- "Installed Successfully"
408
- );
409
- const archPath = scope === "global" ? `${getGlobalPathDisplay(aiTool)}/ARCHITECTURE.md` : `${aiTool.path}/ARCHITECTURE.md`;
410
- p.outro(
411
- pc.green("Success! ") + pc.dim("Next steps:\n") + ` ${pc.cyan("\u2022")} Use ${pc.bold("/filter")} to optimize skills for your project
412
- ${pc.cyan("\u2022")} Use ${pc.bold("/plan")} to create project plans
413
- ${pc.cyan("\u2022")} Use ${pc.bold("@backend-specialist")} for APIs
414
- ${pc.cyan("\u2022")} Read ${pc.bold(archPath)}`
416
+ const isGlobal = scope === "global";
417
+ const rulesFile = isGlobal ? path3.join(os2.homedir(), aiTool.rulesFile) : path3.join(workspacePath, aiTool.rulesFile);
418
+ s.stop("Installation complete! \u{1F389}");
419
+ console.log("");
420
+ console.log(
421
+ boxen(
422
+ [
423
+ gradient.morning("Successfully Installed Agent Kits!"),
424
+ "",
425
+ `${pc.green("\u2714")} Core System Ready`,
426
+ `${pc.green("\u2714")} ${results.reduce((acc, r) => acc + r.skills, 0)} Skills Active`,
427
+ `${pc.green("\u2714")} Agents Deployed`,
428
+ "",
429
+ pc.bold("\u{1F449} NEXT STEPS:"),
430
+ `1. Open ${pc.cyan(getDisplayPath(rulesFile))}`,
431
+ `2. Read the instructions`,
432
+ `3. Type ${pc.magenta("/plan")} or ${pc.magenta("/create")} to start`
433
+ ].join("\n"),
434
+ {
435
+ padding: 1,
436
+ margin: 1,
437
+ borderStyle: "round",
438
+ borderColor: "green"
439
+ }
440
+ )
415
441
  );
442
+ p.outro(`Thank you for using Agent Kits. Happy coding! \u{1F680}`);
416
443
  } catch (error) {
417
- s.stop("Installation failed!");
444
+ s.stop("Installation failed.");
418
445
  p.log.error(error instanceof Error ? error.message : "Unknown error");
419
446
  process.exit(1);
420
447
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neyugn/agent-kits",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Universal AI Agent Toolkit - Skills, Agents, and Workflows for any AI coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,9 +34,14 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@clack/prompts": "^0.10.0",
37
+ "boxen": "^8.0.1",
38
+ "figlet": "^1.10.0",
39
+ "gradient-string": "^3.0.0",
37
40
  "picocolors": "^1.1.1"
38
41
  },
39
42
  "devDependencies": {
43
+ "@types/figlet": "^1.7.0",
44
+ "@types/gradient-string": "^1.1.6",
40
45
  "@types/node": "^22.0.0",
41
46
  "tsup": "^8.0.0",
42
47
  "tsx": "^4.0.0",