@plastichub/osr-ai-tools
Version:
CLI and library for LLM tools
61 lines (60 loc) • 2.62 kB
JavaScript
;
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;