neoctl 0.1.11 → 0.1.13

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,371 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { normalizeSkillDescriptor, requireSkillName, } from "./skill-tool.js";
4
+ const SKILL_FILE_NAME = "SKILL.md";
5
+ export class FileSystemSkillCatalog {
6
+ roots;
7
+ createRoot;
8
+ constructor(options) {
9
+ if (isRootList(options)) {
10
+ this.roots = options.map((root) => ({ root, kind: "filesystem" }));
11
+ if (this.roots.length === 0)
12
+ throw new Error("FileSystemSkillCatalog requires at least one root");
13
+ this.createRoot = path.resolve(this.roots[0].root);
14
+ return;
15
+ }
16
+ this.roots = options.roots.map((root) => ({ ...root }));
17
+ if (this.roots.length === 0)
18
+ throw new Error("FileSystemSkillCatalog requires at least one root");
19
+ this.createRoot = path.resolve(options.createRoot ?? firstWritableRoot(this.roots).root);
20
+ }
21
+ async list() {
22
+ const byName = new Map();
23
+ for (const root of this.roots) {
24
+ for (const location of await discoverSkillLocations(root)) {
25
+ try {
26
+ const skill = await readSkillFromLocation(location);
27
+ if (skill.enabled === false)
28
+ continue;
29
+ if (!byName.has(skill.name))
30
+ byName.set(skill.name, skill);
31
+ }
32
+ catch {
33
+ // Invalid plugin skills should not break the whole catalog. Use read/validate tooling for diagnostics.
34
+ }
35
+ }
36
+ }
37
+ return [...byName.values()].sort((left, right) => left.name.localeCompare(right.name));
38
+ }
39
+ async get(name) {
40
+ const normalized = requireSkillName(name);
41
+ for (const root of this.roots) {
42
+ const direct = await readIfExists({ root, directory: path.join(path.resolve(root.root), normalized), file: path.join(path.resolve(root.root), normalized, SKILL_FILE_NAME) });
43
+ if (direct)
44
+ return direct;
45
+ for (const location of await discoverSkillLocations(root)) {
46
+ const skill = await readIfExists(location);
47
+ if (skill?.name === normalized)
48
+ return skill;
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ async create(skill, options = {}) {
54
+ const normalized = normalizeSkillDescriptor(skill, { requireEntrypoint: true });
55
+ const root = this.resolveCreateRoot();
56
+ const directory = path.join(root.root, normalized.name);
57
+ const file = path.join(directory, SKILL_FILE_NAME);
58
+ const exists = await pathExists(file);
59
+ if (exists && !options.overwrite)
60
+ throw new Error(`Skill already exists: ${normalized.name}`);
61
+ await fs.mkdir(directory, { recursive: true });
62
+ const now = new Date().toISOString();
63
+ const stored = normalizeSkillDescriptor({
64
+ ...normalized,
65
+ source: sourceForLocation({ root, directory, file }),
66
+ createdAt: normalized.createdAt ?? now,
67
+ updatedAt: now,
68
+ });
69
+ await fs.writeFile(file, serializeSkillMarkdown(stored), "utf8");
70
+ return stored;
71
+ }
72
+ async update(name, patch) {
73
+ const normalizedName = requireSkillName(name);
74
+ const location = await this.findWritableLocation(normalizedName);
75
+ if (!location)
76
+ throw new Error(`Unknown writable skill: ${normalizedName}`);
77
+ const current = await readSkillFromLocation(location);
78
+ const updated = normalizeSkillDescriptor({
79
+ ...current,
80
+ ...patch,
81
+ name: normalizedName,
82
+ source: current.source,
83
+ createdAt: current.createdAt,
84
+ updatedAt: new Date().toISOString(),
85
+ });
86
+ await fs.writeFile(location.file, serializeSkillMarkdown(updated), "utf8");
87
+ return updated;
88
+ }
89
+ async delete(name) {
90
+ const location = await this.findWritableLocation(requireSkillName(name));
91
+ if (!location)
92
+ return false;
93
+ await fs.rm(location.directory, { recursive: true, force: true });
94
+ return true;
95
+ }
96
+ resolveCreateRoot() {
97
+ const root = this.roots.find((candidate) => path.resolve(candidate.root) === this.createRoot);
98
+ if (!root)
99
+ return { root: this.createRoot, kind: "filesystem" };
100
+ if (root.readonly)
101
+ throw new Error(`Skill root is readonly: ${root.root}`);
102
+ return { ...root, root: path.resolve(root.root) };
103
+ }
104
+ async findWritableLocation(name) {
105
+ for (const root of this.roots) {
106
+ if (root.readonly)
107
+ continue;
108
+ const file = path.join(path.resolve(root.root), name, SKILL_FILE_NAME);
109
+ if (await pathExists(file))
110
+ return { root: { ...root, root: path.resolve(root.root) }, directory: path.dirname(file), file };
111
+ }
112
+ return undefined;
113
+ }
114
+ }
115
+ export class CompositeSkillCatalog {
116
+ catalogs;
117
+ constructor(catalogs) {
118
+ this.catalogs = catalogs;
119
+ }
120
+ async list() {
121
+ const byName = new Map();
122
+ for (const catalog of this.catalogs) {
123
+ for (const skill of await catalog.list())
124
+ if (!byName.has(skill.name))
125
+ byName.set(skill.name, skill);
126
+ }
127
+ return [...byName.values()].sort((left, right) => left.name.localeCompare(right.name));
128
+ }
129
+ async get(name) {
130
+ for (const catalog of this.catalogs) {
131
+ const skill = await catalog.get(name);
132
+ if (skill)
133
+ return skill;
134
+ }
135
+ return undefined;
136
+ }
137
+ }
138
+ export async function loadSkillFromMarkdownFile(file, root) {
139
+ const resolvedFile = path.resolve(file);
140
+ return readSkillFromLocation({
141
+ root: root ? { ...root, root: path.resolve(root.root) } : { root: path.dirname(path.dirname(resolvedFile)), kind: "filesystem" },
142
+ directory: path.dirname(resolvedFile),
143
+ file: resolvedFile,
144
+ });
145
+ }
146
+ export function parseSkillMarkdown(markdown, fallbackName) {
147
+ const { frontmatter, body } = parseFrontmatter(markdown);
148
+ const name = stringValue(frontmatter.name) ?? fallbackName;
149
+ const descriptor = {
150
+ name: requireSkillName(name),
151
+ title: stringValue(frontmatter.title),
152
+ description: stringValue(frontmatter.description) ?? firstBodyLine(body) ?? requireSkillName(name),
153
+ version: stringValue(frontmatter.version),
154
+ entrypoint: body.trim(),
155
+ execution: executionValue(frontmatter.execution) ?? "inline",
156
+ allowedTools: stringListValue(frontmatter["allowed-tools"] ?? frontmatter.allowedTools),
157
+ model: stringValue(frontmatter.model),
158
+ effort: effortValue(frontmatter.effort ?? frontmatter["reasoning-effort"]),
159
+ disableModelInvocation: booleanValue(frontmatter.disableModelInvocation ?? frontmatter["disable-model-invocation"]),
160
+ tags: stringListValue(frontmatter.tags),
161
+ argumentHint: stringValue(frontmatter["argument-hint"] ?? frontmatter.argumentHint),
162
+ enabled: booleanValue(frontmatter.enabled) ?? true,
163
+ trustLevel: trustLevelValue(frontmatter.trustLevel ?? frontmatter["trust-level"]),
164
+ metadata: recordValue(frontmatter.metadata),
165
+ };
166
+ return normalizeSkillDescriptor(descriptor, { requireEntrypoint: true });
167
+ }
168
+ export function serializeSkillMarkdown(skill) {
169
+ const frontmatter = {
170
+ name: skill.name,
171
+ title: skill.title,
172
+ description: skill.description,
173
+ version: skill.version,
174
+ execution: skill.execution,
175
+ "allowed-tools": skill.allowedTools,
176
+ model: skill.model,
177
+ effort: skill.effort,
178
+ tags: skill.tags,
179
+ "argument-hint": skill.argumentHint,
180
+ enabled: skill.enabled,
181
+ "trust-level": skill.trustLevel,
182
+ createdAt: skill.createdAt,
183
+ updatedAt: skill.updatedAt,
184
+ metadata: skill.metadata,
185
+ };
186
+ return `---\n${serializeFrontmatter(frontmatter)}---\n\n${skill.entrypoint.trim()}\n`;
187
+ }
188
+ async function discoverSkillLocations(root) {
189
+ const resolvedRoot = path.resolve(root.root);
190
+ if (!(await pathExists(resolvedRoot)))
191
+ return [];
192
+ const entries = await fs.readdir(resolvedRoot, { withFileTypes: true });
193
+ const locations = [];
194
+ const normalizedRoot = { ...root, root: resolvedRoot };
195
+ for (const entry of entries) {
196
+ if (!entry.isDirectory())
197
+ continue;
198
+ const directory = path.join(resolvedRoot, entry.name);
199
+ const file = path.join(directory, SKILL_FILE_NAME);
200
+ if (await pathExists(file))
201
+ locations.push({ root: normalizedRoot, directory, file });
202
+ }
203
+ return locations;
204
+ }
205
+ async function readIfExists(location) {
206
+ try {
207
+ return await readSkillFromLocation(location);
208
+ }
209
+ catch {
210
+ return undefined;
211
+ }
212
+ }
213
+ async function readSkillFromLocation(location) {
214
+ const raw = await fs.readFile(location.file, "utf8");
215
+ const fallbackName = path.basename(location.directory);
216
+ const parsed = parseSkillMarkdown(raw, fallbackName);
217
+ return normalizeSkillDescriptor({
218
+ ...parsed,
219
+ source: sourceForLocation(location),
220
+ });
221
+ }
222
+ function sourceForLocation(location) {
223
+ return {
224
+ kind: location.root.kind ?? "filesystem",
225
+ root: path.resolve(location.root.root),
226
+ path: location.file,
227
+ plugin: location.root.plugin,
228
+ };
229
+ }
230
+ function parseFrontmatter(markdown) {
231
+ if (!markdown.startsWith("---"))
232
+ return { frontmatter: {}, body: markdown };
233
+ const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/.exec(markdown);
234
+ if (!match)
235
+ return { frontmatter: {}, body: markdown };
236
+ return { frontmatter: parseYamlLikeFrontmatter(match[1]), body: match[2] };
237
+ }
238
+ function parseYamlLikeFrontmatter(raw) {
239
+ const result = {};
240
+ const lines = raw.split(/\r?\n/);
241
+ let index = 0;
242
+ while (index < lines.length) {
243
+ const line = lines[index];
244
+ index += 1;
245
+ if (!line.trim() || line.trimStart().startsWith("#"))
246
+ continue;
247
+ const match = /^([A-Za-z0-9_.-]+):\s*(.*)$/.exec(line);
248
+ if (!match)
249
+ continue;
250
+ const key = match[1];
251
+ const rest = match[2].trim();
252
+ if (!rest) {
253
+ const list = [];
254
+ while (index < lines.length) {
255
+ const child = lines[index];
256
+ const listMatch = /^\s*-\s*(.*)$/.exec(child);
257
+ if (!listMatch)
258
+ break;
259
+ list.push(unquote(listMatch[1].trim()));
260
+ index += 1;
261
+ }
262
+ result[key] = list.length ? list : "";
263
+ continue;
264
+ }
265
+ result[key] = parseScalar(rest);
266
+ }
267
+ return result;
268
+ }
269
+ function serializeFrontmatter(frontmatter) {
270
+ const lines = [];
271
+ for (const [key, value] of Object.entries(frontmatter)) {
272
+ if (value === undefined || value === null || value === "" || Array.isArray(value) && value.length === 0)
273
+ continue;
274
+ if (Array.isArray(value)) {
275
+ lines.push(`${key}:`);
276
+ for (const item of value)
277
+ lines.push(` - ${quoteIfNeeded(String(item))}`);
278
+ continue;
279
+ }
280
+ if (typeof value === "object") {
281
+ lines.push(`${key}: ${JSON.stringify(value)}`);
282
+ continue;
283
+ }
284
+ lines.push(`${key}: ${quoteIfNeeded(String(value))}`);
285
+ }
286
+ return `${lines.join("\n")}\n`;
287
+ }
288
+ function parseScalar(value) {
289
+ const unquoted = unquote(value);
290
+ if (unquoted === "true")
291
+ return true;
292
+ if (unquoted === "false")
293
+ return false;
294
+ if (value.startsWith("[") || value.startsWith("{")) {
295
+ try {
296
+ return JSON.parse(value);
297
+ }
298
+ catch {
299
+ return unquoted;
300
+ }
301
+ }
302
+ if (value.includes(","))
303
+ return value.split(",").map((item) => unquote(item.trim())).filter(Boolean);
304
+ return unquoted;
305
+ }
306
+ function isRootList(options) {
307
+ return Array.isArray(options);
308
+ }
309
+ function firstWritableRoot(roots) {
310
+ const root = roots.find((candidate) => !candidate.readonly);
311
+ if (!root)
312
+ throw new Error("FileSystemSkillCatalog requires at least one writable root for create operations");
313
+ return root;
314
+ }
315
+ async function pathExists(file) {
316
+ try {
317
+ await fs.access(file);
318
+ return true;
319
+ }
320
+ catch {
321
+ return false;
322
+ }
323
+ }
324
+ function stringValue(value) {
325
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
326
+ }
327
+ function booleanValue(value) {
328
+ if (typeof value === "boolean")
329
+ return value;
330
+ if (value === "true")
331
+ return true;
332
+ if (value === "false")
333
+ return false;
334
+ return undefined;
335
+ }
336
+ function stringListValue(value) {
337
+ if (Array.isArray(value))
338
+ return value.map(String).map((item) => item.trim()).filter(Boolean);
339
+ if (typeof value === "string")
340
+ return value.split(",").map((item) => item.trim()).filter(Boolean);
341
+ return undefined;
342
+ }
343
+ function executionValue(value) {
344
+ return value === "inline" || value === "fork" ? value : undefined;
345
+ }
346
+ function effortValue(value) {
347
+ return value === "minimal" || value === "low" || value === "medium" || value === "high" ? value : undefined;
348
+ }
349
+ function trustLevelValue(value) {
350
+ return value === "builtin" || value === "workspace" || value === "user" || value === "plugin" || value === "generated" || value === "remote" ? value : undefined;
351
+ }
352
+ function recordValue(value) {
353
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
354
+ }
355
+ function firstBodyLine(body) {
356
+ return body.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
357
+ }
358
+ function unquote(value) {
359
+ const trimmed = value.trim();
360
+ if (trimmed.startsWith('"') && trimmed.endsWith('"'))
361
+ return trimmed.slice(1, -1).replace(/\\"/g, '"');
362
+ if (trimmed.startsWith("'") && trimmed.endsWith("'"))
363
+ return trimmed.slice(1, -1).replace(/\\'/g, "'");
364
+ return trimmed;
365
+ }
366
+ function quoteIfNeeded(value) {
367
+ if (/^[A-Za-z0-9_.\-/]+$/.test(value))
368
+ return value;
369
+ return JSON.stringify(value);
370
+ }
371
+ //# sourceMappingURL=skill-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-filesystem.js","sourceRoot":"","sources":["../../src/skills/skill-filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Tool } from "../tools/tool.js";
2
+ import type { MutableSkillCatalog, SkillCatalog, SkillDescriptor, SkillUpdatePatch } from "./skill-tool.js";
3
+ export interface SkillListToolInput {
4
+ includeDisabled?: boolean;
5
+ tag?: string;
6
+ query?: string;
7
+ }
8
+ export interface SkillReadToolInput {
9
+ name: string;
10
+ includeEntrypoint?: boolean;
11
+ }
12
+ export interface SkillCreateToolInput {
13
+ skill: SkillDescriptor;
14
+ overwrite?: boolean;
15
+ }
16
+ export interface SkillUpdateToolInput {
17
+ name: string;
18
+ patch: SkillUpdatePatch;
19
+ }
20
+ export interface SkillDeleteToolInput {
21
+ name: string;
22
+ }
23
+ export interface SkillValidateToolInput {
24
+ skill: unknown;
25
+ }
26
+ export interface SkillManagementToolOptions {
27
+ requireApproval?: boolean;
28
+ allowDelete?: boolean;
29
+ }
30
+ export declare function createSkillListTool(catalog: SkillCatalog): Tool<SkillListToolInput>;
31
+ export declare function createSkillReadTool(catalog: SkillCatalog): Tool<SkillReadToolInput>;
32
+ export declare function createSkillValidateTool(): Tool<SkillValidateToolInput>;
33
+ export declare function createSkillCreateTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillCreateToolInput>;
34
+ export declare function createSkillUpdateTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillUpdateToolInput>;
35
+ export declare function createSkillDeleteTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillDeleteToolInput>;
36
+ export declare function createSkillManagementTools(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<any>[];
@@ -0,0 +1,188 @@
1
+ import { normalizeSkillDescriptor, requireSkillName, summarizeSkill, validateSkillDescriptor } from "./skill-tool.js";
2
+ export function createSkillListTool(catalog) {
3
+ return {
4
+ name: "skill_list",
5
+ description: "List available reusable agent skills. Use this before invoking an unfamiliar skill.",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {
9
+ includeDisabled: { type: "boolean" },
10
+ tag: { type: "string" },
11
+ query: { type: "string" },
12
+ },
13
+ additionalProperties: false,
14
+ },
15
+ metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill catalog" },
16
+ validate(input) {
17
+ return input;
18
+ },
19
+ async call(input) {
20
+ const query = input.query?.trim().toLowerCase();
21
+ const tag = input.tag?.trim().toLowerCase();
22
+ const skills = (await catalog.list())
23
+ .filter((skill) => input.includeDisabled || skill.enabled !== false)
24
+ .filter((skill) => !tag || skill.tags?.some((value) => value.toLowerCase() === tag))
25
+ .filter((skill) => !query || [skill.name, skill.title, skill.description, ...(skill.tags ?? [])].some((value) => value?.toLowerCase().includes(query)))
26
+ .map(summarizeSkill);
27
+ return { ok: true, output: { skills } };
28
+ },
29
+ };
30
+ }
31
+ export function createSkillReadTool(catalog) {
32
+ return {
33
+ name: "skill_read",
34
+ description: "Read one skill descriptor. Set includeEntrypoint when the full skill prompt is needed.",
35
+ inputSchema: {
36
+ type: "object",
37
+ properties: {
38
+ name: { type: "string" },
39
+ includeEntrypoint: { type: "boolean" },
40
+ },
41
+ required: ["name"],
42
+ additionalProperties: false,
43
+ },
44
+ metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill catalog" },
45
+ validate(input) {
46
+ return input;
47
+ },
48
+ async call(input) {
49
+ const name = requireSkillName(input.name);
50
+ const skill = await catalog.get(name);
51
+ if (!skill)
52
+ return { ok: false, output: { error: `Unknown skill: ${name}` } };
53
+ const output = input.includeEntrypoint ? skill : summarizeSkill(skill);
54
+ return { ok: true, output };
55
+ },
56
+ };
57
+ }
58
+ export function createSkillValidateTool() {
59
+ return {
60
+ name: "skill_validate",
61
+ description: "Validate a proposed skill descriptor before creating or updating it.",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: { skill: {} },
65
+ required: ["skill"],
66
+ additionalProperties: false,
67
+ },
68
+ metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill authoring" },
69
+ validate(input) {
70
+ return input;
71
+ },
72
+ async call(input) {
73
+ const result = validateSkillDescriptor(input.skill, { requireEntrypoint: true, allowDisabled: true });
74
+ return result.ok
75
+ ? { ok: true, output: { ok: true, skill: summarizeSkill(result.value) } }
76
+ : { ok: false, output: { ok: false, issues: result.issues } };
77
+ },
78
+ };
79
+ }
80
+ export function createSkillCreateTool(catalog, options = {}) {
81
+ return {
82
+ name: "skill_create",
83
+ description: "Create a new reusable skill plugin from a validated descriptor. Use for agent-authored skills.",
84
+ inputSchema: {
85
+ type: "object",
86
+ properties: {
87
+ skill: { type: "object" },
88
+ overwrite: { type: "boolean" },
89
+ },
90
+ required: ["skill"],
91
+ additionalProperties: false,
92
+ },
93
+ metadata: { readOnly: false, concurrent: false, visible: true, requiresApproval: options.requireApproval ?? true, searchHint: "skill authoring" },
94
+ validate(input) {
95
+ return input;
96
+ },
97
+ async call(input, context) {
98
+ const validation = validateSkillDescriptor(input.skill, { requireEntrypoint: true, allowDisabled: true });
99
+ if (!validation.ok)
100
+ return { ok: false, output: { error: "Invalid skill descriptor", issues: validation.issues } };
101
+ const created = await catalog.create(normalizeSkillDescriptor({ ...validation.value, trustLevel: validation.value.trustLevel ?? "generated" }), { overwrite: input.overwrite, actor: context.agentId });
102
+ await context.options?.refreshTools?.();
103
+ return {
104
+ ok: true,
105
+ output: { status: "created", skill: summarizeSkill(created) },
106
+ newMessages: [{
107
+ ...importMetaMessage(`Skill ${created.name} has been created and is now available through the skill tool.`),
108
+ metadata: { skill: created.name, skillManagement: "created" },
109
+ }],
110
+ };
111
+ },
112
+ };
113
+ }
114
+ export function createSkillUpdateTool(catalog, options = {}) {
115
+ return {
116
+ name: "skill_update",
117
+ description: "Update an existing reusable skill descriptor. Prefer reading and validating before updating.",
118
+ inputSchema: {
119
+ type: "object",
120
+ properties: {
121
+ name: { type: "string" },
122
+ patch: { type: "object" },
123
+ },
124
+ required: ["name", "patch"],
125
+ additionalProperties: false,
126
+ },
127
+ metadata: { readOnly: false, concurrent: false, visible: true, requiresApproval: options.requireApproval ?? true, searchHint: "skill authoring" },
128
+ validate(input) {
129
+ return input;
130
+ },
131
+ async call(input, context) {
132
+ const updated = await catalog.update(requireSkillName(input.name), input.patch, { actor: context.agentId });
133
+ await context.options?.refreshTools?.();
134
+ return {
135
+ ok: true,
136
+ output: { status: "updated", skill: summarizeSkill(updated) },
137
+ newMessages: [{
138
+ ...importMetaMessage(`Skill ${updated.name} has been updated.`),
139
+ metadata: { skill: updated.name, skillManagement: "updated" },
140
+ }],
141
+ };
142
+ },
143
+ };
144
+ }
145
+ export function createSkillDeleteTool(catalog, options = {}) {
146
+ return {
147
+ name: "skill_delete",
148
+ description: "Delete a generated or writable skill. This is destructive and should normally require approval.",
149
+ inputSchema: {
150
+ type: "object",
151
+ properties: { name: { type: "string" } },
152
+ required: ["name"],
153
+ additionalProperties: false,
154
+ },
155
+ metadata: { readOnly: false, concurrent: false, visible: options.allowDelete ?? false, requiresApproval: true, destructive: true, searchHint: "skill authoring" },
156
+ validate(input) {
157
+ return input;
158
+ },
159
+ async call(input, context) {
160
+ if (options.allowDelete === false)
161
+ return { ok: false, output: { error: "skill_delete is disabled" } };
162
+ const name = requireSkillName(input.name);
163
+ const deleted = await catalog.delete(name, { actor: context.agentId });
164
+ await context.options?.refreshTools?.();
165
+ return { ok: deleted, output: { status: deleted ? "deleted" : "not_found", skill: name } };
166
+ },
167
+ };
168
+ }
169
+ export function createSkillManagementTools(catalog, options = {}) {
170
+ return [
171
+ createSkillListTool(catalog),
172
+ createSkillReadTool(catalog),
173
+ createSkillValidateTool(),
174
+ createSkillCreateTool(catalog, options),
175
+ createSkillUpdateTool(catalog, options),
176
+ createSkillDeleteTool(catalog, options),
177
+ ];
178
+ }
179
+ function importMetaMessage(text) {
180
+ return {
181
+ id: `skill_meta_${Date.now().toString(36)}`,
182
+ role: "user",
183
+ blocks: [{ type: "text", text }],
184
+ createdAt: new Date().toISOString(),
185
+ isMeta: true,
186
+ };
187
+ }
188
+ //# sourceMappingURL=skill-management-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-management-tools.js","sourceRoot":"","sources":["../../src/skills/skill-management-tools.ts"],"names":[],"mappings":"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"}