@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.
- package/README.md +42 -0
- package/bin/pkit.js +2 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +29 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/commands/config/index.d.ts +3 -0
- package/dist/commands/config/index.d.ts.map +1 -0
- package/dist/commands/config/index.js +34 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +94 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/install/index.d.ts +3 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +51 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/list/index.d.ts +3 -0
- package/dist/commands/list/index.d.ts.map +1 -0
- package/dist/commands/list/index.js +25 -0
- package/dist/commands/list/index.js.map +1 -0
- package/dist/commands/remove/index.d.ts +3 -0
- package/dist/commands/remove/index.d.ts.map +1 -0
- package/dist/commands/remove/index.js +37 -0
- package/dist/commands/remove/index.js.map +1 -0
- package/dist/commands/update/index.d.ts +3 -0
- package/dist/commands/update/index.d.ts.map +1 -0
- package/dist/commands/update/index.js +30 -0
- package/dist/commands/update/index.js.map +1 -0
- package/dist/domains/config/config-store.d.ts +11 -0
- package/dist/domains/config/config-store.d.ts.map +1 -0
- package/dist/domains/config/config-store.js +49 -0
- package/dist/domains/config/config-store.js.map +1 -0
- package/dist/domains/config/index.d.ts +3 -0
- package/dist/domains/config/index.d.ts.map +1 -0
- package/dist/domains/config/index.js +7 -0
- package/dist/domains/config/index.js.map +1 -0
- package/dist/domains/installation/copy-skill-files.d.ts +12 -0
- package/dist/domains/installation/copy-skill-files.d.ts.map +1 -0
- package/dist/domains/installation/copy-skill-files.js +30 -0
- package/dist/domains/installation/copy-skill-files.js.map +1 -0
- package/dist/domains/installation/index.d.ts +7 -0
- package/dist/domains/installation/index.d.ts.map +1 -0
- package/dist/domains/installation/index.js +116 -0
- package/dist/domains/installation/index.js.map +1 -0
- package/dist/domains/installation/manifest-manager.d.ts +9 -0
- package/dist/domains/installation/manifest-manager.d.ts.map +1 -0
- package/dist/domains/installation/manifest-manager.js +49 -0
- package/dist/domains/installation/manifest-manager.js.map +1 -0
- package/dist/domains/installation/resolve-paths.d.ts +3 -0
- package/dist/domains/installation/resolve-paths.d.ts.map +1 -0
- package/dist/domains/installation/resolve-paths.js +40 -0
- package/dist/domains/installation/resolve-paths.js.map +1 -0
- package/dist/domains/skills/index.d.ts +3 -0
- package/dist/domains/skills/index.d.ts.map +1 -0
- package/dist/domains/skills/index.js +10 -0
- package/dist/domains/skills/index.js.map +1 -0
- package/dist/domains/skills/skill-loader.d.ts +4 -0
- package/dist/domains/skills/skill-loader.d.ts.map +1 -0
- package/dist/domains/skills/skill-loader.js +37 -0
- package/dist/domains/skills/skill-loader.js.map +1 -0
- package/dist/domains/skills/skill-validator.d.ts +3 -0
- package/dist/domains/skills/skill-validator.d.ts.map +1 -0
- package/dist/domains/skills/skill-validator.js +39 -0
- package/dist/domains/skills/skill-validator.js.map +1 -0
- package/dist/domains/ui/prompts.d.ts +15 -0
- package/dist/domains/ui/prompts.d.ts.map +1 -0
- package/dist/domains/ui/prompts.js +79 -0
- package/dist/domains/ui/prompts.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/skill-schema.d.ts +8 -0
- package/dist/schemas/skill-schema.d.ts.map +1 -0
- package/dist/schemas/skill-schema.js +16 -0
- package/dist/schemas/skill-schema.js.map +1 -0
- package/dist/shared/logger.d.ts +8 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +20 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/paths.d.ts +15 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +28 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +50 -0
- package/skills/pkit:brainstorm/SKILL.md +93 -0
- package/skills/pkit:competitive-analysis/SKILL.md +103 -0
- package/skills/pkit:make-prd/SKILL.md +69 -0
- package/skills/pkit:make-prd/templates/prd-template.md +108 -0
- package/skills/pkit:roadmap-planner/SKILL.md +101 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getManifestEntries = void 0;
|
|
37
|
+
exports.installSkills = installSkills;
|
|
38
|
+
exports.removeSkills = removeSkills;
|
|
39
|
+
exports.updateSkills = updateSkills;
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const skills_1 = require("../skills");
|
|
43
|
+
const resolve_paths_1 = require("./resolve-paths");
|
|
44
|
+
const copy_skill_files_1 = require("./copy-skill-files");
|
|
45
|
+
const manifest_manager_1 = require("./manifest-manager");
|
|
46
|
+
Object.defineProperty(exports, "getManifestEntries", { enumerable: true, get: function () { return manifest_manager_1.getManifestEntries; } });
|
|
47
|
+
const logger_1 = require("../../shared/logger");
|
|
48
|
+
// Read current package version for manifest tracking
|
|
49
|
+
function getPkgVersion() {
|
|
50
|
+
try {
|
|
51
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', '..', '..', 'package.json'), 'utf8'));
|
|
52
|
+
return pkg.version;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return '0.0.0';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Install one or more skills. If names is empty, installs all available.
|
|
59
|
+
async function installSkills(names, opts) {
|
|
60
|
+
const available = (0, skills_1.loadAvailableSkills)();
|
|
61
|
+
const toInstall = names.length
|
|
62
|
+
? available.filter(s => names.includes(s.name))
|
|
63
|
+
: available;
|
|
64
|
+
if (toInstall.length === 0) {
|
|
65
|
+
logger_1.log.warn(names.length ? `No skills found matching: ${names.join(', ')}` : 'No skills available to install');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const destPaths = (0, resolve_paths_1.resolveTargetPaths)(opts.tools, opts.scope);
|
|
69
|
+
const pkgVersion = getPkgVersion();
|
|
70
|
+
for (const skill of toInstall) {
|
|
71
|
+
for (const destBase of destPaths) {
|
|
72
|
+
const result = await (0, copy_skill_files_1.copySkillDir)(skill.dirPath, destBase, opts.force ?? false);
|
|
73
|
+
if (result.status === 'installed') {
|
|
74
|
+
logger_1.log.success(`Installed: ${skill.name} → ${result.destPath}`);
|
|
75
|
+
(0, manifest_manager_1.addManifestEntry)({
|
|
76
|
+
name: skill.name,
|
|
77
|
+
tool: opts.tools,
|
|
78
|
+
destPath: result.destPath,
|
|
79
|
+
installedAt: new Date().toISOString(),
|
|
80
|
+
pkgVersion,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else if (result.status === 'skipped') {
|
|
84
|
+
logger_1.log.warn(`Skipped: ${skill.name} — ${result.reason}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
logger_1.log.error(`Failed: ${skill.name} — ${result.error}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Remove skills by name, deleting files from all recorded install paths
|
|
93
|
+
async function removeSkills(names) {
|
|
94
|
+
const { remove } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
|
|
95
|
+
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)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Update = reinstall with force, comparing pkg version
|
|
113
|
+
async function updateSkills(names, opts) {
|
|
114
|
+
await installSkills(names, { ...opts, force: true });
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/installation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ManifestEntry } from '../../types';
|
|
2
|
+
type Manifest = ManifestEntry[];
|
|
3
|
+
export declare function addManifestEntry(entry: ManifestEntry): void;
|
|
4
|
+
export declare function removeManifestEntries(skillName: string): ManifestEntry[];
|
|
5
|
+
export declare function getManifestEntries(): Manifest;
|
|
6
|
+
export declare function isSkillInstalled(skillName: string): boolean;
|
|
7
|
+
export declare function getInstalledVersion(): string | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=manifest-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-manager.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/manifest-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,QAAQ,GAAG,aAAa,EAAE,CAAC;AAgBhC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAO3D;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAKxE;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAGD,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAGnD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addManifestEntry = addManifestEntry;
|
|
4
|
+
exports.removeManifestEntries = removeManifestEntries;
|
|
5
|
+
exports.getManifestEntries = getManifestEntries;
|
|
6
|
+
exports.isSkillInstalled = isSkillInstalled;
|
|
7
|
+
exports.getInstalledVersion = getInstalledVersion;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const fs_extra_1 = require("fs-extra");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const paths_1 = require("../../shared/paths");
|
|
12
|
+
function readManifest() {
|
|
13
|
+
if (!(0, fs_1.existsSync)(paths_1.MANIFEST_PATH))
|
|
14
|
+
return [];
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse((0, fs_1.readFileSync)(paths_1.MANIFEST_PATH, 'utf8'));
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function writeManifest(manifest) {
|
|
23
|
+
(0, fs_extra_1.ensureDirSync)((0, path_1.dirname)(paths_1.MANIFEST_PATH));
|
|
24
|
+
(0, fs_1.writeFileSync)(paths_1.MANIFEST_PATH, JSON.stringify(manifest, null, 2));
|
|
25
|
+
}
|
|
26
|
+
function addManifestEntry(entry) {
|
|
27
|
+
const manifest = readManifest();
|
|
28
|
+
// Remove any existing entry for same skill + tool + dest to avoid duplicates
|
|
29
|
+
const filtered = manifest.filter(e => !(e.name === entry.name && e.tool === entry.tool && e.destPath === entry.destPath));
|
|
30
|
+
writeManifest([...filtered, entry]);
|
|
31
|
+
}
|
|
32
|
+
function removeManifestEntries(skillName) {
|
|
33
|
+
const manifest = readManifest();
|
|
34
|
+
const removed = manifest.filter(e => e.name === skillName);
|
|
35
|
+
writeManifest(manifest.filter(e => e.name !== skillName));
|
|
36
|
+
return removed;
|
|
37
|
+
}
|
|
38
|
+
function getManifestEntries() {
|
|
39
|
+
return readManifest();
|
|
40
|
+
}
|
|
41
|
+
function isSkillInstalled(skillName) {
|
|
42
|
+
return readManifest().some(e => e.name === skillName);
|
|
43
|
+
}
|
|
44
|
+
// Returns the package version recorded when skills were last installed
|
|
45
|
+
function getInstalledVersion() {
|
|
46
|
+
const manifest = readManifest();
|
|
47
|
+
return manifest[0]?.pkgVersion ?? null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=manifest-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-manager.js","sourceRoot":"","sources":["../../../src/domains/installation/manifest-manager.ts"],"names":[],"mappings":";;AAsBA,4CAOC;AAED,sDAKC;AAED,gDAEC;AAED,4CAEC;AAGD,kDAGC;AAlDD,2BAA6D;AAC7D,uCAAyC;AACzC,+BAA+B;AAC/B,8CAAmD;AAKnD,SAAS,YAAY;IACnB,IAAI,CAAC,IAAA,eAAU,EAAC,qBAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,qBAAa,EAAE,MAAM,CAAC,CAAa,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAkB;IACvC,IAAA,wBAAa,EAAC,IAAA,cAAO,EAAC,qBAAa,CAAC,CAAC,CAAC;IACtC,IAAA,kBAAa,EAAC,qBAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAoB;IACnD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CACxF,CAAC;IACF,aAAa,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC3D,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,OAAO,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,uEAAuE;AACvE,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-paths.d.ts","sourceRoot":"","sources":["../../../src/domains/installation/resolve-paths.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CA0BhF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveTargetPaths = resolveTargetPaths;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const paths_1 = require("../../shared/paths");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
// Returns the list of destination base directories for a given tool + scope combo.
|
|
8
|
+
// "all" expands to claude + antigravity (opencode shares the claude path).
|
|
9
|
+
function resolveTargetPaths(tool, scope) {
|
|
10
|
+
const config = (0, config_1.getConfig)();
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
if (scope === 'global') {
|
|
13
|
+
if (tool === 'claude')
|
|
14
|
+
return [config.toolPaths.claude];
|
|
15
|
+
if (tool === 'opencode')
|
|
16
|
+
return [config.toolPaths.opencode]; // same as claude by default
|
|
17
|
+
if (tool === 'antigravity')
|
|
18
|
+
return [config.toolPaths.antigravity];
|
|
19
|
+
// "all" — deduplicate in case claude + opencode paths are identical
|
|
20
|
+
const paths = [config.toolPaths.claude, config.toolPaths.antigravity];
|
|
21
|
+
if (config.toolPaths.opencode !== config.toolPaths.claude) {
|
|
22
|
+
paths.push(config.toolPaths.opencode);
|
|
23
|
+
}
|
|
24
|
+
return [...new Set(paths)];
|
|
25
|
+
}
|
|
26
|
+
// Project scope
|
|
27
|
+
if (tool === 'claude')
|
|
28
|
+
return [(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.claude)];
|
|
29
|
+
if (tool === 'opencode')
|
|
30
|
+
return [(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.opencode)];
|
|
31
|
+
if (tool === 'antigravity')
|
|
32
|
+
return [(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.antigravity)];
|
|
33
|
+
// "all"
|
|
34
|
+
return [...new Set([
|
|
35
|
+
(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.claude),
|
|
36
|
+
(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.antigravity),
|
|
37
|
+
(0, path_1.join)(cwd, paths_1.PROJECT_TOOL_SEGMENTS.opencode),
|
|
38
|
+
])];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=resolve-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-paths.js","sourceRoot":"","sources":["../../../src/domains/installation/resolve-paths.ts"],"names":[],"mappings":";;AAOA,gDA0BC;AAjCD,+BAA4B;AAC5B,8CAA2D;AAC3D,sCAAsC;AAGtC,mFAAmF;AACnF,2EAA2E;AAC3E,SAAgB,kBAAkB,CAAC,IAAc,EAAE,KAAmB;IACpE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAA4B;QACzF,IAAI,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClE,oEAAoE;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;IAClF,QAAQ;IACR,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC;YACjB,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,MAAM,CAAC;YACvC,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,WAAW,CAAC;YAC5C,IAAA,WAAI,EAAC,GAAG,EAAE,6BAAqB,CAAC,QAAQ,CAAC;SAC1C,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/skills/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSkillContent = exports.findSkillByName = exports.loadAvailableSkills = void 0;
|
|
4
|
+
// Skills domain facade — public API for skill discovery
|
|
5
|
+
var skill_loader_1 = require("./skill-loader");
|
|
6
|
+
Object.defineProperty(exports, "loadAvailableSkills", { enumerable: true, get: function () { return skill_loader_1.loadAvailableSkills; } });
|
|
7
|
+
Object.defineProperty(exports, "findSkillByName", { enumerable: true, get: function () { return skill_loader_1.findSkillByName; } });
|
|
8
|
+
var skill_validator_1 = require("./skill-validator");
|
|
9
|
+
Object.defineProperty(exports, "validateSkillContent", { enumerable: true, get: function () { return skill_validator_1.validateSkillContent; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/skills/index.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,+CAAsE;AAA7D,mHAAA,mBAAmB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAC7C,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +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;AAGzC,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAsB7C;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadAvailableSkills = loadAvailableSkills;
|
|
4
|
+
exports.findSkillByName = findSkillByName;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const paths_1 = require("../../shared/paths");
|
|
8
|
+
const skill_validator_1 = require("./skill-validator");
|
|
9
|
+
// Loads all skills from the bundled skills/ directory
|
|
10
|
+
function loadAvailableSkills() {
|
|
11
|
+
if (!(0, fs_1.existsSync)(paths_1.PACKAGE_SKILLS_DIR))
|
|
12
|
+
return [];
|
|
13
|
+
const skills = [];
|
|
14
|
+
const entries = (0, fs_1.readdirSync)(paths_1.PACKAGE_SKILLS_DIR, { withFileTypes: true });
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
if (!entry.isDirectory())
|
|
17
|
+
continue;
|
|
18
|
+
const skillDir = (0, path_1.join)(paths_1.PACKAGE_SKILLS_DIR, entry.name);
|
|
19
|
+
const skillFile = (0, path_1.join)(skillDir, 'SKILL.md');
|
|
20
|
+
if (!(0, fs_1.existsSync)(skillFile))
|
|
21
|
+
continue;
|
|
22
|
+
try {
|
|
23
|
+
const content = (0, fs_1.readFileSync)(skillFile, 'utf8');
|
|
24
|
+
const meta = (0, skill_validator_1.validateSkillContent)(content, skillFile);
|
|
25
|
+
skills.push({ name: entry.name, dirPath: skillDir, meta });
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Skip invalid skills silently in production
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return skills;
|
|
32
|
+
}
|
|
33
|
+
// Find a single skill by name (directory name)
|
|
34
|
+
function findSkillByName(name) {
|
|
35
|
+
return loadAvailableSkills().find(s => s.name === name);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=skill-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../../src/domains/skills/skill-loader.ts"],"names":[],"mappings":";;AAOA,kDAsBC;AAGD,0CAEC;AAlCD,2BAA2D;AAC3D,+BAA4B;AAC5B,8CAAwD;AACxD,uDAAyD;AAGzD,sDAAsD;AACtD,SAAgB,mBAAmB;IACjC,IAAI,CAAC,IAAA,eAAU,EAAC,0BAAkB,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,0BAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,0BAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC;YAAE,SAAS;QAErC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,IAAA,sCAAoB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+CAA+C;AAC/C,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-validator.d.ts","sourceRoot":"","sources":["../../../src/domains/skills/skill-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAmB7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAejF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSkillContent = validateSkillContent;
|
|
4
|
+
const skill_schema_1 = require("../../schemas/skill-schema");
|
|
5
|
+
// Parses YAML frontmatter from SKILL.md content (simple regex, no yaml dep needed)
|
|
6
|
+
function parseFrontmatter(content) {
|
|
7
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
8
|
+
if (!match)
|
|
9
|
+
return null;
|
|
10
|
+
const result = {};
|
|
11
|
+
for (const line of match[1].split('\n')) {
|
|
12
|
+
const colonIdx = line.indexOf(':');
|
|
13
|
+
if (colonIdx === -1)
|
|
14
|
+
continue;
|
|
15
|
+
const key = line.slice(0, colonIdx).trim();
|
|
16
|
+
// Handle multi-line values (>) by collapsing them
|
|
17
|
+
const val = line.slice(colonIdx + 1).trim().replace(/^["']|["']$/g, '').trim();
|
|
18
|
+
if (key && val)
|
|
19
|
+
result[key] = val;
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
// Validates and returns parsed SKILL.md frontmatter, throws on invalid
|
|
24
|
+
function validateSkillContent(content, filePath) {
|
|
25
|
+
const raw = parseFrontmatter(content);
|
|
26
|
+
if (!raw)
|
|
27
|
+
throw new Error(`No frontmatter found in ${filePath}`);
|
|
28
|
+
// For multi-line description (> block), collect continuation lines
|
|
29
|
+
const descMatch = content.match(/description:\s*>\n([\s\S]*?)(?=\n\w|\n---)/);
|
|
30
|
+
if (descMatch) {
|
|
31
|
+
raw['description'] = descMatch[1].replace(/\n\s*/g, ' ').trim();
|
|
32
|
+
}
|
|
33
|
+
const parsed = skill_schema_1.SkillSchema.safeParse(raw);
|
|
34
|
+
if (!parsed.success) {
|
|
35
|
+
throw new Error(`Invalid SKILL.md at ${filePath}: ${parsed.error.message}`);
|
|
36
|
+
}
|
|
37
|
+
return parsed.data;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=skill-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-validator.js","sourceRoot":"","sources":["../../../src/domains/skills/skill-validator.ts"],"names":[],"mappings":";;AAoBA,oDAeC;AAnCD,6DAAyD;AAGzD,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,GAAG,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,SAAgB,oBAAoB,CAAC,OAAe,EAAE,QAAgB;IACpE,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IAEjE,mEAAmE;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC9E,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,0BAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import type { ToolName } from '../../types';
|
|
3
|
+
export declare function promptToolSelection(): Promise<ToolName | null>;
|
|
4
|
+
export declare function promptSkillSelection(skillNames: string[]): Promise<string[] | null>;
|
|
5
|
+
export declare function promptConfirm(message: string): Promise<boolean>;
|
|
6
|
+
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
|
+
message: (message?: string | string[], { symbol, secondarySymbol, output, spacing, withGuide, }?: p.LogMessageOptions) => void;
|
|
8
|
+
info: (message: string, opts?: p.LogMessageOptions) => void;
|
|
9
|
+
success: (message: string, opts?: p.LogMessageOptions) => void;
|
|
10
|
+
step: (message: string, opts?: p.LogMessageOptions) => void;
|
|
11
|
+
warn: (message: string, opts?: p.LogMessageOptions) => void;
|
|
12
|
+
warning: (message: string, opts?: p.LogMessageOptions) => void;
|
|
13
|
+
error: (message: string, opts?: p.LogMessageOptions) => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +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;AAG5C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAYpE;AAGD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAQzF;AAGD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIrE;AAED,eAAO,MAAQ,KAAK,oDAAE,KAAK,sDAAE,OAAO,wIAAO,QAAQ;qBACo2K,CAAC,6EAA6E,CAAC;gCAA8D,CAAC;mCAAiE,CAAC;gCAA8D,CAAC;gCAA8D,CAAC;mCAAoG,CAAC;iCAA+D,CAAC;CADj1L,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.clackLog = exports.spinner = exports.outro = exports.intro = void 0;
|
|
37
|
+
exports.promptToolSelection = promptToolSelection;
|
|
38
|
+
exports.promptSkillSelection = promptSkillSelection;
|
|
39
|
+
exports.promptConfirm = promptConfirm;
|
|
40
|
+
const p = __importStar(require("@clack/prompts"));
|
|
41
|
+
// Interactive multi-select for tool choice when --tool not provided
|
|
42
|
+
async function promptToolSelection() {
|
|
43
|
+
const selected = await p.select({
|
|
44
|
+
message: 'Install skills to which AI tool?',
|
|
45
|
+
options: [
|
|
46
|
+
{ value: 'all', label: 'All tools', hint: 'Claude Code + Antigravity (recommended)' },
|
|
47
|
+
{ value: 'claude', label: 'Claude Code', hint: 'Also covers OpenCode (~/.claude/skills/)' },
|
|
48
|
+
{ value: 'antigravity', label: 'Antigravity', hint: '~/.gemini/antigravity/skills/' },
|
|
49
|
+
{ value: 'opencode', label: 'OpenCode only', hint: '~/.config/opencode/skills/' },
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
if (p.isCancel(selected)) {
|
|
53
|
+
p.cancel('Cancelled.');
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return selected;
|
|
57
|
+
}
|
|
58
|
+
// Interactive multi-select for skill names when none provided
|
|
59
|
+
async function promptSkillSelection(skillNames) {
|
|
60
|
+
const selected = await p.multiselect({
|
|
61
|
+
message: 'Select skills to install:',
|
|
62
|
+
options: skillNames.map(n => ({ value: n, label: n })),
|
|
63
|
+
required: true,
|
|
64
|
+
});
|
|
65
|
+
if (p.isCancel(selected)) {
|
|
66
|
+
p.cancel('Cancelled.');
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return selected;
|
|
70
|
+
}
|
|
71
|
+
// Confirm destructive actions
|
|
72
|
+
async function promptConfirm(message) {
|
|
73
|
+
const ok = await p.confirm({ message });
|
|
74
|
+
if (p.isCancel(ok))
|
|
75
|
+
return false;
|
|
76
|
+
return ok;
|
|
77
|
+
}
|
|
78
|
+
exports.intro = p.intro, exports.outro = p.outro, exports.spinner = p.spinner, exports.clackLog = p.log;
|
|
79
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/domains/ui/prompts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,kDAYC;AAGD,oDAQC;AAGD,sCAIC;AAlCD,kDAAoC;AAGpC,oEAAoE;AAC7D,KAAK,UAAU,mBAAmB;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,CAAW;QACxC,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,yCAAyC,EAAE;YACrF,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,0CAA0C,EAAE;YAC3F,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,+BAA+B,EAAE;YACrF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,4BAA4B,EAAE;SAClF;KACF,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAClE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8DAA8D;AACvD,KAAK,UAAU,oBAAoB,CAAC,UAAoB;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,WAAW,CAAS;QAC3C,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAClE,OAAO,QAAoB,CAAC;AAC9B,CAAC;AAED,8BAA8B;AACvB,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,EAAa,CAAC;AACvB,CAAC;AAEc,aAAK,GAAoC,CAAC,QAAnC,aAAK,GAA6B,CAAC,QAA5B,eAAO,GAAoB,CAAC,UAAd,gBAAQ,GAAK,CAAC,KAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const setup_1 = require("./cli/setup");
|
|
4
|
+
const install_1 = require("./commands/install");
|
|
5
|
+
const list_1 = require("./commands/list");
|
|
6
|
+
const update_1 = require("./commands/update");
|
|
7
|
+
const remove_1 = require("./commands/remove");
|
|
8
|
+
const config_1 = require("./commands/config");
|
|
9
|
+
const doctor_1 = require("./commands/doctor");
|
|
10
|
+
const cli = (0, setup_1.createCli)();
|
|
11
|
+
(0, install_1.registerInstall)(cli);
|
|
12
|
+
(0, list_1.registerList)(cli);
|
|
13
|
+
(0, update_1.registerUpdate)(cli);
|
|
14
|
+
(0, remove_1.registerRemove)(cli);
|
|
15
|
+
(0, config_1.registerConfig)(cli);
|
|
16
|
+
(0, doctor_1.registerDoctor)(cli);
|
|
17
|
+
// Show help if no command given
|
|
18
|
+
cli.on('command:*', () => {
|
|
19
|
+
console.error('Unknown command:', cli.args.join(' '));
|
|
20
|
+
cli.outputHelp();
|
|
21
|
+
process.exit(1);
|
|
22
|
+
});
|
|
23
|
+
cli.parse();
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const SkillSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
description: z.ZodString;
|
|
5
|
+
license: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export type SkillFrontmatter = z.infer<typeof SkillSchema>;
|
|
8
|
+
//# sourceMappingURL=skill-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/skill-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW;;;;iBAQtB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SkillSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Validates SKILL.md YAML frontmatter per agentskills.io spec
|
|
6
|
+
// Name: 1-64 chars, lowercase alphanumeric + hyphens + colons (pkit:name pattern)
|
|
7
|
+
exports.SkillSchema = zod_1.z.object({
|
|
8
|
+
name: zod_1.z
|
|
9
|
+
.string()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(64)
|
|
12
|
+
.regex(/^[a-z0-9:]+([:-][a-z0-9]+)*$/, 'Name must be lowercase alphanumeric with hyphens/colons'),
|
|
13
|
+
description: zod_1.z.string().min(1).max(1024),
|
|
14
|
+
license: zod_1.z.string().optional(),
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=skill-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-schema.js","sourceRoot":"","sources":["../../src/schemas/skill-schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,8DAA8D;AAC9D,kFAAkF;AACrE,QAAA,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,OAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,KAAK,CAAC,8BAA8B,EAAE,yDAAyD,CAAC;IACnG,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACxC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;gBACF,MAAM;mBACH,MAAM;gBACT,MAAM;iBACL,MAAM;iBACN,MAAM;CACpB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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.log = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
// Respect --json flag to suppress styled output for scripting
|
|
9
|
+
const isJson = process.argv.includes('--json');
|
|
10
|
+
exports.log = {
|
|
11
|
+
info: (msg) => { if (!isJson)
|
|
12
|
+
console.log(chalk_1.default.blue('ℹ'), msg); },
|
|
13
|
+
success: (msg) => { if (!isJson)
|
|
14
|
+
console.log(chalk_1.default.green('✓'), msg); },
|
|
15
|
+
warn: (msg) => { if (!isJson)
|
|
16
|
+
console.log(chalk_1.default.yellow('⚠'), msg); },
|
|
17
|
+
error: (msg) => console.error(chalk_1.default.red('✗'), msg),
|
|
18
|
+
plain: (msg) => console.log(msg),
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,8DAA8D;AAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAElC,QAAA,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC1D,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const PACKAGE_SKILLS_DIR: string;
|
|
2
|
+
export declare const CONFIG_DIR: string;
|
|
3
|
+
export declare const MANIFEST_PATH: string;
|
|
4
|
+
export declare const CONFIG_PATH: string;
|
|
5
|
+
export declare const DEFAULT_TOOL_PATHS: {
|
|
6
|
+
readonly claude: string;
|
|
7
|
+
readonly opencode: string;
|
|
8
|
+
readonly antigravity: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const PROJECT_TOOL_SEGMENTS: {
|
|
11
|
+
readonly claude: string;
|
|
12
|
+
readonly opencode: string;
|
|
13
|
+
readonly antigravity: string;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/shared/paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,QAAwC,CAAC;AAGxE,eAAO,MAAM,UAAU,QAAuC,CAAC;AAC/D,eAAO,MAAM,aAAa,QAAoC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAAkC,CAAC;AAG3D,eAAO,MAAM,kBAAkB;;;;CAOrB,CAAC;AAGX,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC"}
|