@skilly-hand/skilly-hand 0.26.7 → 0.28.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 +30 -0
- package/README.md +12 -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,36 @@ All notable changes to this project are documented in this file.
|
|
|
16
16
|
### Removed
|
|
17
17
|
- _None._
|
|
18
18
|
|
|
19
|
+
## [0.28.0] - 2026-05-16
|
|
20
|
+
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.28.0)
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- Added a top-level `skills/` symlink overlay so skills.sh can discover the portable catalog directly from the GitHub repository.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- _None._
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- _None._
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
- _None._
|
|
33
|
+
|
|
34
|
+
## [0.27.0] - 2026-05-16
|
|
35
|
+
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.27.0)
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- _None._
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- Added pnpm workspace support alongside npm lockfile validation and refreshed the interactive CLI launcher on direct `@inquirer/prompts`.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
- Kept the review-rangers release gate aligned with the current interactive command discovery checks.
|
|
45
|
+
|
|
46
|
+
### Removed
|
|
47
|
+
- _None._
|
|
48
|
+
|
|
19
49
|
## [0.26.7] - 2026-05-12
|
|
20
50
|
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.26.7)
|
|
21
51
|
|
package/README.md
CHANGED
|
@@ -39,6 +39,18 @@ npx skilly-hand
|
|
|
39
39
|
`npx skilly-hand` opens an interactive prompt workflow when running in a TTY.
|
|
40
40
|
The guided home supports type-to-filter command discovery and includes a built-in Command Guide.
|
|
41
41
|
|
|
42
|
+
### Install on skills.sh
|
|
43
|
+
|
|
44
|
+
The full skill catalog is also discoverable through the [skills.sh](https://www.skills.sh/) ecosystem:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx skills add Davecelot/skilly-hand --skill '*'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Use `npx skills add Davecelot/skilly-hand --list` to inspect the available skills before installing. The `skills/` directory is a GitHub-facing overlay made of symlinks to `catalog/skills/`; it helps skills.sh discover the catalog without changing the regular `npx skilly-hand` npm package contents or CLI flow.
|
|
51
|
+
|
|
52
|
+
Windows contributors who clone the repo locally should enable symlink support before checkout, for example with `git config --global core.symlinks true`, and may also need Developer Mode or elevated symlink privileges. If the repo was already checked out without symlinks, re-check out or reclone after enabling support.
|
|
53
|
+
|
|
42
54
|
---
|
|
43
55
|
|
|
44
56
|
## Commands
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skilly-hand/skilly-hand",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.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
|
-
]
|