@avasis-ai/synthcode 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +292 -0
  3. package/dist/chunk-53ZOIXM4.js +624 -0
  4. package/dist/chunk-53ZOIXM4.js.map +1 -0
  5. package/dist/chunk-BWXHO6UJ.js +115 -0
  6. package/dist/chunk-BWXHO6UJ.js.map +1 -0
  7. package/dist/chunk-CARUMOML.js +123 -0
  8. package/dist/chunk-CARUMOML.js.map +1 -0
  9. package/dist/chunk-DGUM43GV.js +11 -0
  10. package/dist/chunk-DGUM43GV.js.map +1 -0
  11. package/dist/chunk-F34HO4RA.js +487 -0
  12. package/dist/chunk-F34HO4RA.js.map +1 -0
  13. package/dist/chunk-FK7S2S7V.js +132 -0
  14. package/dist/chunk-FK7S2S7V.js.map +1 -0
  15. package/dist/chunk-MQ7XP6VT.js +174 -0
  16. package/dist/chunk-MQ7XP6VT.js.map +1 -0
  17. package/dist/chunk-TLPOO6C3.js +176 -0
  18. package/dist/chunk-TLPOO6C3.js.map +1 -0
  19. package/dist/chunk-W6OLZ2OI.js +56 -0
  20. package/dist/chunk-W6OLZ2OI.js.map +1 -0
  21. package/dist/cli/index.cjs +151 -0
  22. package/dist/cli/index.cjs.map +1 -0
  23. package/dist/cli/index.d.cts +1 -0
  24. package/dist/cli/index.d.ts +1 -0
  25. package/dist/cli/index.js +8 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/run.cjs +128 -0
  28. package/dist/cli/run.cjs.map +1 -0
  29. package/dist/cli/run.d.cts +1 -0
  30. package/dist/cli/run.d.ts +1 -0
  31. package/dist/cli/run.js +126 -0
  32. package/dist/cli/run.js.map +1 -0
  33. package/dist/index-D-K6sx8s.d.cts +8 -0
  34. package/dist/index-D-K6sx8s.d.ts +8 -0
  35. package/dist/index.cjs +2909 -0
  36. package/dist/index.cjs.map +1 -0
  37. package/dist/index.d.cts +274 -0
  38. package/dist/index.d.ts +274 -0
  39. package/dist/index.js +1048 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/llm/index.cjs +531 -0
  42. package/dist/llm/index.cjs.map +1 -0
  43. package/dist/llm/index.d.cts +70 -0
  44. package/dist/llm/index.d.ts +70 -0
  45. package/dist/llm/index.js +24 -0
  46. package/dist/llm/index.js.map +1 -0
  47. package/dist/mcp/index.cjs +323 -0
  48. package/dist/mcp/index.cjs.map +1 -0
  49. package/dist/mcp/index.d.cts +39 -0
  50. package/dist/mcp/index.d.ts +39 -0
  51. package/dist/mcp/index.js +11 -0
  52. package/dist/mcp/index.js.map +1 -0
  53. package/dist/memory/index.cjs +146 -0
  54. package/dist/memory/index.cjs.map +1 -0
  55. package/dist/memory/index.d.cts +51 -0
  56. package/dist/memory/index.d.ts +51 -0
  57. package/dist/memory/index.js +10 -0
  58. package/dist/memory/index.js.map +1 -0
  59. package/dist/tools/fuzzy-edit.cjs +200 -0
  60. package/dist/tools/fuzzy-edit.cjs.map +1 -0
  61. package/dist/tools/fuzzy-edit.d.cts +9 -0
  62. package/dist/tools/fuzzy-edit.d.ts +9 -0
  63. package/dist/tools/fuzzy-edit.js +12 -0
  64. package/dist/tools/fuzzy-edit.js.map +1 -0
  65. package/dist/tools/index.cjs +1032 -0
  66. package/dist/tools/index.cjs.map +1 -0
  67. package/dist/tools/index.d.cts +4 -0
  68. package/dist/tools/index.d.ts +4 -0
  69. package/dist/tools/index.js +39 -0
  70. package/dist/tools/index.js.map +1 -0
  71. package/dist/types-C11cw5ZD.d.cts +177 -0
  72. package/dist/types-C11cw5ZD.d.ts +177 -0
  73. package/dist/utils-TF4TBXQJ.js +10 -0
  74. package/dist/utils-TF4TBXQJ.js.map +1 -0
  75. package/dist/web-fetch-B42QzYD2.d.cts +85 -0
  76. package/dist/web-fetch-EDdhxmEf.d.ts +85 -0
  77. package/package.json +134 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils.ts","../../src/tools/index.ts","../../src/tools/tool.ts","../../src/tools/registry.ts","../../src/tools/orchestrator.ts","../../src/tools/bash.ts","../../src/tools/file-read.ts","../../src/tools/file-write.ts","../../src/tools/file-edit.ts","../../src/tools/fuzzy-edit.ts","../../src/tools/glob.ts","../../src/tools/grep.ts","../../src/tools/web-fetch.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport function globToRegExp(pattern: string): RegExp {\n const parts = pattern.split(\"/\");\n let regex = \"\";\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part === \"**\") {\n regex += \"(?:[^/]*(?:\\\\/|$))*\";\n } else {\n const escaped = part\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\?/g, \"[^/]\");\n regex += escaped + \"\\\\/\";\n }\n }\n\n regex = regex.replace(/\\\\\\//g, \"/\").replace(/\\/$/, \"\");\n return new RegExp(`(^|/)${regex}(/|$)`);\n}\n\nexport interface WalkEntry {\n path: string;\n stat: fs.Stats;\n}\n\nexport async function walkDir(dir: string, options?: { maxDepth?: number; followSymlinks?: boolean }): Promise<WalkEntry[]> {\n const maxDepth = options?.maxDepth ?? Infinity;\n const followSymlinks = options?.followSymlinks ?? false;\n const results: WalkEntry[] = [];\n\n async function walk(current: string, depth: number): Promise<void> {\n if (depth > maxDepth) return;\n\n let entries: fs.Dirent[];\n try {\n entries = await fs.promises.readdir(current, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = path.join(current, entry.name);\n\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n\n try {\n let stat: fs.Stats;\n if (entry.isSymbolicLink() && !followSymlinks) continue;\n stat = await fs.promises.stat(fullPath);\n\n if (stat.isFile()) {\n results.push({ path: fullPath, stat });\n } else if (stat.isDirectory()) {\n await walk(fullPath, depth + 1);\n }\n } catch {\n continue;\n }\n }\n }\n\n await walk(dir, 0);\n return results;\n}\n","export { defineTool, defineToolFromClass } from './tool.js';\nexport type { Tool, ToolExecuteOptions, APIToolDefinition } from './tool.js';\nexport { ToolRegistry } from './registry.js';\nexport { orchestrateTools } from './orchestrator.js';\nexport type { ToolExecutionResult } from './orchestrator.js';\nexport { BashTool } from './bash.js';\nexport { FileReadTool } from './file-read.js';\nexport { FileWriteTool } from './file-write.js';\nexport { FileEditTool } from './file-edit.js';\nexport { GlobTool } from './glob.js';\nexport { GrepTool } from './grep.js';\nexport { WebFetchTool } from './web-fetch.js';\nexport { fuzzyReplace, fuzzyContains, FuzzyEditError } from './fuzzy-edit.js';\n","import type { ZodSchema } from 'zod';\nimport type { ToolContext } from '../types.js';\n\n/** JSON Schema representation of a tool for LLM function calling APIs. */\nexport interface APIToolDefinition {\n name: string;\n description: string;\n input_schema: Record<string, unknown>;\n}\n\n/** Core tool abstraction that every tool must implement. */\nexport interface Tool<P = unknown> {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: ZodSchema<P>;\n readonly isReadOnly: boolean;\n readonly isConcurrencySafe: boolean;\n\n execute(input: P, context: ToolContext): Promise<string>;\n toAPI(): APIToolDefinition;\n toString(input: P): string;\n}\n\n/** Configuration object for defining a tool. */\nexport interface ToolExecuteOptions<P = unknown> {\n name: string;\n description: string;\n inputSchema: ZodSchema<P>;\n isReadOnly?: boolean;\n isConcurrencySafe?: boolean;\n execute: (input: P, context: ToolContext) => Promise<string>;\n}\n\nfunction zodToJsonSchema(schema: unknown): Record<string, unknown> {\n const s = schema as { _def: Record<string, unknown> };\n const def = s._def;\n const typeName = def.typeName as string;\n const description = def.description as string | undefined;\n\n const base: Record<string, unknown> = {};\n if (description) base.description = description;\n\n switch (typeName) {\n case 'ZodString':\n return { ...base, type: 'string' };\n case 'ZodNumber':\n return { ...base, type: 'number' };\n case 'ZodBoolean':\n return { ...base, type: 'boolean' };\n case 'ZodNull':\n return { ...base, type: 'null' };\n case 'ZodArray': {\n const items = zodToJsonSchema(def.element);\n return { ...base, type: 'array', items };\n }\n case 'ZodObject': {\n const shapeFn = def.shape as () => Record<string, unknown>;\n const shape = shapeFn();\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(value);\n const propDef = (value as { _def: Record<string, unknown> })._def;\n if (\n propDef.typeName !== 'ZodOptional' &&\n propDef.typeName !== 'ZodNullish' &&\n propDef.typeName !== 'ZodDefault'\n ) {\n required.push(key);\n }\n }\n const result: Record<string, unknown> = { ...base, type: 'object', properties };\n if (required.length > 0) result.required = required;\n return result;\n }\n case 'ZodEnum':\n return { ...base, enum: def.values };\n case 'ZodLiteral':\n return { ...base, const: def.value };\n case 'ZodUnion': {\n const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n return { ...base, anyOf: options };\n }\n case 'ZodDiscriminatedUnion': {\n const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n return { ...base, anyOf: options };\n }\n case 'ZodOptional':\n return zodToJsonSchema(def.innerType);\n case 'ZodNullable': {\n const inner = zodToJsonSchema(def.innerType);\n inner.nullable = true;\n return inner;\n }\n case 'ZodNullish': {\n const inner = zodToJsonSchema(def.innerType);\n inner.nullable = true;\n return inner;\n }\n case 'ZodDefault':\n return zodToJsonSchema(def.innerType);\n case 'ZodRecord': {\n const valueSchema = zodToJsonSchema(def.valueType);\n return { ...base, type: 'object', additionalProperties: valueSchema };\n }\n case 'ZodTuple': {\n const items = (def.items as unknown[]).map((o) => zodToJsonSchema(o));\n return { ...base, type: 'array', items, minItems: items.length, maxItems: items.length };\n }\n case 'ZodEffects': {\n return zodToJsonSchema(def.innerType);\n }\n case 'ZodAny':\n return {};\n case 'ZodUnknown':\n return {};\n case 'ZodVoid':\n return { ...base, type: 'null' };\n case 'ZodNever':\n return { ...base, not: {} };\n default:\n return { ...base, type: 'string' };\n }\n}\n\n/** Define a tool from a configuration object. */\nexport function defineTool<P = unknown>(config: ToolExecuteOptions<P>): Tool<P> {\n const tool: Tool<P> = {\n name: config.name,\n description: config.description,\n inputSchema: config.inputSchema,\n isReadOnly: config.isReadOnly ?? false,\n isConcurrencySafe: config.isConcurrencySafe ?? false,\n execute: config.execute,\n toAPI(): APIToolDefinition {\n return {\n name: config.name,\n description: config.description,\n input_schema: zodToJsonSchema(config.inputSchema),\n };\n },\n toString(input: P): string {\n const entries = Object.entries(input as Record<string, unknown>)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: \"${v}\"`;\n if (v === undefined) return `${k}: undefined`;\n if (v === null) return `${k}: null`;\n return `${k}: ${String(v)}`;\n })\n .join(', ');\n return `${config.name}({ ${entries} })`;\n },\n };\n return tool;\n}\n\n/** Wrap a class-based tool into the standard Tool interface. */\nexport function defineToolFromClass(ctor: new () => Tool): Tool {\n const instance = new ctor();\n return {\n name: instance.name,\n description: instance.description,\n inputSchema: instance.inputSchema,\n isReadOnly: instance.isReadOnly,\n isConcurrencySafe: instance.isConcurrencySafe,\n execute: (input, context) => instance.execute(input, context),\n toAPI: () => instance.toAPI(),\n toString: (input) => instance.toString(input),\n };\n}\n","import type { Tool, APIToolDefinition } from './tool.js';\n\n/** Registry for managing tool lookup and deduplication. */\nexport class ToolRegistry {\n private readonly tools = new Map<string, Tool>();\n\n constructor(tools?: Tool[]) {\n if (tools) {\n for (const tool of tools) {\n this.add(tool);\n }\n }\n }\n\n /** Add a tool to the registry. Duplicate names are ignored (first one wins). */\n add(tool: Tool): void {\n if (this.tools.has(tool.name)) {\n console.warn(`[ToolRegistry] Duplicate tool \"${tool.name}\" ignored (first one wins)`);\n return;\n }\n this.tools.set(tool.name, tool);\n }\n\n /** Get a tool by name. */\n get(name: string): Tool | undefined {\n return this.tools.get(name);\n }\n\n /** Check if a tool exists by name. */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /** Find tool by case-insensitive name. Returns undefined if not found. */\n findCaseInsensitive(name: string): string | undefined {\n const lower = name.toLowerCase();\n if (this.tools.has(name)) return name;\n for (const key of this.tools.keys()) {\n if (key.toLowerCase() === lower) return key;\n }\n return undefined;\n }\n\n /** List all registered tool names. */\n listNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /** Get all registered tools. */\n getAll(): Tool[] {\n return Array.from(this.tools.values());\n }\n\n /** Get all tools in API format, sorted by name for cache stability. */\n getAPI(): APIToolDefinition[] {\n return this.getAll()\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((t) => t.toAPI());\n }\n\n /** Number of registered tools. */\n get size(): number {\n return this.tools.size;\n }\n}\n","import type { ToolContext, ToolUseBlock } from '../types.js';\nimport type { Tool } from './tool.js';\nimport { ToolRegistry } from './registry.js';\n\n/** Result of a single tool execution. */\nexport interface ToolExecutionResult {\n id: string;\n name: string;\n output: string;\n isError: boolean;\n durationMs: number;\n}\n\nclass Semaphore {\n private current = 0;\n private queue: (() => void)[] = [];\n\n constructor(private readonly max: number) {}\n\n acquire(): Promise<void> {\n if (this.current < this.max) {\n this.current++;\n return Promise.resolve();\n }\n return new Promise<void>((resolve) => {\n this.queue.push(resolve);\n });\n }\n\n release(): void {\n this.current--;\n const next = this.queue.shift();\n if (next) {\n this.current++;\n next();\n }\n }\n}\n\nfunction partitionToolCalls(\n toolCalls: ToolUseBlock[],\n registry: ToolRegistry,\n): ToolUseBlock[][] {\n const batches: ToolUseBlock[][] = [];\n let currentBatch: ToolUseBlock[] = [];\n let currentBatchIsConcurrent = false;\n\n for (const call of toolCalls) {\n const tool = registry.get(call.name);\n const isConcurrent = tool ? tool.isReadOnly && tool.isConcurrencySafe : false;\n\n if (isConcurrent && currentBatchIsConcurrent) {\n currentBatch.push(call);\n } else {\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n currentBatch = [call];\n currentBatchIsConcurrent = isConcurrent;\n }\n }\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nasync function executeToolCall(\n call: ToolUseBlock,\n registry: ToolRegistry,\n context: ToolContext,\n permissionCheck?: (name: string, input: Record<string, unknown>) => Promise<boolean>,\n abortSignal?: AbortSignal,\n): Promise<ToolExecutionResult> {\n if (abortSignal?.aborted) {\n return {\n id: call.id,\n name: call.name,\n output: 'Execution aborted',\n isError: true,\n durationMs: 0,\n };\n }\n\n const tool = registry.get(call.name);\n if (!tool) {\n return {\n id: call.id,\n name: call.name,\n output: `Unknown tool: ${call.name}`,\n isError: true,\n durationMs: 0,\n };\n }\n\n const start = performance.now();\n\n try {\n const parseResult = tool.inputSchema.safeParse(call.input);\n if (!parseResult.success) {\n return {\n id: call.id,\n name: call.name,\n output: `Invalid input for ${call.name}: ${parseResult.error.issues.map((i) => i.message).join(', ')}`,\n isError: true,\n durationMs: Math.round(performance.now() - start),\n };\n }\n\n if (permissionCheck) {\n const allowed = await permissionCheck(call.name, call.input);\n if (!allowed) {\n return {\n id: call.id,\n name: call.name,\n output: `Permission denied for tool: ${call.name}`,\n isError: true,\n durationMs: Math.round(performance.now() - start),\n };\n }\n }\n\n const output = await tool.execute(parseResult.data, context);\n\n return {\n id: call.id,\n name: call.name,\n output,\n isError: false,\n durationMs: Math.round(performance.now() - start),\n };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n id: call.id,\n name: call.name,\n output: `Error executing ${call.name}: ${message}`,\n isError: true,\n durationMs: Math.round(performance.now() - start),\n };\n }\n}\n\n/**\n * Orchestrate execution of multiple tool calls with partition-based concurrency.\n *\n * Read-only, concurrency-safe tools are grouped into concurrent batches (max 10 parallel).\n * Non-safe tools are executed serially in their own batches.\n * Results are returned in the original call order.\n */\nexport async function orchestrateTools(\n tools: ToolRegistry,\n toolCalls: ToolUseBlock[],\n context: ToolContext,\n permissionCheck?: (name: string, input: Record<string, unknown>) => Promise<boolean>,\n abortSignal?: AbortSignal,\n): Promise<ToolExecutionResult[]> {\n const batches = partitionToolCalls(toolCalls, tools);\n const results: ToolExecutionResult[] = [];\n\n for (const batch of batches) {\n if (abortSignal?.aborted) {\n for (const call of batch) {\n results.push({\n id: call.id,\n name: call.name,\n output: 'Execution aborted',\n isError: true,\n durationMs: 0,\n });\n }\n continue;\n }\n\n if (batch.length > 1) {\n const semaphore = new Semaphore(10);\n const promises = batch.map((call) =>\n semaphore.acquire().then(async () => {\n try {\n return await executeToolCall(call, tools, context, permissionCheck, abortSignal);\n } finally {\n semaphore.release();\n }\n }),\n );\n const settled = await Promise.allSettled(promises);\n for (let i = 0; i < settled.length; i++) {\n const s = settled[i];\n if (s.status === 'fulfilled') {\n results.push(s.value);\n } else {\n results.push({\n id: batch[i].id,\n name: batch[i].name,\n output: `Unexpected error: ${s.reason instanceof Error ? s.reason.message : String(s.reason)}`,\n isError: true,\n durationMs: 0,\n });\n }\n }\n } else {\n const result = await executeToolCall(batch[0], tools, context, permissionCheck, abortSignal);\n results.push(result);\n }\n }\n\n return results;\n}\n","import { exec } from 'node:child_process';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_OUTPUT = 50 * 1024;\nconst TRUNCATE_HALF = 25 * 1024;\n\nfunction truncateOutput(output: string): string {\n if (output.length <= MAX_OUTPUT) return output;\n const notice = `\\n\\n... [output truncated: showing first ${TRUNCATE_HALF} and last ${TRUNCATE_HALF} of ${output.length} characters] ...\\n\\n`;\n return output.slice(0, TRUNCATE_HALF) + notice + output.slice(-TRUNCATE_HALF);\n}\n\nexport const BashTool = defineTool({\n name: 'bash',\n description:\n 'Execute a shell command. Returns stdout and stderr. Use for running build commands, git operations, package managers, and other CLI tools.',\n inputSchema: z.object({\n command: z.string().describe('The shell command to execute'),\n timeout: z.number().optional().describe('Timeout in milliseconds (default 120000)'),\n workdir: z.string().optional().describe('Working directory for the command'),\n }),\n isReadOnly: false,\n isConcurrencySafe: false,\n execute: async ({ command, timeout = 120000, workdir }, context) => {\n return new Promise<string>((resolve) => {\n let settled = false;\n const done = (result: string) => {\n if (settled) return;\n settled = true;\n resolve(result);\n };\n\n if (context.abortSignal?.aborted) {\n done('Command aborted before execution');\n return;\n }\n\n const child = exec(\n command,\n {\n cwd: workdir ?? context.cwd,\n timeout,\n maxBuffer: 10 * 1024 * 1024,\n killSignal: 'SIGKILL',\n },\n (error, stdout, stderr) => {\n let output = '';\n if (stdout) output += `STDOUT:\\n${stdout}\\n\\n`;\n if (stderr) output += `STDERR:\\n${stderr}\\n\\n`;\n output += `Exit code: ${error?.code ?? 0}`;\n if (error && error.killed) {\n output = `Command timed out after ${timeout}ms\\n\\n${output}`;\n }\n done(truncateOutput(output));\n },\n );\n\n child.on('error', (err) => {\n done(`Failed to execute command: ${err.message}`);\n });\n\n if (context.abortSignal) {\n context.abortSignal.addEventListener(\n 'abort',\n () => {\n child.kill('SIGKILL');\n done('Command aborted');\n },\n { once: true },\n );\n }\n });\n },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_LINE_LENGTH = 2000;\n\nexport const FileReadTool = defineTool({\n name: 'file_read',\n description:\n 'Read the contents of a file. Returns the file content with line numbers. Use GlobTool to find files first.',\n inputSchema: z.object({\n path: z.string().describe('Absolute or relative path to the file'),\n offset: z.number().optional().describe('Line number to start reading from (1-indexed)'),\n limit: z.number().optional().describe('Maximum number of lines to read'),\n }),\n isReadOnly: true,\n isConcurrencySafe: true,\n execute: async ({ path: filePath, offset, limit }, context) => {\n try {\n const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n\n const content = await fs.readFile(resolved, 'utf-8');\n const lines = content.split('\\n');\n\n const startLine = offset ? Math.max(1, offset) : 1;\n const startIndex = startLine - 1;\n const endIndex = limit != null ? startIndex + limit : lines.length;\n const selected = lines.slice(startIndex, endIndex);\n\n const formatted = selected\n .map((line, i) => {\n const lineNum = startLine + i;\n const truncated = line.length > MAX_LINE_LENGTH ? line.slice(0, MAX_LINE_LENGTH) + '...' : line;\n return `${lineNum}: ${truncated}`;\n })\n .join('\\n');\n\n return formatted;\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return `Error: File not found: ${filePath}`;\n }\n if ((err as NodeJS.ErrnoException).code === 'EISDIR') {\n return `Error: Path is a directory: ${filePath}`;\n }\n return `Error reading file: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nexport const FileWriteTool = defineTool({\n name: 'file_write',\n description:\n \"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Parent directories are created automatically.\",\n inputSchema: z.object({\n path: z.string().describe('Path to the file'),\n content: z.string().describe('Content to write'),\n }),\n isReadOnly: false,\n isConcurrencySafe: false,\n execute: async ({ path: filePath, content }, context) => {\n try {\n const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n const dir = path.dirname(resolved);\n\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(resolved, content, 'utf-8');\n\n return `Wrote ${content.length} characters to ${filePath}`;\n } catch (err: unknown) {\n return `Error writing file: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { fuzzyReplace } from './fuzzy-edit.js';\n\nexport const FileEditTool = defineTool({\n name: 'file_edit',\n description:\n 'Edit an existing file by replacing a string match with new content. Uses 9-strategy fuzzy matching (exact, line-trimmed, block-anchor with Levenshtein, whitespace-normalized, indentation-flexible, escape-normalized, trimmed-boundary, context-aware, multi-occurrence) so the oldString does not need to be a perfect character-for-character match. For multi-line edits, include enough surrounding context to ensure uniqueness.',\n inputSchema: z.object({\n path: z.string().describe('Path to the file'),\n oldString: z.string().describe('The string to find and replace (fuzzy-matched)'),\n newString: z.string().describe('The replacement string'),\n replaceAll: z.boolean().optional().describe('Replace all occurrences instead of just the first'),\n }),\n isReadOnly: false,\n isConcurrencySafe: false,\n execute: async ({ path: filePath, oldString, newString, replaceAll = false }, context) => {\n try {\n const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n\n const content = await fs.readFile(resolved, 'utf-8');\n\n let newContent: string;\n let count = 0;\n\n if (replaceAll) {\n const occurrences = content.split(oldString).length - 1;\n if (occurrences === 0) {\n try {\n newContent = fuzzyReplace(content, oldString, newString, true);\n count = 1;\n } catch {\n return `Error: oldString not found in ${filePath} (tried 9 fuzzy strategies)`;\n }\n } else {\n newContent = content.split(oldString).join(newString);\n count = occurrences;\n }\n } else {\n try {\n newContent = fuzzyReplace(content, oldString, newString, false);\n count = 1;\n } catch (err) {\n const kind = (err as { kind?: string }).kind;\n if (kind === \"ambiguous\") {\n return `Error: Multiple matches for oldString in ${filePath}. Provide more surrounding context or set replaceAll to true.`;\n }\n return `Error: oldString not found in ${filePath} (tried 9 fuzzy strategies)`;\n }\n }\n\n await fs.writeFile(resolved, newContent, 'utf-8');\n\n return `Replaced ${count} occurrence(s) in ${filePath}`;\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return `Error: File not found: ${filePath}`;\n }\n return `Error editing file: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n","import type { ToolUseBlock } from \"../types.js\";\n\nexport type ReplacerFn = (content: string, find: string) => Generator<string, void, unknown>;\n\nexport class FuzzyEditError extends Error {\n constructor(public readonly kind: \"not_found\" | \"ambiguous\", message: string) {\n super(message);\n this.name = \"FuzzyEditError\";\n }\n}\n\nfunction levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n if (m === 0) return n;\n if (n === 0) return m;\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n for (let i = 0; i <= m; i++) dp[i][0] = i;\n for (let j = 0; j <= n; j++) dp[0][j] = j;\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);\n }\n }\n return dp[m][n];\n}\n\nfunction similarity(a: string, b: string): number {\n if (a.length > 1000 || b.length > 1000) return a === b ? 1 : 0;\n const maxLen = Math.max(a.length, b.length);\n if (maxLen === 0) return 1;\n return 1 - levenshtein(a, b) / maxLen;\n}\n\nfunction* simpleReplacer(content: string, find: string): Generator<string, void, unknown> {\n if (content.includes(find)) yield find;\n}\n\nfunction* lineTrimmedReplacer(content: string, find: string): Generator<string, void, unknown> {\n const lines = find.split(\"\\n\").map(l => l.trim());\n const contentLines = content.split(\"\\n\");\n for (let i = 0; i <= contentLines.length - lines.length; i++) {\n if (contentLines.slice(i, i + lines.length).every((cl, idx) => cl.trim() === lines[idx])) {\n yield contentLines.slice(i, i + lines.length).join(\"\\n\");\n }\n }\n}\n\nfunction* blockAnchorReplacer(content: string, find: string): Generator<string, void, unknown> {\n const findLines = find.split(\"\\n\");\n const contentLines = content.split(\"\\n\");\n\n if (findLines.length < 2) return;\n\n const firstLine = findLines[0];\n const lastLine = findLines[findLines.length - 1];\n const middleLines = findLines.slice(1, -1);\n\n for (let i = 0; i <= contentLines.length - findLines.length; i++) {\n if (contentLines[i] !== firstLine) continue;\n const endIdx = i + findLines.length - 1;\n if (contentLines[endIdx] !== lastLine) continue;\n\n const candidates: { idx: number; score: number }[] = [];\n\n for (let j = i + 1; j < endIdx; j++) {\n candidates.push({ idx: j, score: 0 });\n }\n\n let totalScore = 0;\n for (let k = 0; k < middleLines.length; k++) {\n const contentLine = contentLines[i + 1 + k];\n const sim = similarity(middleLines[k], contentLine);\n totalScore += sim;\n if (candidates[k]) candidates[k].score = sim;\n }\n\n const avgScore = totalScore / middleLines.length;\n const threshold = candidates.length > 1 ? 0.3 : 0.0;\n\n if (avgScore >= threshold) {\n yield contentLines.slice(i, i + findLines.length).join(\"\\n\");\n }\n }\n}\n\nfunction* whitespaceNormalizedReplacer(content: string, find: string): Generator<string, void, unknown> {\n const normFind = find.replace(/\\s+/g, \" \").trim();\n if (!normFind) return;\n const normContent = content.replace(/\\s+/g, \" \").trim();\n const idx = normContent.indexOf(normFind);\n if (idx === -1) return;\n\n const firstWord = normFind.split(\" \")[0];\n const lastWord = normFind.split(\" \").filter(Boolean).pop()!;\n const firstIdx = content.indexOf(firstWord);\n const lastIdx = content.lastIndexOf(lastWord);\n if (firstIdx === -1 || lastIdx === -1 || lastIdx < firstIdx) return;\n\n yield content.substring(firstIdx, lastIdx + lastWord.length);\n}\n\nfunction* indentationFlexibleReplacer(content: string, find: string): Generator<string, void, unknown> {\n const lines = find.split(\"\\n\");\n const minIndent = Math.min(...lines.filter(l => l.trim().length > 0).map(l => l.match(/^(\\s*)/)?.[1].length ?? 0));\n const dedented = lines.map(l => l.substring(minIndent)).join(\"\\n\");\n if (content.includes(dedented)) yield dedented;\n}\n\nfunction* escapeNormalizedReplacer(content: string, find: string): Generator<string, void, unknown> {\n const normalized = find\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\'/g, \"'\");\n if (content.includes(normalized)) yield normalized;\n}\n\nfunction* trimmedBoundaryReplacer(content: string, find: string): Generator<string, void, unknown> {\n const trimmed = find.trim();\n if (content.includes(trimmed)) yield trimmed;\n}\n\nfunction* contextAwareReplacer(content: string, find: string): Generator<string, void, unknown> {\n const findLines = find.split(\"\\n\");\n if (findLines.length < 3) return;\n\n const firstLine = findLines[0].trim();\n const lastLine = findLines[findLines.length - 1].trim();\n const contentLines = content.split(\"\\n\");\n\n for (let i = 0; i <= contentLines.length - 3; i++) {\n if (contentLines[i].trim() !== firstLine) continue;\n\n let bestEndIdx = -1;\n let bestScore = 0;\n\n for (let j = i + 2; j < contentLines.length; j++) {\n if (contentLines[j].trim() === lastLine) {\n const middleCount = j - i - 1;\n let matchCount = 0;\n for (let k = 1; k <= middleCount; k++) {\n const fIdx = Math.floor((k / (middleCount + 1)) * (findLines.length - 2));\n if (fIdx >= 0 && fIdx < findLines.length - 2) {\n if (similarity(contentLines[i + k].trim(), findLines[fIdx + 1].trim()) > 0.5) {\n matchCount++;\n }\n }\n }\n const score = matchCount / middleCount;\n if (score > bestScore) {\n bestScore = score;\n bestEndIdx = j;\n }\n }\n }\n\n if (bestEndIdx !== -1 && bestScore > 0.5) {\n yield contentLines.slice(i, bestEndIdx + 1).join(\"\\n\");\n }\n }\n}\n\nconst REPLACERS: ReplacerFn[] = [\n simpleReplacer,\n lineTrimmedReplacer,\n blockAnchorReplacer,\n whitespaceNormalizedReplacer,\n indentationFlexibleReplacer,\n escapeNormalizedReplacer,\n trimmedBoundaryReplacer,\n contextAwareReplacer,\n];\n\nexport function fuzzyReplace(\n content: string,\n oldString: string,\n newString: string,\n replaceAll = false,\n): string {\n for (const replacer of REPLACERS) {\n for (const search of replacer(content, oldString)) {\n const idx = content.indexOf(search);\n if (idx === -1) continue;\n\n if (replaceAll) {\n return content.split(search).join(newString);\n }\n\n const firstIdx = content.indexOf(search);\n const lastIdx = content.lastIndexOf(search);\n if (firstIdx !== lastIdx) continue;\n\n return content.substring(0, firstIdx) + newString + content.substring(firstIdx + search.length);\n }\n }\n\n throw new FuzzyEditError(\"not_found\", `Could not find match for replacement (after 8 fuzzy strategies)`);\n}\n\nexport function fuzzyContains(content: string, find: string): boolean {\n try {\n fuzzyReplace(content, find, \"PLACEHOLDER_CHECK\");\n return true;\n } catch {\n return false;\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { globToRegExp } from '../utils.js';\n\nconst MAX_RESULTS = 200;\n\nasync function walkDir(dir: string): Promise<string[]> {\n const { walkDir: walk } = await import('../utils.js');\n const entries = await walk(dir);\n return entries.map((e) => e.path);\n}\n\nfunction matchInclude(filePath: string, includePattern?: string): boolean {\n if (!includePattern) return true;\n const base = path.basename(filePath);\n const re = globToRegExp(includePattern);\n return re.test(base);\n}\n\nexport const GlobTool = defineTool({\n name: 'glob',\n description:\n 'Find files matching a glob pattern. Returns matching file paths sorted by modification time.',\n inputSchema: z.object({\n pattern: z.string().describe('Glob pattern (e.g., \"**/*.ts\", \"src/**/*.tsx\")'),\n path: z.string().optional().describe('Directory to search in (default: current directory)'),\n include: z.string().optional().describe('File extension or pattern to include (e.g., \"*.ts\")'),\n }),\n isReadOnly: true,\n isConcurrencySafe: true,\n execute: async ({ pattern, path: searchPath, include }, context) => {\n try {\n const searchDir = searchPath\n ? path.isAbsolute(searchPath)\n ? searchPath\n : path.resolve(context.cwd, searchPath)\n : context.cwd;\n\n const allFiles = await walkDir(searchDir);\n const re = globToRegExp(pattern);\n\n const matched: Array<{ filePath: string; mtimeMs: number }> = [];\n\n for (const filePath of allFiles) {\n const relative = path.relative(searchDir, filePath);\n if (re.test(relative) && matchInclude(relative, include)) {\n try {\n const stat = await fs.stat(filePath);\n matched.push({ filePath: relative, mtimeMs: stat.mtimeMs });\n } catch {\n matched.push({ filePath: relative, mtimeMs: 0 });\n }\n }\n }\n\n matched.sort((a, b) => b.mtimeMs - a.mtimeMs);\n const limited = matched.slice(0, MAX_RESULTS);\n return limited.map((m) => m.filePath).join('\\n');\n } catch (err: unknown) {\n return `Error searching files: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { globToRegExp } from '../utils.js';\n\nconst MAX_MATCHES = 200;\n\nasync function walkDir(dir: string): Promise<string[]> {\n const { walkDir: walk } = await import('../utils.js');\n const entries = await walk(dir);\n return entries.map((e) => e.path);\n}\n\nexport const GrepTool = defineTool({\n name: 'grep',\n description:\n 'Search file contents using a regular expression. Returns matching file paths with line numbers.',\n inputSchema: z.object({\n pattern: z.string().describe('Regular expression to search for'),\n path: z.string().optional().describe('Directory to search in'),\n include: z.string().optional().describe('File pattern to include (e.g., \"*.ts\")'),\n }),\n isReadOnly: true,\n isConcurrencySafe: true,\n execute: async ({ pattern, path: searchPath, include }, context) => {\n try {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch {\n return `Error: Invalid regular expression: ${pattern}`;\n }\n\n const searchDir = searchPath\n ? path.isAbsolute(searchPath)\n ? searchPath\n : path.resolve(context.cwd, searchPath)\n : context.cwd;\n\n const includeRe = include ? globToRegExp(include) : null;\n const allFiles = await walkDir(searchDir);\n const matches: string[] = [];\n\n for (const filePath of allFiles) {\n if (matches.length >= MAX_MATCHES) break;\n\n if (includeRe) {\n const base = path.basename(filePath);\n if (!includeRe.test(base)) continue;\n }\n\n let content: string;\n try {\n content = await fs.readFile(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n const lines = content.split('\\n');\n const relative = path.relative(searchDir, filePath);\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n if (matches.length >= MAX_MATCHES) break;\n const line = lines[lineIdx];\n if (regex.test(line)) {\n matches.push(`${relative}:${lineIdx + 1}: ${line}`);\n regex.lastIndex = 0;\n } else {\n regex.lastIndex = 0;\n }\n }\n }\n\n if (matches.length === 0) {\n return 'No matches found.';\n }\n\n return matches.join('\\n');\n } catch (err: unknown) {\n return `Error searching files: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n","import { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_RESPONSE_SIZE = 100 * 1024;\n\nexport const WebFetchTool = defineTool({\n name: 'web_fetch',\n description:\n 'Fetch content from a URL. Returns the response body as text. Supports HTTP and HTTPS.',\n inputSchema: z.object({\n url: z.string().url().describe('The URL to fetch'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional().describe('HTTP method (default: GET)'),\n headers: z.record(z.string()).optional().describe('Request headers'),\n body: z.string().optional().describe('Request body (for POST/PUT)'),\n }),\n isReadOnly: true,\n isConcurrencySafe: true,\n execute: async ({ url, method = 'GET', headers, body }, context) => {\n try {\n if (context.abortSignal?.aborted) {\n return 'Request aborted before execution';\n }\n\n const timeoutSignal = AbortSignal.timeout(30_000);\n let signal: AbortSignal;\n if (context.abortSignal) {\n signal = AbortSignal.any([context.abortSignal, timeoutSignal]);\n } else {\n signal = timeoutSignal;\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal,\n redirect: 'follow',\n };\n\n if (body && method !== 'GET') {\n fetchOptions.body = body;\n }\n\n const response = await fetch(url, fetchOptions);\n const contentType = response.headers.get('content-type') ?? 'unknown';\n const status = response.status;\n\n const text = await response.text();\n\n let result = `Status: ${status}\\nContent-Type: ${contentType}\\n\\n`;\n if (text.length > MAX_RESPONSE_SIZE) {\n const half = Math.floor(MAX_RESPONSE_SIZE / 2);\n const notice = `\\n\\n... [response truncated: showing first ${half} and last ${half} of ${text.length} characters] ...\\n\\n`;\n result += text.slice(0, half) + notice + text.slice(-half);\n } else {\n result += text;\n }\n\n return result;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === 'AbortError') {\n return 'Request aborted';\n }\n return `Error fetching URL: ${err instanceof Error ? err.message : String(err)}`;\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,aAAa,SAAyB;AACpD,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,MAAI,QAAQ;AAEZ,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,SAAS,MAAM;AACjB,eAAS;AAAA,IACX,OAAO;AACL,YAAM,UAAU,KACb,QAAQ,qBAAqB,MAAM,EACnC,QAAQ,OAAO,OAAO,EACtB,QAAQ,OAAO,MAAM;AACxB,eAAS,UAAU;AAAA,IACrB;AAAA,EACF;AAEA,UAAQ,MAAM,QAAQ,SAAS,GAAG,EAAE,QAAQ,OAAO,EAAE;AACrD,SAAO,IAAI,OAAO,QAAQ,KAAK,OAAO;AACxC;AAOA,eAAsB,QAAQ,KAAa,SAAiF;AAC1H,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,iBAAiB,SAAS,kBAAkB;AAClD,QAAM,UAAuB,CAAC;AAE9B,iBAAe,KAAK,SAAiB,OAA8B;AACjE,QAAI,QAAQ,SAAU;AAEtB,QAAI;AACJ,QAAI;AACF,gBAAU,MAAS,aAAS,QAAQ,SAAS,EAAE,eAAe,KAAK,CAAC;AAAA,IACtE,QAAQ;AACN;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAgB,WAAK,SAAS,MAAM,IAAI;AAE9C,UAAI,MAAM,SAAS,kBAAkB,MAAM,SAAS,OAAQ;AAE5D,UAAI;AACF,YAAI;AACJ,YAAI,MAAM,eAAe,KAAK,CAAC,eAAgB;AAC/C,eAAO,MAAS,aAAS,KAAK,QAAQ;AAEtC,YAAI,KAAK,OAAO,GAAG;AACjB,kBAAQ,KAAK,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,QACvC,WAAW,KAAK,YAAY,GAAG;AAC7B,gBAAM,KAAK,UAAU,QAAQ,CAAC;AAAA,QAChC;AAAA,MACF,QAAQ;AACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,KAAK,KAAK,CAAC;AACjB,SAAO;AACT;AAnEA,IAAAA,KACAC;AADA;AAAA;AAAA;AAAA,IAAAD,MAAoB;AACpB,IAAAC,QAAsB;AAAA;AAAA;;;ACDtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiCA,SAAS,gBAAgB,QAA0C;AACjE,QAAM,IAAI;AACV,QAAM,MAAM,EAAE;AACd,QAAM,WAAW,IAAI;AACrB,QAAM,cAAc,IAAI;AAExB,QAAM,OAAgC,CAAC;AACvC,MAAI,YAAa,MAAK,cAAc;AAEpC,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,IACpC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,OAAO;AAAA,IACjC,KAAK,YAAY;AACf,YAAM,QAAQ,gBAAgB,IAAI,OAAO;AACzC,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS,MAAM;AAAA,IACzC;AAAA,IACA,KAAK,aAAa;AAChB,YAAM,UAAU,IAAI;AACpB,YAAM,QAAQ,QAAQ;AACtB,YAAM,aAAsC,CAAC;AAC7C,YAAM,WAAqB,CAAC;AAC5B,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,mBAAW,GAAG,IAAI,gBAAgB,KAAK;AACvC,cAAM,UAAW,MAA4C;AAC7D,YACE,QAAQ,aAAa,iBACrB,QAAQ,aAAa,gBACrB,QAAQ,aAAa,cACrB;AACA,mBAAS,KAAK,GAAG;AAAA,QACnB;AAAA,MACF;AACA,YAAM,SAAkC,EAAE,GAAG,MAAM,MAAM,UAAU,WAAW;AAC9E,UAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAC3C,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,IAAI,OAAO;AAAA,IACrC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,OAAO,IAAI,MAAM;AAAA,IACrC,KAAK,YAAY;AACf,YAAM,UAAW,IAAI,QAAsB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACxE,aAAO,EAAE,GAAG,MAAM,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,KAAK,yBAAyB;AAC5B,YAAM,UAAW,IAAI,QAAsB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACxE,aAAO,EAAE,GAAG,MAAM,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,KAAK;AACH,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC,KAAK,eAAe;AAClB,YAAM,QAAQ,gBAAgB,IAAI,SAAS;AAC3C,YAAM,WAAW;AACjB,aAAO;AAAA,IACT;AAAA,IACA,KAAK,cAAc;AACjB,YAAM,QAAQ,gBAAgB,IAAI,SAAS;AAC3C,YAAM,WAAW;AACjB,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC,KAAK,aAAa;AAChB,YAAM,cAAc,gBAAgB,IAAI,SAAS;AACjD,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU,sBAAsB,YAAY;AAAA,IACtE;AAAA,IACA,KAAK,YAAY;AACf,YAAM,QAAS,IAAI,MAAoB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACpE,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS,OAAO,UAAU,MAAM,QAAQ,UAAU,MAAM,OAAO;AAAA,IACzF;AAAA,IACA,KAAK,cAAc;AACjB,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC;AAAA,IACA,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,OAAO;AAAA,IACjC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE;AAAA,IAC5B;AACE,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,EACrC;AACF;AAGO,SAAS,WAAwB,QAAwC;AAC9E,QAAM,OAAgB;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,YAAY,OAAO,cAAc;AAAA,IACjC,mBAAmB,OAAO,qBAAqB;AAAA,IAC/C,SAAS,OAAO;AAAA,IAChB,QAA2B;AACzB,aAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,QACpB,cAAc,gBAAgB,OAAO,WAAW;AAAA,MAClD;AAAA,IACF;AAAA,IACA,SAAS,OAAkB;AACzB,YAAM,UAAU,OAAO,QAAQ,KAAgC,EAC5D,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,YAAI,OAAO,MAAM,SAAU,QAAO,GAAG,CAAC,MAAM,CAAC;AAC7C,YAAI,MAAM,OAAW,QAAO,GAAG,CAAC;AAChC,YAAI,MAAM,KAAM,QAAO,GAAG,CAAC;AAC3B,eAAO,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC;AAAA,MAC3B,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,GAAG,OAAO,IAAI,MAAM,OAAO;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,oBAAoB,MAA4B;AAC9D,QAAM,WAAW,IAAI,KAAK;AAC1B,SAAO;AAAA,IACL,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,aAAa,SAAS;AAAA,IACtB,YAAY,SAAS;AAAA,IACrB,mBAAmB,SAAS;AAAA,IAC5B,SAAS,CAAC,OAAO,YAAY,SAAS,QAAQ,OAAO,OAAO;AAAA,IAC5D,OAAO,MAAM,SAAS,MAAM;AAAA,IAC5B,UAAU,CAAC,UAAU,SAAS,SAAS,KAAK;AAAA,EAC9C;AACF;;;ACtKO,IAAM,eAAN,MAAmB;AAAA,EACP,QAAQ,oBAAI,IAAkB;AAAA,EAE/C,YAAY,OAAgB;AAC1B,QAAI,OAAO;AACT,iBAAW,QAAQ,OAAO;AACxB,aAAK,IAAI,IAAI;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,MAAkB;AACpB,QAAI,KAAK,MAAM,IAAI,KAAK,IAAI,GAAG;AAC7B,cAAQ,KAAK,kCAAkC,KAAK,IAAI,4BAA4B;AACpF;AAAA,IACF;AACA,SAAK,MAAM,IAAI,KAAK,MAAM,IAAI;AAAA,EAChC;AAAA;AAAA,EAGA,IAAI,MAAgC;AAClC,WAAO,KAAK,MAAM,IAAI,IAAI;AAAA,EAC5B;AAAA;AAAA,EAGA,IAAI,MAAuB;AACzB,WAAO,KAAK,MAAM,IAAI,IAAI;AAAA,EAC5B;AAAA;AAAA,EAGA,oBAAoB,MAAkC;AACpD,UAAM,QAAQ,KAAK,YAAY;AAC/B,QAAI,KAAK,MAAM,IAAI,IAAI,EAAG,QAAO;AACjC,eAAW,OAAO,KAAK,MAAM,KAAK,GAAG;AACnC,UAAI,IAAI,YAAY,MAAM,MAAO,QAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,YAAsB;AACpB,WAAO,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,EACrC;AAAA;AAAA,EAGA,SAAiB;AACf,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,SAA8B;AAC5B,WAAO,KAAK,OAAO,EAChB,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAC3C,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;;;ACnDA,IAAM,YAAN,MAAgB;AAAA,EAId,YAA6B,KAAa;AAAb;AAAA,EAAc;AAAA,EAAd;AAAA,EAHrB,UAAU;AAAA,EACV,QAAwB,CAAC;AAAA,EAIjC,UAAyB;AACvB,QAAI,KAAK,UAAU,KAAK,KAAK;AAC3B,WAAK;AACL,aAAO,QAAQ,QAAQ;AAAA,IACzB;AACA,WAAO,IAAI,QAAc,CAAC,YAAY;AACpC,WAAK,MAAM,KAAK,OAAO;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,UAAgB;AACd,SAAK;AACL,UAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,QAAI,MAAM;AACR,WAAK;AACL,WAAK;AAAA,IACP;AAAA,EACF;AACF;AAEA,SAAS,mBACP,WACA,UACkB;AAClB,QAAM,UAA4B,CAAC;AACnC,MAAI,eAA+B,CAAC;AACpC,MAAI,2BAA2B;AAE/B,aAAW,QAAQ,WAAW;AAC5B,UAAM,OAAO,SAAS,IAAI,KAAK,IAAI;AACnC,UAAM,eAAe,OAAO,KAAK,cAAc,KAAK,oBAAoB;AAExE,QAAI,gBAAgB,0BAA0B;AAC5C,mBAAa,KAAK,IAAI;AAAA,IACxB,OAAO;AACL,UAAI,aAAa,SAAS,GAAG;AAC3B,gBAAQ,KAAK,YAAY;AAAA,MAC3B;AACA,qBAAe,CAAC,IAAI;AACpB,iCAA2B;AAAA,IAC7B;AAAA,EACF;AAEA,MAAI,aAAa,SAAS,GAAG;AAC3B,YAAQ,KAAK,YAAY;AAAA,EAC3B;AAEA,SAAO;AACT;AAEA,eAAe,gBACb,MACA,UACA,SACA,iBACA,aAC8B;AAC9B,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,IAAI,KAAK,IAAI;AACnC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ,iBAAiB,KAAK,IAAI;AAAA,MAClC,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,QAAQ,YAAY,IAAI;AAE9B,MAAI;AACF,UAAM,cAAc,KAAK,YAAY,UAAU,KAAK,KAAK;AACzD,QAAI,CAAC,YAAY,SAAS;AACxB,aAAO;AAAA,QACL,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,QAAQ,qBAAqB,KAAK,IAAI,KAAK,YAAY,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,QACpG,SAAS;AAAA,QACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,MAClD;AAAA,IACF;AAEA,QAAI,iBAAiB;AACnB,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,KAAK,KAAK;AAC3D,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ,+BAA+B,KAAK,IAAI;AAAA,UAChD,SAAS;AAAA,UACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,QAAQ,YAAY,MAAM,OAAO;AAE3D,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,IAClD;AAAA,EACF,SAAS,KAAc;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,IAAI,KAAK,OAAO;AAAA,MAChD,SAAS;AAAA,MACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AASA,eAAsB,iBACpB,OACA,WACA,SACA,iBACA,aACgC;AAChC,QAAM,UAAU,mBAAmB,WAAW,KAAK;AACnD,QAAM,UAAiC,CAAC;AAExC,aAAW,SAAS,SAAS;AAC3B,QAAI,aAAa,SAAS;AACxB,iBAAW,QAAQ,OAAO;AACxB,gBAAQ,KAAK;AAAA,UACX,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,YAAY,IAAI,UAAU,EAAE;AAClC,YAAMC,YAAW,MAAM;AAAA,QAAI,CAAC,SAC1B,UAAU,QAAQ,EAAE,KAAK,YAAY;AACnC,cAAI;AACF,mBAAO,MAAM,gBAAgB,MAAM,OAAO,SAAS,iBAAiB,WAAW;AAAA,UACjF,UAAE;AACA,sBAAU,QAAQ;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,UAAU,MAAM,QAAQ,WAAWA,SAAQ;AACjD,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,cAAM,IAAI,QAAQ,CAAC;AACnB,YAAI,EAAE,WAAW,aAAa;AAC5B,kBAAQ,KAAK,EAAE,KAAK;AAAA,QACtB,OAAO;AACL,kBAAQ,KAAK;AAAA,YACX,IAAI,MAAM,CAAC,EAAE;AAAA,YACb,MAAM,MAAM,CAAC,EAAE;AAAA,YACf,QAAQ,qBAAqB,EAAE,kBAAkB,QAAQ,EAAE,OAAO,UAAU,OAAO,EAAE,MAAM,CAAC;AAAA,YAC5F,SAAS;AAAA,YACT,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,SAAS,MAAM,gBAAgB,MAAM,CAAC,GAAG,OAAO,SAAS,iBAAiB,WAAW;AAC3F,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;;;ACjNA,gCAAqB;AACrB,iBAAkB;AAGlB,IAAM,aAAa,KAAK;AACxB,IAAM,gBAAgB,KAAK;AAE3B,SAAS,eAAe,QAAwB;AAC9C,MAAI,OAAO,UAAU,WAAY,QAAO;AACxC,QAAM,SAAS;AAAA;AAAA,uCAA4C,aAAa,aAAa,aAAa,OAAO,OAAO,MAAM;AAAA;AAAA;AACtH,SAAO,OAAO,MAAM,GAAG,aAAa,IAAI,SAAS,OAAO,MAAM,CAAC,aAAa;AAC9E;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,aAAE,OAAO;AAAA,IACpB,SAAS,aAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC3D,SAAS,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0CAA0C;AAAA,IAClF,SAAS,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC7E,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,UAAU,MAAQ,QAAQ,GAAG,YAAY;AAClE,WAAO,IAAI,QAAgB,CAAC,YAAY;AACtC,UAAI,UAAU;AACd,YAAM,OAAO,CAAC,WAAmB;AAC/B,YAAI,QAAS;AACb,kBAAU;AACV,gBAAQ,MAAM;AAAA,MAChB;AAEA,UAAI,QAAQ,aAAa,SAAS;AAChC,aAAK,kCAAkC;AACvC;AAAA,MACF;AAEA,YAAM,YAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACE,KAAK,WAAW,QAAQ;AAAA,UACxB;AAAA,UACA,WAAW,KAAK,OAAO;AAAA,UACvB,YAAY;AAAA,QACd;AAAA,QACA,CAAC,OAAO,QAAQ,WAAW;AACzB,cAAI,SAAS;AACb,cAAI,OAAQ,WAAU;AAAA,EAAY,MAAM;AAAA;AAAA;AACxC,cAAI,OAAQ,WAAU;AAAA,EAAY,MAAM;AAAA;AAAA;AACxC,oBAAU,cAAc,OAAO,QAAQ,CAAC;AACxC,cAAI,SAAS,MAAM,QAAQ;AACzB,qBAAS,2BAA2B,OAAO;AAAA;AAAA,EAAS,MAAM;AAAA,UAC5D;AACA,eAAK,eAAe,MAAM,CAAC;AAAA,QAC7B;AAAA,MACF;AAEA,YAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAK,8BAA8B,IAAI,OAAO,EAAE;AAAA,MAClD,CAAC;AAED,UAAI,QAAQ,aAAa;AACvB,gBAAQ,YAAY;AAAA,UAClB;AAAA,UACA,MAAM;AACJ,kBAAM,KAAK,SAAS;AACpB,iBAAK,iBAAiB;AAAA,UACxB;AAAA,UACA,EAAE,MAAM,KAAK;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;;;AC1ED,sBAAe;AACf,uBAAiB;AACjB,IAAAC,cAAkB;AAGlB,IAAM,kBAAkB;AAEjB,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,uCAAuC;AAAA,IACjE,QAAQ,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,IACtF,OAAO,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,EACzE,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ,MAAM,GAAG,YAAY;AAC7D,QAAI;AACF,YAAM,WAAW,iBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,iBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAE1F,YAAM,UAAU,MAAM,gBAAAC,QAAG,SAAS,UAAU,OAAO;AACnD,YAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,YAAM,YAAY,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;AACjD,YAAM,aAAa,YAAY;AAC/B,YAAM,WAAW,SAAS,OAAO,aAAa,QAAQ,MAAM;AAC5D,YAAM,WAAW,MAAM,MAAM,YAAY,QAAQ;AAEjD,YAAM,YAAY,SACf,IAAI,CAAC,MAAM,MAAM;AAChB,cAAM,UAAU,YAAY;AAC5B,cAAM,YAAY,KAAK,SAAS,kBAAkB,KAAK,MAAM,GAAG,eAAe,IAAI,QAAQ;AAC3F,eAAO,GAAG,OAAO,KAAK,SAAS;AAAA,MACjC,CAAC,EACA,KAAK,IAAI;AAEZ,aAAO;AAAA,IACT,SAAS,KAAc;AACrB,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,0BAA0B,QAAQ;AAAA,MAC3C;AACA,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,+BAA+B,QAAQ;AAAA,MAChD;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;ACjDD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAGX,IAAM,gBAAgB,WAAW;AAAA,EACtC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC5C,SAAS,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,EACjD,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ,GAAG,YAAY;AACvD,QAAI;AACF,YAAM,WAAW,kBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAC1F,YAAM,MAAM,kBAAAA,QAAK,QAAQ,QAAQ;AAEjC,YAAM,iBAAAC,QAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACvC,YAAM,iBAAAA,QAAG,UAAU,UAAU,SAAS,OAAO;AAE7C,aAAO,SAAS,QAAQ,MAAM,kBAAkB,QAAQ;AAAA,IAC1D,SAAS,KAAc;AACrB,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;AC5BD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;;;ACEX,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACxC,YAA4B,MAAiC,SAAiB;AAC5E,UAAM,OAAO;AADa;AAE1B,SAAK,OAAO;AAAA,EACd;AAAA,EAH4B;AAI9B;AAEA,SAAS,YAAY,GAAW,GAAmB;AACjD,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,EAAG,QAAO;AACpB,QAAM,KAAiB,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AACnF,WAAS,IAAI,GAAG,KAAK,GAAG,IAAK,IAAG,CAAC,EAAE,CAAC,IAAI;AACxC,WAAS,IAAI,GAAG,KAAK,GAAG,IAAK,IAAG,CAAC,EAAE,CAAC,IAAI;AACxC,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,YAAM,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI;AACzC,SAAG,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI;AAAA,IACjF;AAAA,EACF;AACA,SAAO,GAAG,CAAC,EAAE,CAAC;AAChB;AAEA,SAAS,WAAW,GAAW,GAAmB;AAChD,MAAI,EAAE,SAAS,OAAQ,EAAE,SAAS,IAAM,QAAO,MAAM,IAAI,IAAI;AAC7D,QAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AAC1C,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO,IAAI,YAAY,GAAG,CAAC,IAAI;AACjC;AAEA,UAAU,eAAe,SAAiB,MAAgD;AACxF,MAAI,QAAQ,SAAS,IAAI,EAAG,OAAM;AACpC;AAEA,UAAU,oBAAoB,SAAiB,MAAgD;AAC7F,QAAM,QAAQ,KAAK,MAAM,IAAI,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAChD,QAAM,eAAe,QAAQ,MAAM,IAAI;AACvC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,MAAM,QAAQ,KAAK;AAC5D,QAAI,aAAa,MAAM,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ,GAAG,KAAK,MAAM,MAAM,GAAG,CAAC,GAAG;AACxF,YAAM,aAAa,MAAM,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI;AAAA,IACzD;AAAA,EACF;AACF;AAEA,UAAU,oBAAoB,SAAiB,MAAgD;AAC7F,QAAM,YAAY,KAAK,MAAM,IAAI;AACjC,QAAM,eAAe,QAAQ,MAAM,IAAI;AAEvC,MAAI,UAAU,SAAS,EAAG;AAE1B,QAAM,YAAY,UAAU,CAAC;AAC7B,QAAM,WAAW,UAAU,UAAU,SAAS,CAAC;AAC/C,QAAM,cAAc,UAAU,MAAM,GAAG,EAAE;AAEzC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,UAAU,QAAQ,KAAK;AAChE,QAAI,aAAa,CAAC,MAAM,UAAW;AACnC,UAAM,SAAS,IAAI,UAAU,SAAS;AACtC,QAAI,aAAa,MAAM,MAAM,SAAU;AAEvC,UAAM,aAA+C,CAAC;AAEtD,aAAS,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;AACnC,iBAAW,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;AAAA,IACtC;AAEA,QAAI,aAAa;AACjB,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,YAAM,cAAc,aAAa,IAAI,IAAI,CAAC;AAC1C,YAAM,MAAM,WAAW,YAAY,CAAC,GAAG,WAAW;AAClD,oBAAc;AACd,UAAI,WAAW,CAAC,EAAG,YAAW,CAAC,EAAE,QAAQ;AAAA,IAC3C;AAEA,UAAM,WAAW,aAAa,YAAY;AAC1C,UAAM,YAAY,WAAW,SAAS,IAAI,MAAM;AAEhD,QAAI,YAAY,WAAW;AACzB,YAAM,aAAa,MAAM,GAAG,IAAI,UAAU,MAAM,EAAE,KAAK,IAAI;AAAA,IAC7D;AAAA,EACF;AACF;AAEA,UAAU,6BAA6B,SAAiB,MAAgD;AACtG,QAAM,WAAW,KAAK,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAChD,MAAI,CAAC,SAAU;AACf,QAAM,cAAc,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACtD,QAAM,MAAM,YAAY,QAAQ,QAAQ;AACxC,MAAI,QAAQ,GAAI;AAEhB,QAAM,YAAY,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,QAAM,WAAW,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI;AACzD,QAAM,WAAW,QAAQ,QAAQ,SAAS;AAC1C,QAAM,UAAU,QAAQ,YAAY,QAAQ;AAC5C,MAAI,aAAa,MAAM,YAAY,MAAM,UAAU,SAAU;AAE7D,QAAM,QAAQ,UAAU,UAAU,UAAU,SAAS,MAAM;AAC7D;AAEA,UAAU,4BAA4B,SAAiB,MAAgD;AACrG,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,YAAY,KAAK,IAAI,GAAG,MAAM,OAAO,OAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,OAAK,EAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AACjH,QAAM,WAAW,MAAM,IAAI,OAAK,EAAE,UAAU,SAAS,CAAC,EAAE,KAAK,IAAI;AACjE,MAAI,QAAQ,SAAS,QAAQ,EAAG,OAAM;AACxC;AAEA,UAAU,yBAAyB,SAAiB,MAAgD;AAClG,QAAM,aAAa,KAChB,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,GAAI,EACpB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,QAAQ,GAAG;AACtB,MAAI,QAAQ,SAAS,UAAU,EAAG,OAAM;AAC1C;AAEA,UAAU,wBAAwB,SAAiB,MAAgD;AACjG,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,QAAQ,SAAS,OAAO,EAAG,OAAM;AACvC;AAEA,UAAU,qBAAqB,SAAiB,MAAgD;AAC9F,QAAM,YAAY,KAAK,MAAM,IAAI;AACjC,MAAI,UAAU,SAAS,EAAG;AAE1B,QAAM,YAAY,UAAU,CAAC,EAAE,KAAK;AACpC,QAAM,WAAW,UAAU,UAAU,SAAS,CAAC,EAAE,KAAK;AACtD,QAAM,eAAe,QAAQ,MAAM,IAAI;AAEvC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,GAAG,KAAK;AACjD,QAAI,aAAa,CAAC,EAAE,KAAK,MAAM,UAAW;AAE1C,QAAI,aAAa;AACjB,QAAI,YAAY;AAEhB,aAAS,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAChD,UAAI,aAAa,CAAC,EAAE,KAAK,MAAM,UAAU;AACvC,cAAM,cAAc,IAAI,IAAI;AAC5B,YAAI,aAAa;AACjB,iBAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACrC,gBAAM,OAAO,KAAK,MAAO,KAAK,cAAc,MAAO,UAAU,SAAS,EAAE;AACxE,cAAI,QAAQ,KAAK,OAAO,UAAU,SAAS,GAAG;AAC5C,gBAAI,WAAW,aAAa,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK;AAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,QAAQ,aAAa;AAC3B,YAAI,QAAQ,WAAW;AACrB,sBAAY;AACZ,uBAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe,MAAM,YAAY,KAAK;AACxC,YAAM,aAAa,MAAM,GAAG,aAAa,CAAC,EAAE,KAAK,IAAI;AAAA,IACvD;AAAA,EACF;AACF;AAEA,IAAM,YAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,aACd,SACA,WACA,WACA,aAAa,OACL;AACR,aAAW,YAAY,WAAW;AAChC,eAAW,UAAU,SAAS,SAAS,SAAS,GAAG;AACjD,YAAM,MAAM,QAAQ,QAAQ,MAAM;AAClC,UAAI,QAAQ,GAAI;AAEhB,UAAI,YAAY;AACd,eAAO,QAAQ,MAAM,MAAM,EAAE,KAAK,SAAS;AAAA,MAC7C;AAEA,YAAM,WAAW,QAAQ,QAAQ,MAAM;AACvC,YAAM,UAAU,QAAQ,YAAY,MAAM;AAC1C,UAAI,aAAa,QAAS;AAE1B,aAAO,QAAQ,UAAU,GAAG,QAAQ,IAAI,YAAY,QAAQ,UAAU,WAAW,OAAO,MAAM;AAAA,IAChG;AAAA,EACF;AAEA,QAAM,IAAI,eAAe,aAAa,iEAAiE;AACzG;AAEO,SAAS,cAAc,SAAiB,MAAuB;AACpE,MAAI;AACF,iBAAa,SAAS,MAAM,mBAAmB;AAC/C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AD1MO,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC5C,WAAW,cAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,IAC/E,WAAW,cAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,IACvD,YAAY,cAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EACjG,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,WAAW,WAAW,aAAa,MAAM,GAAG,YAAY;AACxF,QAAI;AACF,YAAM,WAAW,kBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAE1F,YAAM,UAAU,MAAM,iBAAAC,QAAG,SAAS,UAAU,OAAO;AAEnD,UAAI;AACJ,UAAI,QAAQ;AAEZ,UAAI,YAAY;AACd,cAAM,cAAc,QAAQ,MAAM,SAAS,EAAE,SAAS;AACtD,YAAI,gBAAgB,GAAG;AACrB,cAAI;AACF,yBAAa,aAAa,SAAS,WAAW,WAAW,IAAI;AAC7D,oBAAQ;AAAA,UACV,QAAQ;AACN,mBAAO,iCAAiC,QAAQ;AAAA,UAClD;AAAA,QACF,OAAO;AACL,uBAAa,QAAQ,MAAM,SAAS,EAAE,KAAK,SAAS;AACpD,kBAAQ;AAAA,QACV;AAAA,MACF,OAAO;AACL,YAAI;AACF,uBAAa,aAAa,SAAS,WAAW,WAAW,KAAK;AAC9D,kBAAQ;AAAA,QACV,SAAS,KAAK;AACZ,gBAAM,OAAQ,IAA0B;AACxC,cAAI,SAAS,aAAa;AACxB,mBAAO,4CAA4C,QAAQ;AAAA,UAC7D;AACA,iBAAO,iCAAiC,QAAQ;AAAA,QAClD;AAAA,MACF;AAEA,YAAM,iBAAAA,QAAG,UAAU,UAAU,YAAY,OAAO;AAEhD,aAAO,YAAY,KAAK,qBAAqB,QAAQ;AAAA,IACvD,SAAS,KAAc;AACrB,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,0BAA0B,QAAQ;AAAA,MAC3C;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;AE/DD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAElB;AAEA,IAAM,cAAc;AAEpB,eAAeC,SAAQ,KAAgC;AACrD,QAAM,EAAE,SAAS,KAAK,IAAI,MAAM;AAChC,QAAM,UAAU,MAAM,KAAK,GAAG;AAC9B,SAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAClC;AAEA,SAAS,aAAa,UAAkB,gBAAkC;AACxE,MAAI,CAAC,eAAgB,QAAO;AAC5B,QAAM,OAAO,kBAAAC,QAAK,SAAS,QAAQ;AACnC,QAAM,KAAK,aAAa,cAAc;AACtC,SAAO,GAAG,KAAK,IAAI;AACrB;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,SAAS,cAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,IAC7E,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,IAC1F,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,EAC/F,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,MAAM,YAAY,QAAQ,GAAG,YAAY;AAClE,QAAI;AACF,YAAM,YAAY,aACd,kBAAAA,QAAK,WAAW,UAAU,IACxB,aACA,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,UAAU,IACtC,QAAQ;AAEZ,YAAM,WAAW,MAAMD,SAAQ,SAAS;AACxC,YAAM,KAAK,aAAa,OAAO;AAE/B,YAAM,UAAwD,CAAC;AAE/D,iBAAW,YAAY,UAAU;AAC/B,cAAM,WAAW,kBAAAC,QAAK,SAAS,WAAW,QAAQ;AAClD,YAAI,GAAG,KAAK,QAAQ,KAAK,aAAa,UAAU,OAAO,GAAG;AACxD,cAAI;AACF,kBAAM,OAAO,MAAM,iBAAAC,QAAG,KAAK,QAAQ;AACnC,oBAAQ,KAAK,EAAE,UAAU,UAAU,SAAS,KAAK,QAAQ,CAAC;AAAA,UAC5D,QAAQ;AACN,oBAAQ,KAAK,EAAE,UAAU,UAAU,SAAS,EAAE,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AAC5C,YAAM,UAAU,QAAQ,MAAM,GAAG,WAAW;AAC5C,aAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI;AAAA,IACjD,SAAS,KAAc;AACrB,aAAO,0BAA0B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACnF;AAAA,EACF;AACF,CAAC;;;AChED,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAElB;AAEA,IAAM,cAAc;AAEpB,eAAeC,SAAQ,KAAgC;AACrD,QAAM,EAAE,SAAS,KAAK,IAAI,MAAM;AAChC,QAAM,UAAU,MAAM,KAAK,GAAG;AAC9B,SAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAClC;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,SAAS,cAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,IAC/D,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,IAC7D,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,EAClF,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,MAAM,YAAY,QAAQ,GAAG,YAAY;AAClE,QAAI;AACF,UAAI;AACJ,UAAI;AACF,gBAAQ,IAAI,OAAO,OAAO;AAAA,MAC5B,QAAQ;AACN,eAAO,sCAAsC,OAAO;AAAA,MACtD;AAEA,YAAM,YAAY,aACd,kBAAAC,QAAK,WAAW,UAAU,IACxB,aACA,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,UAAU,IACtC,QAAQ;AAEZ,YAAM,YAAY,UAAU,aAAa,OAAO,IAAI;AACpD,YAAM,WAAW,MAAMD,SAAQ,SAAS;AACxC,YAAM,UAAoB,CAAC;AAE3B,iBAAW,YAAY,UAAU;AAC/B,YAAI,QAAQ,UAAU,YAAa;AAEnC,YAAI,WAAW;AACb,gBAAM,OAAO,kBAAAC,QAAK,SAAS,QAAQ;AACnC,cAAI,CAAC,UAAU,KAAK,IAAI,EAAG;AAAA,QAC7B;AAEA,YAAI;AACJ,YAAI;AACF,oBAAU,MAAM,iBAAAC,QAAG,SAAS,UAAU,OAAO;AAAA,QAC/C,QAAQ;AACN;AAAA,QACF;AAEA,cAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,cAAM,WAAW,kBAAAD,QAAK,SAAS,WAAW,QAAQ;AAElD,iBAAS,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;AACvD,cAAI,QAAQ,UAAU,YAAa;AACnC,gBAAM,OAAO,MAAM,OAAO;AAC1B,cAAI,MAAM,KAAK,IAAI,GAAG;AACpB,oBAAQ,KAAK,GAAG,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,EAAE;AAClD,kBAAM,YAAY;AAAA,UACpB,OAAO;AACL,kBAAM,YAAY;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,KAAK,IAAI;AAAA,IAC1B,SAAS,KAAc;AACrB,aAAO,0BAA0B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACnF;AAAA,EACF;AACF,CAAC;;;ACnFD,IAAAE,cAAkB;AAGlB,IAAM,oBAAoB,MAAM;AAEzB,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,KAAK,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,kBAAkB;AAAA,IACjD,QAAQ,cAAE,KAAK,CAAC,OAAO,QAAQ,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACjG,SAAS,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,IACnE,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,EACpE,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,KAAK,SAAS,OAAO,SAAS,KAAK,GAAG,YAAY;AAClE,QAAI;AACF,UAAI,QAAQ,aAAa,SAAS;AAChC,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,YAAY,QAAQ,GAAM;AAChD,UAAI;AACJ,UAAI,QAAQ,aAAa;AACvB,iBAAS,YAAY,IAAI,CAAC,QAAQ,aAAa,aAAa,CAAC;AAAA,MAC/D,OAAO;AACL,iBAAS;AAAA,MACX;AAEA,YAAM,eAA4B;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,UAAI,QAAQ,WAAW,OAAO;AAC5B,qBAAa,OAAO;AAAA,MACtB;AAEA,YAAM,WAAW,MAAM,MAAM,KAAK,YAAY;AAC9C,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,YAAM,SAAS,SAAS;AAExB,YAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAI,SAAS,WAAW,MAAM;AAAA,gBAAmB,WAAW;AAAA;AAAA;AAC5D,UAAI,KAAK,SAAS,mBAAmB;AACnC,cAAM,OAAO,KAAK,MAAM,oBAAoB,CAAC;AAC7C,cAAM,SAAS;AAAA;AAAA,yCAA8C,IAAI,aAAa,IAAI,OAAO,KAAK,MAAM;AAAA;AAAA;AACpG,kBAAU,KAAK,MAAM,GAAG,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,IAAI;AAAA,MAC3D,OAAO;AACL,kBAAU;AAAA,MACZ;AAEA,aAAO;AAAA,IACT,SAAS,KAAc;AACrB,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AACrD,eAAO;AAAA,MACT;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;","names":["fs","path","promises","import_zod","path","fs","import_promises","import_node_path","import_zod","path","fs","import_promises","import_node_path","import_zod","path","fs","import_promises","import_node_path","import_zod","walkDir","path","fs","import_promises","import_node_path","import_zod","walkDir","path","fs","import_zod"]}
@@ -0,0 +1,4 @@
1
+ export { A as APIToolDefinition, T as Tool, a as ToolExecuteOptions, d as defineTool, b as defineToolFromClass } from '../types-C11cw5ZD.cjs';
2
+ export { B as BashTool, F as FileEditTool, a as FileReadTool, b as FileWriteTool, G as GlobTool, c as GrepTool, T as ToolExecutionResult, d as ToolRegistry, W as WebFetchTool, o as orchestrateTools } from '../web-fetch-B42QzYD2.cjs';
3
+ export { FuzzyEditError, fuzzyContains, fuzzyReplace } from './fuzzy-edit.cjs';
4
+ import 'zod';
@@ -0,0 +1,4 @@
1
+ export { A as APIToolDefinition, T as Tool, a as ToolExecuteOptions, d as defineTool, b as defineToolFromClass } from '../types-C11cw5ZD.js';
2
+ export { B as BashTool, F as FileEditTool, a as FileReadTool, b as FileWriteTool, G as GlobTool, c as GrepTool, T as ToolExecutionResult, d as ToolRegistry, W as WebFetchTool, o as orchestrateTools } from '../web-fetch-EDdhxmEf.js';
3
+ export { FuzzyEditError, fuzzyContains, fuzzyReplace } from './fuzzy-edit.js';
4
+ import 'zod';
@@ -0,0 +1,39 @@
1
+ import {
2
+ BashTool,
3
+ FileEditTool,
4
+ FileReadTool,
5
+ FileWriteTool,
6
+ GlobTool,
7
+ GrepTool,
8
+ ToolRegistry,
9
+ WebFetchTool,
10
+ orchestrateTools
11
+ } from "../chunk-53ZOIXM4.js";
12
+ import "../chunk-W6OLZ2OI.js";
13
+ import {
14
+ defineTool,
15
+ defineToolFromClass
16
+ } from "../chunk-FK7S2S7V.js";
17
+ import {
18
+ FuzzyEditError,
19
+ fuzzyContains,
20
+ fuzzyReplace
21
+ } from "../chunk-MQ7XP6VT.js";
22
+ import "../chunk-DGUM43GV.js";
23
+ export {
24
+ BashTool,
25
+ FileEditTool,
26
+ FileReadTool,
27
+ FileWriteTool,
28
+ FuzzyEditError,
29
+ GlobTool,
30
+ GrepTool,
31
+ ToolRegistry,
32
+ WebFetchTool,
33
+ defineTool,
34
+ defineToolFromClass,
35
+ fuzzyContains,
36
+ fuzzyReplace,
37
+ orchestrateTools
38
+ };
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,177 @@
1
+ import { ZodSchema } from 'zod';
2
+
3
+ /** JSON Schema representation of a tool for LLM function calling APIs. */
4
+ interface APIToolDefinition {
5
+ name: string;
6
+ description: string;
7
+ input_schema: Record<string, unknown>;
8
+ }
9
+ /** Core tool abstraction that every tool must implement. */
10
+ interface Tool<P = unknown> {
11
+ readonly name: string;
12
+ readonly description: string;
13
+ readonly inputSchema: ZodSchema<P>;
14
+ readonly isReadOnly: boolean;
15
+ readonly isConcurrencySafe: boolean;
16
+ execute(input: P, context: ToolContext): Promise<string>;
17
+ toAPI(): APIToolDefinition;
18
+ toString(input: P): string;
19
+ }
20
+ /** Configuration object for defining a tool. */
21
+ interface ToolExecuteOptions<P = unknown> {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: ZodSchema<P>;
25
+ isReadOnly?: boolean;
26
+ isConcurrencySafe?: boolean;
27
+ execute: (input: P, context: ToolContext) => Promise<string>;
28
+ }
29
+ /** Define a tool from a configuration object. */
30
+ declare function defineTool<P = unknown>(config: ToolExecuteOptions<P>): Tool<P>;
31
+ /** Wrap a class-based tool into the standard Tool interface. */
32
+ declare function defineToolFromClass(ctor: new () => Tool): Tool;
33
+
34
+ interface Provider {
35
+ readonly model: string;
36
+ chat(request: ChatRequest): Promise<ModelResponse>;
37
+ }
38
+ interface ChatRequest {
39
+ messages: ChatMessage[];
40
+ tools?: APIToolDefinition[];
41
+ systemPrompt?: string;
42
+ maxOutputTokens?: number;
43
+ temperature?: number;
44
+ abortSignal?: AbortSignal;
45
+ }
46
+ interface ChatMessage {
47
+ role: "user" | "assistant" | "tool";
48
+ content: string | ContentBlock[];
49
+ tool_use_id?: string;
50
+ is_error?: boolean;
51
+ }
52
+
53
+ declare class RetryableError extends Error {
54
+ readonly cause?: Error;
55
+ constructor(message: string, cause?: Error);
56
+ }
57
+ declare abstract class BaseProvider implements Provider {
58
+ readonly model: string;
59
+ readonly maxOutputTokens?: number;
60
+ readonly temperature?: number;
61
+ constructor(config: ProviderConfig);
62
+ abstract chat(request: ChatRequest): Promise<ModelResponse>;
63
+ protected abstract mapMessages(messages: ChatMessage[]): unknown[];
64
+ protected abstract mapTools(tools?: APIToolDefinition[]): unknown[] | undefined;
65
+ protected abstract mapUsage(providerUsage: unknown): TokenUsage;
66
+ protected mapStopReason(reason: string): ModelResponse["stopReason"];
67
+ }
68
+
69
+ type Message = UserMessage | AssistantMessage | ToolResultMessage;
70
+ interface UserMessage {
71
+ role: "user";
72
+ content: string;
73
+ }
74
+ interface AssistantMessage {
75
+ role: "assistant";
76
+ content: ContentBlock[];
77
+ }
78
+ interface ToolResultMessage {
79
+ role: "tool";
80
+ tool_use_id: string;
81
+ content: string;
82
+ is_error?: boolean;
83
+ }
84
+ type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock;
85
+ interface TextBlock {
86
+ type: "text";
87
+ text: string;
88
+ }
89
+ interface ToolUseBlock {
90
+ type: "tool_use";
91
+ id: string;
92
+ name: string;
93
+ input: Record<string, unknown>;
94
+ }
95
+ interface ThinkingBlock {
96
+ type: "thinking";
97
+ thinking: string;
98
+ }
99
+ type LoopEvent = {
100
+ type: "text";
101
+ text: string;
102
+ } | {
103
+ type: "thinking";
104
+ thinking: string;
105
+ } | {
106
+ type: "tool_use";
107
+ id: string;
108
+ name: string;
109
+ input: Record<string, unknown>;
110
+ } | {
111
+ type: "tool_result";
112
+ id: string;
113
+ name: string;
114
+ output: string;
115
+ isError: boolean;
116
+ } | {
117
+ type: "error";
118
+ error: Error;
119
+ } | {
120
+ type: "done";
121
+ usage: TokenUsage;
122
+ messages: Message[];
123
+ };
124
+ interface TokenUsage {
125
+ inputTokens: number;
126
+ outputTokens: number;
127
+ cacheReadTokens?: number;
128
+ cacheWriteTokens?: number;
129
+ }
130
+ interface ModelResponse {
131
+ content: ContentBlock[];
132
+ usage: TokenUsage;
133
+ stopReason: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
134
+ }
135
+ interface ToolContext {
136
+ cwd: string;
137
+ env: Record<string, string>;
138
+ abortSignal?: AbortSignal;
139
+ }
140
+ interface ProviderConfig {
141
+ model: string;
142
+ maxOutputTokens?: number;
143
+ temperature?: number;
144
+ }
145
+ interface AgentConfig {
146
+ model: Provider;
147
+ tools?: Tool[];
148
+ systemPrompt?: string;
149
+ maxTurns?: number;
150
+ context?: ContextConfig;
151
+ permissions?: PermissionConfig;
152
+ cwd?: string;
153
+ maxRetries?: number;
154
+ }
155
+ interface ContextConfig {
156
+ maxTokens?: number;
157
+ compactThreshold?: number;
158
+ maxOutputTokens?: number;
159
+ }
160
+ interface PermissionConfig {
161
+ allowedTools?: string[];
162
+ deniedTools?: string[];
163
+ askTools?: string[];
164
+ defaultAction?: "allow" | "deny" | "ask";
165
+ }
166
+ interface CompactionResult {
167
+ messages: Message[];
168
+ tokensSaved: number;
169
+ method: "snip" | "compact" | "none";
170
+ }
171
+ declare const DEFAULT_CONTEXT_WINDOW = 200000;
172
+ declare const DEFAULT_MAX_OUTPUT_TOKENS = 16384;
173
+ declare const DEFAULT_COMPACT_THRESHOLD = 0.85;
174
+ declare const DEFAULT_MAX_TURNS = 100;
175
+ declare const MAX_CONCURRENT_TOOLS = 10;
176
+
177
+ export { type APIToolDefinition as A, BaseProvider as B, type ChatRequest as C, DEFAULT_COMPACT_THRESHOLD as D, type LoopEvent as L, type ModelResponse as M, type ProviderConfig as P, RetryableError as R, type Tool as T, type UserMessage as U, type ToolExecuteOptions as a, defineToolFromClass as b, type ChatMessage as c, defineTool as d, type TokenUsage as e, type Provider as f, type Message as g, type CompactionResult as h, type AgentConfig as i, type ContextConfig as j, type PermissionConfig as k, type AssistantMessage as l, type ContentBlock as m, DEFAULT_CONTEXT_WINDOW as n, DEFAULT_MAX_OUTPUT_TOKENS as o, DEFAULT_MAX_TURNS as p, MAX_CONCURRENT_TOOLS as q, type TextBlock as r, type ThinkingBlock as s, type ToolContext as t, type ToolResultMessage as u, type ToolUseBlock as v };
@@ -0,0 +1,177 @@
1
+ import { ZodSchema } from 'zod';
2
+
3
+ /** JSON Schema representation of a tool for LLM function calling APIs. */
4
+ interface APIToolDefinition {
5
+ name: string;
6
+ description: string;
7
+ input_schema: Record<string, unknown>;
8
+ }
9
+ /** Core tool abstraction that every tool must implement. */
10
+ interface Tool<P = unknown> {
11
+ readonly name: string;
12
+ readonly description: string;
13
+ readonly inputSchema: ZodSchema<P>;
14
+ readonly isReadOnly: boolean;
15
+ readonly isConcurrencySafe: boolean;
16
+ execute(input: P, context: ToolContext): Promise<string>;
17
+ toAPI(): APIToolDefinition;
18
+ toString(input: P): string;
19
+ }
20
+ /** Configuration object for defining a tool. */
21
+ interface ToolExecuteOptions<P = unknown> {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: ZodSchema<P>;
25
+ isReadOnly?: boolean;
26
+ isConcurrencySafe?: boolean;
27
+ execute: (input: P, context: ToolContext) => Promise<string>;
28
+ }
29
+ /** Define a tool from a configuration object. */
30
+ declare function defineTool<P = unknown>(config: ToolExecuteOptions<P>): Tool<P>;
31
+ /** Wrap a class-based tool into the standard Tool interface. */
32
+ declare function defineToolFromClass(ctor: new () => Tool): Tool;
33
+
34
+ interface Provider {
35
+ readonly model: string;
36
+ chat(request: ChatRequest): Promise<ModelResponse>;
37
+ }
38
+ interface ChatRequest {
39
+ messages: ChatMessage[];
40
+ tools?: APIToolDefinition[];
41
+ systemPrompt?: string;
42
+ maxOutputTokens?: number;
43
+ temperature?: number;
44
+ abortSignal?: AbortSignal;
45
+ }
46
+ interface ChatMessage {
47
+ role: "user" | "assistant" | "tool";
48
+ content: string | ContentBlock[];
49
+ tool_use_id?: string;
50
+ is_error?: boolean;
51
+ }
52
+
53
+ declare class RetryableError extends Error {
54
+ readonly cause?: Error;
55
+ constructor(message: string, cause?: Error);
56
+ }
57
+ declare abstract class BaseProvider implements Provider {
58
+ readonly model: string;
59
+ readonly maxOutputTokens?: number;
60
+ readonly temperature?: number;
61
+ constructor(config: ProviderConfig);
62
+ abstract chat(request: ChatRequest): Promise<ModelResponse>;
63
+ protected abstract mapMessages(messages: ChatMessage[]): unknown[];
64
+ protected abstract mapTools(tools?: APIToolDefinition[]): unknown[] | undefined;
65
+ protected abstract mapUsage(providerUsage: unknown): TokenUsage;
66
+ protected mapStopReason(reason: string): ModelResponse["stopReason"];
67
+ }
68
+
69
+ type Message = UserMessage | AssistantMessage | ToolResultMessage;
70
+ interface UserMessage {
71
+ role: "user";
72
+ content: string;
73
+ }
74
+ interface AssistantMessage {
75
+ role: "assistant";
76
+ content: ContentBlock[];
77
+ }
78
+ interface ToolResultMessage {
79
+ role: "tool";
80
+ tool_use_id: string;
81
+ content: string;
82
+ is_error?: boolean;
83
+ }
84
+ type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock;
85
+ interface TextBlock {
86
+ type: "text";
87
+ text: string;
88
+ }
89
+ interface ToolUseBlock {
90
+ type: "tool_use";
91
+ id: string;
92
+ name: string;
93
+ input: Record<string, unknown>;
94
+ }
95
+ interface ThinkingBlock {
96
+ type: "thinking";
97
+ thinking: string;
98
+ }
99
+ type LoopEvent = {
100
+ type: "text";
101
+ text: string;
102
+ } | {
103
+ type: "thinking";
104
+ thinking: string;
105
+ } | {
106
+ type: "tool_use";
107
+ id: string;
108
+ name: string;
109
+ input: Record<string, unknown>;
110
+ } | {
111
+ type: "tool_result";
112
+ id: string;
113
+ name: string;
114
+ output: string;
115
+ isError: boolean;
116
+ } | {
117
+ type: "error";
118
+ error: Error;
119
+ } | {
120
+ type: "done";
121
+ usage: TokenUsage;
122
+ messages: Message[];
123
+ };
124
+ interface TokenUsage {
125
+ inputTokens: number;
126
+ outputTokens: number;
127
+ cacheReadTokens?: number;
128
+ cacheWriteTokens?: number;
129
+ }
130
+ interface ModelResponse {
131
+ content: ContentBlock[];
132
+ usage: TokenUsage;
133
+ stopReason: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
134
+ }
135
+ interface ToolContext {
136
+ cwd: string;
137
+ env: Record<string, string>;
138
+ abortSignal?: AbortSignal;
139
+ }
140
+ interface ProviderConfig {
141
+ model: string;
142
+ maxOutputTokens?: number;
143
+ temperature?: number;
144
+ }
145
+ interface AgentConfig {
146
+ model: Provider;
147
+ tools?: Tool[];
148
+ systemPrompt?: string;
149
+ maxTurns?: number;
150
+ context?: ContextConfig;
151
+ permissions?: PermissionConfig;
152
+ cwd?: string;
153
+ maxRetries?: number;
154
+ }
155
+ interface ContextConfig {
156
+ maxTokens?: number;
157
+ compactThreshold?: number;
158
+ maxOutputTokens?: number;
159
+ }
160
+ interface PermissionConfig {
161
+ allowedTools?: string[];
162
+ deniedTools?: string[];
163
+ askTools?: string[];
164
+ defaultAction?: "allow" | "deny" | "ask";
165
+ }
166
+ interface CompactionResult {
167
+ messages: Message[];
168
+ tokensSaved: number;
169
+ method: "snip" | "compact" | "none";
170
+ }
171
+ declare const DEFAULT_CONTEXT_WINDOW = 200000;
172
+ declare const DEFAULT_MAX_OUTPUT_TOKENS = 16384;
173
+ declare const DEFAULT_COMPACT_THRESHOLD = 0.85;
174
+ declare const DEFAULT_MAX_TURNS = 100;
175
+ declare const MAX_CONCURRENT_TOOLS = 10;
176
+
177
+ export { type APIToolDefinition as A, BaseProvider as B, type ChatRequest as C, DEFAULT_COMPACT_THRESHOLD as D, type LoopEvent as L, type ModelResponse as M, type ProviderConfig as P, RetryableError as R, type Tool as T, type UserMessage as U, type ToolExecuteOptions as a, defineToolFromClass as b, type ChatMessage as c, defineTool as d, type TokenUsage as e, type Provider as f, type Message as g, type CompactionResult as h, type AgentConfig as i, type ContextConfig as j, type PermissionConfig as k, type AssistantMessage as l, type ContentBlock as m, DEFAULT_CONTEXT_WINDOW as n, DEFAULT_MAX_OUTPUT_TOKENS as o, DEFAULT_MAX_TURNS as p, MAX_CONCURRENT_TOOLS as q, type TextBlock as r, type ThinkingBlock as s, type ToolContext as t, type ToolResultMessage as u, type ToolUseBlock as v };
@@ -0,0 +1,10 @@
1
+ import {
2
+ globToRegExp,
3
+ walkDir
4
+ } from "./chunk-W6OLZ2OI.js";
5
+ import "./chunk-DGUM43GV.js";
6
+ export {
7
+ globToRegExp,
8
+ walkDir
9
+ };
10
+ //# sourceMappingURL=utils-TF4TBXQJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,85 @@
1
+ import { T as Tool, A as APIToolDefinition, v as ToolUseBlock, t as ToolContext } from './types-C11cw5ZD.cjs';
2
+
3
+ /** Registry for managing tool lookup and deduplication. */
4
+ declare class ToolRegistry {
5
+ private readonly tools;
6
+ constructor(tools?: Tool[]);
7
+ /** Add a tool to the registry. Duplicate names are ignored (first one wins). */
8
+ add(tool: Tool): void;
9
+ /** Get a tool by name. */
10
+ get(name: string): Tool | undefined;
11
+ /** Check if a tool exists by name. */
12
+ has(name: string): boolean;
13
+ /** Find tool by case-insensitive name. Returns undefined if not found. */
14
+ findCaseInsensitive(name: string): string | undefined;
15
+ /** List all registered tool names. */
16
+ listNames(): string[];
17
+ /** Get all registered tools. */
18
+ getAll(): Tool[];
19
+ /** Get all tools in API format, sorted by name for cache stability. */
20
+ getAPI(): APIToolDefinition[];
21
+ /** Number of registered tools. */
22
+ get size(): number;
23
+ }
24
+
25
+ /** Result of a single tool execution. */
26
+ interface ToolExecutionResult {
27
+ id: string;
28
+ name: string;
29
+ output: string;
30
+ isError: boolean;
31
+ durationMs: number;
32
+ }
33
+ /**
34
+ * Orchestrate execution of multiple tool calls with partition-based concurrency.
35
+ *
36
+ * Read-only, concurrency-safe tools are grouped into concurrent batches (max 10 parallel).
37
+ * Non-safe tools are executed serially in their own batches.
38
+ * Results are returned in the original call order.
39
+ */
40
+ declare function orchestrateTools(tools: ToolRegistry, toolCalls: ToolUseBlock[], context: ToolContext, permissionCheck?: (name: string, input: Record<string, unknown>) => Promise<boolean>, abortSignal?: AbortSignal): Promise<ToolExecutionResult[]>;
41
+
42
+ declare const BashTool: Tool<{
43
+ command: string;
44
+ timeout?: number | undefined;
45
+ workdir?: string | undefined;
46
+ }>;
47
+
48
+ declare const FileReadTool: Tool<{
49
+ path: string;
50
+ offset?: number | undefined;
51
+ limit?: number | undefined;
52
+ }>;
53
+
54
+ declare const FileWriteTool: Tool<{
55
+ path: string;
56
+ content: string;
57
+ }>;
58
+
59
+ declare const FileEditTool: Tool<{
60
+ path: string;
61
+ oldString: string;
62
+ newString: string;
63
+ replaceAll?: boolean | undefined;
64
+ }>;
65
+
66
+ declare const GlobTool: Tool<{
67
+ pattern: string;
68
+ path?: string | undefined;
69
+ include?: string | undefined;
70
+ }>;
71
+
72
+ declare const GrepTool: Tool<{
73
+ pattern: string;
74
+ path?: string | undefined;
75
+ include?: string | undefined;
76
+ }>;
77
+
78
+ declare const WebFetchTool: Tool<{
79
+ url: string;
80
+ method?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
81
+ headers?: Record<string, string> | undefined;
82
+ body?: string | undefined;
83
+ }>;
84
+
85
+ export { BashTool as B, FileEditTool as F, GlobTool as G, type ToolExecutionResult as T, WebFetchTool as W, FileReadTool as a, FileWriteTool as b, GrepTool as c, ToolRegistry as d, orchestrateTools as o };