tpmjs/packages/tools/create-basic-tools/src/generators
Ajax Davis 9fd56be9cd feat(create-basic-tools): add defensive parameter validation to generated tools
- Add defensive checks for required parameters in generated tool code
- Prevents crashes when tools are called with missing/empty params
- Returns descriptive error messages instead of undefined errors
- Update README with explanation of defensive pattern and best practices
- Bump to v1.0.5

Based on learnings from emoji-magic deployment:
- LLMs sometimes make probe calls with empty params
- Defensive checks prevent crashes and provide better error messages
- Even with Zod validation, runtime checks are valuable for robustness
2025-12-05 01:17:08 +10:00
..
config-files.ts feat: add @tpmjs/create-basic-tools CLI generator 2025-12-04 23:34:37 +10:00
package-json.ts chore: release emoji-magic v0.2.0 and create-basic-tools v1.0.4 2025-12-05 00:10:18 +10:00
readme.ts feat: add @tpmjs/create-basic-tools CLI generator 2025-12-04 23:34:37 +10:00
source-code.ts feat(create-basic-tools): add defensive parameter validation to generated tools 2025-12-05 01:17:08 +10:00

import type { GeneratorConfig } from '../types.js';

/**
 * Generates README.md content for the tool package
 */
export function generateReadme(config: GeneratorConfig): string {
  const { packageInfo, tools } = config;

  const toolsList = tools.map((tool) => `- **${tool.exportName}**: ${tool.description}`).join('\n');

  const usageExample = tools[0];
  if (!usageExample) {
    throw new Error('At least one tool is required');
  }

  return `# ${packageInfo.name}

${packageInfo.description}

## Installation

\`\`\`bash
pnpm add ${packageInfo.name}
\`\`\`

## Tools

This package provides ${tools.length} tool${tools.length > 1 ? 's' : ''} for the AI SDK:

${toolsList}

## Usage

\`\`\`typescript
import { ${usageExample.exportName} } from '${packageInfo.name}';
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

const result = await generateText({
  model: openai('gpt-4'),
  prompt: 'Process this text for me',
  tools: {
    ${usageExample.exportName},
  },
});

console.log(result.text);
\`\`\`

## Development

\`\`\`bash
# Install dependencies
pnpm install

# Build the package
pnpm build

# Type-check
pnpm type-check

# Watch mode
pnpm dev
\`\`\`

## Publishing

1. Update the version in \`package.json\`
2. Build the package: \`pnpm build\`
3. Publish to npm: \`pnpm publish --access public\`
4. Your tools will appear on [tpmjs.com](https://tpmjs.com) within 2-15 minutes

## License

${packageInfo.license}
`;
}