@perstack/base 0.0.57 → 0.0.60

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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../package.json","../src/lib/tool-result.ts","../src/tools/todo.ts","../src/tools/attempt-completion.ts","../src/lib/path.ts","../src/lib/safe-file.ts","../src/tools/edit-text-file.ts","../src/tools/exec.ts","../src/tools/read-image-file.ts","../src/tools/read-pdf-file.ts","../src/tools/read-text-file.ts","../src/tools/skill-management.ts","../src/tools/write-text-file.ts","../src/server.ts"],"names":["todo","path","z","stat","existsSync","mime"],"mappings":"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","file":"chunk-TTDF4PIT.js","sourcesContent":["{\n \"name\": \"@perstack/base\",\n \"version\": \"0.0.57\",\n \"description\": \"Perstack base skills for agents.\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"@perstack/base\": \"dist/bin/server.js\"\n },\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n \"@perstack/core\": \"workspace:*\",\n \"commander\": \"^14.0.3\",\n \"mime-types\": \"^3.0.2\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/mime-types\": \"^3.0.1\",\n \"@types/node\": \"^25.2.3\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\"\n\nexport function successToolResult(result: unknown): CallToolResult {\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] }\n}\n\nexport function errorToolResult(e: Error): CallToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify({ error: e.name, message: e.message }) }],\n }\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { z } from \"zod/v4\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nclass Todo {\n currentTodoId = 0\n todos: { id: number; title: string; completed: boolean }[] = []\n public processTodo(input: { newTodos?: string[]; completedTodos?: number[] }) {\n const { newTodos, completedTodos } = input\n if (newTodos) {\n this.todos.push(\n ...newTodos.map((title) => ({ id: this.currentTodoId++, title, completed: false })),\n )\n }\n if (completedTodos) {\n this.todos = this.todos.map((todo) => ({\n ...todo,\n completed: todo.completed || completedTodos.includes(todo.id),\n }))\n }\n return {\n todos: this.todos,\n }\n }\n public clearTodo() {\n this.todos = []\n this.currentTodoId = 0\n return {\n todos: this.todos,\n }\n }\n}\nconst todoSingleton = new Todo()\nexport async function todo(input: { newTodos?: string[]; completedTodos?: number[] }) {\n return todoSingleton.processTodo(input)\n}\nexport async function clearTodo() {\n return todoSingleton.clearTodo()\n}\nexport function getRemainingTodos() {\n return todoSingleton.todos.filter((t) => !t.completed)\n}\n\nexport function registerTodo(server: McpServer) {\n server.registerTool(\n \"todo\",\n {\n title: \"todo\",\n description: \"Manage a todo list: add tasks and mark them completed.\",\n inputSchema: {\n newTodos: z.array(z.string()).describe(\"New todos to add\").optional(),\n completedTodos: z.array(z.number()).describe(\"Todo ids that are completed\").optional(),\n },\n },\n async (input: { newTodos?: string[]; completedTodos?: number[] }) => {\n try {\n return successToolResult(await todo(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n\nexport function registerClearTodo(server: McpServer) {\n server.registerTool(\n \"clearTodo\",\n {\n title: \"clearTodo\",\n description: \"Clear all todos.\",\n inputSchema: {},\n },\n async () => {\n try {\n return successToolResult(await clearTodo())\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\nimport { getRemainingTodos } from \"./todo.js\"\n\nexport type AttemptCompletionResult =\n | { remainingTodos: { id: number; title: string; completed: boolean }[] }\n | Record<string, never>\n\nexport async function attemptCompletion(): Promise<AttemptCompletionResult> {\n const remainingTodos = getRemainingTodos()\n if (remainingTodos.length > 0) {\n return { remainingTodos }\n }\n return {}\n}\n\nexport function registerAttemptCompletion(server: McpServer) {\n server.registerTool(\n \"attemptCompletion\",\n {\n title: \"Attempt completion\",\n description: \"Signal task completion. Validates all todos are complete before ending.\",\n inputSchema: {},\n },\n async () => {\n try {\n return successToolResult(await attemptCompletion())\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import { realpathSync } from \"node:fs\"\nimport fs from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\n\nexport const workspacePath = realpathSync(expandHome(process.cwd()))\n\nfunction expandHome(filepath: string): string {\n if (filepath.startsWith(\"~/\") || filepath === \"~\") {\n return path.join(os.homedir(), filepath.slice(1))\n }\n return filepath\n}\n\nexport async function validatePath(requestedPath: string): Promise<string> {\n const expandedPath = expandHome(requestedPath)\n const absolute = path.isAbsolute(expandedPath)\n ? path.resolve(expandedPath)\n : path.resolve(process.cwd(), expandedPath)\n const perstackDir = `${workspacePath}/perstack`.toLowerCase()\n if (\n absolute.toLowerCase() === perstackDir ||\n absolute.toLowerCase().startsWith(`${perstackDir}/`)\n ) {\n throw new Error(\"Access denied - perstack directory is not allowed\")\n }\n try {\n const realAbsolute = await fs.realpath(absolute)\n if (!isWithinWorkspace(realAbsolute)) {\n throw new Error(\"Access denied - symlink target outside allowed directories\")\n }\n return realAbsolute\n } catch (_error) {\n const parentDir = path.dirname(absolute)\n try {\n const realParentPath = await fs.realpath(parentDir)\n if (!isWithinWorkspace(realParentPath)) {\n throw new Error(\"Access denied - parent directory outside allowed directories\")\n }\n return absolute\n } catch {\n if (!isWithinWorkspace(absolute)) {\n throw new Error(\n `Access denied - path outside allowed directories: ${absolute} not in ${workspacePath}`,\n )\n }\n throw new Error(`Parent directory does not exist: ${parentDir}`)\n }\n }\n}\n\nfunction isWithinWorkspace(absolutePath: string): boolean {\n return absolutePath === workspacePath || absolutePath.startsWith(`${workspacePath}/`)\n}\n","import type { FileHandle } from \"node:fs/promises\"\nimport { constants, lstat, open } from \"node:fs/promises\"\n\nconst O_NOFOLLOW = constants.O_NOFOLLOW ?? 0\nconst O_NOFOLLOW_SUPPORTED = typeof constants.O_NOFOLLOW === \"number\"\n\nasync function checkNotSymlink(path: string): Promise<void> {\n const stats = await lstat(path).catch(() => null)\n if (stats?.isSymbolicLink()) {\n throw new Error(\"Operation denied: target is a symbolic link\")\n }\n}\n\nexport function isSymlinkProtectionFullySupported(): boolean {\n return O_NOFOLLOW_SUPPORTED\n}\n\nexport async function safeWriteFile(path: string, data: string): Promise<void> {\n let handle: FileHandle | undefined\n try {\n await checkNotSymlink(path)\n const flags = constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | O_NOFOLLOW\n handle = await open(path, flags, 0o644)\n await handle.writeFile(data, \"utf-8\")\n } finally {\n await handle?.close()\n }\n}\n\nexport async function safeReadFile(path: string): Promise<string> {\n let handle: FileHandle | undefined\n try {\n await checkNotSymlink(path)\n const flags = constants.O_RDONLY | O_NOFOLLOW\n handle = await open(path, flags)\n const buffer = await handle.readFile(\"utf-8\")\n return buffer\n } finally {\n await handle?.close()\n }\n}\n","import { stat } from \"node:fs/promises\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { safeReadFile, safeWriteFile } from \"../lib/safe-file.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nexport async function editTextFile(input: { path: string; newText: string; oldText: string }) {\n const { path, newText, oldText } = input\n const validatedPath = await validatePath(path)\n const stats = await stat(validatedPath).catch(() => null)\n if (!stats) {\n throw new Error(`File ${path} does not exist.`)\n }\n if (!(stats.mode & 0o200)) {\n throw new Error(`File ${path} is not writable`)\n }\n await applyFileEdit(validatedPath, newText, oldText)\n return {\n path: validatedPath,\n newText,\n oldText,\n }\n}\n\nfunction normalizeLineEndings(text: string): string {\n return text.replace(/\\r\\n/g, \"\\n\")\n}\n\nasync function applyFileEdit(filePath: string, newText: string, oldText: string) {\n const content = normalizeLineEndings(await safeReadFile(filePath))\n const normalizedOld = normalizeLineEndings(oldText)\n const normalizedNew = normalizeLineEndings(newText)\n if (!content.includes(normalizedOld)) {\n throw new Error(`Could not find exact match for oldText in file ${filePath}`)\n }\n const modifiedContent = content.replace(normalizedOld, normalizedNew)\n await safeWriteFile(filePath, modifiedContent)\n}\n\nexport function registerEditTextFile(server: McpServer) {\n server.registerTool(\n \"editTextFile\",\n {\n title: \"Edit text file\",\n description: \"Replace exact text in an existing file. Normalizes line endings (CRLF → LF).\",\n inputSchema: {\n path: z.string().describe(\"Target file path to edit.\"),\n newText: z.string().describe(\"Text to replace with.\"),\n oldText: z.string().describe(\"Exact text to find and replace.\"),\n },\n },\n async (input: { path: string; newText: string; oldText: string }) => {\n try {\n return successToolResult(await editTextFile(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import { type ExecException, execFile } from \"node:child_process\"\nimport { promisify } from \"node:util\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { getFilteredEnv } from \"@perstack/core\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { successToolResult } from \"../lib/tool-result.js\"\n\nconst execFileAsync = promisify(execFile)\ntype ExecError = ExecException & { stdout?: string; stderr?: string }\nfunction isExecError(error: unknown): error is ExecError {\n return error instanceof Error && \"code\" in error\n}\ntype ExecInput = {\n command: string\n args: string[]\n env: Record<string, string>\n cwd: string\n stdout: boolean\n stderr: boolean\n timeout?: number\n}\nexport async function exec(input: ExecInput) {\n const validatedCwd = await validatePath(input.cwd)\n const { stdout, stderr } = await execFileAsync(input.command, input.args, {\n cwd: validatedCwd,\n env: getFilteredEnv(input.env),\n timeout: input.timeout,\n maxBuffer: 10 * 1024 * 1024,\n })\n let output = \"\"\n if (input.stdout) {\n output += stdout\n }\n if (input.stderr) {\n output += stderr\n }\n if (!output.trim()) {\n output = \"Command executed successfully, but produced no output.\"\n }\n return { output }\n}\n\nexport function registerExec(server: McpServer) {\n server.registerTool(\n \"exec\",\n {\n title: \"Execute Command\",\n description: \"Execute a system command. Returns stdout/stderr.\",\n inputSchema: {\n command: z.string().describe(\"The command to execute\"),\n args: z.array(z.string()).describe(\"The arguments to pass to the command\"),\n env: z.record(z.string(), z.string()).describe(\"The environment variables to set\"),\n cwd: z.string().describe(\"The working directory to execute the command in\"),\n stdout: z.boolean().describe(\"Whether to capture the standard output\"),\n stderr: z.boolean().describe(\"Whether to capture the standard error\"),\n timeout: z\n .number()\n .optional()\n .default(60000)\n .describe(\"Timeout in milliseconds (default: 60000)\"),\n },\n },\n async (input: ExecInput) => {\n try {\n return successToolResult(await exec(input))\n } catch (error: unknown) {\n let message: string\n let stdout: string | undefined\n let stderr: string | undefined\n if (isExecError(error)) {\n if ((error.killed || error.signal === \"SIGTERM\") && typeof input.timeout === \"number\") {\n message = `Command timed out after ${input.timeout}ms.`\n } else if (error.message.includes(\"timeout\")) {\n message = `Command timed out after ${input.timeout}ms.`\n } else {\n message = error.message\n }\n stdout = error.stdout\n stderr = error.stderr\n } else if (error instanceof Error) {\n message = error.message\n } else {\n message = \"An unknown error occurred.\"\n }\n const result: { error: string; stdout?: string; stderr?: string } = { error: message }\n if (stdout && input.stdout) {\n result.stdout = stdout\n }\n if (stderr && input.stderr) {\n result.stderr = stderr\n }\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] }\n }\n },\n )\n}\n","import { existsSync } from \"node:fs\"\nimport { stat } from \"node:fs/promises\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport mime from \"mime-types\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nconst MAX_IMAGE_SIZE = 15 * 1024 * 1024\nexport async function readImageFile(input: { path: string }) {\n const { path } = input\n const validatedPath = await validatePath(path)\n const isFile = existsSync(validatedPath)\n if (!isFile) {\n throw new Error(`File ${path} does not exist.`)\n }\n const mimeType = mime.lookup(validatedPath)\n if (!mimeType || ![\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"].includes(mimeType)) {\n throw new Error(`File ${path} is not supported.`)\n }\n const fileStats = await stat(validatedPath)\n const fileSizeMB = fileStats.size / (1024 * 1024)\n if (fileStats.size > MAX_IMAGE_SIZE) {\n throw new Error(\n `Image file too large (${fileSizeMB.toFixed(1)}MB). Maximum supported size is ${MAX_IMAGE_SIZE / (1024 * 1024)}MB. Please use a smaller image file.`,\n )\n }\n return {\n path: validatedPath,\n mimeType,\n size: fileStats.size,\n }\n}\n\nexport function registerReadImageFile(server: McpServer) {\n server.registerTool(\n \"readImageFile\",\n {\n title: \"Read image file\",\n description: \"Read an image file as base64. Supports PNG, JPEG, GIF, WebP. Max 15MB.\",\n inputSchema: {\n path: z.string(),\n },\n },\n async (input: { path: string }) => {\n try {\n return successToolResult(await readImageFile(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import { existsSync } from \"node:fs\"\nimport { stat } from \"node:fs/promises\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport mime from \"mime-types\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nconst MAX_PDF_SIZE = 30 * 1024 * 1024\nexport async function readPdfFile(input: { path: string }) {\n const { path } = input\n const validatedPath = await validatePath(path)\n const isFile = existsSync(validatedPath)\n if (!isFile) {\n throw new Error(`File ${path} does not exist.`)\n }\n const mimeType = mime.lookup(validatedPath)\n if (mimeType !== \"application/pdf\") {\n throw new Error(`File ${path} is not a PDF file.`)\n }\n const fileStats = await stat(validatedPath)\n const fileSizeMB = fileStats.size / (1024 * 1024)\n if (fileStats.size > MAX_PDF_SIZE) {\n throw new Error(\n `PDF file too large (${fileSizeMB.toFixed(1)}MB). Maximum supported size is ${MAX_PDF_SIZE / (1024 * 1024)}MB. Please use a smaller PDF file.`,\n )\n }\n return {\n path: validatedPath,\n mimeType,\n size: fileStats.size,\n }\n}\n\nexport function registerReadPdfFile(server: McpServer) {\n server.registerTool(\n \"readPdfFile\",\n {\n title: \"Read PDF file\",\n description: \"Read a PDF file as base64. Max 30MB.\",\n inputSchema: {\n path: z.string(),\n },\n },\n async (input: { path: string }) => {\n try {\n return successToolResult(await readPdfFile(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import { stat } from \"node:fs/promises\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { safeReadFile } from \"../lib/safe-file.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nexport async function readTextFile(input: { path: string; from?: number; to?: number }) {\n const { path, from, to } = input\n const validatedPath = await validatePath(path)\n const stats = await stat(validatedPath).catch(() => null)\n if (!stats) {\n throw new Error(`File ${path} does not exist.`)\n }\n const fileContent = await safeReadFile(validatedPath)\n const lines = fileContent.split(\"\\n\")\n const fromLine = from ?? 0\n const toLine = to ?? lines.length\n const selectedLines = lines.slice(fromLine, toLine)\n const content = selectedLines.join(\"\\n\")\n return {\n path,\n content,\n from: fromLine,\n to: toLine,\n }\n}\n\nexport function registerReadTextFile(server: McpServer) {\n server.registerTool(\n \"readTextFile\",\n {\n title: \"Read text file\",\n description: \"Read a UTF-8 text file. Supports partial reading via line ranges.\",\n inputSchema: {\n path: z.string(),\n from: z.number().optional().describe(\"The line number to start reading from.\"),\n to: z.number().optional().describe(\"The line number to stop reading at.\"),\n },\n },\n async (input: { path: string; from?: number; to?: number }) => {\n try {\n return successToolResult(await readTextFile(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { z } from \"zod/v4\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nexport interface SkillManagementCallbacks {\n addSkill(input: {\n name: string\n type: \"mcpStdioSkill\" | \"mcpSseSkill\"\n command?: string\n packageName?: string\n args?: string[]\n requiredEnv?: string[]\n endpoint?: string\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n }): Promise<{ tools: string[] }>\n removeSkill(skillName: string): Promise<void>\n addDelegate(expertKey: string): Promise<{ delegateToolName: string }>\n removeDelegate(expertName: string): Promise<void>\n}\n\nexport function registerAddSkill(server: McpServer, callbacks: SkillManagementCallbacks) {\n server.registerTool(\n \"addSkill\",\n {\n title: \"Add skill\",\n description:\n \"Dynamically add an MCP skill. Returns the list of tool names provided by the new skill.\",\n inputSchema: {\n name: z.string().describe(\"Unique skill name\"),\n type: z.enum([\"mcpStdioSkill\", \"mcpSseSkill\"]).describe(\"Skill transport type\"),\n command: z.string().optional().describe(\"Command to execute (for stdio skills)\"),\n packageName: z.string().optional().describe(\"Package name for npx/uvx (for stdio skills)\"),\n args: z.array(z.string()).optional().describe(\"Additional command arguments\"),\n requiredEnv: z.array(z.string()).optional().describe(\"Required environment variable names\"),\n endpoint: z.string().optional().describe(\"SSE endpoint URL (for SSE skills)\"),\n description: z.string().optional().describe(\"Human-readable description\"),\n rule: z.string().optional().describe(\"Usage rules for the LLM\"),\n pick: z.array(z.string()).optional().describe(\"Tool names to include (whitelist)\"),\n omit: z.array(z.string()).optional().describe(\"Tool names to exclude (blacklist)\"),\n },\n },\n async (input: {\n name: string\n type: \"mcpStdioSkill\" | \"mcpSseSkill\"\n command?: string\n packageName?: string\n args?: string[]\n requiredEnv?: string[]\n endpoint?: string\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n }) => {\n try {\n return successToolResult(await callbacks.addSkill(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n\nexport function registerRemoveSkill(server: McpServer, callbacks: SkillManagementCallbacks) {\n server.registerTool(\n \"removeSkill\",\n {\n title: \"Remove skill\",\n description: \"Dynamically remove an MCP skill by name. Disconnects and removes the skill.\",\n inputSchema: {\n skillName: z.string().describe(\"Name of the skill to remove\"),\n },\n },\n async (input: { skillName: string }) => {\n try {\n await callbacks.removeSkill(input.skillName)\n return successToolResult({ removed: input.skillName })\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n\nexport function registerAddDelegate(server: McpServer, callbacks: SkillManagementCallbacks) {\n server.registerTool(\n \"addDelegate\",\n {\n title: \"Add delegate\",\n description:\n \"Dynamically add a delegate expert. Returns the delegate tool name so you know what to call.\",\n inputSchema: {\n expertKey: z.string().describe(\"Key of the expert to add as a delegate\"),\n },\n },\n async (input: { expertKey: string }) => {\n try {\n return successToolResult(await callbacks.addDelegate(input.expertKey))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n\nexport function registerRemoveDelegate(server: McpServer, callbacks: SkillManagementCallbacks) {\n server.registerTool(\n \"removeDelegate\",\n {\n title: \"Remove delegate\",\n description: \"Dynamically remove a delegate expert by name.\",\n inputSchema: {\n expertName: z.string().describe(\"Name of the delegate expert to remove\"),\n },\n },\n async (input: { expertName: string }) => {\n try {\n await callbacks.removeDelegate(input.expertName)\n return successToolResult({ removed: input.expertName })\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n\nexport function registerSkillManagementTools(\n server: McpServer,\n callbacks: SkillManagementCallbacks,\n): void {\n registerAddSkill(server, callbacks)\n registerRemoveSkill(server, callbacks)\n registerAddDelegate(server, callbacks)\n registerRemoveDelegate(server, callbacks)\n}\n","import { mkdir, stat } from \"node:fs/promises\"\nimport { dirname } from \"node:path\"\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { z } from \"zod/v4\"\nimport { validatePath } from \"../lib/path.js\"\nimport { safeWriteFile } from \"../lib/safe-file.js\"\nimport { errorToolResult, successToolResult } from \"../lib/tool-result.js\"\n\nexport async function writeTextFile(input: { path: string; text: string }) {\n const { path, text } = input\n const validatedPath = await validatePath(path)\n const stats = await stat(validatedPath).catch(() => null)\n if (stats && !(stats.mode & 0o200)) {\n throw new Error(`File ${path} is not writable`)\n }\n const dir = dirname(validatedPath)\n await mkdir(dir, { recursive: true })\n await safeWriteFile(validatedPath, text)\n return {\n path: validatedPath,\n text,\n }\n}\n\nexport function registerWriteTextFile(server: McpServer) {\n server.registerTool(\n \"writeTextFile\",\n {\n title: \"writeTextFile\",\n description: \"Create or overwrite a UTF-8 text file. Creates parent directories as needed.\",\n inputSchema: {\n path: z.string().describe(\"Target file path (relative or absolute).\"),\n text: z.string().describe(\"Text to write to the file.\"),\n },\n },\n async (input: { path: string; text: string }) => {\n try {\n return successToolResult(await writeTextFile(input))\n } catch (e) {\n if (e instanceof Error) return errorToolResult(e)\n throw e\n }\n },\n )\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport packageJson from \"../package.json\" with { type: \"json\" }\nimport { registerAttemptCompletion } from \"./tools/attempt-completion.js\"\nimport { registerEditTextFile } from \"./tools/edit-text-file.js\"\nimport { registerExec } from \"./tools/exec.js\"\nimport { registerReadImageFile } from \"./tools/read-image-file.js\"\nimport { registerReadPdfFile } from \"./tools/read-pdf-file.js\"\nimport { registerReadTextFile } from \"./tools/read-text-file.js\"\nimport type { SkillManagementCallbacks } from \"./tools/skill-management.js\"\nimport { registerSkillManagementTools } from \"./tools/skill-management.js\"\nimport { registerClearTodo, registerTodo } from \"./tools/todo.js\"\nimport { registerWriteTextFile } from \"./tools/write-text-file.js\"\n\n/** Base skill name */\nexport const BASE_SKILL_NAME = packageJson.name\n\n/** Base skill version */\nexport const BASE_SKILL_VERSION = packageJson.version\n\n/**\n * Register all base skill tools on an MCP server.\n * This is useful for both standalone and in-process server creation.\n */\nexport function registerAllTools(server: McpServer): void {\n registerAttemptCompletion(server)\n registerTodo(server)\n registerClearTodo(server)\n registerExec(server)\n registerReadTextFile(server)\n registerReadImageFile(server)\n registerReadPdfFile(server)\n registerWriteTextFile(server)\n registerEditTextFile(server)\n}\n\nexport interface CreateBaseServerOptions {\n skillManagement?: SkillManagementCallbacks\n}\n\n/**\n * Create a base skill MCP server with all tools registered.\n * Used by the runtime for in-process execution via InMemoryTransport.\n */\nexport function createBaseServer(options?: CreateBaseServerOptions): McpServer {\n const server = new McpServer(\n {\n name: BASE_SKILL_NAME,\n version: BASE_SKILL_VERSION,\n },\n {\n capabilities: {\n tools: {},\n },\n },\n )\n registerAllTools(server)\n if (options?.skillManagement) {\n registerSkillManagementTools(server, options.skillManagement)\n }\n return server\n}\n"]}
@@ -1,154 +0,0 @@
1
- import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
-
4
- declare function validatePath(requestedPath: string): Promise<string>;
5
-
6
- declare function successToolResult(result: unknown): CallToolResult;
7
- declare function errorToolResult(e: Error): CallToolResult;
8
-
9
- interface SkillManagementCallbacks {
10
- addSkill(input: {
11
- name: string;
12
- type: "mcpStdioSkill" | "mcpSseSkill";
13
- command?: string;
14
- packageName?: string;
15
- args?: string[];
16
- requiredEnv?: string[];
17
- endpoint?: string;
18
- description?: string;
19
- rule?: string;
20
- pick?: string[];
21
- omit?: string[];
22
- }): Promise<{
23
- tools: string[];
24
- }>;
25
- removeSkill(skillName: string): Promise<void>;
26
- addDelegate(expertKey: string): Promise<{
27
- delegateToolName: string;
28
- }>;
29
- removeDelegate(expertName: string): Promise<void>;
30
- }
31
- declare function registerAddSkill(server: McpServer, callbacks: SkillManagementCallbacks): void;
32
- declare function registerRemoveSkill(server: McpServer, callbacks: SkillManagementCallbacks): void;
33
- declare function registerAddDelegate(server: McpServer, callbacks: SkillManagementCallbacks): void;
34
- declare function registerRemoveDelegate(server: McpServer, callbacks: SkillManagementCallbacks): void;
35
- declare function registerSkillManagementTools(server: McpServer, callbacks: SkillManagementCallbacks): void;
36
-
37
- /** Base skill name */
38
- declare const BASE_SKILL_NAME: string;
39
- /** Base skill version */
40
- declare const BASE_SKILL_VERSION: string;
41
- /**
42
- * Register all base skill tools on an MCP server.
43
- * This is useful for both standalone and in-process server creation.
44
- */
45
- declare function registerAllTools(server: McpServer): void;
46
- interface CreateBaseServerOptions {
47
- skillManagement?: SkillManagementCallbacks;
48
- }
49
- /**
50
- * Create a base skill MCP server with all tools registered.
51
- * Used by the runtime for in-process execution via InMemoryTransport.
52
- */
53
- declare function createBaseServer(options?: CreateBaseServerOptions): McpServer;
54
-
55
- type AttemptCompletionResult = {
56
- remainingTodos: {
57
- id: number;
58
- title: string;
59
- completed: boolean;
60
- }[];
61
- } | Record<string, never>;
62
- declare function attemptCompletion(): Promise<AttemptCompletionResult>;
63
- declare function registerAttemptCompletion(server: McpServer): void;
64
-
65
- declare function editTextFile(input: {
66
- path: string;
67
- newText: string;
68
- oldText: string;
69
- }): Promise<{
70
- path: string;
71
- newText: string;
72
- oldText: string;
73
- }>;
74
- declare function registerEditTextFile(server: McpServer): void;
75
-
76
- type ExecInput = {
77
- command: string;
78
- args: string[];
79
- env: Record<string, string>;
80
- cwd: string;
81
- stdout: boolean;
82
- stderr: boolean;
83
- timeout?: number;
84
- };
85
- declare function exec(input: ExecInput): Promise<{
86
- output: string;
87
- }>;
88
- declare function registerExec(server: McpServer): void;
89
-
90
- declare function readImageFile(input: {
91
- path: string;
92
- }): Promise<{
93
- path: string;
94
- mimeType: string;
95
- size: number;
96
- }>;
97
- declare function registerReadImageFile(server: McpServer): void;
98
-
99
- declare function readPdfFile(input: {
100
- path: string;
101
- }): Promise<{
102
- path: string;
103
- mimeType: string;
104
- size: number;
105
- }>;
106
- declare function registerReadPdfFile(server: McpServer): void;
107
-
108
- declare function readTextFile(input: {
109
- path: string;
110
- from?: number;
111
- to?: number;
112
- }): Promise<{
113
- path: string;
114
- content: string;
115
- from: number;
116
- to: number;
117
- }>;
118
- declare function registerReadTextFile(server: McpServer): void;
119
-
120
- declare function todo(input: {
121
- newTodos?: string[];
122
- completedTodos?: number[];
123
- }): Promise<{
124
- todos: {
125
- id: number;
126
- title: string;
127
- completed: boolean;
128
- }[];
129
- }>;
130
- declare function clearTodo(): Promise<{
131
- todos: {
132
- id: number;
133
- title: string;
134
- completed: boolean;
135
- }[];
136
- }>;
137
- declare function getRemainingTodos(): {
138
- id: number;
139
- title: string;
140
- completed: boolean;
141
- }[];
142
- declare function registerTodo(server: McpServer): void;
143
- declare function registerClearTodo(server: McpServer): void;
144
-
145
- declare function writeTextFile(input: {
146
- path: string;
147
- text: string;
148
- }): Promise<{
149
- path: string;
150
- text: string;
151
- }>;
152
- declare function registerWriteTextFile(server: McpServer): void;
153
-
154
- export { type AttemptCompletionResult, BASE_SKILL_NAME, BASE_SKILL_VERSION, type CreateBaseServerOptions, type SkillManagementCallbacks, attemptCompletion, clearTodo, createBaseServer, editTextFile, errorToolResult, exec, getRemainingTodos, readImageFile, readPdfFile, readTextFile, registerAddDelegate, registerAddSkill, registerAllTools, registerAttemptCompletion, registerClearTodo, registerEditTextFile, registerExec, registerReadImageFile, registerReadPdfFile, registerReadTextFile, registerRemoveDelegate, registerRemoveSkill, registerSkillManagementTools, registerTodo, registerWriteTextFile, successToolResult, todo, validatePath, writeTextFile };
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}