skillpkg-cli 0.2.0 → 0.4.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +67 -28
- package/dist/cli.js.map +1 -1
- package/dist/commands/deps.d.ts +17 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +234 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +77 -107
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +197 -142
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +47 -17
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/migrate.d.ts +10 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +122 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +180 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +105 -127
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +56 -12
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/commands/init.js
CHANGED
|
@@ -1,46 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* init command -
|
|
2
|
+
* init command - Initialize a skillpkg project
|
|
3
|
+
*
|
|
4
|
+
* v2.0: Creates skillpkg.json for project configuration
|
|
5
|
+
* For creating skills, use SKILL.md format directly
|
|
3
6
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { writeFile } from 'fs/promises';
|
|
6
|
-
import { join, basename } from 'path';
|
|
7
|
+
import { basename } from 'path';
|
|
7
8
|
import inquirer from 'inquirer';
|
|
8
|
-
import {
|
|
9
|
+
import { createConfigManager } from 'skillpkg-core';
|
|
9
10
|
import { logger, colors, withSpinner } from '../ui/index.js';
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* Get default project name from directory
|
|
12
13
|
*/
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
name,
|
|
17
|
-
version: '1.0.0',
|
|
18
|
-
description: 'A skillpkg skill',
|
|
19
|
-
instructions: `# ${name}
|
|
20
|
-
|
|
21
|
-
## Overview
|
|
22
|
-
|
|
23
|
-
Describe what this skill does.
|
|
24
|
-
|
|
25
|
-
## Usage
|
|
26
|
-
|
|
27
|
-
Explain how to use this skill.
|
|
28
|
-
|
|
29
|
-
## Examples
|
|
30
|
-
|
|
31
|
-
Provide usage examples.
|
|
32
|
-
`,
|
|
33
|
-
};
|
|
14
|
+
function getDefaultProjectName() {
|
|
15
|
+
const dirName = basename(process.cwd());
|
|
16
|
+
return toKebabCase(dirName) || 'my-project';
|
|
34
17
|
}
|
|
35
18
|
/**
|
|
36
|
-
*
|
|
19
|
+
* Convert string to kebab-case
|
|
20
|
+
*/
|
|
21
|
+
function toKebabCase(str) {
|
|
22
|
+
return str
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
25
|
+
.replace(/^-|-$/g, '');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate project name
|
|
37
29
|
*/
|
|
38
30
|
function validateName(input) {
|
|
39
31
|
if (!input) {
|
|
40
32
|
return 'Name is required';
|
|
41
33
|
}
|
|
42
|
-
if (!/^[a-z][a-z0-9-]*[a-z0-9]$/.test(input)) {
|
|
43
|
-
return 'Name must be kebab-case (e.g., my-
|
|
34
|
+
if (!/^[a-z][a-z0-9-]*[a-z0-9]$/.test(input) && input.length >= 2) {
|
|
35
|
+
return 'Name must be kebab-case (e.g., my-project)';
|
|
44
36
|
}
|
|
45
37
|
if (input.length < 2 || input.length > 100) {
|
|
46
38
|
return 'Name must be between 2 and 100 characters';
|
|
@@ -52,110 +44,88 @@ function validateName(input) {
|
|
|
52
44
|
*/
|
|
53
45
|
export async function initCommand(options) {
|
|
54
46
|
const cwd = process.cwd();
|
|
55
|
-
const
|
|
56
|
-
// Check if
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
const configManager = createConfigManager();
|
|
48
|
+
// Check if skillpkg.json already exists
|
|
49
|
+
const existingConfig = await configManager.loadProjectConfig(cwd);
|
|
50
|
+
if (existingConfig) {
|
|
51
|
+
logger.error('skillpkg.json already exists in this directory');
|
|
52
|
+
logger.log(`Use ${colors.cyan('skillpkg install <skill>')} to add skills`);
|
|
59
53
|
process.exit(1);
|
|
60
54
|
}
|
|
61
|
-
let
|
|
55
|
+
let config;
|
|
62
56
|
if (options.yes) {
|
|
63
57
|
// Quick mode - use defaults
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
const projectName = options.name || getDefaultProjectName();
|
|
59
|
+
config = {
|
|
60
|
+
$schema: 'https://skillpkg.dev/schemas/skillpkg.json',
|
|
61
|
+
name: projectName,
|
|
62
|
+
skills: {},
|
|
63
|
+
sync_targets: {
|
|
64
|
+
'claude-code': true,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
logger.info(`Creating skillpkg.json with defaults (name: ${colors.cyan(projectName)})`);
|
|
67
68
|
}
|
|
68
69
|
else {
|
|
69
70
|
// Interactive mode
|
|
70
|
-
logger.header('
|
|
71
|
+
logger.header('Initialize skillpkg project');
|
|
72
|
+
logger.blank();
|
|
71
73
|
const answers = await inquirer.prompt([
|
|
72
74
|
{
|
|
73
75
|
type: 'input',
|
|
74
76
|
name: 'name',
|
|
75
|
-
message: '
|
|
76
|
-
default: options.name ||
|
|
77
|
+
message: 'Project name:',
|
|
78
|
+
default: options.name || getDefaultProjectName(),
|
|
77
79
|
validate: validateName,
|
|
78
80
|
},
|
|
79
|
-
{
|
|
80
|
-
type: 'input',
|
|
81
|
-
name: 'version',
|
|
82
|
-
message: 'Version:',
|
|
83
|
-
default: '1.0.0',
|
|
84
|
-
validate: (input) => {
|
|
85
|
-
if (!/^\d+\.\d+\.\d+/.test(input)) {
|
|
86
|
-
return 'Version must be semver (e.g., 1.0.0)';
|
|
87
|
-
}
|
|
88
|
-
return true;
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
type: 'input',
|
|
93
|
-
name: 'description',
|
|
94
|
-
message: 'Description:',
|
|
95
|
-
default: 'A skillpkg skill',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
type: 'input',
|
|
99
|
-
name: 'author',
|
|
100
|
-
message: 'Author:',
|
|
101
|
-
},
|
|
102
81
|
{
|
|
103
82
|
type: 'checkbox',
|
|
104
|
-
name: '
|
|
105
|
-
message: '
|
|
83
|
+
name: 'syncTargets',
|
|
84
|
+
message: 'Enable sync targets:',
|
|
106
85
|
choices: [
|
|
107
|
-
{ name: 'Claude Code', value: 'claude-code', checked: true },
|
|
108
|
-
{ name: 'Codex (
|
|
109
|
-
{ name: 'GitHub Copilot', value: 'copilot' },
|
|
110
|
-
{ name: 'Cline (
|
|
86
|
+
{ name: 'Claude Code (.claude/skills/)', value: 'claude-code', checked: true },
|
|
87
|
+
{ name: 'Codex (.codex/skills/)', value: 'codex' },
|
|
88
|
+
{ name: 'GitHub Copilot (.github/)', value: 'copilot' },
|
|
89
|
+
{ name: 'Cline (.cline/)', value: 'cline' },
|
|
111
90
|
],
|
|
112
91
|
},
|
|
113
92
|
]);
|
|
114
|
-
|
|
115
|
-
|
|
93
|
+
// Build sync_targets object
|
|
94
|
+
const syncTargets = {};
|
|
95
|
+
for (const target of answers.syncTargets) {
|
|
96
|
+
syncTargets[target] = true;
|
|
97
|
+
}
|
|
98
|
+
config = {
|
|
99
|
+
$schema: 'https://skillpkg.dev/schemas/skillpkg.json',
|
|
116
100
|
name: answers.name,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
...(answers.author && { author: answers.author }),
|
|
120
|
-
...(answers.platforms?.length > 0 && {
|
|
121
|
-
platforms: Object.fromEntries(answers.platforms.map((p) => [p, {}])),
|
|
122
|
-
}),
|
|
123
|
-
instructions: `# ${answers.name}
|
|
124
|
-
|
|
125
|
-
## Overview
|
|
126
|
-
|
|
127
|
-
${answers.description}
|
|
128
|
-
|
|
129
|
-
## Usage
|
|
130
|
-
|
|
131
|
-
Explain how to use this skill.
|
|
132
|
-
|
|
133
|
-
## Examples
|
|
134
|
-
|
|
135
|
-
Provide usage examples.
|
|
136
|
-
`,
|
|
101
|
+
skills: {},
|
|
102
|
+
sync_targets: syncTargets,
|
|
137
103
|
};
|
|
138
104
|
}
|
|
139
|
-
//
|
|
140
|
-
await withSpinner('Creating
|
|
141
|
-
|
|
142
|
-
|
|
105
|
+
// Initialize project
|
|
106
|
+
await withSpinner('Creating skillpkg.json', async () => {
|
|
107
|
+
await configManager.initProject(cwd, config.name);
|
|
108
|
+
// Update with full config (including sync_targets)
|
|
109
|
+
const loaded = await configManager.loadProjectConfig(cwd);
|
|
110
|
+
if (loaded) {
|
|
111
|
+
loaded.sync_targets = config.sync_targets;
|
|
112
|
+
await configManager.saveProjectConfig(cwd, loaded);
|
|
113
|
+
}
|
|
143
114
|
});
|
|
144
115
|
logger.blank();
|
|
145
|
-
logger.success(`Created ${colors.cyan('
|
|
116
|
+
logger.success(`Created ${colors.cyan('skillpkg.json')}`);
|
|
117
|
+
logger.blank();
|
|
118
|
+
// Show what was created
|
|
119
|
+
logger.log('Configuration:');
|
|
120
|
+
logger.item(`Name: ${colors.cyan(config.name)}`);
|
|
121
|
+
if (Object.keys(config.sync_targets || {}).length > 0) {
|
|
122
|
+
logger.item(`Sync targets: ${colors.cyan(Object.keys(config.sync_targets || {}).join(', '))}`);
|
|
123
|
+
}
|
|
146
124
|
logger.blank();
|
|
147
125
|
logger.log('Next steps:');
|
|
148
|
-
logger.item(`
|
|
126
|
+
logger.item(`Run ${colors.cyan('skillpkg install <skill>')} to install skills`);
|
|
127
|
+
logger.item(`Run ${colors.cyan('skillpkg search <query>')} to find skills`);
|
|
149
128
|
logger.item(`Run ${colors.cyan('skillpkg sync')} to sync to platforms`);
|
|
150
129
|
logger.blank();
|
|
151
130
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Convert string to kebab-case
|
|
154
|
-
*/
|
|
155
|
-
function toKebabCase(str) {
|
|
156
|
-
return str
|
|
157
|
-
.toLowerCase()
|
|
158
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
159
|
-
.replace(/^-|-$/g, '');
|
|
160
|
-
}
|
|
161
131
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AA6BA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAqFf"}
|