hataraku
Version:
An autonomous coding agent for building AI-powered development tools. The name "Hataraku" (働く) means "to work" in Japanese.
66 lines • 2.05 kB
JavaScript
import { z } from 'zod';
/**
* Interpolate environment variables in a string
* Supports ${VAR_NAME} syntax
*/
export function interpolateEnvVars(value) {
return value.replace(/\${([^}]+)}/g, (_, varName) => {
const envValue = process.env[varName];
if (envValue === undefined) {
throw new Error(`Environment variable ${varName} is not set`);
}
return envValue;
});
}
/**
* Transform a string by interpolating environment variables
*/
const envString = z.string().transform((str) => interpolateEnvVars(str));
/**
* Transform an array of strings by interpolating environment variables
*/
const envStringArray = z.array(envString);
/**
* Transform a record of strings by interpolating environment variables
*/
const envStringRecord = z.record(envString);
/**
* Zod schema for validating MCP server configuration
*/
export const McpServerConfigSchema = z.object({
command: envString,
args: envStringArray.optional(),
env: envStringRecord.optional(),
disabledTools: z.array(z.string()).optional(),
}).strict().transform((data) => ({
command: data.command,
args: data.args || [],
env: data.env,
disabledTools: data.disabledTools
}));
/**
* Zod schema for validating complete MCP configuration
*/
export const McpConfigSchema = z.object({
mcpServers: z.record(McpServerConfigSchema),
}).strict().transform((data) => ({
mcpServers: data.mcpServers
}));
/**
* Type guard to check if a value is a valid MCP configuration
*/
export function isMcpConfig(value) {
return McpConfigSchema.safeParse(value).success;
}
/**
* Parse and validate MCP configuration, interpolating environment variables
* @throws {Error} if validation fails or required environment variables are missing
*/
export function parseMcpConfig(value) {
const result = McpConfigSchema.safeParse(value);
if (!result.success) {
throw new Error(`Invalid MCP configuration: ${result.error.message}`);
}
return result.data;
}
//# sourceMappingURL=config.js.map