awesome-copilot/generate-config.js
copilot-swe-agent[bot] 0585489dca Finalize refined installation process with updated documentation and CLI improvements
Co-authored-by: AstroSteveo <34114851+AstroSteveo@users.noreply.github.com>
2025-09-20 22:02:52 +00:00

125 lines
3.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require("fs");
const path = require("path");
/**
* Generate a configuration file with all available options
*/
function generateConfig(outputPath = "awesome-copilot.config.yml") {
const rootDir = __dirname;
// Get all available items
const prompts = getAvailableItems(path.join(rootDir, "prompts"), ".prompt.md");
const instructions = getAvailableItems(path.join(rootDir, "instructions"), ".instructions.md");
const chatmodes = getAvailableItems(path.join(rootDir, "chatmodes"), ".chatmode.md");
const collections = getAvailableItems(path.join(rootDir, "collections"), ".collection.yml");
// Create config structure
const config = {
version: "1.0",
project: {
name: "My Project",
description: "A project using awesome-copilot customizations",
output_directory: ".awesome-copilot"
},
prompts: {},
instructions: {},
chatmodes: {},
collections: {}
};
// Populate with all items disabled by default (user can enable what they want)
prompts.forEach(item => {
config.prompts[item] = false;
});
instructions.forEach(item => {
config.instructions[item] = false;
});
chatmodes.forEach(item => {
config.chatmodes[item] = false;
});
collections.forEach(item => {
config.collections[item] = false;
});
// Convert to YAML format manually (since we don't want to add dependencies)
const yamlContent = objectToYaml(config);
// Add header comment
const header = `# Awesome Copilot Configuration File
# Generated on ${new Date().toISOString()}
#
# This file allows you to enable/disable specific prompts, instructions,
# chat modes, and collections for your project.
#
# Set items to 'true' to include them in your project
# Set items to 'false' to exclude them
#
# After configuring, run: awesome-copilot apply
#
`;
const fullContent = header + yamlContent;
fs.writeFileSync(outputPath, fullContent);
console.log(`Configuration file generated: ${outputPath}`);
console.log(`Found ${prompts.length} prompts, ${instructions.length} instructions, ${chatmodes.length} chat modes, ${collections.length} collections`);
console.log("\nNext steps:");
console.log("1. Edit the configuration file to enable desired items");
console.log("2. Run: awesome-copilot apply to apply the configuration");
}
/**
* Get all available items in a directory
*/
function getAvailableItems(directory, extension) {
if (!fs.existsSync(directory)) {
return [];
}
return fs.readdirSync(directory)
.filter(file => file.endsWith(extension))
.map(file => path.basename(file, extension))
.sort();
}
/**
* Convert object to YAML format (simple implementation)
*/
function objectToYaml(obj, indent = 0) {
const spaces = " ".repeat(indent);
let yaml = "";
for (const [key, value] of Object.entries(obj)) {
if (typeof value === "object" && value !== null) {
yaml += `${spaces}${key}:\n`;
yaml += objectToYaml(value, indent + 1);
} else {
const valueStr = typeof value === "string" ? `"${value}"` : value;
yaml += `${spaces}${key}: ${valueStr}\n`;
}
}
return yaml;
}
// CLI usage
if (require.main === module) {
const outputPath = process.argv[2] || "awesome-copilot.config.yml";
generateConfig(outputPath);
}
module.exports = { generateConfig, getAvailableItems };
// CLI usage
if (require.main === module) {
const outputPath = process.argv[2] || "awesome-copilot.config.yml";
generateConfig(outputPath);
}
module.exports = { generateConfig, getAvailableItems };