@tydung26/product-kit 1.0.1 → 1.2.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/README.md +10 -10
- package/dist/commands/add/index.d.ts +3 -0
- package/dist/commands/add/index.d.ts.map +1 -0
- package/dist/commands/add/index.js +39 -0
- package/dist/commands/add/index.js.map +1 -0
- package/dist/commands/install/index.d.ts.map +1 -1
- package/dist/commands/install/index.js +19 -6
- package/dist/commands/install/index.js.map +1 -1
- package/dist/commands/list/index.d.ts.map +1 -1
- package/dist/commands/list/index.js +1 -0
- package/dist/commands/list/index.js.map +1 -1
- package/dist/commands/remove/index.d.ts.map +1 -1
- package/dist/commands/remove/index.js +7 -1
- package/dist/commands/remove/index.js.map +1 -1
- package/dist/commands/update/index.d.ts.map +1 -1
- package/dist/commands/update/index.js +1 -0
- package/dist/commands/update/index.js.map +1 -1
- package/dist/domains/ui/prompts.d.ts +2 -1
- package/dist/domains/ui/prompts.d.ts.map +1 -1
- package/dist/domains/ui/prompts.js +30 -6
- package/dist/domains/ui/prompts.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -23,19 +23,19 @@ pkit doctor # Diagnose installation issues
|
|
|
23
23
|
|
|
24
24
|
## Commands
|
|
25
25
|
|
|
26
|
-
| Slash Command
|
|
27
|
-
|
|
28
|
-
| `/pkit:discover`
|
|
29
|
-
| `/pkit:market-intel`
|
|
30
|
-
| `/pkit:roadmap`
|
|
31
|
-
| `/pkit:product-design` | PRD → brand guideline → wireframes → polished design
|
|
26
|
+
| Slash Command | Purpose |
|
|
27
|
+
| ---------------------- | ------------------------------------------------------------------ |
|
|
28
|
+
| `/pkit:discover` | Discovery → customer slicing → clustered ideas → top picks |
|
|
29
|
+
| `/pkit:market-intel` | Competitor profiles → feature matrix → whitespace → strategic recs |
|
|
30
|
+
| `/pkit:roadmap` | NOW/NEXT/LATER table → risk register → exec narrative |
|
|
31
|
+
| `/pkit:product-design` | PRD → brand guideline → wireframes → polished design |
|
|
32
32
|
|
|
33
33
|
## Install Paths
|
|
34
34
|
|
|
35
|
-
| Tool
|
|
36
|
-
|
|
37
|
-
| Claude Code + OpenCode | `~/.claude/skills/`
|
|
38
|
-
| Antigravity
|
|
35
|
+
| Tool | Global path |
|
|
36
|
+
| ---------------------- | ------------------------------- |
|
|
37
|
+
| Claude Code + OpenCode | `~/.claude/skills/` |
|
|
38
|
+
| Antigravity | `~/.gemini/antigravity/skills/` |
|
|
39
39
|
|
|
40
40
|
## License
|
|
41
41
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAW/B,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,QAkCnC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAdd = registerAdd;
|
|
4
|
+
const skills_1 = require("../../domains/skills");
|
|
5
|
+
const installation_1 = require("../../domains/installation");
|
|
6
|
+
const prompts_1 = require("../../domains/ui/prompts");
|
|
7
|
+
function registerAdd(cli) {
|
|
8
|
+
cli
|
|
9
|
+
.command('add [...skills]', 'Add specific skills (skips init setup)')
|
|
10
|
+
.option('--tool <tool>', 'Target tool (default: claude)')
|
|
11
|
+
.option('--scope <scope>', 'Scope (default: global)')
|
|
12
|
+
.action(async (skills, opts) => {
|
|
13
|
+
(0, prompts_1.intro)('pkit — add skills');
|
|
14
|
+
const tool = opts.tool ?? 'claude';
|
|
15
|
+
// Ask scope if not provided via flag
|
|
16
|
+
let scope = opts.scope;
|
|
17
|
+
if (!scope) {
|
|
18
|
+
scope = await (0, prompts_1.promptScopeSelection)() ?? undefined;
|
|
19
|
+
if (!scope)
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// If no skills named, show picker
|
|
23
|
+
let skillNames = skills;
|
|
24
|
+
if (skillNames.length === 0) {
|
|
25
|
+
const available = (0, skills_1.loadAvailableSkills)().map(s => s.name);
|
|
26
|
+
const selected = await (0, prompts_1.promptSkillSelection)(available);
|
|
27
|
+
if (!selected)
|
|
28
|
+
return;
|
|
29
|
+
skillNames = selected;
|
|
30
|
+
}
|
|
31
|
+
await (0, installation_1.installSkills)(skillNames, {
|
|
32
|
+
tools: tool,
|
|
33
|
+
scope: scope,
|
|
34
|
+
force: true,
|
|
35
|
+
});
|
|
36
|
+
(0, prompts_1.outro)('Done!');
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":";;AAWA,kCAkCC;AA5CD,iDAA2D;AAC3D,6DAA2D;AAC3D,sDAAoG;AAQpG,SAAgB,WAAW,CAAC,GAAQ;IAClC,GAAG;SACA,OAAO,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACpE,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAa,EAAE,EAAE;QAChD,IAAA,eAAK,EAAC,mBAAmB,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;QAEnC,qCAAqC;QACrC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,IAAA,8BAAoB,GAAE,IAAI,SAAS,CAAC;YAClD,IAAI,CAAC,KAAK;gBAAE,OAAO;QACrB,CAAC;QAED,kCAAkC;QAClC,IAAI,UAAU,GAAG,MAAM,CAAC;QACxB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAA,4BAAmB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAoB,EAAC,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;QAED,MAAM,IAAA,4BAAa,EAAC,UAAU,EAAE;YAC9B,KAAK,EAAE,IAAgB;YACvB,KAAK,EAAE,KAAqB;YAC5B,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAa/B,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,QAuDvC"}
|
|
@@ -7,17 +7,18 @@ const prompts_1 = require("../../domains/ui/prompts");
|
|
|
7
7
|
function registerInstall(cli) {
|
|
8
8
|
cli
|
|
9
9
|
.command('init [...skills]', 'Install PM commands to AI coding tools')
|
|
10
|
+
.alias('i')
|
|
10
11
|
.option('--tool <tool>', 'Target tool: claude, antigravity, opencode, all')
|
|
11
|
-
.option('--scope <scope>', 'Scope: global or project'
|
|
12
|
+
.option('--scope <scope>', 'Scope: global or project')
|
|
12
13
|
.option('--force', 'Overwrite existing installations')
|
|
13
|
-
.option('-y, --yes', 'Skip interactive prompts (installs all skills to
|
|
14
|
+
.option('-y, --yes', 'Skip interactive prompts (installs all skills to claude, global)')
|
|
14
15
|
.action(async (skills, opts) => {
|
|
15
16
|
(0, prompts_1.intro)('pkit — PM skills installer');
|
|
16
|
-
//
|
|
17
|
+
// Step 1: Which AI tool?
|
|
17
18
|
let tool = opts.tool;
|
|
18
19
|
if (!tool) {
|
|
19
20
|
if (opts.yes) {
|
|
20
|
-
tool = '
|
|
21
|
+
tool = 'claude';
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
24
|
tool = await (0, prompts_1.promptToolSelection)() ?? undefined;
|
|
@@ -25,7 +26,7 @@ function registerInstall(cli) {
|
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
|
-
//
|
|
29
|
+
// Step 2: Which skills?
|
|
29
30
|
let skillNames = skills;
|
|
30
31
|
if (skillNames.length === 0) {
|
|
31
32
|
const available = (0, skills_1.loadAvailableSkills)().map(s => s.name);
|
|
@@ -39,9 +40,21 @@ function registerInstall(cli) {
|
|
|
39
40
|
skillNames = selected;
|
|
40
41
|
}
|
|
41
42
|
}
|
|
43
|
+
// Step 3: Global or project scope?
|
|
44
|
+
let scope = opts.scope;
|
|
45
|
+
if (!scope) {
|
|
46
|
+
if (opts.yes) {
|
|
47
|
+
scope = 'global';
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
scope = await (0, prompts_1.promptScopeSelection)() ?? undefined;
|
|
51
|
+
if (!scope)
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
42
55
|
await (0, installation_1.installSkills)(skillNames, {
|
|
43
56
|
tools: tool,
|
|
44
|
-
scope:
|
|
57
|
+
scope: scope,
|
|
45
58
|
force: opts.force,
|
|
46
59
|
yes: opts.yes,
|
|
47
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":";;AAaA,0CAuDC;AAnED,iDAA2D;AAC3D,6DAA2D;AAC3D,sDAAyH;AAUzH,SAAgB,eAAe,CAAC,GAAQ;IACtC,GAAG;SACA,OAAO,CAAC,kBAAkB,EAAE,wCAAwC,CAAC;SACrE,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,eAAe,EAAE,iDAAiD,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACrD,MAAM,CAAC,WAAW,EAAE,kEAAkE,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAiB,EAAE,EAAE;QACpD,IAAA,eAAK,EAAC,4BAA4B,CAAC,CAAC;QAEpC,yBAAyB;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,IAAA,6BAAmB,GAAE,IAAI,SAAS,CAAC;gBAChD,IAAI,CAAC,IAAI;oBAAE,OAAO;YACpB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,UAAU,GAAG,MAAM,CAAC;QACxB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAA,4BAAmB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,UAAU,GAAG,SAAS,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAoB,EAAC,SAAS,CAAC,CAAC;gBACvD,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBACtB,UAAU,GAAG,QAAQ,CAAC;YACxB,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,KAAK,GAAG,QAAQ,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,MAAM,IAAA,8BAAoB,GAAE,IAAI,SAAS,CAAC;gBAClD,IAAI,CAAC,KAAK;oBAAE,OAAO;YACrB,CAAC;QACH,CAAC;QAED,MAAM,IAAA,4BAAa,EAAC,UAAU,EAAE;YAC9B,KAAK,EAAE,IAAgB;YACvB,KAAK,EAAE,KAAqB;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,IAAA,eAAK,EAAC,kEAAkE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/list/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK/B,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/list/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK/B,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,QAoBpC"}
|
|
@@ -7,6 +7,7 @@ const logger_1 = require("../../shared/logger");
|
|
|
7
7
|
function registerList(cli) {
|
|
8
8
|
cli
|
|
9
9
|
.command('list', 'List available and installed PM skills')
|
|
10
|
+
.alias('ls')
|
|
10
11
|
.action(() => {
|
|
11
12
|
const available = (0, skills_1.loadAvailableSkills)();
|
|
12
13
|
const installed = new Set((0, installation_1.getManifestEntries)().map(e => e.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/list/index.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/list/index.ts"],"names":[],"mappings":";;AAKA,oCAoBC;AAxBD,iDAA2D;AAC3D,6DAAgE;AAChE,gDAA0C;AAE1C,SAAgB,YAAY,CAAC,GAAQ;IACnC,GAAG;SACA,OAAO,CAAC,MAAM,EAAE,wCAAwC,CAAC;SACzD,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,SAAS,GAAG,IAAA,4BAAmB,GAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAA,iCAAkB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjE,YAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;YACzE,2CAA2C;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,YAAG,CAAC,KAAK,CAAC,MAAM,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,YAAG,CAAC,KAAK,CAAC,KAAK,cAAc,IAAI,SAAS,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACtE,YAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QAoCtC"}
|
|
@@ -7,11 +7,17 @@ const logger_1 = require("../../shared/logger");
|
|
|
7
7
|
function registerRemove(cli) {
|
|
8
8
|
cli
|
|
9
9
|
.command('remove [...skills]', 'Remove installed PM skills')
|
|
10
|
+
.alias('rm')
|
|
10
11
|
.option('-y, --yes', 'Skip confirmation prompt')
|
|
12
|
+
.option('-a, --all', 'Remove all installed pkit skills')
|
|
11
13
|
.action(async (skills, opts) => {
|
|
12
14
|
(0, prompts_1.intro)('pkit — removing skills');
|
|
13
|
-
// If no skills named, prompt to pick from installed
|
|
14
15
|
let toRemove = skills;
|
|
16
|
+
// --all flag: remove everything installed
|
|
17
|
+
if (opts.all) {
|
|
18
|
+
toRemove = [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
|
|
19
|
+
}
|
|
20
|
+
// If no skills named, prompt to pick from installed
|
|
15
21
|
if (toRemove.length === 0) {
|
|
16
22
|
const installedNames = [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
|
|
17
23
|
if (installedNames.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":";;AAOA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":";;AAOA,wCAoCC;AA1CD,6DAA8E;AAC9E,sDAA6F;AAC7F,gDAA0C;AAI1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,oBAAoB,EAAE,4BAA4B,CAAC;SAC3D,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAgB,EAAE,EAAE;QACnD,IAAA,eAAK,EAAC,wBAAwB,CAAC,CAAC;QAEhC,IAAI,QAAQ,GAAG,MAAM,CAAC;QAEtB,0CAA0C;QAC1C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,iCAAkB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,iCAAkB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,YAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAoB,EAAC,cAAc,CAAC,CAAC;YAC5D,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAa,EAAC,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,EAAE,EAAE,CAAC;gBAAC,YAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;QAC9C,CAAC;QAED,MAAM,IAAA,2BAAY,EAAC,QAAQ,CAAC,CAAC;QAC7B,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAQ/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAQ/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QA4BtC"}
|
|
@@ -7,6 +7,7 @@ const logger_1 = require("../../shared/logger");
|
|
|
7
7
|
function registerUpdate(cli) {
|
|
8
8
|
cli
|
|
9
9
|
.command('update [...skills]', 'Update installed PM skills to latest version')
|
|
10
|
+
.alias('u')
|
|
10
11
|
.option('--tool <tool>', 'Target tool: claude, antigravity, opencode, all')
|
|
11
12
|
.option('--scope <scope>', 'Scope: global or project', { default: 'global' })
|
|
12
13
|
.action(async (skills, opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":";;AAQA,wCA4BC;AAnCD,6DAA8E;AAC9E,sDAAwD;AACxD,gDAA0C;AAK1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,oBAAoB,EAAE,8CAA8C,CAAC;SAC7E,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,eAAe,EAAE,iDAAiD,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAgB,EAAE,EAAE;QACnD,IAAA,eAAK,EAAC,wBAAwB,CAAC,CAAC;QAEhC,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM;YAC5B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,iCAAkB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,YAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,IAAA,2BAAY,EAAC,QAAQ,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;YACzB,KAAK,EAAE,IAAI,CAAC,KAAqB;YACjC,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;SAC1B,CAAC,CAAC;QAEH,IAAA,eAAK,EAAC,iBAAiB,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
|
-
import type { ToolName } from '../../types';
|
|
2
|
+
import type { ToolName, InstallScope } from '../../types';
|
|
3
3
|
export declare function promptToolSelection(): Promise<ToolName | null>;
|
|
4
4
|
export declare function promptSkillSelection(skillNames: string[]): Promise<string[] | null>;
|
|
5
|
+
export declare function promptScopeSelection(): Promise<InstallScope | null>;
|
|
5
6
|
export declare function promptConfirm(message: string): Promise<boolean>;
|
|
6
7
|
export declare const intro: (title?: string, opts?: p.CommonOptions) => void, outro: (message?: string, opts?: p.CommonOptions) => void, spinner: ({ indicator, onCancel, output, cancelMessage, errorMessage, frames, delay, signal, ...opts }?: p.SpinnerOptions) => p.SpinnerResult, clackLog: {
|
|
7
8
|
message: (message?: string | string[], { symbol, secondarySymbol, output, spacing, withGuide, }?: p.LogMessageOptions) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/domains/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/domains/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG1D,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAWpE;AAGD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAkBzF;AAGD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAUzE;AAGD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIrE;AAED,eAAO,MAAQ,KAAK,oDAAE,KAAK,sDAAE,OAAO,wIAAO,QAAQ;qBACmtJ,CAAC,6EAA6E,CAAC;gCAA8D,CAAC;mCAAiE,CAAC;gCAA8D,CAAC;gCAA8D,CAAC;mCAAoG,CAAC;iCAA+D,CAAC;CADhsK,CAAC"}
|
|
@@ -36,17 +36,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.clackLog = exports.spinner = exports.outro = exports.intro = void 0;
|
|
37
37
|
exports.promptToolSelection = promptToolSelection;
|
|
38
38
|
exports.promptSkillSelection = promptSkillSelection;
|
|
39
|
+
exports.promptScopeSelection = promptScopeSelection;
|
|
39
40
|
exports.promptConfirm = promptConfirm;
|
|
40
41
|
const p = __importStar(require("@clack/prompts"));
|
|
41
|
-
//
|
|
42
|
+
// Step 1: Which AI tool? Default: claude
|
|
42
43
|
async function promptToolSelection() {
|
|
43
44
|
const selected = await p.select({
|
|
44
45
|
message: 'Install skills to which AI tool?',
|
|
45
46
|
options: [
|
|
46
|
-
{ value: '
|
|
47
|
-
{ value: 'claude', label: 'Claude Code', hint: 'Also covers OpenCode (~/.claude/skills/)' },
|
|
47
|
+
{ value: 'claude', label: 'Claude Code', hint: 'also covers OpenCode (recommended)' },
|
|
48
48
|
{ value: 'antigravity', label: 'Antigravity', hint: '~/.gemini/antigravity/skills/' },
|
|
49
|
-
{ value: '
|
|
49
|
+
{ value: 'all', label: 'All tools', hint: 'Claude Code + Antigravity' },
|
|
50
50
|
],
|
|
51
51
|
});
|
|
52
52
|
if (p.isCancel(selected)) {
|
|
@@ -55,17 +55,41 @@ async function promptToolSelection() {
|
|
|
55
55
|
}
|
|
56
56
|
return selected;
|
|
57
57
|
}
|
|
58
|
-
//
|
|
58
|
+
// Step 2: Which skills? Default: all
|
|
59
59
|
async function promptSkillSelection(skillNames) {
|
|
60
|
+
const allLabel = `All skills (${skillNames.length})`;
|
|
61
|
+
const choices = [
|
|
62
|
+
{ value: '__all__', label: allLabel, hint: 'recommended' },
|
|
63
|
+
...skillNames.map(n => ({ value: n, label: n })),
|
|
64
|
+
];
|
|
60
65
|
const selected = await p.multiselect({
|
|
61
66
|
message: 'Select skills to install:',
|
|
62
|
-
options:
|
|
67
|
+
options: choices,
|
|
63
68
|
required: true,
|
|
64
69
|
});
|
|
65
70
|
if (p.isCancel(selected)) {
|
|
66
71
|
p.cancel('Cancelled.');
|
|
67
72
|
return null;
|
|
68
73
|
}
|
|
74
|
+
const result = selected;
|
|
75
|
+
// If "All skills" was selected, return full list
|
|
76
|
+
if (result.includes('__all__'))
|
|
77
|
+
return skillNames;
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
// Step 3: Global or project scope?
|
|
81
|
+
async function promptScopeSelection() {
|
|
82
|
+
const selected = await p.select({
|
|
83
|
+
message: 'Install to global or project scope?',
|
|
84
|
+
options: [
|
|
85
|
+
{ value: 'global', label: 'Global', hint: '~/.claude/skills/ (recommended)' },
|
|
86
|
+
{ value: 'project', label: 'Project', hint: '.claude/skills/ in current directory' },
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
if (p.isCancel(selected)) {
|
|
90
|
+
p.cancel('Cancelled.');
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
69
93
|
return selected;
|
|
70
94
|
}
|
|
71
95
|
// Confirm destructive actions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/domains/ui/prompts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/domains/ui/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,13 @@ const setup_1 = require("./cli/setup");
|
|
|
4
4
|
const install_1 = require("./commands/install");
|
|
5
5
|
const list_1 = require("./commands/list");
|
|
6
6
|
const update_1 = require("./commands/update");
|
|
7
|
+
const add_1 = require("./commands/add");
|
|
7
8
|
const remove_1 = require("./commands/remove");
|
|
8
9
|
const config_1 = require("./commands/config");
|
|
9
10
|
const doctor_1 = require("./commands/doctor");
|
|
10
11
|
const cli = (0, setup_1.createCli)();
|
|
11
12
|
(0, install_1.registerInstall)(cli);
|
|
13
|
+
(0, add_1.registerAdd)(cli);
|
|
12
14
|
(0, list_1.registerList)(cli);
|
|
13
15
|
(0, update_1.registerUpdate)(cli);
|
|
14
16
|
(0, remove_1.registerRemove)(cli);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uCAAwC;AACxC,gDAAqD;AACrD,0CAA+C;AAC/C,8CAAmD;AACnD,8CAAmD;AACnD,8CAAmD;AACnD,8CAAmD;AAEnD,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAE,CAAC;AAExB,IAAA,yBAAe,EAAC,GAAG,CAAC,CAAC;AACrB,IAAA,mBAAY,EAAC,GAAG,CAAC,CAAC;AAClB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AAEpB,gCAAgC;AAChC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,UAAU,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uCAAwC;AACxC,gDAAqD;AACrD,0CAA+C;AAC/C,8CAAmD;AACnD,wCAA6C;AAC7C,8CAAmD;AACnD,8CAAmD;AACnD,8CAAmD;AAEnD,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAE,CAAC;AAExB,IAAA,yBAAe,EAAC,GAAG,CAAC,CAAC;AACrB,IAAA,iBAAW,EAAC,GAAG,CAAC,CAAC;AACjB,IAAA,mBAAY,EAAC,GAAG,CAAC,CAAC;AAClB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AACpB,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AAEpB,gCAAgC;AAChC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,UAAU,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tydung26/product-kit",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "🐳 Product engineer skills kit",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pkit": "bin/pkit.js"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"build": "tsc",
|
|
11
11
|
"dev": "tsx src/index.ts",
|
|
12
12
|
"lint": "tsc --noEmit",
|
|
13
|
-
"test": "
|
|
13
|
+
"test": "vitest run",
|
|
14
14
|
"prepublishOnly": "npm run lint && npm run build && npm test"
|
|
15
15
|
},
|
|
16
16
|
"engines": {
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"@types/fs-extra": "^11.0.4",
|
|
46
46
|
"@types/node": "^25.3.0",
|
|
47
47
|
"tsx": "^4.21.0",
|
|
48
|
-
"typescript": "^5.9.3"
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"vitest": "^4.0.18"
|
|
49
50
|
}
|
|
50
51
|
}
|