@agllama/mcp 0.6.16 → 0.6.17

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.
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Multi-file skill bundle convention.
3
+ *
4
+ * A skill directory on disk looks like:
5
+ * .claude/skills/<slug>/
6
+ * ├── SKILL.md ← main body + YAML frontmatter
7
+ * ├── guardrails.md ← supporting file
8
+ * └── scripts/
9
+ * └── create-worktree.sh ← nested supporting file
10
+ *
11
+ * We bundle that into a single content string stored in the skill's `content`
12
+ * field (no schema changes). The convention:
13
+ *
14
+ * <main SKILL.md body>
15
+ *
16
+ * <!-- SKILL-BUNDLE-START -->
17
+ * <!-- FILE: guardrails.md -->
18
+ * ```markdown
19
+ * ...
20
+ * ```
21
+ *
22
+ * <!-- FILE: scripts/create-worktree.sh
23
+ * executable: true -->
24
+ * ```bash
25
+ * ...
26
+ * ```
27
+ * <!-- SKILL-BUNDLE-END -->
28
+ *
29
+ * Single-file skills OMIT the bundle markers entirely (backward compat).
30
+ */
31
+ export declare const BUNDLE_START_MARKER = "<!-- SKILL-BUNDLE-START -->";
32
+ export declare const BUNDLE_END_MARKER = "<!-- SKILL-BUNDLE-END -->";
33
+ export declare const MAX_BUNDLE_BYTES: number;
34
+ export interface BundleResult {
35
+ /** Combined content string: SKILL.md body + bundle block (if any). */
36
+ content: string;
37
+ /** Name parsed from SKILL.md frontmatter, if present. */
38
+ name: string | undefined;
39
+ /** Description parsed from SKILL.md frontmatter, if present. */
40
+ description: string | undefined;
41
+ /** How many non-SKILL.md files were bundled. 0 = single-file skill. */
42
+ bundledFilesCount: number;
43
+ /** Total bytes of the combined content. */
44
+ totalBytes: number;
45
+ }
46
+ /**
47
+ * Walk a local skill directory, read SKILL.md, gather sibling files, and
48
+ * produce a single bundled content string suitable for llama_create_skill.
49
+ *
50
+ * Throws if:
51
+ * - `<path>/SKILL.md` is missing
52
+ * - any non-SKILL.md file looks binary (null byte in first 1 KB)
53
+ * - total bundled size exceeds 1 MB (reports top 5 largest files)
54
+ * - a symlink is found anywhere in the tree (security)
55
+ */
56
+ export declare function bundleSkillDir(skillDirPath: string): Promise<BundleResult>;
57
+ export interface UnbundledFile {
58
+ path: string;
59
+ content: string;
60
+ executable: boolean;
61
+ }
62
+ export interface UnbundleResult {
63
+ /** SKILL.md body with the bundle block removed (if any). */
64
+ main: string;
65
+ /** Files to write under `.claude/skills/<slug>/<path>`. Empty for single-file skills. */
66
+ files: UnbundledFile[];
67
+ }
68
+ /**
69
+ * Parse a skill's content string. If it contains a
70
+ * `<!-- SKILL-BUNDLE-START -->...<!-- SKILL-BUNDLE-END -->` block, extract each
71
+ * `<!-- FILE: path -->` section into a file descriptor and return the main body
72
+ * with the bundle block stripped. If no bundle is present, returns the content
73
+ * as-is with `files: []` (single-file skill — backward compat).
74
+ *
75
+ * Throws if a bundled file's path is absolute or contains `..` (path traversal).
76
+ */
77
+ export declare function unbundleSkillContent(content: string): UnbundleResult;
78
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/utils/bundle.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AACjE,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,gEAAgE;IAChE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AASD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAwChF;AAkJD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAkEpE"}
@@ -0,0 +1,300 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Multi-file skill bundle convention.
5
+ *
6
+ * A skill directory on disk looks like:
7
+ * .claude/skills/<slug>/
8
+ * ├── SKILL.md ← main body + YAML frontmatter
9
+ * ├── guardrails.md ← supporting file
10
+ * └── scripts/
11
+ * └── create-worktree.sh ← nested supporting file
12
+ *
13
+ * We bundle that into a single content string stored in the skill's `content`
14
+ * field (no schema changes). The convention:
15
+ *
16
+ * <main SKILL.md body>
17
+ *
18
+ * <!-- SKILL-BUNDLE-START -->
19
+ * <!-- FILE: guardrails.md -->
20
+ * ```markdown
21
+ * ...
22
+ * ```
23
+ *
24
+ * <!-- FILE: scripts/create-worktree.sh
25
+ * executable: true -->
26
+ * ```bash
27
+ * ...
28
+ * ```
29
+ * <!-- SKILL-BUNDLE-END -->
30
+ *
31
+ * Single-file skills OMIT the bundle markers entirely (backward compat).
32
+ */
33
+ export const BUNDLE_START_MARKER = '<!-- SKILL-BUNDLE-START -->';
34
+ export const BUNDLE_END_MARKER = '<!-- SKILL-BUNDLE-END -->';
35
+ export const MAX_BUNDLE_BYTES = 1024 * 1024; // 1 MB
36
+ /**
37
+ * Walk a local skill directory, read SKILL.md, gather sibling files, and
38
+ * produce a single bundled content string suitable for llama_create_skill.
39
+ *
40
+ * Throws if:
41
+ * - `<path>/SKILL.md` is missing
42
+ * - any non-SKILL.md file looks binary (null byte in first 1 KB)
43
+ * - total bundled size exceeds 1 MB (reports top 5 largest files)
44
+ * - a symlink is found anywhere in the tree (security)
45
+ */
46
+ export async function bundleSkillDir(skillDirPath) {
47
+ const absoluteDir = path.resolve(skillDirPath);
48
+ const skillMdPath = path.join(absoluteDir, 'SKILL.md');
49
+ let rawSkillMd;
50
+ try {
51
+ rawSkillMd = await fs.readFile(skillMdPath, 'utf8');
52
+ }
53
+ catch {
54
+ throw new Error(`SKILL.md not found at ${skillMdPath}`);
55
+ }
56
+ const { name, description, body: mainBody } = parseFrontmatter(rawSkillMd);
57
+ const bundledFiles = await walkSkillDir(absoluteDir, '');
58
+ if (bundledFiles.length === 0) {
59
+ const totalBytes = Buffer.byteLength(mainBody, 'utf8');
60
+ return { content: mainBody, name, description, bundledFilesCount: 0, totalBytes };
61
+ }
62
+ const bundleBlock = buildBundleBlock(bundledFiles);
63
+ const combined = `${mainBody.trimEnd()}\n\n${bundleBlock}\n`;
64
+ const totalBytes = Buffer.byteLength(combined, 'utf8');
65
+ if (totalBytes > MAX_BUNDLE_BYTES) {
66
+ const top5 = [...bundledFiles].sort((a, b) => b.bytes - a.bytes).slice(0, 5);
67
+ const list = top5
68
+ .map((f) => ` - ${f.relativePath} (${(f.bytes / 1024).toFixed(1)} KB)`)
69
+ .join('\n');
70
+ throw new Error(`Bundle size ${(totalBytes / 1024).toFixed(1)} KB exceeds 1 MB cap.\nTop 5 largest files:\n${list}`);
71
+ }
72
+ return {
73
+ content: combined,
74
+ name,
75
+ description,
76
+ bundledFilesCount: bundledFiles.length,
77
+ totalBytes,
78
+ };
79
+ }
80
+ async function walkSkillDir(baseDir, relDir, acc = []) {
81
+ const absDir = path.join(baseDir, relDir);
82
+ const entries = await fs.readdir(absDir, { withFileTypes: true });
83
+ for (const entry of entries) {
84
+ // Skip dotfiles (including .DS_Store, .git, etc.)
85
+ if (entry.name.startsWith('.'))
86
+ continue;
87
+ const entryAbs = path.join(absDir, entry.name);
88
+ const entryRel = relDir ? `${relDir}/${entry.name}` : entry.name;
89
+ // Reject symlinks — they can point outside the skill dir.
90
+ if (entry.isSymbolicLink()) {
91
+ throw new Error(`Symlink rejected: ${entryRel}. Skills must not contain symlinks.`);
92
+ }
93
+ if (entry.isDirectory()) {
94
+ await walkSkillDir(baseDir, entryRel, acc);
95
+ }
96
+ else if (entry.isFile()) {
97
+ // Skip the root SKILL.md — it's the main body, not a bundled file.
98
+ if (entry.name === 'SKILL.md' && relDir === '')
99
+ continue;
100
+ const buf = await fs.readFile(entryAbs);
101
+ if (isBinary(buf)) {
102
+ throw new Error(`Binary file rejected: ${entryRel}. Text files only.`);
103
+ }
104
+ const stat = await fs.stat(entryAbs);
105
+ const executable = (stat.mode & 0o111) !== 0;
106
+ acc.push({
107
+ relativePath: entryRel,
108
+ content: buf.toString('utf8'),
109
+ executable,
110
+ bytes: buf.byteLength,
111
+ });
112
+ }
113
+ }
114
+ return acc;
115
+ }
116
+ function isBinary(buf) {
117
+ const sample = buf.subarray(0, Math.min(1024, buf.length));
118
+ return sample.includes(0);
119
+ }
120
+ function parseFrontmatter(md) {
121
+ if (!md.startsWith('---\n')) {
122
+ return { name: undefined, description: undefined, body: md };
123
+ }
124
+ const endIdx = md.indexOf('\n---\n', 4);
125
+ if (endIdx < 0) {
126
+ return { name: undefined, description: undefined, body: md };
127
+ }
128
+ const fm = md.slice(4, endIdx);
129
+ const body = md.slice(endIdx + 5);
130
+ // Very small YAML-ish parser: look for `name:` and `description:` keys.
131
+ // Supports single-line values and folded-multiline `description: >-` blocks.
132
+ const lines = fm.split('\n');
133
+ let name;
134
+ let description;
135
+ for (let i = 0; i < lines.length; i++) {
136
+ const line = lines[i];
137
+ const nameMatch = line.match(/^name:\s*(.+?)\s*$/);
138
+ if (nameMatch) {
139
+ name = stripQuotes(nameMatch[1]);
140
+ continue;
141
+ }
142
+ const descMatch = line.match(/^description:\s*(.*)$/);
143
+ if (descMatch) {
144
+ const inline = descMatch[1].trim();
145
+ if (inline === '>-' || inline === '>' || inline === '|' || inline === '|-') {
146
+ // Folded/literal block: collect subsequent indented lines.
147
+ const parts = [];
148
+ let j = i + 1;
149
+ while (j < lines.length && (lines[j].startsWith(' ') || lines[j] === '')) {
150
+ parts.push(lines[j].replace(/^ {0,2}/, ''));
151
+ j++;
152
+ }
153
+ description = parts.join(inline.startsWith('>') ? ' ' : '\n').trim();
154
+ i = j - 1;
155
+ }
156
+ else {
157
+ description = stripQuotes(inline);
158
+ }
159
+ }
160
+ }
161
+ return { name, description, body };
162
+ }
163
+ function stripQuotes(s) {
164
+ const trimmed = s.trim();
165
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
166
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
167
+ return trimmed.slice(1, -1);
168
+ }
169
+ return trimmed;
170
+ }
171
+ function buildBundleBlock(files) {
172
+ const parts = [BUNDLE_START_MARKER];
173
+ for (const f of files) {
174
+ const fenceLen = pickFenceLength(f.content);
175
+ const fence = '`'.repeat(fenceLen);
176
+ const execLine = f.executable ? '\nexecutable: true' : '';
177
+ const lang = guessLang(f.relativePath);
178
+ // Encode fence length in the marker so the parser knows what to look for.
179
+ parts.push(`<!-- FILE: ${f.relativePath} fence=${fenceLen}${execLine} -->`);
180
+ parts.push(fence + lang);
181
+ parts.push(f.content.replace(/\s+$/, ''));
182
+ parts.push(fence);
183
+ parts.push('');
184
+ }
185
+ parts.push(BUNDLE_END_MARKER);
186
+ return parts.join('\n');
187
+ }
188
+ /**
189
+ * Pick the shortest fence length that is guaranteed not to collide with any
190
+ * backtick run inside the content. Minimum 4 (so standard ``` fences in
191
+ * bundled markdown files don't confuse the parser).
192
+ */
193
+ function pickFenceLength(content) {
194
+ let maxRun = 3; // default assumes up to 3 backticks in content
195
+ const matches = content.match(/`+/g);
196
+ if (matches) {
197
+ for (const m of matches) {
198
+ if (m.length > maxRun)
199
+ maxRun = m.length;
200
+ }
201
+ }
202
+ return maxRun + 1;
203
+ }
204
+ /**
205
+ * Parse a skill's content string. If it contains a
206
+ * `<!-- SKILL-BUNDLE-START -->...<!-- SKILL-BUNDLE-END -->` block, extract each
207
+ * `<!-- FILE: path -->` section into a file descriptor and return the main body
208
+ * with the bundle block stripped. If no bundle is present, returns the content
209
+ * as-is with `files: []` (single-file skill — backward compat).
210
+ *
211
+ * Throws if a bundled file's path is absolute or contains `..` (path traversal).
212
+ */
213
+ export function unbundleSkillContent(content) {
214
+ const startIdx = content.indexOf(BUNDLE_START_MARKER);
215
+ if (startIdx < 0) {
216
+ return { main: content, files: [] };
217
+ }
218
+ const endIdx = content.indexOf(BUNDLE_END_MARKER, startIdx);
219
+ if (endIdx < 0) {
220
+ // Malformed: START without END — be permissive, treat as no bundle.
221
+ return { main: content, files: [] };
222
+ }
223
+ // Main = everything before the START marker, trimmed of trailing blank lines.
224
+ const main = content.slice(0, startIdx).replace(/\s+$/, '') + '\n';
225
+ const bundleBody = content.slice(startIdx + BUNDLE_START_MARKER.length, endIdx);
226
+ const files = [];
227
+ // Walk the bundle body looking for <!-- FILE: path [fence=N] [executable: true] --> markers.
228
+ // The marker may span multiple lines (e.g. the `executable: true` flag is written
229
+ // on a second line). Use [\s\S] to match across newlines.
230
+ const markerRegex = /<!--\s*FILE:\s*([\s\S]*?)\s*-->/g;
231
+ let markerMatch;
232
+ while ((markerMatch = markerRegex.exec(bundleBody)) !== null) {
233
+ const markerInner = markerMatch[1];
234
+ // markerInner examples:
235
+ // "guardrails.md fence=4"
236
+ // "scripts/foo.sh fence=4\n executable: true"
237
+ // "guardrails.md" (legacy, no fence annotation → assume 3)
238
+ // Extract path: everything up to the first whitespace / newline
239
+ const pathMatch = markerInner.match(/^(\S+)/);
240
+ if (!pathMatch)
241
+ continue;
242
+ const rawPath = pathMatch[1];
243
+ // Parse fence length (default 3 for legacy content)
244
+ const fenceLenMatch = markerInner.match(/\bfence=(\d+)/);
245
+ const fenceLen = fenceLenMatch ? Number(fenceLenMatch[1]) : 3;
246
+ const fence = '`'.repeat(fenceLen);
247
+ // Parse executable flag
248
+ const executable = /\bexecutable:\s*true\b/.test(markerInner);
249
+ validatePath(rawPath);
250
+ // Find the opening fence after the marker (allow a lang identifier and whitespace)
251
+ const afterMarker = markerMatch.index + markerMatch[0].length;
252
+ const openFenceRegex = new RegExp(`^[ \\t]*\\n[ \\t]*${fence}[^\\n]*\\n`);
253
+ const openMatch = bundleBody.slice(afterMarker).match(openFenceRegex);
254
+ if (!openMatch || openMatch.index !== 0)
255
+ continue;
256
+ const bodyStart = afterMarker + openMatch[0].length;
257
+ // Find the closing fence (on its own line, same length, no more backticks)
258
+ const closeFenceRegex = new RegExp(`\\n${fence}(?!\`)[ \\t]*(?:\\n|$)`);
259
+ const closeMatch = bundleBody.slice(bodyStart).match(closeFenceRegex);
260
+ if (!closeMatch || closeMatch.index === undefined)
261
+ continue;
262
+ const body = bundleBody.slice(bodyStart, bodyStart + closeMatch.index);
263
+ files.push({ path: rawPath, content: body, executable });
264
+ // Advance regex lastIndex past the closing fence so we don't re-match inside this file's body
265
+ markerRegex.lastIndex = bodyStart + closeMatch.index + closeMatch[0].length;
266
+ }
267
+ return { main, files };
268
+ }
269
+ function validatePath(p) {
270
+ if (p.length === 0) {
271
+ throw new Error('Bundled file has empty path.');
272
+ }
273
+ if (path.isAbsolute(p)) {
274
+ throw new Error(`Bundled file path must be relative: "${p}"`);
275
+ }
276
+ // Reject any segment equal to '..' (path traversal).
277
+ const segments = p.split(/[\\/]/);
278
+ if (segments.some((s) => s === '..' || s === '.')) {
279
+ throw new Error(`Bundled file path must not contain ".." or ".": "${p}"`);
280
+ }
281
+ }
282
+ function guessLang(relPath) {
283
+ const ext = path.extname(relPath).toLowerCase();
284
+ switch (ext) {
285
+ case '.md': return 'markdown';
286
+ case '.sh': return 'bash';
287
+ case '.js':
288
+ case '.mjs':
289
+ case '.cjs': return 'javascript';
290
+ case '.ts': return 'typescript';
291
+ case '.json': return 'json';
292
+ case '.yaml':
293
+ case '.yml': return 'yaml';
294
+ case '.html': return 'html';
295
+ case '.css': return 'css';
296
+ case '.py': return 'python';
297
+ default: return '';
298
+ }
299
+ }
300
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/utils/bundle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agllama/mcp",
3
- "version": "0.6.16",
3
+ "version": "0.6.17",
4
4
  "description": "MCP server for Llama project management - connect Claude to your agile workflow",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",