@tydung26/product-kit 0.1.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 (96) hide show
  1. package/README.md +42 -0
  2. package/bin/pkit.js +2 -0
  3. package/dist/cli/setup.d.ts +2 -0
  4. package/dist/cli/setup.d.ts.map +1 -0
  5. package/dist/cli/setup.js +29 -0
  6. package/dist/cli/setup.js.map +1 -0
  7. package/dist/commands/config/index.d.ts +3 -0
  8. package/dist/commands/config/index.d.ts.map +1 -0
  9. package/dist/commands/config/index.js +34 -0
  10. package/dist/commands/config/index.js.map +1 -0
  11. package/dist/commands/doctor/index.d.ts +3 -0
  12. package/dist/commands/doctor/index.d.ts.map +1 -0
  13. package/dist/commands/doctor/index.js +94 -0
  14. package/dist/commands/doctor/index.js.map +1 -0
  15. package/dist/commands/install/index.d.ts +3 -0
  16. package/dist/commands/install/index.d.ts.map +1 -0
  17. package/dist/commands/install/index.js +51 -0
  18. package/dist/commands/install/index.js.map +1 -0
  19. package/dist/commands/list/index.d.ts +3 -0
  20. package/dist/commands/list/index.d.ts.map +1 -0
  21. package/dist/commands/list/index.js +25 -0
  22. package/dist/commands/list/index.js.map +1 -0
  23. package/dist/commands/remove/index.d.ts +3 -0
  24. package/dist/commands/remove/index.d.ts.map +1 -0
  25. package/dist/commands/remove/index.js +37 -0
  26. package/dist/commands/remove/index.js.map +1 -0
  27. package/dist/commands/update/index.d.ts +3 -0
  28. package/dist/commands/update/index.d.ts.map +1 -0
  29. package/dist/commands/update/index.js +30 -0
  30. package/dist/commands/update/index.js.map +1 -0
  31. package/dist/domains/config/config-store.d.ts +11 -0
  32. package/dist/domains/config/config-store.d.ts.map +1 -0
  33. package/dist/domains/config/config-store.js +49 -0
  34. package/dist/domains/config/config-store.js.map +1 -0
  35. package/dist/domains/config/index.d.ts +3 -0
  36. package/dist/domains/config/index.d.ts.map +1 -0
  37. package/dist/domains/config/index.js +7 -0
  38. package/dist/domains/config/index.js.map +1 -0
  39. package/dist/domains/installation/copy-skill-files.d.ts +12 -0
  40. package/dist/domains/installation/copy-skill-files.d.ts.map +1 -0
  41. package/dist/domains/installation/copy-skill-files.js +30 -0
  42. package/dist/domains/installation/copy-skill-files.js.map +1 -0
  43. package/dist/domains/installation/index.d.ts +7 -0
  44. package/dist/domains/installation/index.d.ts.map +1 -0
  45. package/dist/domains/installation/index.js +116 -0
  46. package/dist/domains/installation/index.js.map +1 -0
  47. package/dist/domains/installation/manifest-manager.d.ts +9 -0
  48. package/dist/domains/installation/manifest-manager.d.ts.map +1 -0
  49. package/dist/domains/installation/manifest-manager.js +49 -0
  50. package/dist/domains/installation/manifest-manager.js.map +1 -0
  51. package/dist/domains/installation/resolve-paths.d.ts +3 -0
  52. package/dist/domains/installation/resolve-paths.d.ts.map +1 -0
  53. package/dist/domains/installation/resolve-paths.js +40 -0
  54. package/dist/domains/installation/resolve-paths.js.map +1 -0
  55. package/dist/domains/skills/index.d.ts +3 -0
  56. package/dist/domains/skills/index.d.ts.map +1 -0
  57. package/dist/domains/skills/index.js +10 -0
  58. package/dist/domains/skills/index.js.map +1 -0
  59. package/dist/domains/skills/skill-loader.d.ts +4 -0
  60. package/dist/domains/skills/skill-loader.d.ts.map +1 -0
  61. package/dist/domains/skills/skill-loader.js +37 -0
  62. package/dist/domains/skills/skill-loader.js.map +1 -0
  63. package/dist/domains/skills/skill-validator.d.ts +3 -0
  64. package/dist/domains/skills/skill-validator.d.ts.map +1 -0
  65. package/dist/domains/skills/skill-validator.js +39 -0
  66. package/dist/domains/skills/skill-validator.js.map +1 -0
  67. package/dist/domains/ui/prompts.d.ts +15 -0
  68. package/dist/domains/ui/prompts.d.ts.map +1 -0
  69. package/dist/domains/ui/prompts.js +79 -0
  70. package/dist/domains/ui/prompts.js.map +1 -0
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +24 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/schemas/skill-schema.d.ts +8 -0
  76. package/dist/schemas/skill-schema.d.ts.map +1 -0
  77. package/dist/schemas/skill-schema.js +16 -0
  78. package/dist/schemas/skill-schema.js.map +1 -0
  79. package/dist/shared/logger.d.ts +8 -0
  80. package/dist/shared/logger.d.ts.map +1 -0
  81. package/dist/shared/logger.js +20 -0
  82. package/dist/shared/logger.js.map +1 -0
  83. package/dist/shared/paths.d.ts +15 -0
  84. package/dist/shared/paths.d.ts.map +1 -0
  85. package/dist/shared/paths.js +28 -0
  86. package/dist/shared/paths.js.map +1 -0
  87. package/dist/types/index.d.ts +26 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +3 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/package.json +50 -0
  92. package/skills/pkit:brainstorm/SKILL.md +93 -0
  93. package/skills/pkit:competitive-analysis/SKILL.md +103 -0
  94. package/skills/pkit:make-prd/SKILL.md +69 -0
  95. package/skills/pkit:make-prd/templates/prd-template.md +108 -0
  96. package/skills/pkit:roadmap-planner/SKILL.md +101 -0
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # product-kit
2
+
3
+ PM skills for Claude Code, Antigravity, and OpenCode AI assistants.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g product-kit
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```bash
14
+ pkit install # Interactive: pick tool + skills
15
+ pkit install --yes # Install all skills to all tools
16
+ pkit list # Show available/installed skills
17
+ pkit update # Update all installed skills
18
+ pkit remove pkit:brainstorm
19
+ pkit config # View configuration
20
+ pkit config set toolPaths.antigravity /custom/path
21
+ pkit doctor # Diagnose installation issues
22
+ ```
23
+
24
+ ## Skills
25
+
26
+ | Slash Command | Purpose |
27
+ |---|---|
28
+ | `/pkit:brainstorm` | Ideation → clustered ideas → top picks |
29
+ | `/pkit:competitive-analysis` | Competitor profiles → feature matrix → whitespace |
30
+ | `/pkit:roadmap-planner` | NOW/NEXT/LATER table → risk register → exec narrative |
31
+ | `/pkit:make-prd` | Clarifying questions → full PRD → user stories |
32
+
33
+ ## Install Paths
34
+
35
+ | Tool | Global path |
36
+ |---|---|
37
+ | Claude Code + OpenCode | `~/.claude/skills/` |
38
+ | Antigravity | `~/.gemini/antigravity/skills/` |
39
+
40
+ ## License
41
+
42
+ MIT
package/bin/pkit.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js');
@@ -0,0 +1,2 @@
1
+ export declare function createCli(): import("cac").CAC;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAcA,wBAAgB,SAAS,sBAQxB"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCli = createCli;
7
+ const cac_1 = __importDefault(require("cac"));
8
+ const fs_1 = require("fs");
9
+ const path_1 = require("path");
10
+ // Read version from package.json at runtime
11
+ function getVersion() {
12
+ try {
13
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', '..', 'package.json'), 'utf8'));
14
+ return pkg.version;
15
+ }
16
+ catch {
17
+ return '0.0.0';
18
+ }
19
+ }
20
+ function createCli() {
21
+ const cli = (0, cac_1.default)('pkit');
22
+ cli.version(getVersion());
23
+ cli.help();
24
+ // Global flags available on all commands
25
+ cli.option('--json', 'Output as JSON (for scripting)');
26
+ cli.option('--verbose', 'Show verbose output');
27
+ return cli;
28
+ }
29
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":";;;;;AAcA,8BAQC;AAtBD,8CAAsB;AACtB,2BAAkC;AAClC,+BAA4B;AAE5B,4CAA4C;AAC5C,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1F,OAAO,GAAG,CAAC,OAAiB,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,yCAAyC;IACzC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;IACvD,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerConfig(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QA2BtC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerConfig = registerConfig;
4
+ const config_1 = require("../../domains/config");
5
+ const logger_1 = require("../../shared/logger");
6
+ function registerConfig(cli) {
7
+ // pkit config → show current config
8
+ cli
9
+ .command('config', 'View or set pkit configuration')
10
+ .action(() => {
11
+ const config = (0, config_1.getConfig)();
12
+ logger_1.log.plain('\npkit configuration\n');
13
+ logger_1.log.plain(` defaultScope ${config.defaultScope}`);
14
+ logger_1.log.plain(` toolPaths.claude ${config.toolPaths.claude}`);
15
+ logger_1.log.plain(` toolPaths.antigravity ${config.toolPaths.antigravity}`);
16
+ logger_1.log.plain(` toolPaths.opencode ${config.toolPaths.opencode}`);
17
+ logger_1.log.plain('\nChange with: pkit config set <key> <value>');
18
+ logger_1.log.plain('Keys: defaultScope, toolPaths.claude, toolPaths.antigravity, toolPaths.opencode');
19
+ });
20
+ // pkit config set <key> <value>
21
+ cli
22
+ .command('config set <key> <value>', 'Set a configuration value')
23
+ .action((key, value) => {
24
+ try {
25
+ (0, config_1.setConfigValue)(key, value);
26
+ logger_1.log.success(`Set ${key} = ${value}`);
27
+ }
28
+ catch (err) {
29
+ logger_1.log.error(err instanceof Error ? err.message : String(err));
30
+ process.exit(1);
31
+ }
32
+ });
33
+ }
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":";;AAIA,wCA2BC;AA9BD,iDAAiE;AACjE,gDAA0C;AAE1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,oCAAoC;IACpC,GAAG;SACA,OAAO,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SACnD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,YAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpC,YAAG,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,YAAG,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,YAAG,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,YAAG,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjE,YAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC1D,YAAG,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEL,gCAAgC;IAChC,GAAG;SACA,OAAO,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;SAChE,MAAM,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAA,uBAAc,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,YAAG,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerDoctor(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAkB/B,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QAqEtC"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDoctor = registerDoctor;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const config_1 = require("../../domains/config");
7
+ const installation_1 = require("../../domains/installation");
8
+ const skills_1 = require("../../domains/skills");
9
+ const paths_1 = require("../../shared/paths");
10
+ const logger_1 = require("../../shared/logger");
11
+ function check(label, ok, detail, fix) {
12
+ if (ok) {
13
+ logger_1.log.success(`${label}: ${detail}`);
14
+ }
15
+ else {
16
+ logger_1.log.error(`${label}: ${detail}${fix ? `\n Fix: ${fix}` : ''}`);
17
+ }
18
+ return ok;
19
+ }
20
+ function registerDoctor(cli) {
21
+ cli
22
+ .command('doctor', 'Diagnose pkit installation issues')
23
+ .action(() => {
24
+ logger_1.log.plain('\npkit doctor\n');
25
+ const config = (0, config_1.getConfig)();
26
+ let issues = 0;
27
+ // 1. Node version
28
+ const nodeVer = process.version.replace('v', '').split('.').map(Number);
29
+ const nodeOk = nodeVer[0] >= 18;
30
+ if (!check('Node version', nodeOk, process.version, 'Upgrade Node to >=18'))
31
+ issues++;
32
+ // 2. Skills bundled in package
33
+ const skillsOk = (0, fs_1.existsSync)(paths_1.PACKAGE_SKILLS_DIR);
34
+ if (!check('Package skills dir', skillsOk, paths_1.PACKAGE_SKILLS_DIR, 'Reinstall product-kit'))
35
+ issues++;
36
+ // 3. Claude skills path exists
37
+ const claudeOk = (0, fs_1.existsSync)(config.toolPaths.claude);
38
+ check('Claude skills dir', claudeOk, config.toolPaths.claude, claudeOk ? undefined : `mkdir -p "${config.toolPaths.claude}"`);
39
+ if (!claudeOk)
40
+ issues++;
41
+ // 4. Antigravity path (warn only — tool may not be installed)
42
+ const agOk = (0, fs_1.existsSync)(config.toolPaths.antigravity);
43
+ if (agOk) {
44
+ logger_1.log.success(`Antigravity skills dir: ${config.toolPaths.antigravity}`);
45
+ }
46
+ else {
47
+ logger_1.log.warn(`Antigravity skills dir not found: ${config.toolPaths.antigravity} (install Antigravity or set toolPaths.antigravity)`);
48
+ }
49
+ // 5. Manifest exists and is valid JSON
50
+ let manifestOk = false;
51
+ if ((0, fs_1.existsSync)(paths_1.MANIFEST_PATH)) {
52
+ try {
53
+ JSON.parse((0, fs_1.readFileSync)(paths_1.MANIFEST_PATH, 'utf8'));
54
+ manifestOk = true;
55
+ }
56
+ catch { /* invalid JSON */ }
57
+ }
58
+ else {
59
+ manifestOk = true; // no manifest = nothing installed yet, that's fine
60
+ }
61
+ if (!check('Manifest file', manifestOk, paths_1.MANIFEST_PATH, `rm "${paths_1.MANIFEST_PATH}" and reinstall`))
62
+ issues++;
63
+ // 6. Verify each installed skill dir still exists and SKILL.md is valid
64
+ const entries = (0, installation_1.getManifestEntries)();
65
+ for (const entry of entries) {
66
+ const skillFile = (0, path_1.join)(entry.destPath, 'SKILL.md');
67
+ const exists = (0, fs_1.existsSync)(skillFile);
68
+ if (!exists) {
69
+ logger_1.log.error(`Missing: ${entry.name} at ${entry.destPath} — run: pkit install ${entry.name} --force`);
70
+ issues++;
71
+ }
72
+ else {
73
+ try {
74
+ const content = (0, fs_1.readFileSync)(skillFile, 'utf8');
75
+ (0, skills_1.validateSkillContent)(content, skillFile);
76
+ logger_1.log.success(`${entry.name}: valid`);
77
+ }
78
+ catch (err) {
79
+ logger_1.log.error(`${entry.name}: invalid SKILL.md — ${err instanceof Error ? err.message : String(err)}`);
80
+ issues++;
81
+ }
82
+ }
83
+ }
84
+ logger_1.log.plain('');
85
+ if (issues === 0) {
86
+ logger_1.log.success('All checks passed.');
87
+ }
88
+ else {
89
+ logger_1.log.error(`${issues} issue(s) found. See fixes above.`);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ }
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerInstall(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAc/B,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,QA2CvC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerInstall = registerInstall;
4
+ const skills_1 = require("../../domains/skills");
5
+ const installation_1 = require("../../domains/installation");
6
+ const prompts_1 = require("../../domains/ui/prompts");
7
+ function registerInstall(cli) {
8
+ cli
9
+ .command('install [...skills]', 'Install PM skills to AI coding tools')
10
+ .option('--tool <tool>', 'Target tool: claude, antigravity, opencode, all')
11
+ .option('--scope <scope>', 'Scope: global or project', { default: 'global' })
12
+ .option('--force', 'Overwrite existing installations')
13
+ .option('-y, --yes', 'Skip interactive prompts (installs all skills to all tools)')
14
+ .action(async (skills, opts) => {
15
+ (0, prompts_1.intro)('pkit — PM skills installer');
16
+ // Resolve tool: use flag, non-interactive default, or prompt
17
+ let tool = opts.tool;
18
+ if (!tool) {
19
+ if (opts.yes) {
20
+ tool = 'all';
21
+ }
22
+ else {
23
+ tool = await (0, prompts_1.promptToolSelection)() ?? undefined;
24
+ if (!tool)
25
+ return;
26
+ }
27
+ }
28
+ // Resolve skill names: use args, or prompt, or all (with -y)
29
+ let skillNames = skills;
30
+ if (skillNames.length === 0) {
31
+ const available = (0, skills_1.loadAvailableSkills)().map(s => s.name);
32
+ if (opts.yes) {
33
+ skillNames = available;
34
+ }
35
+ else {
36
+ const selected = await (0, prompts_1.promptSkillSelection)(available);
37
+ if (!selected)
38
+ return;
39
+ skillNames = selected;
40
+ }
41
+ }
42
+ await (0, installation_1.installSkills)(skillNames, {
43
+ tools: tool,
44
+ scope: opts.scope,
45
+ force: opts.force,
46
+ yes: opts.yes,
47
+ });
48
+ (0, prompts_1.outro)('Done! Use /pkit:brainstorm (or other skill names) in your AI tool.');
49
+ });
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":";;AAcA,0CA2CC;AAxDD,iDAA2D;AAC3D,6DAA2D;AAC3D,sDAAmG;AAWnG,SAAgB,eAAe,CAAC,GAAQ;IACtC,GAAG;SACA,OAAO,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACtE,MAAM,CAAC,eAAe,EAAE,iDAAiD,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;SAC5E,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACrD,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAiB,EAAE,EAAE;QACpD,IAAA,eAAK,EAAC,4BAA4B,CAAC,CAAC;QAEpC,6DAA6D;QAC7D,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,IAAA,6BAAmB,GAAE,IAAI,SAAS,CAAC;gBAChD,IAAI,CAAC,IAAI;oBAAE,OAAO;YACpB,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,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,MAAM,IAAA,4BAAa,EAAC,UAAU,EAAE;YAC9B,KAAK,EAAE,IAAgB;YACvB,KAAK,EAAE,IAAI,CAAC,KAAqB;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,IAAA,eAAK,EAAC,oEAAoE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerList(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerList = registerList;
4
+ const skills_1 = require("../../domains/skills");
5
+ const installation_1 = require("../../domains/installation");
6
+ const logger_1 = require("../../shared/logger");
7
+ function registerList(cli) {
8
+ cli
9
+ .command('list', 'List available and installed PM skills')
10
+ .action(() => {
11
+ const available = (0, skills_1.loadAvailableSkills)();
12
+ const installed = new Set((0, installation_1.getManifestEntries)().map(e => e.name));
13
+ logger_1.log.plain('\npkit — available skills\n');
14
+ for (const skill of available) {
15
+ const status = installed.has(skill.name) ? '✓ installed' : ' available';
16
+ // Trim description to 60 chars for display
17
+ const desc = skill.meta.description.replace(/\s+/g, ' ').slice(0, 60);
18
+ logger_1.log.plain(` [${status}] ${skill.name.padEnd(28)} ${desc}...`);
19
+ }
20
+ const installedCount = available.filter(s => installed.has(s.name)).length;
21
+ logger_1.log.plain(`\n${installedCount}/${available.length} skills installed`);
22
+ logger_1.log.plain('Install with: pkit install');
23
+ });
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,MAAM,EAAE,wCAAwC,CAAC;SACzD,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"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerRemove(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,QA4BtC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerRemove = registerRemove;
4
+ const installation_1 = require("../../domains/installation");
5
+ const prompts_1 = require("../../domains/ui/prompts");
6
+ const logger_1 = require("../../shared/logger");
7
+ function registerRemove(cli) {
8
+ cli
9
+ .command('remove [...skills]', 'Remove installed PM skills')
10
+ .option('-y, --yes', 'Skip confirmation prompt')
11
+ .action(async (skills, opts) => {
12
+ (0, prompts_1.intro)('pkit — removing skills');
13
+ // If no skills named, prompt to pick from installed
14
+ let toRemove = skills;
15
+ if (toRemove.length === 0) {
16
+ const installedNames = [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
17
+ if (installedNames.length === 0) {
18
+ logger_1.log.warn('No skills installed.');
19
+ return;
20
+ }
21
+ const selected = await (0, prompts_1.promptSkillSelection)(installedNames);
22
+ if (!selected)
23
+ return;
24
+ toRemove = selected;
25
+ }
26
+ if (!opts.yes) {
27
+ const ok = await (0, prompts_1.promptConfirm)(`Remove ${toRemove.join(', ')}?`);
28
+ if (!ok) {
29
+ logger_1.log.info('Cancelled.');
30
+ return;
31
+ }
32
+ }
33
+ await (0, installation_1.removeSkills)(toRemove);
34
+ (0, prompts_1.outro)('Done.');
35
+ });
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/remove/index.ts"],"names":[],"mappings":";;AAOA,wCA4BC;AAlCD,6DAA8E;AAC9E,sDAA6F;AAC7F,gDAA0C;AAI1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,oBAAoB,EAAE,4BAA4B,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAgB,EAAE,EAAE;QACnD,IAAA,eAAK,EAAC,wBAAwB,CAAC,CAAC;QAEhC,oDAAoD;QACpD,IAAI,QAAQ,GAAG,MAAM,CAAC;QACtB,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"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from 'cac';
2
+ export declare function registerUpdate(cli: CAC): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,QA0BtC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerUpdate = registerUpdate;
4
+ const installation_1 = require("../../domains/installation");
5
+ const prompts_1 = require("../../domains/ui/prompts");
6
+ const logger_1 = require("../../shared/logger");
7
+ function registerUpdate(cli) {
8
+ cli
9
+ .command('update [...skills]', 'Update installed PM skills to latest version')
10
+ .option('--tool <tool>', 'Target tool: claude, antigravity, opencode, all')
11
+ .option('--scope <scope>', 'Scope: global or project', { default: 'global' })
12
+ .action(async (skills, opts) => {
13
+ (0, prompts_1.intro)('pkit — updating skills');
14
+ // Default: update all installed skills
15
+ const toUpdate = skills.length
16
+ ? skills
17
+ : [...new Set((0, installation_1.getManifestEntries)().map(e => e.name))];
18
+ if (toUpdate.length === 0) {
19
+ logger_1.log.warn('No skills installed. Run: pkit install');
20
+ return;
21
+ }
22
+ await (0, installation_1.updateSkills)(toUpdate, {
23
+ tools: opts.tool ?? 'all',
24
+ scope: opts.scope,
25
+ force: true,
26
+ });
27
+ (0, prompts_1.outro)('Skills updated.');
28
+ });
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":";;AAQA,wCA0BC;AAjCD,6DAA8E;AAC9E,sDAAwD;AACxD,gDAA0C;AAK1C,SAAgB,cAAc,CAAC,GAAQ;IACrC,GAAG;SACA,OAAO,CAAC,oBAAoB,EAAE,8CAA8C,CAAC;SAC7E,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;SACZ,CAAC,CAAC;QAEH,IAAA,eAAK,EAAC,iBAAiB,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ProductKitConfig {
2
+ defaultScope: 'global' | 'project';
3
+ toolPaths: {
4
+ claude: string;
5
+ antigravity: string;
6
+ opencode: string;
7
+ };
8
+ }
9
+ export declare function getConfig(): ProductKitConfig;
10
+ export declare function setConfigValue(key: string, value: string): void;
11
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../../src/domains/config/config-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEnC,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAWD,wBAAgB,SAAS,IAAI,gBAAgB,CAQ5C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAe/D"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfig = getConfig;
4
+ exports.setConfigValue = setConfigValue;
5
+ const fs_1 = require("fs");
6
+ const fs_extra_1 = require("fs-extra");
7
+ const path_1 = require("path");
8
+ const paths_1 = require("../../shared/paths");
9
+ const DEFAULT_CONFIG = {
10
+ defaultScope: 'global',
11
+ toolPaths: {
12
+ claude: paths_1.DEFAULT_TOOL_PATHS.claude,
13
+ antigravity: paths_1.DEFAULT_TOOL_PATHS.antigravity,
14
+ opencode: paths_1.DEFAULT_TOOL_PATHS.opencode,
15
+ },
16
+ };
17
+ function getConfig() {
18
+ if (!(0, fs_1.existsSync)(paths_1.CONFIG_PATH))
19
+ return { ...DEFAULT_CONFIG };
20
+ try {
21
+ const raw = JSON.parse((0, fs_1.readFileSync)(paths_1.CONFIG_PATH, 'utf8'));
22
+ return { ...DEFAULT_CONFIG, ...raw, toolPaths: { ...DEFAULT_CONFIG.toolPaths, ...raw.toolPaths } };
23
+ }
24
+ catch {
25
+ return { ...DEFAULT_CONFIG };
26
+ }
27
+ }
28
+ function setConfigValue(key, value) {
29
+ const config = getConfig();
30
+ // Support dot notation: "toolPaths.antigravity"
31
+ if (key.startsWith('toolPaths.')) {
32
+ const tool = key.split('.')[1];
33
+ if (tool in config.toolPaths)
34
+ config.toolPaths[tool] = value;
35
+ else
36
+ throw new Error(`Unknown tool path key: ${tool}`);
37
+ }
38
+ else if (key === 'defaultScope') {
39
+ if (value !== 'global' && value !== 'project')
40
+ throw new Error('defaultScope must be global or project');
41
+ config.defaultScope = value;
42
+ }
43
+ else {
44
+ throw new Error(`Unknown config key: ${key}. Valid keys: defaultScope, toolPaths.claude, toolPaths.antigravity, toolPaths.opencode`);
45
+ }
46
+ (0, fs_extra_1.ensureDirSync)((0, path_1.dirname)(paths_1.CONFIG_PATH));
47
+ (0, fs_1.writeFileSync)(paths_1.CONFIG_PATH, JSON.stringify(config, null, 2));
48
+ }
49
+ //# sourceMappingURL=config-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../../src/domains/config/config-store.ts"],"names":[],"mappings":";;AAwBA,8BAQC;AAED,wCAeC;AAjDD,2BAA6D;AAC7D,uCAAyC;AACzC,+BAA+B;AAC/B,8CAAqE;AAYrE,MAAM,cAAc,GAAqB;IACvC,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE;QACT,MAAM,EAAE,0BAAkB,CAAC,MAAM;QACjC,WAAW,EAAE,0BAAkB,CAAC,WAAW;QAC3C,QAAQ,EAAE,0BAAkB,CAAC,QAAQ;KACtC;CACF,CAAC;AAEF,SAAgB,SAAS;IACvB,IAAI,CAAC,IAAA,eAAU,EAAC,mBAAW,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,mBAAW,EAAE,MAAM,CAAC,CAA8B,CAAC;QACvF,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,GAAW,EAAE,KAAa;IACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,gDAAgD;IAChD,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwC,CAAC;QACtE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;YACxD,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACzG,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,yFAAyF,CAAC,CAAC;IACvI,CAAC;IACD,IAAA,wBAAa,EAAC,IAAA,cAAO,EAAC,mBAAW,CAAC,CAAC,CAAC;IACpC,IAAA,kBAAa,EAAC,mBAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getConfig, setConfigValue } from './config-store';
2
+ export type { ProductKitConfig } from './config-store';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setConfigValue = exports.getConfig = void 0;
4
+ var config_store_1 = require("./config-store");
5
+ Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_store_1.getConfig; } });
6
+ Object.defineProperty(exports, "setConfigValue", { enumerable: true, get: function () { return config_store_1.setConfigValue; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/config/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2D;AAAlD,yGAAA,SAAS,OAAA;AAAE,8GAAA,cAAc,OAAA"}
@@ -0,0 +1,12 @@
1
+ export type CopyResult = {
2
+ status: 'installed';
3
+ destPath: string;
4
+ } | {
5
+ status: 'skipped';
6
+ reason: string;
7
+ } | {
8
+ status: 'failed';
9
+ error: string;
10
+ };
11
+ export declare function copySkillDir(srcDir: string, destBase: string, force: boolean): Promise<CopyResult>;
12
+ //# sourceMappingURL=copy-skill-files.d.ts.map
@@ -0,0 +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,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC,CAqBrB"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.copySkillDir = copySkillDir;
4
+ const fs_1 = require("fs");
5
+ const fs_extra_1 = require("fs-extra");
6
+ const path_1 = require("path");
7
+ // Safely copies a skill directory to destBase/skillName.
8
+ // Validates paths to prevent directory traversal attacks.
9
+ async function copySkillDir(srcDir, destBase, force) {
10
+ const skillName = (0, path_1.basename)(srcDir);
11
+ // Path traversal guard: resolved dest must be inside destBase
12
+ const destSkillDir = (0, path_1.join)(destBase, skillName);
13
+ if (!(0, path_1.resolve)(destSkillDir).startsWith((0, path_1.resolve)(destBase))) {
14
+ return { status: 'failed', error: `Path traversal attempt blocked for: ${skillName}` };
15
+ }
16
+ if ((0, fs_1.existsSync)(destSkillDir) && !force) {
17
+ return { status: 'skipped', reason: 'already installed (use --force to overwrite)' };
18
+ }
19
+ try {
20
+ await (0, fs_extra_1.ensureDir)(destBase);
21
+ if ((0, fs_1.existsSync)(destSkillDir) && force)
22
+ await (0, fs_extra_1.remove)(destSkillDir);
23
+ await (0, fs_extra_1.copy)(srcDir, destSkillDir, { overwrite: force });
24
+ return { status: 'installed', destPath: destSkillDir };
25
+ }
26
+ catch (err) {
27
+ return { status: 'failed', error: err instanceof Error ? err.message : String(err) };
28
+ }
29
+ }
30
+ //# sourceMappingURL=copy-skill-files.js.map
@@ -0,0 +1 @@
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,+BAA+C;AAO/C,yDAAyD;AACzD,0DAA0D;AACnD,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,QAAgB,EAChB,KAAc;IAEd,MAAM,SAAS,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,CAAC;IAEnC,8DAA8D;IAC9D,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC,UAAU,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,SAAS,EAAE,EAAE,CAAC;IACzF,CAAC;IAED,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,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,YAAY,CAAC,IAAI,KAAK;YAAE,MAAM,IAAA,iBAAM,EAAC,YAAY,CAAC,CAAC;QAClE,MAAM,IAAA,eAAI,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzD,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"}
@@ -0,0 +1,7 @@
1
+ import { getManifestEntries } from './manifest-manager';
2
+ import type { InstallOptions } from '../../types';
3
+ export declare function installSkills(names: string[], opts: InstallOptions): Promise<void>;
4
+ export declare function removeSkills(names: string[]): Promise<void>;
5
+ export declare function updateSkills(names: string[], opts: InstallOptions): Promise<void>;
6
+ export { getManifestEntries };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,EAAE,MAAM,aAAa,CAAC;AAWlD,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;AAGD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}