@tydung26/product-kit 1.1.0 → 1.3.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.
Files changed (33) hide show
  1. package/README.md +33 -21
  2. package/dist/commands/add/index.d.ts +3 -0
  3. package/dist/commands/add/index.d.ts.map +1 -0
  4. package/dist/commands/add/index.js +39 -0
  5. package/dist/commands/add/index.js.map +1 -0
  6. package/dist/commands/install/index.d.ts.map +1 -1
  7. package/dist/commands/install/index.js +2 -1
  8. package/dist/commands/install/index.js.map +1 -1
  9. package/dist/commands/list/index.d.ts.map +1 -1
  10. package/dist/commands/list/index.js +2 -1
  11. package/dist/commands/list/index.js.map +1 -1
  12. package/dist/commands/remove/index.d.ts.map +1 -1
  13. package/dist/commands/remove/index.js +8 -6
  14. package/dist/commands/remove/index.js.map +1 -1
  15. package/dist/commands/update/index.d.ts.map +1 -1
  16. package/dist/commands/update/index.js +4 -3
  17. package/dist/commands/update/index.js.map +1 -1
  18. package/dist/domains/installation/copy-skill-files.d.ts +1 -2
  19. package/dist/domains/installation/copy-skill-files.d.ts.map +1 -1
  20. package/dist/domains/installation/copy-skill-files.js +13 -17
  21. package/dist/domains/installation/copy-skill-files.js.map +1 -1
  22. package/dist/domains/installation/index.d.ts +1 -0
  23. package/dist/domains/installation/index.d.ts.map +1 -1
  24. package/dist/domains/installation/index.js +56 -14
  25. package/dist/domains/installation/index.js.map +1 -1
  26. package/dist/domains/skills/skill-loader.d.ts.map +1 -1
  27. package/dist/domains/skills/skill-loader.js +2 -1
  28. package/dist/domains/skills/skill-loader.js.map +1 -1
  29. package/dist/index.js +2 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/types/index.d.ts +2 -0
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/package.json +9 -8
package/README.md CHANGED
@@ -1,43 +1,55 @@
1
1
  # product-kit
2
2
 
3
- PM commands for Claude Code, Antigravity, and OpenCode AI assistants.
3
+ Product engineer skills kit for Claude Code, Antigravity, and OpenCode AI assistants.
4
4
 
5
5
  ## Install
6
6
 
7
7
  ```bash
8
+ # pnpm
8
9
  pnpm add -g @tydung26/product-kit
9
- # or
10
+
11
+ # npm
10
12
  npm install -g @tydung26/product-kit
11
13
  ```
12
14
 
13
15
  ## Usage
14
16
 
15
17
  ```bash
16
- pkit init # Interactive: pick tool + commands
17
- pkit init --yes # Install all commands to all tools
18
- pkit list # Show available/installed commands
19
- pkit update # Update all installed commands
20
- pkit remove pkit:discover
21
- pkit config # View configuration
22
- pkit config set toolPaths.antigravity /custom/path
23
- pkit doctor # Diagnose installation issues
18
+ # Setup
19
+ pkit init # Interactive: pick tool skills → scope
20
+ pkit init --yes # Install all skills to claude (global)
21
+ pkit i # Alias for init
22
+
23
+ # Add skills (skip full init)
24
+ pkit add # Interactive: pick scope → skills
25
+ pkit add pkit:discover # Add specific skill (prompts for scope)
26
+ pkit add pkit:discover --scope global --tool claude
27
+
28
+ # Manage
29
+ pkit list # Show available/installed skills
30
+ pkit ls # Alias for list
31
+ pkit update # Update all installed skills (both scopes)
32
+ pkit u # Alias for update
33
+ pkit remove pkit:discover # Remove specific skill (both scopes)
34
+ pkit rm --all # Remove all installed skills
35
+ pkit doctor # Diagnose installation issues
24
36
  ```
25
37
 
26
- ## Commands
38
+ ## Skills
27
39
 
28
- | Slash Command | Purpose |
29
- |---|---|
30
- | `/pkit:discover` | Discovery → customer slicing → clustered ideas → top picks |
31
- | `/pkit:market-intel` | Competitor profiles → feature matrix → whitespace → strategic recs |
32
- | `/pkit:roadmap` | NOW/NEXT/LATER table → risk register → exec narrative |
33
- | `/pkit:product-design` | PRD → brand guideline → wireframes → polished design |
40
+ | Slash Command | Purpose |
41
+ | ---------------------- | ------------------------------------------------------------------ |
42
+ | `/pkit:discover` | Discovery → customer slicing → clustered ideas → top picks |
43
+ | `/pkit:market-intel` | Competitor profiles → feature matrix → whitespace → strategic recs |
44
+ | `/pkit:roadmap` | NOW/NEXT/LATER table → risk register → exec narrative |
45
+ | `/pkit:product-design` | PRD → brand guideline → wireframes → polished design |
34
46
 
35
47
  ## Install Paths
36
48
 
37
- | Tool | Global path |
38
- |---|---|
39
- | Claude Code + OpenCode | `~/.claude/skills/` |
40
- | Antigravity | `~/.gemini/antigravity/skills/` |
49
+ | Tool | Global | Project |
50
+ | ---------------------- | ------------------------------- | ---------------------- |
51
+ | Claude Code + OpenCode | `~/.claude/skills/<skill>/` | `.claude/skills/<skill>/` |
52
+ | Antigravity | `~/.gemini/antigravity/skills/<skill>/` | `.agent/skills/<skill>/` |
41
53
 
42
54
  ## License
43
55
 
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerAdd(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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;AAa/B,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,QAsDvC"}
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"}
@@ -6,7 +6,8 @@ const installation_1 = require("../../domains/installation");
6
6
  const prompts_1 = require("../../domains/ui/prompts");
7
7
  function registerInstall(cli) {
8
8
  cli
9
- .command('init|i [...skills]', 'Install PM commands to AI coding tools')
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
12
  .option('--scope <scope>', 'Scope: global or project')
12
13
  .option('--force', 'Overwrite existing installations')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":";;AAaA,0CAsDC;AAlED,iDAA2D;AAC3D,6DAA2D;AAC3D,sDAAyH;AAUzH,SAAgB,eAAe,CAAC,GAAQ;IACtC,GAAG;SACA,OAAO,CAAC,oBAAoB,EAAE,wCAAwC,CAAC;SACvE,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
+ {"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,QAmBpC"}
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"}
@@ -6,7 +6,8 @@ const installation_1 = require("../../domains/installation");
6
6
  const logger_1 = require("../../shared/logger");
7
7
  function registerList(cli) {
8
8
  cli
9
- .command('list|ls', 'List available and installed PM skills')
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,oCAmBC;AAvBD,iDAA2D;AAC3D,6DAAgE;AAChE,gDAA0C;AAE1C,SAAgB,YAAY,CAAC,GAAQ;IACnC,GAAG;SACA,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC;SAC5D,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
+ {"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,QAmCtC"}
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,QAqCtC"}
@@ -6,24 +6,26 @@ const prompts_1 = require("../../domains/ui/prompts");
6
6
  const logger_1 = require("../../shared/logger");
7
7
  function registerRemove(cli) {
8
8
  cli
9
- .command('remove|rm [...skills]', 'Remove installed PM skills')
9
+ .command('remove [...skills]', 'Remove installed PM skills')
10
+ .alias('rm')
10
11
  .option('-y, --yes', 'Skip confirmation prompt')
11
12
  .option('-a, --all', 'Remove all installed pkit skills')
12
13
  .action(async (skills, opts) => {
13
14
  (0, prompts_1.intro)('pkit — removing skills');
15
+ // Scan both global and project scopes for installed skills
16
+ const installed = (0, installation_1.scanInstalledSkills)();
14
17
  let toRemove = skills;
15
- // --all flag: remove everything installed
18
+ // --all flag: remove everything found
16
19
  if (opts.all) {
17
- toRemove = [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
20
+ toRemove = installed;
18
21
  }
19
22
  // If no skills named, prompt to pick from installed
20
23
  if (toRemove.length === 0) {
21
- const installedNames = [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
22
- if (installedNames.length === 0) {
24
+ if (installed.length === 0) {
23
25
  logger_1.log.warn('No skills installed.');
24
26
  return;
25
27
  }
26
- const selected = await (0, prompts_1.promptSkillSelection)(installedNames);
28
+ const selected = await (0, prompts_1.promptSkillSelection)(installed);
27
29
  if (!selected)
28
30
  return;
29
31
  toRemove = selected;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":";;AAOA,wCAmCC;AAzCD,6DAA8E;AAC9E,sDAA6F;AAC7F,gDAA0C;AAI1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;SAC9D,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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":";;AAOA,wCAqCC;AA3CD,6DAA+E;AAC/E,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,2DAA2D;QAC3D,MAAM,SAAS,GAAG,IAAA,kCAAmB,GAAE,CAAC;QACxC,IAAI,QAAQ,GAAG,MAAM,CAAC;QAEtB,sCAAsC;QACtC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;QAED,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,YAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAoB,EAAC,SAAS,CAAC,CAAC;YACvD,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,QA2BtC"}
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"}
@@ -6,15 +6,16 @@ const prompts_1 = require("../../domains/ui/prompts");
6
6
  const logger_1 = require("../../shared/logger");
7
7
  function registerUpdate(cli) {
8
8
  cli
9
- .command('update|u [...skills]', 'Update installed PM skills to latest version')
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) => {
13
14
  (0, prompts_1.intro)('pkit — updating skills');
14
- // Default: update all installed skills
15
+ // Default: update all installed skills found in both scopes
15
16
  const toUpdate = skills.length
16
17
  ? skills
17
- : [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
18
+ : (0, installation_1.scanInstalledSkills)();
18
19
  if (toUpdate.length === 0) {
19
20
  logger_1.log.warn('No skills installed. Run: pkit install');
20
21
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":";;AAQA,wCA2BC;AAlCD,6DAA8E;AAC9E,sDAAwD;AACxD,gDAA0C;AAK1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC/E,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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":";;AAQA,wCA4BC;AAnCD,6DAA+E;AAC/E,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,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM;YAC5B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAA,kCAAmB,GAAE,CAAC;QAE1B,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"}
@@ -8,6 +8,5 @@ export type CopyResult = {
8
8
  status: 'failed';
9
9
  error: string;
10
10
  };
11
- export declare function copyCommandFile(srcFile: string, destBase: string, force: boolean): Promise<CopyResult>;
12
- export declare const copySkillDir: typeof copyCommandFile;
11
+ export declare function copySkillDir(srcDir: string, dirName: string, destBase: string, force: boolean): Promise<CopyResult>;
13
12
  //# sourceMappingURL=copy-skill-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-skill-files.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/copy-skill-files.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAIxC,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAGD,eAAO,MAAM,YAAY,wBAAkB,CAAC"}
1
+ {"version":3,"file":"copy-skill-files.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/copy-skill-files.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAIxC,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
@@ -1,33 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.copySkillDir = void 0;
4
- exports.copyCommandFile = copyCommandFile;
3
+ exports.copySkillDir = copySkillDir;
5
4
  const fs_1 = require("fs");
6
5
  const fs_extra_1 = require("fs-extra");
7
6
  const path_1 = require("path");
8
- // Safely copies a single command .md file to destBase/filename.md.
9
- // Validates paths to prevent directory traversal attacks.
10
- async function copyCommandFile(srcFile, destBase, force) {
11
- const filename = (0, path_1.basename)(srcFile);
12
- // Path traversal guard: resolved dest must be inside destBase
13
- const destFile = (0, path_1.join)(destBase, filename);
14
- if (!(0, path_1.resolve)(destFile).startsWith((0, path_1.resolve)(destBase))) {
15
- return { status: 'failed', error: `Path traversal attempt blocked for: ${filename}` };
7
+ // Copies a skill directory (e.g. skills/discover/) into destBase/<dirName>/
8
+ // Preserves folder structure so each skill lives in its own subdirectory.
9
+ async function copySkillDir(srcDir, dirName, destBase, force) {
10
+ const destDir = (0, path_1.join)(destBase, dirName);
11
+ // Path traversal guard
12
+ if (!(0, path_1.resolve)(destDir).startsWith((0, path_1.resolve)(destBase))) {
13
+ return { status: 'failed', error: `Path traversal attempt blocked for: ${dirName}` };
16
14
  }
17
- if ((0, fs_1.existsSync)(destFile) && !force) {
15
+ if ((0, fs_1.existsSync)(destDir) && !force) {
18
16
  return { status: 'skipped', reason: 'already installed (use --force to overwrite)' };
19
17
  }
20
18
  try {
21
19
  await (0, fs_extra_1.ensureDir)(destBase);
22
- if ((0, fs_1.existsSync)(destFile) && force)
23
- await (0, fs_extra_1.remove)(destFile);
24
- await (0, fs_extra_1.copy)(srcFile, destFile, { overwrite: force });
25
- return { status: 'installed', destPath: destFile };
20
+ if ((0, fs_1.existsSync)(destDir) && force)
21
+ await (0, fs_extra_1.remove)(destDir);
22
+ await (0, fs_extra_1.copy)(srcDir, destDir, { overwrite: force });
23
+ return { status: 'installed', destPath: destDir };
26
24
  }
27
25
  catch (err) {
28
26
  return { status: 'failed', error: err instanceof Error ? err.message : String(err) };
29
27
  }
30
28
  }
31
- // Legacy alias for any callers using the old name
32
- exports.copySkillDir = copyCommandFile;
33
29
  //# sourceMappingURL=copy-skill-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-skill-files.js","sourceRoot":"","sources":["../../../src/domains/installation/copy-skill-files.ts"],"names":[],"mappings":";;;AAWA,0CAyBC;AApCD,2BAAgC;AAChC,uCAAmD;AACnD,+BAA+C;AAO/C,mEAAmE;AACnE,0DAA0D;AACnD,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,QAAgB,EAChB,KAAc;IAEd,MAAM,QAAQ,GAAG,IAAA,eAAQ,EAAC,OAAO,CAAC,CAAC;IAEnC,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,QAAQ,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IACvF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAA,oBAAS,EAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,IAAI,KAAK;YAAE,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAA,eAAI,EAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACvF,CAAC;AACH,CAAC;AAED,kDAAkD;AACrC,QAAA,YAAY,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"copy-skill-files.js","sourceRoot":"","sources":["../../../src/domains/installation/copy-skill-files.ts"],"names":[],"mappings":";;AAWA,oCAyBC;AApCD,2BAAgC;AAChC,uCAAmD;AACnD,+BAAqC;AAOrC,4EAA4E;AAC5E,0EAA0E;AACnE,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,OAAe,EACf,QAAgB,EAChB,KAAc;IAEd,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExC,uBAAuB;IACvB,IAAI,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC,UAAU,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,OAAO,EAAE,EAAE,CAAC;IACvF,CAAC;IAED,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IACvF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAA,oBAAS,EAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,IAAI,KAAK;YAAE,MAAM,IAAA,iBAAM,EAAC,OAAO,CAAC,CAAC;QACxD,MAAM,IAAA,eAAI,EAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACvF,CAAC;AACH,CAAC"}
@@ -5,5 +5,6 @@ export declare function removeSkills(names: string[]): Promise<void>;
5
5
  export declare function updateSkills(names: string[], opts: InstallOptions & {
6
6
  toolOverride?: boolean;
7
7
  }): Promise<void>;
8
+ export declare function scanInstalledSkills(): string[];
8
9
  export { getManifestEntries };
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2C,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEjG,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,aAAa,CAAC;AAW5D,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxF;AAGD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjE;AAID,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BpH;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2C,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGjG,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,aAAa,CAAC;AAW5D,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxF;AAID,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCjE;AAID,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BpH;AAID,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAqB9C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -37,6 +37,7 @@ exports.getManifestEntries = void 0;
37
37
  exports.installSkills = installSkills;
38
38
  exports.removeSkills = removeSkills;
39
39
  exports.updateSkills = updateSkills;
40
+ exports.scanInstalledSkills = scanInstalledSkills;
40
41
  const fs_1 = require("fs");
41
42
  const path_1 = require("path");
42
43
  const skills_1 = require("../skills");
@@ -45,6 +46,7 @@ const copy_skill_files_1 = require("./copy-skill-files");
45
46
  const manifest_manager_1 = require("./manifest-manager");
46
47
  Object.defineProperty(exports, "getManifestEntries", { enumerable: true, get: function () { return manifest_manager_1.getManifestEntries; } });
47
48
  const logger_1 = require("../../shared/logger");
49
+ const paths_1 = require("../../shared/paths");
48
50
  // Read current package version for manifest tracking
49
51
  function getPkgVersion() {
50
52
  try {
@@ -69,7 +71,7 @@ async function installSkills(names, opts) {
69
71
  const pkgVersion = getPkgVersion();
70
72
  for (const skill of toInstall) {
71
73
  for (const destBase of destPaths) {
72
- const result = await (0, copy_skill_files_1.copyCommandFile)(skill.filePath, destBase, opts.force ?? false);
74
+ const result = await (0, copy_skill_files_1.copySkillDir)(skill.dirPath, skill.dirName, destBase, opts.force ?? false);
73
75
  if (result.status === 'installed') {
74
76
  logger_1.log.success(`Installed: ${skill.name} → ${result.destPath}`);
75
77
  (0, manifest_manager_1.addManifestEntry)({
@@ -89,24 +91,38 @@ async function installSkills(names, opts) {
89
91
  }
90
92
  }
91
93
  }
92
- // Remove skills by name, deleting files from all recorded install paths
94
+ // Remove skills by name from both manifest and actual directories on disk.
95
+ // Scans global + project scopes so skills installed outside manifest are also removed.
93
96
  async function removeSkills(names) {
94
97
  const { remove } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
98
+ const allDirs = [
99
+ paths_1.DEFAULT_TOOL_PATHS.claude,
100
+ paths_1.DEFAULT_TOOL_PATHS.antigravity,
101
+ (0, path_1.join)(process.cwd(), paths_1.PROJECT_TOOL_SEGMENTS.claude),
102
+ (0, path_1.join)(process.cwd(), paths_1.PROJECT_TOOL_SEGMENTS.antigravity),
103
+ ];
95
104
  for (const name of names) {
96
- const removed = (0, manifest_manager_1.removeManifestEntries)(name);
97
- if (removed.length === 0) {
98
- logger_1.log.warn(`Not installed: ${name}`);
99
- continue;
100
- }
101
- for (const entry of removed) {
102
- try {
103
- await remove(entry.destPath);
104
- logger_1.log.success(`Removed: ${name} from ${entry.destPath}`);
105
- }
106
- catch (err) {
107
- logger_1.log.error(`Failed to remove ${entry.destPath}: ${err instanceof Error ? err.message : String(err)}`);
105
+ // Strip "pkit:" prefix to get directory name
106
+ const dirName = name.replace(/^pkit:/, '');
107
+ let removed = false;
108
+ // Remove from manifest
109
+ (0, manifest_manager_1.removeManifestEntries)(name);
110
+ // Remove actual directories from all scopes
111
+ for (const base of allDirs) {
112
+ const skillDir = (0, path_1.join)(base, dirName);
113
+ if ((0, fs_1.existsSync)(skillDir)) {
114
+ try {
115
+ await remove(skillDir);
116
+ logger_1.log.success(`Removed: ${name} from ${skillDir}`);
117
+ removed = true;
118
+ }
119
+ catch (err) {
120
+ logger_1.log.error(`Failed to remove ${skillDir}: ${err instanceof Error ? err.message : String(err)}`);
121
+ }
108
122
  }
109
123
  }
124
+ if (!removed)
125
+ logger_1.log.warn(`Not installed: ${name}`);
110
126
  }
111
127
  }
112
128
  // Update skills using manifest-recorded tools (not blindly 'all').
@@ -140,4 +156,30 @@ async function updateSkills(names, opts) {
140
156
  });
141
157
  }
142
158
  }
159
+ // Scan both global and project scope directories for installed pkit skills.
160
+ // Returns deduplicated list of skill command names (e.g. "pkit:discover").
161
+ function scanInstalledSkills() {
162
+ const dirs = [
163
+ paths_1.DEFAULT_TOOL_PATHS.claude,
164
+ paths_1.DEFAULT_TOOL_PATHS.antigravity,
165
+ (0, path_1.join)(process.cwd(), paths_1.PROJECT_TOOL_SEGMENTS.claude),
166
+ (0, path_1.join)(process.cwd(), paths_1.PROJECT_TOOL_SEGMENTS.antigravity),
167
+ ];
168
+ const found = new Set();
169
+ for (const base of dirs) {
170
+ if (!(0, fs_1.existsSync)(base))
171
+ continue;
172
+ try {
173
+ for (const entry of (0, fs_1.readdirSync)(base, { withFileTypes: true })) {
174
+ if (!entry.isDirectory())
175
+ continue;
176
+ if ((0, fs_1.existsSync)((0, path_1.join)(base, entry.name, 'SKILL.md'))) {
177
+ found.add(`pkit:${entry.name}`);
178
+ }
179
+ }
180
+ }
181
+ catch { /* skip unreadable dirs */ }
182
+ }
183
+ return [...found];
184
+ }
143
185
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/installation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/installation/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../../src/domains/skills/skill-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAsB7C;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/D"}
1
+ {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../../src/domains/skills/skill-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAuB7C;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/D"}
@@ -26,7 +26,8 @@ function loadAvailableSkills() {
26
26
  try {
27
27
  const content = (0, fs_1.readFileSync)(filePath, 'utf8');
28
28
  const meta = (0, skill_validator_1.validateSkillContent)(content, filePath);
29
- skills.push({ name: dirNameToCommandName(entry.name), filePath, meta });
29
+ const dirPath = (0, path_1.join)(paths_1.PACKAGE_COMMANDS_DIR, entry.name);
30
+ skills.push({ name: dirNameToCommandName(entry.name), filePath, dirPath, dirName: entry.name, meta });
30
31
  }
31
32
  catch {
32
33
  // Skip invalid skill files silently in production
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../../src/domains/skills/skill-loader.ts"],"names":[],"mappings":";;AAYA,kDAsBC;AAGD,0CAEC;AAvCD,2BAA2D;AAC3D,+BAA4B;AAC5B,8CAA0D;AAC1D,uDAAyD;AAGzD,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,QAAQ,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,gFAAgF;AAChF,SAAgB,mBAAmB;IACjC,IAAI,CAAC,IAAA,eAAU,EAAC,4BAAoB,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,4BAAoB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,4BAAoB,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAA,sCAAoB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qDAAqD;AACrD,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../../src/domains/skills/skill-loader.ts"],"names":[],"mappings":";;AAYA,kDAuBC;AAGD,0CAEC;AAxCD,2BAA2D;AAC3D,+BAA4B;AAC5B,8CAA0D;AAC1D,uDAAyD;AAGzD,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,QAAQ,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,gFAAgF;AAChF,SAAgB,mBAAmB;IACjC,IAAI,CAAC,IAAA,eAAU,EAAC,4BAAoB,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,4BAAoB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,4BAAoB,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAA,sCAAoB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,4BAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qDAAqD;AACrD,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC1D,CAAC"}
package/dist/index.js CHANGED
@@ -4,15 +4,15 @@ 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
- const config_1 = require("./commands/config");
9
9
  const doctor_1 = require("./commands/doctor");
10
10
  const cli = (0, setup_1.createCli)();
11
11
  (0, install_1.registerInstall)(cli);
12
+ (0, add_1.registerAdd)(cli);
12
13
  (0, list_1.registerList)(cli);
13
14
  (0, update_1.registerUpdate)(cli);
14
15
  (0, remove_1.registerRemove)(cli);
15
- (0, config_1.registerConfig)(cli);
16
16
  (0, doctor_1.registerDoctor)(cli);
17
17
  // Show help if no command given
18
18
  cli.on('command:*', () => {
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;AAEnD,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;AAEpB,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"}
@@ -7,6 +7,8 @@ export interface SkillMeta {
7
7
  export interface Skill {
8
8
  name: string;
9
9
  filePath: string;
10
+ dirPath: string;
11
+ dirName: string;
10
12
  meta: SkillMeta;
11
13
  }
12
14
  export interface InstallOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,KAAK,CAAC;AAGrE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGhD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;CACjB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,KAAK,CAAC;AAGrE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGhD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACjB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,11 +1,18 @@
1
1
  {
2
2
  "name": "@tydung26/product-kit",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "🐳 Product engineer skills kit",
5
5
  "bin": {
6
6
  "pkit": "bin/pkit.js"
7
7
  },
8
8
  "main": "dist/index.js",
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsx src/index.ts",
12
+ "lint": "tsc --noEmit",
13
+ "test": "vitest run",
14
+ "prepublishOnly": "npm run lint && npm run build && npm test"
15
+ },
9
16
  "engines": {
10
17
  "node": ">=18.0.0"
11
18
  },
@@ -40,11 +47,5 @@
40
47
  "tsx": "^4.21.0",
41
48
  "typescript": "^5.9.3",
42
49
  "vitest": "^4.0.18"
43
- },
44
- "scripts": {
45
- "build": "tsc",
46
- "dev": "tsx src/index.ts",
47
- "lint": "tsc --noEmit",
48
- "test": "vitest run"
49
50
  }
50
- }
51
+ }