claude-web/node_modules/@instantlyeasy/claude-code-sdk-ts/examples/yaml-config-demo.js

120 lines
3.8 KiB
JavaScript
Raw Normal View History

2026-02-23 02:23:38 +00:00
import { claude } from '@instantlyeasy/claude-code-sdk-ts';
/**
* YAML Configuration Demo
* Demonstrates using YAML configuration files with the Claude Code SDK
*/
console.log('🔧 Claude Code SDK - YAML Configuration Demo\n');
// Example 1: Load YAML config file
console.log('1⃣ Loading YAML configuration file...');
const builder = claude();
await builder.withConfigFile('./config/yaml/mcpconfig.yaml');
const result1 = await builder
.query('List the permissions configured in the MCP config')
.asText();
console.log(result1);
console.log('\n' + '='.repeat(80) + '\n');
// Example 2: Using YAML roles configuration
console.log('2⃣ Loading roles from YAML...');
const roleBuilder = claude();
await roleBuilder.withRolesFile('./config/yaml/roles.yaml');
// Apply the data analyst role
roleBuilder.withRole('dataAnalyst', {
domain: 'financial',
specialty: 'risk analysis'
});
const result2 = await roleBuilder
.query('Explain your role and capabilities')
.asText();
console.log(result2);
console.log('\n' + '='.repeat(80) + '\n');
// Example 3: Combining YAML config with roles
console.log('3⃣ Combining YAML config and roles...');
const combinedBuilder = claude();
// Load both config and roles
await combinedBuilder.withConfigFile('./config/yaml/mcpconfig.yaml');
await combinedBuilder.withRolesFile('./config/yaml/roles.yaml');
// Apply security auditor role
combinedBuilder.withRole('securityAuditor', {
language: 'JavaScript',
project: 'web-application'
});
const result3 = await combinedBuilder
.query('What tools do I have access to for security auditing?')
.asText();
console.log(result3);
console.log('\n' + '='.repeat(80) + '\n');
// Example 4: YAML vs JSON comparison
console.log('4⃣ YAML vs JSON - Same configuration, different formats');
// Load JSON version
const jsonBuilder = claude();
await jsonBuilder.withConfigFile('./config/json/mcpconfig.json');
// Load YAML version
const yamlBuilder = claude();
await yamlBuilder.withConfigFile('./config/yaml/mcpconfig.yaml');
console.log('Both configurations loaded successfully!');
console.log('YAML provides better readability with:');
console.log(' - Comments for documentation');
console.log(' - Multi-line strings');
console.log(' - Cleaner syntax without quotes and commas');
console.log(' - Anchor/reference support for DRY configuration');
// Example 5: Environment variable substitution in YAML
console.log('\n5⃣ Environment variables in YAML configuration');
console.log('The YAML config uses ${HOME} which will be expanded to:', process.env.HOME);
// Example 6: Show YAML advanced features
console.log('\n6⃣ Advanced YAML features in roles.yaml:');
console.log(' - Role inheritance (seniorDeveloper extends developer)');
console.log(' - Multi-line prompting templates with |');
console.log(' - Arrays in both flow and block style');
console.log(' - Nested context objects');
// Example 7: Create a custom YAML config programmatically
console.log('\n7⃣ Creating configuration for YAML export:');
const customConfig = {
version: '1.0',
globalSettings: {
model: 'opus',
timeout: 45000,
permissionMode: 'ask'
},
mcpServers: {
'custom-mcp': {
defaultPermission: 'allow',
tools: {
CustomTool1: 'allow',
CustomTool2: 'ask'
}
}
}
};
console.log('Custom configuration created (ready for YAML export):');
console.log(JSON.stringify(customConfig, null, 2));
console.log('\n✅ YAML configuration demo complete!');
console.log('\nBenefits of YAML configuration:');
console.log(' 1. More readable and maintainable');
console.log(' 2. Support for comments and documentation');
console.log(' 3. Multi-line strings for templates');
console.log(' 4. Anchors and references for DRY configs');
console.log(' 5. Cleaner syntax for complex structures');