@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 +6 -7
- package/lib/detect-targets.js +18 -18
- package/package.json +1 -1
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();
|
package/lib/detect-targets.js
CHANGED
|
@@ -3,13 +3,10 @@ import { existsSync } from 'fs';
|
|
|
3
3
|
import os from 'os';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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;
|
|
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
|
-
|
|
44
|
-
|
|
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.
|
|
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",
|