@agentforge/tools 0.12.4 → 0.12.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/web/http/types.ts","../src/web/http/tools/http-client.ts","../src/web/http/tools/http-get.ts","../src/web/http/tools/http-post.ts","../src/web/http/index.ts","../src/web/scraper/types.ts","../src/web/scraper/tools/web-scraper.ts","../src/web/scraper/index.ts","../src/web/html-parser/types.ts","../src/web/html-parser/tools/html-parser.ts","../src/web/html-parser/tools/extract-links.ts","../src/web/html-parser/tools/extract-images.ts","../src/web/html-parser/index.ts","../src/web/url-validator/types.ts","../src/web/url-validator/tools/url-validator.ts","../src/web/url-validator/tools/url-builder.ts","../src/web/url-validator/tools/url-query-parser.ts","../src/web/url-validator/index.ts","../src/web/web-search/schemas.ts","../src/web/web-search/utils.ts","../src/web/web-search/providers/duckduckgo.ts","../src/web/web-search/providers/serper.ts","../src/web/web-search/index.ts","../src/web/slack/auth.ts","../src/web/slack/tools/send-slack-message.ts","../src/web/slack/tools/notify-slack.ts","../src/web/slack/tools/get-slack-channels.ts","../src/web/slack/tools/get-slack-messages.ts","../src/web/slack/index.ts","../src/web/confluence/auth.ts","../src/web/confluence/tools/search-confluence.ts","../src/web/confluence/tools/get-confluence-page.ts","../src/web/confluence/tools/list-confluence-spaces.ts","../src/web/confluence/tools/get-space-pages.ts","../src/web/confluence/tools/create-confluence-page.ts","../src/web/confluence/tools/update-confluence-page.ts","../src/web/confluence/tools/archive-confluence-page.ts","../src/web/confluence/index.ts","../src/data/csv/types.ts","../src/data/csv/tools/csv-parser.ts","../src/data/csv/tools/csv-generator.ts","../src/data/csv/tools/csv-to-json.ts","../src/data/csv/tools/json-to-csv.ts","../src/data/csv/index.ts","../src/data/json/types.ts","../src/data/json/tools/json-parser.ts","../src/data/json/tools/json-stringify.ts","../src/data/json/tools/json-query.ts","../src/data/json/tools/json-validator.ts","../src/data/json/tools/json-merge.ts","../src/data/json/index.ts","../src/data/xml/types.ts","../src/data/xml/tools/xml-parser.ts","../src/data/xml/tools/xml-generator.ts","../src/data/xml/tools/xml-to-json.ts","../src/data/xml/tools/json-to-xml.ts","../src/data/xml/index.ts","../src/data/transformer/types.ts","../src/data/transformer/tools/array-filter.ts","../src/data/transformer/tools/array-map.ts","../src/data/transformer/tools/array-sort.ts","../src/data/transformer/tools/array-group-by.ts","../src/data/transformer/tools/object-pick.ts","../src/data/transformer/tools/object-omit.ts","../src/data/transformer/index.ts","../src/file/operations/types.ts","../src/file/operations/tools/file-reader.ts","../src/file/operations/tools/file-writer.ts","../src/file/operations/tools/file-append.ts","../src/file/operations/tools/file-delete.ts","../src/file/operations/tools/file-exists.ts","../src/file/operations/index.ts","../src/file/directory/types.ts","../src/file/directory/tools/directory-list.ts","../src/file/directory/tools/directory-create.ts","../src/file/directory/tools/directory-delete.ts","../src/file/directory/tools/file-search.ts","../src/file/directory/index.ts","../src/file/path/types.ts","../src/file/path/tools/path-join.ts","../src/file/path/tools/path-resolve.ts","../src/file/path/tools/path-parse.ts","../src/file/path/tools/path-basename.ts","../src/file/path/tools/path-dirname.ts","../src/file/path/tools/path-extension.ts","../src/file/path/tools/path-relative.ts","../src/file/path/tools/path-normalize.ts","../src/file/path/index.ts","../src/utility/date-time/types.ts","../src/utility/date-time/tools/current-date-time.ts","../src/utility/date-time/tools/date-formatter.ts","../src/utility/date-time/tools/date-arithmetic.ts","../src/utility/date-time/tools/date-difference.ts","../src/utility/date-time/tools/date-comparison.ts","../src/utility/date-time/index.ts","../src/utility/string/types.ts","../src/utility/string/tools/string-case-converter.ts","../src/utility/string/tools/string-trim.ts","../src/utility/string/tools/string-replace.ts","../src/utility/string/tools/string-split.ts","../src/utility/string/tools/string-join.ts","../src/utility/string/tools/string-substring.ts","../src/utility/string/tools/string-length.ts","../src/utility/string/index.ts","../src/utility/math/types.ts","../src/utility/math/tools/calculator.ts","../src/utility/math/tools/math-functions.ts","../src/utility/math/tools/random-number.ts","../src/utility/math/tools/statistics.ts","../src/utility/math/index.ts","../src/utility/validation/types.ts","../src/utility/validation/tools/email-validator.ts","../src/utility/validation/tools/url-validator-simple.ts","../src/utility/validation/tools/phone-validator.ts","../src/utility/validation/tools/credit-card-validator.ts","../src/utility/validation/tools/ip-validator.ts","../src/utility/validation/tools/uuid-validator.ts","../src/utility/validation/index.ts","../src/agent/ask-human/types.ts","../src/agent/ask-human/tool.ts"],"names":["axios","toolBuilder","ToolCategory","z","cheerio2","cheerio3","cheerio4","resolve","logger","getAuthHeader","logLevel","LogLevel","createLogger","searchConfluence","getConfluencePage","listConfluenceSpaces","getSpacePages","createConfluencePage","updateConfluencePage","archiveConfluencePage","parse","stringify","format","XMLParser","XMLBuilder","path","fs","recursive","files","path2","matches","path3","path4","path5","path6","basename","dirname","path8","path9","relative","path10","path11","isValid"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * HTTP Tools Types\n * \n * Type definitions for HTTP client tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * HTTP method enum\n */\nexport const HttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n/**\n * HTTP request schema\n */\nexport const httpRequestSchema = z.object({\n url: z.string().url().describe('The URL to make the request to'),\n method: HttpMethod.default('GET').describe('HTTP method to use'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n body: z.any().optional().describe('Optional request body (for POST, PUT, PATCH)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP response type\n */\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n url: string;\n method: string;\n}\n\n/**\n * HTTP GET request schema\n */\nexport const httpGetSchema = z.object({\n url: z.string().url().describe('The URL to fetch'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP POST request schema\n */\nexport const httpPostSchema = z.object({\n url: z.string().url().describe('The URL to post to'),\n body: z.any().describe('The request body (will be sent as JSON)'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n});\n\n/**\n * HTTP tools configuration\n */\nexport interface HttpToolsConfig {\n defaultTimeout?: number;\n defaultHeaders?: Record<string, string>;\n}\n\n","/**\n * HTTP Client Tool\n * \n * Make HTTP requests with support for GET, POST, PUT, DELETE, PATCH methods.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { httpRequestSchema, HttpResponse } from '../types.js';\n\n/**\n * Create HTTP client tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n * \n * @example\n * ```ts\n * const result = await httpClient.execute({\n * url: 'https://api.example.com/data',\n * method: 'GET',\n * headers: { 'Authorization': 'Bearer token' }\n * });\n * ```\n */\nexport function createHttpClientTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-client')\n .description('Make HTTP requests to web APIs and services. Supports GET, POST, PUT, DELETE, PATCH methods with custom headers and body.')\n .category(ToolCategory.WEB)\n .tags(['http', 'api', 'request', 'web'])\n .schema(httpRequestSchema)\n .implement(async (input): Promise<HttpResponse> => {\n const config: AxiosRequestConfig = {\n method: input.method,\n url: input.url,\n headers: { ...defaultHeaders, ...input.headers },\n data: input.body,\n timeout: input.timeout ?? defaultTimeout,\n params: input.params,\n validateStatus: () => true, // Don't throw on any status code\n };\n\n const response = await axios(config);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers as Record<string, string>,\n data: response.data,\n url: input.url,\n method: input.method ?? 'GET',\n };\n })\n .build();\n}\n\n","/**\n * HTTP GET Tool\n * \n * Make simple HTTP GET requests.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport { httpGetSchema } from '../types.js';\n\n/**\n * Create HTTP GET tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n */\nexport function createHttpGetTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-get')\n .description('Make a simple HTTP GET request to a URL and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'get', 'fetch', 'web'])\n .schema(httpGetSchema)\n .implement(async (input) => {\n const response = await axios.get(input.url, {\n headers: { ...defaultHeaders, ...input.headers },\n params: input.params,\n timeout: defaultTimeout,\n });\n return response.data;\n })\n .build();\n}\n\n","/**\n * HTTP POST Tool\n * \n * Make simple HTTP POST requests with JSON body.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport { httpPostSchema } from '../types.js';\n\n/**\n * Create HTTP POST tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n */\nexport function createHttpPostTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-post')\n .description('Make a simple HTTP POST request with JSON body and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'post', 'api', 'web'])\n .schema(httpPostSchema)\n .implement(async (input) => {\n const response = await axios.post(input.url, input.body, {\n headers: {\n 'Content-Type': 'application/json',\n ...defaultHeaders,\n ...input.headers,\n },\n timeout: defaultTimeout,\n });\n return response.data;\n })\n .build();\n}\n\n","/**\n * HTTP Tools\n * \n * Tools for making HTTP requests to web APIs and services.\n */\n\nimport { createHttpClientTool } from './tools/http-client.js';\nimport { createHttpGetTool } from './tools/http-get.js';\nimport { createHttpPostTool } from './tools/http-post.js';\nimport type { HttpToolsConfig } from './types.js';\n\n// Export types\nexport * from './types.js';\n\n// Default tool instances\nexport const httpClient = createHttpClientTool();\nexport const httpGet = createHttpGetTool();\nexport const httpPost = createHttpPostTool();\n\n// Tools array\nexport const httpTools = [httpClient, httpGet, httpPost];\n\n/**\n * Create HTTP tools with custom configuration\n * \n * @param config - Configuration options for HTTP tools\n * @returns Array of configured HTTP tools\n * \n * @example\n * ```ts\n * const tools = createHttpTools({\n * defaultTimeout: 60000,\n * defaultHeaders: { 'User-Agent': 'MyApp/1.0' }\n * });\n * ```\n */\nexport function createHttpTools(config: HttpToolsConfig = {}) {\n const { defaultTimeout = 30000, defaultHeaders = {} } = config;\n\n return [\n createHttpClientTool(defaultTimeout, defaultHeaders),\n createHttpGetTool(defaultTimeout, defaultHeaders),\n createHttpPostTool(defaultTimeout, defaultHeaders),\n ];\n}\n\n","/**\n * Web Scraper Types\n * \n * Type definitions for web scraping tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Scraper result type\n */\nexport interface ScraperResult {\n url: string;\n title?: string;\n text?: string;\n html?: string;\n links?: string[];\n images?: string[];\n metadata?: Record<string, string>;\n selected?: any;\n}\n\n/**\n * Scraper tools configuration\n */\nexport interface ScraperToolsConfig {\n defaultTimeout?: number;\n userAgent?: string;\n}\n\n/**\n * Web scraper input schema\n */\nexport const webScraperSchema = z.object({\n url: z.string().url().describe('The URL of the web page to scrape'),\n selector: z.string().optional().describe('Optional CSS selector to extract specific elements'),\n extractText: z.boolean().default(true).describe('Extract text content from the page'),\n extractHtml: z.boolean().default(false).describe('Extract raw HTML content'),\n extractLinks: z.boolean().default(false).describe('Extract all links from the page'),\n extractImages: z.boolean().default(false).describe('Extract all image URLs from the page'),\n extractMetadata: z.boolean().default(false).describe('Extract meta tags (title, description, etc.)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n});\n\n","/**\n * Web Scraper Tool\n * \n * Scrape and extract data from web pages using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport * as cheerio from 'cheerio';\nimport { webScraperSchema, type ScraperResult } from '../types.js';\n\n/**\n * Create a web scraper tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param userAgent - User agent string for requests\n * @returns Web scraper tool\n * \n * @example\n * ```ts\n * const scraper = createWebScraperTool(60000, 'MyBot/1.0');\n * const result = await scraper.execute({\n * url: 'https://example.com',\n * selector: 'article h1',\n * extractText: true\n * });\n * ```\n */\nexport function createWebScraperTool(\n defaultTimeout: number = 30000,\n userAgent: string = 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)'\n) {\n return toolBuilder()\n .name('web-scraper')\n .description('Scrape and extract data from web pages. Can extract text, HTML, links, images, and use CSS selectors to target specific elements.')\n .category(ToolCategory.WEB)\n .tags(['scraper', 'web', 'html', 'extract', 'parse'])\n .schema(webScraperSchema)\n .implement(async (input): Promise<ScraperResult> => {\n // Fetch the page\n const response = await axios.get(input.url, {\n timeout: input.timeout || defaultTimeout,\n headers: {\n 'User-Agent': userAgent,\n },\n });\n\n const html = response.data;\n const $ = cheerio.load(html);\n\n const result: ScraperResult = {\n url: input.url,\n };\n\n // Apply selector if provided\n const $selected = input.selector ? $(input.selector) : $('body');\n\n // Extract text\n if (input.extractText) {\n result.text = $selected.text().trim();\n }\n\n // Extract HTML\n if (input.extractHtml) {\n result.html = $selected.html() || '';\n }\n\n // Extract links\n if (input.extractLinks) {\n result.links = [];\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href');\n if (href) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(href, input.url).href;\n result.links!.push(absoluteUrl);\n } catch {\n result.links!.push(href);\n }\n }\n });\n }\n\n // Extract images\n if (input.extractImages) {\n result.images = [];\n $('img[src]').each((_, el) => {\n const src = $(el).attr('src');\n if (src) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(src, input.url).href;\n result.images!.push(absoluteUrl);\n } catch {\n result.images!.push(src);\n }\n }\n });\n }\n\n // Extract metadata\n if (input.extractMetadata) {\n result.metadata = {};\n \n // Title\n const title = $('title').text() || $('meta[property=\"og:title\"]').attr('content');\n if (title) result.metadata.title = title;\n\n // Description\n const description = $('meta[name=\"description\"]').attr('content') || \n $('meta[property=\"og:description\"]').attr('content');\n if (description) result.metadata.description = description;\n\n // Other meta tags\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) {\n result.metadata![name] = content;\n }\n });\n }\n\n // If selector was provided, return the selected elements\n if (input.selector) {\n result.selected = $selected.map((_, el) => ({\n text: $(el).text().trim(),\n html: $(el).html(),\n })).get();\n }\n\n return result;\n })\n .build();\n}\n\n","/**\n * Web Scraper Tools\n * \n * Tools for scraping and extracting data from web pages.\n */\n\n// Export types\nexport type { ScraperResult, ScraperToolsConfig } from './types.js';\nexport { webScraperSchema } from './types.js';\n\n// Export tool factory\nexport { createWebScraperTool } from './tools/web-scraper.js';\nimport { createWebScraperTool } from './tools/web-scraper.js';\n\n// Default tool instance\nexport const webScraper = createWebScraperTool();\n\n// Tools array\nexport const scraperTools = [webScraper];\n\n/**\n * Create scraper tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of scraper tools\n * \n * @example\n * ```ts\n * const tools = createScraperTools({\n * defaultTimeout: 60000,\n * userAgent: 'MyBot/1.0'\n * });\n * ```\n */\nexport function createScraperTools(config: import('./types.js').ScraperToolsConfig = {}) {\n const { defaultTimeout = 30000, userAgent = 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)' } = config;\n return [createWebScraperTool(defaultTimeout, userAgent)];\n}\n\n","/**\n * HTML Parser Types\n * \n * Type definitions for HTML parsing tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * HTML parser tools configuration\n */\nexport interface HtmlParserToolsConfig {\n // No specific config needed for HTML parser tools currently\n}\n\n/**\n * HTML parser input schema\n */\nexport const htmlParserSchema = z.object({\n html: z.string().describe('The HTML content to parse'),\n selector: z.string().describe('CSS selector to find elements'),\n extractText: z.boolean().default(true).describe('Extract text content from selected elements'),\n extractHtml: z.boolean().default(false).describe('Extract inner HTML of selected elements'),\n extractAttributes: z.array(z.string().describe(\"String value\")).optional().describe('List of attributes to extract (e.g., [\"href\", \"src\", \"class\"])'),\n});\n\n/**\n * Extract links input schema\n */\nexport const extractLinksSchema = z.object({\n html: z.string().describe('The HTML content to extract links from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative links'),\n});\n\n/**\n * Extract images input schema\n */\nexport const extractImagesSchema = z.object({\n html: z.string().describe('The HTML content to extract images from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative image URLs'),\n});\n\n","/**\n * HTML Parser Tool\n * \n * Parse HTML content and extract data using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { htmlParserSchema } from '../types.js';\n\n/**\n * Create an HTML parser tool\n * \n * @returns HTML parser tool\n * \n * @example\n * ```ts\n * const parser = createHtmlParserTool();\n * const result = await parser.execute({\n * html: '<div class=\"content\"><h1>Title</h1><p>Text</p></div>',\n * selector: '.content h1'\n * });\n * ```\n */\nexport function createHtmlParserTool() {\n return toolBuilder()\n .name('html-parser')\n .description('Parse HTML content and extract data using CSS selectors. Returns text, attributes, and structure of selected elements.')\n .category(ToolCategory.WEB)\n .tags(['html', 'parser', 'css', 'selector', 'extract'])\n .schema(htmlParserSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const $selected = $(input.selector);\n\n const results = $selected.map((_, el) => {\n const $el = $(el);\n const item: any = {};\n\n if (input.extractText) {\n item.text = $el.text().trim();\n }\n\n if (input.extractHtml) {\n item.html = $el.html();\n }\n\n if (input.extractAttributes && input.extractAttributes.length > 0) {\n item.attributes = {};\n for (const attr of input.extractAttributes) {\n const value = $el.attr(attr);\n if (value !== undefined) {\n item.attributes[attr] = value;\n }\n }\n }\n\n return item;\n }).get();\n\n return {\n count: results.length,\n results,\n };\n })\n .build();\n}\n\n","/**\n * Extract Links Tool\n * \n * Extract all links from HTML content.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { extractLinksSchema } from '../types.js';\n\n/**\n * Create an extract links tool\n * \n * @returns Extract links tool\n * \n * @example\n * ```ts\n * const extractor = createExtractLinksTool();\n * const result = await extractor.execute({\n * html: '<a href=\"/page\">Link</a>',\n * baseUrl: 'https://example.com'\n * });\n * ```\n */\nexport function createExtractLinksTool() {\n return toolBuilder()\n .name('extract-links')\n .description('Extract all links (anchor tags) from HTML content with their text and href attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'links', 'extract', 'anchor'])\n .schema(extractLinksSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const links: Array<{ text: string; href: string; title?: string }> = [];\n\n $('a[href]').each((_, el) => {\n const $el = $(el);\n let href = $el.attr('href') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && href) {\n try {\n href = new URL(href, input.baseUrl).href;\n } catch {\n // Keep original href if URL parsing fails\n }\n }\n\n links.push({\n text: $el.text().trim(),\n href,\n title: $el.attr('title'),\n });\n });\n\n return {\n count: links.length,\n links,\n };\n })\n .build();\n}\n\n","/**\n * Extract Images Tool\n * \n * Extract all images from HTML content.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { extractImagesSchema } from '../types.js';\n\n/**\n * Create an extract images tool\n * \n * @returns Extract images tool\n * \n * @example\n * ```ts\n * const extractor = createExtractImagesTool();\n * const result = await extractor.execute({\n * html: '<img src=\"/image.jpg\" alt=\"Image\">',\n * baseUrl: 'https://example.com'\n * });\n * ```\n */\nexport function createExtractImagesTool() {\n return toolBuilder()\n .name('extract-images')\n .description('Extract all images from HTML content with their src, alt, and other attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'images', 'extract', 'img'])\n .schema(extractImagesSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const images: Array<{ src: string; alt?: string; title?: string; width?: string; height?: string }> = [];\n\n $('img[src]').each((_, el) => {\n const $el = $(el);\n let src = $el.attr('src') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && src) {\n try {\n src = new URL(src, input.baseUrl).href;\n } catch {\n // Keep original src if URL parsing fails\n }\n }\n\n images.push({\n src,\n alt: $el.attr('alt'),\n title: $el.attr('title'),\n width: $el.attr('width'),\n height: $el.attr('height'),\n });\n });\n\n return {\n count: images.length,\n images,\n };\n })\n .build();\n}\n\n","/**\n * HTML Parser Tools\n * \n * Tools for parsing HTML content and extracting data.\n */\n\n// Export types\nexport type { HtmlParserToolsConfig } from './types.js';\nexport { htmlParserSchema, extractLinksSchema, extractImagesSchema } from './types.js';\n\n// Export tool factories\nexport { createHtmlParserTool } from './tools/html-parser.js';\nexport { createExtractLinksTool } from './tools/extract-links.js';\nexport { createExtractImagesTool } from './tools/extract-images.js';\n\n// Import for default instances\nimport { createHtmlParserTool } from './tools/html-parser.js';\nimport { createExtractLinksTool } from './tools/extract-links.js';\nimport { createExtractImagesTool } from './tools/extract-images.js';\n\n// Default tool instances\nexport const htmlParser = createHtmlParserTool();\nexport const extractLinks = createExtractLinksTool();\nexport const extractImages = createExtractImagesTool();\n\n// Tools array\nexport const htmlParserTools = [htmlParser, extractLinks, extractImages];\n\n/**\n * Create HTML parser tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of HTML parser tools\n * \n * @example\n * ```ts\n * const tools = createHtmlParserTools();\n * ```\n */\nexport function createHtmlParserTools(config: import('./types.js').HtmlParserToolsConfig = {}) {\n return [\n createHtmlParserTool(),\n createExtractLinksTool(),\n createExtractImagesTool(),\n ];\n}\n\n","/**\n * URL Validator Types\n * \n * Type definitions for URL validation and manipulation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * URL validation result\n */\nexport interface UrlValidationResult {\n url: string;\n protocol: string;\n hostname: string;\n port: string;\n pathname: string;\n search: string;\n hash: string;\n origin: string;\n}\n\n/**\n * URL validator tools configuration\n */\nexport interface UrlValidatorToolsConfig {\n // No specific config needed for URL validator tools currently\n}\n\n/**\n * URL validator input schema\n */\nexport const urlValidatorSchema = z.object({\n url: z.string().describe('The URL to validate and parse'),\n});\n\n/**\n * URL builder input schema\n */\nexport const urlBuilderSchema = z.object({\n protocol: z.string().default('https').describe('Protocol (http, https, etc.)'),\n hostname: z.string().describe('Hostname or domain name'),\n port: z.string().optional().describe('Optional port number'),\n pathname: z.string().default('/').describe('URL path'),\n query: z.record(z.string()).optional().describe('Query parameters as key-value pairs'),\n hash: z.string().optional().describe('URL hash/fragment'),\n});\n\n/**\n * URL query parser input schema\n */\nexport const urlQueryParserSchema = z.object({\n input: z.string().describe('URL or query string to parse (e.g., \"?foo=bar&baz=qux\" or full URL)'),\n});\n\n","/**\n * URL Validator Tool\n * \n * Validate and parse URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlValidatorSchema, type UrlValidationResult } from '../types.js';\n\n/**\n * Create a URL validator tool\n * \n * @returns URL validator tool\n * \n * @example\n * ```ts\n * const validator = createUrlValidatorTool();\n * const result = await validator.execute({\n * url: 'https://example.com/path?query=value#hash'\n * });\n * ```\n */\nexport function createUrlValidatorTool() {\n return toolBuilder()\n .name('url-validator')\n .description('Validate and parse URLs. Returns detailed information about the URL structure including protocol, hostname, path, query parameters, and hash.')\n .category(ToolCategory.WEB)\n .tags(['url', 'validator', 'parse', 'validate'])\n .schema(urlValidatorSchema)\n .implementSafe(async (input): Promise<UrlValidationResult> => {\n const parsed = new URL(input.url);\n\n return {\n url: parsed.href,\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n origin: parsed.origin,\n };\n })\n .build();\n}\n\n","/**\n * URL Builder Tool\n * \n * Build URLs from components.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlBuilderSchema } from '../types.js';\n\n/**\n * Create a URL builder tool\n * \n * @returns URL builder tool\n * \n * @example\n * ```ts\n * const builder = createUrlBuilderTool();\n * const result = await builder.execute({\n * protocol: 'https',\n * hostname: 'example.com',\n * pathname: '/path',\n * query: { foo: 'bar' }\n * });\n * ```\n */\nexport function createUrlBuilderTool() {\n return toolBuilder()\n .name('url-builder')\n .description('Build a URL from components (protocol, hostname, path, query parameters, hash).')\n .category(ToolCategory.WEB)\n .tags(['url', 'builder', 'construct'])\n .schema(urlBuilderSchema)\n .implement(async (input) => {\n const url = new URL(`${input.protocol}://${input.hostname}`);\n\n if (input.port) {\n url.port = input.port;\n }\n\n url.pathname = input.pathname ?? '/';\n \n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n \n if (input.hash) {\n url.hash = input.hash;\n }\n \n return {\n url: url.href,\n components: {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n origin: url.origin,\n },\n };\n })\n .build();\n}\n\n","/**\n * URL Query Parser Tool\n * \n * Parse query parameters from URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlQueryParserSchema } from '../types.js';\n\n/**\n * Create a URL query parser tool\n * \n * @returns URL query parser tool\n * \n * @example\n * ```ts\n * const parser = createUrlQueryParserTool();\n * const result = await parser.execute({\n * input: 'https://example.com?foo=bar&baz=qux'\n * });\n * ```\n */\nexport function createUrlQueryParserTool() {\n return toolBuilder()\n .name('url-query-parser')\n .description('Parse query parameters from a URL or query string into a key-value object.')\n .category(ToolCategory.WEB)\n .tags(['url', 'query', 'parse', 'params'])\n .schema(urlQueryParserSchema)\n .implement(async (input) => {\n let searchParams: URLSearchParams;\n \n try {\n // Try to parse as full URL first\n const url = new URL(input.input);\n searchParams = url.searchParams;\n } catch {\n // If that fails, treat as query string\n const queryString = input.input.startsWith('?') ? input.input.slice(1) : input.input;\n searchParams = new URLSearchParams(queryString);\n }\n \n const params: Record<string, string | string[]> = {};\n \n searchParams.forEach((value, key) => {\n if (params[key]) {\n // Handle multiple values for same key\n if (Array.isArray(params[key])) {\n (params[key] as string[]).push(value);\n } else {\n params[key] = [params[key] as string, value];\n }\n } else {\n params[key] = value;\n }\n });\n \n return {\n params,\n count: Object.keys(params).length,\n };\n })\n .build();\n}\n\n","/**\n * URL Validator Tools\n * \n * Tools for validating, parsing, and manipulating URLs.\n */\n\n// Export types\nexport type { UrlValidationResult, UrlValidatorToolsConfig } from './types.js';\nexport { urlValidatorSchema, urlBuilderSchema, urlQueryParserSchema } from './types.js';\n\n// Export tool factories\nexport { createUrlValidatorTool } from './tools/url-validator.js';\nexport { createUrlBuilderTool } from './tools/url-builder.js';\nexport { createUrlQueryParserTool } from './tools/url-query-parser.js';\n\n// Import for default instances\nimport { createUrlValidatorTool } from './tools/url-validator.js';\nimport { createUrlBuilderTool } from './tools/url-builder.js';\nimport { createUrlQueryParserTool } from './tools/url-query-parser.js';\n\n// Default tool instances\nexport const urlValidator = createUrlValidatorTool();\nexport const urlBuilder = createUrlBuilderTool();\nexport const urlQueryParser = createUrlQueryParserTool();\n\n// Tools array\nexport const urlValidatorTools = [urlValidator, urlBuilder, urlQueryParser];\n\n/**\n * Create URL validator tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of URL validator tools\n * \n * @example\n * ```ts\n * const tools = createUrlValidatorTools();\n * ```\n */\nexport function createUrlValidatorTools(config: import('./types.js').UrlValidatorToolsConfig = {}) {\n return [\n createUrlValidatorTool(),\n createUrlBuilderTool(),\n createUrlQueryParserTool(),\n ];\n}\n\n","/**\n * Web Search Tool - Zod Schemas\n */\n\nimport { z } from 'zod';\n\n/**\n * Web search input schema\n */\nexport const webSearchSchema = z.object({\n query: z.string().min(1).describe('The search query'),\n maxResults: z\n .number()\n .min(1)\n .max(50)\n .default(10)\n .describe('Maximum number of results to return (1-50)'),\n preferSerper: z\n .boolean()\n .default(false)\n .describe('Prefer Serper API if available (requires SERPER_API_KEY)'),\n timeout: z\n .number()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe('Request timeout in milliseconds (1000-60000, default: 30000)'),\n});\n\n/**\n * Search result schema\n */\nexport const searchResultSchema = z.object({\n title: z.string(),\n link: z.string().url(),\n snippet: z.string(),\n position: z.number().optional(),\n});\n\n/**\n * Web search output schema\n */\nexport const webSearchOutputSchema = z.object({\n success: z.boolean(),\n source: z.enum(['duckduckgo', 'serper']),\n query: z.string(),\n results: z.array(searchResultSchema),\n totalResults: z.number().optional(),\n error: z.string().optional(),\n metadata: z\n .object({\n responseTime: z.number().optional(),\n fallbackUsed: z.boolean().optional(),\n })\n .optional(),\n});\n\n","/**\n * Web Search Tool - Utility Functions\n */\n\nimport type { RetryConfig } from './types.js';\n\n/**\n * Get Serper API key from environment\n */\nexport function getSerperApiKey(): string | undefined {\n return process.env.SERPER_API_KEY;\n}\n\n/**\n * Check if Serper API is available\n */\nexport function isSerperAvailable(): boolean {\n return !!getSerperApiKey();\n}\n\n/**\n * Measure execution time of an async function\n */\nexport async function measureTime<T>(\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = Date.now();\n const result = await fn();\n const duration = Date.now() - start;\n return { result, duration };\n}\n\n/**\n * Sanitize search query\n */\nexport function sanitizeQuery(query: string): string {\n return query.trim().replace(/\\s+/g, ' ');\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelay: 1000, // 1 second\n maxDelay: 10000, // 10 seconds\n backoffMultiplier: 2,\n};\n\n/**\n * Default timeout for search requests (30 seconds)\n */\nexport const DEFAULT_TIMEOUT = 30000;\n\n/**\n * Check if error is retryable (network errors, timeouts, 5xx errors)\n */\nexport function isRetryableError(error: any): boolean {\n // Network errors\n if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {\n return true;\n }\n\n // Timeout errors\n if (error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {\n return true;\n }\n\n // 5xx server errors (but not 4xx client errors)\n if (error.response?.status >= 500 && error.response?.status < 600) {\n return true;\n }\n\n // Rate limiting (429) - retryable with backoff\n if (error.response?.status === 429) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n config: RetryConfig = DEFAULT_RETRY_CONFIG\n): Promise<T> {\n let lastError: any;\n let delay = config.initialDelay;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: any) {\n lastError = error;\n\n // Don't retry if error is not retryable\n if (!isRetryableError(error)) {\n throw error;\n }\n\n // Don't retry if we've exhausted all attempts\n if (attempt === config.maxRetries) {\n break;\n }\n\n // Wait before retrying\n await sleep(delay);\n\n // Increase delay for next attempt (exponential backoff)\n delay = Math.min(delay * config.backoffMultiplier, config.maxDelay);\n }\n }\n\n // All retries exhausted\n throw lastError;\n}\n\n","/**\n * DuckDuckGo Search Provider\n * \n * Free search provider using DuckDuckGo's Instant Answer API.\n * No API key required.\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * DuckDuckGo API response structure\n */\ninterface DuckDuckGoResponse {\n Abstract?: string;\n AbstractText?: string;\n AbstractSource?: string;\n AbstractURL?: string;\n Heading?: string;\n RelatedTopics?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n Results?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n}\n\n/**\n * DuckDuckGo search provider implementation\n */\nexport class DuckDuckGoProvider implements SearchProvider {\n name = 'duckduckgo' as const;\n\n /**\n * DuckDuckGo is always available (no API key required)\n */\n isAvailable(): boolean {\n return true;\n }\n\n /**\n * Search using DuckDuckGo Instant Answer API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n return retryWithBackoff(async () => {\n try {\n const response = await axios.get<DuckDuckGoResponse>(\n 'https://api.duckduckgo.com/',\n {\n params: {\n q: query,\n format: 'json',\n },\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://github.com/agentforge)',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n throw new Error(`DuckDuckGo search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize DuckDuckGo response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: DuckDuckGoResponse,\n maxResults: number\n ): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Early return if maxResults is 0\n if (maxResults <= 0) {\n return results;\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n results.push({\n title: data.Heading || 'Result',\n link: data.AbstractURL,\n snippet: data.Abstract,\n position: 1,\n });\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add related topics (optimized: only process what we need)\n if (data.RelatedTopics && data.RelatedTopics.length > 0) {\n const remaining = maxResults - results.length;\n const topicsToProcess = data.RelatedTopics.slice(0, remaining);\n\n for (const topic of topicsToProcess) {\n if (topic.Text && topic.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = topic.Text.split(' - ');\n results.push({\n title: titleParts[0] || topic.Text,\n link: topic.FirstURL,\n snippet: topic.Text,\n position: results.length + 1,\n });\n }\n }\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add regular results (optimized: only process what we need)\n if (data.Results && data.Results.length > 0) {\n const remaining = maxResults - results.length;\n const resultsToProcess = data.Results.slice(0, remaining);\n\n for (const result of resultsToProcess) {\n if (result.Text && result.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = result.Text.split(' - ');\n results.push({\n title: titleParts[0] || result.Text,\n link: result.FirstURL,\n snippet: result.Text,\n position: results.length + 1,\n });\n }\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new DuckDuckGo provider instance\n */\nexport function createDuckDuckGoProvider(): DuckDuckGoProvider {\n return new DuckDuckGoProvider();\n}\n\n","/**\n * Serper Search Provider\n * \n * Premium search provider using Serper API (Google results).\n * Requires SERPER_API_KEY environment variable.\n * Get your API key at: https://serper.dev\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { getSerperApiKey, retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * Serper API response structure\n */\ninterface SerperResponse {\n organic?: Array<{\n title?: string;\n link?: string;\n snippet?: string;\n position?: number;\n }>;\n searchParameters?: {\n q?: string;\n num?: number;\n };\n}\n\n/**\n * Serper search provider implementation\n */\nexport class SerperProvider implements SearchProvider {\n name = 'serper' as const;\n private apiKey: string | undefined;\n\n constructor() {\n this.apiKey = getSerperApiKey();\n }\n\n /**\n * Serper is available if API key is set\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n /**\n * Search using Serper API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n if (!this.apiKey) {\n throw new Error(\n 'Serper API key not found. Set SERPER_API_KEY environment variable. Get your key at https://serper.dev'\n );\n }\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<SerperResponse>(\n 'https://google.serper.dev/search',\n {\n q: query,\n num: maxResults,\n },\n {\n headers: {\n 'X-API-KEY': this.apiKey,\n 'Content-Type': 'application/json',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n if (error.response?.status === 401) {\n throw new Error(\n 'Invalid Serper API key. Get your key at https://serper.dev'\n );\n }\n if (error.response?.status === 429) {\n throw new Error(\n 'Serper API rate limit exceeded. Please try again later or upgrade your plan at https://serper.dev'\n );\n }\n throw new Error(`Serper search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize Serper response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: SerperResponse,\n maxResults: number\n ): SearchResult[] {\n // Early return for empty results\n if (!data.organic || data.organic.length === 0 || maxResults <= 0) {\n return [];\n }\n\n // Pre-allocate array with expected size for better performance\n const results: SearchResult[] = [];\n\n // Only process the number of items we need (avoid processing entire array)\n const itemsToProcess = Math.min(data.organic.length, maxResults);\n\n for (let i = 0; i < itemsToProcess; i++) {\n const item = data.organic[i];\n\n // Skip items with missing required fields\n if (!item.title || !item.link || !item.snippet) {\n continue;\n }\n\n results.push({\n title: item.title,\n link: item.link,\n snippet: item.snippet,\n position: item.position ?? i + 1,\n });\n\n // Stop if we've collected enough results\n if (results.length >= maxResults) {\n break;\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new Serper provider instance\n */\nexport function createSerperProvider(): SerperProvider {\n return new SerperProvider();\n}\n\n","/**\n * Web Search Tool\n * \n * Search the web using DuckDuckGo (free) or Serper (optional upgrade).\n * Provides smart fallback and normalized results.\n * \n * @example\n * ```ts\n * // Basic usage (no API key needed)\n * const result = await webSearch.invoke({\n * query: 'What is TypeScript?'\n * });\n * \n * // With Serper API key (set SERPER_API_KEY env var)\n * const result = await webSearch.invoke({\n * query: 'Best restaurants in SF 2026',\n * preferSerper: true\n * });\n * ```\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { webSearchSchema } from './schemas.js';\nimport { createDuckDuckGoProvider } from './providers/duckduckgo.js';\nimport { createSerperProvider } from './providers/serper.js';\nimport { measureTime, sanitizeQuery, DEFAULT_TIMEOUT } from './utils.js';\nimport type { WebSearchInput, WebSearchOutput, SearchProvider } from './types.js';\n\n/**\n * Web search tool implementation\n */\nexport const webSearch = toolBuilder()\n .name('web-search')\n .description(\n 'Search the web for information using DuckDuckGo (free) or Serper API (optional). ' +\n 'Returns structured search results with titles, links, and snippets. ' +\n 'Automatically falls back to Serper if DuckDuckGo returns no results and API key is available.'\n )\n .category(ToolCategory.WEB)\n .tags(['search', 'web', 'google', 'duckduckgo', 'serper', 'internet'])\n .schema(webSearchSchema)\n .implement(async (input: WebSearchInput): Promise<WebSearchOutput> => {\n const {\n query,\n maxResults = 10,\n preferSerper = false,\n timeout = DEFAULT_TIMEOUT\n } = input;\n\n // Sanitize query\n const sanitizedQuery = sanitizeQuery(query);\n\n // Initialize providers\n const duckduckgo = createDuckDuckGoProvider();\n const serper = createSerperProvider();\n\n // Determine which provider to use\n let primaryProvider: SearchProvider;\n let fallbackProvider: SearchProvider | null = null;\n\n if (preferSerper && serper.isAvailable()) {\n primaryProvider = serper;\n fallbackProvider = duckduckgo;\n } else {\n primaryProvider = duckduckgo;\n fallbackProvider = serper.isAvailable() ? serper : null;\n }\n\n try {\n // Try primary provider\n const { result: results, duration } = await measureTime(() =>\n primaryProvider.search(sanitizedQuery, maxResults, timeout)\n );\n\n // If primary provider returns results, return them\n if (results.length > 0) {\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results,\n totalResults: results.length,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n }\n\n // If no results and fallback is available, try fallback\n if (fallbackProvider) {\n const { result: fallbackResults, duration: fallbackDuration } =\n await measureTime(() =>\n fallbackProvider!.search(sanitizedQuery, maxResults, timeout)\n );\n\n return {\n success: true,\n source: fallbackProvider.name,\n query: sanitizedQuery,\n results: fallbackResults,\n totalResults: fallbackResults.length,\n metadata: {\n responseTime: fallbackDuration,\n fallbackUsed: true,\n },\n };\n }\n\n // No results from either provider\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n totalResults: 0,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n } catch (error: any) {\n // Error occurred\n return {\n success: false,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n error: error.message,\n };\n }\n })\n .build();\n\n// Export types and schemas for external use\nexport * from './types.js';\nexport * from './schemas.js';\nexport * from './providers/duckduckgo.js';\nexport * from './providers/serper.js';\n\n","/**\n * Authentication helpers for Slack tools\n */\n\nimport { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from './types.js';\n\n/**\n * Create a function to get configured Slack client\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredSlackClient(\n token?: string,\n botName: string = 'AgentForge Bot',\n botIcon: string = ':robot_face:'\n): () => { client: WebClient; config: SlackClientConfig } {\n let configuredClient: WebClient | null = null;\n\n return function getConfiguredSlackClient(): { client: WebClient; config: SlackClientConfig } {\n if (!configuredClient) {\n const slackToken = token || process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN;\n if (!slackToken) {\n throw new Error(\n 'Slack token not configured. Please provide a token in config or set SLACK_USER_TOKEN or SLACK_BOT_TOKEN environment variable.'\n );\n }\n configuredClient = new WebClient(slackToken);\n }\n\n return {\n client: configuredClient,\n config: {\n token: token || process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN || '',\n botName,\n botIcon,\n },\n };\n };\n}\n\n/**\n * Helper function to get default Slack client (for default tools)\n */\nlet defaultSlackClient: WebClient | null = null;\n\nexport function getDefaultSlackClient(): { client: WebClient; config: SlackClientConfig } {\n if (!defaultSlackClient) {\n const token = process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN;\n if (!token) {\n throw new Error(\n 'Slack token not configured. Please set SLACK_USER_TOKEN or SLACK_BOT_TOKEN environment variable.'\n );\n }\n defaultSlackClient = new WebClient(token);\n }\n\n return {\n client: defaultSlackClient,\n config: {\n token: process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN || '',\n botName: 'AgentForge Bot',\n botIcon: ':robot_face:',\n },\n };\n}\n\n","/**\n * Send a message to a Slack channel\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the sendSlackMessage tool with the provided client and logger\n */\nexport function createSendSlackMessageTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n): Tool {\n return toolBuilder()\n .name('send-slack-message')\n .description('Send a message to a Slack channel for team communication and notifications')\n .category(ToolCategory.WEB)\n .tags(['slack', 'messaging', 'communication'])\n .usageNotes(\n 'Use this for general team communication. For notifications with @mentions, consider using notify-slack instead. ' +\n 'Use get-slack-channels first if you need to find the right channel.'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe(\"Channel name (e.g., 'general') or ID (e.g., 'C123456')\"),\n message: z.string().describe('Message content to send'),\n })\n )\n .implementSafe(async ({ channel, message }) => {\n logger.info('send-slack-message called', { channel, messageLength: message.length });\n\n try {\n const { client: slack, config } = getSlackClient();\n\n // Send message using Slack API\n const result = await slack.chat.postMessage({\n channel,\n text: message,\n username: config.botName,\n icon_emoji: config.botIcon,\n });\n\n logger.info('send-slack-message result', {\n channel: result.channel,\n timestamp: result.ts,\n messageLength: message.length,\n success: true,\n });\n\n return {\n channel: result.channel,\n message,\n timestamp: result.ts,\n message_id: result.ts,\n };\n } catch (error: any) {\n logger.error('send-slack-message failed', {\n channel,\n error: error.message,\n data: error.data,\n });\n throw error;\n }\n })\n .build();\n}\n\n","/**\n * Send a notification to a Slack channel (with @mention support)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the notifySlack tool with the provided client and logger\n */\nexport function createNotifySlackTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n): Tool {\n return toolBuilder()\n .name('notify-slack')\n .description('Send a notification to a Slack channel with optional @mentions for urgent alerts')\n .category(ToolCategory.WEB)\n .tags(['slack', 'notification', 'alert'])\n .usageNotes(\n 'Use this for urgent notifications that require @mentions. For general messages without mentions, ' +\n 'use send-slack-message instead.'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe('Channel name or ID'),\n message: z.string().describe('Notification message'),\n mentions: z.array(z.string()).optional().describe('List of usernames to mention (without @)'),\n })\n )\n .implementSafe(async ({ channel, message, mentions = [] }) => {\n logger.info('notify-slack called', {\n channel,\n messageLength: message.length,\n mentionCount: mentions.length,\n });\n\n const { client: slack, config } = getSlackClient();\n\n // Build message with mentions\n const mentionText = mentions.length > 0 ? mentions.map((m) => `<@${m}>`).join(' ') + ' ' : '';\n const fullMessage = `${mentionText}${message}`;\n\n // Send notification using Slack API\n const result = await slack.chat.postMessage({\n channel,\n text: fullMessage,\n username: config.botName,\n icon_emoji: config.botIcon,\n });\n\n logger.info('notify-slack result', {\n channel: result.channel,\n timestamp: result.ts,\n mentions: mentions.length,\n });\n\n return {\n channel: result.channel,\n message: fullMessage,\n mentions,\n timestamp: result.ts,\n notification_id: result.ts,\n };\n })\n .build();\n}\n\n","/**\n * Get list of available Slack channels\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the getSlackChannels tool with the provided client and logger\n */\nexport function createGetSlackChannelsTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n): Tool {\n return toolBuilder()\n .name('get-slack-channels')\n .description('Get a list of available Slack channels to find the right channel for messaging')\n .category(ToolCategory.WEB)\n .tags(['slack', 'channels', 'list'])\n .usageNotes(\n 'Use this first to discover available channels before sending messages. ' +\n 'Helps ensure you are sending to the correct channel.'\n )\n .follows(['send-slack-message', 'notify-slack'])\n .schema(\n z.object({\n include_private: z.boolean().optional().describe('Include private channels (default: false)'),\n })\n )\n .implementSafe(async ({ include_private = false }) => {\n logger.info('get-slack-channels called', { include_private });\n\n const { client: slack } = getSlackClient();\n\n // Get public channels\n const publicChannels = await slack.conversations.list({\n types: 'public_channel',\n exclude_archived: true,\n });\n\n let allChannels = publicChannels.channels || [];\n\n // Get private channels if requested\n if (include_private) {\n const privateChannels = await slack.conversations.list({\n types: 'private_channel',\n exclude_archived: true,\n });\n allChannels = [...allChannels, ...(privateChannels.channels || [])];\n }\n\n logger.info('get-slack-channels result', {\n channelCount: allChannels.length,\n includePrivate: include_private,\n });\n\n return {\n count: allChannels.length,\n channels: allChannels.map((c) => ({\n id: c.id,\n name: c.name,\n is_private: c.is_private || false,\n num_members: c.num_members || 0,\n })),\n };\n })\n .build();\n}\n\n","/**\n * Get message history from a Slack channel\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the getSlackMessages tool with the provided client and logger\n */\nexport function createGetSlackMessagesTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n): Tool {\n return toolBuilder()\n .name('get-slack-messages')\n .description('Retrieve message history from a Slack channel to read recent conversations')\n .category(ToolCategory.WEB)\n .tags(['slack', 'messages', 'history', 'read'])\n .usageNotes(\n 'Use this to read recent messages from a channel. Use get-slack-channels first if you need to find the channel ID. ' +\n 'Returns messages in reverse chronological order (newest first).'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe(\"Channel name (e.g., 'general') or ID (e.g., 'C123456')\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Number of messages to retrieve (default: 20, max: 100)'),\n })\n )\n .implementSafe(async ({ channel, limit = 20 }) => {\n logger.info('get-slack-messages called', { channel, limit });\n\n try {\n const { client: slack } = getSlackClient();\n\n // Get channel ID if name was provided\n let channelId = channel;\n if (!channel.startsWith('C') && !channel.startsWith('D')) {\n const channels = await slack.conversations.list({\n types: 'public_channel,private_channel',\n exclude_archived: true,\n });\n const found = channels.channels?.find((c) => c.name === channel);\n if (!found) {\n logger.error('get-slack-messages: channel not found', { channel });\n throw new Error(\n `Channel '${channel}' not found. Use get-slack-channels to see available channels.`\n );\n }\n channelId = found.id!;\n }\n\n // Retrieve message history\n const result = await slack.conversations.history({\n channel: channelId,\n limit: Math.min(limit, 100), // Cap at 100 for performance\n });\n\n logger.info('get-slack-messages result', {\n channel: channelId,\n messageCount: result.messages?.length || 0,\n limit,\n });\n\n return {\n channel: channelId,\n count: result.messages?.length || 0,\n messages:\n result.messages?.map((m) => ({\n user: m.user || 'unknown',\n text: m.text || '',\n timestamp: m.ts,\n thread_ts: m.thread_ts,\n type: m.type,\n subtype: m.subtype,\n })) || [],\n };\n } catch (error: any) {\n logger.error('get-slack-messages failed', {\n channel,\n error: error.message,\n data: error.data,\n });\n throw error;\n }\n })\n .build();\n}\n\n","/**\n * Slack Integration Tools\n *\n * Tools for interacting with Slack workspaces - send messages, notifications,\n * list channels, and read message history.\n *\n * @packageDocumentation\n *\n * @example\n * ```ts\n * // Using default tools (reads from env vars)\n * import { sendSlackMessage } from '@agentforge/tools';\n *\n * const result = await sendSlackMessage.execute({\n * channel: 'general',\n * message: 'Hello from AgentForge!'\n * });\n *\n * // Using factory function with custom config\n * import { createSlackTools } from '@agentforge/tools';\n *\n * const slackTools = createSlackTools({\n * token: 'xoxb-your-bot-token',\n * botName: 'My Custom Bot'\n * });\n *\n * const result = await slackTools.sendMessage.execute({\n * channel: 'general',\n * message: 'Hello!'\n * });\n * ```\n */\n\nimport { createLogger, LogLevel } from \"@agentforge/core\";\nimport { getDefaultSlackClient, createGetConfiguredSlackClient } from \"./auth.js\";\nimport { createSendSlackMessageTool } from \"./tools/send-slack-message.js\";\nimport { createNotifySlackTool } from \"./tools/notify-slack.js\";\nimport { createGetSlackChannelsTool } from \"./tools/get-slack-channels.js\";\nimport { createGetSlackMessagesTool } from \"./tools/get-slack-messages.js\";\n\n// Export types\nexport type { SlackToolsConfig, SlackClientConfig } from \"./types.js\";\n\n// Create logger for default Slack tools\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('[tools:slack]', { level: logLevel });\n\n/**\n * Default Slack tools using environment variables\n */\nexport const sendSlackMessage = createSendSlackMessageTool(getDefaultSlackClient, logger);\nexport const notifySlack = createNotifySlackTool(getDefaultSlackClient, logger);\nexport const getSlackChannels = createGetSlackChannelsTool(getDefaultSlackClient, logger);\nexport const getSlackMessages = createGetSlackMessagesTool(getDefaultSlackClient, logger);\n\n/**\n * Export all Slack tools\n *\n * Includes 4 tools for Slack integration:\n * - 2 write tools: send-slack-message, notify-slack\n * - 2 read tools: get-slack-channels, get-slack-messages\n */\nexport const slackTools = [\n // Write tools\n sendSlackMessage,\n notifySlack,\n // Read tools\n getSlackChannels,\n getSlackMessages,\n];\n\n/**\n * Create Slack tools with custom configuration\n *\n * This factory function allows you to create Slack tools with custom configuration,\n * such as providing a token programmatically instead of using environment variables.\n *\n * @param config - Configuration options for Slack tools\n * @returns Object containing all 4 Slack tools configured with the provided options\n *\n * @example\n * ```ts\n * // Create tools with custom token\n * const slackTools = createSlackTools({\n * token: 'xoxb-your-bot-token',\n * botName: 'My Custom Bot',\n * botIcon: ':rocket:'\n * });\n *\n * // Use the tools\n * await slackTools.sendMessage.execute({\n * channel: 'general',\n * message: 'Hello!'\n * });\n *\n * // Or use with an agent\n * const agent = createReActAgent({\n * llm,\n * tools: [\n * slackTools.sendMessage,\n * slackTools.notify,\n * slackTools.getChannels,\n * slackTools.getMessages\n * ]\n * });\n * ```\n */\nexport function createSlackTools(config: import(\"./types.js\").SlackToolsConfig = {}) {\n const {\n token,\n botName = 'AgentForge Bot',\n botIcon = ':robot_face:',\n logLevel: customLogLevel,\n } = config;\n\n // Create closures for getting configured Slack client\n const getConfiguredSlackClient = createGetConfiguredSlackClient(token, botName, botIcon);\n\n // Create logger with custom log level if provided\n const toolLogger = customLogLevel\n ? createLogger('[tools:slack]', { level: customLogLevel })\n : logger;\n\n // Build all 4 tools with configured client/logger\n const sendMessage = createSendSlackMessageTool(getConfiguredSlackClient, toolLogger);\n const notify = createNotifySlackTool(getConfiguredSlackClient, toolLogger);\n const getChannels = createGetSlackChannelsTool(getConfiguredSlackClient, toolLogger);\n const getMessages = createGetSlackMessagesTool(getConfiguredSlackClient, toolLogger);\n\n // Return all configured tools\n return {\n sendMessage,\n notify,\n getChannels,\n getMessages,\n };\n}\n\n","/**\n * Authentication helpers for Confluence tools\n */\n\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create a function to get configured auth credentials\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredAuth(\n apiKey?: string,\n email?: string,\n siteUrl?: string\n): () => ConfluenceAuth {\n return function getConfiguredAuth(): ConfluenceAuth {\n const ATLASSIAN_API_KEY = apiKey || process.env.ATLASSIAN_API_KEY || \"\";\n const ATLASSIAN_EMAIL = email || process.env.ATLASSIAN_EMAIL || \"\";\n const ATLASSIAN_SITE_URL = (siteUrl || process.env.ATLASSIAN_SITE_URL || \"\").replace(/\\/$/, \"\");\n\n if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {\n throw new Error(\n \"Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in config or environment variables.\"\n );\n }\n\n return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };\n };\n}\n\n/**\n * Create a function to get configured auth header\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredAuthHeader(\n getConfiguredAuth: () => ConfluenceAuth\n): () => string {\n return function getConfiguredAuthHeader(): string {\n const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfiguredAuth();\n const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString(\"base64\");\n return `Basic ${auth}`;\n };\n}\n\n/**\n * Helper function to get configuration from environment (for default tools)\n */\nexport function getConfig(): ConfluenceAuth {\n const ATLASSIAN_API_KEY = process.env.ATLASSIAN_API_KEY || \"\";\n const ATLASSIAN_EMAIL = process.env.ATLASSIAN_EMAIL || \"\";\n const ATLASSIAN_SITE_URL = (process.env.ATLASSIAN_SITE_URL || \"\").replace(/\\/$/, \"\");\n\n if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {\n throw new Error(\"Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in .env\");\n }\n\n return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };\n}\n\n/**\n * Helper function to create auth header (for default tools)\n */\nexport function getAuthHeader(): string {\n const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfig();\n const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString(\"base64\");\n return `Basic ${auth}`;\n}\n\n","/**\n * Search Confluence pages using CQL (Confluence Query Language)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the searchConfluence tool with the provided auth and logger\n */\nexport function createSearchConfluenceTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"search-confluence\")\n .description(\"Search for pages in Confluence using keywords or CQL (Confluence Query Language). Returns matching pages with titles, IDs, and excerpts.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"search\")\n .tag(\"knowledge-base\")\n .usageNotes(\"Use this to find relevant documentation, policies, or information in Confluence. You can search by keywords or use CQL for advanced queries (e.g., 'space=AI AND type=page'). Use get-confluence-page to retrieve full content of specific pages.\")\n .suggests([\"get-confluence-page\"])\n .schema(z.object({\n query: z.string().describe(\"Search query or CQL expression (e.g., 'payment processing' or 'space=BL3 AND title~payment')\"),\n limit: z.number().optional().describe(\"Maximum number of results to return (default: 10, max: 25)\"),\n }))\n .implement(async ({ query, limit = 10 }) => {\n logger.info('search-confluence called', { query, limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/search`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n cql: query,\n limit: Math.min(limit, 25),\n expand: \"space,version\",\n },\n });\n\n const { ATLASSIAN_SITE_URL: siteUrl } = getAuth();\n const results = response.data.results.map((page: any) => ({\n id: page.id,\n title: page.title,\n type: page.type,\n space: page.space?.name || \"Unknown\",\n spaceKey: page.space?.key || \"\",\n url: `${siteUrl}/wiki${page._links.webui}`,\n lastModified: page.version?.when || \"\",\n }));\n\n // IMPORTANT: Log when search returns no results - this is a valid outcome!\n if (results.length === 0) {\n logger.warn('search-confluence returned NO RESULTS - this is a valid outcome, agent should not retry', {\n query,\n limit,\n totalSize: response.data.totalSize\n });\n } else {\n logger.info('search-confluence result', {\n query,\n resultCount: results.length,\n totalSize: response.data.totalSize,\n titles: results.map((r: any) => r.title).slice(0, 3) // Log first 3 titles\n });\n }\n\n return JSON.stringify({\n success: true,\n count: results.length,\n total: response.data.totalSize,\n results,\n });\n } catch (error: any) {\n logger.error('search-confluence error', {\n query,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Get full content of a Confluence page by ID\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the getConfluencePage tool with the provided auth and logger\n */\nexport function createGetConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"get-confluence-page\")\n .description(\"Get the full content of a specific Confluence page by its ID. Returns the page title, content (in storage format), space, and metadata.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"page\")\n .tag(\"content\")\n .usageNotes(\"Use this after search-confluence to retrieve the full content of a specific page. The page ID can be found in search results.\")\n .requires([\"search-confluence\"])\n .schema(z.object({\n page_id: z.string().describe(\"The Confluence page ID (from search results)\"),\n }))\n .implement(async ({ page_id }) => {\n logger.info('get-confluence-page called', { page_id });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n expand: \"body.storage,space,version,history\",\n },\n });\n\n const page = response.data;\n\n logger.info('get-confluence-page result', {\n page_id,\n title: page.title,\n space: page.space?.name,\n contentLength: page.body?.storage?.value?.length || 0\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: page.id,\n title: page.title,\n type: page.type,\n space: page.space?.name || \"Unknown\",\n spaceKey: page.space?.key || \"\",\n content: page.body?.storage?.value || \"\",\n url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,\n created: page.history?.createdDate || \"\",\n lastModified: page.version?.when || \"\",\n version: page.version?.number || 1,\n },\n });\n } catch (error: any) {\n logger.error('get-confluence-page error', {\n page_id,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * List all Confluence spaces\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the listConfluenceSpaces tool with the provided auth and logger\n */\nexport function createListConfluenceSpacesTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"list-confluence-spaces\")\n .description(\"List all available Confluence spaces. Returns space names, keys, types, and descriptions to help identify where to search for information.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"spaces\")\n .tag(\"list\")\n .usageNotes(\"Use this first to discover available spaces before searching. Helps narrow down searches to specific areas (e.g., 'AI', 'BL3', 'Finance').\")\n .follows([\"search-confluence\"])\n .schema(z.object({\n limit: z.number().optional().describe(\"Maximum number of spaces to return (default: 25)\"),\n }))\n .implement(async ({ limit = 25 }) => {\n logger.info('list-confluence-spaces called', { limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/space`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n limit,\n },\n });\n\n const spaces = response.data.results.map((space: any) => ({\n key: space.key,\n name: space.name,\n type: space.type,\n description: space.description?.plain?.value || \"\",\n url: `${ATLASSIAN_SITE_URL}/wiki${space._links.webui}`,\n }));\n\n logger.info('list-confluence-spaces result', {\n spaceCount: spaces.length,\n spaceKeys: spaces.map((s: any) => s.key).slice(0, 5) // Log first 5 space keys\n });\n\n return JSON.stringify({\n success: true,\n count: spaces.length,\n spaces,\n });\n } catch (error: any) {\n logger.error('list-confluence-spaces error', {\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Get pages from a specific Confluence space\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the getSpacePages tool with the provided auth and logger\n */\nexport function createGetSpacePagesTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"get-space-pages\")\n .description(\"Get all pages from a specific Confluence space by space key. Useful for browsing content in a particular area.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"space\")\n .tag(\"pages\")\n .usageNotes(\"Use this to explore all pages in a specific space. Get the space key from list-confluence-spaces first.\")\n .requires([\"list-confluence-spaces\"])\n .schema(z.object({\n space_key: z.string().describe(\"The space key (e.g., 'AI', 'BL3', 'FIN')\"),\n limit: z.number().optional().describe(\"Maximum number of pages to return (default: 25)\"),\n }))\n .implement(async ({ space_key, limit = 25 }) => {\n logger.info('get-space-pages called', { space_key, limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n spaceKey: space_key,\n type: \"page\",\n limit,\n expand: \"version\",\n },\n });\n\n const pages = response.data.results.map((page: any) => ({\n id: page.id,\n title: page.title,\n url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,\n lastModified: page.version?.when || \"\",\n }));\n\n // Log when no pages found - this is a valid outcome!\n if (pages.length === 0) {\n logger.warn('get-space-pages returned NO PAGES - this is a valid outcome, agent should not retry', {\n space_key,\n limit\n });\n } else {\n logger.info('get-space-pages result', {\n space_key,\n pageCount: pages.length,\n titles: pages.map((p: any) => p.title).slice(0, 3) // Log first 3 titles\n });\n }\n\n return JSON.stringify({\n success: true,\n space: space_key,\n count: pages.length,\n pages,\n });\n } catch (error: any) {\n logger.error('get-space-pages error', {\n space_key,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Create a new Confluence page\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the createConfluencePage tool with the provided auth and logger\n */\nexport function createCreateConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"create-confluence-page\")\n .description(\"Create a new page in a Confluence space. Requires space key, page title, and content (in HTML storage format).\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"create\")\n .tag(\"write\")\n .usageNotes(\"Use this to create new documentation pages. Content should be in Confluence storage format (HTML). Get the space key from list-confluence-spaces first. Be mindful of creating duplicate pages.\")\n .requires([\"list-confluence-spaces\"])\n .schema(z.object({\n space_key: z.string().describe(\"The space key where the page will be created (e.g., 'AI', 'BL3')\"),\n title: z.string().describe(\"The title of the new page\"),\n content: z.string().describe(\"The page content in HTML format (Confluence storage format)\"),\n parent_page_id: z.string().optional().describe(\"Optional parent page ID to create this as a child page\"),\n }))\n .implement(async ({ space_key, title, content, parent_page_id }) => {\n logger.info('create-confluence-page called', { space_key, title, hasParent: !!parent_page_id });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n const pageData: any = {\n type: \"page\",\n title: title,\n space: { key: space_key },\n body: {\n storage: {\n value: content,\n representation: \"storage\",\n },\n },\n };\n\n // Add parent if specified\n if (parent_page_id) {\n pageData.ancestors = [{ id: parent_page_id }];\n }\n\n const response = await axios.post(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content`,\n pageData,\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('create-confluence-page result', {\n page_id: response.data.id,\n title: response.data.title,\n space: space_key\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: response.data.id,\n title: response.data.title,\n space: space_key,\n url: `${ATLASSIAN_SITE_URL}/wiki${response.data._links.webui}`,\n version: response.data.version?.number || 1,\n },\n });\n } catch (error: any) {\n logger.error('create-confluence-page error', {\n space_key,\n title,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Update an existing Confluence page\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the updateConfluencePage tool with the provided auth and logger\n */\nexport function createUpdateConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"update-confluence-page\")\n .description(\"Update an existing Confluence page's content. Requires page ID, new title, and new content.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"update\")\n .tag(\"write\")\n .usageNotes(\"Use this to update existing documentation. You must provide the page ID (from search results). The tool will automatically handle version incrementing. Always get the current page content first to avoid overwriting important information.\")\n .requires([\"get-confluence-page\"])\n .schema(z.object({\n page_id: z.string().describe(\"The ID of the page to update\"),\n title: z.string().describe(\"The new title for the page\"),\n content: z.string().describe(\"The new content in HTML format (Confluence storage format)\"),\n }))\n .implement(async ({ page_id, title, content }) => {\n logger.info('update-confluence-page called', { page_id, title });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n // First, get the current version\n const getResponse = await axios.get(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n headers: {\n Authorization: getAuthHeader(),\n },\n params: { expand: \"version\" },\n }\n );\n\n const currentVersion = getResponse.data.version.number;\n\n // Update the page\n const updateResponse = await axios.put(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n type: \"page\",\n title: title,\n version: { number: currentVersion + 1 },\n body: {\n storage: {\n value: content,\n representation: \"storage\",\n },\n },\n },\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('update-confluence-page result', {\n page_id,\n title: updateResponse.data.title,\n previousVersion: currentVersion,\n newVersion: updateResponse.data.version.number\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: updateResponse.data.id,\n title: updateResponse.data.title,\n url: `${ATLASSIAN_SITE_URL}/wiki${updateResponse.data._links.webui}`,\n version: updateResponse.data.version.number,\n previousVersion: currentVersion,\n },\n });\n } catch (error: any) {\n logger.error('update-confluence-page error', {\n page_id,\n title,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Archive a Confluence page (move to trash)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"./types\";\n\n/**\n * Create the archiveConfluencePage tool with the provided auth and logger\n */\nexport function createArchiveConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n): Tool {\n return toolBuilder()\n .name(\"archive-confluence-page\")\n .description(\"Archive a Confluence page by moving it to trash. The page can be restored by space admins. Note: UI may require a note explaining why the page was archived.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"archive\")\n .tag(\"delete\")\n .usageNotes(\"Use this to archive outdated or obsolete documentation. The page is moved to trash, not permanently deleted. Space admins can restore it if needed. Be very careful - only archive pages that are truly obsolete.\")\n .conflicts([\"create-confluence-page\"])\n .schema(z.object({\n page_id: z.string().describe(\"The ID of the page to archive\"),\n reason: z.string().optional().describe(\"Optional reason for archiving (for audit trail)\"),\n }))\n .implement(async ({ page_id, reason }) => {\n logger.info('archive-confluence-page called', { page_id, reason });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n // Get current page data\n const getResponse = await axios.get(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n headers: {\n Authorization: getAuthHeader(),\n },\n params: { expand: \"version,body.storage,space\" },\n }\n );\n\n const currentVersion = getResponse.data.version.number;\n const pageData = getResponse.data;\n\n // Archive by updating status to 'trashed'\n await axios.put(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n version: { number: currentVersion + 1 },\n title: pageData.title,\n type: \"page\",\n status: \"trashed\",\n body: pageData.body,\n space: { key: pageData.space.key },\n },\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('archive-confluence-page result', {\n page_id,\n title: pageData.title,\n previousVersion: currentVersion,\n newVersion: currentVersion + 1\n });\n\n return JSON.stringify({\n success: true,\n archived: {\n id: page_id,\n title: pageData.title,\n previousVersion: currentVersion,\n newVersion: currentVersion + 1,\n reason: reason || \"Archived via API\",\n note: \"Page moved to trash. Space admins can restore it from the Confluence UI.\",\n },\n });\n } catch (error: any) {\n logger.error('archive-confluence-page error', {\n page_id,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Confluence Integration Tools\n * Real integration with Atlassian Confluence for knowledge base access\n *\n * @packageDocumentation\n *\n * @example\n * ```ts\n * // Using environment variables\n * import { confluenceTools } from '@agentforge/tools';\n *\n * // ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL must be set\n * const result = await confluenceTools[0].execute({\n * query: 'space=AI AND type=page'\n * });\n *\n * // Using factory function with custom config\n * import { createConfluenceTools } from '@agentforge/tools';\n *\n * const tools = createConfluenceTools({\n * apiKey: 'your-api-key',\n * email: 'your-email@example.com',\n * siteUrl: 'https://your-domain.atlassian.net'\n * });\n *\n * const result = await tools.searchConfluence.execute({\n * query: 'payment processing'\n * });\n * ```\n */\n\nimport { createLogger, LogLevel } from \"@agentforge/core\";\nimport { getConfig, getAuthHeader, createGetConfiguredAuth, createGetConfiguredAuthHeader } from \"./auth.js\";\nimport { createSearchConfluenceTool } from \"./tools/search-confluence.js\";\nimport { createGetConfluencePageTool } from \"./tools/get-confluence-page.js\";\nimport { createListConfluenceSpacesTool } from \"./tools/list-confluence-spaces.js\";\nimport { createGetSpacePagesTool } from \"./tools/get-space-pages.js\";\nimport { createCreateConfluencePageTool } from \"./tools/create-confluence-page.js\";\nimport { createUpdateConfluencePageTool } from \"./tools/update-confluence-page.js\";\nimport { createArchiveConfluencePageTool } from \"./tools/archive-confluence-page.js\";\n\n// Export types\nexport type { ConfluenceToolsConfig, ConfluenceAuth } from \"./types.js\";\n\n// Create logger for default Confluence tools\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('[tools:confluence]', { level: logLevel });\n\n/**\n * Default Confluence tools using environment variables\n */\nexport const searchConfluence = createSearchConfluenceTool(getConfig, getAuthHeader, logger);\nexport const getConfluencePage = createGetConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const listConfluenceSpaces = createListConfluenceSpacesTool(getConfig, getAuthHeader, logger);\nexport const getSpacePages = createGetSpacePagesTool(getConfig, getAuthHeader, logger);\nexport const createConfluencePage = createCreateConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const updateConfluencePage = createUpdateConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const archiveConfluencePage = createArchiveConfluencePageTool(getConfig, getAuthHeader, logger);\n\n/**\n * Export all Confluence tools\n *\n * Includes 7 tools for Confluence integration:\n * - 4 read tools: search, get-page, list-spaces, get-space-pages\n * - 3 write tools: create-page, update-page, archive-page\n */\nexport const confluenceTools = [\n // Read tools\n searchConfluence,\n getConfluencePage,\n listConfluenceSpaces,\n getSpacePages,\n // Write tools\n createConfluencePage,\n updateConfluencePage,\n archiveConfluencePage,\n];\n\n/**\n * Create Confluence tools with custom configuration\n *\n * This factory function allows you to create Confluence tools with programmatic configuration\n * instead of relying solely on environment variables.\n *\n * @param config - Optional configuration for Confluence tools\n * @returns Object containing all 7 Confluence tools configured with the provided settings\n *\n * @example\n * ```ts\n * // Create tools with custom credentials\n * const tools = createConfluenceTools({\n * apiKey: 'your-api-key',\n * email: 'your-email@example.com',\n * siteUrl: 'https://your-domain.atlassian.net'\n * });\n *\n * // Use the tools\n * const result = await tools.searchConfluence.execute({\n * query: 'payment processing'\n * });\n * ```\n *\n * @example\n * ```ts\n * // Create tools with custom log level\n * const tools = createConfluenceTools({\n * logLevel: LogLevel.DEBUG\n * });\n * ```\n */\nexport function createConfluenceTools(config: import(\"./types.js\").ConfluenceToolsConfig = {}) {\n const {\n apiKey,\n email,\n siteUrl,\n logLevel: customLogLevel,\n } = config;\n\n // Create closures for getting configured auth credentials\n const getConfiguredAuth = createGetConfiguredAuth(apiKey, email, siteUrl);\n const getConfiguredAuthHeader = createGetConfiguredAuthHeader(getConfiguredAuth);\n\n // Create logger with custom log level if provided\n const toolLogger = customLogLevel\n ? createLogger('tools:confluence', { level: customLogLevel })\n : logger;\n\n // Build all 7 tools with configured auth/logger\n const searchConfluence = createSearchConfluenceTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const getConfluencePage = createGetConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const listConfluenceSpaces = createListConfluenceSpacesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const getSpacePages = createGetSpacePagesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const createConfluencePage = createCreateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const updateConfluencePage = createUpdateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const archiveConfluencePage = createArchiveConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n\n // Return all configured tools\n return {\n searchConfluence,\n getConfluencePage,\n listConfluenceSpaces,\n getSpacePages,\n createConfluencePage,\n updateConfluencePage,\n archiveConfluencePage,\n };\n}\n\n","/**\n * CSV Tools Types\n * \n * Type definitions and schemas for CSV tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * CSV parser schema\n */\nexport const csvParserSchema = z.object({\n csv: z.string().describe('CSV string to parse'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n hasHeaders: z.boolean().default(true).describe('First row contains column headers'),\n skipEmptyLines: z.boolean().default(true).describe('Skip empty lines in the CSV'),\n trim: z.boolean().default(true).describe('Trim whitespace from values'),\n});\n\n/**\n * CSV generator schema\n */\nexport const csvGeneratorSchema = z.object({\n data: z.array(z.record(z.any().describe('Column value'))).describe('Array of objects to convert to CSV'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n includeHeaders: z.boolean().default(true).describe('Include header row with column names'),\n columns: z.array(z.string().describe(\"String value\")).optional().describe('Optional list of columns to include (in order)'),\n});\n\n/**\n * CSV to JSON schema\n */\nexport const csvToJsonSchema = z.object({\n csv: z.string().describe('CSV string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n});\n\n/**\n * JSON to CSV schema\n */\nexport const jsonToCsvSchema = z.object({\n json: z.string().describe('JSON array string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n});\n\n/**\n * CSV tools configuration\n */\nexport interface CsvToolsConfig {\n defaultDelimiter?: string;\n defaultHasHeaders?: boolean;\n defaultSkipEmptyLines?: boolean;\n defaultTrim?: boolean;\n}\n\n","/**\n * CSV Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { parse } from 'csv-parse/sync';\nimport { csvParserSchema } from '../types.js';\n\n/**\n * Create CSV parser tool\n */\nexport function createCsvParserTool(\n defaultDelimiter = ',',\n defaultHasHeaders = true,\n defaultSkipEmptyLines = true,\n defaultTrim = true\n) {\n return toolBuilder()\n .name('csv-parser')\n .description('Parse CSV string into an array of objects. Supports custom delimiters, headers, and options.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'parse', 'data', 'table'])\n .schema(csvParserSchema)\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter ?? defaultDelimiter,\n columns: input.hasHeaders ?? defaultHasHeaders,\n skip_empty_lines: input.skipEmptyLines ?? defaultSkipEmptyLines,\n trim: input.trim ?? defaultTrim,\n relax_column_count: true,\n });\n\n return {\n success: true,\n data: records,\n rowCount: records.length,\n columnCount: records.length > 0 ? Object.keys(records[0]).length : 0,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { stringify } from 'csv-stringify/sync';\nimport { csvGeneratorSchema } from '../types.js';\n\n/**\n * Create CSV generator tool\n */\nexport function createCsvGeneratorTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('csv-generator')\n .description('Convert an array of objects to CSV string. Automatically extracts headers from object keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'generate', 'stringify', 'data'])\n .schema(csvGeneratorSchema)\n .implement(async (input) => {\n try {\n const csv = stringify(input.data, {\n delimiter: input.delimiter ?? defaultDelimiter,\n header: input.includeHeaders,\n columns: input.columns,\n });\n\n return {\n success: true,\n csv,\n rowCount: input.data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV to JSON Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { parse } from 'csv-parse/sync';\nimport { csvToJsonSchema } from '../types.js';\n\n/**\n * Create CSV to JSON converter tool\n */\nexport function createCsvToJsonTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('csv-to-json')\n .description('Convert CSV string to JSON array. Each row becomes an object with column headers as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'json', 'convert', 'data'])\n .schema(csvToJsonSchema)\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter ?? defaultDelimiter,\n columns: true,\n skip_empty_lines: true,\n trim: true,\n });\n\n const json = input.pretty \n ? JSON.stringify(records, null, 2)\n : JSON.stringify(records);\n\n return {\n success: true,\n json,\n recordCount: records.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert CSV to JSON',\n };\n }\n })\n .build();\n}\n\n","/**\n * JSON to CSV Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { stringify } from 'csv-stringify/sync';\nimport { jsonToCsvSchema } from '../types.js';\n\n/**\n * Create JSON to CSV converter tool\n */\nexport function createJsonToCsvTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('json-to-csv')\n .description('Convert JSON array to CSV string. Each object becomes a row with keys as column headers.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'csv', 'convert', 'data'])\n .schema(jsonToCsvSchema)\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n \n if (!Array.isArray(data)) {\n return {\n success: false,\n error: 'Input must be a JSON array',\n };\n }\n\n const csv = stringify(data, {\n delimiter: input.delimiter ?? defaultDelimiter,\n header: true,\n });\n\n return {\n success: true,\n csv,\n rowCount: data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV Tools\n * \n * Tools for parsing and generating CSV data.\n */\n\nexport * from './types.js';\nexport { createCsvParserTool } from './tools/csv-parser.js';\nexport { createCsvGeneratorTool } from './tools/csv-generator.js';\nexport { createCsvToJsonTool } from './tools/csv-to-json.js';\nexport { createJsonToCsvTool } from './tools/json-to-csv.js';\n\nimport { createCsvParserTool } from './tools/csv-parser.js';\nimport { createCsvGeneratorTool } from './tools/csv-generator.js';\nimport { createCsvToJsonTool } from './tools/csv-to-json.js';\nimport { createJsonToCsvTool } from './tools/json-to-csv.js';\nimport type { CsvToolsConfig } from './types.js';\n\n/**\n * Default CSV parser tool instance\n */\nexport const csvParser = createCsvParserTool();\n\n/**\n * Default CSV generator tool instance\n */\nexport const csvGenerator = createCsvGeneratorTool();\n\n/**\n * Default CSV to JSON converter tool instance\n */\nexport const csvToJson = createCsvToJsonTool();\n\n/**\n * Default JSON to CSV converter tool instance\n */\nexport const jsonToCsv = createJsonToCsvTool();\n\n/**\n * All CSV tools\n */\nexport const csvTools = [csvParser, csvGenerator, csvToJson, jsonToCsv];\n\n/**\n * Create CSV tools with custom configuration\n */\nexport function createCsvTools(config: CsvToolsConfig = {}) {\n const {\n defaultDelimiter = ',',\n defaultHasHeaders = true,\n defaultSkipEmptyLines = true,\n defaultTrim = true,\n } = config;\n\n return [\n createCsvParserTool(defaultDelimiter, defaultHasHeaders, defaultSkipEmptyLines, defaultTrim),\n createCsvGeneratorTool(defaultDelimiter),\n createCsvToJsonTool(defaultDelimiter),\n createJsonToCsvTool(defaultDelimiter),\n ];\n}\n\n","/**\n * JSON Tools Types\n * \n * Type definitions and schemas for JSON tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * JSON parser schema\n */\nexport const jsonParserSchema = z.object({\n json: z.string().describe('JSON string to parse'),\n strict: z.boolean().default(true).describe('Use strict JSON parsing (no trailing commas, etc.)'),\n});\n\n/**\n * JSON stringify schema\n */\nexport const jsonStringifySchema = z.object({\n data: z.any().describe('Data to convert to JSON string'),\n pretty: z.boolean().default(false).describe('Format with indentation for readability'),\n indent: z.number().default(2).describe('Number of spaces for indentation (when pretty is true)'),\n});\n\n/**\n * JSON query schema\n */\nexport const jsonQuerySchema = z.object({\n data: z.any().describe('JSON data to query'),\n path: z.string().describe('Dot notation path to query (e.g., \"user.name\" or \"items[0].id\")'),\n});\n\n/**\n * JSON validator schema\n */\nexport const jsonValidatorSchema = z.object({\n json: z.string().describe('JSON string to validate'),\n});\n\n/**\n * JSON merge schema\n */\nexport const jsonMergeSchema = z.object({\n objects: z.array(z.any().describe('Object to merge')).describe('Array of objects to merge'),\n deep: z.boolean().default(false).describe('Perform deep merge (nested objects)'),\n});\n\n/**\n * JSON tools configuration\n */\nexport interface JsonToolsConfig {\n defaultIndent?: number;\n defaultPretty?: boolean;\n}\n\n","/**\n * JSON Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonParserSchema } from '../types.js';\n\n/**\n * Create JSON parser tool\n */\nexport function createJsonParserTool() {\n return toolBuilder()\n .name('json-parser')\n .description('Parse JSON string into an object. Validates JSON syntax and returns parsed data or error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'parse', 'data'])\n .schema(jsonParserSchema)\n .implementSafe(async (input) => {\n const parsed = JSON.parse(input.json);\n return {\n data: parsed,\n type: Array.isArray(parsed) ? 'array' : typeof parsed,\n };\n })\n .build();\n}\n\n","/**\n * JSON Stringify Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonStringifySchema } from '../types.js';\n\n/**\n * Create JSON stringify tool\n */\nexport function createJsonStringifyTool(defaultIndent = 2, defaultPretty = false) {\n return toolBuilder()\n .name('json-stringify')\n .description('Convert an object to a JSON string with optional formatting (pretty print).')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'stringify', 'format', 'data'])\n .schema(jsonStringifySchema)\n .implementSafe(async (input) => {\n const pretty = input.pretty ?? defaultPretty;\n const indent = input.indent ?? defaultIndent;\n \n const json = pretty\n ? JSON.stringify(input.data, null, indent)\n : JSON.stringify(input.data);\n\n return {\n json,\n length: json.length,\n };\n })\n .build();\n}\n\n","/**\n * JSON Query Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonQuerySchema } from '../types.js';\n\n/**\n * Create JSON query tool\n */\nexport function createJsonQueryTool() {\n return toolBuilder()\n .name('json-query')\n .description('Query JSON data using dot notation path (e.g., \"user.address.city\"). Supports array indexing.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'query', 'path', 'data'])\n .schema(jsonQuerySchema)\n .implementSafe(async (input) => {\n const parts = input.path.split('.');\n let current = input.data;\n\n for (const part of parts) {\n // Handle array indexing: items[0]\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n current = current[key][parseInt(index, 10)];\n } else {\n current = current[part];\n }\n\n if (current === undefined) {\n throw new Error(`Path not found: ${input.path}`);\n }\n }\n\n return {\n value: current,\n type: Array.isArray(current) ? 'array' : typeof current,\n };\n })\n .build();\n}\n\n","/**\n * JSON Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonValidatorSchema } from '../types.js';\n\n/**\n * Create JSON validator tool\n */\nexport function createJsonValidatorTool() {\n return toolBuilder()\n .name('json-validator')\n .description('Validate JSON string syntax without parsing. Returns whether the JSON is valid and any error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'validate', 'check', 'data'])\n .schema(jsonValidatorSchema)\n .implementSafe(async (input) => {\n JSON.parse(input.json);\n return {\n valid: true,\n message: 'Valid JSON',\n };\n })\n .build();\n}\n\n","/**\n * JSON Merge Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonMergeSchema } from '../types.js';\n\n/**\n * Create JSON merge tool\n */\nexport function createJsonMergeTool() {\n return toolBuilder()\n .name('json-merge')\n .description('Merge two or more JSON objects. Later objects override earlier ones for conflicting keys.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'merge', 'combine', 'data'])\n .schema(jsonMergeSchema)\n .implement(async (input) => {\n if (input.deep) {\n // Deep merge\n const deepMerge = (target: any, source: any): any => {\n const output = { ...target };\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n output[key] = deepMerge(output[key] || {}, source[key]);\n } else {\n output[key] = source[key];\n }\n }\n return output;\n };\n \n return input.objects.reduce((acc, obj) => deepMerge(acc, obj), {});\n } else {\n // Shallow merge\n return Object.assign({}, ...input.objects);\n }\n })\n .build();\n}\n\n","/**\n * JSON Tools\n * \n * Tools for parsing, validating, transforming, and querying JSON data.\n */\n\nexport * from './types.js';\nexport { createJsonParserTool } from './tools/json-parser.js';\nexport { createJsonStringifyTool } from './tools/json-stringify.js';\nexport { createJsonQueryTool } from './tools/json-query.js';\nexport { createJsonValidatorTool } from './tools/json-validator.js';\nexport { createJsonMergeTool } from './tools/json-merge.js';\n\nimport { createJsonParserTool } from './tools/json-parser.js';\nimport { createJsonStringifyTool } from './tools/json-stringify.js';\nimport { createJsonQueryTool } from './tools/json-query.js';\nimport { createJsonValidatorTool } from './tools/json-validator.js';\nimport { createJsonMergeTool } from './tools/json-merge.js';\nimport type { JsonToolsConfig } from './types.js';\n\n/**\n * Default JSON parser tool instance\n */\nexport const jsonParser = createJsonParserTool();\n\n/**\n * Default JSON stringify tool instance\n */\nexport const jsonStringify = createJsonStringifyTool();\n\n/**\n * Default JSON query tool instance\n */\nexport const jsonQuery = createJsonQueryTool();\n\n/**\n * Default JSON validator tool instance\n */\nexport const jsonValidator = createJsonValidatorTool();\n\n/**\n * Default JSON merge tool instance\n */\nexport const jsonMerge = createJsonMergeTool();\n\n/**\n * All JSON tools\n */\nexport const jsonTools = [jsonParser, jsonStringify, jsonQuery, jsonValidator, jsonMerge];\n\n/**\n * Create JSON tools with custom configuration\n */\nexport function createJsonTools(config: JsonToolsConfig = {}) {\n const {\n defaultIndent = 2,\n defaultPretty = false,\n } = config;\n\n return [\n createJsonParserTool(),\n createJsonStringifyTool(defaultIndent, defaultPretty),\n createJsonQueryTool(),\n createJsonValidatorTool(),\n createJsonMergeTool(),\n ];\n}\n\n","/**\n * XML Tools Types\n * \n * Type definitions and schemas for XML tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * XML parser schema\n */\nexport const xmlParserSchema = z.object({\n xml: z.string().describe('XML string to parse'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes'),\n parseAttributeValue: z.boolean().default(true).describe('Parse attribute values (numbers, booleans)'),\n trimValues: z.boolean().default(true).describe('Trim whitespace from text values'),\n});\n\n/**\n * XML generator schema\n */\nexport const xmlGeneratorSchema = z.object({\n data: z.any().describe('Object to convert to XML'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n indentSize: z.number().default(2).describe('Number of spaces for indentation (when format is true)'),\n});\n\n/**\n * XML to JSON schema\n */\nexport const xmlToJsonSchema = z.object({\n xml: z.string().describe('XML string to convert'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes in conversion'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n});\n\n/**\n * JSON to XML schema\n */\nexport const jsonToXmlSchema = z.object({\n json: z.string().describe('JSON string to convert'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n});\n\n/**\n * XML tools configuration\n */\nexport interface XmlToolsConfig {\n defaultRootName?: string;\n defaultFormat?: boolean;\n defaultIndentSize?: number;\n}\n\n","/**\n * XML Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLParser } from 'fast-xml-parser';\nimport { xmlParserSchema } from '../types.js';\n\n/**\n * Create XML parser tool\n */\nexport function createXmlParserTool() {\n return toolBuilder()\n .name('xml-parser')\n .description('Parse XML string into a JavaScript object. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'parse', 'data'])\n .schema(xmlParserSchema)\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: input.parseAttributeValue,\n trimValues: input.trimValues,\n parseTagValue: true,\n });\n\n const result = parser.parse(input.xml);\n\n return {\n success: true,\n data: result,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLBuilder } from 'fast-xml-parser';\nimport { xmlGeneratorSchema } from '../types.js';\n\n/**\n * Create XML generator tool\n */\nexport function createXmlGeneratorTool(defaultRootName = 'root', defaultFormat = false, defaultIndentSize = 2) {\n return toolBuilder()\n .name('xml-generator')\n .description('Convert a JavaScript object to XML string. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'generate', 'stringify', 'data'])\n .schema(xmlGeneratorSchema)\n .implement(async (input) => {\n try {\n const indentSize = input.indentSize ?? defaultIndentSize;\n const rootName = input.rootName ?? defaultRootName;\n const format = input.format ?? defaultFormat;\n\n const builder = new XMLBuilder({\n format,\n indentBy: ' '.repeat(indentSize),\n ignoreAttributes: false,\n });\n\n // Wrap data in root element if not already wrapped\n const dataToConvert = input.data[rootName] ? input.data : { [rootName]: input.data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML to JSON Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLParser } from 'fast-xml-parser';\nimport { xmlToJsonSchema } from '../types.js';\n\n/**\n * Create XML to JSON converter tool\n */\nexport function createXmlToJsonTool() {\n return toolBuilder()\n .name('xml-to-json')\n .description('Convert XML string to JSON. Preserves structure and can include or exclude attributes.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'json', 'convert', 'data'])\n .schema(xmlToJsonSchema)\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: true,\n trimValues: true,\n });\n\n const result = parser.parse(input.xml);\n const json = input.pretty \n ? JSON.stringify(result, null, 2)\n : JSON.stringify(result);\n\n return {\n success: true,\n json,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert XML to JSON',\n };\n }\n })\n .build();\n}\n\n","/**\n * JSON to XML Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLBuilder } from 'fast-xml-parser';\nimport { jsonToXmlSchema } from '../types.js';\n\n/**\n * Create JSON to XML converter tool\n */\nexport function createJsonToXmlTool(defaultRootName = 'root', defaultFormat = false) {\n return toolBuilder()\n .name('json-to-xml')\n .description('Convert JSON string to XML. Each object key becomes an XML element.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'xml', 'convert', 'data'])\n .schema(jsonToXmlSchema)\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n const rootName = input.rootName ?? defaultRootName;\n const format = input.format ?? defaultFormat;\n\n const builder = new XMLBuilder({\n format,\n indentBy: ' ',\n ignoreAttributes: false,\n });\n\n const dataToConvert = data[rootName] ? data : { [rootName]: data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML Tools\n * \n * Tools for parsing and generating XML data.\n */\n\nexport * from './types.js';\nexport { createXmlParserTool } from './tools/xml-parser.js';\nexport { createXmlGeneratorTool } from './tools/xml-generator.js';\nexport { createXmlToJsonTool } from './tools/xml-to-json.js';\nexport { createJsonToXmlTool } from './tools/json-to-xml.js';\n\nimport { createXmlParserTool } from './tools/xml-parser.js';\nimport { createXmlGeneratorTool } from './tools/xml-generator.js';\nimport { createXmlToJsonTool } from './tools/xml-to-json.js';\nimport { createJsonToXmlTool } from './tools/json-to-xml.js';\nimport type { XmlToolsConfig } from './types.js';\n\n/**\n * Default XML parser tool instance\n */\nexport const xmlParser = createXmlParserTool();\n\n/**\n * Default XML generator tool instance\n */\nexport const xmlGenerator = createXmlGeneratorTool();\n\n/**\n * Default XML to JSON converter tool instance\n */\nexport const xmlToJson = createXmlToJsonTool();\n\n/**\n * Default JSON to XML converter tool instance\n */\nexport const jsonToXml = createJsonToXmlTool();\n\n/**\n * All XML tools\n */\nexport const xmlTools = [xmlParser, xmlGenerator, xmlToJson, jsonToXml];\n\n/**\n * Create XML tools with custom configuration\n */\nexport function createXmlTools(config: XmlToolsConfig = {}) {\n const {\n defaultRootName = 'root',\n defaultFormat = false,\n defaultIndentSize = 2,\n } = config;\n\n return [\n createXmlParserTool(),\n createXmlGeneratorTool(defaultRootName, defaultFormat, defaultIndentSize),\n createXmlToJsonTool(),\n createJsonToXmlTool(defaultRootName, defaultFormat),\n ];\n}\n\n","/**\n * Data Transformer Tools Types\n * \n * Type definitions and schemas for data transformation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Array filter schema\n */\nexport const arrayFilterSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to filter'),\n property: z.string().describe('Property name to filter by (use dot notation for nested properties)'),\n operator: z.enum(['equals', 'not-equals', 'greater-than', 'less-than', 'contains', 'starts-with', 'ends-with']).describe('Comparison operator'),\n value: z.any().describe('Value to compare against'),\n});\n\n/**\n * Array map schema\n */\nexport const arrayMapSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to map'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to extract from each object'),\n});\n\n/**\n * Array sort schema\n */\nexport const arraySortSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to sort'),\n property: z.string().describe('Property name to sort by (use dot notation for nested properties)'),\n order: z.enum(['asc', 'desc']).default('asc').describe('Sort order: ascending or descending'),\n});\n\n/**\n * Array group by schema\n */\nexport const arrayGroupBySchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to group'),\n property: z.string().describe('Property name to group by'),\n});\n\n/**\n * Object pick schema\n */\nexport const objectPickSchema = z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to pick'),\n});\n\n/**\n * Object omit schema\n */\nexport const objectOmitSchema = z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to omit'),\n});\n\n/**\n * Transformer tools configuration\n */\nexport interface TransformerToolsConfig {\n // No specific configuration needed for transformer tools\n}\n\n","/**\n * Array Filter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayFilterSchema } from '../types.js';\n\n/**\n * Create array filter tool\n */\nexport function createArrayFilterTool() {\n return toolBuilder()\n .name('array-filter')\n .description('Filter an array based on a property value. Supports equality, comparison, and contains operations.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'filter', 'data', 'transform'])\n .schema(arrayFilterSchema)\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const filtered = input.array.filter((item) => {\n const itemValue = getNestedValue(item, input.property);\n \n switch (input.operator) {\n case 'equals':\n return itemValue === input.value;\n case 'not-equals':\n return itemValue !== input.value;\n case 'greater-than':\n return itemValue > input.value;\n case 'less-than':\n return itemValue < input.value;\n case 'contains':\n return String(itemValue).includes(String(input.value));\n case 'starts-with':\n return String(itemValue).startsWith(String(input.value));\n case 'ends-with':\n return String(itemValue).endsWith(String(input.value));\n default:\n return false;\n }\n });\n\n return {\n filtered,\n originalCount: input.array.length,\n filteredCount: filtered.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Map Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayMapSchema } from '../types.js';\n\n/**\n * Create array map tool\n */\nexport function createArrayMapTool() {\n return toolBuilder()\n .name('array-map')\n .description('Extract specific properties from each object in an array. Creates a new array with only the selected properties.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'map', 'data', 'transform'])\n .schema(arrayMapSchema)\n .implement(async (input) => {\n const mapped = input.array.map((item) => {\n const result: any = {};\n for (const prop of input.properties) {\n // Support dot notation\n const value = prop.split('.').reduce((current, key) => current?.[key], item);\n result[prop] = value;\n }\n return result;\n });\n\n return {\n mapped,\n count: mapped.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Sort Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arraySortSchema } from '../types.js';\n\n/**\n * Create array sort tool\n */\nexport function createArraySortTool() {\n return toolBuilder()\n .name('array-sort')\n .description('Sort an array by a property value. Supports ascending and descending order.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'sort', 'data', 'transform'])\n .schema(arraySortSchema)\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const sorted = [...input.array].sort((a, b) => {\n const aValue = getNestedValue(a, input.property);\n const bValue = getNestedValue(b, input.property);\n \n if (aValue < bValue) return input.order === 'asc' ? -1 : 1;\n if (aValue > bValue) return input.order === 'asc' ? 1 : -1;\n return 0;\n });\n\n return {\n sorted,\n count: sorted.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Group By Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayGroupBySchema } from '../types.js';\n\n/**\n * Create array group by tool\n */\nexport function createArrayGroupByTool() {\n return toolBuilder()\n .name('array-group-by')\n .description('Group an array of objects by a property value. Returns an object with groups as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'group', 'data', 'transform'])\n .schema(arrayGroupBySchema)\n .implement(async (input) => {\n const groups: Record<string, any[]> = {};\n \n for (const item of input.array) {\n const key = String(item[input.property]);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n }\n\n return {\n groups,\n groupCount: Object.keys(groups).length,\n totalItems: input.array.length,\n };\n })\n .build();\n}\n\n","/**\n * Object Pick Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { objectPickSchema } from '../types.js';\n\n/**\n * Create object pick tool\n */\nexport function createObjectPickTool() {\n return toolBuilder()\n .name('object-pick')\n .description('Create a new object with only the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'pick', 'data', 'transform'])\n .schema(objectPickSchema)\n .implement(async (input) => {\n const picked: Record<string, any> = {};\n \n for (const prop of input.properties) {\n if (prop in input.object) {\n picked[prop] = input.object[prop];\n }\n }\n\n return picked;\n })\n .build();\n}\n\n","/**\n * Object Omit Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { objectOmitSchema } from '../types.js';\n\n/**\n * Create object omit tool\n */\nexport function createObjectOmitTool() {\n return toolBuilder()\n .name('object-omit')\n .description('Create a new object excluding the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'omit', 'data', 'transform'])\n .schema(objectOmitSchema)\n .implement(async (input) => {\n const omitted: Record<string, any> = { ...input.object };\n \n for (const prop of input.properties) {\n delete omitted[prop];\n }\n\n return omitted;\n })\n .build();\n}\n\n","/**\n * Data Transformer Tools\n * \n * Tools for transforming, filtering, mapping, and manipulating data structures.\n */\n\nexport * from './types.js';\nexport { createArrayFilterTool } from './tools/array-filter.js';\nexport { createArrayMapTool } from './tools/array-map.js';\nexport { createArraySortTool } from './tools/array-sort.js';\nexport { createArrayGroupByTool } from './tools/array-group-by.js';\nexport { createObjectPickTool } from './tools/object-pick.js';\nexport { createObjectOmitTool } from './tools/object-omit.js';\n\nimport { createArrayFilterTool } from './tools/array-filter.js';\nimport { createArrayMapTool } from './tools/array-map.js';\nimport { createArraySortTool } from './tools/array-sort.js';\nimport { createArrayGroupByTool } from './tools/array-group-by.js';\nimport { createObjectPickTool } from './tools/object-pick.js';\nimport { createObjectOmitTool } from './tools/object-omit.js';\nimport type { TransformerToolsConfig } from './types.js';\n\n/**\n * Default array filter tool instance\n */\nexport const arrayFilter = createArrayFilterTool();\n\n/**\n * Default array map tool instance\n */\nexport const arrayMap = createArrayMapTool();\n\n/**\n * Default array sort tool instance\n */\nexport const arraySort = createArraySortTool();\n\n/**\n * Default array group by tool instance\n */\nexport const arrayGroupBy = createArrayGroupByTool();\n\n/**\n * Default object pick tool instance\n */\nexport const objectPick = createObjectPickTool();\n\n/**\n * Default object omit tool instance\n */\nexport const objectOmit = createObjectOmitTool();\n\n/**\n * All transformer tools\n */\nexport const transformerTools = [arrayFilter, arrayMap, arraySort, arrayGroupBy, objectPick, objectOmit];\n\n/**\n * Create transformer tools with custom configuration\n */\nexport function createTransformerTools(config: TransformerToolsConfig = {}) {\n return [\n createArrayFilterTool(),\n createArrayMapTool(),\n createArraySortTool(),\n createArrayGroupByTool(),\n createObjectPickTool(),\n createObjectOmitTool(),\n ];\n}\n\n","/**\n * File Operations Types\n * \n * Type definitions and schemas for file operation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * File reader schema\n */\nexport const fileReaderSchema = z.object({\n path: z.string().describe('Path to the file to read'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex', 'binary']).default('utf8').describe('File encoding'),\n});\n\n/**\n * File writer schema\n */\nexport const fileWriterSchema = z.object({\n path: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex']).default('utf8').describe('File encoding'),\n createDirs: z.boolean().default(false).describe('Create parent directories if they don\\'t exist'),\n});\n\n/**\n * File append schema\n */\nexport const fileAppendSchema = z.object({\n path: z.string().describe('Path to the file to append to'),\n content: z.string().describe('Content to append to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii']).default('utf8').describe('File encoding'),\n});\n\n/**\n * File delete schema\n */\nexport const fileDeleteSchema = z.object({\n path: z.string().describe('Path to the file to delete'),\n});\n\n/**\n * File exists schema\n */\nexport const fileExistsSchema = z.object({\n path: z.string().describe('Path to check'),\n});\n\n/**\n * File operations configuration\n */\nexport interface FileOperationsConfig {\n defaultEncoding?: 'utf8' | 'utf-8' | 'ascii' | 'base64' | 'hex';\n createDirsDefault?: boolean;\n}\n\n","/**\n * File Reader Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileReaderSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file reader tool\n */\nexport function createFileReaderTool(defaultEncoding: string = 'utf8') {\n return toolBuilder()\n .name('file-reader')\n .description('Read the contents of a file from the file system. Supports text and binary files with various encodings.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'read', 'io', 'filesystem'])\n .schema(fileReaderSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n const content = await fs.readFile(input.path, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n content,\n size: stats.size,\n path: input.path,\n encoding,\n };\n })\n .build();\n}\n\n","/**\n * File Writer Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileWriterSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create file writer tool\n */\nexport function createFileWriterTool(defaultEncoding: string = 'utf8', createDirsDefault: boolean = false) {\n return toolBuilder()\n .name('file-writer')\n .description('Write content to a file. Creates the file if it doesn\\'t exist, or overwrites it if it does.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'write', 'io', 'filesystem'])\n .schema(fileWriterSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n const createDirs = input.createDirs ?? createDirsDefault;\n\n // Create parent directories if requested\n if (createDirs) {\n const dir = path.dirname(input.path);\n await fs.mkdir(dir, { recursive: true });\n }\n\n await fs.writeFile(input.path, input.content, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n path: input.path,\n size: stats.size,\n encoding,\n };\n })\n .build();\n}\n\n","/**\n * File Append Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileAppendSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file append tool\n */\nexport function createFileAppendTool(defaultEncoding: string = 'utf8') {\n return toolBuilder()\n .name('file-append')\n .description('Append content to the end of a file. Creates the file if it doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'append', 'io', 'filesystem'])\n .schema(fileAppendSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n await fs.appendFile(input.path, input.content, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n path: input.path,\n size: stats.size,\n };\n })\n .build();\n}\n\n","/**\n * File Delete Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileDeleteSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file delete tool\n */\nexport function createFileDeleteTool() {\n return toolBuilder()\n .name('file-delete')\n .description('Delete a file from the file system. Returns an error if the file doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'delete', 'remove', 'filesystem'])\n .schema(fileDeleteSchema)\n .implementSafe(async (input) => {\n await fs.unlink(input.path);\n\n return {\n path: input.path,\n message: 'File deleted successfully',\n };\n })\n .build();\n}\n\n","/**\n * File Exists Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileExistsSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file exists tool\n */\nexport function createFileExistsTool() {\n return toolBuilder()\n .name('file-exists')\n .description('Check if a file or directory exists at the specified path.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'exists', 'check', 'filesystem'])\n .schema(fileExistsSchema)\n .implement(async (input) => {\n try {\n await fs.access(input.path);\n const stats = await fs.stat(input.path);\n \n return {\n exists: true,\n path: input.path,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n };\n } catch {\n return {\n exists: false,\n path: input.path,\n };\n }\n })\n .build();\n}\n\n","/**\n * File Operations Tools\n * \n * Tools for reading, writing, and manipulating files.\n */\n\nexport * from './types.js';\nexport * from './tools/file-reader.js';\nexport * from './tools/file-writer.js';\nexport * from './tools/file-append.js';\nexport * from './tools/file-delete.js';\nexport * from './tools/file-exists.js';\n\nimport { createFileReaderTool } from './tools/file-reader.js';\nimport { createFileWriterTool } from './tools/file-writer.js';\nimport { createFileAppendTool } from './tools/file-append.js';\nimport { createFileDeleteTool } from './tools/file-delete.js';\nimport { createFileExistsTool } from './tools/file-exists.js';\nimport type { FileOperationsConfig } from './types.js';\n\n/**\n * Default file operation tool instances\n */\nexport const fileReader = createFileReaderTool();\nexport const fileWriter = createFileWriterTool();\nexport const fileAppend = createFileAppendTool();\nexport const fileDelete = createFileDeleteTool();\nexport const fileExists = createFileExistsTool();\n\n/**\n * Array of all file operation tools\n */\nexport const fileOperationTools = [\n fileReader,\n fileWriter,\n fileAppend,\n fileDelete,\n fileExists,\n];\n\n/**\n * Create file operation tools with custom configuration\n */\nexport function createFileOperationTools(config: FileOperationsConfig = {}) {\n const {\n defaultEncoding = 'utf8',\n createDirsDefault = false,\n } = config;\n\n return [\n createFileReaderTool(defaultEncoding),\n createFileWriterTool(defaultEncoding, createDirsDefault),\n createFileAppendTool(defaultEncoding),\n createFileDeleteTool(),\n createFileExistsTool(),\n ];\n}\n\n","/**\n * Directory Operations Types\n * \n * Type definitions and schemas for directory operation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Directory list schema\n */\nexport const directoryListSchema = z.object({\n path: z.string().describe('Path to the directory to list'),\n recursive: z.boolean().default(false).describe('List files recursively in subdirectories'),\n includeDetails: z.boolean().default(false).describe('Include file size, type, and modification date'),\n extension: z.string().optional().describe('Optional file extension filter (e.g., \".txt\", \".js\")'),\n});\n\n/**\n * Directory create schema\n */\nexport const directoryCreateSchema = z.object({\n path: z.string().describe('Path to the directory to create'),\n recursive: z.boolean().default(true).describe('Create parent directories if they don\\'t exist'),\n});\n\n/**\n * Directory delete schema\n */\nexport const directoryDeleteSchema = z.object({\n path: z.string().describe('Path to the directory to delete'),\n recursive: z.boolean().default(false).describe('Delete directory and all its contents'),\n});\n\n/**\n * File search schema\n */\nexport const fileSearchSchema = z.object({\n directory: z.string().describe('Directory to search in'),\n pattern: z.string().describe('File name pattern to search for (supports * wildcard)'),\n recursive: z.boolean().default(true).describe('Search in subdirectories'),\n caseSensitive: z.boolean().default(false).describe('Case-sensitive pattern matching'),\n});\n\n/**\n * Directory operations configuration\n */\nexport interface DirectoryOperationsConfig {\n defaultRecursive?: boolean;\n defaultIncludeDetails?: boolean;\n defaultCaseSensitive?: boolean;\n}\n\n","/**\n * Directory List Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryListSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create directory list tool\n */\nexport function createDirectoryListTool(defaultRecursive: boolean = false, defaultIncludeDetails: boolean = false) {\n return toolBuilder()\n .name('directory-list')\n .description('List all files and directories in a directory. Can optionally include file details and filter by extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'list', 'files', 'filesystem'])\n .schema(directoryListSchema)\n .implementSafe(async (input) => {\n const listFiles = async (dir: string, recursive: boolean): Promise<any[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const files: any[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(input.path, fullPath);\n\n // Apply extension filter if specified\n if (input.extension && !entry.name.endsWith(input.extension)) {\n if (!entry.isDirectory() || !recursive) {\n continue;\n }\n }\n\n if (input.includeDetails) {\n const stats = await fs.stat(fullPath);\n files.push({\n name: entry.name,\n path: relativePath,\n fullPath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n });\n } else {\n files.push({\n name: entry.name,\n path: relativePath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n });\n }\n\n // Recurse into subdirectories if requested\n if (recursive && entry.isDirectory()) {\n const subFiles = await listFiles(fullPath, true);\n files.push(...subFiles);\n }\n }\n\n return files;\n };\n\n const recursive = input.recursive ?? defaultRecursive;\n const files = await listFiles(input.path, recursive);\n\n return {\n path: input.path,\n files,\n count: files.length,\n };\n })\n .build();\n}\n\n","/**\n * Directory Create Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryCreateSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create directory create tool\n */\nexport function createDirectoryCreateTool(defaultRecursive: boolean = true) {\n return toolBuilder()\n .name('directory-create')\n .description('Create a new directory. Can optionally create parent directories if they don\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'create', 'mkdir', 'filesystem'])\n .schema(directoryCreateSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n await fs.mkdir(input.path, { recursive });\n\n return {\n path: input.path,\n message: 'Directory created successfully',\n };\n })\n .build();\n}\n\n","/**\n * Directory Delete Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryDeleteSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create directory delete tool\n */\nexport function createDirectoryDeleteTool(defaultRecursive: boolean = false) {\n return toolBuilder()\n .name('directory-delete')\n .description('Delete a directory. Can optionally delete non-empty directories recursively.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'delete', 'remove', 'filesystem'])\n .schema(directoryDeleteSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n await fs.rm(input.path, { recursive, force: false });\n\n return {\n path: input.path,\n message: 'Directory deleted successfully',\n };\n })\n .build();\n}\n\n","/**\n * File Search Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileSearchSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create file search tool\n */\nexport function createFileSearchTool(defaultRecursive: boolean = true, defaultCaseSensitive: boolean = false) {\n return toolBuilder()\n .name('file-search')\n .description('Search for files by name pattern in a directory. Supports wildcards and recursive search.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'search', 'find', 'filesystem'])\n .schema(fileSearchSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n const caseSensitive = input.caseSensitive ?? defaultCaseSensitive;\n\n const searchFiles = async (dir: string): Promise<string[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const matches: string[] = [];\n\n // Convert pattern to regex\n const regexPattern = input.pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`, caseSensitive ? '' : 'i');\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isFile() && regex.test(entry.name)) {\n matches.push(fullPath);\n }\n\n if (recursive && entry.isDirectory()) {\n const subMatches = await searchFiles(fullPath);\n matches.push(...subMatches);\n }\n }\n\n return matches;\n };\n\n const matches = await searchFiles(input.directory);\n\n return {\n directory: input.directory,\n pattern: input.pattern,\n matches,\n count: matches.length,\n };\n })\n .build();\n}\n\n","/**\n * Directory Operations Tools\n * \n * Tools for working with directories and file listings.\n */\n\nexport * from './types.js';\nexport * from './tools/directory-list.js';\nexport * from './tools/directory-create.js';\nexport * from './tools/directory-delete.js';\nexport * from './tools/file-search.js';\n\nimport { createDirectoryListTool } from './tools/directory-list.js';\nimport { createDirectoryCreateTool } from './tools/directory-create.js';\nimport { createDirectoryDeleteTool } from './tools/directory-delete.js';\nimport { createFileSearchTool } from './tools/file-search.js';\nimport type { DirectoryOperationsConfig } from './types.js';\n\n/**\n * Default directory operation tool instances\n */\nexport const directoryList = createDirectoryListTool();\nexport const directoryCreate = createDirectoryCreateTool();\nexport const directoryDelete = createDirectoryDeleteTool();\nexport const fileSearch = createFileSearchTool();\n\n/**\n * Array of all directory operation tools\n */\nexport const directoryOperationTools = [\n directoryList,\n directoryCreate,\n directoryDelete,\n fileSearch,\n];\n\n/**\n * Create directory operation tools with custom configuration\n */\nexport function createDirectoryOperationTools(config: DirectoryOperationsConfig = {}) {\n const {\n defaultRecursive = false,\n defaultIncludeDetails = false,\n defaultCaseSensitive = false,\n } = config;\n\n return [\n createDirectoryListTool(defaultRecursive, defaultIncludeDetails),\n createDirectoryCreateTool(true), // Always default to true for create\n createDirectoryDeleteTool(false), // Always default to false for delete (safety)\n createFileSearchTool(defaultRecursive, defaultCaseSensitive),\n ];\n}\n\n","/**\n * Path Utilities Types\n * \n * Type definitions and schemas for path utility tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Path join schema\n */\nexport const pathJoinSchema = z.object({\n segments: z.array(z.string().describe(\"String value\")).describe('Path segments to join'),\n});\n\n/**\n * Path resolve schema\n */\nexport const pathResolveSchema = z.object({\n paths: z.array(z.string().describe(\"String value\")).describe('Paths to resolve'),\n});\n\n/**\n * Path parse schema\n */\nexport const pathParseSchema = z.object({\n path: z.string().describe('File path to parse'),\n});\n\n/**\n * Path basename schema\n */\nexport const pathBasenameSchema = z.object({\n path: z.string().describe('File path'),\n removeExtension: z.boolean().default(false).describe('Remove the file extension'),\n});\n\n/**\n * Path dirname schema\n */\nexport const pathDirnameSchema = z.object({\n path: z.string().describe('File path'),\n});\n\n/**\n * Path extension schema\n */\nexport const pathExtensionSchema = z.object({\n path: z.string().describe('File path'),\n});\n\n/**\n * Path relative schema\n */\nexport const pathRelativeSchema = z.object({\n from: z.string().describe('Source path'),\n to: z.string().describe('Destination path'),\n});\n\n/**\n * Path normalize schema\n */\nexport const pathNormalizeSchema = z.object({\n path: z.string().describe('Path to normalize'),\n});\n\n/**\n * Path utilities configuration\n */\nexport interface PathUtilitiesConfig {\n // No specific configuration needed for path utilities\n}\n\n","/**\n * Path Join Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathJoinSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path join tool\n */\nexport function createPathJoinTool() {\n return toolBuilder()\n .name('path-join')\n .description('Join multiple path segments into a single path. Handles platform-specific separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'join', 'filesystem'])\n .schema(pathJoinSchema)\n .implement(async (input) => {\n const joined = path.join(...input.segments);\n \n return {\n path: joined,\n segments: input.segments,\n };\n })\n .build();\n}\n\n","/**\n * Path Resolve Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathResolveSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path resolve tool\n */\nexport function createPathResolveTool() {\n return toolBuilder()\n .name('path-resolve')\n .description('Resolve a sequence of paths into an absolute path. Resolves relative paths from the current working directory.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'resolve', 'absolute', 'filesystem'])\n .schema(pathResolveSchema)\n .implement(async (input) => {\n const resolved = path.resolve(...input.paths);\n \n return {\n path: resolved,\n isAbsolute: path.isAbsolute(resolved),\n };\n })\n .build();\n}\n\n","/**\n * Path Parse Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathParseSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path parse tool\n */\nexport function createPathParseTool() {\n return toolBuilder()\n .name('path-parse')\n .description('Parse a file path into its components (directory, filename, extension, etc.).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'parse', 'filesystem'])\n .schema(pathParseSchema)\n .implement(async (input) => {\n const parsed = path.parse(input.path);\n \n return {\n root: parsed.root,\n dir: parsed.dir,\n base: parsed.base,\n name: parsed.name,\n ext: parsed.ext,\n isAbsolute: path.isAbsolute(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Basename Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathBasenameSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path basename tool\n */\nexport function createPathBasenameTool() {\n return toolBuilder()\n .name('path-basename')\n .description('Get the last portion of a path (filename with extension). Optionally remove the extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'basename', 'filename', 'filesystem'])\n .schema(pathBasenameSchema)\n .implement(async (input) => {\n const basename = input.removeExtension \n ? path.basename(input.path, path.extname(input.path))\n : path.basename(input.path);\n \n return {\n basename,\n extension: path.extname(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Dirname Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathDirnameSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path dirname tool\n */\nexport function createPathDirnameTool() {\n return toolBuilder()\n .name('path-dirname')\n .description('Get the directory name of a path (everything except the last portion).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'dirname', 'directory', 'filesystem'])\n .schema(pathDirnameSchema)\n .implement(async (input) => {\n const dirname = path.dirname(input.path);\n \n return {\n dirname,\n basename: path.basename(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Extension Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathExtensionSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path extension tool\n */\nexport function createPathExtensionTool() {\n return toolBuilder()\n .name('path-extension')\n .description('Get the file extension from a path (including the dot, e.g., \".txt\").')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'extension', 'ext', 'filesystem'])\n .schema(pathExtensionSchema)\n .implement(async (input) => {\n const ext = path.extname(input.path);\n \n return {\n extension: ext,\n hasExtension: ext.length > 0,\n filename: path.basename(input.path, ext),\n };\n })\n .build();\n}\n\n","/**\n * Path Relative Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathRelativeSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path relative tool\n */\nexport function createPathRelativeTool() {\n return toolBuilder()\n .name('path-relative')\n .description('Get the relative path from one path to another.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'relative', 'filesystem'])\n .schema(pathRelativeSchema)\n .implement(async (input) => {\n const relative = path.relative(input.from, input.to);\n \n return {\n relativePath: relative,\n from: input.from,\n to: input.to,\n };\n })\n .build();\n}\n\n","/**\n * Path Normalize Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathNormalizeSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path normalize tool\n */\nexport function createPathNormalizeTool() {\n return toolBuilder()\n .name('path-normalize')\n .description('Normalize a path by resolving \"..\" and \".\" segments and removing duplicate separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'normalize', 'filesystem'])\n .schema(pathNormalizeSchema)\n .implement(async (input) => {\n const normalized = path.normalize(input.path);\n \n return {\n normalized,\n original: input.path,\n };\n })\n .build();\n}\n\n","/**\n * Path Utilities Tools\n * \n * Tools for working with file paths.\n */\n\nexport * from './types.js';\nexport * from './tools/path-join.js';\nexport * from './tools/path-resolve.js';\nexport * from './tools/path-parse.js';\nexport * from './tools/path-basename.js';\nexport * from './tools/path-dirname.js';\nexport * from './tools/path-extension.js';\nexport * from './tools/path-relative.js';\nexport * from './tools/path-normalize.js';\n\nimport { createPathJoinTool } from './tools/path-join.js';\nimport { createPathResolveTool } from './tools/path-resolve.js';\nimport { createPathParseTool } from './tools/path-parse.js';\nimport { createPathBasenameTool } from './tools/path-basename.js';\nimport { createPathDirnameTool } from './tools/path-dirname.js';\nimport { createPathExtensionTool } from './tools/path-extension.js';\nimport { createPathRelativeTool } from './tools/path-relative.js';\nimport { createPathNormalizeTool } from './tools/path-normalize.js';\nimport type { PathUtilitiesConfig } from './types.js';\n\n/**\n * Default path utility tool instances\n */\nexport const pathJoin = createPathJoinTool();\nexport const pathResolve = createPathResolveTool();\nexport const pathParse = createPathParseTool();\nexport const pathBasename = createPathBasenameTool();\nexport const pathDirname = createPathDirnameTool();\nexport const pathExtension = createPathExtensionTool();\nexport const pathRelative = createPathRelativeTool();\nexport const pathNormalize = createPathNormalizeTool();\n\n/**\n * Array of all path utility tools\n */\nexport const pathUtilityTools = [\n pathJoin,\n pathResolve,\n pathParse,\n pathBasename,\n pathDirname,\n pathExtension,\n pathRelative,\n pathNormalize,\n];\n\n/**\n * Create path utility tools with custom configuration\n */\nexport function createPathUtilityTools(config: PathUtilitiesConfig = {}) {\n return [\n createPathJoinTool(),\n createPathResolveTool(),\n createPathParseTool(),\n createPathBasenameTool(),\n createPathDirnameTool(),\n createPathExtensionTool(),\n createPathRelativeTool(),\n createPathNormalizeTool(),\n ];\n}\n\n","/**\n * Date and Time Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for current date/time tool\n */\nexport const CurrentDateTimeSchema = z.object({\n format: z.enum(['iso', 'unix', 'custom']).default('iso').describe('Output format'),\n customFormat: z.string().optional().describe('Custom format string (e.g., \"yyyy-MM-dd HH:mm:ss\") when format is \"custom\"'),\n timezone: z.string().optional().describe('Timezone (e.g., \"America/New_York\")'),\n});\n\n/**\n * Schema for date formatter tool\n */\nexport const DateFormatterSchema = z.object({\n date: z.string().describe('Date string or Unix timestamp to format'),\n outputFormat: z.string().describe('Output format string (e.g., \"yyyy-MM-dd\", \"MMM dd, yyyy\")'),\n inputFormat: z.string().optional().describe('Input format string (optional, auto-detected if not provided)'),\n});\n\n/**\n * Schema for date arithmetic tool\n */\nexport const DateArithmeticSchema = z.object({\n date: z.string().describe('Starting date (ISO string or Unix timestamp)'),\n operation: z.enum(['add', 'subtract']).describe('Operation to perform'),\n amount: z.number().describe('Amount to add or subtract'),\n unit: z.enum(['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']).describe('Time unit'),\n});\n\n/**\n * Schema for date difference tool\n */\nexport const DateDifferenceSchema = z.object({\n startDate: z.string().describe('Start date (ISO string or Unix timestamp)'),\n endDate: z.string().describe('End date (ISO string or Unix timestamp)'),\n unit: z.enum(['days', 'hours', 'minutes']).default('days').describe('Unit for the difference'),\n});\n\n/**\n * Schema for date comparison tool\n */\nexport const DateComparisonSchema = z.object({\n date1: z.string().describe('First date to compare'),\n date2: z.string().describe('Second date to compare'),\n});\n\n/**\n * Configuration for date/time tools\n */\nexport interface DateTimeConfig {\n // Future: Add configuration options if needed\n}\n\nexport type CurrentDateTimeInput = z.infer<typeof CurrentDateTimeSchema>;\nexport type DateFormatterInput = z.infer<typeof DateFormatterSchema>;\nexport type DateArithmeticInput = z.infer<typeof DateArithmeticSchema>;\nexport type DateDifferenceInput = z.infer<typeof DateDifferenceSchema>;\nexport type DateComparisonInput = z.infer<typeof DateComparisonSchema>;\n\n","/**\n * Current Date/Time Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { format } from 'date-fns';\nimport { CurrentDateTimeSchema } from '../types.js';\n\n/**\n * Create current date/time tool\n */\nexport function createCurrentDateTimeTool() {\n return toolBuilder()\n .name('current-date-time')\n .description('Get the current date and time in various formats (ISO, Unix timestamp, formatted string).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'now', 'current'])\n .schema(CurrentDateTimeSchema)\n .implement(async (input) => {\n const now = new Date();\n \n let formatted: string | number;\n if (input.format === 'iso') {\n formatted = now.toISOString();\n } else if (input.format === 'unix') {\n formatted = Math.floor(now.getTime() / 1000);\n } else if (input.format === 'custom' && input.customFormat) {\n formatted = format(now, input.customFormat);\n } else {\n formatted = now.toISOString();\n }\n \n return {\n formatted,\n iso: now.toISOString(),\n unix: Math.floor(now.getTime() / 1000),\n year: now.getFullYear(),\n month: now.getMonth() + 1,\n day: now.getDate(),\n hour: now.getHours(),\n minute: now.getMinutes(),\n second: now.getSeconds(),\n };\n })\n .build();\n}\n\n","/**\n * Date Formatter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { format, parse, isValid } from 'date-fns';\nimport { DateFormatterSchema } from '../types.js';\n\n/**\n * Create date formatter tool\n */\nexport function createDateFormatterTool() {\n return toolBuilder()\n .name('date-formatter')\n .description('Format a date string or timestamp into a different format. Supports ISO, Unix timestamps, and custom formats.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'format', 'time'])\n .schema(DateFormatterSchema)\n .implement(async (input) => {\n try {\n let date: Date;\n \n // Try to parse the input\n if (input.inputFormat) {\n date = parse(input.date, input.inputFormat, new Date());\n } else if (!isNaN(Number(input.date))) {\n // Unix timestamp\n date = new Date(Number(input.date) * 1000);\n } else {\n // ISO or other standard format\n date = new Date(input.date);\n }\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const formatted = format(date, input.outputFormat);\n \n return {\n success: true,\n formatted,\n iso: date.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to format date',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Arithmetic Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { add, sub, isValid } from 'date-fns';\nimport { DateArithmeticSchema } from '../types.js';\n\n/**\n * Create date arithmetic tool\n */\nexport function createDateArithmeticTool() {\n return toolBuilder()\n .name('date-arithmetic')\n .description('Add or subtract time from a date. Supports years, months, weeks, days, hours, minutes, and seconds.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'add', 'subtract', 'arithmetic'])\n .schema(DateArithmeticSchema)\n .implement(async (input) => {\n try {\n const date = new Date(input.date);\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const duration = { [input.unit]: input.amount };\n const result = input.operation === 'add' \n ? add(date, duration)\n : sub(date, duration);\n \n return {\n success: true,\n result: result.toISOString(),\n unix: Math.floor(result.getTime() / 1000),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to perform date arithmetic',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Difference Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { differenceInDays, differenceInHours, differenceInMinutes, isValid } from 'date-fns';\nimport { DateDifferenceSchema } from '../types.js';\n\n/**\n * Create date difference tool\n */\nexport function createDateDifferenceTool() {\n return toolBuilder()\n .name('date-difference')\n .description('Calculate the difference between two dates in various units (days, hours, minutes).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'difference', 'duration'])\n .schema(DateDifferenceSchema)\n .implement(async (input) => {\n try {\n const start = new Date(input.startDate);\n const end = new Date(input.endDate);\n \n if (!isValid(start) || !isValid(end)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n let difference: number;\n if (input.unit === 'days') {\n difference = differenceInDays(end, start);\n } else if (input.unit === 'hours') {\n difference = differenceInHours(end, start);\n } else {\n difference = differenceInMinutes(end, start);\n }\n \n return {\n success: true,\n difference,\n unit: input.unit,\n startDate: start.toISOString(),\n endDate: end.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate date difference',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Comparison Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { isAfter, isBefore, isValid } from 'date-fns';\nimport { DateComparisonSchema } from '../types.js';\n\n/**\n * Create date comparison tool\n */\nexport function createDateComparisonTool() {\n return toolBuilder()\n .name('date-comparison')\n .description('Compare two dates to determine if one is before, after, or equal to the other.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'compare', 'comparison'])\n .schema(DateComparisonSchema)\n .implement(async (input) => {\n try {\n const d1 = new Date(input.date1);\n const d2 = new Date(input.date2);\n \n if (!isValid(d1) || !isValid(d2)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n return {\n success: true,\n date1IsBefore: isBefore(d1, d2),\n date1IsAfter: isAfter(d1, d2),\n datesAreEqual: d1.getTime() === d2.getTime(),\n date1: d1.toISOString(),\n date2: d2.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to compare dates',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date and Time Utility Tools\n * \n * Tools for working with dates, times, and timestamps.\n */\n\nimport { createCurrentDateTimeTool } from './tools/current-date-time.js';\nimport { createDateFormatterTool } from './tools/date-formatter.js';\nimport { createDateArithmeticTool } from './tools/date-arithmetic.js';\nimport { createDateDifferenceTool } from './tools/date-difference.js';\nimport { createDateComparisonTool } from './tools/date-comparison.js';\nimport type { DateTimeConfig } from './types.js';\n\n// Default tool instances\nexport const currentDateTime = createCurrentDateTimeTool();\nexport const dateFormatter = createDateFormatterTool();\nexport const dateArithmetic = createDateArithmeticTool();\nexport const dateDifference = createDateDifferenceTool();\nexport const dateComparison = createDateComparisonTool();\n\n// Tools array\nexport const dateTimeTools = [\n currentDateTime,\n dateFormatter,\n dateArithmetic,\n dateDifference,\n dateComparison,\n];\n\n/**\n * Create date/time tools with optional configuration\n */\nexport function createDateTimeTools(config: DateTimeConfig = {}) {\n return [\n createCurrentDateTimeTool(),\n createDateFormatterTool(),\n createDateArithmeticTool(),\n createDateDifferenceTool(),\n createDateComparisonTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createCurrentDateTimeTool } from './tools/current-date-time.js';\nexport { createDateFormatterTool } from './tools/date-formatter.js';\nexport { createDateArithmeticTool } from './tools/date-arithmetic.js';\nexport { createDateDifferenceTool } from './tools/date-difference.js';\nexport { createDateComparisonTool } from './tools/date-comparison.js';\n\n","/**\n * String Utility Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for string case converter tool\n */\nexport const StringCaseConverterSchema = z.object({\n text: z.string().describe('Text to convert'),\n targetCase: z.enum(['lowercase', 'uppercase', 'title', 'camel', 'snake', 'kebab', 'pascal']).describe('Target case format'),\n});\n\n/**\n * Schema for string trim tool\n */\nexport const StringTrimSchema = z.object({\n text: z.string().describe('Text to trim'),\n mode: z.enum(['both', 'start', 'end']).default('both').describe('Which side to trim'),\n characters: z.string().optional().describe('Optional custom characters to trim (default: whitespace)'),\n});\n\n/**\n * Schema for string replace tool\n */\nexport const StringReplaceSchema = z.object({\n text: z.string().describe('Text to search in'),\n search: z.string().describe('String or regex pattern to search for'),\n replace: z.string().describe('Replacement string'),\n global: z.boolean().default(true).describe('Replace all occurrences (true) or just the first (false)'),\n caseInsensitive: z.boolean().default(false).describe('Case-insensitive search'),\n});\n\n/**\n * Schema for string split tool\n */\nexport const StringSplitSchema = z.object({\n text: z.string().describe('Text to split'),\n delimiter: z.string().describe('Delimiter to split on (can be a regex pattern)'),\n limit: z.number().optional().describe('Maximum number of splits'),\n});\n\n/**\n * Schema for string join tool\n */\nexport const StringJoinSchema = z.object({\n parts: z.array(z.string().describe(\"String value\")).describe('Array of strings to join'),\n separator: z.string().default('').describe('Separator to use between parts'),\n});\n\n/**\n * Schema for string substring tool\n */\nexport const StringSubstringSchema = z.object({\n text: z.string().describe('Source text'),\n start: z.number().describe('Start position (0-based)'),\n end: z.number().optional().describe('End position (optional, defaults to end of string)'),\n});\n\n/**\n * Schema for string length tool\n */\nexport const StringLengthSchema = z.object({\n text: z.string().describe('Text to measure'),\n});\n\n/**\n * Configuration for string utility tools\n */\nexport interface StringUtilitiesConfig {\n // Future: Add configuration options if needed\n}\n\nexport type StringCaseConverterInput = z.infer<typeof StringCaseConverterSchema>;\nexport type StringTrimInput = z.infer<typeof StringTrimSchema>;\nexport type StringReplaceInput = z.infer<typeof StringReplaceSchema>;\nexport type StringSplitInput = z.infer<typeof StringSplitSchema>;\nexport type StringJoinInput = z.infer<typeof StringJoinSchema>;\nexport type StringSubstringInput = z.infer<typeof StringSubstringSchema>;\nexport type StringLengthInput = z.infer<typeof StringLengthSchema>;\n\n","/**\n * String Case Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringCaseConverterSchema } from '../types.js';\n\n/**\n * Create string case converter tool\n */\nexport function createStringCaseConverterTool() {\n return toolBuilder()\n .name('string-case-converter')\n .description('Convert string to different cases: lowercase, uppercase, title case, camel case, snake case, kebab case.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'case', 'convert', 'transform'])\n .schema(StringCaseConverterSchema)\n .implement(async (input) => {\n let result: string;\n \n switch (input.targetCase) {\n case 'lowercase':\n result = input.text.toLowerCase();\n break;\n case 'uppercase':\n result = input.text.toUpperCase();\n break;\n case 'title':\n result = input.text.toLowerCase().replace(/\\b\\w/g, (char) => char.toUpperCase());\n break;\n case 'camel':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase());\n break;\n case 'snake':\n result = input.text\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n break;\n case 'kebab':\n result = input.text\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n break;\n case 'pascal':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n break;\n default:\n result = input.text;\n }\n \n return {\n original: input.text,\n converted: result,\n targetCase: input.targetCase,\n };\n })\n .build();\n}\n\n","/**\n * String Trim Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringTrimSchema } from '../types.js';\n\n/**\n * Create string trim tool\n */\nexport function createStringTrimTool() {\n return toolBuilder()\n .name('string-trim')\n .description('Remove whitespace from the beginning and/or end of a string. Supports trim, trim start, and trim end.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'trim', 'whitespace'])\n .schema(StringTrimSchema)\n .implement(async (input) => {\n let result: string;\n \n if (input.characters) {\n const chars = input.characters.split('').map(c => c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const regex = input.mode === 'both' \n ? new RegExp(`^[${chars}]+|[${chars}]+$`, 'g')\n : input.mode === 'start'\n ? new RegExp(`^[${chars}]+`, 'g')\n : new RegExp(`[${chars}]+$`, 'g');\n result = input.text.replace(regex, '');\n } else {\n result = input.mode === 'both' \n ? input.text.trim()\n : input.mode === 'start'\n ? input.text.trimStart()\n : input.text.trimEnd();\n }\n \n return {\n original: input.text,\n trimmed: result,\n removed: input.text.length - result.length,\n };\n })\n .build();\n}\n\n","/**\n * String Replace Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringReplaceSchema } from '../types.js';\n\n/**\n * Create string replace tool\n */\nexport function createStringReplaceTool() {\n return toolBuilder()\n .name('string-replace')\n .description('Replace occurrences of a substring or pattern in a string. Supports regex patterns and global replacement.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'replace', 'substitute'])\n .schema(StringReplaceSchema)\n .implement(async (input) => {\n const flags = (input.global ? 'g' : '') + (input.caseInsensitive ? 'i' : '');\n const regex = new RegExp(input.search, flags);\n const result = input.text.replace(regex, input.replace);\n \n // Count replacements\n const matches = input.text.match(regex);\n const count = matches ? matches.length : 0;\n \n return {\n original: input.text,\n result,\n replacements: count,\n };\n })\n .build();\n}\n\n","/**\n * String Split Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringSplitSchema } from '../types.js';\n\n/**\n * Create string split tool\n */\nexport function createStringSplitTool() {\n return toolBuilder()\n .name('string-split')\n .description('Split a string into an array of substrings using a delimiter. Supports regex delimiters and limit.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'split', 'array'])\n .schema(StringSplitSchema)\n .implement(async (input) => {\n const parts = input.text.split(input.delimiter, input.limit);\n \n return {\n parts,\n count: parts.length,\n };\n })\n .build();\n}\n\n","/**\n * String Join Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringJoinSchema } from '../types.js';\n\n/**\n * Create string join tool\n */\nexport function createStringJoinTool() {\n return toolBuilder()\n .name('string-join')\n .description('Join an array of strings into a single string with a separator.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'join', 'array'])\n .schema(StringJoinSchema)\n .implement(async (input) => {\n const result = input.parts.join(input.separator);\n \n return {\n result,\n partCount: input.parts.length,\n length: result.length,\n };\n })\n .build();\n}\n\n","/**\n * String Substring Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringSubstringSchema } from '../types.js';\n\n/**\n * Create string substring tool\n */\nexport function createStringSubstringTool() {\n return toolBuilder()\n .name('string-substring')\n .description('Extract a substring from a string using start and end positions.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'substring', 'slice'])\n .schema(StringSubstringSchema)\n .implement(async (input) => {\n const result = input.text.substring(input.start, input.end);\n \n return {\n result,\n length: result.length,\n start: input.start,\n end: input.end ?? input.text.length,\n };\n })\n .build();\n}\n\n","/**\n * String Length Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringLengthSchema } from '../types.js';\n\n/**\n * Create string length tool\n */\nexport function createStringLengthTool() {\n return toolBuilder()\n .name('string-length')\n .description('Get the length of a string in characters, words, or lines.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'length', 'count'])\n .schema(StringLengthSchema)\n .implement(async (input) => {\n const words = input.text.trim().split(/\\s+/).filter(w => w.length > 0);\n const lines = input.text.split('\\n');\n \n return {\n characters: input.text.length,\n words: words.length,\n lines: lines.length,\n };\n })\n .build();\n}\n\n","/**\n * String Utility Tools\n * \n * Tools for string manipulation and transformation.\n */\n\nimport { createStringCaseConverterTool } from './tools/string-case-converter.js';\nimport { createStringTrimTool } from './tools/string-trim.js';\nimport { createStringReplaceTool } from './tools/string-replace.js';\nimport { createStringSplitTool } from './tools/string-split.js';\nimport { createStringJoinTool } from './tools/string-join.js';\nimport { createStringSubstringTool } from './tools/string-substring.js';\nimport { createStringLengthTool } from './tools/string-length.js';\nimport type { StringUtilitiesConfig } from './types.js';\n\n// Default tool instances\nexport const stringCaseConverter = createStringCaseConverterTool();\nexport const stringTrim = createStringTrimTool();\nexport const stringReplace = createStringReplaceTool();\nexport const stringSplit = createStringSplitTool();\nexport const stringJoin = createStringJoinTool();\nexport const stringSubstring = createStringSubstringTool();\nexport const stringLength = createStringLengthTool();\n\n// Tools array\nexport const stringUtilityTools = [\n stringCaseConverter,\n stringTrim,\n stringReplace,\n stringSplit,\n stringJoin,\n stringSubstring,\n stringLength,\n];\n\n/**\n * Create string utility tools with optional configuration\n */\nexport function createStringUtilityTools(config: StringUtilitiesConfig = {}) {\n return [\n createStringCaseConverterTool(),\n createStringTrimTool(),\n createStringReplaceTool(),\n createStringSplitTool(),\n createStringJoinTool(),\n createStringSubstringTool(),\n createStringLengthTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createStringCaseConverterTool } from './tools/string-case-converter.js';\nexport { createStringTrimTool } from './tools/string-trim.js';\nexport { createStringReplaceTool } from './tools/string-replace.js';\nexport { createStringSplitTool } from './tools/string-split.js';\nexport { createStringJoinTool } from './tools/string-join.js';\nexport { createStringSubstringTool } from './tools/string-substring.js';\nexport { createStringLengthTool } from './tools/string-length.js';\n\n","/**\n * Math Operations Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for calculator tool\n */\nexport const CalculatorSchema = z.object({\n operation: z.enum(['add', 'subtract', 'multiply', 'divide', 'power', 'modulo']).describe('Mathematical operation to perform'),\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n});\n\n/**\n * Schema for math functions tool\n */\nexport const MathFunctionsSchema = z.object({\n function: z.enum(['sqrt', 'abs', 'round', 'floor', 'ceil', 'sin', 'cos', 'tan', 'log', 'exp']).describe('Mathematical function to apply'),\n value: z.number().describe('Input value'),\n});\n\n/**\n * Schema for random number tool\n */\nexport const RandomNumberSchema = z.object({\n min: z.number().default(0).describe('Minimum value (inclusive)'),\n max: z.number().default(1).describe('Maximum value (exclusive for decimals, inclusive for integers)'),\n integer: z.boolean().default(false).describe('Generate an integer (true) or decimal (false)'),\n});\n\n/**\n * Schema for statistics tool\n */\nexport const StatisticsSchema = z.object({\n numbers: z.array(z.number().describe(\"Number value\")).describe('Array of numbers to analyze'),\n});\n\n/**\n * Configuration for math operations tools\n */\nexport interface MathOperationsConfig {\n // Future: Add configuration options if needed\n}\n\nexport type CalculatorInput = z.infer<typeof CalculatorSchema>;\nexport type MathFunctionsInput = z.infer<typeof MathFunctionsSchema>;\nexport type RandomNumberInput = z.infer<typeof RandomNumberSchema>;\nexport type StatisticsInput = z.infer<typeof StatisticsSchema>;\n\n","/**\n * Calculator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { CalculatorSchema } from '../types.js';\n\n/**\n * Create calculator tool\n */\nexport function createCalculatorTool() {\n return toolBuilder()\n .name('calculator')\n .description('Perform basic arithmetic operations: add, subtract, multiply, divide, power, modulo.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'calculator', 'arithmetic'])\n .schema(CalculatorSchema)\n .implement(async (input) => {\n let result: number;\n \n switch (input.operation) {\n case 'add':\n result = input.a + input.b;\n break;\n case 'subtract':\n result = input.a - input.b;\n break;\n case 'multiply':\n result = input.a * input.b;\n break;\n case 'divide':\n if (input.b === 0) {\n return {\n success: false,\n error: 'Division by zero',\n };\n }\n result = input.a / input.b;\n break;\n case 'power':\n result = Math.pow(input.a, input.b);\n break;\n case 'modulo':\n result = input.a % input.b;\n break;\n default:\n return {\n success: false,\n error: 'Unknown operation',\n };\n }\n \n return {\n success: true,\n result,\n operation: input.operation,\n a: input.a,\n b: input.b,\n };\n })\n .build();\n}\n\n","/**\n * Math Functions Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { MathFunctionsSchema } from '../types.js';\n\n/**\n * Create math functions tool\n */\nexport function createMathFunctionsTool() {\n return toolBuilder()\n .name('math-functions')\n .description('Apply mathematical functions: sqrt, abs, round, floor, ceil, sin, cos, tan, log, exp.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'functions', 'trigonometry'])\n .schema(MathFunctionsSchema)\n .implement(async (input) => {\n let result: number;\n \n try {\n switch (input.function) {\n case 'sqrt':\n result = Math.sqrt(input.value);\n break;\n case 'abs':\n result = Math.abs(input.value);\n break;\n case 'round':\n result = Math.round(input.value);\n break;\n case 'floor':\n result = Math.floor(input.value);\n break;\n case 'ceil':\n result = Math.ceil(input.value);\n break;\n case 'sin':\n result = Math.sin(input.value);\n break;\n case 'cos':\n result = Math.cos(input.value);\n break;\n case 'tan':\n result = Math.tan(input.value);\n break;\n case 'log':\n result = Math.log(input.value);\n break;\n case 'exp':\n result = Math.exp(input.value);\n break;\n default:\n return {\n success: false,\n error: 'Unknown function',\n };\n }\n \n if (isNaN(result) || !isFinite(result)) {\n return {\n success: false,\n error: 'Invalid result (NaN or Infinity)',\n };\n }\n \n return {\n success: true,\n result,\n function: input.function,\n input: input.value,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Math operation failed',\n };\n }\n })\n .build();\n}\n\n","/**\n * Random Number Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { RandomNumberSchema } from '../types.js';\n\n/**\n * Create random number tool\n */\nexport function createRandomNumberTool() {\n return toolBuilder()\n .name('random-number')\n .description('Generate a random number within a specified range. Supports integers and decimals.')\n .category(ToolCategory.UTILITY)\n .tags(['random', 'number', 'generator'])\n .schema(RandomNumberSchema)\n .implement(async (input) => {\n const min = input.min ?? 0;\n const max = input.max ?? 1;\n const integer = input.integer ?? false;\n\n let result: number;\n\n if (integer) {\n result = Math.floor(Math.random() * (max - min + 1)) + min;\n } else {\n result = Math.random() * (max - min) + min;\n }\n\n return {\n result,\n min,\n max,\n integer,\n };\n })\n .build();\n}\n\n","/**\n * Statistics Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StatisticsSchema } from '../types.js';\n\n/**\n * Create statistics tool\n */\nexport function createStatisticsTool() {\n return toolBuilder()\n .name('statistics')\n .description('Calculate statistics for an array of numbers: sum, average, min, max, median, standard deviation.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'statistics', 'average', 'sum'])\n .schema(StatisticsSchema)\n .implement(async (input) => {\n if (input.numbers.length === 0) {\n return {\n success: false,\n error: 'Empty array',\n };\n }\n \n const sorted = [...input.numbers].sort((a, b) => a - b);\n const sum = input.numbers.reduce((acc, n) => acc + n, 0);\n const average = sum / input.numbers.length;\n const min = sorted[0];\n const max = sorted[sorted.length - 1];\n \n // Median\n const mid = Math.floor(sorted.length / 2);\n const median = sorted.length % 2 === 0\n ? (sorted[mid - 1] + sorted[mid]) / 2\n : sorted[mid];\n \n // Standard deviation\n const variance = input.numbers.reduce((acc, n) => acc + Math.pow(n - average, 2), 0) / input.numbers.length;\n const stdDev = Math.sqrt(variance);\n \n return {\n success: true,\n count: input.numbers.length,\n sum,\n average,\n min,\n max,\n median,\n standardDeviation: stdDev,\n variance,\n };\n })\n .build();\n}\n\n","/**\n * Math Operations Tools\n * \n * Tools for mathematical calculations and operations.\n */\n\nimport { createCalculatorTool } from './tools/calculator.js';\nimport { createMathFunctionsTool } from './tools/math-functions.js';\nimport { createRandomNumberTool } from './tools/random-number.js';\nimport { createStatisticsTool } from './tools/statistics.js';\nimport type { MathOperationsConfig } from './types.js';\n\n// Default tool instances\nexport const calculator = createCalculatorTool();\nexport const mathFunctions = createMathFunctionsTool();\nexport const randomNumber = createRandomNumberTool();\nexport const statistics = createStatisticsTool();\n\n// Tools array\nexport const mathOperationTools = [\n calculator,\n mathFunctions,\n randomNumber,\n statistics,\n];\n\n/**\n * Create math operation tools with optional configuration\n */\nexport function createMathOperationTools(config: MathOperationsConfig = {}) {\n return [\n createCalculatorTool(),\n createMathFunctionsTool(),\n createRandomNumberTool(),\n createStatisticsTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createCalculatorTool } from './tools/calculator.js';\nexport { createMathFunctionsTool } from './tools/math-functions.js';\nexport { createRandomNumberTool } from './tools/random-number.js';\nexport { createStatisticsTool } from './tools/statistics.js';\n\n","/**\n * Validation Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for email validator tool\n */\nexport const EmailValidatorSchema = z.object({\n email: z.string().describe('Email address to validate'),\n});\n\n/**\n * Schema for URL validator tool\n */\nexport const UrlValidatorSimpleSchema = z.object({\n url: z.string().describe('URL to validate'),\n});\n\n/**\n * Schema for phone validator tool\n */\nexport const PhoneValidatorSchema = z.object({\n phone: z.string().describe('Phone number to validate'),\n strict: z.boolean().default(false).describe('Use strict validation (requires country code)'),\n});\n\n/**\n * Schema for credit card validator tool\n */\nexport const CreditCardValidatorSchema = z.object({\n cardNumber: z.string().describe('Credit card number to validate'),\n});\n\n/**\n * Schema for IP validator tool\n */\nexport const IpValidatorSchema = z.object({\n ip: z.string().describe('IP address to validate'),\n version: z.enum(['v4', 'v6', 'any']).default('any').describe('IP version to validate against'),\n});\n\n/**\n * Schema for UUID validator tool\n */\nexport const UuidValidatorSchema = z.object({\n uuid: z.string().describe('UUID to validate'),\n});\n\n/**\n * Configuration for validation tools\n */\nexport interface ValidationConfig {\n // Future: Add configuration options if needed\n}\n\nexport type EmailValidatorInput = z.infer<typeof EmailValidatorSchema>;\nexport type UrlValidatorSimpleInput = z.infer<typeof UrlValidatorSimpleSchema>;\nexport type PhoneValidatorInput = z.infer<typeof PhoneValidatorSchema>;\nexport type CreditCardValidatorInput = z.infer<typeof CreditCardValidatorSchema>;\nexport type IpValidatorInput = z.infer<typeof IpValidatorSchema>;\nexport type UuidValidatorInput = z.infer<typeof UuidValidatorSchema>;\n\n","/**\n * Email Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { EmailValidatorSchema } from '../types.js';\n\n/**\n * Create email validator tool\n */\nexport function createEmailValidatorTool() {\n return toolBuilder()\n .name('email-validator')\n .description('Validate if a string is a valid email address format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'email', 'validate'])\n .schema(EmailValidatorSchema)\n .implement(async (input) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const valid = emailRegex.test(input.email);\n \n return {\n valid,\n email: input.email,\n message: valid ? 'Valid email address' : 'Invalid email address format',\n };\n })\n .build();\n}\n\n","/**\n * URL Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { UrlValidatorSimpleSchema } from '../types.js';\n\n/**\n * Create URL validator tool\n */\nexport function createUrlValidatorSimpleTool() {\n return toolBuilder()\n .name('url-validator-simple')\n .description('Validate if a string is a valid URL format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'url', 'validate'])\n .schema(UrlValidatorSimpleSchema)\n .implement(async (input) => {\n try {\n new URL(input.url);\n return {\n valid: true,\n url: input.url,\n message: 'Valid URL',\n };\n } catch {\n return {\n valid: false,\n url: input.url,\n message: 'Invalid URL format',\n };\n }\n })\n .build();\n}\n\n","/**\n * Phone Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { PhoneValidatorSchema } from '../types.js';\n\n/**\n * Create phone validator tool\n */\nexport function createPhoneValidatorTool() {\n return toolBuilder()\n .name('phone-validator')\n .description('Validate if a string is a valid phone number format. Supports various international formats.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'phone', 'validate'])\n .schema(PhoneValidatorSchema)\n .implement(async (input) => {\n // Basic phone validation - matches common formats\n // eslint-disable-next-line no-useless-escape\n const basicRegex = /^[\\d\\s\\-\\+\\(\\)]+$/;\n const strictRegex = /^\\+?[1-9]\\d{1,14}$/; // E.164 format\n \n const regex = input.strict ? strictRegex : basicRegex;\n const valid = regex.test(input.phone.replace(/\\s/g, ''));\n \n return {\n valid,\n phone: input.phone,\n message: valid ? 'Valid phone number format' : 'Invalid phone number format',\n };\n })\n .build();\n}\n\n","/**\n * Credit Card Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { CreditCardValidatorSchema } from '../types.js';\n\n/**\n * Create credit card validator tool\n */\nexport function createCreditCardValidatorTool() {\n return toolBuilder()\n .name('credit-card-validator')\n .description('Validate if a string is a valid credit card number using the Luhn algorithm.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'credit-card', 'validate', 'luhn'])\n .schema(CreditCardValidatorSchema)\n .implement(async (input) => {\n // Remove spaces and dashes\n // eslint-disable-next-line no-useless-escape\n const cleaned = input.cardNumber.replace(/[\\s\\-]/g, '');\n \n // Check if it's all digits\n if (!/^\\d+$/.test(cleaned)) {\n return {\n valid: false,\n message: 'Card number must contain only digits',\n };\n }\n \n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n \n for (let i = cleaned.length - 1; i >= 0; i--) {\n let digit = parseInt(cleaned[i], 10);\n \n if (isEven) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n \n sum += digit;\n isEven = !isEven;\n }\n \n const valid = sum % 10 === 0;\n \n return {\n valid,\n cardNumber: input.cardNumber,\n message: valid ? 'Valid credit card number' : 'Invalid credit card number (failed Luhn check)',\n };\n })\n .build();\n}\n\n","/**\n * IP Address Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { IpValidatorSchema } from '../types.js';\n\n/**\n * Create IP validator tool\n */\nexport function createIpValidatorTool() {\n return toolBuilder()\n .name('ip-validator')\n .description('Validate if a string is a valid IPv4 or IPv6 address.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'ip', 'validate', 'network'])\n .schema(IpValidatorSchema)\n .implement(async (input) => {\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\n \n let valid = false;\n let detectedVersion: string | undefined;\n \n if (input.version === 'v4' || input.version === 'any') {\n if (ipv4Regex.test(input.ip)) {\n // Additional check for valid ranges (0-255)\n const parts = input.ip.split('.');\n valid = parts.every(part => {\n const num = parseInt(part, 10);\n return num >= 0 && num <= 255;\n });\n if (valid) detectedVersion = 'IPv4';\n }\n }\n \n if (!valid && (input.version === 'v6' || input.version === 'any')) {\n if (ipv6Regex.test(input.ip)) {\n valid = true;\n detectedVersion = 'IPv6';\n }\n }\n \n return {\n valid,\n ip: input.ip,\n version: detectedVersion,\n message: valid ? `Valid ${detectedVersion} address` : 'Invalid IP address format',\n };\n })\n .build();\n}\n\n","/**\n * UUID Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { UuidValidatorSchema } from '../types.js';\n\n/**\n * Create UUID validator tool\n */\nexport function createUuidValidatorTool() {\n return toolBuilder()\n .name('uuid-validator')\n .description('Validate if a string is a valid UUID (v1, v3, v4, or v5).')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'uuid', 'validate', 'guid'])\n .schema(UuidValidatorSchema)\n .implement(async (input) => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n const valid = uuidRegex.test(input.uuid);\n \n let version: number | undefined;\n if (valid) {\n version = parseInt(input.uuid[14], 10);\n }\n \n return {\n valid,\n uuid: input.uuid,\n version,\n message: valid ? `Valid UUID v${version}` : 'Invalid UUID format',\n };\n })\n .build();\n}\n\n","/**\n * Validation Utility Tools\n * \n * Tools for validating data formats and types.\n */\n\nimport { createEmailValidatorTool } from './tools/email-validator.js';\nimport { createUrlValidatorSimpleTool } from './tools/url-validator-simple.js';\nimport { createPhoneValidatorTool } from './tools/phone-validator.js';\nimport { createCreditCardValidatorTool } from './tools/credit-card-validator.js';\nimport { createIpValidatorTool } from './tools/ip-validator.js';\nimport { createUuidValidatorTool } from './tools/uuid-validator.js';\nimport type { ValidationConfig } from './types.js';\n\n// Default tool instances\nexport const emailValidator = createEmailValidatorTool();\nexport const urlValidatorSimple = createUrlValidatorSimpleTool();\nexport const phoneValidator = createPhoneValidatorTool();\nexport const creditCardValidator = createCreditCardValidatorTool();\nexport const ipValidator = createIpValidatorTool();\nexport const uuidValidator = createUuidValidatorTool();\n\n// Tools array\nexport const validationTools = [\n emailValidator,\n urlValidatorSimple,\n phoneValidator,\n creditCardValidator,\n ipValidator,\n uuidValidator,\n];\n\n/**\n * Create validation tools with optional configuration\n */\nexport function createValidationTools(config: ValidationConfig = {}) {\n return [\n createEmailValidatorTool(),\n createUrlValidatorSimpleTool(),\n createPhoneValidatorTool(),\n createCreditCardValidatorTool(),\n createIpValidatorTool(),\n createUuidValidatorTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createEmailValidatorTool } from './tools/email-validator.js';\nexport { createUrlValidatorSimpleTool } from './tools/url-validator-simple.js';\nexport { createPhoneValidatorTool } from './tools/phone-validator.js';\nexport { createCreditCardValidatorTool } from './tools/credit-card-validator.js';\nexport { createIpValidatorTool } from './tools/ip-validator.js';\nexport { createUuidValidatorTool } from './tools/uuid-validator.js';\n\n","/**\n * Types for askHuman tool and human-in-the-loop workflows\n * @module tools/agent/ask-human/types\n */\n\nimport { z } from 'zod';\nimport type { HumanRequest, HumanRequestPriority, HumanRequestStatus } from '@agentforge/core';\n\n/**\n * Input schema for askHuman tool\n */\nexport const AskHumanInputSchema = z.object({\n /**\n * The question to ask the human\n */\n question: z.string().min(1).describe('The question to ask the human'),\n\n /**\n * Optional context to help the human understand the question\n */\n context: z.record(z.any()).optional().describe('Additional context for the question'),\n\n /**\n * Priority level for this request\n */\n priority: z.enum(['low', 'normal', 'high', 'critical']).default('normal').describe('Priority level for this request'),\n\n /**\n * Timeout in milliseconds (0 = no timeout)\n */\n timeout: z.number().min(0).default(0).describe('Timeout in milliseconds (0 = no timeout)'),\n\n /**\n * Default response if timeout occurs\n */\n defaultResponse: z.string().optional().describe('Default response if timeout occurs'),\n\n /**\n * Suggested responses (for UI to show as options)\n */\n suggestions: z.array(z.string()).optional().describe('Suggested responses for the human'),\n});\n\n/**\n * Input type for askHuman tool\n */\nexport type AskHumanInput = z.infer<typeof AskHumanInputSchema>;\n\n/**\n * Output from askHuman tool\n */\nexport interface AskHumanOutput {\n /**\n * The human's response\n */\n response: string;\n\n /**\n * Metadata about the interaction\n */\n metadata: {\n /**\n * Unique ID for this request\n */\n requestId: string;\n\n /**\n * When the request was created\n */\n requestedAt: number;\n\n /**\n * When the response was received\n */\n respondedAt: number;\n\n /**\n * How long it took to get a response (ms)\n */\n duration: number;\n\n /**\n * Whether this was a timeout response\n */\n timedOut: boolean;\n\n /**\n * Priority level\n */\n priority: HumanRequestPriority;\n };\n}\n\n// HumanRequest, HumanRequestPriority, and HumanRequestStatus are now imported from @agentforge/core\n// They are defined in packages/core/src/langgraph/interrupts/types.ts\n\n","/**\n * askHuman tool implementation\n * @module tools/agent/ask-human/tool\n */\n\nimport { toolBuilder, ToolCategory, createLogger, LogLevel } from '@agentforge/core';\nimport { AskHumanInputSchema, type AskHumanInput, type AskHumanOutput } from './types.js';\nimport { randomUUID } from 'crypto';\n\n// Create logger for askHuman tool\n// Log level can be controlled via LOG_LEVEL environment variable\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('askHuman', { level: logLevel });\n\n/**\n * Create the askHuman tool\n * \n * This tool enables human-in-the-loop workflows by pausing agent execution\n * and waiting for human input. It uses LangGraph's interrupt mechanism.\n * \n * @example\n * ```typescript\n * import { createAskHumanTool } from '@agentforge/tools';\n *\n * const askHuman = createAskHumanTool();\n *\n * // In your agent\n * const tools = [askHuman, ...otherTools];\n *\n * // The agent can call this tool to ask for human input\n * // When called, it will pause execution and wait for a response\n * ```\n * \n * @returns The askHuman tool\n */\nexport function createAskHumanTool() {\n return toolBuilder()\n .name('ask-human')\n .description(\n 'Ask a human for input or approval. Use this when you need human guidance, ' +\n 'approval for a critical action, or clarification on ambiguous requirements. ' +\n 'The agent execution will pause until the human responds.'\n )\n .category(ToolCategory.UTILITY)\n .schema(AskHumanInputSchema)\n .implement(async (input): Promise<AskHumanOutput> => {\n // Type assertion after Zod validation\n const validatedInput = input as AskHumanInput;\n const requestId = randomUUID();\n const requestedAt = Date.now();\n\n // Import interrupt dynamically to avoid circular dependencies\n // and to allow this tool to work even if LangGraph is not installed\n let interrupt: ((value: any) => any) | undefined;\n \n try {\n const langgraph = await import('@langchain/langgraph');\n interrupt = (langgraph as any).interrupt;\n } catch (error) {\n throw new Error(\n 'askHuman tool requires @langchain/langgraph to be installed. ' +\n 'Install it with: npm install @langchain/langgraph'\n );\n }\n\n if (!interrupt) {\n throw new Error(\n 'interrupt function not found in @langchain/langgraph. ' +\n 'Make sure you are using a compatible version of LangGraph.'\n );\n }\n\n // Create the human request object\n const humanRequest = {\n id: requestId,\n question: validatedInput.question,\n context: validatedInput.context,\n priority: validatedInput.priority,\n createdAt: requestedAt,\n timeout: validatedInput.timeout,\n defaultResponse: validatedInput.defaultResponse,\n suggestions: validatedInput.suggestions,\n status: 'pending' as const,\n };\n\n // Use LangGraph's interrupt to pause execution\n // This will save the request to the checkpoint and pause the graph\n // The application can then resume with the human's response\n logger.debug('About to call interrupt()', { humanRequest });\n\n let response;\n try {\n response = interrupt(humanRequest);\n logger.debug('interrupt() returned successfully', { response, responseType: typeof response });\n } catch (error) {\n logger.debug('interrupt() threw error (expected for GraphInterrupt)', {\n errorType: error?.constructor?.name,\n error: error instanceof Error ? error.message : String(error)\n });\n throw error; // Re-throw to let the node handle it\n }\n\n const respondedAt = Date.now();\n const duration = respondedAt - requestedAt;\n\n // Check if we got a timeout response\n const timedOut = validatedInput.timeout > 0 && duration >= validatedInput.timeout;\n\n // If timeout occurred and we have a default response, use it\n const finalResponse = timedOut && validatedInput.defaultResponse\n ? validatedInput.defaultResponse\n : (response || '');\n\n return {\n response: finalResponse,\n metadata: {\n requestId,\n requestedAt,\n respondedAt,\n duration,\n timedOut,\n priority: validatedInput.priority,\n },\n };\n })\n .build();\n}\n\n/**\n * Default instance of the askHuman tool\n * \n * @example\n * ```typescript\n * import { askHumanTool } from '@agentforge/core';\n * \n * const agent = createReActAgent({\n * llm,\n * tools: [askHumanTool, ...otherTools],\n * });\n * ```\n */\nexport const askHumanTool = createAskHumanTool();\n\n"]}
1
+ {"version":3,"sources":["../src/web/http/types.ts","../src/web/http/tools/http-client.ts","../src/web/http/tools/http-get.ts","../src/web/http/tools/http-post.ts","../src/web/http/index.ts","../src/web/scraper/types.ts","../src/web/scraper/tools/web-scraper.ts","../src/web/scraper/index.ts","../src/web/html-parser/types.ts","../src/web/html-parser/tools/html-parser.ts","../src/web/html-parser/tools/extract-links.ts","../src/web/html-parser/tools/extract-images.ts","../src/web/html-parser/index.ts","../src/web/url-validator/types.ts","../src/web/url-validator/tools/url-validator.ts","../src/web/url-validator/tools/url-builder.ts","../src/web/url-validator/tools/url-query-parser.ts","../src/web/url-validator/index.ts","../src/web/web-search/schemas.ts","../src/web/web-search/utils.ts","../src/web/web-search/providers/duckduckgo.ts","../src/web/web-search/providers/serper.ts","../src/web/web-search/index.ts","../src/web/slack/auth.ts","../src/web/slack/tools/send-slack-message.ts","../src/web/slack/tools/notify-slack.ts","../src/web/slack/tools/get-slack-channels.ts","../src/web/slack/tools/get-slack-messages.ts","../src/web/slack/index.ts","../src/web/confluence/auth.ts","../src/web/confluence/tools/search-confluence.ts","../src/web/confluence/tools/get-confluence-page.ts","../src/web/confluence/tools/list-confluence-spaces.ts","../src/web/confluence/tools/get-space-pages.ts","../src/web/confluence/tools/create-confluence-page.ts","../src/web/confluence/tools/update-confluence-page.ts","../src/web/confluence/tools/archive-confluence-page.ts","../src/web/confluence/index.ts","../src/data/csv/types.ts","../src/data/csv/tools/csv-parser.ts","../src/data/csv/tools/csv-generator.ts","../src/data/csv/tools/csv-to-json.ts","../src/data/csv/tools/json-to-csv.ts","../src/data/csv/index.ts","../src/data/json/types.ts","../src/data/json/tools/json-parser.ts","../src/data/json/tools/json-stringify.ts","../src/data/json/tools/json-query.ts","../src/data/json/tools/json-validator.ts","../src/data/json/tools/json-merge.ts","../src/data/json/index.ts","../src/data/xml/types.ts","../src/data/xml/tools/xml-parser.ts","../src/data/xml/tools/xml-generator.ts","../src/data/xml/tools/xml-to-json.ts","../src/data/xml/tools/json-to-xml.ts","../src/data/xml/index.ts","../src/data/transformer/types.ts","../src/data/transformer/tools/array-filter.ts","../src/data/transformer/tools/array-map.ts","../src/data/transformer/tools/array-sort.ts","../src/data/transformer/tools/array-group-by.ts","../src/data/transformer/tools/object-pick.ts","../src/data/transformer/tools/object-omit.ts","../src/data/transformer/index.ts","../src/data/neo4j/types.ts","../src/data/neo4j/connection.ts","../src/data/neo4j/embeddings/utils.ts","../src/data/neo4j/embeddings/providers/openai.ts","../src/data/neo4j/embeddings/providers/cohere.ts","../src/data/neo4j/embeddings/providers/huggingface.ts","../src/data/neo4j/embeddings/providers/voyage.ts","../src/data/neo4j/embeddings/providers/ollama.ts","../src/data/neo4j/embeddings/embedding-manager.ts","../src/data/neo4j/utils/result-formatter.ts","../src/data/neo4j/tools/neo4j-query.ts","../src/data/neo4j/tools/neo4j-get-schema.ts","../src/data/neo4j/utils/cypher-sanitizer.ts","../src/data/neo4j/tools/neo4j-find-nodes.ts","../src/data/neo4j/tools/neo4j-traverse.ts","../src/data/neo4j/tools/neo4j-vector-search.ts","../src/data/neo4j/tools/neo4j-vector-search-with-embedding.ts","../src/data/neo4j/tools/neo4j-create-node-with-embedding.ts","../src/data/neo4j/index.ts","../src/file/operations/types.ts","../src/file/operations/tools/file-reader.ts","../src/file/operations/tools/file-writer.ts","../src/file/operations/tools/file-append.ts","../src/file/operations/tools/file-delete.ts","../src/file/operations/tools/file-exists.ts","../src/file/operations/index.ts","../src/file/directory/types.ts","../src/file/directory/tools/directory-list.ts","../src/file/directory/tools/directory-create.ts","../src/file/directory/tools/directory-delete.ts","../src/file/directory/tools/file-search.ts","../src/file/directory/index.ts","../src/file/path/types.ts","../src/file/path/tools/path-join.ts","../src/file/path/tools/path-resolve.ts","../src/file/path/tools/path-parse.ts","../src/file/path/tools/path-basename.ts","../src/file/path/tools/path-dirname.ts","../src/file/path/tools/path-extension.ts","../src/file/path/tools/path-relative.ts","../src/file/path/tools/path-normalize.ts","../src/file/path/index.ts","../src/utility/date-time/types.ts","../src/utility/date-time/tools/current-date-time.ts","../src/utility/date-time/tools/date-formatter.ts","../src/utility/date-time/tools/date-arithmetic.ts","../src/utility/date-time/tools/date-difference.ts","../src/utility/date-time/tools/date-comparison.ts","../src/utility/date-time/index.ts","../src/utility/string/types.ts","../src/utility/string/tools/string-case-converter.ts","../src/utility/string/tools/string-trim.ts","../src/utility/string/tools/string-replace.ts","../src/utility/string/tools/string-split.ts","../src/utility/string/tools/string-join.ts","../src/utility/string/tools/string-substring.ts","../src/utility/string/tools/string-length.ts","../src/utility/string/index.ts","../src/utility/math/types.ts","../src/utility/math/tools/calculator.ts","../src/utility/math/tools/math-functions.ts","../src/utility/math/tools/random-number.ts","../src/utility/math/tools/statistics.ts","../src/utility/math/index.ts","../src/utility/validation/types.ts","../src/utility/validation/tools/email-validator.ts","../src/utility/validation/tools/url-validator-simple.ts","../src/utility/validation/tools/phone-validator.ts","../src/utility/validation/tools/credit-card-validator.ts","../src/utility/validation/tools/ip-validator.ts","../src/utility/validation/tools/uuid-validator.ts","../src/utility/validation/index.ts","../src/agent/ask-human/types.ts","../src/agent/ask-human/tool.ts"],"names":["axios","toolBuilder","ToolCategory","z","cheerio2","cheerio3","cheerio4","resolve","logger","auth","getAuthHeader","logLevel","LogLevel","createLogger","searchConfluence","getConfluencePage","listConfluenceSpaces","getSpacePages","createConfluencePage","updateConfluencePage","archiveConfluencePage","parse","stringify","format","XMLParser","XMLBuilder","path","DEFAULT_RETRY_CONFIG","isRetryableError","sleep","retryWithBackoff","fs","recursive","files","path2","matches","path3","path4","path5","path6","basename","dirname","path8","path9","relative","path10","path11","isValid"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * HTTP Tools Types\n * \n * Type definitions for HTTP client tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * HTTP method enum\n */\nexport const HttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n/**\n * HTTP request schema\n */\nexport const httpRequestSchema = z.object({\n url: z.string().url().describe('The URL to make the request to'),\n method: HttpMethod.default('GET').describe('HTTP method to use'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n body: z.any().optional().describe('Optional request body (for POST, PUT, PATCH)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP response type\n */\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n url: string;\n method: string;\n}\n\n/**\n * HTTP GET request schema\n */\nexport const httpGetSchema = z.object({\n url: z.string().url().describe('The URL to fetch'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP POST request schema\n */\nexport const httpPostSchema = z.object({\n url: z.string().url().describe('The URL to post to'),\n body: z.any().describe('The request body (will be sent as JSON)'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n});\n\n/**\n * HTTP tools configuration\n */\nexport interface HttpToolsConfig {\n defaultTimeout?: number;\n defaultHeaders?: Record<string, string>;\n}\n\n","/**\n * HTTP Client Tool\n * \n * Make HTTP requests with support for GET, POST, PUT, DELETE, PATCH methods.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { httpRequestSchema, HttpResponse } from '../types.js';\n\n/**\n * Create HTTP client tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n * \n * @example\n * ```ts\n * const result = await httpClient.execute({\n * url: 'https://api.example.com/data',\n * method: 'GET',\n * headers: { 'Authorization': 'Bearer token' }\n * });\n * ```\n */\nexport function createHttpClientTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-client')\n .description('Make HTTP requests to web APIs and services. Supports GET, POST, PUT, DELETE, PATCH methods with custom headers and body.')\n .category(ToolCategory.WEB)\n .tags(['http', 'api', 'request', 'web'])\n .schema(httpRequestSchema)\n .implement(async (input): Promise<HttpResponse> => {\n const config: AxiosRequestConfig = {\n method: input.method,\n url: input.url,\n headers: { ...defaultHeaders, ...input.headers },\n data: input.body,\n timeout: input.timeout ?? defaultTimeout,\n params: input.params,\n validateStatus: () => true, // Don't throw on any status code\n };\n\n const response = await axios(config);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers as Record<string, string>,\n data: response.data,\n url: input.url,\n method: input.method ?? 'GET',\n };\n })\n .build();\n}\n\n","/**\n * HTTP GET Tool\n * \n * Make simple HTTP GET requests.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport { httpGetSchema } from '../types.js';\n\n/**\n * Create HTTP GET tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n */\nexport function createHttpGetTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-get')\n .description('Make a simple HTTP GET request to a URL and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'get', 'fetch', 'web'])\n .schema(httpGetSchema)\n .implement(async (input) => {\n const response = await axios.get(input.url, {\n headers: { ...defaultHeaders, ...input.headers },\n params: input.params,\n timeout: defaultTimeout,\n });\n return response.data;\n })\n .build();\n}\n\n","/**\n * HTTP POST Tool\n * \n * Make simple HTTP POST requests with JSON body.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport { httpPostSchema } from '../types.js';\n\n/**\n * Create HTTP POST tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param defaultHeaders - Default headers to include in all requests\n */\nexport function createHttpPostTool(\n defaultTimeout: number = 30000,\n defaultHeaders: Record<string, string> = {}\n) {\n return toolBuilder()\n .name('http-post')\n .description('Make a simple HTTP POST request with JSON body and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'post', 'api', 'web'])\n .schema(httpPostSchema)\n .implement(async (input) => {\n const response = await axios.post(input.url, input.body, {\n headers: {\n 'Content-Type': 'application/json',\n ...defaultHeaders,\n ...input.headers,\n },\n timeout: defaultTimeout,\n });\n return response.data;\n })\n .build();\n}\n\n","/**\n * HTTP Tools\n * \n * Tools for making HTTP requests to web APIs and services.\n */\n\nimport { createHttpClientTool } from './tools/http-client.js';\nimport { createHttpGetTool } from './tools/http-get.js';\nimport { createHttpPostTool } from './tools/http-post.js';\nimport type { HttpToolsConfig } from './types.js';\n\n// Export types\nexport * from './types.js';\n\n// Default tool instances\nexport const httpClient = createHttpClientTool();\nexport const httpGet = createHttpGetTool();\nexport const httpPost = createHttpPostTool();\n\n// Tools array\nexport const httpTools = [httpClient, httpGet, httpPost];\n\n/**\n * Create HTTP tools with custom configuration\n * \n * @param config - Configuration options for HTTP tools\n * @returns Array of configured HTTP tools\n * \n * @example\n * ```ts\n * const tools = createHttpTools({\n * defaultTimeout: 60000,\n * defaultHeaders: { 'User-Agent': 'MyApp/1.0' }\n * });\n * ```\n */\nexport function createHttpTools(config: HttpToolsConfig = {}) {\n const { defaultTimeout = 30000, defaultHeaders = {} } = config;\n\n return [\n createHttpClientTool(defaultTimeout, defaultHeaders),\n createHttpGetTool(defaultTimeout, defaultHeaders),\n createHttpPostTool(defaultTimeout, defaultHeaders),\n ];\n}\n\n","/**\n * Web Scraper Types\n * \n * Type definitions for web scraping tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Scraper result type\n */\nexport interface ScraperResult {\n url: string;\n title?: string;\n text?: string;\n html?: string;\n links?: string[];\n images?: string[];\n metadata?: Record<string, string>;\n selected?: any;\n}\n\n/**\n * Scraper tools configuration\n */\nexport interface ScraperToolsConfig {\n defaultTimeout?: number;\n userAgent?: string;\n}\n\n/**\n * Web scraper input schema\n */\nexport const webScraperSchema = z.object({\n url: z.string().url().describe('The URL of the web page to scrape'),\n selector: z.string().optional().describe('Optional CSS selector to extract specific elements'),\n extractText: z.boolean().default(true).describe('Extract text content from the page'),\n extractHtml: z.boolean().default(false).describe('Extract raw HTML content'),\n extractLinks: z.boolean().default(false).describe('Extract all links from the page'),\n extractImages: z.boolean().default(false).describe('Extract all image URLs from the page'),\n extractMetadata: z.boolean().default(false).describe('Extract meta tags (title, description, etc.)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n});\n\n","/**\n * Web Scraper Tool\n * \n * Scrape and extract data from web pages using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport axios from 'axios';\nimport * as cheerio from 'cheerio';\nimport { webScraperSchema, type ScraperResult } from '../types.js';\n\n/**\n * Create a web scraper tool\n * \n * @param defaultTimeout - Default timeout in milliseconds\n * @param userAgent - User agent string for requests\n * @returns Web scraper tool\n * \n * @example\n * ```ts\n * const scraper = createWebScraperTool(60000, 'MyBot/1.0');\n * const result = await scraper.execute({\n * url: 'https://example.com',\n * selector: 'article h1',\n * extractText: true\n * });\n * ```\n */\nexport function createWebScraperTool(\n defaultTimeout: number = 30000,\n userAgent: string = 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)'\n) {\n return toolBuilder()\n .name('web-scraper')\n .description('Scrape and extract data from web pages. Can extract text, HTML, links, images, and use CSS selectors to target specific elements.')\n .category(ToolCategory.WEB)\n .tags(['scraper', 'web', 'html', 'extract', 'parse'])\n .schema(webScraperSchema)\n .implement(async (input): Promise<ScraperResult> => {\n // Fetch the page\n const response = await axios.get(input.url, {\n timeout: input.timeout || defaultTimeout,\n headers: {\n 'User-Agent': userAgent,\n },\n });\n\n const html = response.data;\n const $ = cheerio.load(html);\n\n const result: ScraperResult = {\n url: input.url,\n };\n\n // Apply selector if provided\n const $selected = input.selector ? $(input.selector) : $('body');\n\n // Extract text\n if (input.extractText) {\n result.text = $selected.text().trim();\n }\n\n // Extract HTML\n if (input.extractHtml) {\n result.html = $selected.html() || '';\n }\n\n // Extract links\n if (input.extractLinks) {\n result.links = [];\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href');\n if (href) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(href, input.url).href;\n result.links!.push(absoluteUrl);\n } catch {\n result.links!.push(href);\n }\n }\n });\n }\n\n // Extract images\n if (input.extractImages) {\n result.images = [];\n $('img[src]').each((_, el) => {\n const src = $(el).attr('src');\n if (src) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(src, input.url).href;\n result.images!.push(absoluteUrl);\n } catch {\n result.images!.push(src);\n }\n }\n });\n }\n\n // Extract metadata\n if (input.extractMetadata) {\n result.metadata = {};\n \n // Title\n const title = $('title').text() || $('meta[property=\"og:title\"]').attr('content');\n if (title) result.metadata.title = title;\n\n // Description\n const description = $('meta[name=\"description\"]').attr('content') || \n $('meta[property=\"og:description\"]').attr('content');\n if (description) result.metadata.description = description;\n\n // Other meta tags\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) {\n result.metadata![name] = content;\n }\n });\n }\n\n // If selector was provided, return the selected elements\n if (input.selector) {\n result.selected = $selected.map((_, el) => ({\n text: $(el).text().trim(),\n html: $(el).html(),\n })).get();\n }\n\n return result;\n })\n .build();\n}\n\n","/**\n * Web Scraper Tools\n * \n * Tools for scraping and extracting data from web pages.\n */\n\n// Export types\nexport type { ScraperResult, ScraperToolsConfig } from './types.js';\nexport { webScraperSchema } from './types.js';\n\n// Export tool factory\nexport { createWebScraperTool } from './tools/web-scraper.js';\nimport { createWebScraperTool } from './tools/web-scraper.js';\n\n// Default tool instance\nexport const webScraper = createWebScraperTool();\n\n// Tools array\nexport const scraperTools = [webScraper];\n\n/**\n * Create scraper tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of scraper tools\n * \n * @example\n * ```ts\n * const tools = createScraperTools({\n * defaultTimeout: 60000,\n * userAgent: 'MyBot/1.0'\n * });\n * ```\n */\nexport function createScraperTools(config: import('./types.js').ScraperToolsConfig = {}) {\n const { defaultTimeout = 30000, userAgent = 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)' } = config;\n return [createWebScraperTool(defaultTimeout, userAgent)];\n}\n\n","/**\n * HTML Parser Types\n * \n * Type definitions for HTML parsing tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * HTML parser tools configuration\n */\nexport interface HtmlParserToolsConfig {\n // No specific config needed for HTML parser tools currently\n}\n\n/**\n * HTML parser input schema\n */\nexport const htmlParserSchema = z.object({\n html: z.string().describe('The HTML content to parse'),\n selector: z.string().describe('CSS selector to find elements'),\n extractText: z.boolean().default(true).describe('Extract text content from selected elements'),\n extractHtml: z.boolean().default(false).describe('Extract inner HTML of selected elements'),\n extractAttributes: z.array(z.string().describe(\"String value\")).optional().describe('List of attributes to extract (e.g., [\"href\", \"src\", \"class\"])'),\n});\n\n/**\n * Extract links input schema\n */\nexport const extractLinksSchema = z.object({\n html: z.string().describe('The HTML content to extract links from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative links'),\n});\n\n/**\n * Extract images input schema\n */\nexport const extractImagesSchema = z.object({\n html: z.string().describe('The HTML content to extract images from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative image URLs'),\n});\n\n","/**\n * HTML Parser Tool\n * \n * Parse HTML content and extract data using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { htmlParserSchema } from '../types.js';\n\n/**\n * Create an HTML parser tool\n * \n * @returns HTML parser tool\n * \n * @example\n * ```ts\n * const parser = createHtmlParserTool();\n * const result = await parser.execute({\n * html: '<div class=\"content\"><h1>Title</h1><p>Text</p></div>',\n * selector: '.content h1'\n * });\n * ```\n */\nexport function createHtmlParserTool() {\n return toolBuilder()\n .name('html-parser')\n .description('Parse HTML content and extract data using CSS selectors. Returns text, attributes, and structure of selected elements.')\n .category(ToolCategory.WEB)\n .tags(['html', 'parser', 'css', 'selector', 'extract'])\n .schema(htmlParserSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const $selected = $(input.selector);\n\n const results = $selected.map((_, el) => {\n const $el = $(el);\n const item: any = {};\n\n if (input.extractText) {\n item.text = $el.text().trim();\n }\n\n if (input.extractHtml) {\n item.html = $el.html();\n }\n\n if (input.extractAttributes && input.extractAttributes.length > 0) {\n item.attributes = {};\n for (const attr of input.extractAttributes) {\n const value = $el.attr(attr);\n if (value !== undefined) {\n item.attributes[attr] = value;\n }\n }\n }\n\n return item;\n }).get();\n\n return {\n count: results.length,\n results,\n };\n })\n .build();\n}\n\n","/**\n * Extract Links Tool\n * \n * Extract all links from HTML content.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { extractLinksSchema } from '../types.js';\n\n/**\n * Create an extract links tool\n * \n * @returns Extract links tool\n * \n * @example\n * ```ts\n * const extractor = createExtractLinksTool();\n * const result = await extractor.execute({\n * html: '<a href=\"/page\">Link</a>',\n * baseUrl: 'https://example.com'\n * });\n * ```\n */\nexport function createExtractLinksTool() {\n return toolBuilder()\n .name('extract-links')\n .description('Extract all links (anchor tags) from HTML content with their text and href attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'links', 'extract', 'anchor'])\n .schema(extractLinksSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const links: Array<{ text: string; href: string; title?: string }> = [];\n\n $('a[href]').each((_, el) => {\n const $el = $(el);\n let href = $el.attr('href') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && href) {\n try {\n href = new URL(href, input.baseUrl).href;\n } catch {\n // Keep original href if URL parsing fails\n }\n }\n\n links.push({\n text: $el.text().trim(),\n href,\n title: $el.attr('title'),\n });\n });\n\n return {\n count: links.length,\n links,\n };\n })\n .build();\n}\n\n","/**\n * Extract Images Tool\n * \n * Extract all images from HTML content.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport * as cheerio from 'cheerio';\nimport { extractImagesSchema } from '../types.js';\n\n/**\n * Create an extract images tool\n * \n * @returns Extract images tool\n * \n * @example\n * ```ts\n * const extractor = createExtractImagesTool();\n * const result = await extractor.execute({\n * html: '<img src=\"/image.jpg\" alt=\"Image\">',\n * baseUrl: 'https://example.com'\n * });\n * ```\n */\nexport function createExtractImagesTool() {\n return toolBuilder()\n .name('extract-images')\n .description('Extract all images from HTML content with their src, alt, and other attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'images', 'extract', 'img'])\n .schema(extractImagesSchema)\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const images: Array<{ src: string; alt?: string; title?: string; width?: string; height?: string }> = [];\n\n $('img[src]').each((_, el) => {\n const $el = $(el);\n let src = $el.attr('src') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && src) {\n try {\n src = new URL(src, input.baseUrl).href;\n } catch {\n // Keep original src if URL parsing fails\n }\n }\n\n images.push({\n src,\n alt: $el.attr('alt'),\n title: $el.attr('title'),\n width: $el.attr('width'),\n height: $el.attr('height'),\n });\n });\n\n return {\n count: images.length,\n images,\n };\n })\n .build();\n}\n\n","/**\n * HTML Parser Tools\n * \n * Tools for parsing HTML content and extracting data.\n */\n\n// Export types\nexport type { HtmlParserToolsConfig } from './types.js';\nexport { htmlParserSchema, extractLinksSchema, extractImagesSchema } from './types.js';\n\n// Export tool factories\nexport { createHtmlParserTool } from './tools/html-parser.js';\nexport { createExtractLinksTool } from './tools/extract-links.js';\nexport { createExtractImagesTool } from './tools/extract-images.js';\n\n// Import for default instances\nimport { createHtmlParserTool } from './tools/html-parser.js';\nimport { createExtractLinksTool } from './tools/extract-links.js';\nimport { createExtractImagesTool } from './tools/extract-images.js';\n\n// Default tool instances\nexport const htmlParser = createHtmlParserTool();\nexport const extractLinks = createExtractLinksTool();\nexport const extractImages = createExtractImagesTool();\n\n// Tools array\nexport const htmlParserTools = [htmlParser, extractLinks, extractImages];\n\n/**\n * Create HTML parser tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of HTML parser tools\n * \n * @example\n * ```ts\n * const tools = createHtmlParserTools();\n * ```\n */\nexport function createHtmlParserTools(config: import('./types.js').HtmlParserToolsConfig = {}) {\n return [\n createHtmlParserTool(),\n createExtractLinksTool(),\n createExtractImagesTool(),\n ];\n}\n\n","/**\n * URL Validator Types\n * \n * Type definitions for URL validation and manipulation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * URL validation result\n */\nexport interface UrlValidationResult {\n url: string;\n protocol: string;\n hostname: string;\n port: string;\n pathname: string;\n search: string;\n hash: string;\n origin: string;\n}\n\n/**\n * URL validator tools configuration\n */\nexport interface UrlValidatorToolsConfig {\n // No specific config needed for URL validator tools currently\n}\n\n/**\n * URL validator input schema\n */\nexport const urlValidatorSchema = z.object({\n url: z.string().describe('The URL to validate and parse'),\n});\n\n/**\n * URL builder input schema\n */\nexport const urlBuilderSchema = z.object({\n protocol: z.string().default('https').describe('Protocol (http, https, etc.)'),\n hostname: z.string().describe('Hostname or domain name'),\n port: z.string().optional().describe('Optional port number'),\n pathname: z.string().default('/').describe('URL path'),\n query: z.record(z.string()).optional().describe('Query parameters as key-value pairs'),\n hash: z.string().optional().describe('URL hash/fragment'),\n});\n\n/**\n * URL query parser input schema\n */\nexport const urlQueryParserSchema = z.object({\n input: z.string().describe('URL or query string to parse (e.g., \"?foo=bar&baz=qux\" or full URL)'),\n});\n\n","/**\n * URL Validator Tool\n * \n * Validate and parse URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlValidatorSchema, type UrlValidationResult } from '../types.js';\n\n/**\n * Create a URL validator tool\n * \n * @returns URL validator tool\n * \n * @example\n * ```ts\n * const validator = createUrlValidatorTool();\n * const result = await validator.execute({\n * url: 'https://example.com/path?query=value#hash'\n * });\n * ```\n */\nexport function createUrlValidatorTool() {\n return toolBuilder()\n .name('url-validator')\n .description('Validate and parse URLs. Returns detailed information about the URL structure including protocol, hostname, path, query parameters, and hash.')\n .category(ToolCategory.WEB)\n .tags(['url', 'validator', 'parse', 'validate'])\n .schema(urlValidatorSchema)\n .implementSafe(async (input): Promise<UrlValidationResult> => {\n const parsed = new URL(input.url);\n\n return {\n url: parsed.href,\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n origin: parsed.origin,\n };\n })\n .build();\n}\n\n","/**\n * URL Builder Tool\n * \n * Build URLs from components.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlBuilderSchema } from '../types.js';\n\n/**\n * Create a URL builder tool\n * \n * @returns URL builder tool\n * \n * @example\n * ```ts\n * const builder = createUrlBuilderTool();\n * const result = await builder.execute({\n * protocol: 'https',\n * hostname: 'example.com',\n * pathname: '/path',\n * query: { foo: 'bar' }\n * });\n * ```\n */\nexport function createUrlBuilderTool() {\n return toolBuilder()\n .name('url-builder')\n .description('Build a URL from components (protocol, hostname, path, query parameters, hash).')\n .category(ToolCategory.WEB)\n .tags(['url', 'builder', 'construct'])\n .schema(urlBuilderSchema)\n .implement(async (input) => {\n const url = new URL(`${input.protocol}://${input.hostname}`);\n\n if (input.port) {\n url.port = input.port;\n }\n\n url.pathname = input.pathname ?? '/';\n \n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n \n if (input.hash) {\n url.hash = input.hash;\n }\n \n return {\n url: url.href,\n components: {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n origin: url.origin,\n },\n };\n })\n .build();\n}\n\n","/**\n * URL Query Parser Tool\n * \n * Parse query parameters from URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { urlQueryParserSchema } from '../types.js';\n\n/**\n * Create a URL query parser tool\n * \n * @returns URL query parser tool\n * \n * @example\n * ```ts\n * const parser = createUrlQueryParserTool();\n * const result = await parser.execute({\n * input: 'https://example.com?foo=bar&baz=qux'\n * });\n * ```\n */\nexport function createUrlQueryParserTool() {\n return toolBuilder()\n .name('url-query-parser')\n .description('Parse query parameters from a URL or query string into a key-value object.')\n .category(ToolCategory.WEB)\n .tags(['url', 'query', 'parse', 'params'])\n .schema(urlQueryParserSchema)\n .implement(async (input) => {\n let searchParams: URLSearchParams;\n \n try {\n // Try to parse as full URL first\n const url = new URL(input.input);\n searchParams = url.searchParams;\n } catch {\n // If that fails, treat as query string\n const queryString = input.input.startsWith('?') ? input.input.slice(1) : input.input;\n searchParams = new URLSearchParams(queryString);\n }\n \n const params: Record<string, string | string[]> = {};\n \n searchParams.forEach((value, key) => {\n if (params[key]) {\n // Handle multiple values for same key\n if (Array.isArray(params[key])) {\n (params[key] as string[]).push(value);\n } else {\n params[key] = [params[key] as string, value];\n }\n } else {\n params[key] = value;\n }\n });\n \n return {\n params,\n count: Object.keys(params).length,\n };\n })\n .build();\n}\n\n","/**\n * URL Validator Tools\n * \n * Tools for validating, parsing, and manipulating URLs.\n */\n\n// Export types\nexport type { UrlValidationResult, UrlValidatorToolsConfig } from './types.js';\nexport { urlValidatorSchema, urlBuilderSchema, urlQueryParserSchema } from './types.js';\n\n// Export tool factories\nexport { createUrlValidatorTool } from './tools/url-validator.js';\nexport { createUrlBuilderTool } from './tools/url-builder.js';\nexport { createUrlQueryParserTool } from './tools/url-query-parser.js';\n\n// Import for default instances\nimport { createUrlValidatorTool } from './tools/url-validator.js';\nimport { createUrlBuilderTool } from './tools/url-builder.js';\nimport { createUrlQueryParserTool } from './tools/url-query-parser.js';\n\n// Default tool instances\nexport const urlValidator = createUrlValidatorTool();\nexport const urlBuilder = createUrlBuilderTool();\nexport const urlQueryParser = createUrlQueryParserTool();\n\n// Tools array\nexport const urlValidatorTools = [urlValidator, urlBuilder, urlQueryParser];\n\n/**\n * Create URL validator tools with custom configuration\n * \n * @param config - Configuration options\n * @returns Array of URL validator tools\n * \n * @example\n * ```ts\n * const tools = createUrlValidatorTools();\n * ```\n */\nexport function createUrlValidatorTools(config: import('./types.js').UrlValidatorToolsConfig = {}) {\n return [\n createUrlValidatorTool(),\n createUrlBuilderTool(),\n createUrlQueryParserTool(),\n ];\n}\n\n","/**\n * Web Search Tool - Zod Schemas\n */\n\nimport { z } from 'zod';\n\n/**\n * Web search input schema\n */\nexport const webSearchSchema = z.object({\n query: z.string().min(1).describe('The search query'),\n maxResults: z\n .number()\n .min(1)\n .max(50)\n .default(10)\n .describe('Maximum number of results to return (1-50)'),\n preferSerper: z\n .boolean()\n .default(false)\n .describe('Prefer Serper API if available (requires SERPER_API_KEY)'),\n timeout: z\n .number()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe('Request timeout in milliseconds (1000-60000, default: 30000)'),\n});\n\n/**\n * Search result schema\n */\nexport const searchResultSchema = z.object({\n title: z.string(),\n link: z.string().url(),\n snippet: z.string(),\n position: z.number().optional(),\n});\n\n/**\n * Web search output schema\n */\nexport const webSearchOutputSchema = z.object({\n success: z.boolean(),\n source: z.enum(['duckduckgo', 'serper']),\n query: z.string(),\n results: z.array(searchResultSchema),\n totalResults: z.number().optional(),\n error: z.string().optional(),\n metadata: z\n .object({\n responseTime: z.number().optional(),\n fallbackUsed: z.boolean().optional(),\n })\n .optional(),\n});\n\n","/**\n * Web Search Tool - Utility Functions\n */\n\nimport type { RetryConfig } from './types.js';\n\n/**\n * Get Serper API key from environment\n */\nexport function getSerperApiKey(): string | undefined {\n return process.env.SERPER_API_KEY;\n}\n\n/**\n * Check if Serper API is available\n */\nexport function isSerperAvailable(): boolean {\n return !!getSerperApiKey();\n}\n\n/**\n * Measure execution time of an async function\n */\nexport async function measureTime<T>(\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = Date.now();\n const result = await fn();\n const duration = Date.now() - start;\n return { result, duration };\n}\n\n/**\n * Sanitize search query\n */\nexport function sanitizeQuery(query: string): string {\n return query.trim().replace(/\\s+/g, ' ');\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelay: 1000, // 1 second\n maxDelay: 10000, // 10 seconds\n backoffMultiplier: 2,\n};\n\n/**\n * Default timeout for search requests (30 seconds)\n */\nexport const DEFAULT_TIMEOUT = 30000;\n\n/**\n * Check if error is retryable (network errors, timeouts, 5xx errors)\n */\nexport function isRetryableError(error: any): boolean {\n // Network errors\n if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {\n return true;\n }\n\n // Timeout errors\n if (error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {\n return true;\n }\n\n // 5xx server errors (but not 4xx client errors)\n if (error.response?.status >= 500 && error.response?.status < 600) {\n return true;\n }\n\n // Rate limiting (429) - retryable with backoff\n if (error.response?.status === 429) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n config: RetryConfig = DEFAULT_RETRY_CONFIG\n): Promise<T> {\n let lastError: any;\n let delay = config.initialDelay;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: any) {\n lastError = error;\n\n // Don't retry if error is not retryable\n if (!isRetryableError(error)) {\n throw error;\n }\n\n // Don't retry if we've exhausted all attempts\n if (attempt === config.maxRetries) {\n break;\n }\n\n // Wait before retrying\n await sleep(delay);\n\n // Increase delay for next attempt (exponential backoff)\n delay = Math.min(delay * config.backoffMultiplier, config.maxDelay);\n }\n }\n\n // All retries exhausted\n throw lastError;\n}\n\n","/**\n * DuckDuckGo Search Provider\n * \n * Free search provider using DuckDuckGo's Instant Answer API.\n * No API key required.\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * DuckDuckGo API response structure\n */\ninterface DuckDuckGoResponse {\n Abstract?: string;\n AbstractText?: string;\n AbstractSource?: string;\n AbstractURL?: string;\n Heading?: string;\n RelatedTopics?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n Results?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n}\n\n/**\n * DuckDuckGo search provider implementation\n */\nexport class DuckDuckGoProvider implements SearchProvider {\n name = 'duckduckgo' as const;\n\n /**\n * DuckDuckGo is always available (no API key required)\n */\n isAvailable(): boolean {\n return true;\n }\n\n /**\n * Search using DuckDuckGo Instant Answer API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n return retryWithBackoff(async () => {\n try {\n const response = await axios.get<DuckDuckGoResponse>(\n 'https://api.duckduckgo.com/',\n {\n params: {\n q: query,\n format: 'json',\n },\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://github.com/agentforge)',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n throw new Error(`DuckDuckGo search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize DuckDuckGo response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: DuckDuckGoResponse,\n maxResults: number\n ): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Early return if maxResults is 0\n if (maxResults <= 0) {\n return results;\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n results.push({\n title: data.Heading || 'Result',\n link: data.AbstractURL,\n snippet: data.Abstract,\n position: 1,\n });\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add related topics (optimized: only process what we need)\n if (data.RelatedTopics && data.RelatedTopics.length > 0) {\n const remaining = maxResults - results.length;\n const topicsToProcess = data.RelatedTopics.slice(0, remaining);\n\n for (const topic of topicsToProcess) {\n if (topic.Text && topic.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = topic.Text.split(' - ');\n results.push({\n title: titleParts[0] || topic.Text,\n link: topic.FirstURL,\n snippet: topic.Text,\n position: results.length + 1,\n });\n }\n }\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add regular results (optimized: only process what we need)\n if (data.Results && data.Results.length > 0) {\n const remaining = maxResults - results.length;\n const resultsToProcess = data.Results.slice(0, remaining);\n\n for (const result of resultsToProcess) {\n if (result.Text && result.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = result.Text.split(' - ');\n results.push({\n title: titleParts[0] || result.Text,\n link: result.FirstURL,\n snippet: result.Text,\n position: results.length + 1,\n });\n }\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new DuckDuckGo provider instance\n */\nexport function createDuckDuckGoProvider(): DuckDuckGoProvider {\n return new DuckDuckGoProvider();\n}\n\n","/**\n * Serper Search Provider\n * \n * Premium search provider using Serper API (Google results).\n * Requires SERPER_API_KEY environment variable.\n * Get your API key at: https://serper.dev\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { getSerperApiKey, retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * Serper API response structure\n */\ninterface SerperResponse {\n organic?: Array<{\n title?: string;\n link?: string;\n snippet?: string;\n position?: number;\n }>;\n searchParameters?: {\n q?: string;\n num?: number;\n };\n}\n\n/**\n * Serper search provider implementation\n */\nexport class SerperProvider implements SearchProvider {\n name = 'serper' as const;\n private apiKey: string | undefined;\n\n constructor() {\n this.apiKey = getSerperApiKey();\n }\n\n /**\n * Serper is available if API key is set\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n /**\n * Search using Serper API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n if (!this.apiKey) {\n throw new Error(\n 'Serper API key not found. Set SERPER_API_KEY environment variable. Get your key at https://serper.dev'\n );\n }\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<SerperResponse>(\n 'https://google.serper.dev/search',\n {\n q: query,\n num: maxResults,\n },\n {\n headers: {\n 'X-API-KEY': this.apiKey,\n 'Content-Type': 'application/json',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n if (error.response?.status === 401) {\n throw new Error(\n 'Invalid Serper API key. Get your key at https://serper.dev'\n );\n }\n if (error.response?.status === 429) {\n throw new Error(\n 'Serper API rate limit exceeded. Please try again later or upgrade your plan at https://serper.dev'\n );\n }\n throw new Error(`Serper search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize Serper response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: SerperResponse,\n maxResults: number\n ): SearchResult[] {\n // Early return for empty results\n if (!data.organic || data.organic.length === 0 || maxResults <= 0) {\n return [];\n }\n\n // Pre-allocate array with expected size for better performance\n const results: SearchResult[] = [];\n\n // Only process the number of items we need (avoid processing entire array)\n const itemsToProcess = Math.min(data.organic.length, maxResults);\n\n for (let i = 0; i < itemsToProcess; i++) {\n const item = data.organic[i];\n\n // Skip items with missing required fields\n if (!item.title || !item.link || !item.snippet) {\n continue;\n }\n\n results.push({\n title: item.title,\n link: item.link,\n snippet: item.snippet,\n position: item.position ?? i + 1,\n });\n\n // Stop if we've collected enough results\n if (results.length >= maxResults) {\n break;\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new Serper provider instance\n */\nexport function createSerperProvider(): SerperProvider {\n return new SerperProvider();\n}\n\n","/**\n * Web Search Tool\n * \n * Search the web using DuckDuckGo (free) or Serper (optional upgrade).\n * Provides smart fallback and normalized results.\n * \n * @example\n * ```ts\n * // Basic usage (no API key needed)\n * const result = await webSearch.invoke({\n * query: 'What is TypeScript?'\n * });\n * \n * // With Serper API key (set SERPER_API_KEY env var)\n * const result = await webSearch.invoke({\n * query: 'Best restaurants in SF 2026',\n * preferSerper: true\n * });\n * ```\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { webSearchSchema } from './schemas.js';\nimport { createDuckDuckGoProvider } from './providers/duckduckgo.js';\nimport { createSerperProvider } from './providers/serper.js';\nimport { measureTime, sanitizeQuery, DEFAULT_TIMEOUT } from './utils.js';\nimport type { WebSearchInput, WebSearchOutput, SearchProvider } from './types.js';\n\n/**\n * Web search tool implementation\n */\nexport const webSearch = toolBuilder()\n .name('web-search')\n .description(\n 'Search the web for information using DuckDuckGo (free) or Serper API (optional). ' +\n 'Returns structured search results with titles, links, and snippets. ' +\n 'Automatically falls back to Serper if DuckDuckGo returns no results and API key is available.'\n )\n .category(ToolCategory.WEB)\n .tags(['search', 'web', 'google', 'duckduckgo', 'serper', 'internet'])\n .schema(webSearchSchema)\n .implement(async (input: WebSearchInput): Promise<WebSearchOutput> => {\n const {\n query,\n maxResults = 10,\n preferSerper = false,\n timeout = DEFAULT_TIMEOUT\n } = input;\n\n // Sanitize query\n const sanitizedQuery = sanitizeQuery(query);\n\n // Initialize providers\n const duckduckgo = createDuckDuckGoProvider();\n const serper = createSerperProvider();\n\n // Determine which provider to use\n let primaryProvider: SearchProvider;\n let fallbackProvider: SearchProvider | null = null;\n\n if (preferSerper && serper.isAvailable()) {\n primaryProvider = serper;\n fallbackProvider = duckduckgo;\n } else {\n primaryProvider = duckduckgo;\n fallbackProvider = serper.isAvailable() ? serper : null;\n }\n\n try {\n // Try primary provider\n const { result: results, duration } = await measureTime(() =>\n primaryProvider.search(sanitizedQuery, maxResults, timeout)\n );\n\n // If primary provider returns results, return them\n if (results.length > 0) {\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results,\n totalResults: results.length,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n }\n\n // If no results and fallback is available, try fallback\n if (fallbackProvider) {\n const { result: fallbackResults, duration: fallbackDuration } =\n await measureTime(() =>\n fallbackProvider!.search(sanitizedQuery, maxResults, timeout)\n );\n\n return {\n success: true,\n source: fallbackProvider.name,\n query: sanitizedQuery,\n results: fallbackResults,\n totalResults: fallbackResults.length,\n metadata: {\n responseTime: fallbackDuration,\n fallbackUsed: true,\n },\n };\n }\n\n // No results from either provider\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n totalResults: 0,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n } catch (error: any) {\n // Error occurred\n return {\n success: false,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n error: error.message,\n };\n }\n })\n .build();\n\n// Export types and schemas for external use\nexport * from './types.js';\nexport * from './schemas.js';\nexport * from './providers/duckduckgo.js';\nexport * from './providers/serper.js';\n\n","/**\n * Authentication helpers for Slack tools\n */\n\nimport { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from './types.js';\n\n/**\n * Create a function to get configured Slack client\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredSlackClient(\n token?: string,\n botName: string = 'AgentForge Bot',\n botIcon: string = ':robot_face:'\n): () => { client: WebClient; config: SlackClientConfig } {\n let configuredClient: WebClient | null = null;\n\n return function getConfiguredSlackClient(): { client: WebClient; config: SlackClientConfig } {\n if (!configuredClient) {\n const slackToken = token || process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN;\n if (!slackToken) {\n throw new Error(\n 'Slack token not configured. Please provide a token in config or set SLACK_USER_TOKEN or SLACK_BOT_TOKEN environment variable.'\n );\n }\n configuredClient = new WebClient(slackToken);\n }\n\n return {\n client: configuredClient,\n config: {\n token: token || process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN || '',\n botName,\n botIcon,\n },\n };\n };\n}\n\n/**\n * Helper function to get default Slack client (for default tools)\n */\nlet defaultSlackClient: WebClient | null = null;\n\nexport function getDefaultSlackClient(): { client: WebClient; config: SlackClientConfig } {\n if (!defaultSlackClient) {\n const token = process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN;\n if (!token) {\n throw new Error(\n 'Slack token not configured. Please set SLACK_USER_TOKEN or SLACK_BOT_TOKEN environment variable.'\n );\n }\n defaultSlackClient = new WebClient(token);\n }\n\n return {\n client: defaultSlackClient,\n config: {\n token: process.env.SLACK_USER_TOKEN || process.env.SLACK_BOT_TOKEN || '',\n botName: 'AgentForge Bot',\n botIcon: ':robot_face:',\n },\n };\n}\n\n","/**\n * Send a message to a Slack channel\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the sendSlackMessage tool with the provided client and logger\n */\nexport function createSendSlackMessageTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n) {\n return toolBuilder()\n .name('send-slack-message')\n .description('Send a message to a Slack channel for team communication and notifications')\n .category(ToolCategory.WEB)\n .tags(['slack', 'messaging', 'communication'])\n .usageNotes(\n 'Use this for general team communication. For notifications with @mentions, consider using notify-slack instead. ' +\n 'Use get-slack-channels first if you need to find the right channel.'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe(\"Channel name (e.g., 'general') or ID (e.g., 'C123456')\"),\n message: z.string().describe('Message content to send'),\n })\n )\n .implementSafe(async ({ channel, message }) => {\n logger.info('send-slack-message called', { channel, messageLength: message.length });\n\n try {\n const { client: slack, config } = getSlackClient();\n\n // Send message using Slack API\n const result = await slack.chat.postMessage({\n channel,\n text: message,\n username: config.botName,\n icon_emoji: config.botIcon,\n });\n\n logger.info('send-slack-message result', {\n channel: result.channel,\n timestamp: result.ts,\n messageLength: message.length,\n success: true,\n });\n\n return {\n channel: result.channel,\n message,\n timestamp: result.ts,\n message_id: result.ts,\n };\n } catch (error: any) {\n logger.error('send-slack-message failed', {\n channel,\n error: error.message,\n data: error.data,\n });\n throw error;\n }\n })\n .build();\n}\n\n","/**\n * Send a notification to a Slack channel (with @mention support)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the notifySlack tool with the provided client and logger\n */\nexport function createNotifySlackTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n) {\n return toolBuilder()\n .name('notify-slack')\n .description('Send a notification to a Slack channel with optional @mentions for urgent alerts')\n .category(ToolCategory.WEB)\n .tags(['slack', 'notification', 'alert'])\n .usageNotes(\n 'Use this for urgent notifications that require @mentions. For general messages without mentions, ' +\n 'use send-slack-message instead.'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe('Channel name or ID'),\n message: z.string().describe('Notification message'),\n mentions: z.array(z.string()).optional().describe('List of usernames to mention (without @)'),\n })\n )\n .implementSafe(async ({ channel, message, mentions = [] }) => {\n logger.info('notify-slack called', {\n channel,\n messageLength: message.length,\n mentionCount: mentions.length,\n });\n\n const { client: slack, config } = getSlackClient();\n\n // Build message with mentions\n const mentionText = mentions.length > 0 ? mentions.map((m) => `<@${m}>`).join(' ') + ' ' : '';\n const fullMessage = `${mentionText}${message}`;\n\n // Send notification using Slack API\n const result = await slack.chat.postMessage({\n channel,\n text: fullMessage,\n username: config.botName,\n icon_emoji: config.botIcon,\n });\n\n logger.info('notify-slack result', {\n channel: result.channel,\n timestamp: result.ts,\n mentions: mentions.length,\n });\n\n return {\n channel: result.channel,\n message: fullMessage,\n mentions,\n timestamp: result.ts,\n notification_id: result.ts,\n };\n })\n .build();\n}\n\n","/**\n * Get list of available Slack channels\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the getSlackChannels tool with the provided client and logger\n */\nexport function createGetSlackChannelsTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n) {\n return toolBuilder()\n .name('get-slack-channels')\n .description('Get a list of available Slack channels to find the right channel for messaging')\n .category(ToolCategory.WEB)\n .tags(['slack', 'channels', 'list'])\n .usageNotes(\n 'Use this first to discover available channels before sending messages. ' +\n 'Helps ensure you are sending to the correct channel.'\n )\n .follows(['send-slack-message', 'notify-slack'])\n .schema(\n z.object({\n include_private: z.boolean().optional().describe('Include private channels (default: false)'),\n })\n )\n .implementSafe(async ({ include_private = false }) => {\n logger.info('get-slack-channels called', { include_private });\n\n const { client: slack } = getSlackClient();\n\n // Get public channels\n const publicChannels = await slack.conversations.list({\n types: 'public_channel',\n exclude_archived: true,\n });\n\n let allChannels = publicChannels.channels || [];\n\n // Get private channels if requested\n if (include_private) {\n const privateChannels = await slack.conversations.list({\n types: 'private_channel',\n exclude_archived: true,\n });\n allChannels = [...allChannels, ...(privateChannels.channels || [])];\n }\n\n logger.info('get-slack-channels result', {\n channelCount: allChannels.length,\n includePrivate: include_private,\n });\n\n return {\n count: allChannels.length,\n channels: allChannels.map((c) => ({\n id: c.id,\n name: c.name,\n is_private: c.is_private || false,\n num_members: c.num_members || 0,\n })),\n };\n })\n .build();\n}\n\n","/**\n * Get message history from a Slack channel\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from '@agentforge/core';\nimport { z } from 'zod';\nimport type { WebClient } from '@slack/web-api';\nimport type { SlackClientConfig } from '../types.js';\n\n/**\n * Create the getSlackMessages tool with the provided client and logger\n */\nexport function createGetSlackMessagesTool(\n getSlackClient: () => { client: WebClient; config: SlackClientConfig },\n logger: Logger\n) {\n return toolBuilder()\n .name('get-slack-messages')\n .description('Retrieve message history from a Slack channel to read recent conversations')\n .category(ToolCategory.WEB)\n .tags(['slack', 'messages', 'history', 'read'])\n .usageNotes(\n 'Use this to read recent messages from a channel. Use get-slack-channels first if you need to find the channel ID. ' +\n 'Returns messages in reverse chronological order (newest first).'\n )\n .suggests(['get-slack-channels'])\n .schema(\n z.object({\n channel: z.string().describe(\"Channel name (e.g., 'general') or ID (e.g., 'C123456')\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Number of messages to retrieve (default: 20, max: 100)'),\n })\n )\n .implementSafe(async ({ channel, limit = 20 }) => {\n logger.info('get-slack-messages called', { channel, limit });\n\n try {\n const { client: slack } = getSlackClient();\n\n // Get channel ID if name was provided\n let channelId = channel;\n if (!channel.startsWith('C') && !channel.startsWith('D')) {\n const channels = await slack.conversations.list({\n types: 'public_channel,private_channel',\n exclude_archived: true,\n });\n const found = channels.channels?.find((c) => c.name === channel);\n if (!found) {\n logger.error('get-slack-messages: channel not found', { channel });\n throw new Error(\n `Channel '${channel}' not found. Use get-slack-channels to see available channels.`\n );\n }\n channelId = found.id!;\n }\n\n // Retrieve message history\n const result = await slack.conversations.history({\n channel: channelId,\n limit: Math.min(limit, 100), // Cap at 100 for performance\n });\n\n logger.info('get-slack-messages result', {\n channel: channelId,\n messageCount: result.messages?.length || 0,\n limit,\n });\n\n return {\n channel: channelId,\n count: result.messages?.length || 0,\n messages:\n result.messages?.map((m) => ({\n user: m.user || 'unknown',\n text: m.text || '',\n timestamp: m.ts,\n thread_ts: m.thread_ts,\n type: m.type,\n subtype: m.subtype,\n })) || [],\n };\n } catch (error: any) {\n logger.error('get-slack-messages failed', {\n channel,\n error: error.message,\n data: error.data,\n });\n throw error;\n }\n })\n .build();\n}\n\n","/**\n * Slack Integration Tools\n *\n * Tools for interacting with Slack workspaces - send messages, notifications,\n * list channels, and read message history.\n *\n * @packageDocumentation\n *\n * @example\n * ```ts\n * // Using default tools (reads from env vars)\n * import { sendSlackMessage } from '@agentforge/tools';\n *\n * const result = await sendSlackMessage.execute({\n * channel: 'general',\n * message: 'Hello from AgentForge!'\n * });\n *\n * // Using factory function with custom config\n * import { createSlackTools } from '@agentforge/tools';\n *\n * const slackTools = createSlackTools({\n * token: 'xoxb-your-bot-token',\n * botName: 'My Custom Bot'\n * });\n *\n * const result = await slackTools.sendMessage.execute({\n * channel: 'general',\n * message: 'Hello!'\n * });\n * ```\n */\n\nimport { createLogger, LogLevel } from \"@agentforge/core\";\nimport { getDefaultSlackClient, createGetConfiguredSlackClient } from \"./auth.js\";\nimport { createSendSlackMessageTool } from \"./tools/send-slack-message.js\";\nimport { createNotifySlackTool } from \"./tools/notify-slack.js\";\nimport { createGetSlackChannelsTool } from \"./tools/get-slack-channels.js\";\nimport { createGetSlackMessagesTool } from \"./tools/get-slack-messages.js\";\n\n// Export types\nexport type { SlackToolsConfig, SlackClientConfig } from \"./types.js\";\n\n// Create logger for default Slack tools\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('[tools:slack]', { level: logLevel });\n\n/**\n * Default Slack tools using environment variables\n */\nexport const sendSlackMessage = createSendSlackMessageTool(getDefaultSlackClient, logger);\nexport const notifySlack = createNotifySlackTool(getDefaultSlackClient, logger);\nexport const getSlackChannels = createGetSlackChannelsTool(getDefaultSlackClient, logger);\nexport const getSlackMessages = createGetSlackMessagesTool(getDefaultSlackClient, logger);\n\n/**\n * Export all Slack tools\n *\n * Includes 4 tools for Slack integration:\n * - 2 write tools: send-slack-message, notify-slack\n * - 2 read tools: get-slack-channels, get-slack-messages\n */\nexport const slackTools = [\n // Write tools\n sendSlackMessage,\n notifySlack,\n // Read tools\n getSlackChannels,\n getSlackMessages,\n];\n\n/**\n * Create Slack tools with custom configuration\n *\n * This factory function allows you to create Slack tools with custom configuration,\n * such as providing a token programmatically instead of using environment variables.\n *\n * @param config - Configuration options for Slack tools\n * @returns Object containing all 4 Slack tools configured with the provided options\n *\n * @example\n * ```ts\n * // Create tools with custom token\n * const slackTools = createSlackTools({\n * token: 'xoxb-your-bot-token',\n * botName: 'My Custom Bot',\n * botIcon: ':rocket:'\n * });\n *\n * // Use the tools\n * await slackTools.sendMessage.execute({\n * channel: 'general',\n * message: 'Hello!'\n * });\n *\n * // Or use with an agent\n * const agent = createReActAgent({\n * llm,\n * tools: [\n * slackTools.sendMessage,\n * slackTools.notify,\n * slackTools.getChannels,\n * slackTools.getMessages\n * ]\n * });\n * ```\n */\nexport function createSlackTools(config: import(\"./types.js\").SlackToolsConfig = {}) {\n const {\n token,\n botName = 'AgentForge Bot',\n botIcon = ':robot_face:',\n logLevel: customLogLevel,\n } = config;\n\n // Create closures for getting configured Slack client\n const getConfiguredSlackClient = createGetConfiguredSlackClient(token, botName, botIcon);\n\n // Create logger with custom log level if provided\n const toolLogger = customLogLevel\n ? createLogger('[tools:slack]', { level: customLogLevel })\n : logger;\n\n // Build all 4 tools with configured client/logger\n const sendMessage = createSendSlackMessageTool(getConfiguredSlackClient, toolLogger);\n const notify = createNotifySlackTool(getConfiguredSlackClient, toolLogger);\n const getChannels = createGetSlackChannelsTool(getConfiguredSlackClient, toolLogger);\n const getMessages = createGetSlackMessagesTool(getConfiguredSlackClient, toolLogger);\n\n // Return all configured tools\n return {\n sendMessage,\n notify,\n getChannels,\n getMessages,\n };\n}\n\n","/**\n * Authentication helpers for Confluence tools\n */\n\nimport type { ConfluenceAuth } from \"./types.js\";\n\n/**\n * Create a function to get configured auth credentials\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredAuth(\n apiKey?: string,\n email?: string,\n siteUrl?: string\n): () => ConfluenceAuth {\n return function getConfiguredAuth(): ConfluenceAuth {\n const ATLASSIAN_API_KEY = apiKey || process.env.ATLASSIAN_API_KEY || \"\";\n const ATLASSIAN_EMAIL = email || process.env.ATLASSIAN_EMAIL || \"\";\n const ATLASSIAN_SITE_URL = (siteUrl || process.env.ATLASSIAN_SITE_URL || \"\").replace(/\\/$/, \"\");\n\n if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {\n throw new Error(\n \"Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in config or environment variables.\"\n );\n }\n\n return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };\n };\n}\n\n/**\n * Create a function to get configured auth header\n * This is used by the factory function to create closures\n */\nexport function createGetConfiguredAuthHeader(\n getConfiguredAuth: () => ConfluenceAuth\n): () => string {\n return function getConfiguredAuthHeader(): string {\n const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfiguredAuth();\n const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString(\"base64\");\n return `Basic ${auth}`;\n };\n}\n\n/**\n * Helper function to get configuration from environment (for default tools)\n */\nexport function getConfig(): ConfluenceAuth {\n const ATLASSIAN_API_KEY = process.env.ATLASSIAN_API_KEY || \"\";\n const ATLASSIAN_EMAIL = process.env.ATLASSIAN_EMAIL || \"\";\n const ATLASSIAN_SITE_URL = (process.env.ATLASSIAN_SITE_URL || \"\").replace(/\\/$/, \"\");\n\n if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {\n throw new Error(\"Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in .env\");\n }\n\n return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };\n}\n\n/**\n * Helper function to create auth header (for default tools)\n */\nexport function getAuthHeader(): string {\n const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfig();\n const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString(\"base64\");\n return `Basic ${auth}`;\n}\n\n","/**\n * Search Confluence pages using CQL (Confluence Query Language)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the searchConfluence tool with the provided auth and logger\n */\nexport function createSearchConfluenceTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"search-confluence\")\n .description(\"Search for pages in Confluence using keywords or CQL (Confluence Query Language). Returns matching pages with titles, IDs, and excerpts.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"search\")\n .tag(\"knowledge-base\")\n .usageNotes(\"Use this to find relevant documentation, policies, or information in Confluence. You can search by keywords or use CQL for advanced queries (e.g., 'space=AI AND type=page'). Use get-confluence-page to retrieve full content of specific pages.\")\n .suggests([\"get-confluence-page\"])\n .schema(z.object({\n query: z.string().describe(\"Search query or CQL expression (e.g., 'payment processing' or 'space=BL3 AND title~payment')\"),\n limit: z.number().optional().describe(\"Maximum number of results to return (default: 10, max: 25)\"),\n }))\n .implement(async ({ query, limit = 10 }) => {\n logger.info('search-confluence called', { query, limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/search`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n cql: query,\n limit: Math.min(limit, 25),\n expand: \"space,version\",\n },\n });\n\n const { ATLASSIAN_SITE_URL: siteUrl } = getAuth();\n const results = response.data.results.map((page: any) => ({\n id: page.id,\n title: page.title,\n type: page.type,\n space: page.space?.name || \"Unknown\",\n spaceKey: page.space?.key || \"\",\n url: `${siteUrl}/wiki${page._links.webui}`,\n lastModified: page.version?.when || \"\",\n }));\n\n // IMPORTANT: Log when search returns no results - this is a valid outcome!\n if (results.length === 0) {\n logger.warn('search-confluence returned NO RESULTS - this is a valid outcome, agent should not retry', {\n query,\n limit,\n totalSize: response.data.totalSize\n });\n } else {\n logger.info('search-confluence result', {\n query,\n resultCount: results.length,\n totalSize: response.data.totalSize,\n titles: results.map((r: any) => r.title).slice(0, 3) // Log first 3 titles\n });\n }\n\n return JSON.stringify({\n success: true,\n count: results.length,\n total: response.data.totalSize,\n results,\n });\n } catch (error: any) {\n logger.error('search-confluence error', {\n query,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Get full content of a Confluence page by ID\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the getConfluencePage tool with the provided auth and logger\n */\nexport function createGetConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"get-confluence-page\")\n .description(\"Get the full content of a specific Confluence page by its ID. Returns the page title, content (in storage format), space, and metadata.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"page\")\n .tag(\"content\")\n .usageNotes(\"Use this after search-confluence to retrieve the full content of a specific page. The page ID can be found in search results.\")\n .requires([\"search-confluence\"])\n .schema(z.object({\n page_id: z.string().describe(\"The Confluence page ID (from search results)\"),\n }))\n .implement(async ({ page_id }) => {\n logger.info('get-confluence-page called', { page_id });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n expand: \"body.storage,space,version,history\",\n },\n });\n\n const page = response.data;\n\n logger.info('get-confluence-page result', {\n page_id,\n title: page.title,\n space: page.space?.name,\n contentLength: page.body?.storage?.value?.length || 0\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: page.id,\n title: page.title,\n type: page.type,\n space: page.space?.name || \"Unknown\",\n spaceKey: page.space?.key || \"\",\n content: page.body?.storage?.value || \"\",\n url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,\n created: page.history?.createdDate || \"\",\n lastModified: page.version?.when || \"\",\n version: page.version?.number || 1,\n },\n });\n } catch (error: any) {\n logger.error('get-confluence-page error', {\n page_id,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * List all Confluence spaces\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the listConfluenceSpaces tool with the provided auth and logger\n */\nexport function createListConfluenceSpacesTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"list-confluence-spaces\")\n .description(\"List all available Confluence spaces. Returns space names, keys, types, and descriptions to help identify where to search for information.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"spaces\")\n .tag(\"list\")\n .usageNotes(\"Use this first to discover available spaces before searching. Helps narrow down searches to specific areas (e.g., 'AI', 'BL3', 'Finance').\")\n .follows([\"search-confluence\"])\n .schema(z.object({\n limit: z.number().optional().describe(\"Maximum number of spaces to return (default: 25)\"),\n }))\n .implement(async ({ limit = 25 }) => {\n logger.info('list-confluence-spaces called', { limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/space`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n limit,\n },\n });\n\n const spaces = response.data.results.map((space: any) => ({\n key: space.key,\n name: space.name,\n type: space.type,\n description: space.description?.plain?.value || \"\",\n url: `${ATLASSIAN_SITE_URL}/wiki${space._links.webui}`,\n }));\n\n logger.info('list-confluence-spaces result', {\n spaceCount: spaces.length,\n spaceKeys: spaces.map((s: any) => s.key).slice(0, 5) // Log first 5 space keys\n });\n\n return JSON.stringify({\n success: true,\n count: spaces.length,\n spaces,\n });\n } catch (error: any) {\n logger.error('list-confluence-spaces error', {\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Get pages from a specific Confluence space\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the getSpacePages tool with the provided auth and logger\n */\nexport function createGetSpacePagesTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"get-space-pages\")\n .description(\"Get all pages from a specific Confluence space by space key. Useful for browsing content in a particular area.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"space\")\n .tag(\"pages\")\n .usageNotes(\"Use this to explore all pages in a specific space. Get the space key from list-confluence-spaces first.\")\n .requires([\"list-confluence-spaces\"])\n .schema(z.object({\n space_key: z.string().describe(\"The space key (e.g., 'AI', 'BL3', 'FIN')\"),\n limit: z.number().optional().describe(\"Maximum number of pages to return (default: 25)\"),\n }))\n .implement(async ({ space_key, limit = 25 }) => {\n logger.info('get-space-pages called', { space_key, limit });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content`, {\n headers: {\n Authorization: getAuthHeader(),\n Accept: \"application/json\",\n },\n params: {\n spaceKey: space_key,\n type: \"page\",\n limit,\n expand: \"version\",\n },\n });\n\n const pages = response.data.results.map((page: any) => ({\n id: page.id,\n title: page.title,\n url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,\n lastModified: page.version?.when || \"\",\n }));\n\n // Log when no pages found - this is a valid outcome!\n if (pages.length === 0) {\n logger.warn('get-space-pages returned NO PAGES - this is a valid outcome, agent should not retry', {\n space_key,\n limit\n });\n } else {\n logger.info('get-space-pages result', {\n space_key,\n pageCount: pages.length,\n titles: pages.map((p: any) => p.title).slice(0, 3) // Log first 3 titles\n });\n }\n\n return JSON.stringify({\n success: true,\n space: space_key,\n count: pages.length,\n pages,\n });\n } catch (error: any) {\n logger.error('get-space-pages error', {\n space_key,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Create a new Confluence page\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the createConfluencePage tool with the provided auth and logger\n */\nexport function createCreateConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"create-confluence-page\")\n .description(\"Create a new page in a Confluence space. Requires space key, page title, and content (in HTML storage format).\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"create\")\n .tag(\"write\")\n .usageNotes(\"Use this to create new documentation pages. Content should be in Confluence storage format (HTML). Get the space key from list-confluence-spaces first. Be mindful of creating duplicate pages.\")\n .requires([\"list-confluence-spaces\"])\n .schema(z.object({\n space_key: z.string().describe(\"The space key where the page will be created (e.g., 'AI', 'BL3')\"),\n title: z.string().describe(\"The title of the new page\"),\n content: z.string().describe(\"The page content in HTML format (Confluence storage format)\"),\n parent_page_id: z.string().optional().describe(\"Optional parent page ID to create this as a child page\"),\n }))\n .implement(async ({ space_key, title, content, parent_page_id }) => {\n logger.info('create-confluence-page called', { space_key, title, hasParent: !!parent_page_id });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n const pageData: any = {\n type: \"page\",\n title: title,\n space: { key: space_key },\n body: {\n storage: {\n value: content,\n representation: \"storage\",\n },\n },\n };\n\n // Add parent if specified\n if (parent_page_id) {\n pageData.ancestors = [{ id: parent_page_id }];\n }\n\n const response = await axios.post(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content`,\n pageData,\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('create-confluence-page result', {\n page_id: response.data.id,\n title: response.data.title,\n space: space_key\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: response.data.id,\n title: response.data.title,\n space: space_key,\n url: `${ATLASSIAN_SITE_URL}/wiki${response.data._links.webui}`,\n version: response.data.version?.number || 1,\n },\n });\n } catch (error: any) {\n logger.error('create-confluence-page error', {\n space_key,\n title,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Update an existing Confluence page\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the updateConfluencePage tool with the provided auth and logger\n */\nexport function createUpdateConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"update-confluence-page\")\n .description(\"Update an existing Confluence page's content. Requires page ID, new title, and new content.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"update\")\n .tag(\"write\")\n .usageNotes(\"Use this to update existing documentation. You must provide the page ID (from search results). The tool will automatically handle version incrementing. Always get the current page content first to avoid overwriting important information.\")\n .requires([\"get-confluence-page\"])\n .schema(z.object({\n page_id: z.string().describe(\"The ID of the page to update\"),\n title: z.string().describe(\"The new title for the page\"),\n content: z.string().describe(\"The new content in HTML format (Confluence storage format)\"),\n }))\n .implement(async ({ page_id, title, content }) => {\n logger.info('update-confluence-page called', { page_id, title });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n // First, get the current version\n const getResponse = await axios.get(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n headers: {\n Authorization: getAuthHeader(),\n },\n params: { expand: \"version\" },\n }\n );\n\n const currentVersion = getResponse.data.version.number;\n\n // Update the page\n const updateResponse = await axios.put(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n type: \"page\",\n title: title,\n version: { number: currentVersion + 1 },\n body: {\n storage: {\n value: content,\n representation: \"storage\",\n },\n },\n },\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('update-confluence-page result', {\n page_id,\n title: updateResponse.data.title,\n previousVersion: currentVersion,\n newVersion: updateResponse.data.version.number\n });\n\n return JSON.stringify({\n success: true,\n page: {\n id: updateResponse.data.id,\n title: updateResponse.data.title,\n url: `${ATLASSIAN_SITE_URL}/wiki${updateResponse.data._links.webui}`,\n version: updateResponse.data.version.number,\n previousVersion: currentVersion,\n },\n });\n } catch (error: any) {\n logger.error('update-confluence-page error', {\n page_id,\n title,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Archive a Confluence page (move to trash)\n */\n\nimport { toolBuilder, ToolCategory, type Tool, type Logger } from \"@agentforge/core\";\nimport { z } from \"zod\";\nimport axios from \"axios\";\nimport type { ConfluenceAuth } from \"../types.js\";\n\n/**\n * Create the archiveConfluencePage tool with the provided auth and logger\n */\nexport function createArchiveConfluencePageTool(\n getAuth: () => ConfluenceAuth,\n getAuthHeader: () => string,\n logger: Logger\n) {\n return toolBuilder()\n .name(\"archive-confluence-page\")\n .description(\"Archive a Confluence page by moving it to trash. The page can be restored by space admins. Note: UI may require a note explaining why the page was archived.\")\n .category(ToolCategory.WEB)\n .tag(\"confluence\")\n .tag(\"archive\")\n .tag(\"delete\")\n .usageNotes(\"Use this to archive outdated or obsolete documentation. The page is moved to trash, not permanently deleted. Space admins can restore it if needed. Be very careful - only archive pages that are truly obsolete.\")\n .conflicts([\"create-confluence-page\"])\n .schema(z.object({\n page_id: z.string().describe(\"The ID of the page to archive\"),\n reason: z.string().optional().describe(\"Optional reason for archiving (for audit trail)\"),\n }))\n .implement(async ({ page_id, reason }) => {\n logger.info('archive-confluence-page called', { page_id, reason });\n\n try {\n const { ATLASSIAN_SITE_URL } = getAuth();\n\n // Get current page data\n const getResponse = await axios.get(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n headers: {\n Authorization: getAuthHeader(),\n },\n params: { expand: \"version,body.storage,space\" },\n }\n );\n\n const currentVersion = getResponse.data.version.number;\n const pageData = getResponse.data;\n\n // Archive by updating status to 'trashed'\n await axios.put(\n `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,\n {\n version: { number: currentVersion + 1 },\n title: pageData.title,\n type: \"page\",\n status: \"trashed\",\n body: pageData.body,\n space: { key: pageData.space.key },\n },\n {\n headers: {\n Authorization: getAuthHeader(),\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n logger.info('archive-confluence-page result', {\n page_id,\n title: pageData.title,\n previousVersion: currentVersion,\n newVersion: currentVersion + 1\n });\n\n return JSON.stringify({\n success: true,\n archived: {\n id: page_id,\n title: pageData.title,\n previousVersion: currentVersion,\n newVersion: currentVersion + 1,\n reason: reason || \"Archived via API\",\n note: \"Page moved to trash. Space admins can restore it from the Confluence UI.\",\n },\n });\n } catch (error: any) {\n logger.error('archive-confluence-page error', {\n page_id,\n error: error.response?.data?.message || error.message,\n status: error.response?.status\n });\n\n return JSON.stringify({\n success: false,\n error: error.response?.data?.message || error.message,\n });\n }\n })\n .build();\n}\n\n","/**\n * Confluence Integration Tools\n * Real integration with Atlassian Confluence for knowledge base access\n *\n * @packageDocumentation\n *\n * @example\n * ```ts\n * // Using environment variables\n * import { confluenceTools } from '@agentforge/tools';\n *\n * // ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL must be set\n * const result = await confluenceTools[0].execute({\n * query: 'space=AI AND type=page'\n * });\n *\n * // Using factory function with custom config\n * import { createConfluenceTools } from '@agentforge/tools';\n *\n * const tools = createConfluenceTools({\n * apiKey: 'your-api-key',\n * email: 'your-email@example.com',\n * siteUrl: 'https://your-domain.atlassian.net'\n * });\n *\n * const result = await tools.searchConfluence.execute({\n * query: 'payment processing'\n * });\n * ```\n */\n\nimport { createLogger, LogLevel } from \"@agentforge/core\";\nimport { getConfig, getAuthHeader, createGetConfiguredAuth, createGetConfiguredAuthHeader } from \"./auth.js\";\nimport { createSearchConfluenceTool } from \"./tools/search-confluence.js\";\nimport { createGetConfluencePageTool } from \"./tools/get-confluence-page.js\";\nimport { createListConfluenceSpacesTool } from \"./tools/list-confluence-spaces.js\";\nimport { createGetSpacePagesTool } from \"./tools/get-space-pages.js\";\nimport { createCreateConfluencePageTool } from \"./tools/create-confluence-page.js\";\nimport { createUpdateConfluencePageTool } from \"./tools/update-confluence-page.js\";\nimport { createArchiveConfluencePageTool } from \"./tools/archive-confluence-page.js\";\n\n// Export types\nexport type { ConfluenceToolsConfig, ConfluenceAuth } from \"./types.js\";\n\n// Create logger for default Confluence tools\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('[tools:confluence]', { level: logLevel });\n\n/**\n * Default Confluence tools using environment variables\n */\nexport const searchConfluence = createSearchConfluenceTool(getConfig, getAuthHeader, logger);\nexport const getConfluencePage = createGetConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const listConfluenceSpaces = createListConfluenceSpacesTool(getConfig, getAuthHeader, logger);\nexport const getSpacePages = createGetSpacePagesTool(getConfig, getAuthHeader, logger);\nexport const createConfluencePage = createCreateConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const updateConfluencePage = createUpdateConfluencePageTool(getConfig, getAuthHeader, logger);\nexport const archiveConfluencePage = createArchiveConfluencePageTool(getConfig, getAuthHeader, logger);\n\n/**\n * Export all Confluence tools\n *\n * Includes 7 tools for Confluence integration:\n * - 4 read tools: search, get-page, list-spaces, get-space-pages\n * - 3 write tools: create-page, update-page, archive-page\n */\nexport const confluenceTools = [\n // Read tools\n searchConfluence,\n getConfluencePage,\n listConfluenceSpaces,\n getSpacePages,\n // Write tools\n createConfluencePage,\n updateConfluencePage,\n archiveConfluencePage,\n];\n\n/**\n * Create Confluence tools with custom configuration\n *\n * This factory function allows you to create Confluence tools with programmatic configuration\n * instead of relying solely on environment variables.\n *\n * @param config - Optional configuration for Confluence tools\n * @returns Object containing all 7 Confluence tools configured with the provided settings\n *\n * @example\n * ```ts\n * // Create tools with custom credentials\n * const tools = createConfluenceTools({\n * apiKey: 'your-api-key',\n * email: 'your-email@example.com',\n * siteUrl: 'https://your-domain.atlassian.net'\n * });\n *\n * // Use the tools\n * const result = await tools.searchConfluence.execute({\n * query: 'payment processing'\n * });\n * ```\n *\n * @example\n * ```ts\n * // Create tools with custom log level\n * const tools = createConfluenceTools({\n * logLevel: LogLevel.DEBUG\n * });\n * ```\n */\nexport function createConfluenceTools(config: import(\"./types.js\").ConfluenceToolsConfig = {}) {\n const {\n apiKey,\n email,\n siteUrl,\n logLevel: customLogLevel,\n } = config;\n\n // Create closures for getting configured auth credentials\n const getConfiguredAuth = createGetConfiguredAuth(apiKey, email, siteUrl);\n const getConfiguredAuthHeader = createGetConfiguredAuthHeader(getConfiguredAuth);\n\n // Create logger with custom log level if provided\n const toolLogger = customLogLevel\n ? createLogger('tools:confluence', { level: customLogLevel })\n : logger;\n\n // Build all 7 tools with configured auth/logger\n const searchConfluence = createSearchConfluenceTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const getConfluencePage = createGetConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const listConfluenceSpaces = createListConfluenceSpacesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const getSpacePages = createGetSpacePagesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const createConfluencePage = createCreateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const updateConfluencePage = createUpdateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n const archiveConfluencePage = createArchiveConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);\n\n // Return all configured tools\n return {\n searchConfluence,\n getConfluencePage,\n listConfluenceSpaces,\n getSpacePages,\n createConfluencePage,\n updateConfluencePage,\n archiveConfluencePage,\n };\n}\n\n","/**\n * CSV Tools Types\n * \n * Type definitions and schemas for CSV tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * CSV parser schema\n */\nexport const csvParserSchema = z.object({\n csv: z.string().describe('CSV string to parse'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n hasHeaders: z.boolean().default(true).describe('First row contains column headers'),\n skipEmptyLines: z.boolean().default(true).describe('Skip empty lines in the CSV'),\n trim: z.boolean().default(true).describe('Trim whitespace from values'),\n});\n\n/**\n * CSV generator schema\n */\nexport const csvGeneratorSchema = z.object({\n data: z.array(z.record(z.any().describe('Column value'))).describe('Array of objects to convert to CSV'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n includeHeaders: z.boolean().default(true).describe('Include header row with column names'),\n columns: z.array(z.string().describe(\"String value\")).optional().describe('Optional list of columns to include (in order)'),\n});\n\n/**\n * CSV to JSON schema\n */\nexport const csvToJsonSchema = z.object({\n csv: z.string().describe('CSV string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n});\n\n/**\n * JSON to CSV schema\n */\nexport const jsonToCsvSchema = z.object({\n json: z.string().describe('JSON array string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n});\n\n/**\n * CSV tools configuration\n */\nexport interface CsvToolsConfig {\n defaultDelimiter?: string;\n defaultHasHeaders?: boolean;\n defaultSkipEmptyLines?: boolean;\n defaultTrim?: boolean;\n}\n\n","/**\n * CSV Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { parse } from 'csv-parse/sync';\nimport { csvParserSchema } from '../types.js';\n\n/**\n * Create CSV parser tool\n */\nexport function createCsvParserTool(\n defaultDelimiter = ',',\n defaultHasHeaders = true,\n defaultSkipEmptyLines = true,\n defaultTrim = true\n) {\n return toolBuilder()\n .name('csv-parser')\n .description('Parse CSV string into an array of objects. Supports custom delimiters, headers, and options.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'parse', 'data', 'table'])\n .schema(csvParserSchema)\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter ?? defaultDelimiter,\n columns: input.hasHeaders ?? defaultHasHeaders,\n skip_empty_lines: input.skipEmptyLines ?? defaultSkipEmptyLines,\n trim: input.trim ?? defaultTrim,\n relax_column_count: true,\n });\n\n return {\n success: true,\n data: records,\n rowCount: records.length,\n columnCount: records.length > 0 ? Object.keys(records[0]).length : 0,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { stringify } from 'csv-stringify/sync';\nimport { csvGeneratorSchema } from '../types.js';\n\n/**\n * Create CSV generator tool\n */\nexport function createCsvGeneratorTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('csv-generator')\n .description('Convert an array of objects to CSV string. Automatically extracts headers from object keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'generate', 'stringify', 'data'])\n .schema(csvGeneratorSchema)\n .implement(async (input) => {\n try {\n const csv = stringify(input.data, {\n delimiter: input.delimiter ?? defaultDelimiter,\n header: input.includeHeaders,\n columns: input.columns,\n });\n\n return {\n success: true,\n csv,\n rowCount: input.data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV to JSON Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { parse } from 'csv-parse/sync';\nimport { csvToJsonSchema } from '../types.js';\n\n/**\n * Create CSV to JSON converter tool\n */\nexport function createCsvToJsonTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('csv-to-json')\n .description('Convert CSV string to JSON array. Each row becomes an object with column headers as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'json', 'convert', 'data'])\n .schema(csvToJsonSchema)\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter ?? defaultDelimiter,\n columns: true,\n skip_empty_lines: true,\n trim: true,\n });\n\n const json = input.pretty \n ? JSON.stringify(records, null, 2)\n : JSON.stringify(records);\n\n return {\n success: true,\n json,\n recordCount: records.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert CSV to JSON',\n };\n }\n })\n .build();\n}\n\n","/**\n * JSON to CSV Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { stringify } from 'csv-stringify/sync';\nimport { jsonToCsvSchema } from '../types.js';\n\n/**\n * Create JSON to CSV converter tool\n */\nexport function createJsonToCsvTool(defaultDelimiter = ',') {\n return toolBuilder()\n .name('json-to-csv')\n .description('Convert JSON array to CSV string. Each object becomes a row with keys as column headers.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'csv', 'convert', 'data'])\n .schema(jsonToCsvSchema)\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n \n if (!Array.isArray(data)) {\n return {\n success: false,\n error: 'Input must be a JSON array',\n };\n }\n\n const csv = stringify(data, {\n delimiter: input.delimiter ?? defaultDelimiter,\n header: true,\n });\n\n return {\n success: true,\n csv,\n rowCount: data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to CSV',\n };\n }\n })\n .build();\n}\n\n","/**\n * CSV Tools\n * \n * Tools for parsing and generating CSV data.\n */\n\nexport * from './types.js';\nexport { createCsvParserTool } from './tools/csv-parser.js';\nexport { createCsvGeneratorTool } from './tools/csv-generator.js';\nexport { createCsvToJsonTool } from './tools/csv-to-json.js';\nexport { createJsonToCsvTool } from './tools/json-to-csv.js';\n\nimport { createCsvParserTool } from './tools/csv-parser.js';\nimport { createCsvGeneratorTool } from './tools/csv-generator.js';\nimport { createCsvToJsonTool } from './tools/csv-to-json.js';\nimport { createJsonToCsvTool } from './tools/json-to-csv.js';\nimport type { CsvToolsConfig } from './types.js';\n\n/**\n * Default CSV parser tool instance\n */\nexport const csvParser = createCsvParserTool();\n\n/**\n * Default CSV generator tool instance\n */\nexport const csvGenerator = createCsvGeneratorTool();\n\n/**\n * Default CSV to JSON converter tool instance\n */\nexport const csvToJson = createCsvToJsonTool();\n\n/**\n * Default JSON to CSV converter tool instance\n */\nexport const jsonToCsv = createJsonToCsvTool();\n\n/**\n * All CSV tools\n */\nexport const csvTools = [csvParser, csvGenerator, csvToJson, jsonToCsv];\n\n/**\n * Create CSV tools with custom configuration\n */\nexport function createCsvTools(config: CsvToolsConfig = {}) {\n const {\n defaultDelimiter = ',',\n defaultHasHeaders = true,\n defaultSkipEmptyLines = true,\n defaultTrim = true,\n } = config;\n\n return [\n createCsvParserTool(defaultDelimiter, defaultHasHeaders, defaultSkipEmptyLines, defaultTrim),\n createCsvGeneratorTool(defaultDelimiter),\n createCsvToJsonTool(defaultDelimiter),\n createJsonToCsvTool(defaultDelimiter),\n ];\n}\n\n","/**\n * JSON Tools Types\n * \n * Type definitions and schemas for JSON tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * JSON parser schema\n */\nexport const jsonParserSchema = z.object({\n json: z.string().describe('JSON string to parse'),\n strict: z.boolean().default(true).describe('Use strict JSON parsing (no trailing commas, etc.)'),\n});\n\n/**\n * JSON stringify schema\n */\nexport const jsonStringifySchema = z.object({\n data: z.any().describe('Data to convert to JSON string'),\n pretty: z.boolean().default(false).describe('Format with indentation for readability'),\n indent: z.number().default(2).describe('Number of spaces for indentation (when pretty is true)'),\n});\n\n/**\n * JSON query schema\n */\nexport const jsonQuerySchema = z.object({\n data: z.any().describe('JSON data to query'),\n path: z.string().describe('Dot notation path to query (e.g., \"user.name\" or \"items[0].id\")'),\n});\n\n/**\n * JSON validator schema\n */\nexport const jsonValidatorSchema = z.object({\n json: z.string().describe('JSON string to validate'),\n});\n\n/**\n * JSON merge schema\n */\nexport const jsonMergeSchema = z.object({\n objects: z.array(z.any().describe('Object to merge')).describe('Array of objects to merge'),\n deep: z.boolean().default(false).describe('Perform deep merge (nested objects)'),\n});\n\n/**\n * JSON tools configuration\n */\nexport interface JsonToolsConfig {\n defaultIndent?: number;\n defaultPretty?: boolean;\n}\n\n","/**\n * JSON Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonParserSchema } from '../types.js';\n\n/**\n * Create JSON parser tool\n */\nexport function createJsonParserTool() {\n return toolBuilder()\n .name('json-parser')\n .description('Parse JSON string into an object. Validates JSON syntax and returns parsed data or error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'parse', 'data'])\n .schema(jsonParserSchema)\n .implementSafe(async (input) => {\n const parsed = JSON.parse(input.json);\n return {\n data: parsed,\n type: Array.isArray(parsed) ? 'array' : typeof parsed,\n };\n })\n .build();\n}\n\n","/**\n * JSON Stringify Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonStringifySchema } from '../types.js';\n\n/**\n * Create JSON stringify tool\n */\nexport function createJsonStringifyTool(defaultIndent = 2, defaultPretty = false) {\n return toolBuilder()\n .name('json-stringify')\n .description('Convert an object to a JSON string with optional formatting (pretty print).')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'stringify', 'format', 'data'])\n .schema(jsonStringifySchema)\n .implementSafe(async (input) => {\n const pretty = input.pretty ?? defaultPretty;\n const indent = input.indent ?? defaultIndent;\n \n const json = pretty\n ? JSON.stringify(input.data, null, indent)\n : JSON.stringify(input.data);\n\n return {\n json,\n length: json.length,\n };\n })\n .build();\n}\n\n","/**\n * JSON Query Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonQuerySchema } from '../types.js';\n\n/**\n * Create JSON query tool\n */\nexport function createJsonQueryTool() {\n return toolBuilder()\n .name('json-query')\n .description('Query JSON data using dot notation path (e.g., \"user.address.city\"). Supports array indexing.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'query', 'path', 'data'])\n .schema(jsonQuerySchema)\n .implementSafe(async (input) => {\n const parts = input.path.split('.');\n let current = input.data;\n\n for (const part of parts) {\n // Handle array indexing: items[0]\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n current = current[key][parseInt(index, 10)];\n } else {\n current = current[part];\n }\n\n if (current === undefined) {\n throw new Error(`Path not found: ${input.path}`);\n }\n }\n\n return {\n value: current,\n type: Array.isArray(current) ? 'array' : typeof current,\n };\n })\n .build();\n}\n\n","/**\n * JSON Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonValidatorSchema } from '../types.js';\n\n/**\n * Create JSON validator tool\n */\nexport function createJsonValidatorTool() {\n return toolBuilder()\n .name('json-validator')\n .description('Validate JSON string syntax without parsing. Returns whether the JSON is valid and any error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'validate', 'check', 'data'])\n .schema(jsonValidatorSchema)\n .implementSafe(async (input) => {\n JSON.parse(input.json);\n return {\n valid: true,\n message: 'Valid JSON',\n };\n })\n .build();\n}\n\n","/**\n * JSON Merge Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { jsonMergeSchema } from '../types.js';\n\n/**\n * Create JSON merge tool\n */\nexport function createJsonMergeTool() {\n return toolBuilder()\n .name('json-merge')\n .description('Merge two or more JSON objects. Later objects override earlier ones for conflicting keys.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'merge', 'combine', 'data'])\n .schema(jsonMergeSchema)\n .implement(async (input) => {\n if (input.deep) {\n // Deep merge\n const deepMerge = (target: any, source: any): any => {\n const output = { ...target };\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n output[key] = deepMerge(output[key] || {}, source[key]);\n } else {\n output[key] = source[key];\n }\n }\n return output;\n };\n \n return input.objects.reduce((acc, obj) => deepMerge(acc, obj), {});\n } else {\n // Shallow merge\n return Object.assign({}, ...input.objects);\n }\n })\n .build();\n}\n\n","/**\n * JSON Tools\n * \n * Tools for parsing, validating, transforming, and querying JSON data.\n */\n\nexport * from './types.js';\nexport { createJsonParserTool } from './tools/json-parser.js';\nexport { createJsonStringifyTool } from './tools/json-stringify.js';\nexport { createJsonQueryTool } from './tools/json-query.js';\nexport { createJsonValidatorTool } from './tools/json-validator.js';\nexport { createJsonMergeTool } from './tools/json-merge.js';\n\nimport { createJsonParserTool } from './tools/json-parser.js';\nimport { createJsonStringifyTool } from './tools/json-stringify.js';\nimport { createJsonQueryTool } from './tools/json-query.js';\nimport { createJsonValidatorTool } from './tools/json-validator.js';\nimport { createJsonMergeTool } from './tools/json-merge.js';\nimport type { JsonToolsConfig } from './types.js';\n\n/**\n * Default JSON parser tool instance\n */\nexport const jsonParser = createJsonParserTool();\n\n/**\n * Default JSON stringify tool instance\n */\nexport const jsonStringify = createJsonStringifyTool();\n\n/**\n * Default JSON query tool instance\n */\nexport const jsonQuery = createJsonQueryTool();\n\n/**\n * Default JSON validator tool instance\n */\nexport const jsonValidator = createJsonValidatorTool();\n\n/**\n * Default JSON merge tool instance\n */\nexport const jsonMerge = createJsonMergeTool();\n\n/**\n * All JSON tools\n */\nexport const jsonTools = [jsonParser, jsonStringify, jsonQuery, jsonValidator, jsonMerge];\n\n/**\n * Create JSON tools with custom configuration\n */\nexport function createJsonTools(config: JsonToolsConfig = {}) {\n const {\n defaultIndent = 2,\n defaultPretty = false,\n } = config;\n\n return [\n createJsonParserTool(),\n createJsonStringifyTool(defaultIndent, defaultPretty),\n createJsonQueryTool(),\n createJsonValidatorTool(),\n createJsonMergeTool(),\n ];\n}\n\n","/**\n * XML Tools Types\n * \n * Type definitions and schemas for XML tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * XML parser schema\n */\nexport const xmlParserSchema = z.object({\n xml: z.string().describe('XML string to parse'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes'),\n parseAttributeValue: z.boolean().default(true).describe('Parse attribute values (numbers, booleans)'),\n trimValues: z.boolean().default(true).describe('Trim whitespace from text values'),\n});\n\n/**\n * XML generator schema\n */\nexport const xmlGeneratorSchema = z.object({\n data: z.any().describe('Object to convert to XML'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n indentSize: z.number().default(2).describe('Number of spaces for indentation (when format is true)'),\n});\n\n/**\n * XML to JSON schema\n */\nexport const xmlToJsonSchema = z.object({\n xml: z.string().describe('XML string to convert'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes in conversion'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n});\n\n/**\n * JSON to XML schema\n */\nexport const jsonToXmlSchema = z.object({\n json: z.string().describe('JSON string to convert'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n});\n\n/**\n * XML tools configuration\n */\nexport interface XmlToolsConfig {\n defaultRootName?: string;\n defaultFormat?: boolean;\n defaultIndentSize?: number;\n}\n\n","/**\n * XML Parser Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLParser } from 'fast-xml-parser';\nimport { xmlParserSchema } from '../types.js';\n\n/**\n * Create XML parser tool\n */\nexport function createXmlParserTool() {\n return toolBuilder()\n .name('xml-parser')\n .description('Parse XML string into a JavaScript object. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'parse', 'data'])\n .schema(xmlParserSchema)\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: input.parseAttributeValue,\n trimValues: input.trimValues,\n parseTagValue: true,\n });\n\n const result = parser.parse(input.xml);\n\n return {\n success: true,\n data: result,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLBuilder } from 'fast-xml-parser';\nimport { xmlGeneratorSchema } from '../types.js';\n\n/**\n * Create XML generator tool\n */\nexport function createXmlGeneratorTool(defaultRootName = 'root', defaultFormat = false, defaultIndentSize = 2) {\n return toolBuilder()\n .name('xml-generator')\n .description('Convert a JavaScript object to XML string. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'generate', 'stringify', 'data'])\n .schema(xmlGeneratorSchema)\n .implement(async (input) => {\n try {\n const indentSize = input.indentSize ?? defaultIndentSize;\n const rootName = input.rootName ?? defaultRootName;\n const format = input.format ?? defaultFormat;\n\n const builder = new XMLBuilder({\n format,\n indentBy: ' '.repeat(indentSize),\n ignoreAttributes: false,\n });\n\n // Wrap data in root element if not already wrapped\n const dataToConvert = input.data[rootName] ? input.data : { [rootName]: input.data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML to JSON Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLParser } from 'fast-xml-parser';\nimport { xmlToJsonSchema } from '../types.js';\n\n/**\n * Create XML to JSON converter tool\n */\nexport function createXmlToJsonTool() {\n return toolBuilder()\n .name('xml-to-json')\n .description('Convert XML string to JSON. Preserves structure and can include or exclude attributes.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'json', 'convert', 'data'])\n .schema(xmlToJsonSchema)\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: true,\n trimValues: true,\n });\n\n const result = parser.parse(input.xml);\n const json = input.pretty \n ? JSON.stringify(result, null, 2)\n : JSON.stringify(result);\n\n return {\n success: true,\n json,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert XML to JSON',\n };\n }\n })\n .build();\n}\n\n","/**\n * JSON to XML Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { XMLBuilder } from 'fast-xml-parser';\nimport { jsonToXmlSchema } from '../types.js';\n\n/**\n * Create JSON to XML converter tool\n */\nexport function createJsonToXmlTool(defaultRootName = 'root', defaultFormat = false) {\n return toolBuilder()\n .name('json-to-xml')\n .description('Convert JSON string to XML. Each object key becomes an XML element.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'xml', 'convert', 'data'])\n .schema(jsonToXmlSchema)\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n const rootName = input.rootName ?? defaultRootName;\n const format = input.format ?? defaultFormat;\n\n const builder = new XMLBuilder({\n format,\n indentBy: ' ',\n ignoreAttributes: false,\n });\n\n const dataToConvert = data[rootName] ? data : { [rootName]: data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to XML',\n };\n }\n })\n .build();\n}\n\n","/**\n * XML Tools\n * \n * Tools for parsing and generating XML data.\n */\n\nexport * from './types.js';\nexport { createXmlParserTool } from './tools/xml-parser.js';\nexport { createXmlGeneratorTool } from './tools/xml-generator.js';\nexport { createXmlToJsonTool } from './tools/xml-to-json.js';\nexport { createJsonToXmlTool } from './tools/json-to-xml.js';\n\nimport { createXmlParserTool } from './tools/xml-parser.js';\nimport { createXmlGeneratorTool } from './tools/xml-generator.js';\nimport { createXmlToJsonTool } from './tools/xml-to-json.js';\nimport { createJsonToXmlTool } from './tools/json-to-xml.js';\nimport type { XmlToolsConfig } from './types.js';\n\n/**\n * Default XML parser tool instance\n */\nexport const xmlParser = createXmlParserTool();\n\n/**\n * Default XML generator tool instance\n */\nexport const xmlGenerator = createXmlGeneratorTool();\n\n/**\n * Default XML to JSON converter tool instance\n */\nexport const xmlToJson = createXmlToJsonTool();\n\n/**\n * Default JSON to XML converter tool instance\n */\nexport const jsonToXml = createJsonToXmlTool();\n\n/**\n * All XML tools\n */\nexport const xmlTools = [xmlParser, xmlGenerator, xmlToJson, jsonToXml];\n\n/**\n * Create XML tools with custom configuration\n */\nexport function createXmlTools(config: XmlToolsConfig = {}) {\n const {\n defaultRootName = 'root',\n defaultFormat = false,\n defaultIndentSize = 2,\n } = config;\n\n return [\n createXmlParserTool(),\n createXmlGeneratorTool(defaultRootName, defaultFormat, defaultIndentSize),\n createXmlToJsonTool(),\n createJsonToXmlTool(defaultRootName, defaultFormat),\n ];\n}\n\n","/**\n * Data Transformer Tools Types\n * \n * Type definitions and schemas for data transformation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Array filter schema\n */\nexport const arrayFilterSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to filter'),\n property: z.string().describe('Property name to filter by (use dot notation for nested properties)'),\n operator: z.enum(['equals', 'not-equals', 'greater-than', 'less-than', 'contains', 'starts-with', 'ends-with']).describe('Comparison operator'),\n value: z.any().describe('Value to compare against'),\n});\n\n/**\n * Array map schema\n */\nexport const arrayMapSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to map'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to extract from each object'),\n});\n\n/**\n * Array sort schema\n */\nexport const arraySortSchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to sort'),\n property: z.string().describe('Property name to sort by (use dot notation for nested properties)'),\n order: z.enum(['asc', 'desc']).default('asc').describe('Sort order: ascending or descending'),\n});\n\n/**\n * Array group by schema\n */\nexport const arrayGroupBySchema = z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to group'),\n property: z.string().describe('Property name to group by'),\n});\n\n/**\n * Object pick schema\n */\nexport const objectPickSchema = z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to pick'),\n});\n\n/**\n * Object omit schema\n */\nexport const objectOmitSchema = z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to omit'),\n});\n\n/**\n * Transformer tools configuration\n */\nexport interface TransformerToolsConfig {\n // No specific configuration needed for transformer tools\n}\n\n","/**\n * Array Filter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayFilterSchema } from '../types.js';\n\n/**\n * Create array filter tool\n */\nexport function createArrayFilterTool() {\n return toolBuilder()\n .name('array-filter')\n .description('Filter an array based on a property value. Supports equality, comparison, and contains operations.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'filter', 'data', 'transform'])\n .schema(arrayFilterSchema)\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const filtered = input.array.filter((item) => {\n const itemValue = getNestedValue(item, input.property);\n \n switch (input.operator) {\n case 'equals':\n return itemValue === input.value;\n case 'not-equals':\n return itemValue !== input.value;\n case 'greater-than':\n return itemValue > input.value;\n case 'less-than':\n return itemValue < input.value;\n case 'contains':\n return String(itemValue).includes(String(input.value));\n case 'starts-with':\n return String(itemValue).startsWith(String(input.value));\n case 'ends-with':\n return String(itemValue).endsWith(String(input.value));\n default:\n return false;\n }\n });\n\n return {\n filtered,\n originalCount: input.array.length,\n filteredCount: filtered.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Map Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayMapSchema } from '../types.js';\n\n/**\n * Create array map tool\n */\nexport function createArrayMapTool() {\n return toolBuilder()\n .name('array-map')\n .description('Extract specific properties from each object in an array. Creates a new array with only the selected properties.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'map', 'data', 'transform'])\n .schema(arrayMapSchema)\n .implement(async (input) => {\n const mapped = input.array.map((item) => {\n const result: any = {};\n for (const prop of input.properties) {\n // Support dot notation\n const value = prop.split('.').reduce((current, key) => current?.[key], item);\n result[prop] = value;\n }\n return result;\n });\n\n return {\n mapped,\n count: mapped.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Sort Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arraySortSchema } from '../types.js';\n\n/**\n * Create array sort tool\n */\nexport function createArraySortTool() {\n return toolBuilder()\n .name('array-sort')\n .description('Sort an array by a property value. Supports ascending and descending order.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'sort', 'data', 'transform'])\n .schema(arraySortSchema)\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const sorted = [...input.array].sort((a, b) => {\n const aValue = getNestedValue(a, input.property);\n const bValue = getNestedValue(b, input.property);\n \n if (aValue < bValue) return input.order === 'asc' ? -1 : 1;\n if (aValue > bValue) return input.order === 'asc' ? 1 : -1;\n return 0;\n });\n\n return {\n sorted,\n count: sorted.length,\n };\n })\n .build();\n}\n\n","/**\n * Array Group By Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { arrayGroupBySchema } from '../types.js';\n\n/**\n * Create array group by tool\n */\nexport function createArrayGroupByTool() {\n return toolBuilder()\n .name('array-group-by')\n .description('Group an array of objects by a property value. Returns an object with groups as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'group', 'data', 'transform'])\n .schema(arrayGroupBySchema)\n .implement(async (input) => {\n const groups: Record<string, any[]> = {};\n \n for (const item of input.array) {\n const key = String(item[input.property]);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n }\n\n return {\n groups,\n groupCount: Object.keys(groups).length,\n totalItems: input.array.length,\n };\n })\n .build();\n}\n\n","/**\n * Object Pick Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { objectPickSchema } from '../types.js';\n\n/**\n * Create object pick tool\n */\nexport function createObjectPickTool() {\n return toolBuilder()\n .name('object-pick')\n .description('Create a new object with only the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'pick', 'data', 'transform'])\n .schema(objectPickSchema)\n .implement(async (input) => {\n const picked: Record<string, any> = {};\n \n for (const prop of input.properties) {\n if (prop in input.object) {\n picked[prop] = input.object[prop];\n }\n }\n\n return picked;\n })\n .build();\n}\n\n","/**\n * Object Omit Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { objectOmitSchema } from '../types.js';\n\n/**\n * Create object omit tool\n */\nexport function createObjectOmitTool() {\n return toolBuilder()\n .name('object-omit')\n .description('Create a new object excluding the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'omit', 'data', 'transform'])\n .schema(objectOmitSchema)\n .implement(async (input) => {\n const omitted: Record<string, any> = { ...input.object };\n \n for (const prop of input.properties) {\n delete omitted[prop];\n }\n\n return omitted;\n })\n .build();\n}\n\n","/**\n * Data Transformer Tools\n * \n * Tools for transforming, filtering, mapping, and manipulating data structures.\n */\n\nexport * from './types.js';\nexport { createArrayFilterTool } from './tools/array-filter.js';\nexport { createArrayMapTool } from './tools/array-map.js';\nexport { createArraySortTool } from './tools/array-sort.js';\nexport { createArrayGroupByTool } from './tools/array-group-by.js';\nexport { createObjectPickTool } from './tools/object-pick.js';\nexport { createObjectOmitTool } from './tools/object-omit.js';\n\nimport { createArrayFilterTool } from './tools/array-filter.js';\nimport { createArrayMapTool } from './tools/array-map.js';\nimport { createArraySortTool } from './tools/array-sort.js';\nimport { createArrayGroupByTool } from './tools/array-group-by.js';\nimport { createObjectPickTool } from './tools/object-pick.js';\nimport { createObjectOmitTool } from './tools/object-omit.js';\nimport type { TransformerToolsConfig } from './types.js';\n\n/**\n * Default array filter tool instance\n */\nexport const arrayFilter = createArrayFilterTool();\n\n/**\n * Default array map tool instance\n */\nexport const arrayMap = createArrayMapTool();\n\n/**\n * Default array sort tool instance\n */\nexport const arraySort = createArraySortTool();\n\n/**\n * Default array group by tool instance\n */\nexport const arrayGroupBy = createArrayGroupByTool();\n\n/**\n * Default object pick tool instance\n */\nexport const objectPick = createObjectPickTool();\n\n/**\n * Default object omit tool instance\n */\nexport const objectOmit = createObjectOmitTool();\n\n/**\n * All transformer tools\n */\nexport const transformerTools = [arrayFilter, arrayMap, arraySort, arrayGroupBy, objectPick, objectOmit];\n\n/**\n * Create transformer tools with custom configuration\n */\nexport function createTransformerTools(config: TransformerToolsConfig = {}) {\n return [\n createArrayFilterTool(),\n createArrayMapTool(),\n createArraySortTool(),\n createArrayGroupByTool(),\n createObjectPickTool(),\n createObjectOmitTool(),\n ];\n}\n\n","/**\n * Neo4j Tools Types\n * \n * Type definitions and schemas for Neo4j graph database tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Neo4j connection configuration\n */\nexport interface Neo4jConfig {\n uri: string;\n username: string;\n password: string;\n database?: string;\n maxConnectionPoolSize?: number;\n connectionTimeout?: number;\n}\n\n/**\n * Neo4j query schema\n */\nexport const neo4jQuerySchema = z.object({\n cypher: z.string().describe('Cypher query to execute'),\n parameters: z.record(z.any()).optional().describe('Query parameters for parameterized queries'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j get schema input schema\n */\nexport const neo4jGetSchemaSchema = z.object({\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j find nodes schema\n */\nexport const neo4jFindNodesSchema = z.object({\n label: z.string().describe('Node label to search for'),\n properties: z.record(z.any()).optional().describe('Properties to match (key-value pairs)'),\n limit: z.number().default(100).describe('Maximum number of nodes to return'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j traverse schema\n */\nexport const neo4jTraverseSchema = z.object({\n startNodeId: z.union([\n z.string().describe('Node ID as string'),\n z.number().describe('Node ID as number')\n ]).describe('ID of the starting node'),\n relationshipType: z.string().optional().describe('Type of relationship to follow (optional, follows all if not specified)'),\n direction: z.enum(['outgoing', 'incoming', 'both']).default('outgoing').describe('Direction to traverse'),\n maxDepth: z.number().default(1).describe('Maximum depth to traverse'),\n limit: z.number().default(100).describe('Maximum number of nodes to return'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j vector search schema\n */\nexport const neo4jVectorSearchSchema = z.object({\n indexName: z.string().describe('Name of the vector index to search'),\n queryVector: z.array(z.number().describe('Vector dimension value')).describe('Query vector for similarity search'),\n limit: z.number().default(10).describe('Maximum number of results to return'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j vector search with embedding schema\n */\nexport const neo4jVectorSearchWithEmbeddingSchema = z.object({\n indexName: z.string().describe('Name of the vector index to search'),\n queryText: z.string().describe('Text to generate embedding from for similarity search'),\n limit: z.number().default(10).describe('Maximum number of results to return'),\n model: z.string().optional().describe('Embedding model to use (defaults to configured model)'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j create node with embedding schema\n */\nexport const neo4jCreateNodeWithEmbeddingSchema = z.object({\n label: z.string().describe('Node label'),\n properties: z.record(z.string(), z.any().describe('Property value')).describe('Node properties (key-value pairs)'),\n textProperty: z.string().describe('Name of the property containing text to embed'),\n embeddingProperty: z.string().default('embedding').describe('Name of the property to store the embedding vector'),\n model: z.string().optional().describe('Embedding model to use (defaults to configured model)'),\n database: z.string().optional().describe('Database name (defaults to configured database)'),\n});\n\n/**\n * Neo4j node result\n */\nexport interface Neo4jNode {\n identity: string | number;\n labels: string[];\n properties: Record<string, any>;\n}\n\n/**\n * Neo4j relationship result\n */\nexport interface Neo4jRelationship {\n identity: string | number;\n type: string;\n start: string | number;\n end: string | number;\n properties: Record<string, any>;\n}\n\n/**\n * Neo4j path result\n */\nexport interface Neo4jPath {\n start: Neo4jNode;\n end: Neo4jNode;\n segments: Array<{\n start: Neo4jNode;\n relationship: Neo4jRelationship;\n end: Neo4jNode;\n }>;\n length: number;\n}\n\n/**\n * Neo4j schema information\n */\nexport interface Neo4jSchema {\n nodeLabels: string[];\n relationshipTypes: string[];\n propertyKeys: string[];\n constraints: Array<{\n label?: string;\n type: string;\n properties: string[];\n }>;\n indexes: Array<{\n label?: string;\n type: string;\n properties: string[];\n }>;\n}\n\n/**\n * Neo4j tools configuration\n */\nexport interface Neo4jToolsConfig {\n uri?: string;\n username?: string;\n password?: string;\n database?: string;\n maxConnectionPoolSize?: number;\n connectionTimeout?: number;\n}\n\n","/**\n * Neo4j Connection Pool Management\n *\n * Manages Neo4j driver connections with pooling and health checks.\n */\n\nimport neo4j, { Driver, Session, auth } from 'neo4j-driver';\nimport { createLogger } from '@agentforge/core';\nimport type { Neo4jConfig } from './types.js';\n\nconst logger = createLogger('agentforge:tools:neo4j:pool');\n\n/**\n * Neo4j connection pool singleton\n */\nclass Neo4jConnectionPool {\n private driver: Driver | null = null;\n private config: Neo4jConfig | null = null;\n\n /**\n * Initialize the connection pool\n */\n async initialize(config: Neo4jConfig): Promise<void> {\n const startTime = Date.now();\n\n logger.debug('Initializing Neo4j connection pool', {\n uri: config.uri,\n username: config.username,\n database: config.database || 'neo4j',\n maxConnectionPoolSize: config.maxConnectionPoolSize || 50,\n connectionTimeout: config.connectionTimeout || 30000,\n });\n\n if (this.driver) {\n logger.debug('Closing existing connection before reinitializing');\n await this.close();\n }\n\n this.config = config;\n this.driver = neo4j.driver(\n config.uri,\n auth.basic(config.username, config.password),\n {\n maxConnectionPoolSize: config.maxConnectionPoolSize || 50,\n connectionTimeout: config.connectionTimeout || 30000,\n }\n );\n\n // Verify connectivity\n await this.verifyConnectivity();\n\n logger.info('Neo4j connection pool initialized', {\n uri: config.uri,\n database: config.database || 'neo4j',\n duration: Date.now() - startTime,\n });\n }\n\n /**\n * Verify connectivity to Neo4j\n */\n async verifyConnectivity(): Promise<void> {\n if (!this.driver) {\n const error = 'Neo4j driver not initialized';\n logger.error(error);\n throw new Error(error);\n }\n\n logger.debug('Verifying Neo4j connectivity');\n\n try {\n await this.driver.verifyConnectivity();\n logger.debug('Neo4j connectivity verified');\n } catch (error) {\n const errorMessage = `Failed to connect to Neo4j: ${error instanceof Error ? error.message : 'Unknown error'}`;\n logger.error('Neo4j connectivity verification failed', {\n error: error instanceof Error ? error.message : 'Unknown error',\n uri: this.config?.uri,\n });\n throw new Error(errorMessage);\n }\n }\n\n /**\n * Get a session for executing queries\n */\n getSession(database?: string): Session {\n if (!this.driver) {\n throw new Error('Neo4j driver not initialized. Call initialize() first.');\n }\n\n return this.driver.session({\n database: database || this.config?.database || 'neo4j',\n });\n }\n\n /**\n * Execute a query with automatic session management\n */\n async executeQuery<T = any>(\n cypher: string,\n parameters?: Record<string, any>,\n database?: string\n ): Promise<T[]> {\n const session = this.getSession(database);\n try {\n const result = await session.run(cypher, parameters);\n return result.records.map((record) => record.toObject() as T);\n } finally {\n await session.close();\n }\n }\n\n /**\n * Execute a read query\n */\n async executeReadQuery<T = any>(\n cypher: string,\n parameters?: Record<string, any>,\n database?: string\n ): Promise<T[]> {\n const session = this.getSession(database);\n try {\n const result = await session.executeRead((tx) => tx.run(cypher, parameters));\n return result.records.map((record) => record.toObject() as T);\n } finally {\n await session.close();\n }\n }\n\n /**\n * Execute a write query\n */\n async executeWriteQuery<T = any>(\n cypher: string,\n parameters?: Record<string, any>,\n database?: string\n ): Promise<T[]> {\n const session = this.getSession(database);\n try {\n const result = await session.executeWrite((tx) => tx.run(cypher, parameters));\n return result.records.map((record) => record.toObject() as T);\n } finally {\n await session.close();\n }\n }\n\n /**\n * Check if driver is initialized\n */\n isInitialized(): boolean {\n return this.driver !== null;\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Neo4jConfig | null {\n return this.config;\n }\n\n /**\n * Close the connection pool\n */\n async close(): Promise<void> {\n if (this.driver) {\n logger.debug('Closing Neo4j connection pool');\n await this.driver.close();\n this.driver = null;\n this.config = null;\n logger.info('Neo4j connection pool closed');\n }\n }\n}\n\n/**\n * Global connection pool instance\n */\nexport const neo4jPool = new Neo4jConnectionPool();\n\n/**\n * Initialize Neo4j connection from environment variables\n */\nexport async function initializeFromEnv(): Promise<void> {\n // Warn about missing environment variables\n if (!process.env.NEO4J_URI) {\n logger.warn('NEO4J_URI environment variable not set, using default', {\n default: 'bolt://localhost:7687',\n });\n }\n\n if (!process.env.NEO4J_USER) {\n logger.warn('NEO4J_USER environment variable not set, using default', {\n default: 'neo4j',\n });\n }\n\n if (!process.env.NEO4J_PASSWORD) {\n logger.warn('NEO4J_PASSWORD environment variable not set, using default', {\n default: 'password',\n });\n }\n\n if (!process.env.NEO4J_DATABASE) {\n logger.debug('NEO4J_DATABASE environment variable not set, using default', {\n default: 'neo4j',\n });\n }\n\n const config: Neo4jConfig = {\n uri: process.env.NEO4J_URI || 'bolt://localhost:7687',\n username: process.env.NEO4J_USER || 'neo4j',\n password: process.env.NEO4J_PASSWORD || 'password',\n database: process.env.NEO4J_DATABASE,\n };\n\n await neo4jPool.initialize(config);\n}\n\n","/**\n * Embedding Utilities\n *\n * Utility functions for embedding generation\n */\n\nimport type { EmbeddingRetryConfig } from './types.js';\n\n/**\n * Default retry configuration for embedding API calls\n */\nexport const DEFAULT_RETRY_CONFIG: EmbeddingRetryConfig = {\n maxRetries: 3,\n initialDelay: 1000, // 1 second\n maxDelay: 10000, // 10 seconds\n backoffMultiplier: 2,\n};\n\n/**\n * Check if error is retryable (network errors, timeouts, 5xx errors, rate limits)\n */\nexport function isRetryableError(error: any): boolean {\n // Network errors\n if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {\n return true;\n }\n\n // Timeout errors\n if (error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {\n return true;\n }\n\n // 5xx server errors (but not 4xx client errors)\n if (error.response?.status >= 500 && error.response?.status < 600) {\n return true;\n }\n\n // Rate limiting (429) - retryable with backoff\n if (error.response?.status === 429) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n config: EmbeddingRetryConfig = DEFAULT_RETRY_CONFIG\n): Promise<T> {\n let lastError: any;\n let delay = config.initialDelay;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: any) {\n lastError = error;\n\n // Don't retry if error is not retryable\n if (!isRetryableError(error)) {\n throw error;\n }\n\n // Don't retry if we've exhausted all attempts\n if (attempt === config.maxRetries) {\n break;\n }\n\n // Wait before retrying\n await sleep(delay);\n\n // Increase delay for next attempt (exponential backoff)\n delay = Math.min(delay * config.backoffMultiplier, config.maxDelay);\n }\n }\n\n // All retries exhausted\n throw lastError;\n}\n\n/**\n * Get OpenAI API key from environment\n */\nexport function getOpenAIApiKey(): string | undefined {\n return process.env.OPENAI_API_KEY;\n}\n\n/**\n * Get Cohere API key from environment\n */\nexport function getCohereApiKey(): string | undefined {\n return process.env.COHERE_API_KEY;\n}\n\n/**\n * Get HuggingFace API key from environment\n */\nexport function getHuggingFaceApiKey(): string | undefined {\n return process.env.HUGGINGFACE_API_KEY;\n}\n\n/**\n * Get Voyage AI API key from environment\n */\nexport function getVoyageApiKey(): string | undefined {\n return process.env.VOYAGE_API_KEY;\n}\n\n/**\n * Get Ollama base URL from environment (defaults to localhost)\n */\nexport function getOllamaBaseUrl(): string {\n return process.env.OLLAMA_BASE_URL || 'http://localhost:11434';\n}\n\n/**\n * Get embedding provider from environment (defaults to 'openai')\n */\nexport function getEmbeddingProvider(): string {\n return process.env.EMBEDDING_PROVIDER || 'openai';\n}\n\n/**\n * Get embedding model from environment\n */\nexport function getEmbeddingModel(): string | undefined {\n return process.env.EMBEDDING_MODEL;\n}\n\n/**\n * Validate text for embedding generation\n */\nexport function validateText(text: string): void {\n if (!text || text.trim().length === 0) {\n throw new Error('Text cannot be empty');\n }\n \n // Most embedding models have token limits (e.g., 8191 for OpenAI)\n // This is a rough character limit check\n if (text.length > 50000) {\n throw new Error('Text is too long for embedding generation (max ~50,000 characters)');\n }\n}\n\n/**\n * Validate batch of texts\n */\nexport function validateBatch(texts: string[]): void {\n if (!texts || texts.length === 0) {\n throw new Error('Batch cannot be empty');\n }\n \n if (texts.length > 2048) {\n throw new Error('Batch size too large (max 2048 texts)');\n }\n \n texts.forEach((text, index) => {\n try {\n validateText(text);\n } catch (error) {\n throw new Error(`Invalid text at index ${index}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n });\n}\n\n","/**\n * OpenAI Embedding Provider\n * \n * Generate embeddings using OpenAI's embedding models.\n * Requires OPENAI_API_KEY environment variable.\n * Get your API key at: https://platform.openai.com/api-keys\n */\n\nimport axios from 'axios';\nimport type { IEmbeddingProvider, EmbeddingResult, BatchEmbeddingResult } from '../types.js';\nimport { getOpenAIApiKey, retryWithBackoff, validateText, validateBatch } from '../utils.js';\n\n/**\n * OpenAI API response structure for embeddings\n */\ninterface OpenAIEmbeddingResponse {\n object: 'list';\n data: Array<{\n object: 'embedding';\n embedding: number[];\n index: number;\n }>;\n model: string;\n usage: {\n prompt_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * OpenAI embedding provider implementation\n */\nexport class OpenAIEmbeddingProvider implements IEmbeddingProvider {\n readonly name = 'openai' as const;\n readonly defaultModel = 'text-embedding-3-small';\n \n private apiKey: string | undefined;\n private readonly baseURL = 'https://api.openai.com/v1';\n\n constructor(apiKey?: string) {\n this.apiKey = apiKey || getOpenAIApiKey();\n }\n\n /**\n * Check if OpenAI is available (API key is set)\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n /**\n * Generate embedding for a single text\n */\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n if (!this.apiKey) {\n throw new Error(\n 'OpenAI API key not found. Set OPENAI_API_KEY environment variable. ' +\n 'Get your key at https://platform.openai.com/api-keys'\n );\n }\n\n validateText(text);\n\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<OpenAIEmbeddingResponse>(\n `${this.baseURL}/embeddings`,\n {\n input: text,\n model: modelToUse,\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n timeout: 30000, // 30 seconds\n }\n );\n\n const data = response.data;\n \n if (!data.data || data.data.length === 0) {\n throw new Error('No embedding returned from OpenAI');\n }\n\n return {\n embedding: data.data[0].embedding,\n model: data.model,\n dimensions: data.data[0].embedding.length,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n totalTokens: data.usage.total_tokens,\n },\n };\n } catch (error: any) {\n // Create error with helpful message while preserving metadata for retry logic\n let wrappedError: any;\n\n if (error.response?.status === 401) {\n wrappedError = new Error(\n 'Invalid OpenAI API key. Get your key at https://platform.openai.com/api-keys'\n );\n } else if (error.response?.status === 429) {\n wrappedError = new Error(\n 'OpenAI API rate limit exceeded. Please try again later or upgrade your plan.'\n );\n } else if (error.response?.status === 400) {\n wrappedError = new Error(\n `OpenAI API error: ${error.response.data?.error?.message || 'Bad request'}`\n );\n } else {\n wrappedError = new Error(`OpenAI embedding generation failed: ${error.message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n });\n }\n\n /**\n * Generate embeddings for multiple texts (batch)\n */\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n if (!this.apiKey) {\n throw new Error(\n 'OpenAI API key not found. Set OPENAI_API_KEY environment variable. ' +\n 'Get your key at https://platform.openai.com/api-keys'\n );\n }\n\n validateBatch(texts);\n\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<OpenAIEmbeddingResponse>(\n `${this.baseURL}/embeddings`,\n {\n input: texts,\n model: modelToUse,\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n timeout: 60000, // 60 seconds for batch\n }\n );\n\n const data = response.data;\n \n if (!data.data || data.data.length === 0) {\n throw new Error('No embeddings returned from OpenAI');\n }\n\n // Sort by index to ensure correct order\n const sortedData = data.data.sort((a, b) => a.index - b.index);\n\n return {\n embeddings: sortedData.map(item => item.embedding),\n model: data.model,\n dimensions: sortedData[0].embedding.length,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n totalTokens: data.usage.total_tokens,\n },\n };\n } catch (error: any) {\n // Create error with helpful message while preserving metadata for retry logic\n let wrappedError: any;\n\n if (error.response?.status === 401) {\n wrappedError = new Error(\n 'Invalid OpenAI API key. Get your key at https://platform.openai.com/api-keys'\n );\n } else if (error.response?.status === 429) {\n wrappedError = new Error(\n 'OpenAI API rate limit exceeded. Please try again later or upgrade your plan.'\n );\n } else if (error.response?.status === 400) {\n wrappedError = new Error(\n `OpenAI API error: ${error.response.data?.error?.message || 'Bad request'}`\n );\n } else {\n wrappedError = new Error(`OpenAI batch embedding generation failed: ${error.message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n });\n }\n}\n\n","/**\n * Cohere Embedding Provider\n * \n * Implementation of embedding generation using Cohere's API\n * https://docs.cohere.com/reference/embed\n */\n\nimport axios from 'axios';\nimport type { IEmbeddingProvider, EmbeddingResult, BatchEmbeddingResult } from '../types.js';\nimport { retryWithBackoff } from '../utils.js';\n\n/**\n * Cohere embedding provider\n */\nexport class CohereEmbeddingProvider implements IEmbeddingProvider {\n readonly name = 'cohere' as const;\n readonly defaultModel = 'embed-english-v3.0';\n\n private apiKey: string | undefined;\n private baseUrl = 'https://api.cohere.ai/v1';\n\n constructor(apiKey?: string, model?: string) {\n this.apiKey = apiKey;\n }\n\n /**\n * Check if Cohere is available (API key is set)\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n // Forward model parameter to batch method\n const result = await this.generateBatchEmbeddings([text], model);\n return {\n embedding: result.embeddings[0],\n model: result.model,\n dimensions: result.dimensions,\n usage: result.usage,\n };\n }\n\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post(\n `${this.baseUrl}/embed`,\n {\n texts,\n model: modelToUse,\n input_type: 'search_document', // For storing in vector DB\n embedding_types: ['float'],\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const embeddings = response.data.embeddings.float;\n const dimensions = embeddings[0]?.length || 0;\n\n return {\n embeddings,\n model: modelToUse,\n dimensions,\n usage: response.data.meta?.billed_units ? {\n promptTokens: response.data.meta.billed_units.input_tokens || 0,\n totalTokens: response.data.meta.billed_units.input_tokens || 0,\n } : undefined,\n };\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n const status = error.response?.status;\n const message = error.response?.data?.message || error.message;\n let wrappedError: any;\n\n if (status === 401) {\n wrappedError = new Error(`Cohere API authentication failed. Please check your COHERE_API_KEY. ${message}`);\n } else if (status === 429) {\n wrappedError = new Error(`Cohere API rate limit exceeded. ${message}`);\n } else if (status === 400) {\n wrappedError = new Error(`Cohere API request invalid: ${message}`);\n } else {\n wrappedError = new Error(`Cohere API error (${status}): ${message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n\n throw error;\n }\n });\n }\n}\n\n","/**\n * HuggingFace Embedding Provider\n * \n * Implementation of embedding generation using HuggingFace Inference API\n * https://huggingface.co/docs/api-inference/detailed_parameters#feature-extraction-task\n */\n\nimport axios from 'axios';\nimport type { IEmbeddingProvider, EmbeddingResult, BatchEmbeddingResult } from '../types.js';\nimport { retryWithBackoff } from '../utils.js';\n\n/**\n * HuggingFace embedding provider\n */\nexport class HuggingFaceEmbeddingProvider implements IEmbeddingProvider {\n readonly name = 'huggingface' as const;\n readonly defaultModel = 'sentence-transformers/all-MiniLM-L6-v2';\n\n private apiKey: string | undefined;\n private baseUrl = 'https://api-inference.huggingface.co/pipeline/feature-extraction';\n\n constructor(apiKey?: string, model?: string) {\n this.apiKey = apiKey;\n }\n\n /**\n * Check if HuggingFace is available (API key is set)\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post(\n `${this.baseUrl}/${modelToUse}`,\n {\n inputs: text,\n options: {\n wait_for_model: true,\n },\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n }\n );\n\n // HuggingFace returns the embedding directly as an array\n const embedding = Array.isArray(response.data) ? response.data : response.data[0];\n\n return {\n embedding,\n model: modelToUse,\n dimensions: embedding.length,\n };\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n const status = error.response?.status;\n const message = error.response?.data?.error || error.message;\n let wrappedError: any;\n\n if (status === 401) {\n wrappedError = new Error(`HuggingFace API authentication failed. Please check your HUGGINGFACE_API_KEY. ${message}`);\n } else if (status === 429) {\n wrappedError = new Error(`HuggingFace API rate limit exceeded. ${message}`);\n } else if (status === 400) {\n wrappedError = new Error(`HuggingFace API request invalid: ${message}`);\n } else if (status === 503) {\n wrappedError = new Error(`HuggingFace model is loading. Please retry in a moment. ${message}`);\n } else {\n wrappedError = new Error(`HuggingFace API error (${status}): ${message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n\n throw error;\n }\n });\n }\n\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post(\n `${this.baseUrl}/${modelToUse}`,\n {\n inputs: texts,\n options: {\n wait_for_model: true,\n },\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const embeddings = response.data;\n const dimensions = embeddings[0]?.length || 0;\n\n return {\n embeddings,\n model: modelToUse,\n dimensions,\n };\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n const status = error.response?.status;\n const message = error.response?.data?.error || error.message;\n let wrappedError: any;\n\n if (status === 401) {\n wrappedError = new Error(`HuggingFace API authentication failed. Please check your HUGGINGFACE_API_KEY. ${message}`);\n } else if (status === 429) {\n wrappedError = new Error(`HuggingFace API rate limit exceeded. ${message}`);\n } else if (status === 400) {\n wrappedError = new Error(`HuggingFace API request invalid: ${message}`);\n } else if (status === 503) {\n wrappedError = new Error(`HuggingFace model is loading. Please retry in a moment. ${message}`);\n } else {\n wrappedError = new Error(`HuggingFace API error (${status}): ${message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n\n throw error;\n }\n });\n }\n}\n\n","/**\n * Voyage AI Embedding Provider\n * \n * Implementation of embedding generation using Voyage AI's API\n * https://docs.voyageai.com/docs/embeddings\n */\n\nimport axios from 'axios';\nimport type { IEmbeddingProvider, EmbeddingResult, BatchEmbeddingResult } from '../types.js';\nimport { retryWithBackoff } from '../utils.js';\n\n/**\n * Voyage AI embedding provider\n */\nexport class VoyageEmbeddingProvider implements IEmbeddingProvider {\n readonly name = 'voyage' as const;\n readonly defaultModel = 'voyage-2';\n\n private apiKey: string | undefined;\n private baseUrl = 'https://api.voyageai.com/v1';\n\n constructor(apiKey?: string, model?: string) {\n this.apiKey = apiKey;\n }\n\n /**\n * Check if Voyage AI is available (API key is set)\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n const result = await this.generateBatchEmbeddings([text], model);\n return {\n embedding: result.embeddings[0],\n model: result.model,\n dimensions: result.dimensions,\n usage: result.usage,\n };\n }\n\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post(\n `${this.baseUrl}/embeddings`,\n {\n input: texts,\n model: modelToUse,\n input_type: 'document', // For storing in vector DB\n },\n {\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const embeddings = response.data.data.map((item: any) => item.embedding);\n const dimensions = embeddings[0]?.length || 0;\n\n return {\n embeddings,\n model: modelToUse,\n dimensions,\n usage: response.data.usage ? {\n promptTokens: response.data.usage.total_tokens || 0,\n totalTokens: response.data.usage.total_tokens || 0,\n } : undefined,\n };\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n const status = error.response?.status;\n const message = error.response?.data?.message || error.message;\n let wrappedError: any;\n\n if (status === 401) {\n wrappedError = new Error(`Voyage AI API authentication failed. Please check your VOYAGE_API_KEY. ${message}`);\n } else if (status === 429) {\n wrappedError = new Error(`Voyage AI API rate limit exceeded. ${message}`);\n } else if (status === 400) {\n wrappedError = new Error(`Voyage AI API request invalid: ${message}`);\n } else {\n wrappedError = new Error(`Voyage AI API error (${status}): ${message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n\n throw error;\n }\n });\n }\n}\n\n","/**\n * Ollama Embedding Provider\n * \n * Implementation of embedding generation using Ollama (local embeddings)\n * https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings\n */\n\nimport axios from 'axios';\nimport type { IEmbeddingProvider, EmbeddingResult, BatchEmbeddingResult } from '../types.js';\nimport { retryWithBackoff } from '../utils.js';\n\n/**\n * Ollama embedding provider (local, privacy-focused)\n */\nexport class OllamaEmbeddingProvider implements IEmbeddingProvider {\n readonly name = 'ollama' as const;\n readonly defaultModel = 'nomic-embed-text';\n\n private baseUrl: string;\n\n constructor(model?: string, baseUrl: string = 'http://localhost:11434') {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Check if Ollama is available (always true for local service)\n */\n isAvailable(): boolean {\n return true; // Ollama is local, no API key needed\n }\n\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post(\n `${this.baseUrl}/api/embeddings`,\n {\n model: modelToUse,\n prompt: text,\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const embedding = response.data.embedding;\n\n return {\n embedding,\n model: modelToUse,\n dimensions: embedding.length,\n };\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n const status = error.response?.status;\n const message = error.response?.data?.error || error.message;\n let wrappedError: any;\n\n if (error.code === 'ECONNREFUSED') {\n wrappedError = new Error(`Cannot connect to Ollama at ${this.baseUrl}. Make sure Ollama is running locally.`);\n } else if (status === 404) {\n wrappedError = new Error(`Ollama model not found. Pull it with: ollama pull <model-name>`);\n } else if (status === 400) {\n wrappedError = new Error(`Ollama API request invalid: ${message}`);\n } else {\n wrappedError = new Error(`Ollama API error (${status}): ${message}`);\n }\n\n // Preserve error metadata for retry logic\n if (error.code) wrappedError.code = error.code;\n if (error.response) wrappedError.response = error.response;\n\n throw wrappedError;\n }\n\n throw error;\n }\n });\n }\n\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n const modelToUse = model || this.defaultModel;\n\n // Ollama doesn't support batch embeddings, so we'll call individually\n const embeddings: number[][] = [];\n\n for (const text of texts) {\n const result = await this.generateEmbedding(text, modelToUse);\n embeddings.push(result.embedding);\n }\n\n const dimensions = embeddings[0]?.length || 0;\n\n return {\n embeddings,\n model: modelToUse,\n dimensions,\n };\n }\n}\n\n","/**\n * Embedding Manager\n *\n * Manages embedding generation across different providers\n */\n\nimport { createLogger } from '@agentforge/core';\nimport type { IEmbeddingProvider, EmbeddingProvider, EmbeddingConfig, EmbeddingResult, BatchEmbeddingResult } from './types.js';\nimport { OpenAIEmbeddingProvider } from './providers/openai.js';\nimport { CohereEmbeddingProvider } from './providers/cohere.js';\nimport { HuggingFaceEmbeddingProvider } from './providers/huggingface.js';\nimport { VoyageEmbeddingProvider } from './providers/voyage.js';\nimport { OllamaEmbeddingProvider } from './providers/ollama.js';\nimport {\n getEmbeddingProvider,\n getEmbeddingModel,\n getOpenAIApiKey,\n getCohereApiKey,\n getHuggingFaceApiKey,\n getVoyageApiKey,\n getOllamaBaseUrl,\n} from './utils.js';\n\nconst logger = createLogger('agentforge:tools:neo4j:embeddings');\n\n/**\n * Singleton embedding manager\n */\nexport class EmbeddingManager {\n private provider: IEmbeddingProvider | null = null;\n private config: EmbeddingConfig | null = null;\n\n /**\n * Initialize with configuration\n */\n initialize(config: EmbeddingConfig): void {\n logger.debug('Initializing embedding manager', {\n provider: config.provider,\n model: config.model,\n });\n\n this.config = config;\n this.provider = this.createProvider(config.provider, config.apiKey);\n\n logger.info('Embedding manager initialized', {\n provider: config.provider,\n model: config.model || this.getDefaultModel(config.provider),\n });\n }\n\n /**\n * Initialize from environment variables\n */\n initializeFromEnv(): void {\n const providerName = getEmbeddingProvider() as EmbeddingProvider;\n const model = getEmbeddingModel();\n\n logger.debug('Initializing embedding manager from environment', {\n provider: providerName,\n model: model || this.getDefaultModel(providerName),\n });\n\n // Get API key based on provider\n let apiKey = '';\n let baseUrl = '';\n\n switch (providerName) {\n case 'openai': {\n const key = getOpenAIApiKey();\n if (!key) {\n logger.error('OPENAI_API_KEY environment variable not set', {\n provider: 'openai',\n required: true,\n });\n throw new Error('OPENAI_API_KEY environment variable is required for OpenAI embeddings');\n }\n apiKey = key;\n logger.debug('OpenAI API key found');\n break;\n }\n\n case 'cohere': {\n const key = getCohereApiKey();\n if (!key) {\n logger.error('COHERE_API_KEY environment variable not set', {\n provider: 'cohere',\n required: true,\n });\n throw new Error('COHERE_API_KEY environment variable is required for Cohere embeddings');\n }\n apiKey = key;\n logger.debug('Cohere API key found');\n break;\n }\n\n case 'huggingface': {\n const key = getHuggingFaceApiKey();\n if (!key) {\n logger.error('HUGGINGFACE_API_KEY environment variable not set', {\n provider: 'huggingface',\n required: true,\n });\n throw new Error('HUGGINGFACE_API_KEY environment variable is required for HuggingFace embeddings');\n }\n apiKey = key;\n logger.debug('HuggingFace API key found');\n break;\n }\n\n case 'voyage': {\n const key = getVoyageApiKey();\n if (!key) {\n logger.error('VOYAGE_API_KEY environment variable not set', {\n provider: 'voyage',\n required: true,\n });\n throw new Error('VOYAGE_API_KEY environment variable is required for Voyage AI embeddings');\n }\n apiKey = key;\n logger.debug('Voyage API key found');\n break;\n }\n\n case 'ollama':\n baseUrl = getOllamaBaseUrl();\n logger.debug('Using Ollama (local, no API key required)', {\n baseUrl: baseUrl || 'http://localhost:11434',\n });\n // Ollama doesn't require an API key (local)\n break;\n\n default:\n logger.error('Unknown embedding provider', {\n provider: providerName,\n });\n throw new Error(`Unknown embedding provider: ${providerName}`);\n }\n\n // Create provider\n this.provider = this.createProvider(providerName, apiKey, model, baseUrl);\n this.config = {\n provider: providerName,\n model: model || this.getDefaultModel(providerName),\n apiKey: '', // Not stored when using env\n };\n\n logger.info('Embedding manager initialized from environment', {\n provider: providerName,\n model: this.config.model,\n });\n }\n\n /**\n * Check if manager is initialized\n */\n isInitialized(): boolean {\n return this.provider !== null && this.config !== null;\n }\n\n /**\n * Get current provider\n */\n getProvider(): IEmbeddingProvider {\n if (!this.provider) {\n throw new Error('Embedding manager not initialized. Call initialize() or initializeFromEnv() first.');\n }\n return this.provider;\n }\n\n /**\n * Get current configuration\n */\n getConfig(): EmbeddingConfig {\n if (!this.config) {\n throw new Error('Embedding manager not initialized. Call initialize() or initializeFromEnv() first.');\n }\n return this.config;\n }\n\n /**\n * Generate embedding for a single text\n */\n async generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n const startTime = Date.now();\n const provider = this.getProvider();\n const config = this.getConfig();\n\n // Use provided model, fall back to configured model, then provider default\n const modelToUse = model || config.model;\n\n logger.debug('Generating embedding', {\n provider: provider.name,\n model: modelToUse,\n textLength: text.length,\n });\n\n // Pass model parameter to provider\n const result = await provider.generateEmbedding(text, modelToUse);\n\n logger.info('Embedding generated', {\n provider: provider.name,\n model: result.model,\n dimensions: result.dimensions,\n duration: Date.now() - startTime,\n });\n\n return result;\n }\n\n /**\n * Generate embeddings for multiple texts (batch)\n */\n async generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n const startTime = Date.now();\n const provider = this.getProvider();\n const config = this.getConfig();\n\n // Use provided model, fall back to configured model, then provider default\n const modelToUse = model || config.model;\n\n logger.debug('Generating batch embeddings', {\n provider: provider.name,\n model: modelToUse,\n count: texts.length,\n });\n\n // Pass model parameter to provider\n const result = await provider.generateBatchEmbeddings(texts, modelToUse);\n\n logger.info('Batch embeddings generated', {\n provider: provider.name,\n model: result.model,\n dimensions: result.dimensions,\n count: texts.length,\n duration: Date.now() - startTime,\n });\n\n return result;\n }\n\n /**\n * Get default model for a provider\n */\n private getDefaultModel(provider: EmbeddingProvider): string {\n switch (provider) {\n case 'openai':\n return 'text-embedding-3-small';\n case 'cohere':\n return 'embed-english-v3.0';\n case 'huggingface':\n return 'sentence-transformers/all-MiniLM-L6-v2';\n case 'voyage':\n return 'voyage-2';\n case 'ollama':\n return 'nomic-embed-text';\n default:\n return 'text-embedding-3-small';\n }\n }\n\n /**\n * Create a provider instance\n */\n private createProvider(\n providerName: EmbeddingProvider,\n apiKey?: string,\n model?: string,\n baseUrl?: string\n ): IEmbeddingProvider {\n switch (providerName) {\n case 'openai':\n return new OpenAIEmbeddingProvider(apiKey);\n\n case 'cohere':\n return new CohereEmbeddingProvider(apiKey);\n\n case 'huggingface':\n return new HuggingFaceEmbeddingProvider(apiKey);\n\n case 'voyage':\n return new VoyageEmbeddingProvider(apiKey);\n\n case 'ollama':\n return new OllamaEmbeddingProvider(model, baseUrl || 'http://localhost:11434');\n\n default:\n throw new Error(`Unknown embedding provider: ${providerName}`);\n }\n }\n\n /**\n * Reset the manager (for testing)\n */\n reset(): void {\n this.provider = null;\n this.config = null;\n }\n}\n\n/**\n * Singleton instance\n */\nexport const embeddingManager = new EmbeddingManager();\n\n/**\n * Initialize embedding manager from environment variables\n */\nexport function initializeEmbeddings(): void {\n embeddingManager.initializeFromEnv();\n}\n\n/**\n * Initialize embedding manager with custom configuration\n */\nexport function initializeEmbeddingsWithConfig(config: EmbeddingConfig): void {\n embeddingManager.initialize(config);\n}\n\n/**\n * Generate embedding for a single text\n */\nexport async function generateEmbedding(text: string, model?: string): Promise<EmbeddingResult> {\n return embeddingManager.generateEmbedding(text, model);\n}\n\n/**\n * Generate embeddings for multiple texts (batch)\n */\nexport async function generateBatchEmbeddings(texts: string[], model?: string): Promise<BatchEmbeddingResult> {\n return embeddingManager.generateBatchEmbeddings(texts, model);\n}\n\n","/**\n * Neo4j Result Formatter\n * \n * Utilities for formatting Neo4j query results into JSON-serializable objects.\n */\n\nimport { Node, Relationship, Path, Integer } from 'neo4j-driver';\nimport type { Neo4jNode, Neo4jRelationship, Neo4jPath } from '../types.js';\n\n/**\n * Convert Neo4j Integer to JavaScript number or string\n */\nexport function formatInteger(value: Integer): number | string {\n if (value.inSafeRange()) {\n return value.toNumber();\n }\n return value.toString();\n}\n\n/**\n * Format any Neo4j value to JSON-serializable format\n */\nexport function formatValue(value: any): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n // Handle Neo4j Integer\n if (value instanceof Integer) {\n return formatInteger(value);\n }\n\n // Handle Neo4j Node\n if (value instanceof Node) {\n return formatNode(value);\n }\n\n // Handle Neo4j Relationship\n if (value instanceof Relationship) {\n return formatRelationship(value);\n }\n\n // Handle Neo4j Path\n if (value instanceof Path) {\n return formatPath(value);\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map(formatValue);\n }\n\n // Handle objects\n if (typeof value === 'object') {\n const formatted: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n formatted[key] = formatValue(val);\n }\n return formatted;\n }\n\n return value;\n}\n\n/**\n * Format a Neo4j Node to a plain object\n */\nexport function formatNode(node: Node): Neo4jNode {\n return {\n identity: formatInteger(node.identity),\n labels: node.labels,\n properties: formatValue(node.properties),\n };\n}\n\n/**\n * Format a Neo4j Relationship to a plain object\n */\nexport function formatRelationship(rel: Relationship): Neo4jRelationship {\n return {\n identity: formatInteger(rel.identity),\n type: rel.type,\n start: formatInteger(rel.start),\n end: formatInteger(rel.end),\n properties: formatValue(rel.properties),\n };\n}\n\n/**\n * Format a Neo4j Path to a plain object\n */\nexport function formatPath(path: Path): Neo4jPath {\n return {\n start: formatNode(path.start),\n end: formatNode(path.end),\n segments: path.segments.map((segment) => ({\n start: formatNode(segment.start),\n relationship: formatRelationship(segment.relationship),\n end: formatNode(segment.end),\n })),\n length: path.length,\n };\n}\n\n/**\n * Format query results to JSON-serializable format\n */\nexport function formatResults(records: any[]): any[] {\n return records.map((record) => {\n const formatted: Record<string, any> = {};\n for (const key of record.keys) {\n formatted[key] = formatValue(record.get(key));\n }\n return formatted;\n });\n}\n\n","/**\n * Neo4j Query Tool\n *\n * Execute arbitrary Cypher queries against Neo4j database.\n */\n\nimport { toolBuilder, ToolCategory, createLogger } from '@agentforge/core';\nimport { neo4jQuerySchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\n\nconst logger = createLogger('agentforge:tools:neo4j:query');\n\n/**\n * Create Neo4j query tool\n */\nexport function createNeo4jQueryTool() {\n return toolBuilder()\n .name('neo4j-query')\n .description(\n 'Execute a Cypher query against the Neo4j graph database. ' +\n 'Supports parameterized queries for safety. Use this for complex queries, ' +\n 'graph traversals, and custom operations.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'cypher', 'query'])\n .schema(neo4jQuerySchema)\n .implement(async (input) => {\n if (!neo4jPool.isInitialized()) {\n logger.warn('Neo4j query attempted but connection not initialized');\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n const startTime = Date.now();\n\n logger.debug('Executing Neo4j query', {\n cypherPreview: input.cypher.substring(0, 100),\n parameterCount: Object.keys(input.parameters || {}).length,\n database: input.database,\n });\n\n try {\n const session = neo4jPool.getSession(input.database);\n\n try {\n const result = await session.run(input.cypher, input.parameters || {});\n const formattedResults = formatResults(result.records);\n const duration = Date.now() - startTime;\n\n logger.info('Neo4j query executed successfully', {\n recordCount: result.records.length,\n nodesCreated: result.summary.counters.updates().nodesCreated,\n nodesDeleted: result.summary.counters.updates().nodesDeleted,\n relationshipsCreated: result.summary.counters.updates().relationshipsCreated,\n relationshipsDeleted: result.summary.counters.updates().relationshipsDeleted,\n propertiesSet: result.summary.counters.updates().propertiesSet,\n duration,\n });\n\n return {\n success: true,\n data: formattedResults,\n recordCount: result.records.length,\n summary: {\n query: input.cypher,\n parameters: input.parameters,\n counters: {\n nodesCreated: result.summary.counters.updates().nodesCreated,\n nodesDeleted: result.summary.counters.updates().nodesDeleted,\n relationshipsCreated: result.summary.counters.updates().relationshipsCreated,\n relationshipsDeleted: result.summary.counters.updates().relationshipsDeleted,\n propertiesSet: result.summary.counters.updates().propertiesSet,\n },\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : 'Failed to execute query';\n\n logger.error('Neo4j query execution failed', {\n error: errorMessage,\n cypherPreview: input.cypher.substring(0, 100),\n duration,\n });\n\n return {\n success: false,\n error: errorMessage,\n query: input.cypher,\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Get Schema Tool\n * \n * Introspect the Neo4j graph schema to understand structure.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { neo4jGetSchemaSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\n\n/**\n * Create Neo4j get schema tool\n */\nexport function createNeo4jGetSchemaTool() {\n return toolBuilder()\n .name('neo4j-get-schema')\n .description(\n 'Get the schema of the Neo4j graph database including node labels, ' +\n 'relationship types, property keys, constraints, and indexes. ' +\n 'This helps understand the structure of the graph before querying.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'schema', 'introspection'])\n .schema(neo4jGetSchemaSchema)\n .implement(async (input) => {\n if (!neo4jPool.isInitialized()) {\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n try {\n const session = neo4jPool.getSession(input.database);\n \n try {\n // Get node labels\n const labelsResult = await session.run('CALL db.labels()');\n const nodeLabels = labelsResult.records.map((r) => r.get('label'));\n\n // Get relationship types\n const relTypesResult = await session.run('CALL db.relationshipTypes()');\n const relationshipTypes = relTypesResult.records.map((r) => r.get('relationshipType'));\n\n // Get property keys\n const propsResult = await session.run('CALL db.propertyKeys()');\n const propertyKeys = propsResult.records.map((r) => r.get('propertyKey'));\n\n // Get constraints\n const constraintsResult = await session.run('SHOW CONSTRAINTS');\n const constraints = constraintsResult.records.map((r) => ({\n name: r.get('name'),\n type: r.get('type'),\n entityType: r.get('entityType'),\n labelsOrTypes: r.get('labelsOrTypes'),\n properties: r.get('properties'),\n }));\n\n // Get indexes\n const indexesResult = await session.run('SHOW INDEXES');\n const indexes = indexesResult.records.map((r) => ({\n name: r.get('name'),\n type: r.get('type'),\n entityType: r.get('entityType'),\n labelsOrTypes: r.get('labelsOrTypes'),\n properties: r.get('properties'),\n }));\n\n return {\n success: true,\n schema: {\n nodeLabels,\n relationshipTypes,\n propertyKeys,\n constraints,\n indexes,\n },\n summary: {\n totalLabels: nodeLabels.length,\n totalRelationshipTypes: relationshipTypes.length,\n totalPropertyKeys: propertyKeys.length,\n totalConstraints: constraints.length,\n totalIndexes: indexes.length,\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to get schema',\n };\n }\n })\n .build();\n}\n\n","/**\n * Cypher Sanitization Utilities\n * \n * Provides safe escaping and validation for Cypher identifiers to prevent injection attacks.\n */\n\n/**\n * Validate and escape a Cypher identifier (label, property key, relationship type)\n * \n * Cypher identifiers must:\n * - Start with a letter or underscore\n * - Contain only letters, numbers, and underscores\n * - Be backtick-escaped if they contain special characters\n * \n * @param identifier - The identifier to validate and escape\n * @param type - Type of identifier for error messages\n * @returns Safely escaped identifier\n * @throws Error if identifier is invalid\n */\nexport function escapeCypherIdentifier(identifier: string, type: string = 'identifier'): string {\n if (!identifier || typeof identifier !== 'string') {\n throw new Error(`Invalid ${type}: must be a non-empty string`);\n }\n\n // Remove leading/trailing whitespace\n const trimmed = identifier.trim();\n \n if (trimmed.length === 0) {\n throw new Error(`Invalid ${type}: cannot be empty or whitespace`);\n }\n\n // Check for null bytes (security risk)\n if (trimmed.includes('\\0')) {\n throw new Error(`Invalid ${type}: cannot contain null bytes`);\n }\n\n // Simple alphanumeric + underscore pattern (safe without escaping)\n const simplePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n \n if (simplePattern.test(trimmed)) {\n // Safe to use without backticks\n return trimmed;\n }\n\n // For complex identifiers, use backtick escaping\n // Escape any backticks in the identifier by doubling them\n const escaped = trimmed.replace(/`/g, '``');\n \n return `\\`${escaped}\\``;\n}\n\n/**\n * Validate a label name\n */\nexport function validateLabel(label: string): string {\n return escapeCypherIdentifier(label, 'label');\n}\n\n/**\n * Validate a property key\n */\nexport function validatePropertyKey(key: string): string {\n return escapeCypherIdentifier(key, 'property key');\n}\n\n/**\n * Validate a relationship type\n */\nexport function validateRelationshipType(type: string): string {\n return escapeCypherIdentifier(type, 'relationship type');\n}\n\n/**\n * Validate an array of relationship types\n */\nexport function validateRelationshipTypes(types: string[]): string[] {\n if (!Array.isArray(types)) {\n throw new Error('Relationship types must be an array');\n }\n \n return types.map(type => validateRelationshipType(type));\n}\n\n/**\n * Validate direction parameter\n */\nexport function validateDirection(direction: string): 'OUTGOING' | 'INCOMING' | 'BOTH' {\n const normalized = direction.toUpperCase();\n \n if (normalized !== 'OUTGOING' && normalized !== 'INCOMING' && normalized !== 'BOTH') {\n throw new Error(`Invalid direction: must be 'OUTGOING', 'INCOMING', or 'BOTH'`);\n }\n \n return normalized as 'OUTGOING' | 'INCOMING' | 'BOTH';\n}\n\n/**\n * Build a safe property filter clause\n * \n * @param properties - Object with property key-value pairs\n * @param nodeVar - Variable name for the node (e.g., 'n')\n * @returns Object with WHERE clause and parameters\n */\nexport function buildPropertyFilter(\n properties: Record<string, any>,\n nodeVar: string = 'n'\n): { whereClause: string; parameters: Record<string, any> } {\n const keys = Object.keys(properties);\n \n if (keys.length === 0) {\n return { whereClause: '', parameters: {} };\n }\n\n // Validate node variable name\n const safeNodeVar = escapeCypherIdentifier(nodeVar, 'node variable');\n \n // Build WHERE conditions using parameters (safe from injection)\n const conditions = keys.map((key, index) => {\n const safeKey = validatePropertyKey(key);\n const paramName = `prop_${index}`;\n return `${safeNodeVar}.${safeKey} = $${paramName}`;\n });\n\n const parameters: Record<string, any> = {};\n keys.forEach((key, index) => {\n parameters[`prop_${index}`] = properties[key];\n });\n\n return {\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n parameters,\n };\n}\n\n","/**\n * Neo4j Find Nodes Tool\n *\n * Find nodes by label and properties.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { neo4jFindNodesSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\nimport { validateLabel, buildPropertyFilter } from '../utils/cypher-sanitizer.js';\n\n/**\n * Create Neo4j find nodes tool\n */\nexport function createNeo4jFindNodesTool() {\n return toolBuilder()\n .name('neo4j-find-nodes')\n .description(\n 'Find nodes in the Neo4j graph by label and optional property filters. ' +\n 'This is a simplified interface for common node lookup operations. ' +\n 'Returns nodes matching the specified criteria.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'nodes', 'search'])\n .schema(neo4jFindNodesSchema)\n .implement(async (input) => {\n if (!neo4jPool.isInitialized()) {\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n try {\n // Validate and escape the label to prevent injection\n const safeLabel = validateLabel(input.label);\n\n const session = neo4jPool.getSession(input.database);\n\n try {\n // Build the Cypher query with safe identifiers\n let cypher = `MATCH (n:${safeLabel})`;\n let parameters: Record<string, any> = {};\n\n // Add property filters if provided (using safe parameter binding)\n if (input.properties && Object.keys(input.properties).length > 0) {\n const { whereClause, parameters: filterParams } = buildPropertyFilter(input.properties, 'n');\n cypher += ` ${whereClause}`;\n parameters = { ...parameters, ...filterParams };\n }\n\n // Use parameter for limit to be extra safe\n cypher += ` RETURN n LIMIT $limit`;\n parameters.limit = input.limit;\n\n const result = await session.run(cypher, parameters);\n const formattedResults = formatResults(result.records);\n\n return {\n success: true,\n nodes: formattedResults.map((r) => r.n),\n count: result.records.length,\n query: {\n label: input.label,\n properties: input.properties,\n limit: input.limit,\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to find nodes',\n query: {\n label: input.label,\n properties: input.properties,\n },\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Traverse Tool\n *\n * Traverse the graph from a starting node following relationships.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { neo4jTraverseSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\nimport { validateRelationshipType, validateDirection } from '../utils/cypher-sanitizer.js';\n\n/**\n * Create Neo4j traverse tool\n */\nexport function createNeo4jTraverseTool() {\n return toolBuilder()\n .name('neo4j-traverse')\n .description(\n 'Traverse the Neo4j graph from a starting node by following relationships. ' +\n 'Supports filtering by relationship type, direction, and maximum depth. ' +\n 'Returns connected nodes and their relationships.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'traverse', 'relationships'])\n .schema(neo4jTraverseSchema)\n .implement(async (input) => {\n if (!neo4jPool.isInitialized()) {\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n try {\n // Validate direction (with default fallback)\n const safeDirection = validateDirection(input.direction || 'outgoing');\n\n // Validate relationship type if provided\n const safeRelType = input.relationshipType\n ? validateRelationshipType(input.relationshipType)\n : null;\n\n const session = neo4jPool.getSession(input.database);\n\n try {\n // Build relationship pattern based on direction with safe identifiers\n let relPattern = '';\n if (safeDirection === 'OUTGOING') {\n relPattern = safeRelType\n ? `-[r:${safeRelType}*1..${input.maxDepth}]->`\n : `-[r*1..${input.maxDepth}]->`;\n } else if (safeDirection === 'INCOMING') {\n relPattern = safeRelType\n ? `<-[r:${safeRelType}*1..${input.maxDepth}]-`\n : `<-[r*1..${input.maxDepth}]-`;\n } else {\n relPattern = safeRelType\n ? `-[r:${safeRelType}*1..${input.maxDepth}]-`\n : `-[r*1..${input.maxDepth}]-`;\n }\n\n // Build the Cypher query\n const cypher = `\n MATCH path = (start)${relPattern}(end)\n WHERE id(start) = $startNodeId\n RETURN start, end, relationships(path) as rels, length(path) as depth\n LIMIT $limit\n `;\n\n const parameters = {\n startNodeId: typeof input.startNodeId === 'string' \n ? parseInt(input.startNodeId, 10) \n : input.startNodeId,\n limit: input.limit,\n };\n\n const result = await session.run(cypher, parameters);\n const formattedResults = formatResults(result.records);\n\n return {\n success: true,\n paths: formattedResults.map((r) => ({\n start: r.start,\n end: r.end,\n relationships: r.rels,\n depth: r.depth,\n })),\n count: result.records.length,\n query: {\n startNodeId: input.startNodeId,\n relationshipType: input.relationshipType,\n direction: input.direction,\n maxDepth: input.maxDepth,\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to traverse graph',\n query: {\n startNodeId: input.startNodeId,\n relationshipType: input.relationshipType,\n direction: input.direction,\n },\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Vector Search Tool\n * \n * Perform semantic search using vector indexes for GraphRAG applications.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { neo4jVectorSearchSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\n\n/**\n * Create Neo4j vector search tool\n */\nexport function createNeo4jVectorSearchTool() {\n return toolBuilder()\n .name('neo4j-vector-search')\n .description(\n 'Perform semantic similarity search using vector indexes in Neo4j. ' +\n 'Essential for GraphRAG applications - finds nodes with similar embeddings. ' +\n 'Requires a vector index to be created in advance.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'vector', 'search', 'semantic', 'graphrag'])\n .schema(neo4jVectorSearchSchema)\n .implement(async (input) => {\n if (!neo4jPool.isInitialized()) {\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n try {\n const session = neo4jPool.getSession(input.database);\n \n try {\n // Use db.index.vector.queryNodes for vector similarity search\n const cypher = `\n CALL db.index.vector.queryNodes($indexName, $limit, $queryVector)\n YIELD node, score\n RETURN node, score\n ORDER BY score DESC\n `;\n\n const parameters = {\n indexName: input.indexName,\n limit: input.limit,\n queryVector: input.queryVector,\n };\n\n const result = await session.run(cypher, parameters);\n const formattedResults = formatResults(result.records);\n\n return {\n success: true,\n results: formattedResults.map((r) => ({\n node: r.node,\n score: r.score,\n })),\n count: result.records.length,\n query: {\n indexName: input.indexName,\n vectorDimension: input.queryVector.length,\n limit: input.limit,\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to perform vector search';\n \n // Provide helpful error messages for common issues\n let helpText = '';\n if (errorMessage.includes('index') || errorMessage.includes('not found')) {\n helpText = ' Make sure the vector index exists. Create one with: CREATE VECTOR INDEX <name> FOR (n:Label) ON (n.embedding)';\n }\n\n return {\n success: false,\n error: errorMessage + helpText,\n query: {\n indexName: input.indexName,\n vectorDimension: input.queryVector.length,\n },\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Vector Search with Embedding Tool\n *\n * Perform semantic search by automatically generating embeddings from text.\n * This tool combines embedding generation with vector search for easier GraphRAG.\n */\n\nimport { toolBuilder, ToolCategory, createLogger } from '@agentforge/core';\nimport { neo4jVectorSearchWithEmbeddingSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\nimport { embeddingManager } from '../embeddings/embedding-manager.js';\n\nconst logger = createLogger('agentforge:tools:neo4j:vector-search');\n\n/**\n * Create Neo4j vector search with embedding tool\n */\nexport function createNeo4jVectorSearchWithEmbeddingTool() {\n return toolBuilder()\n .name('neo4j-vector-search-with-embedding')\n .description(\n 'Perform semantic similarity search in Neo4j by automatically generating embeddings from text. ' +\n 'This tool takes text input, generates an embedding vector, and searches for similar nodes. ' +\n 'Essential for GraphRAG applications - no need to manually generate embeddings. ' +\n 'Requires a vector index and embedding provider (OpenAI) to be configured.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'vector', 'search', 'semantic', 'graphrag', 'embedding', 'ai'])\n .schema(neo4jVectorSearchWithEmbeddingSchema)\n .implement(async (input) => {\n // Check Neo4j connection\n if (!neo4jPool.isInitialized()) {\n logger.warn('Vector search attempted but Neo4j connection not initialized');\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n // Check embedding manager\n if (!embeddingManager.isInitialized()) {\n logger.warn('Vector search attempted but embedding manager not initialized');\n return {\n success: false,\n error: 'Embedding manager not initialized. Please configure embedding provider (set OPENAI_API_KEY and optionally EMBEDDING_MODEL).',\n };\n }\n\n const startTime = Date.now();\n\n logger.debug('Performing vector search with embedding', {\n queryTextLength: input.queryText.length,\n indexName: input.indexName,\n limit: input.limit,\n model: input.model,\n });\n\n try {\n // Generate embedding from text\n const embeddingResult = await embeddingManager.generateEmbedding(input.queryText, input.model);\n\n // Perform vector search\n const session = neo4jPool.getSession(input.database);\n\n try {\n // Use db.index.vector.queryNodes for vector similarity search\n const cypher = `\n CALL db.index.vector.queryNodes($indexName, $limit, $queryVector)\n YIELD node, score\n RETURN node, score\n ORDER BY score DESC\n `;\n\n const parameters = {\n indexName: input.indexName,\n limit: input.limit,\n queryVector: embeddingResult.embedding,\n };\n\n const result = await session.run(cypher, parameters);\n const formattedResults = formatResults(result.records);\n const duration = Date.now() - startTime;\n\n logger.info('Vector search completed successfully', {\n resultCount: result.records.length,\n indexName: input.indexName,\n embeddingModel: embeddingResult.model,\n embeddingDimensions: embeddingResult.dimensions,\n duration,\n });\n\n return {\n success: true,\n results: formattedResults.map((r) => ({\n node: r.node,\n score: r.score,\n })),\n count: result.records.length,\n query: {\n text: input.queryText,\n indexName: input.indexName,\n embeddingModel: embeddingResult.model,\n vectorDimension: embeddingResult.dimensions,\n limit: input.limit,\n },\n embedding: {\n model: embeddingResult.model,\n dimensions: embeddingResult.dimensions,\n usage: embeddingResult.usage,\n },\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : 'Failed to perform vector search with embedding';\n\n // Provide helpful error messages for common issues\n let helpText = '';\n if (errorMessage.includes('index') || errorMessage.includes('not found')) {\n helpText = ' Make sure the vector index exists. Create one with: CREATE VECTOR INDEX <name> FOR (n:Label) ON (n.embedding)';\n } else if (errorMessage.includes('API key') || errorMessage.includes('not initialized')) {\n helpText = ' Make sure OPENAI_API_KEY is set in your environment variables.';\n } else if (errorMessage.includes('dimension')) {\n helpText = ' Make sure the vector index dimensions match your embedding model dimensions.';\n }\n\n logger.error('Vector search failed', {\n error: errorMessage,\n indexName: input.indexName,\n queryTextLength: input.queryText.length,\n duration,\n });\n\n return {\n success: false,\n error: errorMessage + helpText,\n query: {\n text: input.queryText,\n indexName: input.indexName,\n },\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Create Node with Embedding Tool\n *\n * Create a node with automatic embedding generation from text content.\n * This tool simplifies GraphRAG setup by handling embedding generation automatically.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { neo4jCreateNodeWithEmbeddingSchema } from '../types.js';\nimport { neo4jPool } from '../connection.js';\nimport { formatResults } from '../utils/result-formatter.js';\nimport { embeddingManager } from '../embeddings/embedding-manager.js';\nimport { validateLabel, validatePropertyKey } from '../utils/cypher-sanitizer.js';\n\n/**\n * Create Neo4j create node with embedding tool\n */\nexport function createNeo4jCreateNodeWithEmbeddingTool() {\n return toolBuilder()\n .name('neo4j-create-node-with-embedding')\n .description(\n 'Create a Neo4j node with automatic embedding generation from text content. ' +\n 'This tool extracts text from a specified property, generates an embedding vector, ' +\n 'and stores both the original properties and the embedding in the node. ' +\n 'Perfect for building GraphRAG knowledge bases. ' +\n 'Requires embedding provider (OpenAI) to be configured.'\n )\n .category(ToolCategory.DATABASE)\n .tags(['neo4j', 'graph', 'database', 'create', 'node', 'embedding', 'graphrag', 'ai'])\n .schema(neo4jCreateNodeWithEmbeddingSchema)\n .implement(async (input) => {\n // Check Neo4j connection\n if (!neo4jPool.isInitialized()) {\n return {\n success: false,\n error: 'Neo4j connection not initialized. Please configure Neo4j connection first.',\n };\n }\n\n // Check embedding manager\n if (!embeddingManager.isInitialized()) {\n return {\n success: false,\n error: 'Embedding manager not initialized. Please configure embedding provider (set OPENAI_API_KEY and optionally EMBEDDING_MODEL).',\n };\n }\n\n try {\n // Extract text from properties\n const textToEmbed = input.properties[input.textProperty];\n \n if (!textToEmbed || typeof textToEmbed !== 'string') {\n return {\n success: false,\n error: `Property '${input.textProperty}' not found or is not a string in the provided properties.`,\n };\n }\n\n // Generate embedding from text\n const embeddingResult = await embeddingManager.generateEmbedding(textToEmbed, input.model);\n\n // Validate label and property names to prevent injection\n const safeLabel = validateLabel(input.label);\n const safeEmbeddingProp = validatePropertyKey(input.embeddingProperty || 'embedding');\n\n // Create node with properties and embedding\n const session = neo4jPool.getSession(input.database);\n\n try {\n // Build properties object with embedding\n const allProperties: Record<string, any> = {\n ...input.properties,\n };\n allProperties[input.embeddingProperty || 'embedding'] = embeddingResult.embedding;\n\n // Create the node with safe label\n const cypher = `\n CREATE (n:${safeLabel})\n SET n = $properties\n RETURN n, id(n) as nodeId\n `;\n\n const parameters = {\n properties: allProperties,\n };\n\n const result = await session.run(cypher, parameters);\n const formattedResults = formatResults(result.records);\n\n if (formattedResults.length === 0) {\n return {\n success: false,\n error: 'Failed to create node',\n };\n }\n\n const createdNode = formattedResults[0];\n\n return {\n success: true,\n node: createdNode.n,\n nodeId: createdNode.nodeId,\n embedding: {\n model: embeddingResult.model,\n dimensions: embeddingResult.dimensions,\n property: safeEmbeddingProp,\n usage: embeddingResult.usage,\n },\n message: `Created node with label '${input.label}' and ${embeddingResult.dimensions}-dimensional embedding`,\n };\n } finally {\n await session.close();\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to create node with embedding';\n \n // Provide helpful error messages for common issues\n let helpText = '';\n if (errorMessage.includes('API key') || errorMessage.includes('not initialized')) {\n helpText = ' Make sure OPENAI_API_KEY is set in your environment variables.';\n } else if (errorMessage.includes('Syntax error') || errorMessage.includes('Invalid')) {\n helpText = ' Check that the label and property names are valid.';\n }\n\n return {\n success: false,\n error: errorMessage + helpText,\n };\n }\n })\n .build();\n}\n\n","/**\n * Neo4j Tools\n *\n * Tools for interacting with Neo4j graph database.\n * Supports knowledge graphs, GraphRAG, and graph analytics.\n */\n\nexport * from './types.js';\nexport * from './connection.js';\nexport * from './embeddings/index.js';\nexport { createNeo4jQueryTool } from './tools/neo4j-query.js';\nexport { createNeo4jGetSchemaTool } from './tools/neo4j-get-schema.js';\nexport { createNeo4jFindNodesTool } from './tools/neo4j-find-nodes.js';\nexport { createNeo4jTraverseTool } from './tools/neo4j-traverse.js';\nexport { createNeo4jVectorSearchTool } from './tools/neo4j-vector-search.js';\nexport { createNeo4jVectorSearchWithEmbeddingTool } from './tools/neo4j-vector-search-with-embedding.js';\nexport { createNeo4jCreateNodeWithEmbeddingTool } from './tools/neo4j-create-node-with-embedding.js';\n\nimport { createNeo4jQueryTool } from './tools/neo4j-query.js';\nimport { createNeo4jGetSchemaTool } from './tools/neo4j-get-schema.js';\nimport { createNeo4jFindNodesTool } from './tools/neo4j-find-nodes.js';\nimport { createNeo4jTraverseTool } from './tools/neo4j-traverse.js';\nimport { createNeo4jVectorSearchTool } from './tools/neo4j-vector-search.js';\nimport { createNeo4jVectorSearchWithEmbeddingTool } from './tools/neo4j-vector-search-with-embedding.js';\nimport { createNeo4jCreateNodeWithEmbeddingTool } from './tools/neo4j-create-node-with-embedding.js';\nimport type { Neo4jToolsConfig } from './types.js';\nimport { neo4jPool, initializeFromEnv } from './connection.js';\nimport { embeddingManager } from './embeddings/embedding-manager.js';\n\n/**\n * Default Neo4j query tool instance\n */\nexport const neo4jQuery = createNeo4jQueryTool();\n\n/**\n * Default Neo4j get schema tool instance\n */\nexport const neo4jGetSchema = createNeo4jGetSchemaTool();\n\n/**\n * Default Neo4j find nodes tool instance\n */\nexport const neo4jFindNodes = createNeo4jFindNodesTool();\n\n/**\n * Default Neo4j traverse tool instance\n */\nexport const neo4jTraverse = createNeo4jTraverseTool();\n\n/**\n * Default Neo4j vector search tool instance\n */\nexport const neo4jVectorSearch = createNeo4jVectorSearchTool();\n\n/**\n * Default Neo4j vector search with embedding tool instance\n */\nexport const neo4jVectorSearchWithEmbedding = createNeo4jVectorSearchWithEmbeddingTool();\n\n/**\n * Default Neo4j create node with embedding tool instance\n */\nexport const neo4jCreateNodeWithEmbedding = createNeo4jCreateNodeWithEmbeddingTool();\n\n/**\n * All Neo4j tools (including embedding-enabled tools)\n */\nexport const neo4jTools = [\n neo4jQuery,\n neo4jGetSchema,\n neo4jFindNodes,\n neo4jTraverse,\n neo4jVectorSearch,\n neo4jVectorSearchWithEmbedding,\n neo4jCreateNodeWithEmbedding,\n];\n\n/**\n * Core Neo4j tools (without embedding features)\n */\nexport const neo4jCoreTools = [\n neo4jQuery,\n neo4jGetSchema,\n neo4jFindNodes,\n neo4jTraverse,\n neo4jVectorSearch,\n];\n\n/**\n * Create Neo4j tools with custom configuration\n */\nexport function createNeo4jTools(config: Neo4jToolsConfig = {}, includeEmbeddingTools: boolean = true) {\n // Initialize connection if config provided\n if (config.uri && config.username && config.password) {\n neo4jPool.initialize({\n uri: config.uri,\n username: config.username,\n password: config.password,\n database: config.database,\n maxConnectionPoolSize: config.maxConnectionPoolSize,\n connectionTimeout: config.connectionTimeout,\n }).catch((error) => {\n console.error('Failed to initialize Neo4j connection:', error);\n });\n }\n\n const coreTools = [\n createNeo4jQueryTool(),\n createNeo4jGetSchemaTool(),\n createNeo4jFindNodesTool(),\n createNeo4jTraverseTool(),\n createNeo4jVectorSearchTool(),\n ];\n\n if (includeEmbeddingTools) {\n return [\n ...coreTools,\n createNeo4jVectorSearchWithEmbeddingTool(),\n createNeo4jCreateNodeWithEmbeddingTool(),\n ];\n }\n\n return coreTools;\n}\n\n/**\n * Initialize Neo4j tools from environment variables\n *\n * Required environment variables:\n * - NEO4J_URI: Neo4j connection URI (e.g., bolt://localhost:7687)\n * - NEO4J_USER: Neo4j username\n * - NEO4J_PASSWORD: Neo4j password\n *\n * Optional environment variables:\n * - NEO4J_DATABASE: Database name (defaults to 'neo4j')\n *\n * For embedding-enabled tools, also set:\n * - OPENAI_API_KEY: OpenAI API key for embedding generation\n * - EMBEDDING_MODEL: Embedding model to use (defaults to 'text-embedding-3-small')\n * - EMBEDDING_PROVIDER: Embedding provider (defaults to 'openai')\n */\nexport async function initializeNeo4jTools(): Promise<void> {\n await initializeFromEnv();\n\n // Try to initialize embeddings (optional - will only work if API key is set)\n try {\n embeddingManager.initializeFromEnv();\n } catch (error) {\n // Embedding initialization is optional - tools will work without it\n // Only the embedding-enabled tools will fail if embeddings aren't configured\n }\n}\n\n","/**\n * File Operations Types\n * \n * Type definitions and schemas for file operation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * File reader schema\n */\nexport const fileReaderSchema = z.object({\n path: z.string().describe('Path to the file to read'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex', 'binary']).default('utf8').describe('File encoding'),\n});\n\n/**\n * File writer schema\n */\nexport const fileWriterSchema = z.object({\n path: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex']).default('utf8').describe('File encoding'),\n createDirs: z.boolean().default(false).describe('Create parent directories if they don\\'t exist'),\n});\n\n/**\n * File append schema\n */\nexport const fileAppendSchema = z.object({\n path: z.string().describe('Path to the file to append to'),\n content: z.string().describe('Content to append to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii']).default('utf8').describe('File encoding'),\n});\n\n/**\n * File delete schema\n */\nexport const fileDeleteSchema = z.object({\n path: z.string().describe('Path to the file to delete'),\n});\n\n/**\n * File exists schema\n */\nexport const fileExistsSchema = z.object({\n path: z.string().describe('Path to check'),\n});\n\n/**\n * File operations configuration\n */\nexport interface FileOperationsConfig {\n defaultEncoding?: 'utf8' | 'utf-8' | 'ascii' | 'base64' | 'hex';\n createDirsDefault?: boolean;\n}\n\n","/**\n * File Reader Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileReaderSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file reader tool\n */\nexport function createFileReaderTool(defaultEncoding: string = 'utf8') {\n return toolBuilder()\n .name('file-reader')\n .description('Read the contents of a file from the file system. Supports text and binary files with various encodings.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'read', 'io', 'filesystem'])\n .schema(fileReaderSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n const content = await fs.readFile(input.path, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n content,\n size: stats.size,\n path: input.path,\n encoding,\n };\n })\n .build();\n}\n\n","/**\n * File Writer Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileWriterSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create file writer tool\n */\nexport function createFileWriterTool(defaultEncoding: string = 'utf8', createDirsDefault: boolean = false) {\n return toolBuilder()\n .name('file-writer')\n .description('Write content to a file. Creates the file if it doesn\\'t exist, or overwrites it if it does.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'write', 'io', 'filesystem'])\n .schema(fileWriterSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n const createDirs = input.createDirs ?? createDirsDefault;\n\n // Create parent directories if requested\n if (createDirs) {\n const dir = path.dirname(input.path);\n await fs.mkdir(dir, { recursive: true });\n }\n\n await fs.writeFile(input.path, input.content, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n path: input.path,\n size: stats.size,\n encoding,\n };\n })\n .build();\n}\n\n","/**\n * File Append Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileAppendSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file append tool\n */\nexport function createFileAppendTool(defaultEncoding: string = 'utf8') {\n return toolBuilder()\n .name('file-append')\n .description('Append content to the end of a file. Creates the file if it doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'append', 'io', 'filesystem'])\n .schema(fileAppendSchema)\n .implementSafe(async (input) => {\n const encoding = input.encoding || defaultEncoding;\n await fs.appendFile(input.path, input.content, encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n path: input.path,\n size: stats.size,\n };\n })\n .build();\n}\n\n","/**\n * File Delete Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileDeleteSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file delete tool\n */\nexport function createFileDeleteTool() {\n return toolBuilder()\n .name('file-delete')\n .description('Delete a file from the file system. Returns an error if the file doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'delete', 'remove', 'filesystem'])\n .schema(fileDeleteSchema)\n .implementSafe(async (input) => {\n await fs.unlink(input.path);\n\n return {\n path: input.path,\n message: 'File deleted successfully',\n };\n })\n .build();\n}\n\n","/**\n * File Exists Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileExistsSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create file exists tool\n */\nexport function createFileExistsTool() {\n return toolBuilder()\n .name('file-exists')\n .description('Check if a file or directory exists at the specified path.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'exists', 'check', 'filesystem'])\n .schema(fileExistsSchema)\n .implement(async (input) => {\n try {\n await fs.access(input.path);\n const stats = await fs.stat(input.path);\n \n return {\n exists: true,\n path: input.path,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n };\n } catch {\n return {\n exists: false,\n path: input.path,\n };\n }\n })\n .build();\n}\n\n","/**\n * File Operations Tools\n * \n * Tools for reading, writing, and manipulating files.\n */\n\nexport * from './types.js';\nexport * from './tools/file-reader.js';\nexport * from './tools/file-writer.js';\nexport * from './tools/file-append.js';\nexport * from './tools/file-delete.js';\nexport * from './tools/file-exists.js';\n\nimport { createFileReaderTool } from './tools/file-reader.js';\nimport { createFileWriterTool } from './tools/file-writer.js';\nimport { createFileAppendTool } from './tools/file-append.js';\nimport { createFileDeleteTool } from './tools/file-delete.js';\nimport { createFileExistsTool } from './tools/file-exists.js';\nimport type { FileOperationsConfig } from './types.js';\n\n/**\n * Default file operation tool instances\n */\nexport const fileReader = createFileReaderTool();\nexport const fileWriter = createFileWriterTool();\nexport const fileAppend = createFileAppendTool();\nexport const fileDelete = createFileDeleteTool();\nexport const fileExists = createFileExistsTool();\n\n/**\n * Array of all file operation tools\n */\nexport const fileOperationTools = [\n fileReader,\n fileWriter,\n fileAppend,\n fileDelete,\n fileExists,\n];\n\n/**\n * Create file operation tools with custom configuration\n */\nexport function createFileOperationTools(config: FileOperationsConfig = {}) {\n const {\n defaultEncoding = 'utf8',\n createDirsDefault = false,\n } = config;\n\n return [\n createFileReaderTool(defaultEncoding),\n createFileWriterTool(defaultEncoding, createDirsDefault),\n createFileAppendTool(defaultEncoding),\n createFileDeleteTool(),\n createFileExistsTool(),\n ];\n}\n\n","/**\n * Directory Operations Types\n * \n * Type definitions and schemas for directory operation tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Directory list schema\n */\nexport const directoryListSchema = z.object({\n path: z.string().describe('Path to the directory to list'),\n recursive: z.boolean().default(false).describe('List files recursively in subdirectories'),\n includeDetails: z.boolean().default(false).describe('Include file size, type, and modification date'),\n extension: z.string().optional().describe('Optional file extension filter (e.g., \".txt\", \".js\")'),\n});\n\n/**\n * Directory create schema\n */\nexport const directoryCreateSchema = z.object({\n path: z.string().describe('Path to the directory to create'),\n recursive: z.boolean().default(true).describe('Create parent directories if they don\\'t exist'),\n});\n\n/**\n * Directory delete schema\n */\nexport const directoryDeleteSchema = z.object({\n path: z.string().describe('Path to the directory to delete'),\n recursive: z.boolean().default(false).describe('Delete directory and all its contents'),\n});\n\n/**\n * File search schema\n */\nexport const fileSearchSchema = z.object({\n directory: z.string().describe('Directory to search in'),\n pattern: z.string().describe('File name pattern to search for (supports * wildcard)'),\n recursive: z.boolean().default(true).describe('Search in subdirectories'),\n caseSensitive: z.boolean().default(false).describe('Case-sensitive pattern matching'),\n});\n\n/**\n * Directory operations configuration\n */\nexport interface DirectoryOperationsConfig {\n defaultRecursive?: boolean;\n defaultIncludeDetails?: boolean;\n defaultCaseSensitive?: boolean;\n}\n\n","/**\n * Directory List Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryListSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create directory list tool\n */\nexport function createDirectoryListTool(defaultRecursive: boolean = false, defaultIncludeDetails: boolean = false) {\n return toolBuilder()\n .name('directory-list')\n .description('List all files and directories in a directory. Can optionally include file details and filter by extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'list', 'files', 'filesystem'])\n .schema(directoryListSchema)\n .implementSafe(async (input) => {\n const listFiles = async (dir: string, recursive: boolean): Promise<any[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const files: any[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(input.path, fullPath);\n\n // Apply extension filter if specified\n if (input.extension && !entry.name.endsWith(input.extension)) {\n if (!entry.isDirectory() || !recursive) {\n continue;\n }\n }\n\n if (input.includeDetails) {\n const stats = await fs.stat(fullPath);\n files.push({\n name: entry.name,\n path: relativePath,\n fullPath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n });\n } else {\n files.push({\n name: entry.name,\n path: relativePath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n });\n }\n\n // Recurse into subdirectories if requested\n if (recursive && entry.isDirectory()) {\n const subFiles = await listFiles(fullPath, true);\n files.push(...subFiles);\n }\n }\n\n return files;\n };\n\n const recursive = input.recursive ?? defaultRecursive;\n const files = await listFiles(input.path, recursive);\n\n return {\n path: input.path,\n files,\n count: files.length,\n };\n })\n .build();\n}\n\n","/**\n * Directory Create Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryCreateSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create directory create tool\n */\nexport function createDirectoryCreateTool(defaultRecursive: boolean = true) {\n return toolBuilder()\n .name('directory-create')\n .description('Create a new directory. Can optionally create parent directories if they don\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'create', 'mkdir', 'filesystem'])\n .schema(directoryCreateSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n await fs.mkdir(input.path, { recursive });\n\n return {\n path: input.path,\n message: 'Directory created successfully',\n };\n })\n .build();\n}\n\n","/**\n * Directory Delete Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { directoryDeleteSchema } from '../types.js';\nimport { promises as fs } from 'fs';\n\n/**\n * Create directory delete tool\n */\nexport function createDirectoryDeleteTool(defaultRecursive: boolean = false) {\n return toolBuilder()\n .name('directory-delete')\n .description('Delete a directory. Can optionally delete non-empty directories recursively.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'delete', 'remove', 'filesystem'])\n .schema(directoryDeleteSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n await fs.rm(input.path, { recursive, force: false });\n\n return {\n path: input.path,\n message: 'Directory deleted successfully',\n };\n })\n .build();\n}\n\n","/**\n * File Search Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { fileSearchSchema } from '../types.js';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Create file search tool\n */\nexport function createFileSearchTool(defaultRecursive: boolean = true, defaultCaseSensitive: boolean = false) {\n return toolBuilder()\n .name('file-search')\n .description('Search for files by name pattern in a directory. Supports wildcards and recursive search.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'search', 'find', 'filesystem'])\n .schema(fileSearchSchema)\n .implementSafe(async (input) => {\n const recursive = input.recursive ?? defaultRecursive;\n const caseSensitive = input.caseSensitive ?? defaultCaseSensitive;\n\n const searchFiles = async (dir: string): Promise<string[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const matches: string[] = [];\n\n // Convert pattern to regex\n const regexPattern = input.pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`, caseSensitive ? '' : 'i');\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isFile() && regex.test(entry.name)) {\n matches.push(fullPath);\n }\n\n if (recursive && entry.isDirectory()) {\n const subMatches = await searchFiles(fullPath);\n matches.push(...subMatches);\n }\n }\n\n return matches;\n };\n\n const matches = await searchFiles(input.directory);\n\n return {\n directory: input.directory,\n pattern: input.pattern,\n matches,\n count: matches.length,\n };\n })\n .build();\n}\n\n","/**\n * Directory Operations Tools\n * \n * Tools for working with directories and file listings.\n */\n\nexport * from './types.js';\nexport * from './tools/directory-list.js';\nexport * from './tools/directory-create.js';\nexport * from './tools/directory-delete.js';\nexport * from './tools/file-search.js';\n\nimport { createDirectoryListTool } from './tools/directory-list.js';\nimport { createDirectoryCreateTool } from './tools/directory-create.js';\nimport { createDirectoryDeleteTool } from './tools/directory-delete.js';\nimport { createFileSearchTool } from './tools/file-search.js';\nimport type { DirectoryOperationsConfig } from './types.js';\n\n/**\n * Default directory operation tool instances\n */\nexport const directoryList = createDirectoryListTool();\nexport const directoryCreate = createDirectoryCreateTool();\nexport const directoryDelete = createDirectoryDeleteTool();\nexport const fileSearch = createFileSearchTool();\n\n/**\n * Array of all directory operation tools\n */\nexport const directoryOperationTools = [\n directoryList,\n directoryCreate,\n directoryDelete,\n fileSearch,\n];\n\n/**\n * Create directory operation tools with custom configuration\n */\nexport function createDirectoryOperationTools(config: DirectoryOperationsConfig = {}) {\n const {\n defaultRecursive = false,\n defaultIncludeDetails = false,\n defaultCaseSensitive = false,\n } = config;\n\n return [\n createDirectoryListTool(defaultRecursive, defaultIncludeDetails),\n createDirectoryCreateTool(true), // Always default to true for create\n createDirectoryDeleteTool(false), // Always default to false for delete (safety)\n createFileSearchTool(defaultRecursive, defaultCaseSensitive),\n ];\n}\n\n","/**\n * Path Utilities Types\n * \n * Type definitions and schemas for path utility tools.\n */\n\nimport { z } from 'zod';\n\n/**\n * Path join schema\n */\nexport const pathJoinSchema = z.object({\n segments: z.array(z.string().describe(\"String value\")).describe('Path segments to join'),\n});\n\n/**\n * Path resolve schema\n */\nexport const pathResolveSchema = z.object({\n paths: z.array(z.string().describe(\"String value\")).describe('Paths to resolve'),\n});\n\n/**\n * Path parse schema\n */\nexport const pathParseSchema = z.object({\n path: z.string().describe('File path to parse'),\n});\n\n/**\n * Path basename schema\n */\nexport const pathBasenameSchema = z.object({\n path: z.string().describe('File path'),\n removeExtension: z.boolean().default(false).describe('Remove the file extension'),\n});\n\n/**\n * Path dirname schema\n */\nexport const pathDirnameSchema = z.object({\n path: z.string().describe('File path'),\n});\n\n/**\n * Path extension schema\n */\nexport const pathExtensionSchema = z.object({\n path: z.string().describe('File path'),\n});\n\n/**\n * Path relative schema\n */\nexport const pathRelativeSchema = z.object({\n from: z.string().describe('Source path'),\n to: z.string().describe('Destination path'),\n});\n\n/**\n * Path normalize schema\n */\nexport const pathNormalizeSchema = z.object({\n path: z.string().describe('Path to normalize'),\n});\n\n/**\n * Path utilities configuration\n */\nexport interface PathUtilitiesConfig {\n // No specific configuration needed for path utilities\n}\n\n","/**\n * Path Join Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathJoinSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path join tool\n */\nexport function createPathJoinTool() {\n return toolBuilder()\n .name('path-join')\n .description('Join multiple path segments into a single path. Handles platform-specific separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'join', 'filesystem'])\n .schema(pathJoinSchema)\n .implement(async (input) => {\n const joined = path.join(...input.segments);\n \n return {\n path: joined,\n segments: input.segments,\n };\n })\n .build();\n}\n\n","/**\n * Path Resolve Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathResolveSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path resolve tool\n */\nexport function createPathResolveTool() {\n return toolBuilder()\n .name('path-resolve')\n .description('Resolve a sequence of paths into an absolute path. Resolves relative paths from the current working directory.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'resolve', 'absolute', 'filesystem'])\n .schema(pathResolveSchema)\n .implement(async (input) => {\n const resolved = path.resolve(...input.paths);\n \n return {\n path: resolved,\n isAbsolute: path.isAbsolute(resolved),\n };\n })\n .build();\n}\n\n","/**\n * Path Parse Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathParseSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path parse tool\n */\nexport function createPathParseTool() {\n return toolBuilder()\n .name('path-parse')\n .description('Parse a file path into its components (directory, filename, extension, etc.).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'parse', 'filesystem'])\n .schema(pathParseSchema)\n .implement(async (input) => {\n const parsed = path.parse(input.path);\n \n return {\n root: parsed.root,\n dir: parsed.dir,\n base: parsed.base,\n name: parsed.name,\n ext: parsed.ext,\n isAbsolute: path.isAbsolute(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Basename Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathBasenameSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path basename tool\n */\nexport function createPathBasenameTool() {\n return toolBuilder()\n .name('path-basename')\n .description('Get the last portion of a path (filename with extension). Optionally remove the extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'basename', 'filename', 'filesystem'])\n .schema(pathBasenameSchema)\n .implement(async (input) => {\n const basename = input.removeExtension \n ? path.basename(input.path, path.extname(input.path))\n : path.basename(input.path);\n \n return {\n basename,\n extension: path.extname(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Dirname Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathDirnameSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path dirname tool\n */\nexport function createPathDirnameTool() {\n return toolBuilder()\n .name('path-dirname')\n .description('Get the directory name of a path (everything except the last portion).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'dirname', 'directory', 'filesystem'])\n .schema(pathDirnameSchema)\n .implement(async (input) => {\n const dirname = path.dirname(input.path);\n \n return {\n dirname,\n basename: path.basename(input.path),\n };\n })\n .build();\n}\n\n","/**\n * Path Extension Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathExtensionSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path extension tool\n */\nexport function createPathExtensionTool() {\n return toolBuilder()\n .name('path-extension')\n .description('Get the file extension from a path (including the dot, e.g., \".txt\").')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'extension', 'ext', 'filesystem'])\n .schema(pathExtensionSchema)\n .implement(async (input) => {\n const ext = path.extname(input.path);\n \n return {\n extension: ext,\n hasExtension: ext.length > 0,\n filename: path.basename(input.path, ext),\n };\n })\n .build();\n}\n\n","/**\n * Path Relative Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathRelativeSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path relative tool\n */\nexport function createPathRelativeTool() {\n return toolBuilder()\n .name('path-relative')\n .description('Get the relative path from one path to another.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'relative', 'filesystem'])\n .schema(pathRelativeSchema)\n .implement(async (input) => {\n const relative = path.relative(input.from, input.to);\n \n return {\n relativePath: relative,\n from: input.from,\n to: input.to,\n };\n })\n .build();\n}\n\n","/**\n * Path Normalize Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { pathNormalizeSchema } from '../types.js';\nimport * as path from 'path';\n\n/**\n * Create path normalize tool\n */\nexport function createPathNormalizeTool() {\n return toolBuilder()\n .name('path-normalize')\n .description('Normalize a path by resolving \"..\" and \".\" segments and removing duplicate separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'normalize', 'filesystem'])\n .schema(pathNormalizeSchema)\n .implement(async (input) => {\n const normalized = path.normalize(input.path);\n \n return {\n normalized,\n original: input.path,\n };\n })\n .build();\n}\n\n","/**\n * Path Utilities Tools\n * \n * Tools for working with file paths.\n */\n\nexport * from './types.js';\nexport * from './tools/path-join.js';\nexport * from './tools/path-resolve.js';\nexport * from './tools/path-parse.js';\nexport * from './tools/path-basename.js';\nexport * from './tools/path-dirname.js';\nexport * from './tools/path-extension.js';\nexport * from './tools/path-relative.js';\nexport * from './tools/path-normalize.js';\n\nimport { createPathJoinTool } from './tools/path-join.js';\nimport { createPathResolveTool } from './tools/path-resolve.js';\nimport { createPathParseTool } from './tools/path-parse.js';\nimport { createPathBasenameTool } from './tools/path-basename.js';\nimport { createPathDirnameTool } from './tools/path-dirname.js';\nimport { createPathExtensionTool } from './tools/path-extension.js';\nimport { createPathRelativeTool } from './tools/path-relative.js';\nimport { createPathNormalizeTool } from './tools/path-normalize.js';\nimport type { PathUtilitiesConfig } from './types.js';\n\n/**\n * Default path utility tool instances\n */\nexport const pathJoin = createPathJoinTool();\nexport const pathResolve = createPathResolveTool();\nexport const pathParse = createPathParseTool();\nexport const pathBasename = createPathBasenameTool();\nexport const pathDirname = createPathDirnameTool();\nexport const pathExtension = createPathExtensionTool();\nexport const pathRelative = createPathRelativeTool();\nexport const pathNormalize = createPathNormalizeTool();\n\n/**\n * Array of all path utility tools\n */\nexport const pathUtilityTools = [\n pathJoin,\n pathResolve,\n pathParse,\n pathBasename,\n pathDirname,\n pathExtension,\n pathRelative,\n pathNormalize,\n];\n\n/**\n * Create path utility tools with custom configuration\n */\nexport function createPathUtilityTools(config: PathUtilitiesConfig = {}) {\n return [\n createPathJoinTool(),\n createPathResolveTool(),\n createPathParseTool(),\n createPathBasenameTool(),\n createPathDirnameTool(),\n createPathExtensionTool(),\n createPathRelativeTool(),\n createPathNormalizeTool(),\n ];\n}\n\n","/**\n * Date and Time Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for current date/time tool\n */\nexport const CurrentDateTimeSchema = z.object({\n format: z.enum(['iso', 'unix', 'custom']).default('iso').describe('Output format'),\n customFormat: z.string().optional().describe('Custom format string (e.g., \"yyyy-MM-dd HH:mm:ss\") when format is \"custom\"'),\n timezone: z.string().optional().describe('Timezone (e.g., \"America/New_York\")'),\n});\n\n/**\n * Schema for date formatter tool\n */\nexport const DateFormatterSchema = z.object({\n date: z.string().describe('Date string or Unix timestamp to format'),\n outputFormat: z.string().describe('Output format string (e.g., \"yyyy-MM-dd\", \"MMM dd, yyyy\")'),\n inputFormat: z.string().optional().describe('Input format string (optional, auto-detected if not provided)'),\n});\n\n/**\n * Schema for date arithmetic tool\n */\nexport const DateArithmeticSchema = z.object({\n date: z.string().describe('Starting date (ISO string or Unix timestamp)'),\n operation: z.enum(['add', 'subtract']).describe('Operation to perform'),\n amount: z.number().describe('Amount to add or subtract'),\n unit: z.enum(['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']).describe('Time unit'),\n});\n\n/**\n * Schema for date difference tool\n */\nexport const DateDifferenceSchema = z.object({\n startDate: z.string().describe('Start date (ISO string or Unix timestamp)'),\n endDate: z.string().describe('End date (ISO string or Unix timestamp)'),\n unit: z.enum(['days', 'hours', 'minutes']).default('days').describe('Unit for the difference'),\n});\n\n/**\n * Schema for date comparison tool\n */\nexport const DateComparisonSchema = z.object({\n date1: z.string().describe('First date to compare'),\n date2: z.string().describe('Second date to compare'),\n});\n\n/**\n * Configuration for date/time tools\n */\nexport interface DateTimeConfig {\n // Future: Add configuration options if needed\n}\n\nexport type CurrentDateTimeInput = z.infer<typeof CurrentDateTimeSchema>;\nexport type DateFormatterInput = z.infer<typeof DateFormatterSchema>;\nexport type DateArithmeticInput = z.infer<typeof DateArithmeticSchema>;\nexport type DateDifferenceInput = z.infer<typeof DateDifferenceSchema>;\nexport type DateComparisonInput = z.infer<typeof DateComparisonSchema>;\n\n","/**\n * Current Date/Time Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { format } from 'date-fns';\nimport { CurrentDateTimeSchema } from '../types.js';\n\n/**\n * Create current date/time tool\n */\nexport function createCurrentDateTimeTool() {\n return toolBuilder()\n .name('current-date-time')\n .description('Get the current date and time in various formats (ISO, Unix timestamp, formatted string).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'now', 'current'])\n .schema(CurrentDateTimeSchema)\n .implement(async (input) => {\n const now = new Date();\n \n let formatted: string | number;\n if (input.format === 'iso') {\n formatted = now.toISOString();\n } else if (input.format === 'unix') {\n formatted = Math.floor(now.getTime() / 1000);\n } else if (input.format === 'custom' && input.customFormat) {\n formatted = format(now, input.customFormat);\n } else {\n formatted = now.toISOString();\n }\n \n return {\n formatted,\n iso: now.toISOString(),\n unix: Math.floor(now.getTime() / 1000),\n year: now.getFullYear(),\n month: now.getMonth() + 1,\n day: now.getDate(),\n hour: now.getHours(),\n minute: now.getMinutes(),\n second: now.getSeconds(),\n };\n })\n .build();\n}\n\n","/**\n * Date Formatter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { format, parse, isValid } from 'date-fns';\nimport { DateFormatterSchema } from '../types.js';\n\n/**\n * Create date formatter tool\n */\nexport function createDateFormatterTool() {\n return toolBuilder()\n .name('date-formatter')\n .description('Format a date string or timestamp into a different format. Supports ISO, Unix timestamps, and custom formats.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'format', 'time'])\n .schema(DateFormatterSchema)\n .implement(async (input) => {\n try {\n let date: Date;\n \n // Try to parse the input\n if (input.inputFormat) {\n date = parse(input.date, input.inputFormat, new Date());\n } else if (!isNaN(Number(input.date))) {\n // Unix timestamp\n date = new Date(Number(input.date) * 1000);\n } else {\n // ISO or other standard format\n date = new Date(input.date);\n }\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const formatted = format(date, input.outputFormat);\n \n return {\n success: true,\n formatted,\n iso: date.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to format date',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Arithmetic Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { add, sub, isValid } from 'date-fns';\nimport { DateArithmeticSchema } from '../types.js';\n\n/**\n * Create date arithmetic tool\n */\nexport function createDateArithmeticTool() {\n return toolBuilder()\n .name('date-arithmetic')\n .description('Add or subtract time from a date. Supports years, months, weeks, days, hours, minutes, and seconds.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'add', 'subtract', 'arithmetic'])\n .schema(DateArithmeticSchema)\n .implement(async (input) => {\n try {\n const date = new Date(input.date);\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const duration = { [input.unit]: input.amount };\n const result = input.operation === 'add' \n ? add(date, duration)\n : sub(date, duration);\n \n return {\n success: true,\n result: result.toISOString(),\n unix: Math.floor(result.getTime() / 1000),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to perform date arithmetic',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Difference Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { differenceInDays, differenceInHours, differenceInMinutes, isValid } from 'date-fns';\nimport { DateDifferenceSchema } from '../types.js';\n\n/**\n * Create date difference tool\n */\nexport function createDateDifferenceTool() {\n return toolBuilder()\n .name('date-difference')\n .description('Calculate the difference between two dates in various units (days, hours, minutes).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'difference', 'duration'])\n .schema(DateDifferenceSchema)\n .implement(async (input) => {\n try {\n const start = new Date(input.startDate);\n const end = new Date(input.endDate);\n \n if (!isValid(start) || !isValid(end)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n let difference: number;\n if (input.unit === 'days') {\n difference = differenceInDays(end, start);\n } else if (input.unit === 'hours') {\n difference = differenceInHours(end, start);\n } else {\n difference = differenceInMinutes(end, start);\n }\n \n return {\n success: true,\n difference,\n unit: input.unit,\n startDate: start.toISOString(),\n endDate: end.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate date difference',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date Comparison Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { isAfter, isBefore, isValid } from 'date-fns';\nimport { DateComparisonSchema } from '../types.js';\n\n/**\n * Create date comparison tool\n */\nexport function createDateComparisonTool() {\n return toolBuilder()\n .name('date-comparison')\n .description('Compare two dates to determine if one is before, after, or equal to the other.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'compare', 'comparison'])\n .schema(DateComparisonSchema)\n .implement(async (input) => {\n try {\n const d1 = new Date(input.date1);\n const d2 = new Date(input.date2);\n \n if (!isValid(d1) || !isValid(d2)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n return {\n success: true,\n date1IsBefore: isBefore(d1, d2),\n date1IsAfter: isAfter(d1, d2),\n datesAreEqual: d1.getTime() === d2.getTime(),\n date1: d1.toISOString(),\n date2: d2.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to compare dates',\n };\n }\n })\n .build();\n}\n\n","/**\n * Date and Time Utility Tools\n * \n * Tools for working with dates, times, and timestamps.\n */\n\nimport { createCurrentDateTimeTool } from './tools/current-date-time.js';\nimport { createDateFormatterTool } from './tools/date-formatter.js';\nimport { createDateArithmeticTool } from './tools/date-arithmetic.js';\nimport { createDateDifferenceTool } from './tools/date-difference.js';\nimport { createDateComparisonTool } from './tools/date-comparison.js';\nimport type { DateTimeConfig } from './types.js';\n\n// Default tool instances\nexport const currentDateTime = createCurrentDateTimeTool();\nexport const dateFormatter = createDateFormatterTool();\nexport const dateArithmetic = createDateArithmeticTool();\nexport const dateDifference = createDateDifferenceTool();\nexport const dateComparison = createDateComparisonTool();\n\n// Tools array\nexport const dateTimeTools = [\n currentDateTime,\n dateFormatter,\n dateArithmetic,\n dateDifference,\n dateComparison,\n];\n\n/**\n * Create date/time tools with optional configuration\n */\nexport function createDateTimeTools(config: DateTimeConfig = {}) {\n return [\n createCurrentDateTimeTool(),\n createDateFormatterTool(),\n createDateArithmeticTool(),\n createDateDifferenceTool(),\n createDateComparisonTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createCurrentDateTimeTool } from './tools/current-date-time.js';\nexport { createDateFormatterTool } from './tools/date-formatter.js';\nexport { createDateArithmeticTool } from './tools/date-arithmetic.js';\nexport { createDateDifferenceTool } from './tools/date-difference.js';\nexport { createDateComparisonTool } from './tools/date-comparison.js';\n\n","/**\n * String Utility Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for string case converter tool\n */\nexport const StringCaseConverterSchema = z.object({\n text: z.string().describe('Text to convert'),\n targetCase: z.enum(['lowercase', 'uppercase', 'title', 'camel', 'snake', 'kebab', 'pascal']).describe('Target case format'),\n});\n\n/**\n * Schema for string trim tool\n */\nexport const StringTrimSchema = z.object({\n text: z.string().describe('Text to trim'),\n mode: z.enum(['both', 'start', 'end']).default('both').describe('Which side to trim'),\n characters: z.string().optional().describe('Optional custom characters to trim (default: whitespace)'),\n});\n\n/**\n * Schema for string replace tool\n */\nexport const StringReplaceSchema = z.object({\n text: z.string().describe('Text to search in'),\n search: z.string().describe('String or regex pattern to search for'),\n replace: z.string().describe('Replacement string'),\n global: z.boolean().default(true).describe('Replace all occurrences (true) or just the first (false)'),\n caseInsensitive: z.boolean().default(false).describe('Case-insensitive search'),\n});\n\n/**\n * Schema for string split tool\n */\nexport const StringSplitSchema = z.object({\n text: z.string().describe('Text to split'),\n delimiter: z.string().describe('Delimiter to split on (can be a regex pattern)'),\n limit: z.number().optional().describe('Maximum number of splits'),\n});\n\n/**\n * Schema for string join tool\n */\nexport const StringJoinSchema = z.object({\n parts: z.array(z.string().describe(\"String value\")).describe('Array of strings to join'),\n separator: z.string().default('').describe('Separator to use between parts'),\n});\n\n/**\n * Schema for string substring tool\n */\nexport const StringSubstringSchema = z.object({\n text: z.string().describe('Source text'),\n start: z.number().describe('Start position (0-based)'),\n end: z.number().optional().describe('End position (optional, defaults to end of string)'),\n});\n\n/**\n * Schema for string length tool\n */\nexport const StringLengthSchema = z.object({\n text: z.string().describe('Text to measure'),\n});\n\n/**\n * Configuration for string utility tools\n */\nexport interface StringUtilitiesConfig {\n // Future: Add configuration options if needed\n}\n\nexport type StringCaseConverterInput = z.infer<typeof StringCaseConverterSchema>;\nexport type StringTrimInput = z.infer<typeof StringTrimSchema>;\nexport type StringReplaceInput = z.infer<typeof StringReplaceSchema>;\nexport type StringSplitInput = z.infer<typeof StringSplitSchema>;\nexport type StringJoinInput = z.infer<typeof StringJoinSchema>;\nexport type StringSubstringInput = z.infer<typeof StringSubstringSchema>;\nexport type StringLengthInput = z.infer<typeof StringLengthSchema>;\n\n","/**\n * String Case Converter Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringCaseConverterSchema } from '../types.js';\n\n/**\n * Create string case converter tool\n */\nexport function createStringCaseConverterTool() {\n return toolBuilder()\n .name('string-case-converter')\n .description('Convert string to different cases: lowercase, uppercase, title case, camel case, snake case, kebab case.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'case', 'convert', 'transform'])\n .schema(StringCaseConverterSchema)\n .implement(async (input) => {\n let result: string;\n \n switch (input.targetCase) {\n case 'lowercase':\n result = input.text.toLowerCase();\n break;\n case 'uppercase':\n result = input.text.toUpperCase();\n break;\n case 'title':\n result = input.text.toLowerCase().replace(/\\b\\w/g, (char) => char.toUpperCase());\n break;\n case 'camel':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase());\n break;\n case 'snake':\n result = input.text\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n break;\n case 'kebab':\n result = input.text\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n break;\n case 'pascal':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n break;\n default:\n result = input.text;\n }\n \n return {\n original: input.text,\n converted: result,\n targetCase: input.targetCase,\n };\n })\n .build();\n}\n\n","/**\n * String Trim Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringTrimSchema } from '../types.js';\n\n/**\n * Create string trim tool\n */\nexport function createStringTrimTool() {\n return toolBuilder()\n .name('string-trim')\n .description('Remove whitespace from the beginning and/or end of a string. Supports trim, trim start, and trim end.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'trim', 'whitespace'])\n .schema(StringTrimSchema)\n .implement(async (input) => {\n let result: string;\n \n if (input.characters) {\n const chars = input.characters.split('').map(c => c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const regex = input.mode === 'both' \n ? new RegExp(`^[${chars}]+|[${chars}]+$`, 'g')\n : input.mode === 'start'\n ? new RegExp(`^[${chars}]+`, 'g')\n : new RegExp(`[${chars}]+$`, 'g');\n result = input.text.replace(regex, '');\n } else {\n result = input.mode === 'both' \n ? input.text.trim()\n : input.mode === 'start'\n ? input.text.trimStart()\n : input.text.trimEnd();\n }\n \n return {\n original: input.text,\n trimmed: result,\n removed: input.text.length - result.length,\n };\n })\n .build();\n}\n\n","/**\n * String Replace Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringReplaceSchema } from '../types.js';\n\n/**\n * Create string replace tool\n */\nexport function createStringReplaceTool() {\n return toolBuilder()\n .name('string-replace')\n .description('Replace occurrences of a substring or pattern in a string. Supports regex patterns and global replacement.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'replace', 'substitute'])\n .schema(StringReplaceSchema)\n .implement(async (input) => {\n const flags = (input.global ? 'g' : '') + (input.caseInsensitive ? 'i' : '');\n const regex = new RegExp(input.search, flags);\n const result = input.text.replace(regex, input.replace);\n \n // Count replacements\n const matches = input.text.match(regex);\n const count = matches ? matches.length : 0;\n \n return {\n original: input.text,\n result,\n replacements: count,\n };\n })\n .build();\n}\n\n","/**\n * String Split Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringSplitSchema } from '../types.js';\n\n/**\n * Create string split tool\n */\nexport function createStringSplitTool() {\n return toolBuilder()\n .name('string-split')\n .description('Split a string into an array of substrings using a delimiter. Supports regex delimiters and limit.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'split', 'array'])\n .schema(StringSplitSchema)\n .implement(async (input) => {\n const parts = input.text.split(input.delimiter, input.limit);\n \n return {\n parts,\n count: parts.length,\n };\n })\n .build();\n}\n\n","/**\n * String Join Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringJoinSchema } from '../types.js';\n\n/**\n * Create string join tool\n */\nexport function createStringJoinTool() {\n return toolBuilder()\n .name('string-join')\n .description('Join an array of strings into a single string with a separator.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'join', 'array'])\n .schema(StringJoinSchema)\n .implement(async (input) => {\n const result = input.parts.join(input.separator);\n \n return {\n result,\n partCount: input.parts.length,\n length: result.length,\n };\n })\n .build();\n}\n\n","/**\n * String Substring Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringSubstringSchema } from '../types.js';\n\n/**\n * Create string substring tool\n */\nexport function createStringSubstringTool() {\n return toolBuilder()\n .name('string-substring')\n .description('Extract a substring from a string using start and end positions.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'substring', 'slice'])\n .schema(StringSubstringSchema)\n .implement(async (input) => {\n const result = input.text.substring(input.start, input.end);\n \n return {\n result,\n length: result.length,\n start: input.start,\n end: input.end ?? input.text.length,\n };\n })\n .build();\n}\n\n","/**\n * String Length Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StringLengthSchema } from '../types.js';\n\n/**\n * Create string length tool\n */\nexport function createStringLengthTool() {\n return toolBuilder()\n .name('string-length')\n .description('Get the length of a string in characters, words, or lines.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'length', 'count'])\n .schema(StringLengthSchema)\n .implement(async (input) => {\n const words = input.text.trim().split(/\\s+/).filter(w => w.length > 0);\n const lines = input.text.split('\\n');\n \n return {\n characters: input.text.length,\n words: words.length,\n lines: lines.length,\n };\n })\n .build();\n}\n\n","/**\n * String Utility Tools\n * \n * Tools for string manipulation and transformation.\n */\n\nimport { createStringCaseConverterTool } from './tools/string-case-converter.js';\nimport { createStringTrimTool } from './tools/string-trim.js';\nimport { createStringReplaceTool } from './tools/string-replace.js';\nimport { createStringSplitTool } from './tools/string-split.js';\nimport { createStringJoinTool } from './tools/string-join.js';\nimport { createStringSubstringTool } from './tools/string-substring.js';\nimport { createStringLengthTool } from './tools/string-length.js';\nimport type { StringUtilitiesConfig } from './types.js';\n\n// Default tool instances\nexport const stringCaseConverter = createStringCaseConverterTool();\nexport const stringTrim = createStringTrimTool();\nexport const stringReplace = createStringReplaceTool();\nexport const stringSplit = createStringSplitTool();\nexport const stringJoin = createStringJoinTool();\nexport const stringSubstring = createStringSubstringTool();\nexport const stringLength = createStringLengthTool();\n\n// Tools array\nexport const stringUtilityTools = [\n stringCaseConverter,\n stringTrim,\n stringReplace,\n stringSplit,\n stringJoin,\n stringSubstring,\n stringLength,\n];\n\n/**\n * Create string utility tools with optional configuration\n */\nexport function createStringUtilityTools(config: StringUtilitiesConfig = {}) {\n return [\n createStringCaseConverterTool(),\n createStringTrimTool(),\n createStringReplaceTool(),\n createStringSplitTool(),\n createStringJoinTool(),\n createStringSubstringTool(),\n createStringLengthTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createStringCaseConverterTool } from './tools/string-case-converter.js';\nexport { createStringTrimTool } from './tools/string-trim.js';\nexport { createStringReplaceTool } from './tools/string-replace.js';\nexport { createStringSplitTool } from './tools/string-split.js';\nexport { createStringJoinTool } from './tools/string-join.js';\nexport { createStringSubstringTool } from './tools/string-substring.js';\nexport { createStringLengthTool } from './tools/string-length.js';\n\n","/**\n * Math Operations Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for calculator tool\n */\nexport const CalculatorSchema = z.object({\n operation: z.enum(['add', 'subtract', 'multiply', 'divide', 'power', 'modulo']).describe('Mathematical operation to perform'),\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n});\n\n/**\n * Schema for math functions tool\n */\nexport const MathFunctionsSchema = z.object({\n function: z.enum(['sqrt', 'abs', 'round', 'floor', 'ceil', 'sin', 'cos', 'tan', 'log', 'exp']).describe('Mathematical function to apply'),\n value: z.number().describe('Input value'),\n});\n\n/**\n * Schema for random number tool\n */\nexport const RandomNumberSchema = z.object({\n min: z.number().default(0).describe('Minimum value (inclusive)'),\n max: z.number().default(1).describe('Maximum value (exclusive for decimals, inclusive for integers)'),\n integer: z.boolean().default(false).describe('Generate an integer (true) or decimal (false)'),\n});\n\n/**\n * Schema for statistics tool\n */\nexport const StatisticsSchema = z.object({\n numbers: z.array(z.number().describe(\"Number value\")).describe('Array of numbers to analyze'),\n});\n\n/**\n * Configuration for math operations tools\n */\nexport interface MathOperationsConfig {\n // Future: Add configuration options if needed\n}\n\nexport type CalculatorInput = z.infer<typeof CalculatorSchema>;\nexport type MathFunctionsInput = z.infer<typeof MathFunctionsSchema>;\nexport type RandomNumberInput = z.infer<typeof RandomNumberSchema>;\nexport type StatisticsInput = z.infer<typeof StatisticsSchema>;\n\n","/**\n * Calculator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { CalculatorSchema } from '../types.js';\n\n/**\n * Create calculator tool\n */\nexport function createCalculatorTool() {\n return toolBuilder()\n .name('calculator')\n .description('Perform basic arithmetic operations: add, subtract, multiply, divide, power, modulo.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'calculator', 'arithmetic'])\n .schema(CalculatorSchema)\n .implement(async (input) => {\n let result: number;\n \n switch (input.operation) {\n case 'add':\n result = input.a + input.b;\n break;\n case 'subtract':\n result = input.a - input.b;\n break;\n case 'multiply':\n result = input.a * input.b;\n break;\n case 'divide':\n if (input.b === 0) {\n return {\n success: false,\n error: 'Division by zero',\n };\n }\n result = input.a / input.b;\n break;\n case 'power':\n result = Math.pow(input.a, input.b);\n break;\n case 'modulo':\n result = input.a % input.b;\n break;\n default:\n return {\n success: false,\n error: 'Unknown operation',\n };\n }\n \n return {\n success: true,\n result,\n operation: input.operation,\n a: input.a,\n b: input.b,\n };\n })\n .build();\n}\n\n","/**\n * Math Functions Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { MathFunctionsSchema } from '../types.js';\n\n/**\n * Create math functions tool\n */\nexport function createMathFunctionsTool() {\n return toolBuilder()\n .name('math-functions')\n .description('Apply mathematical functions: sqrt, abs, round, floor, ceil, sin, cos, tan, log, exp.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'functions', 'trigonometry'])\n .schema(MathFunctionsSchema)\n .implement(async (input) => {\n let result: number;\n \n try {\n switch (input.function) {\n case 'sqrt':\n result = Math.sqrt(input.value);\n break;\n case 'abs':\n result = Math.abs(input.value);\n break;\n case 'round':\n result = Math.round(input.value);\n break;\n case 'floor':\n result = Math.floor(input.value);\n break;\n case 'ceil':\n result = Math.ceil(input.value);\n break;\n case 'sin':\n result = Math.sin(input.value);\n break;\n case 'cos':\n result = Math.cos(input.value);\n break;\n case 'tan':\n result = Math.tan(input.value);\n break;\n case 'log':\n result = Math.log(input.value);\n break;\n case 'exp':\n result = Math.exp(input.value);\n break;\n default:\n return {\n success: false,\n error: 'Unknown function',\n };\n }\n \n if (isNaN(result) || !isFinite(result)) {\n return {\n success: false,\n error: 'Invalid result (NaN or Infinity)',\n };\n }\n \n return {\n success: true,\n result,\n function: input.function,\n input: input.value,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Math operation failed',\n };\n }\n })\n .build();\n}\n\n","/**\n * Random Number Generator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { RandomNumberSchema } from '../types.js';\n\n/**\n * Create random number tool\n */\nexport function createRandomNumberTool() {\n return toolBuilder()\n .name('random-number')\n .description('Generate a random number within a specified range. Supports integers and decimals.')\n .category(ToolCategory.UTILITY)\n .tags(['random', 'number', 'generator'])\n .schema(RandomNumberSchema)\n .implement(async (input) => {\n const min = input.min ?? 0;\n const max = input.max ?? 1;\n const integer = input.integer ?? false;\n\n let result: number;\n\n if (integer) {\n result = Math.floor(Math.random() * (max - min + 1)) + min;\n } else {\n result = Math.random() * (max - min) + min;\n }\n\n return {\n result,\n min,\n max,\n integer,\n };\n })\n .build();\n}\n\n","/**\n * Statistics Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { StatisticsSchema } from '../types.js';\n\n/**\n * Create statistics tool\n */\nexport function createStatisticsTool() {\n return toolBuilder()\n .name('statistics')\n .description('Calculate statistics for an array of numbers: sum, average, min, max, median, standard deviation.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'statistics', 'average', 'sum'])\n .schema(StatisticsSchema)\n .implement(async (input) => {\n if (input.numbers.length === 0) {\n return {\n success: false,\n error: 'Empty array',\n };\n }\n \n const sorted = [...input.numbers].sort((a, b) => a - b);\n const sum = input.numbers.reduce((acc, n) => acc + n, 0);\n const average = sum / input.numbers.length;\n const min = sorted[0];\n const max = sorted[sorted.length - 1];\n \n // Median\n const mid = Math.floor(sorted.length / 2);\n const median = sorted.length % 2 === 0\n ? (sorted[mid - 1] + sorted[mid]) / 2\n : sorted[mid];\n \n // Standard deviation\n const variance = input.numbers.reduce((acc, n) => acc + Math.pow(n - average, 2), 0) / input.numbers.length;\n const stdDev = Math.sqrt(variance);\n \n return {\n success: true,\n count: input.numbers.length,\n sum,\n average,\n min,\n max,\n median,\n standardDeviation: stdDev,\n variance,\n };\n })\n .build();\n}\n\n","/**\n * Math Operations Tools\n * \n * Tools for mathematical calculations and operations.\n */\n\nimport { createCalculatorTool } from './tools/calculator.js';\nimport { createMathFunctionsTool } from './tools/math-functions.js';\nimport { createRandomNumberTool } from './tools/random-number.js';\nimport { createStatisticsTool } from './tools/statistics.js';\nimport type { MathOperationsConfig } from './types.js';\n\n// Default tool instances\nexport const calculator = createCalculatorTool();\nexport const mathFunctions = createMathFunctionsTool();\nexport const randomNumber = createRandomNumberTool();\nexport const statistics = createStatisticsTool();\n\n// Tools array\nexport const mathOperationTools = [\n calculator,\n mathFunctions,\n randomNumber,\n statistics,\n];\n\n/**\n * Create math operation tools with optional configuration\n */\nexport function createMathOperationTools(config: MathOperationsConfig = {}) {\n return [\n createCalculatorTool(),\n createMathFunctionsTool(),\n createRandomNumberTool(),\n createStatisticsTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createCalculatorTool } from './tools/calculator.js';\nexport { createMathFunctionsTool } from './tools/math-functions.js';\nexport { createRandomNumberTool } from './tools/random-number.js';\nexport { createStatisticsTool } from './tools/statistics.js';\n\n","/**\n * Validation Tools - Type Definitions\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for email validator tool\n */\nexport const EmailValidatorSchema = z.object({\n email: z.string().describe('Email address to validate'),\n});\n\n/**\n * Schema for URL validator tool\n */\nexport const UrlValidatorSimpleSchema = z.object({\n url: z.string().describe('URL to validate'),\n});\n\n/**\n * Schema for phone validator tool\n */\nexport const PhoneValidatorSchema = z.object({\n phone: z.string().describe('Phone number to validate'),\n strict: z.boolean().default(false).describe('Use strict validation (requires country code)'),\n});\n\n/**\n * Schema for credit card validator tool\n */\nexport const CreditCardValidatorSchema = z.object({\n cardNumber: z.string().describe('Credit card number to validate'),\n});\n\n/**\n * Schema for IP validator tool\n */\nexport const IpValidatorSchema = z.object({\n ip: z.string().describe('IP address to validate'),\n version: z.enum(['v4', 'v6', 'any']).default('any').describe('IP version to validate against'),\n});\n\n/**\n * Schema for UUID validator tool\n */\nexport const UuidValidatorSchema = z.object({\n uuid: z.string().describe('UUID to validate'),\n});\n\n/**\n * Configuration for validation tools\n */\nexport interface ValidationConfig {\n // Future: Add configuration options if needed\n}\n\nexport type EmailValidatorInput = z.infer<typeof EmailValidatorSchema>;\nexport type UrlValidatorSimpleInput = z.infer<typeof UrlValidatorSimpleSchema>;\nexport type PhoneValidatorInput = z.infer<typeof PhoneValidatorSchema>;\nexport type CreditCardValidatorInput = z.infer<typeof CreditCardValidatorSchema>;\nexport type IpValidatorInput = z.infer<typeof IpValidatorSchema>;\nexport type UuidValidatorInput = z.infer<typeof UuidValidatorSchema>;\n\n","/**\n * Email Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { EmailValidatorSchema } from '../types.js';\n\n/**\n * Create email validator tool\n */\nexport function createEmailValidatorTool() {\n return toolBuilder()\n .name('email-validator')\n .description('Validate if a string is a valid email address format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'email', 'validate'])\n .schema(EmailValidatorSchema)\n .implement(async (input) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const valid = emailRegex.test(input.email);\n \n return {\n valid,\n email: input.email,\n message: valid ? 'Valid email address' : 'Invalid email address format',\n };\n })\n .build();\n}\n\n","/**\n * URL Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { UrlValidatorSimpleSchema } from '../types.js';\n\n/**\n * Create URL validator tool\n */\nexport function createUrlValidatorSimpleTool() {\n return toolBuilder()\n .name('url-validator-simple')\n .description('Validate if a string is a valid URL format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'url', 'validate'])\n .schema(UrlValidatorSimpleSchema)\n .implement(async (input) => {\n try {\n new URL(input.url);\n return {\n valid: true,\n url: input.url,\n message: 'Valid URL',\n };\n } catch {\n return {\n valid: false,\n url: input.url,\n message: 'Invalid URL format',\n };\n }\n })\n .build();\n}\n\n","/**\n * Phone Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { PhoneValidatorSchema } from '../types.js';\n\n/**\n * Create phone validator tool\n */\nexport function createPhoneValidatorTool() {\n return toolBuilder()\n .name('phone-validator')\n .description('Validate if a string is a valid phone number format. Supports various international formats.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'phone', 'validate'])\n .schema(PhoneValidatorSchema)\n .implement(async (input) => {\n // Basic phone validation - matches common formats\n // eslint-disable-next-line no-useless-escape\n const basicRegex = /^[\\d\\s\\-\\+\\(\\)]+$/;\n const strictRegex = /^\\+?[1-9]\\d{1,14}$/; // E.164 format\n \n const regex = input.strict ? strictRegex : basicRegex;\n const valid = regex.test(input.phone.replace(/\\s/g, ''));\n \n return {\n valid,\n phone: input.phone,\n message: valid ? 'Valid phone number format' : 'Invalid phone number format',\n };\n })\n .build();\n}\n\n","/**\n * Credit Card Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { CreditCardValidatorSchema } from '../types.js';\n\n/**\n * Create credit card validator tool\n */\nexport function createCreditCardValidatorTool() {\n return toolBuilder()\n .name('credit-card-validator')\n .description('Validate if a string is a valid credit card number using the Luhn algorithm.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'credit-card', 'validate', 'luhn'])\n .schema(CreditCardValidatorSchema)\n .implement(async (input) => {\n // Remove spaces and dashes\n // eslint-disable-next-line no-useless-escape\n const cleaned = input.cardNumber.replace(/[\\s\\-]/g, '');\n \n // Check if it's all digits\n if (!/^\\d+$/.test(cleaned)) {\n return {\n valid: false,\n message: 'Card number must contain only digits',\n };\n }\n \n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n \n for (let i = cleaned.length - 1; i >= 0; i--) {\n let digit = parseInt(cleaned[i], 10);\n \n if (isEven) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n \n sum += digit;\n isEven = !isEven;\n }\n \n const valid = sum % 10 === 0;\n \n return {\n valid,\n cardNumber: input.cardNumber,\n message: valid ? 'Valid credit card number' : 'Invalid credit card number (failed Luhn check)',\n };\n })\n .build();\n}\n\n","/**\n * IP Address Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { IpValidatorSchema } from '../types.js';\n\n/**\n * Create IP validator tool\n */\nexport function createIpValidatorTool() {\n return toolBuilder()\n .name('ip-validator')\n .description('Validate if a string is a valid IPv4 or IPv6 address.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'ip', 'validate', 'network'])\n .schema(IpValidatorSchema)\n .implement(async (input) => {\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\n \n let valid = false;\n let detectedVersion: string | undefined;\n \n if (input.version === 'v4' || input.version === 'any') {\n if (ipv4Regex.test(input.ip)) {\n // Additional check for valid ranges (0-255)\n const parts = input.ip.split('.');\n valid = parts.every(part => {\n const num = parseInt(part, 10);\n return num >= 0 && num <= 255;\n });\n if (valid) detectedVersion = 'IPv4';\n }\n }\n \n if (!valid && (input.version === 'v6' || input.version === 'any')) {\n if (ipv6Regex.test(input.ip)) {\n valid = true;\n detectedVersion = 'IPv6';\n }\n }\n \n return {\n valid,\n ip: input.ip,\n version: detectedVersion,\n message: valid ? `Valid ${detectedVersion} address` : 'Invalid IP address format',\n };\n })\n .build();\n}\n\n","/**\n * UUID Validator Tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { UuidValidatorSchema } from '../types.js';\n\n/**\n * Create UUID validator tool\n */\nexport function createUuidValidatorTool() {\n return toolBuilder()\n .name('uuid-validator')\n .description('Validate if a string is a valid UUID (v1, v3, v4, or v5).')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'uuid', 'validate', 'guid'])\n .schema(UuidValidatorSchema)\n .implement(async (input) => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n const valid = uuidRegex.test(input.uuid);\n \n let version: number | undefined;\n if (valid) {\n version = parseInt(input.uuid[14], 10);\n }\n \n return {\n valid,\n uuid: input.uuid,\n version,\n message: valid ? `Valid UUID v${version}` : 'Invalid UUID format',\n };\n })\n .build();\n}\n\n","/**\n * Validation Utility Tools\n * \n * Tools for validating data formats and types.\n */\n\nimport { createEmailValidatorTool } from './tools/email-validator.js';\nimport { createUrlValidatorSimpleTool } from './tools/url-validator-simple.js';\nimport { createPhoneValidatorTool } from './tools/phone-validator.js';\nimport { createCreditCardValidatorTool } from './tools/credit-card-validator.js';\nimport { createIpValidatorTool } from './tools/ip-validator.js';\nimport { createUuidValidatorTool } from './tools/uuid-validator.js';\nimport type { ValidationConfig } from './types.js';\n\n// Default tool instances\nexport const emailValidator = createEmailValidatorTool();\nexport const urlValidatorSimple = createUrlValidatorSimpleTool();\nexport const phoneValidator = createPhoneValidatorTool();\nexport const creditCardValidator = createCreditCardValidatorTool();\nexport const ipValidator = createIpValidatorTool();\nexport const uuidValidator = createUuidValidatorTool();\n\n// Tools array\nexport const validationTools = [\n emailValidator,\n urlValidatorSimple,\n phoneValidator,\n creditCardValidator,\n ipValidator,\n uuidValidator,\n];\n\n/**\n * Create validation tools with optional configuration\n */\nexport function createValidationTools(config: ValidationConfig = {}) {\n return [\n createEmailValidatorTool(),\n createUrlValidatorSimpleTool(),\n createPhoneValidatorTool(),\n createCreditCardValidatorTool(),\n createIpValidatorTool(),\n createUuidValidatorTool(),\n ];\n}\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export tool factory functions\nexport { createEmailValidatorTool } from './tools/email-validator.js';\nexport { createUrlValidatorSimpleTool } from './tools/url-validator-simple.js';\nexport { createPhoneValidatorTool } from './tools/phone-validator.js';\nexport { createCreditCardValidatorTool } from './tools/credit-card-validator.js';\nexport { createIpValidatorTool } from './tools/ip-validator.js';\nexport { createUuidValidatorTool } from './tools/uuid-validator.js';\n\n","/**\n * Types for askHuman tool and human-in-the-loop workflows\n * @module tools/agent/ask-human/types\n */\n\nimport { z } from 'zod';\nimport type { HumanRequest, HumanRequestPriority, HumanRequestStatus } from '@agentforge/core';\n\n/**\n * Input schema for askHuman tool\n */\nexport const AskHumanInputSchema = z.object({\n /**\n * The question to ask the human\n */\n question: z.string().min(1).describe('The question to ask the human'),\n\n /**\n * Optional context to help the human understand the question\n */\n context: z.record(z.any()).optional().describe('Additional context for the question'),\n\n /**\n * Priority level for this request\n */\n priority: z.enum(['low', 'normal', 'high', 'critical']).default('normal').describe('Priority level for this request'),\n\n /**\n * Timeout in milliseconds (0 = no timeout)\n */\n timeout: z.number().min(0).default(0).describe('Timeout in milliseconds (0 = no timeout)'),\n\n /**\n * Default response if timeout occurs\n */\n defaultResponse: z.string().optional().describe('Default response if timeout occurs'),\n\n /**\n * Suggested responses (for UI to show as options)\n */\n suggestions: z.array(z.string()).optional().describe('Suggested responses for the human'),\n});\n\n/**\n * Input type for askHuman tool\n */\nexport type AskHumanInput = z.infer<typeof AskHumanInputSchema>;\n\n/**\n * Output from askHuman tool\n */\nexport interface AskHumanOutput {\n /**\n * The human's response\n */\n response: string;\n\n /**\n * Metadata about the interaction\n */\n metadata: {\n /**\n * Unique ID for this request\n */\n requestId: string;\n\n /**\n * When the request was created\n */\n requestedAt: number;\n\n /**\n * When the response was received\n */\n respondedAt: number;\n\n /**\n * How long it took to get a response (ms)\n */\n duration: number;\n\n /**\n * Whether this was a timeout response\n */\n timedOut: boolean;\n\n /**\n * Priority level\n */\n priority: HumanRequestPriority;\n };\n}\n\n// HumanRequest, HumanRequestPriority, and HumanRequestStatus are now imported from @agentforge/core\n// They are defined in packages/core/src/langgraph/interrupts/types.ts\n\n","/**\n * askHuman tool implementation\n * @module tools/agent/ask-human/tool\n */\n\nimport { toolBuilder, ToolCategory, createLogger, LogLevel } from '@agentforge/core';\nimport { AskHumanInputSchema, type AskHumanInput, type AskHumanOutput } from './types.js';\nimport { randomUUID } from 'crypto';\n\n// Create logger for askHuman tool\n// Log level can be controlled via LOG_LEVEL environment variable\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('askHuman', { level: logLevel });\n\n/**\n * Create the askHuman tool\n * \n * This tool enables human-in-the-loop workflows by pausing agent execution\n * and waiting for human input. It uses LangGraph's interrupt mechanism.\n * \n * @example\n * ```typescript\n * import { createAskHumanTool } from '@agentforge/tools';\n *\n * const askHuman = createAskHumanTool();\n *\n * // In your agent\n * const tools = [askHuman, ...otherTools];\n *\n * // The agent can call this tool to ask for human input\n * // When called, it will pause execution and wait for a response\n * ```\n * \n * @returns The askHuman tool\n */\nexport function createAskHumanTool() {\n return toolBuilder()\n .name('ask-human')\n .description(\n 'Ask a human for input or approval. Use this when you need human guidance, ' +\n 'approval for a critical action, or clarification on ambiguous requirements. ' +\n 'The agent execution will pause until the human responds.'\n )\n .category(ToolCategory.UTILITY)\n .schema(AskHumanInputSchema)\n .implement(async (input): Promise<AskHumanOutput> => {\n // Type assertion after Zod validation\n const validatedInput = input as AskHumanInput;\n const requestId = randomUUID();\n const requestedAt = Date.now();\n\n // Import interrupt dynamically to avoid circular dependencies\n // and to allow this tool to work even if LangGraph is not installed\n let interrupt: ((value: any) => any) | undefined;\n \n try {\n const langgraph = await import('@langchain/langgraph');\n interrupt = (langgraph as any).interrupt;\n } catch (error) {\n throw new Error(\n 'askHuman tool requires @langchain/langgraph to be installed. ' +\n 'Install it with: npm install @langchain/langgraph'\n );\n }\n\n if (!interrupt) {\n throw new Error(\n 'interrupt function not found in @langchain/langgraph. ' +\n 'Make sure you are using a compatible version of LangGraph.'\n );\n }\n\n // Create the human request object\n const humanRequest = {\n id: requestId,\n question: validatedInput.question,\n context: validatedInput.context,\n priority: validatedInput.priority,\n createdAt: requestedAt,\n timeout: validatedInput.timeout,\n defaultResponse: validatedInput.defaultResponse,\n suggestions: validatedInput.suggestions,\n status: 'pending' as const,\n };\n\n // Use LangGraph's interrupt to pause execution\n // This will save the request to the checkpoint and pause the graph\n // The application can then resume with the human's response\n logger.debug('About to call interrupt()', { humanRequest });\n\n let response;\n try {\n response = interrupt(humanRequest);\n logger.debug('interrupt() returned successfully', { response, responseType: typeof response });\n } catch (error) {\n logger.debug('interrupt() threw error (expected for GraphInterrupt)', {\n errorType: error?.constructor?.name,\n error: error instanceof Error ? error.message : String(error)\n });\n throw error; // Re-throw to let the node handle it\n }\n\n const respondedAt = Date.now();\n const duration = respondedAt - requestedAt;\n\n // Check if we got a timeout response\n const timedOut = validatedInput.timeout > 0 && duration >= validatedInput.timeout;\n\n // If timeout occurred and we have a default response, use it\n const finalResponse = timedOut && validatedInput.defaultResponse\n ? validatedInput.defaultResponse\n : (response || '');\n\n return {\n response: finalResponse,\n metadata: {\n requestId,\n requestedAt,\n respondedAt,\n duration,\n timedOut,\n priority: validatedInput.priority,\n },\n };\n })\n .build();\n}\n\n/**\n * Default instance of the askHuman tool\n * \n * @example\n * ```typescript\n * import { askHumanTool } from '@agentforge/core';\n * \n * const agent = createReActAgent({\n * llm,\n * tools: [askHumanTool, ...otherTools],\n * });\n * ```\n */\nexport const askHumanTool = createAskHumanTool();\n\n"]}