@dexto/agent-management 1.6.1 → 1.6.2

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.
Files changed (40) hide show
  1. package/dist/agent-creation.cjs +2 -1
  2. package/dist/agent-creation.d.ts.map +1 -1
  3. package/dist/agent-creation.js +2 -1
  4. package/dist/index.cjs +3 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/models/custom-models.cjs +4 -3
  9. package/dist/models/custom-models.d.ts +26 -5
  10. package/dist/models/custom-models.d.ts.map +1 -1
  11. package/dist/models/custom-models.js +4 -3
  12. package/dist/preferences/loader.cjs +2 -2
  13. package/dist/preferences/loader.d.ts +3 -3
  14. package/dist/preferences/loader.d.ts.map +1 -1
  15. package/dist/preferences/loader.js +2 -2
  16. package/dist/preferences/schemas.cjs +42 -11
  17. package/dist/preferences/schemas.d.ts +60 -12
  18. package/dist/preferences/schemas.d.ts.map +1 -1
  19. package/dist/preferences/schemas.js +43 -7
  20. package/dist/tool-factories/agent-spawner/runtime.cjs +48 -1
  21. package/dist/tool-factories/agent-spawner/runtime.d.ts +3 -1
  22. package/dist/tool-factories/agent-spawner/runtime.d.ts.map +1 -1
  23. package/dist/tool-factories/agent-spawner/runtime.js +54 -2
  24. package/dist/tool-factories/agent-spawner/schemas.cjs +12 -0
  25. package/dist/tool-factories/agent-spawner/schemas.d.ts +9 -0
  26. package/dist/tool-factories/agent-spawner/schemas.d.ts.map +1 -1
  27. package/dist/tool-factories/agent-spawner/schemas.js +10 -0
  28. package/dist/tool-factories/creator-tools/factory.cjs +434 -0
  29. package/dist/tool-factories/creator-tools/factory.d.ts +4 -0
  30. package/dist/tool-factories/creator-tools/factory.d.ts.map +1 -0
  31. package/dist/tool-factories/creator-tools/factory.js +407 -0
  32. package/dist/tool-factories/creator-tools/index.cjs +33 -0
  33. package/dist/tool-factories/creator-tools/index.d.ts +3 -0
  34. package/dist/tool-factories/creator-tools/index.d.ts.map +1 -0
  35. package/dist/tool-factories/creator-tools/index.js +10 -0
  36. package/dist/tool-factories/creator-tools/schemas.cjs +41 -0
  37. package/dist/tool-factories/creator-tools/schemas.d.ts +15 -0
  38. package/dist/tool-factories/creator-tools/schemas.d.ts.map +1 -0
  39. package/dist/tool-factories/creator-tools/schemas.js +16 -0
  40. package/package.json +5 -5
@@ -0,0 +1,434 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var factory_exports = {};
30
+ __export(factory_exports, {
31
+ creatorToolsFactory: () => creatorToolsFactory
32
+ });
33
+ module.exports = __toCommonJS(factory_exports);
34
+ var import_node_fs = require("node:fs");
35
+ var import_node_path = __toESM(require("node:path"), 1);
36
+ var import_yaml = require("yaml");
37
+ var import_core = require("@dexto/core");
38
+ var import_discover_skills = require("../../plugins/discover-skills.js");
39
+ var import_schemas = require("./schemas.js");
40
+ var import_path = require("../../utils/path.js");
41
+ var import_zod = require("zod");
42
+ const SkillCreateInputSchema = import_zod.z.object({
43
+ id: import_zod.z.string().min(1).describe("Skill id (kebab-case)."),
44
+ description: import_zod.z.string().min(1).describe("Short description of what the skill does."),
45
+ content: import_zod.z.string().min(1).describe("Skill body (markdown) without frontmatter."),
46
+ allowedTools: import_zod.z.array(import_zod.z.string().min(1)).optional().describe("Optional allowed-tools list for the skill frontmatter."),
47
+ toolkits: import_zod.z.array(import_zod.z.string().min(1)).optional().describe("Optional toolkits list for the skill frontmatter."),
48
+ scope: import_zod.z.enum(["global", "workspace"]).optional(),
49
+ overwrite: import_zod.z.boolean().optional()
50
+ }).strict();
51
+ const SkillUpdateInputSchema = import_zod.z.object({
52
+ id: import_zod.z.string().min(1),
53
+ content: import_zod.z.string().min(1).describe("New SKILL.md body (markdown) without frontmatter."),
54
+ description: import_zod.z.string().min(1).optional(),
55
+ allowedTools: import_zod.z.array(import_zod.z.string().min(1)).optional().describe("Optional allowed-tools list for the skill frontmatter."),
56
+ toolkits: import_zod.z.array(import_zod.z.string().min(1)).optional().describe("Optional toolkits list for the skill frontmatter."),
57
+ scope: import_zod.z.enum(["global", "workspace"]).optional()
58
+ }).strict();
59
+ const SkillListInputSchema = import_zod.z.object({
60
+ projectPath: import_zod.z.string().optional(),
61
+ query: import_zod.z.string().optional().describe("Optional search term to filter skills by name or path")
62
+ }).strict();
63
+ const SkillSearchInputSchema = import_zod.z.object({
64
+ query: import_zod.z.string().optional().describe("Optional search term to filter skills by name or description"),
65
+ limit: import_zod.z.number().int().min(1).max(200).optional().describe(
66
+ "Maximum number of skills to return. If omitted, all matches are returned for queries; otherwise defaults to 50."
67
+ )
68
+ }).strict();
69
+ const ToolCatalogInputSchema = import_zod.z.object({
70
+ query: import_zod.z.string().optional().describe("Optional search term to filter tools by id or description"),
71
+ limit: import_zod.z.number().int().min(1).max(500).optional().describe("Maximum number of tools to return (defaults to all)."),
72
+ includeDescriptions: import_zod.z.boolean().optional().describe("Include tool descriptions (defaults to true).")
73
+ }).strict();
74
+ function normalizeSkillQuery(value) {
75
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
76
+ }
77
+ function matchesSkillQuery(value, query) {
78
+ if (!value) return false;
79
+ const normalizedQuery = normalizeSkillQuery(query);
80
+ if (!normalizedQuery) return false;
81
+ return normalizeSkillQuery(value).includes(normalizedQuery);
82
+ }
83
+ function resolvePromptSkillName(info, id) {
84
+ return info.displayName || info.name || id;
85
+ }
86
+ function resolveWorkspaceBasePath(context) {
87
+ const workspacePath = context.workspace?.path;
88
+ const fallbackWorkingDir = context.services ? context.services.filesystemService?.getConfig().workingDirectory : void 0;
89
+ return workspacePath || fallbackWorkingDir || process.cwd();
90
+ }
91
+ function resolveWorkspaceSkillDirs(context) {
92
+ const base = resolveWorkspaceBasePath(context);
93
+ return {
94
+ primary: import_node_path.default.join(base, ".agents", "skills"),
95
+ legacy: import_node_path.default.join(base, ".dexto", "skills")
96
+ };
97
+ }
98
+ function resolveSkillBaseDirectory(scope, context) {
99
+ if (scope === "global") {
100
+ return { baseDir: (0, import_path.getDextoGlobalPath)("skills"), scope: "global" };
101
+ }
102
+ return { baseDir: resolveWorkspaceSkillDirs(context).primary, scope: "workspace" };
103
+ }
104
+ function resolveSkillDirectory(input, context) {
105
+ return resolveSkillBaseDirectory(input.scope, context);
106
+ }
107
+ async function pathExists(filePath) {
108
+ return await import_node_fs.promises.stat(filePath).then(() => true).catch(() => false);
109
+ }
110
+ async function resolveSkillUpdateDirectory(input, context) {
111
+ if (input.scope === "global") {
112
+ return resolveSkillBaseDirectory("global", context);
113
+ }
114
+ const { primary, legacy } = resolveWorkspaceSkillDirs(context);
115
+ const skillId = input.id.trim();
116
+ const primaryFile = import_node_path.default.join(primary, skillId, "SKILL.md");
117
+ if (await pathExists(primaryFile)) {
118
+ return { baseDir: primary, scope: "workspace" };
119
+ }
120
+ const legacyFile = import_node_path.default.join(legacy, skillId, "SKILL.md");
121
+ if (await pathExists(legacyFile)) {
122
+ return { baseDir: legacy, scope: "workspace" };
123
+ }
124
+ return { baseDir: primary, scope: "workspace" };
125
+ }
126
+ function ensurePathWithinBase(baseDir, targetDir, toolId) {
127
+ const resolvedBase = import_node_path.default.resolve(baseDir);
128
+ const resolvedTarget = import_node_path.default.resolve(targetDir);
129
+ const rel = import_node_path.default.relative(resolvedBase, resolvedTarget);
130
+ if (rel.startsWith("..") || import_node_path.default.isAbsolute(rel)) {
131
+ throw import_core.ToolError.validationFailed(toolId, "invalid skill path");
132
+ }
133
+ }
134
+ function formatFrontmatterLine(key, value) {
135
+ if (typeof value === "string") {
136
+ return `${key}: ${JSON.stringify(value)}`;
137
+ }
138
+ return `${key}: ${value}`;
139
+ }
140
+ function titleizeSkillId(id) {
141
+ return id.split("-").filter(Boolean).map((segment) => segment[0]?.toUpperCase() + segment.slice(1)).join(" ");
142
+ }
143
+ function resolveSkillCreateInput(input) {
144
+ const id = input.id.trim();
145
+ const description = input.description.trim();
146
+ const content = input.content.trim();
147
+ return {
148
+ ...input,
149
+ id,
150
+ description,
151
+ content
152
+ };
153
+ }
154
+ function formatFrontmatterList(key, values) {
155
+ const normalized = values.map((value) => JSON.stringify(value.trim()));
156
+ return `${key}: [${normalized.join(", ")}]`;
157
+ }
158
+ function buildSkillMarkdownFromParts(options) {
159
+ const id = options.id.trim();
160
+ const title = titleizeSkillId(id) || id;
161
+ const lines = ["---"];
162
+ lines.push(formatFrontmatterLine("name", id));
163
+ lines.push(formatFrontmatterLine("description", options.description.trim()));
164
+ if (options.toolkits && options.toolkits.length > 0) {
165
+ lines.push(formatFrontmatterList("toolkits", options.toolkits));
166
+ }
167
+ if (options.allowedTools && options.allowedTools.length > 0) {
168
+ lines.push(formatFrontmatterList("allowed-tools", options.allowedTools));
169
+ }
170
+ lines.push("---", "", `# ${title}`, "", options.content.trim());
171
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n");
172
+ }
173
+ function buildSkillMarkdown(input) {
174
+ return buildSkillMarkdownFromParts({
175
+ id: input.id,
176
+ description: input.description,
177
+ content: input.content,
178
+ allowedTools: input.allowedTools,
179
+ toolkits: input.toolkits
180
+ });
181
+ }
182
+ async function readSkillFrontmatter(skillFile) {
183
+ try {
184
+ const raw = await import_node_fs.promises.readFile(skillFile, "utf-8");
185
+ const match = raw.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
186
+ if (!match) return {};
187
+ const frontmatter = (0, import_yaml.parse)(match[1] ?? "");
188
+ if (!frontmatter || typeof frontmatter !== "object") return {};
189
+ const name = typeof frontmatter.name === "string" ? frontmatter.name.trim() : void 0;
190
+ const description = typeof frontmatter.description === "string" ? frontmatter.description.trim() : void 0;
191
+ const allowedToolsRaw = frontmatter["allowed-tools"];
192
+ const toolkitsRaw = frontmatter.toolkits;
193
+ const allowedTools = Array.isArray(allowedToolsRaw) ? allowedToolsRaw.filter((item) => typeof item === "string").map((item) => item.trim()).filter((item) => item.length > 0) : void 0;
194
+ const toolkits = Array.isArray(toolkitsRaw) ? toolkitsRaw.filter((item) => typeof item === "string").map((item) => item.trim()).filter((item) => item.length > 0) : void 0;
195
+ const result = {};
196
+ if (name) result.name = name;
197
+ if (description) result.description = description;
198
+ if (allowedTools && allowedTools.length > 0) result.allowedTools = allowedTools;
199
+ if (toolkits && toolkits.length > 0) result.toolkits = toolkits;
200
+ return result;
201
+ } catch {
202
+ return {};
203
+ }
204
+ }
205
+ async function refreshAgentPrompts(context, skillFile) {
206
+ const agent = context.agent;
207
+ if (!agent) return false;
208
+ const effective = agent.getEffectiveConfig();
209
+ const existingPrompts = Array.isArray(effective.prompts) ? [...effective.prompts] : [];
210
+ const alreadyPresent = existingPrompts.some((prompt) => {
211
+ if (!prompt || typeof prompt !== "object") return false;
212
+ const record = prompt;
213
+ return record.type === "file" && record.file === skillFile;
214
+ });
215
+ const nextPrompts = alreadyPresent ? existingPrompts : [...existingPrompts, { type: "file", file: skillFile }];
216
+ await agent.refreshPrompts(nextPrompts);
217
+ return true;
218
+ }
219
+ const creatorToolsFactory = {
220
+ configSchema: import_schemas.CreatorToolsConfigSchema,
221
+ metadata: {
222
+ displayName: "Creator Tools",
223
+ description: "Create and manage standalone skills",
224
+ category: "agents"
225
+ },
226
+ create: (config) => {
227
+ const enabledTools = config.enabledTools ?? import_schemas.CREATOR_TOOL_NAMES;
228
+ const skillCreateTool = (0, import_core.defineTool)({
229
+ id: "skill_create",
230
+ description: "Create a standalone SKILL.md file and register it with the running agent. Provide id, description, content, and optional toolkits/allowedTools.",
231
+ inputSchema: SkillCreateInputSchema,
232
+ execute: async (input, context) => {
233
+ const resolvedInput = resolveSkillCreateInput(input);
234
+ const skillId = resolvedInput.id.trim();
235
+ (0, import_core.assertValidPromptName)(skillId, {
236
+ context: "skill_create",
237
+ hint: "Use kebab-case skill ids (e.g., release-notes)"
238
+ });
239
+ const { baseDir, scope } = resolveSkillDirectory(resolvedInput, context);
240
+ const skillDir = import_node_path.default.join(baseDir, skillId);
241
+ ensurePathWithinBase(baseDir, skillDir, "skill_create");
242
+ const skillFile = import_node_path.default.join(skillDir, "SKILL.md");
243
+ const exists = await pathExists(skillFile);
244
+ if (exists && !resolvedInput.overwrite) {
245
+ throw import_core.ToolError.validationFailed(
246
+ "skill_create",
247
+ `Skill already exists at ${skillFile}`
248
+ );
249
+ }
250
+ const markdown = buildSkillMarkdown(resolvedInput);
251
+ await import_node_fs.promises.mkdir(skillDir, { recursive: true });
252
+ await import_node_fs.promises.writeFile(skillFile, markdown, "utf-8");
253
+ const refreshed = await refreshAgentPrompts(context, skillFile);
254
+ const displayName = titleizeSkillId(skillId) || skillId;
255
+ return {
256
+ created: true,
257
+ id: skillId,
258
+ name: displayName,
259
+ description: resolvedInput.description.trim(),
260
+ scope,
261
+ path: skillFile,
262
+ promptsRefreshed: refreshed
263
+ };
264
+ }
265
+ });
266
+ const skillUpdateTool = (0, import_core.defineTool)({
267
+ id: "skill_update",
268
+ description: "Update an existing standalone SKILL.md file.",
269
+ inputSchema: SkillUpdateInputSchema,
270
+ execute: async (input, context) => {
271
+ const skillId = input.id.trim();
272
+ (0, import_core.assertValidPromptName)(skillId, {
273
+ context: "skill_update",
274
+ hint: "Use kebab-case skill ids (e.g., release-notes)"
275
+ });
276
+ const { baseDir, scope } = await resolveSkillUpdateDirectory(input, context);
277
+ const skillDir = import_node_path.default.join(baseDir, skillId);
278
+ ensurePathWithinBase(baseDir, skillDir, "skill_update");
279
+ const skillFile = import_node_path.default.join(skillDir, "SKILL.md");
280
+ const exists = await pathExists(skillFile);
281
+ if (!exists) {
282
+ throw import_core.ToolError.validationFailed(
283
+ "skill_update",
284
+ `Skill not found at ${skillFile}`
285
+ );
286
+ }
287
+ const existing = await readSkillFrontmatter(skillFile);
288
+ const description = input.description?.trim() || existing.description;
289
+ if (!description) {
290
+ throw import_core.ToolError.validationFailed(
291
+ "skill_update",
292
+ "description is required when the existing skill is missing one"
293
+ );
294
+ }
295
+ const allowedTools = input.allowedTools !== void 0 ? input.allowedTools : existing.allowedTools;
296
+ const toolkits = input.toolkits !== void 0 ? input.toolkits : existing.toolkits;
297
+ const markdown = buildSkillMarkdownFromParts({
298
+ id: skillId,
299
+ description,
300
+ content: input.content.trim(),
301
+ allowedTools,
302
+ toolkits
303
+ });
304
+ await import_node_fs.promises.writeFile(skillFile, markdown, "utf-8");
305
+ const refreshed = await refreshAgentPrompts(context, skillFile);
306
+ return {
307
+ updated: true,
308
+ id: skillId,
309
+ description,
310
+ scope,
311
+ path: skillFile,
312
+ promptsRefreshed: refreshed
313
+ };
314
+ }
315
+ });
316
+ const skillSearchTool = (0, import_core.defineTool)({
317
+ id: "skill_search",
318
+ description: "Search loaded skills (supports query).",
319
+ inputSchema: SkillSearchInputSchema,
320
+ execute: async (input, context) => {
321
+ const query = input.query?.trim() ?? "";
322
+ const normalizedQuery = normalizeSkillQuery(query);
323
+ const hasQuery = normalizedQuery.length > 0;
324
+ const limit = input.limit ?? (hasQuery ? void 0 : 50);
325
+ const promptManager = context.services?.prompts;
326
+ if (!promptManager) {
327
+ throw import_core.ToolError.configInvalid(
328
+ "skill_search requires ToolExecutionContext.services.prompts"
329
+ );
330
+ }
331
+ const loaded = await promptManager.list();
332
+ let results = Object.entries(loaded).map(([id, info]) => ({
333
+ id,
334
+ name: resolvePromptSkillName(info, id),
335
+ ...info.displayName ? { displayName: info.displayName } : {},
336
+ ...info.commandName ? { commandName: info.commandName } : {},
337
+ ...info.description ? { description: info.description } : {},
338
+ ...info.context ? { context: info.context } : {},
339
+ ...info.agent ? { agent: info.agent } : {}
340
+ }));
341
+ if (hasQuery && normalizedQuery) {
342
+ results = results.filter((entry) => {
343
+ if (matchesSkillQuery(entry.id, normalizedQuery)) return true;
344
+ if (matchesSkillQuery(entry.name, normalizedQuery)) return true;
345
+ if (matchesSkillQuery(entry.displayName, normalizedQuery)) return true;
346
+ if (matchesSkillQuery(entry.commandName, normalizedQuery)) return true;
347
+ if (matchesSkillQuery(entry.description, normalizedQuery)) return true;
348
+ return false;
349
+ });
350
+ }
351
+ results.sort((a, b) => a.name.localeCompare(b.name));
352
+ const limited = typeof limit === "number" ? results.slice(0, limit) : results;
353
+ return {
354
+ query: input.query?.trim(),
355
+ count: limited.length,
356
+ total: results.length,
357
+ skills: limited,
358
+ _hint: limited.length > 0 ? "Use invoke_skill with the skill id or commandName for loaded skills." : "No skills matched the query."
359
+ };
360
+ }
361
+ });
362
+ const skillListTool = (0, import_core.defineTool)({
363
+ id: "skill_list",
364
+ description: "List discovered standalone skills and their search paths. Supports optional query filtering.",
365
+ inputSchema: SkillListInputSchema,
366
+ execute: async (input) => {
367
+ const query = input.query?.trim().toLowerCase();
368
+ const skills = (0, import_discover_skills.discoverStandaloneSkills)(input.projectPath);
369
+ const filtered = query ? skills.filter((skill) => {
370
+ if (skill.name.toLowerCase().includes(query)) return true;
371
+ if (skill.path.toLowerCase().includes(query)) return true;
372
+ if (skill.skillFile.toLowerCase().includes(query)) return true;
373
+ return false;
374
+ }) : skills;
375
+ return {
376
+ searchPaths: (0, import_discover_skills.getSkillSearchPaths)(),
377
+ skills: filtered
378
+ };
379
+ }
380
+ });
381
+ const toolCatalogTool = (0, import_core.defineTool)({
382
+ id: "tool_catalog",
383
+ description: "List available tools and configured toolkits for the current agent (from the loaded image/config).",
384
+ inputSchema: ToolCatalogInputSchema,
385
+ execute: async (input, context) => {
386
+ const agent = context.agent;
387
+ if (!agent) {
388
+ throw import_core.ToolError.configInvalid(
389
+ "tool_catalog requires ToolExecutionContext.agent"
390
+ );
391
+ }
392
+ const toolSet = await agent.getAllTools();
393
+ let tools = Object.entries(toolSet).map(([id, tool]) => ({
394
+ id,
395
+ description: tool.description || "No description provided",
396
+ source: id.startsWith("mcp--") ? "mcp" : "local"
397
+ }));
398
+ const query = input.query?.trim().toLowerCase();
399
+ if (query) {
400
+ tools = tools.filter((tool) => {
401
+ if (tool.id.toLowerCase().includes(query)) return true;
402
+ if ((tool.description ?? "").toLowerCase().includes(query)) return true;
403
+ return false;
404
+ });
405
+ }
406
+ tools.sort((a, b) => a.id.localeCompare(b.id));
407
+ const includeDescriptions = input.includeDescriptions !== false;
408
+ if (!includeDescriptions) {
409
+ tools = tools.map((tool) => ({ id: tool.id, source: tool.source }));
410
+ }
411
+ const limited = typeof input.limit === "number" ? tools.slice(0, input.limit) : tools;
412
+ return {
413
+ query: input.query?.trim(),
414
+ count: limited.length,
415
+ total: tools.length,
416
+ tools: limited,
417
+ _hint: limited.length > 0 ? "Use tool ids in allowed-tools. Use toolkits from the agent config or image defaults." : "No tools matched the query."
418
+ };
419
+ }
420
+ });
421
+ const toolCreators = {
422
+ skill_create: () => skillCreateTool,
423
+ skill_update: () => skillUpdateTool,
424
+ skill_search: () => skillSearchTool,
425
+ skill_list: () => skillListTool,
426
+ tool_catalog: () => toolCatalogTool
427
+ };
428
+ return enabledTools.map((toolName) => toolCreators[toolName]());
429
+ }
430
+ };
431
+ // Annotate the CommonJS export names for ESM import in node:
432
+ 0 && (module.exports = {
433
+ creatorToolsFactory
434
+ });
@@ -0,0 +1,4 @@
1
+ import type { ToolFactory } from '@dexto/agent-config';
2
+ import { type CreatorToolsConfig } from './schemas.js';
3
+ export declare const creatorToolsFactory: ToolFactory<CreatorToolsConfig>;
4
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/tool-factories/creator-tools/factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvD,OAAO,EAIH,KAAK,kBAAkB,EAC1B,MAAM,cAAc,CAAC;AAkWtB,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,kBAAkB,CA6P/D,CAAC"}