@powerbuilder/skill 1.0.5 → 1.0.6

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/lib/banner.js CHANGED
@@ -4,15 +4,14 @@ export function printBanner() {
4
4
  const cyan = chalk.cyanBright.bold;
5
5
  const yellow = chalk.yellowBright.bold;
6
6
  const dim = chalk.dim;
7
- const green = chalk.greenBright;
8
7
 
9
8
  console.log();
10
- console.log(cyan(' ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ ██████╗ ██╗ ██╗██╗██╗ ██████╗ ███████╗██████╗ '));
11
- console.log(cyan(' ██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔══██╗██║ ██║██║██║ ██╔══██╗██╔════╝██╔══██╗'));
12
- console.log(cyan(' ██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝██████╔╝██║ ██║██║██║ ██║ ██║█████╗ ██████╔╝'));
13
- console.log(cyan(' ██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗██╔══██╗██║ ██║██║██║ ██║ ██║██╔══╝ ██╔══██╗'));
14
- console.log(cyan(' ██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║██████╔╝╚██████╔╝██║███████╗██████╔╝███████╗██║ ██║'));
15
- console.log(cyan(' ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═╝'));
9
+ console.log(cyan(' ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ ██████╗ ██╗ ██╗██╗██╗ ██████╗ ███████╗██████╗ '));
10
+ console.log(cyan(' ██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗ ██╔══██╗██║ ██║██║██║ ██╔══██╗██╔════╝██╔══██╗'));
11
+ console.log(cyan(' ██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝ ██████╔╝██║ ██║██║██║ ██║ ██║█████╗ ██████╔╝'));
12
+ console.log(cyan(' ██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗ ██╔══██╗██║ ██║██║██║ ██║ ██║██╔══╝ ██╔══██╗'));
13
+ console.log(cyan(' ██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║ ██████╔╝╚██████╔╝██║███████╗██████╔╝███████╗██║ ██║'));
14
+ console.log(cyan(' ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═╝'));
16
15
  console.log();
17
16
  console.log(' ' + yellow('⚡ Power Apps Code App Skill') + dim(' · by TuongDoan · © 2026'));
18
17
  console.log();
@@ -3,13 +3,10 @@ import { existsSync } from 'fs';
3
3
  import os from 'os';
4
4
 
5
5
  /**
6
- * Search for supported AI agent root folders starting from cwd up to home dir.
7
- * Returns an array of { target, agentFolder, dir } objects for each found target.
8
- *
9
- * Supported targets:
10
- * - .cursor → skills go into <target>/.cursor/rules/ (or just .cursor/skills/)
11
- * - .claude → skills go into <target>/.claude/skills/
12
- * - .gemini → skills go into <target>/.gemini/antigravity/skills/
6
+ * Detect where to install skills:
7
+ * - .cursor → optional: skip if folder doesn't exist
8
+ * - .gemini → optional: skip if folder doesn't exist
9
+ * - .claude → always: create ~/.claude if it doesn't exist
13
10
  */
14
11
  export function detectTargets(startDir = process.cwd()) {
15
12
  const home = os.homedir();
@@ -22,15 +19,15 @@ export function detectTargets(startDir = process.cwd()) {
22
19
  dirs.push(current);
23
20
  if (current === home) break;
24
21
  const parent = path.dirname(current);
25
- if (parent === current) break; // filesystem root
22
+ if (parent === current) break;
26
23
  current = parent;
27
24
  }
28
25
 
29
26
  for (const dir of dirs) {
30
27
  const cursorDir = path.join(dir, '.cursor');
31
- const claudeDir = path.join(dir, '.claude');
32
28
  const geminiDir = path.join(dir, '.gemini');
33
29
 
30
+ // .cursor — optional: only add if the folder already exists
34
31
  if (existsSync(cursorDir)) {
35
32
  targets.push({
36
33
  target: '.cursor',
@@ -40,15 +37,8 @@ export function detectTargets(startDir = process.cwd()) {
40
37
  dir,
41
38
  });
42
39
  }
43
- if (existsSync(claudeDir)) {
44
- targets.push({
45
- target: '.claude',
46
- label: 'Claude',
47
- agentFolder: claudeDir,
48
- skillsDir: path.join(claudeDir, 'skills'),
49
- dir,
50
- });
51
- }
40
+
41
+ // .gemini — optional: only add if the folder already exists
52
42
  if (existsSync(geminiDir)) {
53
43
  targets.push({
54
44
  target: '.gemini',
@@ -60,6 +50,16 @@ export function detectTargets(startDir = process.cwd()) {
60
50
  }
61
51
  }
62
52
 
53
+ // .claude — always install to home dir; folder will be created if missing
54
+ const claudeDir = path.join(home, '.claude');
55
+ targets.push({
56
+ target: '.claude',
57
+ label: 'Claude',
58
+ agentFolder: claudeDir,
59
+ skillsDir: path.join(claudeDir, 'skills'),
60
+ dir: home,
61
+ });
62
+
63
63
  // Deduplicate by agentFolder
64
64
  const seen = new Set();
65
65
  return targets.filter(t => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerbuilder/skill",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "PowerBuilder skill installer — drop production-ready AI agent skills into .cursor, .claude, or .gemini folders with one command.",
5
5
  "author": "TuongDoan",
6
6
  "license": "MIT",