@plastichub/osr-ai-tools
Version:
CLI and library for LLM tools
12 lines • 6.17 kB
JSON
[
{
"name": "commit_files_git",
"arguments": "{\"files\": [\"package.json\", \"Readme.md\", \"src/zod_types.ts\", \"src/zod_schemas.ts\", \"src/tools.ts\", \"src/main.ts\", \"src/index.ts\", \"src/constants.ts\", \"src/lib/tools/terminal.ts\", \"src/lib/tools/npm.ts\", \"src/lib/tools/git.ts\", \"src/lib/tools/fs.ts\", \"src/commands/types.ts\", \"src/commands/list.ts\", \"src/commands/invoke.ts\", \"src/commands/index.ts\"], \"message\": \"Initial setup of LLM Tools CLI project with core functionality and documentation\"}",
"parsed_arguments": null
},
{
"name": "modify_project_files",
"arguments": "{\"files\": [{\"path\": \"Readme.md\", \"content\": \"# LLM Tools CLI\\n\\nCommand-line interface and library for LLM tools providing filesystem, npm, git, and terminal operations.\\n\\n## Setup\\n\\n1. Install dependencies:\\n```bash\\npnpm install\\n```\\n\\n2. Build the project:\\n```bash\\npnpm run build\\n```\\n\\n3. Configure environment:\\nEither set environment variable:\\n```bash\\nexport OPENAI_API_KEY=your-key-here\\n```\\nOr create a configuration file (e.g. `.env.dev.json`):\\n```json\\n{\\n \\\"openai\\\": {\\n \\\"key\\\": \\\"your-key-here\\\"\\n }\\n}\\n```\\nThen use with --env_key parameter:\\n```bash\\npnpm start invoke --env_key dev\\n```\\n\\n## Available Commands\\n\\n### Generate TypeScript Types\\nGenerates TypeScript interfaces from Zod schemas:\\n```bash\\npnpm run types\\n```\\n\\n### List Available Tools\\nShow all available tools and their descriptions:\\n```bash\\npnpm start list\\n\\n# Write tools list to file\\npnpm start list --output ./tools.json\\n```\\n\\n### Invoke Tool Functions\\nInvoke specific tool functions:\\n```bash\\npnpm start invoke \\\\\\n --tools fs \\\\\\n --function list_files \\\\\\n --target ./src \\\\\\n --params '{\\\"directory\\\":\\\".\\\",\\\"pattern\\\":\\\"**/*.ts\\\"}'\\n```\\n\\n## Project Structure\\n```\\nsrc/\\n ├── commands/ # Command implementations\\n │ ├── index.ts # Command registry\\n │ ├── invoke.ts # Invoke command\\n │ ├── list.ts # List command\\n │ └── types.ts # Types command\\n ├── lib/ # Core functionality\\n │ └── tools/ # Tool implementations\\n │ ├── fs.ts # Filesystem tools\\n │ ├── git.ts # Git operations\\n │ ├── npm.ts # NPM commands\\n │ └── terminal.ts # Terminal operations\\n ├── constants.ts # Logger name constant\\n ├── index.ts # Logger setup\\n ├── main.ts # CLI entry point\\n ├── tools.ts # Tools registry\\n ├── zod_schemas.ts # Zod schemas\\n └── zod_types.ts # Generated TypeScript interfaces\\n```\\n\\n## Library Usage\\n\\n### Core Imports\\nAlways use ES imports:\\n```typescript\\nimport * as path from 'path'\\n```\\n\\n### Filesystem Operations\\n```typescript\\nimport { sync as rm } from '@plastichub/fs/remove'\\nimport { sync as dir } from '@plastichub/fs/dir'\\nimport { sync as write } from '@plastichub/fs/write'\\nimport { sync as read } from '@plastichub/fs/read'\\nimport { filesEx as glob } from '@plastichub/osr-commons/_glob'\\n```\\n\\n### Configuration\\n```typescript\\nimport { CONFIG_DEFAULT } from '@plastichub/osr-commons'\\n\\nexport const foo = (argv) => {\\n const config = CONFIG_DEFAULT(argv.env_key) as any\\n if (!config) {\\n logger.warn('No config found!')\\n return\\n }\\n if (!config.openai?.key) {\\n logger.warn('No OpenAI key found in config!')\\n return\\n }\\n const api_key = process.env.OPENAI_API_KEY || config.openai.key\\n}\\n```\\n\\n### Logging Setup\\n```typescript\\nimport { Logger } from 'tslog'\\nimport { createLogger } from '@plastichub/osr-log'\\n\\nexport const logger: Logger<unknown> = createLogger('package-name')\\n```\\n\\n### Zod Schemas\\n```typescript\\nimport { toYargs } from '@plastichub/osr-commons'\\nimport { MySchema } from '../zod_schemas'\\n\\n// Convert schema to Yargs options\\nconst options = (yargs: CLI.Argv) => toYargs(yargs, MySchema)\\n```\\n\\n### Generate TypeScript Interfaces\\n```typescript\\nimport { generate_interfaces } from '@plastichub/osr-commons'\\nimport { MySchema } from '../zod_schemas'\\n\\nexport const types = () => generate_interfaces(\\n [MySchema],\\n 'src/zod_types.ts'\\n)\\n```\\n\\n### Tool Implementation\\n```typescript\\nimport { RunnableToolFunction } from 'openai/lib/RunnableFunction'\\nimport { logger } from '../'\\n\\nexport const tools = (target: string): Array<any> => [\\n {\\n type: 'function',\\n function: {\\n name: 'tool_name',\\n description: 'Tool description',\\n parameters: {\\n type: 'object',\\n properties: {\\n param: { type: 'string' }\\n },\\n required: ['param']\\n },\\n function: async (params: any) => {\\n try {\\n // Implementation\\n return result\\n } catch (error) {\\n logger.error('Error in tool', error)\\n throw error\\n }\\n },\\n parse: JSON.parse\\n }\\n } as RunnableToolFunction<any>\\n]\\n```\\n\\n### Yargs Commands\\nRegister commands in src/commands/index.ts:\\n```typescript\\nimport type { Argv } from 'yargs'\\n\\nexport const commands = (yargs: Argv) => {\\n return yargs\\n .command('command', 'Description', options, handler)\\n .strict()\\n .help()\\n}\\n```\\n\\n## Notes\\n\\n- All commands are asynchronous when using yargs\\n- Use tslog for consistent logging across the application\\n- Always use Zod schemas for command parameters\\n- Use axios for HTTP requests\\n- Configuration can be provided via environment variables or config files\\n- TypeScript interfaces can be generated from Zod schemas using the `types` command\\n\"}]}",
"parsed_arguments": null
}
]