UNPKG

@plastichub/osr-ai-tools

Version:

CLI and library for LLM tools

61 lines (60 loc) 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.list = exports.format = exports.signature = exports.options = void 0; const tools_1 = require("../lib/tools/tools"); const zod_schemas_1 = require("../zod_schemas"); const write_1 = require("@plastichub/fs/write"); const osr_commons_1 = require("@plastichub/osr-commons"); const options = (yargs) => (0, osr_commons_1.toYargs)(yargs, zod_schemas_1.ListCommandSchema); exports.options = options; const signature = (definition) => { const { properties } = definition.parameters; const requiredKeys = definition.parameters.required || []; const params = Object.entries(properties).map(([key, val]) => { const isRequired = requiredKeys.includes(key); const isOptional = !!val.optional || !isRequired; return isOptional ? `?${key}` : key; }); return `(${params.join(", ")})`; }; exports.signature = signature; function format(category, data) { const lines = [`## ${category}\n`]; data.forEach(definition => { const functionName = definition.name; const args = `${(0, exports.signature)(definition)}`; const summary = definition.description; lines.push(`- ${functionName}${args}: ${summary}`); }); return lines.join("\n"); } exports.format = format; const list = async (argv, options) => { const getCategorizedTools = (category, options) => { const toolsArray = tools_1.tools[category](process.cwd(), options); return toolsArray.map(tool => ({ name: tool.function.name, description: tool.function.description, category, parameters: tool.function.parameters })); }; const toolsList = { email: getCategorizedTools('email', options), search: getCategorizedTools('search', options), interact: getCategorizedTools('email', options), fs: getCategorizedTools('fs', options), npm: getCategorizedTools('npm', options), git: getCategorizedTools('git', options), terminal: getCategorizedTools('terminal', options) }; //write(argv.output + '.json', Object.keys(toolsList).map((k,v)=>format(k,v as any)).join('\n') ); const shortDescription = Object.keys(toolsList).map((value) => { return format(value, toolsList[value]); }).join('\n\n'); if (argv.output) { (0, write_1.sync)(argv.output, JSON.stringify(toolsList, null, 2)); (0, write_1.sync)(argv.output + '.md', shortDescription); } }; exports.list = list;