@lupaflow/tools 0.1.0 → 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry.ts","../src/interface.ts","../src/builtins/calculator.ts","../src/builtins/http.ts","../src/builtins/search.ts","../src/builtins/readFile.ts","../src/builtins/writeFile.ts","../src/builtins/editFile.ts","../src/builtins/deleteFile.ts","../src/builtins/listDirectory.ts","../src/builtins/glob.ts","../src/builtins/grep.ts","../src/builtins/shell.ts","../src/index.ts"],"sourcesContent":["import type { Tool } from \"@lupaflow/types\"\nimport { ToolError } from \"@lupaflow/core\"\n\nclass ToolRegistry {\n private tools: Map<string, Tool> = new Map()\n\n register(tool: Tool): void {\n this.tools.set(tool.definition.name, tool)\n }\n\n get(name: string): Tool {\n const tool = this.tools.get(name)\n if (!tool) {\n throw new ToolError(name, `Tool not found: \"${name}\"`)\n }\n return tool\n }\n\n has(name: string): boolean {\n return this.tools.has(name)\n }\n\n list(): Tool[] {\n return Array.from(this.tools.values())\n }\n\n remove(name: string): void {\n this.tools.delete(name)\n }\n\n clear(): void {\n this.tools.clear()\n }\n}\n\nexport const toolRegistry = new ToolRegistry()\n","import type { Tool, ToolDefinition } from \"@lupaflow/types\"\n\nexport abstract class BaseTool implements Tool {\n abstract definition: ToolDefinition\n\n abstract execute(args: Record<string, unknown>): Promise<unknown>\n\n toJSON(): ToolDefinition {\n return this.definition\n }\n}\n","import { BaseTool } from \"../interface\"\n\nexport class CalculatorTool extends BaseTool {\n definition = {\n name: \"calculator\",\n description: \"Evaluate mathematical expressions safely\",\n parameters: {\n expression: {\n type: \"string\" as const,\n description: \"Mathematical expression to evaluate (e.g., '2 + 2 * 3')\",\n },\n },\n required: [\"expression\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { expression } = args as { expression: string }\n const sanitized = expression.replace(/[^0-9+\\-*/.()^% ]/g, \"\")\n try {\n const result = Function(`\"use strict\"; return (${sanitized})`)()\n return { result, expression }\n } catch (err: any) {\n return { error: err.message, expression }\n }\n }\n}\n","import { BaseTool } from \"../interface\"\n\nexport class HTTPTool extends BaseTool {\n definition = {\n name: \"http\",\n description: \"Make HTTP requests (GET, POST, PUT, DELETE)\",\n parameters: {\n method: {\n type: \"string\" as const,\n description: \"HTTP method: GET, POST, PUT, DELETE\",\n },\n url: {\n type: \"string\" as const,\n description: \"Request URL\",\n },\n headers: {\n type: \"object\" as const,\n description: \"Request headers as key-value object\",\n },\n body: {\n type: \"string\" as const,\n description: \"Request body (stringified JSON for POST/PUT)\",\n },\n },\n required: [\"method\", \"url\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { method, url, headers, body } = args as {\n method: string\n url: string\n headers?: Record<string, string>\n body?: string\n }\n\n const response = await fetch(url, {\n method: method.toUpperCase(),\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: body || undefined,\n })\n\n const text = await response.text()\n let data: unknown = text\n try {\n data = JSON.parse(text)\n } catch { /* ignore */ }\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n data,\n }\n }\n}\n","import { BaseTool } from \"../interface\"\n\nexport class SearchTool extends BaseTool {\n definition = {\n name: \"search\",\n description: \"Search the web for information\",\n parameters: {\n query: {\n type: \"string\" as const,\n description: \"Search query\",\n },\n maxResults: {\n type: \"number\" as const,\n description: \"Maximum number of results (default: 5)\",\n },\n },\n required: [\"query\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { query, maxResults } = args as { query: string; maxResults?: number }\n\n const tavilyKey = process.env.TAVILY_API_KEY\n if (tavilyKey) {\n return this.searchTavily(query, maxResults || 5, tavilyKey)\n }\n\n return this.searchDuckDuckGo(query, maxResults || 5)\n }\n\n private async searchTavily(query: string, maxResults: number, apiKey: string): Promise<unknown> {\n try {\n const res = await fetch(\"https://api.tavily.com/search\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n api_key: apiKey,\n query,\n search_depth: \"advanced\",\n include_answer: true,\n max_results: maxResults,\n }),\n })\n if (!res.ok) {\n throw new Error(`Tavily API error: ${res.status} ${res.statusText}`)\n }\n const data = await res.json() as {\n results: { title: string; url: string; content: string }[]\n answer?: string\n }\n return {\n query,\n results: data.results.map((r) => ({\n title: r.title,\n url: r.url,\n snippet: r.content,\n })),\n answer: data.answer,\n source: \"tavily\",\n }\n } catch (err: any) {\n return { error: err.message, query, source: \"tavily\" }\n }\n }\n\n private async searchDuckDuckGo(query: string, maxResults: number): Promise<unknown> {\n try {\n const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`\n const response = await fetch(url)\n const html = await response.text()\n const results: Array<{ title: string; link: string; snippet: string }> = []\n\n const linkRegex = /<a[^>]+class=\"result__a\"[^>]*href=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/a>/g\n const snippetRegex = /<a[^>]+class=\"result__snippet\"[^>]*>([\\s\\S]*?)<\\/a>/g\n\n let count = 0\n let linkMatch\n while ((linkMatch = linkRegex.exec(html)) !== null && count < maxResults) {\n const snippetMatch = snippetRegex.exec(html)\n results.push({\n link: linkMatch[1],\n title: linkMatch[2].replace(/<[^>]*>/g, \"\"),\n snippet: snippetMatch ? snippetMatch[1].replace(/<[^>]*>/g, \"\") : \"\",\n })\n count++\n }\n\n return { query, results, source: \"duckduckgo\" }\n } catch (err: any) {\n return { error: err.message, query, source: \"duckduckgo\" }\n }\n }\n}\n","import { readFile } from \"fs/promises\"\nimport { relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nconst MAX_FILE_SIZE = 10_000\n\nexport class ReadFileTool extends BaseTool {\n definition = {\n name: \"readFile\",\n description: \"Read the contents of a file\",\n parameters: {\n path: {\n type: \"string\" as const,\n description: \"Relative path to the file to read\",\n },\n },\n required: [\"path\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { path } = args as { path: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, path)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n const content = await readFile(resolved, \"utf-8\")\n if (content.length > MAX_FILE_SIZE) {\n return {\n content: content.slice(0, MAX_FILE_SIZE),\n truncated: true,\n totalLength: content.length,\n }\n }\n return { content }\n } catch (err: any) {\n const msg = err.message?.replace(/^ENOENT:\\s*/, \"\") || String(err)\n return { error: msg }\n }\n }\n}\n","import { mkdir, readFile, writeFile } from \"fs/promises\"\nimport { dirname, relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nexport class WriteFileTool extends BaseTool {\n definition = {\n name: \"writeFile\",\n description: \"Create a new file or overwrite an existing one\",\n parameters: {\n path: {\n type: \"string\" as const,\n description: \"Relative path to write\",\n },\n content: {\n type: \"string\" as const,\n description: \"File contents\",\n },\n },\n required: [\"path\", \"content\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { path, content } = args as { path: string; content: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, path)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n let oldContent: string | null = null\n try {\n oldContent = await readFile(resolved, \"utf-8\")\n } catch { /* ignore */ }\n\n const backupDir = resolve(cwd, \".lupaflow/backups\")\n if (oldContent !== null) {\n const backupPath = resolve(backupDir, rel)\n await mkdir(dirname(backupPath), { recursive: true })\n await writeFile(backupPath, oldContent, \"utf-8\")\n }\n\n await mkdir(dirname(resolved), { recursive: true })\n await writeFile(resolved, content, \"utf-8\")\n\n const result: Record<string, unknown> = {\n success: true,\n path: rel,\n }\n if (oldContent !== null) {\n result.diff = computeDiff(oldContent, content)\n }\n return result\n } catch (err: any) {\n return { error: err.message }\n }\n }\n}\n\nfunction computeDiff(oldStr: string, newStr: string): string {\n const oldLines = oldStr.split(\"\\n\")\n const newLines = newStr.split(\"\\n\")\n const lines: string[] = []\n let i = 0, j = 0\n\n while (i < oldLines.length || j < newLines.length) {\n if (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {\n lines.push(` ${oldLines[i]}`)\n i++\n j++\n } else {\n let found = false\n for (let k = 1; k <= 3; k++) {\n if (i + k < oldLines.length && oldLines[i + k] === newLines[j]) {\n for (let l = 0; l < k; l++) lines.push(`-${oldLines[i + l]}`)\n i += k\n found = true\n break\n }\n if (j + k < newLines.length && oldLines[i] === newLines[j + k]) {\n for (let l = 0; l < k; l++) lines.push(`+${newLines[j + l]}`)\n j += k\n found = true\n break\n }\n }\n if (!found) {\n if (i < oldLines.length) lines.push(`-${oldLines[i]}`)\n if (j < newLines.length) lines.push(`+${newLines[j]}`)\n i++\n j++\n }\n }\n }\n\n return lines.join(\"\\n\")\n}\n","import { mkdir, readFile, writeFile } from \"fs/promises\"\nimport { dirname, relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nexport class EditFileTool extends BaseTool {\n definition = {\n name: \"editFile\",\n description: \"Replace an exact string match in a file with new content\",\n parameters: {\n path: {\n type: \"string\" as const,\n description: \"Relative path to edit\",\n },\n oldString: {\n type: \"string\" as const,\n description: \"Exact text to replace; must be unique in the file\",\n },\n newString: {\n type: \"string\" as const,\n description: \"Replacement text\",\n },\n },\n required: [\"path\", \"oldString\", \"newString\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { path, oldString, newString } = args as { path: string; oldString: string; newString: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, path)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n const content = await readFile(resolved, \"utf-8\")\n const occurrences = content.split(oldString).length - 1\n\n if (occurrences === 0) {\n return { error: \"oldString not found in file\" }\n }\n if (occurrences > 1) {\n return { error: `oldString is ambiguous; found ${occurrences} matches` }\n }\n\n const backupDir = resolve(cwd, \".lupaflow/backups\")\n const backupPath = resolve(backupDir, rel)\n await mkdir(dirname(backupPath), { recursive: true })\n await writeFile(backupPath, content, \"utf-8\")\n\n const newContent = content.replace(oldString, newString)\n await writeFile(resolved, newContent, \"utf-8\")\n\n return {\n success: true,\n path: rel,\n diff: computeDiff(content, newContent),\n }\n } catch (err: any) {\n return { error: err.message }\n }\n }\n}\n\nfunction computeDiff(oldStr: string, newStr: string): string {\n const oldLines = oldStr.split(\"\\n\")\n const newLines = newStr.split(\"\\n\")\n const lines: string[] = []\n let i = 0, j = 0\n\n while (i < oldLines.length || j < newLines.length) {\n if (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {\n lines.push(` ${oldLines[i]}`)\n i++\n j++\n } else {\n let found = false\n for (let k = 1; k <= 3; k++) {\n if (i + k < oldLines.length && oldLines[i + k] === newLines[j]) {\n for (let l = 0; l < k; l++) lines.push(`-${oldLines[i + l]}`)\n i += k\n found = true\n break\n }\n if (j + k < newLines.length && oldLines[i] === newLines[j + k]) {\n for (let l = 0; l < k; l++) lines.push(`+${newLines[j + l]}`)\n j += k\n found = true\n break\n }\n }\n if (!found) {\n if (i < oldLines.length) lines.push(`-${oldLines[i]}`)\n if (j < newLines.length) lines.push(`+${newLines[j]}`)\n i++\n j++\n }\n }\n }\n\n return lines.join(\"\\n\")\n}\n","import { unlink } from \"fs/promises\"\nimport { relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nexport class DeleteFileTool extends BaseTool {\n definition = {\n name: \"deleteFile\",\n description: \"Delete a file\",\n parameters: {\n path: {\n type: \"string\" as const,\n description: \"Relative path to the file to delete\",\n },\n },\n required: [\"path\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { path } = args as { path: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, path)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n await unlink(resolved)\n return { success: true, path: rel }\n } catch (err: any) {\n return { error: err.message }\n }\n }\n}\n","import { readdir, stat } from \"fs/promises\"\nimport { join, relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nexport class ListDirectoryTool extends BaseTool {\n definition = {\n name: \"listDirectory\",\n description: \"List entries in a directory\",\n parameters: {\n path: {\n type: \"string\" as const,\n description: \"Relative directory path to list\",\n },\n },\n required: [\"path\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { path } = args as { path: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, path)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n const entries = await readdir(resolved)\n const results: { name: string; type: \"file\" | \"directory\" }[] = []\n\n for (const entry of entries) {\n if (entry.startsWith(\".\") || entry === \"node_modules\") continue\n try {\n const info = await stat(join(resolved, entry))\n results.push({\n name: entry,\n type: info.isDirectory() ? \"directory\" : \"file\",\n })\n } catch { /* ignore */ }\n }\n\n results.sort((a, b) =>\n a.type !== b.type\n ? a.type === \"directory\" ? -1 : 1\n : a.name.localeCompare(b.name)\n )\n\n return { path: rel || \".\", entries: results }\n } catch (err: any) {\n return { error: err.message }\n }\n }\n}\n","import { relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nconst MAX_RESULTS = 200\n\nexport class GlobTool extends BaseTool {\n definition = {\n name: \"glob\",\n description: \"Find files matching a glob pattern\",\n parameters: {\n pattern: {\n type: \"string\" as const,\n description: \"Glob pattern to match files\",\n },\n path: {\n type: \"string\" as const,\n description: \"Directory to search from (default: .)\",\n },\n },\n required: [\"pattern\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { pattern, path: dir = \".\" } = args as { pattern: string; path?: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, dir)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n const glob = new Bun.Glob(pattern)\n const files: string[] = []\n let truncated = false\n\n for await (const match of glob.scan({ cwd: resolved, dot: false, onlyFiles: true })) {\n if (match.includes(\"node_modules\")) continue\n if (files.length >= MAX_RESULTS) {\n truncated = true\n break\n }\n files.push(relative(cwd, resolve(resolved, match)))\n }\n\n files.sort()\n const result: Record<string, unknown> = { files }\n if (truncated) result.truncated = true\n return result\n } catch (err: any) {\n return { error: err.message }\n }\n }\n}\n","import { relative, resolve, isAbsolute } from \"path\"\nimport { BaseTool } from \"../interface\"\n\nconst MAX_MATCHES = 50\n\nexport class GrepTool extends BaseTool {\n definition = {\n name: \"grep\",\n description: \"Search file contents using a regex pattern\",\n parameters: {\n pattern: {\n type: \"string\" as const,\n description: \"Regex pattern to search for\",\n },\n path: {\n type: \"string\" as const,\n description: \"Directory to search from (default: .)\",\n },\n include: {\n type: \"string\" as const,\n description: \"Optional glob for files to include (e.g. *.ts)\",\n },\n },\n required: [\"pattern\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { pattern, path: dir = \".\", include } = args as { pattern: string; path?: string; include?: string }\n const cwd = process.cwd()\n const resolved = resolve(cwd, dir)\n const rel = relative(cwd, resolved)\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return { error: \"Path is outside the project directory\" }\n }\n try {\n const grepArgs = [\n \"-rn\", \"--color=never\",\n \"--exclude-dir=node_modules\",\n \"--exclude-dir=.git\",\n \"-E\",\n ]\n if (include) grepArgs.push(`--include=${include}`)\n grepArgs.push(pattern, resolved)\n\n const proc = Bun.spawn([\"grep\", ...grepArgs], {\n cwd,\n stdout: \"pipe\",\n stderr: \"pipe\",\n })\n\n const [stdout, stderr] = await Promise.all([\n new Response(proc.stdout).text(),\n new Response(proc.stderr).text(),\n ])\n\n const exitCode = await proc.exited\n if (exitCode !== 0 && exitCode !== 1) {\n const msg = stderr.trim() || `grep exited with code ${exitCode}`\n return { error: msg }\n }\n\n const trimmed = stderr.trim()\n if (trimmed) {\n return { error: trimmed }\n }\n\n const lines = stdout.trim().split(\"\\n\")\n if (!lines[0]) {\n return { matches: [], message: \"No matches found\" }\n }\n\n const matches: { file: string; line: number; content: string }[] = []\n let truncated = false\n\n for (const line of lines) {\n if (matches.length >= MAX_MATCHES) {\n truncated = true\n break\n }\n const match = line.match(/^(.+?):(\\d+):(.*)$/)\n if (match) {\n matches.push({\n file: relative(cwd, match[1]!),\n line: Number(match[2]),\n content: match[3]!,\n })\n }\n }\n\n const result: Record<string, unknown> = { matches }\n if (truncated) {\n result.truncated = true\n result.totalMatches = lines.length\n }\n return result\n } catch (err: any) {\n return { error: err.message || String(err) }\n }\n }\n}\n","import { BaseTool } from \"../interface\"\n\nconst MAX_OUTPUT = 20_000\nconst DEFAULT_TIMEOUT = 30_000\n\nexport class ShellTool extends BaseTool {\n definition = {\n name: \"shell\",\n description: \"Execute a shell command\",\n parameters: {\n command: {\n type: \"string\" as const,\n description: \"Shell command to run\",\n },\n description: {\n type: \"string\" as const,\n description: \"Short description of what the command does\",\n },\n timeout: {\n type: \"number\" as const,\n description: \"Timeout in milliseconds (default: 30000)\",\n },\n },\n required: [\"command\"],\n }\n\n async execute(args: Record<string, unknown>): Promise<unknown> {\n const { command, timeout = DEFAULT_TIMEOUT } = args as {\n command: string\n timeout?: number\n }\n try {\n const isWindows = process.platform === \"win32\"\n const shell = isWindows ? \"cmd.exe\" : \"bash\"\n const shellFlag = isWindows ? \"/c\" : \"-c\"\n const env = isWindows\n ? { ...process.env }\n : { ...process.env, TERM: \"dumb\" }\n\n const proc = Bun.spawn([shell, shellFlag, command], {\n cwd: process.cwd(),\n stdout: \"pipe\",\n stderr: \"pipe\",\n env,\n })\n\n const timer = setTimeout(() => proc.kill(), timeout as number)\n\n const [stdout, stderr] = await Promise.all([\n new Response(proc.stdout).text(),\n new Response(proc.stderr).text(),\n ])\n\n const exitCode = await proc.exited\n clearTimeout(timer)\n\n return {\n stdout: truncate(stdout, MAX_OUTPUT),\n stderr: truncate(stderr, MAX_OUTPUT),\n exitCode,\n }\n } catch (err: any) {\n return {\n stdout: \"\",\n stderr: err.message || String(err),\n exitCode: 1,\n }\n }\n }\n}\n\nfunction truncate(value: string, limit: number): string {\n return value.length > limit\n ? `${value.slice(0, limit)}\\n... (truncated, ${value.length} total chars)`\n : value\n}\n","import { toolRegistry } from \"./registry\"\nimport { CalculatorTool } from \"./builtins/calculator\"\nimport { HTTPTool } from \"./builtins/http\"\nimport { SearchTool } from \"./builtins/search\"\nimport { ReadFileTool } from \"./builtins/readFile\"\nimport { WriteFileTool } from \"./builtins/writeFile\"\nimport { EditFileTool } from \"./builtins/editFile\"\nimport { DeleteFileTool } from \"./builtins/deleteFile\"\nimport { ListDirectoryTool } from \"./builtins/listDirectory\"\nimport { GlobTool } from \"./builtins/glob\"\nimport { GrepTool } from \"./builtins/grep\"\nimport { ShellTool } from \"./builtins/shell\"\n\ntoolRegistry.register(new CalculatorTool())\ntoolRegistry.register(new HTTPTool())\ntoolRegistry.register(new SearchTool())\ntoolRegistry.register(new ReadFileTool())\ntoolRegistry.register(new WriteFileTool())\ntoolRegistry.register(new EditFileTool())\ntoolRegistry.register(new DeleteFileTool())\ntoolRegistry.register(new ListDirectoryTool())\ntoolRegistry.register(new GlobTool())\ntoolRegistry.register(new GrepTool())\ntoolRegistry.register(new ShellTool())\n\nexport { toolRegistry }\nexport { BaseTool } from \"./interface\"\nexport { CalculatorTool } from \"./builtins/calculator\"\nexport { HTTPTool } from \"./builtins/http\"\nexport { SearchTool } from \"./builtins/search\"\nexport { ReadFileTool } from \"./builtins/readFile\"\nexport { WriteFileTool } from \"./builtins/writeFile\"\nexport { EditFileTool } from \"./builtins/editFile\"\nexport { DeleteFileTool } from \"./builtins/deleteFile\"\nexport { ListDirectoryTool } from \"./builtins/listDirectory\"\nexport { GlobTool } from \"./builtins/glob\"\nexport { GrepTool } from \"./builtins/grep\"\nexport { ShellTool } from \"./builtins/shell\"\n"],"mappings":"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","names":["readFile","relative","resolve","isAbsolute","resolve","relative","isAbsolute","readFile","mkdir","readFile","writeFile","dirname","relative","resolve","isAbsolute","resolve","relative","isAbsolute","readFile","mkdir","dirname","writeFile","computeDiff","relative","resolve","isAbsolute","resolve","relative","isAbsolute","relative","resolve","isAbsolute","resolve","relative","isAbsolute","relative","resolve","isAbsolute","resolve","relative","isAbsolute","relative","resolve","isAbsolute","resolve","relative","isAbsolute"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lupaflow/tools",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -16,13 +16,14 @@
16
16
  "import": "./dist/index.js"
17
17
  }
18
18
  },
19
- "scripts": {
19
+ "files": ["dist", "src", "package.json"],
20
+ "scripts": {
20
21
  "build": "tsup",
21
22
  "dev": "tsup --watch"
22
23
  },
23
24
  "dependencies": {
24
- "@lupaflow/types": "workspace:*",
25
- "@lupaflow/core": "workspace:*"
25
+ "@lupaflow/types": "^0.1.0",
26
+ "@lupaflow/core": "^0.1.0"
26
27
  },
27
28
  "devDependencies": {
28
29
  "tsup": "^8.3.0",
package/tsconfig.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src"
6
- },
7
- "include": ["src"]
8
- }
package/tsup.config.ts DELETED
@@ -1,9 +0,0 @@
1
- import { defineConfig } from "tsup"
2
- export default defineConfig({
3
- entry: { index: "src/index.ts" },
4
- format: ["cjs", "esm"],
5
- dts: true,
6
- sourcemap: true,
7
- clean: true,
8
- external: [/node_modules/],
9
- })