@plastichub/osr-ai-tools
Version:
CLI and library for LLM tools
62 lines (56 loc) • 2.15 kB
text/typescript
import type { Argv } from 'yargs'
import { tools } from '../lib/tools/tools'
import { logger } from '../'
import { ListCommandSchema } from '../zod_schemas'
import { sync as write } from '@plastichub/fs/write'
import { toYargs } from '@plastichub/osr-commons'
export const options = (yargs: Argv) => toYargs(yargs, ListCommandSchema)
export const list = async (argv: any, options?: any) => {
const fsTools = tools.fs(process.cwd(), options)
const npmTools = tools.npm(process.cwd(), options)
const gitTools = tools.git(process.cwd(), options)
const terminalTools = tools.terminal(process.cwd(), options)
const toolsList = {
fs: fsTools.map(tool => ({
name: tool.function.name,
description: tool.function.description,
category: 'fs'
})),
npm: npmTools.map(tool => ({
name: tool.function.name,
description: tool.function.description,
category: 'npm'
})),
git: gitTools.map(tool => ({
name: tool.function.name,
description: tool.function.description,
category: 'git'
})),
terminal: terminalTools.map(tool => ({
name: tool.function.name,
description: tool.function.description,
category: 'terminal'
}))
};
logger.info('Available Tools:\n');
logger.info('Filesystem Tools:');
fsTools.forEach(tool => {
logger.info(` ${tool.function.name}: ${tool.function.description}`);
});
logger.info('\nNPM Tools:');
npmTools.forEach(tool => {
logger.info(` ${tool.function.name}: ${tool.function.description}`);
});
logger.info('\nGit Tools:');
gitTools.forEach(tool => {
logger.info(` ${tool.function.name}: ${tool.function.description}`);
});
logger.info('\nTerminal Tools:');
terminalTools.forEach(tool => {
logger.info(` ${tool.function.name}: ${tool.function.description}`);
});
if (argv.output) {
logger.info(`\nWriting tools list to ${argv.output}`);
write(argv.output, JSON.stringify(toolsList, null, 2));
}
};