@skilly-hand/skilly-hand 0.26.7 → 0.27.0
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/CHANGELOG.md +15 -0
- package/package.json +6 -5
- package/packages/catalog/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/inquirer-ui.js +48 -55
- package/packages/core/package.json +1 -1
- package/packages/detectors/package.json +1 -1
- package/catalog/catalog-index.json +0 -21
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,21 @@ All notable changes to this project are documented in this file.
|
|
|
16
16
|
### Removed
|
|
17
17
|
- _None._
|
|
18
18
|
|
|
19
|
+
## [0.27.0] - 2026-05-16
|
|
20
|
+
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.27.0)
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- _None._
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- _None._
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- _None._
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
- _None._
|
|
33
|
+
|
|
19
34
|
## [0.26.7] - 2026-05-12
|
|
20
35
|
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.26.7)
|
|
21
36
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skilly-hand/skilly-hand",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"license": "CC-BY-NC-4.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"engines": {
|
|
29
29
|
"node": ">=22.0.0"
|
|
30
30
|
},
|
|
31
|
+
"packageManager": "pnpm@11.1.2",
|
|
31
32
|
"scripts": {
|
|
32
33
|
"build": "node ./scripts/build-catalog-index.mjs",
|
|
33
34
|
"catalog:check": "node ./scripts/check-catalog.mjs",
|
|
@@ -53,11 +54,11 @@
|
|
|
53
54
|
"detect": "node ./packages/cli/src/bin.js detect",
|
|
54
55
|
"list": "node ./packages/cli/src/bin.js list",
|
|
55
56
|
"doctor": "node ./packages/cli/src/bin.js doctor",
|
|
56
|
-
"site:dev": "
|
|
57
|
-
"site:build": "
|
|
58
|
-
"site:preview": "
|
|
57
|
+
"site:dev": "pnpm --filter @skilly-hand/site dev",
|
|
58
|
+
"site:build": "pnpm --filter @skilly-hand/site build",
|
|
59
|
+
"site:preview": "pnpm --filter @skilly-hand/site preview"
|
|
59
60
|
},
|
|
60
61
|
"dependencies": {
|
|
61
|
-
"inquirer": "
|
|
62
|
+
"@inquirer/prompts": "8.4.3"
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
checkbox as checkboxPrompt,
|
|
3
|
+
confirm as confirmPrompt,
|
|
4
|
+
search as searchPrompt,
|
|
5
|
+
select as selectPrompt
|
|
6
|
+
} from "@inquirer/prompts";
|
|
2
7
|
import { filterCommands, getInteractiveCommands } from "./command-registry.js";
|
|
3
8
|
|
|
4
9
|
function writeBlock(write, title, body) {
|
|
@@ -74,21 +79,25 @@ const COMMAND_HINTS = {
|
|
|
74
79
|
uninstall: "Tip: run `npx skilly-hand install` anytime to restore managed files."
|
|
75
80
|
};
|
|
76
81
|
|
|
82
|
+
const DEFAULT_PROMPT_FNS = {
|
|
83
|
+
checkbox: checkboxPrompt,
|
|
84
|
+
confirm: confirmPrompt,
|
|
85
|
+
search: searchPrompt,
|
|
86
|
+
select: selectPrompt
|
|
87
|
+
};
|
|
88
|
+
|
|
77
89
|
export function createInquirerInteractiveUi({
|
|
78
|
-
|
|
90
|
+
promptFns = {},
|
|
79
91
|
write = (value) => process.stdout.write(value)
|
|
80
92
|
} = {}) {
|
|
93
|
+
const prompts = { ...DEFAULT_PROMPT_FNS, ...promptFns };
|
|
94
|
+
|
|
81
95
|
async function confirm({ message, defaultValue = false }) {
|
|
82
96
|
try {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
message: String(message),
|
|
88
|
-
default: defaultValue
|
|
89
|
-
}
|
|
90
|
-
]);
|
|
91
|
-
return Boolean(response.confirmed);
|
|
97
|
+
return Boolean(await prompts.confirm({
|
|
98
|
+
message: String(message),
|
|
99
|
+
default: defaultValue
|
|
100
|
+
}));
|
|
92
101
|
} catch (error) {
|
|
93
102
|
if (error?.name === "ExitPromptError") return false;
|
|
94
103
|
throw error;
|
|
@@ -100,21 +109,17 @@ export function createInquirerInteractiveUi({
|
|
|
100
109
|
writeBlock(write, "Guided Home", buildGuidedHomeIntro());
|
|
101
110
|
|
|
102
111
|
while (true) {
|
|
103
|
-
const
|
|
104
|
-
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
default: "install",
|
|
115
|
-
pageSize: 10
|
|
116
|
-
}
|
|
117
|
-
]);
|
|
112
|
+
const command = await prompts.search({
|
|
113
|
+
message: `${header}: choose a command`,
|
|
114
|
+
source: async (term) =>
|
|
115
|
+
filterCommands(commands, term).map((item) => ({
|
|
116
|
+
name: commandChoiceName(item),
|
|
117
|
+
value: item.value,
|
|
118
|
+
description: `${item.bestFor} | aliases: ${(item.aliases || []).join(", ") || "none"}`
|
|
119
|
+
})),
|
|
120
|
+
default: "install",
|
|
121
|
+
pageSize: 10
|
|
122
|
+
});
|
|
118
123
|
|
|
119
124
|
if (command === "exit") return;
|
|
120
125
|
if (command === "command-guide") {
|
|
@@ -129,27 +134,19 @@ export function createInquirerInteractiveUi({
|
|
|
129
134
|
|
|
130
135
|
writeBlock(write, "Install Tips", installTipsBlock());
|
|
131
136
|
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
choices: skillChoices,
|
|
138
|
-
pageSize: 16
|
|
139
|
-
}
|
|
140
|
-
]);
|
|
137
|
+
const selectedSkillIds = await prompts.checkbox({
|
|
138
|
+
message: "Select skills to install",
|
|
139
|
+
choices: skillChoices,
|
|
140
|
+
pageSize: 16
|
|
141
|
+
});
|
|
141
142
|
|
|
142
143
|
writeBlock(write, "Assistant Target Tips", agentTipsBlock());
|
|
143
144
|
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
choices: agentChoices,
|
|
150
|
-
pageSize: 12
|
|
151
|
-
}
|
|
152
|
-
]);
|
|
145
|
+
const selectedAgents = await prompts.checkbox({
|
|
146
|
+
message: "Select assistant targets",
|
|
147
|
+
choices: agentChoices,
|
|
148
|
+
pageSize: 12
|
|
149
|
+
});
|
|
153
150
|
|
|
154
151
|
const previewBundle = await actions.previewInstallBundle({
|
|
155
152
|
selectedSkillIds,
|
|
@@ -157,17 +154,13 @@ export function createInquirerInteractiveUi({
|
|
|
157
154
|
});
|
|
158
155
|
writeBlock(write, "Install Preview", previewBundle?.text || "");
|
|
159
156
|
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
name: "
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
{ name: "Back to command menu", value: "menu" }
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
]);
|
|
157
|
+
const installDecision = await prompts.select({
|
|
158
|
+
message: "Next action (type 'apply' to install, or 'menu' to go back)",
|
|
159
|
+
choices: [
|
|
160
|
+
{ name: "Apply installation", value: "apply" },
|
|
161
|
+
{ name: "Back to command menu", value: "menu" }
|
|
162
|
+
]
|
|
163
|
+
});
|
|
171
164
|
|
|
172
165
|
if (installDecision === "apply") {
|
|
173
166
|
const applyBundle = await actions.applyInstallBundle({
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
"accessibility-audit",
|
|
3
|
-
"agents-root-orchestrator",
|
|
4
|
-
"angular-guidelines",
|
|
5
|
-
"figma-mcp-0to1",
|
|
6
|
-
"frontend-design",
|
|
7
|
-
"gsap-animation",
|
|
8
|
-
"motion-animation",
|
|
9
|
-
"output-optimizer",
|
|
10
|
-
"project-security",
|
|
11
|
-
"project-teacher",
|
|
12
|
-
"prompt-engineering",
|
|
13
|
-
"react-guidelines",
|
|
14
|
-
"review-rangers",
|
|
15
|
-
"roaster",
|
|
16
|
-
"skill-creator",
|
|
17
|
-
"spec-driven-development",
|
|
18
|
-
"test-driven-development",
|
|
19
|
-
"token-optimizer",
|
|
20
|
-
"user-story-crafting"
|
|
21
|
-
]
|