@agentforge/tools 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -0
- package/dist/index.cjs +2105 -1524
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4527 -1044
- package/dist/index.d.ts +4527 -1044
- package/dist/index.js +1939 -1522
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/web/http-client.ts","../src/web/scraper.ts","../src/web/html-parser.ts","../src/web/url-validator.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.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/json-processor.ts","../src/data/csv-parser.ts","../src/data/xml-parser.ts","../src/data/transformer.ts","../src/file/file-operations.ts","../src/file/directory-operations.ts","../src/file/path-utilities.ts","../src/utility/date-time.ts","../src/utility/string-utilities.ts","../src/utility/math-operations.ts","../src/utility/validation.ts","../src/agent/ask-human/types.ts","../src/agent/ask-human/tool.ts"],"names":["toolBuilder","ToolCategory","z","axios","cheerio","resolve","getAuthHeader","logger","logLevel","LogLevel","createLogger","searchConfluence","getConfluencePage","listConfluenceSpaces","getSpacePages","createConfluencePage","updateConfluencePage","archiveConfluencePage","path","fs","files","path2","matches","basename","dirname","relative","parse"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 { z } from 'zod';\nimport axios, { AxiosRequestConfig } from 'axios';\n\n/**\n * HTTP method enum\n */\nconst HttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n/**\n * HTTP request schema\n */\nconst 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 * Create HTTP client tool\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 const httpClient = 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: input.headers,\n data: input.body,\n timeout: input.timeout,\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 * Create a simple GET request tool\n */\nexport const httpGet = 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(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 .implement(async (input) => {\n const response = await axios.get(input.url, {\n headers: input.headers,\n params: input.params,\n timeout: 30000,\n });\n return response.data;\n })\n .build();\n\n/**\n * Create a simple POST request tool\n */\nexport const httpPost = 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(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 .implement(async (input) => {\n const response = await axios.post(input.url, input.body, {\n headers: {\n 'Content-Type': 'application/json',\n ...input.headers,\n },\n timeout: 30000,\n });\n return response.data;\n })\n .build();\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 { z } from 'zod';\nimport axios from 'axios';\nimport * as cheerio from 'cheerio';\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 * Web scraper tool\n * \n * @example\n * ```ts\n * const result = await webScraper.execute({\n * url: 'https://example.com',\n * selector: 'article h1',\n * extractText: true\n * });\n * ```\n */\nexport const webScraper = 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(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 .implement(async (input): Promise<ScraperResult> => {\n // Fetch the page\n const response = await axios.get(input.url, {\n timeout: input.timeout,\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)',\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 * HTML Parser Tool\n * \n * Parse HTML content and extract data using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as cheerio from 'cheerio';\n\n/**\n * HTML parser tool\n * \n * @example\n * ```ts\n * const result = await htmlParser.execute({\n * html: '<div class=\"content\"><h1>Title</h1><p>Text</p></div>',\n * selector: '.content h1'\n * });\n * ```\n */\nexport const htmlParser = 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(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 .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 * Extract links from HTML\n */\nexport const extractLinks = 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(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 .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 * Extract images from HTML\n */\nexport const extractImages = 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(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 .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 * URL Validator and Parser Tool\n * \n * Validate, parse, and manipulate URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\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 tool\n * \n * @example\n * ```ts\n * const result = await urlValidator.execute({\n * url: 'https://example.com/path?query=value#hash'\n * });\n * ```\n */\nexport const urlValidator = 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(z.object({\n url: z.string().describe('The URL to validate and parse'),\n }))\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 * URL builder tool\n */\nexport const urlBuilder = 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(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 .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 * URL query parser tool\n */\nexport const urlQueryParser = 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(z.object({\n input: z.string().describe('URL or query string to parse (e.g., \"?foo=bar&baz=qux\" or full URL)'),\n }))\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 * 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 * Slack Integration Tools\n *\n * Tools for interacting with Slack workspaces - send messages, notifications,\n * list channels, and read message history.\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 { WebClient } from '@slack/web-api';\nimport { toolBuilder, ToolCategory, createLogger, LogLevel, type Tool } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Configuration options for Slack tools\n */\nexport interface SlackToolsConfig {\n /**\n * Slack API token (bot or user token)\n * If not provided, will fall back to SLACK_USER_TOKEN or SLACK_BOT_TOKEN env vars\n */\n token?: string;\n\n /**\n * Custom bot name to display in Slack\n * @default 'AgentForge Bot'\n */\n botName?: string;\n\n /**\n * Custom bot icon emoji\n * @default ':robot_face:'\n */\n botIcon?: string;\n\n /**\n * Log level for Slack tools\n * @default LogLevel.INFO\n */\n logLevel?: LogLevel;\n}\n\n// Create logger for Slack tools\nconst logLevel = (process.env.LOG_LEVEL?.toLowerCase() as LogLevel) || LogLevel.INFO;\nconst logger = createLogger('tools:slack', { level: logLevel });\n\n// Default Slack client (lazy initialization for backward compatibility)\nlet defaultSlackClient: WebClient | null = null;\n\nfunction getDefaultSlackClient(): WebClient {\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 return defaultSlackClient;\n}\n\n/**\n * Send a message to a Slack channel\n */\nexport const sendSlackMessage = 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 slack = getDefaultSlackClient();\n\n // Send message using Slack API\n const result = await slack.chat.postMessage({\n channel,\n text: message,\n username: 'AgentForge Bot',\n icon_emoji: ':robot_face:',\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 * Send a notification to a Slack channel (with @mention support)\n */\nexport const notifySlack = 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 slack = getDefaultSlackClient();\n\n // Build message with mentions\n const mentionText = mentions.length > 0 ? mentions.map((m) => `<@${m}>`).join(' ') + ' ' : '';\n\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: 'AgentForge Bot',\n icon_emoji: ':robot_face:',\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 * Get list of available Slack channels\n */\nexport const getSlackChannels = 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 slack = getDefaultSlackClient();\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 * Get message history from a Slack channel\n */\nexport const getSlackMessages = 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 slack = getDefaultSlackClient();\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 * 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: SlackToolsConfig = {}) {\n const {\n token,\n botName = 'AgentForge Bot',\n botIcon = ':robot_face:',\n logLevel: customLogLevel,\n } = config;\n\n // Create a dedicated Slack client for this configuration\n let configuredClient: WebClient | null = null;\n\n function getConfiguredSlackClient(): WebClient {\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 return configuredClient;\n }\n\n // Create logger with custom log level if provided\n const toolLogger = customLogLevel\n ? createLogger('tools:slack', { level: customLogLevel })\n : logger;\n\n // Create send message tool\n const sendMessage = 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 toolLogger.info('send-slack-message called', { channel, messageLength: message.length });\n\n try {\n const slack = getConfiguredSlackClient();\n\n const result = await slack.chat.postMessage({\n channel,\n text: message,\n username: botName,\n icon_emoji: botIcon,\n });\n\n toolLogger.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 toolLogger.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 // Create notify tool\n const notify = 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 toolLogger.info('notify-slack called', {\n channel,\n messageLength: message.length,\n mentionCount: mentions.length,\n });\n\n const slack = getConfiguredSlackClient();\n\n const mentionText = mentions.length > 0 ? mentions.map((m) => `<@${m}>`).join(' ') + ' ' : '';\n const fullMessage = `${mentionText}${message}`;\n\n const result = await slack.chat.postMessage({\n channel,\n text: fullMessage,\n username: botName,\n icon_emoji: botIcon,\n });\n\n toolLogger.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 // Create get channels tool\n const getChannels = 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 toolLogger.info('get-slack-channels called', { include_private });\n\n const slack = getConfiguredSlackClient();\n\n const publicChannels = await slack.conversations.list({\n types: 'public_channel',\n exclude_archived: true,\n });\n\n let allChannels = publicChannels.channels || [];\n\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 toolLogger.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 // Create get messages tool\n const getMessages = 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 toolLogger.info('get-slack-messages called', { channel, limit });\n\n try {\n const slack = getConfiguredSlackClient();\n\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 toolLogger.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 const result = await slack.conversations.history({\n channel: channelId,\n limit: Math.min(limit, 100),\n });\n\n toolLogger.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 toolLogger.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 return {\n sendMessage,\n notify,\n getChannels,\n getMessages,\n };\n}\n\n/**\n * Export all Slack tools as an array for convenience\n * These use environment variables for configuration (SLACK_USER_TOKEN or SLACK_BOT_TOKEN)\n */\nexport const slackTools = [sendSlackMessage, notifySlack, getSlackChannels, getSlackMessages];\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 * JSON Processor Tool\n * \n * Parse, validate, transform, and query JSON data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * JSON parser tool\n */\nexport const jsonParser = 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(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 .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 * JSON stringifier tool\n */\nexport const jsonStringify = 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(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 .implementSafe(async (input) => {\n const json = input.pretty\n ? JSON.stringify(input.data, null, input.indent)\n : JSON.stringify(input.data);\n\n return {\n json,\n length: json.length,\n };\n })\n .build();\n\n/**\n * JSON query tool (using JSONPath-like syntax)\n */\nexport const jsonQuery = 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(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 .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 * JSON validator tool\n */\nexport const jsonValidator = 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(z.object({\n json: z.string().describe('JSON string to validate'),\n }))\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 * JSON merge tool\n */\nexport const jsonMerge = 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(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 .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 * CSV Parser Tool\n * \n * Parse and generate CSV data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { parse } from 'csv-parse/sync';\nimport { stringify } from 'csv-stringify/sync';\n\n/**\n * CSV parser tool\n */\nexport const csvParser = 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(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 .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\n columns: input.hasHeaders,\n skip_empty_lines: input.skipEmptyLines,\n trim: input.trim,\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 * CSV generator tool\n */\nexport const csvGenerator = 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(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 .implement(async (input) => {\n try {\n const csv = stringify(input.data, {\n delimiter: input.delimiter,\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 * CSV to JSON converter\n */\nexport const csvToJson = 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(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 .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\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 * JSON to CSV converter\n */\nexport const jsonToCsv = 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(z.object({\n json: z.string().describe('JSON array string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n }))\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,\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 * XML Parser Tool\n * \n * Parse and generate XML data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\n/**\n * XML parser tool\n */\nexport const xmlParser = 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(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 .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 * XML generator tool\n */\nexport const xmlGenerator = 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(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 .implement(async (input) => {\n try {\n const indentSize = input.indentSize ?? 2;\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\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 * XML to JSON converter\n */\nexport const xmlToJson = 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(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 .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 * JSON to XML converter\n */\nexport const jsonToXml = 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(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 .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\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 * Data Transformer Tool\n * \n * Transform, filter, map, and manipulate data structures.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Array filter tool\n */\nexport const arrayFilter = 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(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 .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 * Array map tool\n */\nexport const arrayMap = 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(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 .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 * Array sort tool\n */\nexport const arraySort = 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(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 .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 * Array group by tool\n */\nexport const arrayGroupBy = 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(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 .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 * Object pick tool\n */\nexport const objectPick = 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(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 .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 * Object omit tool\n */\nexport const objectOmit = 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(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 .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 * File Operations Tools\n * \n * Tools for reading, writing, and manipulating files.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * File reader tool\n */\nexport const fileReader = 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(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 .implementSafe(async (input) => {\n const content = await fs.readFile(input.path, input.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: input.encoding,\n };\n })\n .build();\n\n/**\n * File writer tool\n */\nexport const fileWriter = 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(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 .implementSafe(async (input) => {\n // Create parent directories if requested\n if (input.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, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n\n return {\n path: input.path,\n size: stats.size,\n encoding: input.encoding,\n };\n })\n .build();\n\n/**\n * File append tool\n */\nexport const fileAppend = 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(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 .implementSafe(async (input) => {\n await fs.appendFile(input.path, input.content, input.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 * File delete tool\n */\nexport const fileDelete = 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(z.object({\n path: z.string().describe('Path to the file to delete'),\n }))\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 * File exists tool\n */\nexport const fileExists = 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(z.object({\n path: z.string().describe('Path to check'),\n }))\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 * Directory Operations Tools\n * \n * Tools for working with directories and file listings.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Directory listing tool\n */\nexport const directoryList = 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(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 .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 files = await listFiles(input.path, input.recursive ?? false);\n\n return {\n path: input.path,\n files,\n count: files.length,\n };\n })\n .build();\n\n/**\n * Directory create tool\n */\nexport const directoryCreate = 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(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 .implementSafe(async (input) => {\n await fs.mkdir(input.path, { recursive: input.recursive });\n\n return {\n path: input.path,\n message: 'Directory created successfully',\n };\n })\n .build();\n\n/**\n * Directory delete tool\n */\nexport const directoryDelete = 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(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 .implementSafe(async (input) => {\n await fs.rm(input.path, { recursive: input.recursive, force: false });\n\n return {\n path: input.path,\n message: 'Directory deleted successfully',\n };\n })\n .build();\n\n/**\n * File search tool\n */\nexport const fileSearch = 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(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 .implementSafe(async (input) => {\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}$`, input.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 (input.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 * Path Utilities Tools\n * \n * Tools for working with file paths.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as path from 'path';\n\n/**\n * Path join tool\n */\nexport const pathJoin = 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(z.object({\n segments: z.array(z.string().describe(\"String value\")).describe('Path segments to join'),\n }))\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 * Path resolve tool\n */\nexport const pathResolve = 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(z.object({\n paths: z.array(z.string().describe(\"String value\")).describe('Paths to resolve'),\n }))\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 * Path parse tool\n */\nexport const pathParse = 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(z.object({\n path: z.string().describe('File path to parse'),\n }))\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 * Path basename tool\n */\nexport const pathBasename = 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(z.object({\n path: z.string().describe('File path'),\n removeExtension: z.boolean().default(false).describe('Remove the file extension'),\n }))\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 * Path dirname tool\n */\nexport const pathDirname = 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(z.object({\n path: z.string().describe('File path'),\n }))\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 * Path extension tool\n */\nexport const pathExtension = 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(z.object({\n path: z.string().describe('File path'),\n }))\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 * Path relative tool\n */\nexport const pathRelative = 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(z.object({\n from: z.string().describe('Source path'),\n to: z.string().describe('Destination path'),\n }))\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 * Path normalize tool\n */\nexport const pathNormalize = 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(z.object({\n path: z.string().describe('Path to normalize'),\n }))\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 * Date and Time Utility Tools\n * \n * Tools for working with dates, times, and timestamps.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { format, parse, add, sub, differenceInDays, differenceInHours, differenceInMinutes, isAfter, isBefore, isValid } from 'date-fns';\n\n/**\n * Current date/time tool\n */\nexport const currentDateTime = 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(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 .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 * Date formatter tool\n */\nexport const dateFormatter = 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(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 .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 * Date arithmetic tool\n */\nexport const dateArithmetic = 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(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 .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 * Date difference tool\n */\nexport const dateDifference = 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(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 .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 * Date comparison tool\n */\nexport const dateComparison = 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(z.object({\n date1: z.string().describe('First date to compare'),\n date2: z.string().describe('Second date to compare'),\n }))\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 * String Utility Tools\n * \n * Tools for string manipulation and transformation.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * String case converter tool\n */\nexport const stringCaseConverter = 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(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 .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 * String trim tool\n */\nexport const stringTrim = 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(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 .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 * String replace tool\n */\nexport const stringReplace = 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(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 .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 * String split tool\n */\nexport const stringSplit = 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(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 .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 * String join tool\n */\nexport const stringJoin = 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(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 .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 * String substring tool\n */\nexport const stringSubstring = 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(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 .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 * String length tool\n */\nexport const stringLength = 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(z.object({\n text: z.string().describe('Text to measure'),\n }))\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 * Math Operations Tools\n * \n * Tools for mathematical calculations and operations.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Calculator tool\n */\nexport const calculator = 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(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 .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 * Math functions tool\n */\nexport const mathFunctions = 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(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 .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 * Random number generator tool\n */\nexport const randomNumber = 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(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 .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 * Statistics tool\n */\nexport const statistics = 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(z.object({\n numbers: z.array(z.number().describe(\"Number value\")).describe('Array of numbers to analyze'),\n }))\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 * Validation Utility Tools\n * \n * Tools for validating data formats and types.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Email validator tool\n */\nexport const emailValidator = 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(z.object({\n email: z.string().describe('Email address to validate'),\n }))\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 * URL validator tool (already exists in web tools, but adding here for completeness)\n */\nexport const urlValidatorSimple = 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(z.object({\n url: z.string().describe('URL to validate'),\n }))\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 * Phone number validator tool\n */\nexport const phoneValidator = 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(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 .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 * Credit card validator tool\n */\nexport const creditCardValidator = 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(z.object({\n cardNumber: z.string().describe('Credit card number to validate'),\n }))\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 * IP address validator tool\n */\nexport const ipValidator = 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(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 .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 * UUID validator tool\n */\nexport const uuidValidator = 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(z.object({\n uuid: z.string().describe('UUID to validate'),\n }))\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 * 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/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"]}
|