@lovelybunch/cli 1.0.75-alpha.4 → 1.0.75-alpha.6
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/commands/agent.d.ts +2 -2
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +173 -153
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/implement.js +19 -19
- package/dist/commands/implement.js.map +1 -1
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +489 -2
- package/dist/commands/resource.js.map +1 -1
- package/dist/lib/registry.d.ts +22 -6
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +153 -43
- package/dist/lib/registry.js.map +1 -1
- package/package.json +6 -4
package/dist/lib/registry.d.ts
CHANGED
|
@@ -32,12 +32,15 @@ export interface RegistryAgentDetail {
|
|
|
32
32
|
focusAreas?: string[];
|
|
33
33
|
contextPreferences?: string[];
|
|
34
34
|
content?: RegistryAgentDetailContent;
|
|
35
|
+
archive?: string;
|
|
35
36
|
}
|
|
36
|
-
export interface
|
|
37
|
-
|
|
37
|
+
export interface SkillFileData {
|
|
38
|
+
skillId: string;
|
|
38
39
|
frontmatter: Record<string, unknown>;
|
|
39
40
|
content: string;
|
|
40
41
|
}
|
|
42
|
+
/** @deprecated Use SkillFileData instead */
|
|
43
|
+
export type AgentFileData = SkillFileData;
|
|
41
44
|
/**
|
|
42
45
|
* Fetch list of available agents from the registry
|
|
43
46
|
*/
|
|
@@ -54,12 +57,25 @@ export declare function findRegistryAgent(id: string): Promise<{
|
|
|
54
57
|
detail: RegistryAgentDetail;
|
|
55
58
|
} | null>;
|
|
56
59
|
/**
|
|
57
|
-
* Generate a
|
|
60
|
+
* Generate a skill ID from the display name (kebab-case per Agent Skills spec)
|
|
58
61
|
*/
|
|
62
|
+
export declare function generateSkillId(name: string): string;
|
|
63
|
+
/** @deprecated Use generateSkillId instead */
|
|
59
64
|
export declare function generateFilename(name: string): string;
|
|
60
65
|
/**
|
|
61
|
-
* Build
|
|
62
|
-
* Returns the
|
|
66
|
+
* Build skill file data from registry data.
|
|
67
|
+
* Returns the skillId, frontmatter (Agent Skills spec), and content for SKILL.md
|
|
63
68
|
*/
|
|
64
|
-
export declare function
|
|
69
|
+
export declare function buildSkillFileData(summary: RegistryElementSummary, detail: RegistryAgentDetail): SkillFileData;
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a registry archive path to a full URL.
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveArchiveUrl(archivePath: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Download a zip archive from a trusted registry URL and extract it into destDir.
|
|
76
|
+
* Returns true if the extracted contents include a SKILL.md file.
|
|
77
|
+
*/
|
|
78
|
+
export declare function downloadAndExtractArchive(archiveUrl: string, destDir: string): Promise<boolean>;
|
|
79
|
+
/** @deprecated Use buildSkillFileData instead */
|
|
80
|
+
export declare const buildAgentFileData: typeof buildSkillFileData;
|
|
65
81
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AAGhE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAkB1C;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAE7F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAAG,IAAI,CAAC,CAUpI;AA6CD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,mBAAmB,GAC1B,aAAa,CAkDf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AA0CD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0ErG;AAED,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,2BAAqB,CAAC"}
|
package/dist/lib/registry.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import fetch from 'node-fetch';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import AdmZip from 'adm-zip';
|
|
2
5
|
export const REGISTRY_BASE_URL = 'https://registry.coconut.dev';
|
|
3
6
|
async function fetchRegistryJson(endpoint) {
|
|
4
7
|
const url = endpoint.startsWith('http') ? endpoint : `${REGISTRY_BASE_URL}${endpoint}`;
|
|
@@ -80,70 +83,177 @@ function buildContent(detail, displayName) {
|
|
|
80
83
|
return body.trim();
|
|
81
84
|
}
|
|
82
85
|
/**
|
|
83
|
-
* Generate a
|
|
86
|
+
* Generate a skill ID from the display name (kebab-case per Agent Skills spec)
|
|
84
87
|
*/
|
|
85
|
-
export function
|
|
88
|
+
export function generateSkillId(name) {
|
|
86
89
|
return name
|
|
87
90
|
.toLowerCase()
|
|
88
|
-
.replace(/[^a-z0-9\s-]/g, '')
|
|
89
|
-
.replace(/\s+/g, '-')
|
|
90
|
-
.replace(/--+/g, '-')
|
|
91
|
-
.replace(/^-|-$/g, '')
|
|
92
|
-
|
|
91
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
92
|
+
.replace(/\s+/g, '-')
|
|
93
|
+
.replace(/--+/g, '-')
|
|
94
|
+
.replace(/^-|-$/g, '');
|
|
95
|
+
}
|
|
96
|
+
/** @deprecated Use generateSkillId instead */
|
|
97
|
+
export function generateFilename(name) {
|
|
98
|
+
return generateSkillId(name) + '.md';
|
|
93
99
|
}
|
|
94
100
|
/**
|
|
95
|
-
* Build
|
|
96
|
-
* Returns the
|
|
101
|
+
* Build skill file data from registry data.
|
|
102
|
+
* Returns the skillId, frontmatter (Agent Skills spec), and content for SKILL.md
|
|
97
103
|
*/
|
|
98
|
-
export function
|
|
104
|
+
export function buildSkillFileData(summary, detail) {
|
|
99
105
|
const displayName = summary.name || detail.name;
|
|
100
106
|
const description = detail.description || summary.description || '';
|
|
101
|
-
|
|
107
|
+
const skillId = generateSkillId(displayName);
|
|
108
|
+
// Build frontmatter per Agent Skills spec
|
|
102
109
|
const frontmatter = {
|
|
103
|
-
name:
|
|
110
|
+
name: skillId,
|
|
104
111
|
description,
|
|
105
|
-
// Registry provenance
|
|
106
|
-
registryId: summary.id,
|
|
107
|
-
registryEndpoint: summary.endpoint,
|
|
108
|
-
registrySource: REGISTRY_BASE_URL
|
|
109
112
|
};
|
|
110
|
-
//
|
|
111
|
-
frontmatter.color = detail.color || 'blue';
|
|
112
|
-
// Add optional fields
|
|
113
|
-
if (summary.author) {
|
|
114
|
-
frontmatter.author = summary.author;
|
|
115
|
-
}
|
|
116
|
-
if (detail.version || summary.version) {
|
|
117
|
-
frontmatter.version = detail.version || summary.version;
|
|
118
|
-
}
|
|
113
|
+
// Map old tools to allowed-tools (space-delimited per spec)
|
|
119
114
|
const tools = normalizeArray(detail.tools);
|
|
120
115
|
if (tools) {
|
|
121
|
-
frontmatter
|
|
116
|
+
frontmatter['allowed-tools'] = tools.join(' ');
|
|
122
117
|
}
|
|
118
|
+
// All other fields go under metadata
|
|
119
|
+
const metadata = {
|
|
120
|
+
registryId: summary.id,
|
|
121
|
+
registryEndpoint: summary.endpoint,
|
|
122
|
+
registrySource: REGISTRY_BASE_URL,
|
|
123
|
+
};
|
|
124
|
+
metadata.color = detail.color || 'blue';
|
|
125
|
+
if (summary.author)
|
|
126
|
+
metadata.author = summary.author;
|
|
127
|
+
if (detail.version || summary.version)
|
|
128
|
+
metadata.version = detail.version || summary.version;
|
|
123
129
|
const tags = normalizeArray(detail.tags) || normalizeArray(summary.tags);
|
|
124
|
-
if (tags)
|
|
125
|
-
|
|
126
|
-
}
|
|
130
|
+
if (tags)
|
|
131
|
+
metadata.tags = tags;
|
|
127
132
|
const focusAreas = normalizeArray(detail.focusAreas);
|
|
128
|
-
if (focusAreas)
|
|
129
|
-
|
|
130
|
-
}
|
|
133
|
+
if (focusAreas)
|
|
134
|
+
metadata.focusAreas = focusAreas;
|
|
131
135
|
const contextPreferences = normalizeArray(detail.contextPreferences);
|
|
132
|
-
if (contextPreferences)
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
frontmatter.updatedAt = detail.updatedAt;
|
|
140
|
-
}
|
|
141
|
-
// Build content
|
|
136
|
+
if (contextPreferences)
|
|
137
|
+
metadata.contextPreferences = contextPreferences;
|
|
138
|
+
if (detail.createdAt)
|
|
139
|
+
metadata.createdAt = detail.createdAt;
|
|
140
|
+
if (detail.updatedAt)
|
|
141
|
+
metadata.updatedAt = detail.updatedAt;
|
|
142
|
+
frontmatter.metadata = metadata;
|
|
142
143
|
const content = buildContent(detail, displayName);
|
|
143
144
|
return {
|
|
144
|
-
|
|
145
|
+
skillId,
|
|
145
146
|
frontmatter,
|
|
146
147
|
content
|
|
147
148
|
};
|
|
148
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Resolve a registry archive path to a full URL.
|
|
152
|
+
*/
|
|
153
|
+
export function resolveArchiveUrl(archivePath) {
|
|
154
|
+
return archivePath.startsWith('http') ? archivePath : `${REGISTRY_BASE_URL}${archivePath}`;
|
|
155
|
+
}
|
|
156
|
+
const ALLOWED_ARCHIVE_HOSTS = [
|
|
157
|
+
'registry.coconut.dev',
|
|
158
|
+
];
|
|
159
|
+
const MAX_ARCHIVE_SIZE = 50 * 1024 * 1024; // 50 MB
|
|
160
|
+
/** Paths to skip entirely when extracting zip archives (macOS resource forks, etc.) */
|
|
161
|
+
const IGNORED_ZIP_PREFIXES = ['__MACOSX/', '.DS_Store'];
|
|
162
|
+
function isIgnoredZipEntry(entryName) {
|
|
163
|
+
return IGNORED_ZIP_PREFIXES.some(prefix => entryName.startsWith(prefix) || entryName === prefix);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Detect if all zip entries share a single wrapping directory (e.g., `pptx/...`).
|
|
167
|
+
* Returns the prefix (with trailing slash) to strip, or null if no wrapper.
|
|
168
|
+
* Ignores macOS resource fork entries (__MACOSX/) when detecting the prefix.
|
|
169
|
+
*/
|
|
170
|
+
function detectWrapperPrefix(entries) {
|
|
171
|
+
const paths = entries
|
|
172
|
+
.map(e => e.entryName)
|
|
173
|
+
.filter(name => name !== '/' && name !== '' && !isIgnoredZipEntry(name));
|
|
174
|
+
if (paths.length === 0)
|
|
175
|
+
return null;
|
|
176
|
+
const prefixes = new Set(paths.map(p => {
|
|
177
|
+
const firstSlash = p.indexOf('/');
|
|
178
|
+
return firstSlash >= 0 ? p.substring(0, firstSlash + 1) : null;
|
|
179
|
+
}));
|
|
180
|
+
if (prefixes.size === 1) {
|
|
181
|
+
const prefix = [...prefixes][0];
|
|
182
|
+
if (prefix !== null)
|
|
183
|
+
return prefix;
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Download a zip archive from a trusted registry URL and extract it into destDir.
|
|
189
|
+
* Returns true if the extracted contents include a SKILL.md file.
|
|
190
|
+
*/
|
|
191
|
+
export async function downloadAndExtractArchive(archiveUrl, destDir) {
|
|
192
|
+
// Validate URL against allow-list
|
|
193
|
+
let parsed;
|
|
194
|
+
try {
|
|
195
|
+
parsed = new URL(archiveUrl);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
throw new Error('Invalid archive URL');
|
|
199
|
+
}
|
|
200
|
+
if (!ALLOWED_ARCHIVE_HOSTS.includes(parsed.hostname)) {
|
|
201
|
+
throw new Error(`Archive host '${parsed.hostname}' is not trusted`);
|
|
202
|
+
}
|
|
203
|
+
const response = await fetch(archiveUrl, {
|
|
204
|
+
headers: { 'User-Agent': 'coconut-cli' },
|
|
205
|
+
});
|
|
206
|
+
if (!response.ok) {
|
|
207
|
+
throw new Error(`Failed to download archive: ${response.status} ${response.statusText}`);
|
|
208
|
+
}
|
|
209
|
+
const contentLength = Number(response.headers.get('content-length') || '0');
|
|
210
|
+
if (contentLength > MAX_ARCHIVE_SIZE) {
|
|
211
|
+
throw new Error(`Archive too large (${contentLength} bytes, max ${MAX_ARCHIVE_SIZE})`);
|
|
212
|
+
}
|
|
213
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
214
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
215
|
+
if (buffer.length > MAX_ARCHIVE_SIZE) {
|
|
216
|
+
throw new Error(`Archive too large (${buffer.length} bytes, max ${MAX_ARCHIVE_SIZE})`);
|
|
217
|
+
}
|
|
218
|
+
// Extract with path-traversal protection
|
|
219
|
+
const zip = new AdmZip(buffer);
|
|
220
|
+
const entries = zip.getEntries();
|
|
221
|
+
const wrapperPrefix = detectWrapperPrefix(entries);
|
|
222
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
223
|
+
for (const entry of entries) {
|
|
224
|
+
let entryName = entry.entryName;
|
|
225
|
+
// Skip macOS resource fork junk and other ignored entries
|
|
226
|
+
if (isIgnoredZipEntry(entryName))
|
|
227
|
+
continue;
|
|
228
|
+
// Strip single wrapping directory if detected (e.g., pptx/SKILL.md -> SKILL.md)
|
|
229
|
+
if (wrapperPrefix && entryName.startsWith(wrapperPrefix)) {
|
|
230
|
+
entryName = entryName.substring(wrapperPrefix.length);
|
|
231
|
+
}
|
|
232
|
+
if (!entryName || entryName === '/')
|
|
233
|
+
continue;
|
|
234
|
+
// Reject paths that attempt directory traversal
|
|
235
|
+
const resolved = path.resolve(destDir, entryName);
|
|
236
|
+
if (!resolved.startsWith(path.resolve(destDir) + path.sep) && resolved !== path.resolve(destDir)) {
|
|
237
|
+
console.warn(`Skipping zip entry with path traversal: ${entryName}`);
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (entry.isDirectory) {
|
|
241
|
+
await fs.mkdir(resolved, { recursive: true });
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
245
|
+
await fs.writeFile(resolved, entry.getData());
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Check if SKILL.md was extracted
|
|
249
|
+
try {
|
|
250
|
+
await fs.access(path.join(destDir, 'SKILL.md'));
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/** @deprecated Use buildSkillFileData instead */
|
|
258
|
+
export const buildAgentFileData = buildSkillFileData;
|
|
149
259
|
//# sourceMappingURL=registry.js.map
|
package/dist/lib/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovelybunch/cli",
|
|
3
|
-
"version": "1.0.75-alpha.
|
|
3
|
+
"version": "1.0.75-alpha.6",
|
|
4
4
|
"description": "Command-line interface for Coconut",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli.js",
|
|
@@ -39,9 +39,10 @@
|
|
|
39
39
|
"test:ui": "vitest --ui"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@lovelybunch/api": "^1.0.75-alpha.
|
|
43
|
-
"@lovelybunch/core": "^1.0.75-alpha.
|
|
44
|
-
"@lovelybunch/types": "^1.0.75-alpha.
|
|
42
|
+
"@lovelybunch/api": "^1.0.75-alpha.6",
|
|
43
|
+
"@lovelybunch/core": "^1.0.75-alpha.6",
|
|
44
|
+
"@lovelybunch/types": "^1.0.75-alpha.6",
|
|
45
|
+
"adm-zip": "^0.5.16",
|
|
45
46
|
"chalk": "^5.3.0",
|
|
46
47
|
"commander": "^11.1.0",
|
|
47
48
|
"fuse.js": "^7.0.0",
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
"ws": "^8.14.2"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
57
|
+
"@types/adm-zip": "^0.5.7",
|
|
56
58
|
"@types/inquirer": "^9.0.7",
|
|
57
59
|
"@types/node": "^20.11.0",
|
|
58
60
|
"@types/node-fetch": "^2.6.9",
|