@chakresh/kresh 0.1.16 → 0.1.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chakresh/kresh",
3
- "version": "0.1.16",
3
+ "version": "0.1.19",
4
4
  "bin": {
5
5
  "kresh": "./src/index.js"
6
6
  },
@@ -15,7 +15,7 @@ export async function installSkill(skillSlug, isRetry = false) {
15
15
  const spinner = ora(`Fetching skill "${skillSlug}"...`).start();
16
16
  try {
17
17
  const response = await api.get(`/api/skills/${skillSlug}`);
18
- const { skillContent, ...metadata } = response.data;
18
+ const { skillContent, files, ...metadata } = response.data;
19
19
  spinner.stop();
20
20
 
21
21
  if (metadata.category === 'AGENTS.md/CLAUDE.md' || metadata.category === 'AGENT.md/CLAUDE.md' || metadata.category === 'Agents') {
@@ -51,6 +51,21 @@ export async function installSkill(skillSlug, isRetry = false) {
51
51
  if (shouldWrite) {
52
52
  spinner.start(`Writing ${fileName} to root directory...`);
53
53
  await fs.writeFile(targetPath, skillContent, 'utf8');
54
+
55
+ if (files && files.length > 0) {
56
+ for (const file of files) {
57
+ if (file.path === 'SKILL.md') continue;
58
+ const filePath = path.join(rootDir, file.path);
59
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
60
+ if (file.fileType === 'image') {
61
+ const base64Data = file.content.replace(/^data:image\/\w+;base64,/, "");
62
+ await fs.writeFile(filePath, Buffer.from(base64Data, 'base64'));
63
+ } else {
64
+ await fs.writeFile(filePath, file.content, 'utf8');
65
+ }
66
+ }
67
+ }
68
+
54
69
  spinner.succeed(`Successfully installed ${logger.bold(metadata.name)} (v${metadata.currentVersion}) by @${metadata.ownerUsername}`);
55
70
  logger.info(`Saved to: ${logger.bold(targetPath)}`);
56
71
  } else {
@@ -76,7 +91,7 @@ export async function installSkill(skillSlug, isRetry = false) {
76
91
  ]);
77
92
 
78
93
  spinner.start('Writing skill files locally...');
79
- const savedDir = await writeLocalSkill(skillSlug, skillContent, metadata, agentType);
94
+ const savedDir = await writeLocalSkill(skillSlug, skillContent, metadata, agentType, files);
80
95
 
81
96
  spinner.succeed(`Successfully installed ${logger.bold(metadata.name)} (v${metadata.currentVersion}) by @${metadata.ownerUsername}`);
82
97
  logger.info(`Saved to: ${logger.bold(savedDir)}`);
@@ -51,14 +51,33 @@ export async function getWorkspaceRoot(startDir = process.cwd()) {
51
51
  /**
52
52
  * Writes the SKILL.md and metadata.json files directly in a folder named after the skill's slug (excluding @owner scope folder) inside the skills folder.
53
53
  */
54
- export async function writeLocalSkill(slug, skillContent, metadata, baseDir = 'skills') {
54
+ export async function writeLocalSkill(slug, skillContent, metadata, baseDir = 'skills', files = []) {
55
55
  try {
56
56
  const rootDir = await getWorkspaceRoot();
57
57
  const folderName = (slug || metadata.slug).split('/').pop();
58
58
  const targetDir = path.join(rootDir, baseDir, folderName);
59
59
 
60
60
  await fs.mkdir(targetDir, { recursive: true });
61
- await fs.writeFile(path.join(targetDir, 'SKILL.md'), skillContent, 'utf8');
61
+
62
+ if (files && files.length > 0) {
63
+ for (const file of files) {
64
+ const filePath = path.join(targetDir, file.path);
65
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
66
+ if (file.fileType === 'image' && file.content.startsWith('data:image')) {
67
+ const base64Data = file.content.replace(/^data:image\/\w+;base64,/, "");
68
+ await fs.writeFile(filePath, Buffer.from(base64Data, 'base64'));
69
+ } else {
70
+ await fs.writeFile(filePath, file.content, 'utf8');
71
+ }
72
+ }
73
+ // Ensure SKILL.md is written even if missing from files (fallback)
74
+ if (!files.some(f => f.path === 'SKILL.md') && skillContent) {
75
+ await fs.writeFile(path.join(targetDir, 'SKILL.md'), skillContent, 'utf8');
76
+ }
77
+ } else {
78
+ await fs.writeFile(path.join(targetDir, 'SKILL.md'), skillContent, 'utf8');
79
+ }
80
+
62
81
  await fs.writeFile(path.join(targetDir, 'metadata.json'), JSON.stringify(metadata, null, 2), 'utf8');
63
82
  return targetDir;
64
83
  } catch (error) {