getCapabilityDetail
codebolt.capability.getCapabilityDetail(capabilityName: string, capabilityType: CapabilityType): Promise<GetCapabilityDetailResponse>
Retrieves detailed information about a specific capability including its metadata, input parameters, output structure, and execution requirements.
Parameters
capabilityName(string): The name of the capability to retrieve details for.capabilityType(CapabilityType, optional): Optional type to narrow the search and ensure correct capability retrieval.
Returns
Promise<[GetCapabilityDetailResponse](/docs/reference/type-reference/codeboltjs/interfaces/GetCapabilityDetailResponse)>: A promise that resolves to detailed information about the specified capability.
Response Structure
The method returns a Promise that resolves to a GetCapabilityDetailResponse object with the following properties:
Response Properties:
type(string): Always "getCapabilityDetailResponse"success(boolean): Indicates if the operation was successfulcapability(Capability, optional): Detailed capability objectid(string): Unique identifiername(string): Capability nametype(CapabilityType): Type of capabilitydescription(string): Detailed descriptionauthor(string, optional): Author informationversion(string, optional): Version numbertags(string[], optional): Associated tagsmetadata(CapabilityMetadata, optional): Detailed metadatainputs(CapabilityInput[], optional): Input parametersname(string): Parameter nametype(string): Parameter typedescription(string, optional): Parameter descriptionrequired(boolean, optional): Whether parameter is requireddefault(any, optional): Default value
outputs(CapabilityOutput[], optional): Output structurename(string): Output nametype(string): Output typedescription(string, optional): Output description
dependencies(string[], optional): Required dependenciestimeout(number, optional): Default timeout in milliseconds
error(string, optional): Error details if the operation failedrequestId(string, optional): Unique request identifier
Examples
Example 1: Get Basic Capability Details
import codebolt from '@codebolt/codeboltjs';
// Get details for a skill
const result = await codebolt.capability.getCapabilityDetail('data-processor', 'skill');
if (result.success && result.capability) {
console.log('Capability Details:');
console.log(`Name: ${result.capability.name}`);
console.log(`Type: ${result.capability.type}`);
console.log(`Description: ${result.capability.description}`);
console.log(`Version: ${result.capability.version}`);
console.log(`Author: ${result.capability.author}`);
} else {
console.error('Failed to get capability details:', result.error);
}
Example 2: Inspect Input Parameters
// Get capability details to understand required parameters
const detail = await codebolt.capability.getCapabilityDetail('image-resizer', 'skill');
if (detail.capability?.metadata?.inputs) {
console.log('Required Parameters:');
detail.capability.metadata.inputs
.filter(input => input.required)
.forEach(input => {
console.log(`- ${input.name} (${input.type}): ${input.description || 'No description'}`);
});
console.log('\nOptional Parameters:');
detail.capability.metadata.inputs
.filter(input => !input.required)
.forEach(input => {
const defaultVal = input.default !== undefined ? ` (default: ${input.default})` : '';
console.log(`- ${input.name} (${input.type}): ${input.description || 'No description'}${defaultVal}`);
});
}
Example 3: Understand Output Structure
// Get details to understand what the capability returns
const result = await codebolt.capability.getCapabilityDetail('csv-analyzer', 'skill');
if (result.capability?.metadata?.outputs) {
console.log('Output Structure:');
result.capability.metadata.outputs.forEach(output => {
console.log(`- ${output.name} (${output.type}): ${output.description || 'No description'}`);
});
// Prepare output parsing logic
const outputTypes = result.capability.metadata.outputs.map(o => o.type);
console.log('Expected output types:', outputTypes);
}
Example 4: Check Dependencies and Requirements
// Check if capability has dependencies
const detail = await codebolt.capability.getCapabilityDetail('advanced-processor', 'power');
if (detail.capability?.metadata?.dependencies) {
console.log('Required Dependencies:');
detail.capability.metadata.dependencies.forEach(dep => {
console.log(`- ${dep}`);
});
// Verify dependencies are available
const dependenciesAvailable = await checkDependencies(detail.capability.metadata.dependencies);
if (!dependenciesAvailable) {
console.error('Missing required dependencies');
}
}
async function checkDependencies(dependencies: string[]): Promise<boolean> {
// Implement dependency checking logic
return true;
}
Example 5: Build Dynamic Execution Form
// Create a dynamic form based on capability metadata
const buildExecutionForm = async (capabilityName: string, type: CapabilityType) => {
const detail = await codebolt.capability.getCapabilityDetail(capabilityName, type);
if (!detail.success || !detail.capability?.metadata?.inputs) {
throw new Error('Failed to get capability details');
}
const form = {
capabilityName: detail.capability.name,
capabilityType: detail.capability.type,
fields: detail.capability.metadata.inputs.map(input => ({
name: input.name,
type: input.type,
label: input.name,
description: input.description,
required: input.required || false,
defaultValue: input.default
}))
};
return form;
};
// Usage
const form = await buildExecutionForm('image-converter', 'skill');
console.log('Dynamic form schema:', form);
Example 6: Validate Parameters Before Execution
// Validate parameters against capability schema
const validateAndExecute = async (
capabilityName: string,
type: CapabilityType,
params: Record<string, any>
) => {
// Get capability details
const detail = await codebolt.capability.getCapabilityDetail(capabilityName, type);
if (!detail.success || !detail.capability?.metadata?.inputs) {
throw new Error('Failed to get capability details');
}
// Validate required parameters
const requiredParams = detail.capability.metadata.inputs
.filter(input => input.required)
.map(input => input.name);
const missingParams = requiredParams.filter(param => !(param in params));
if (missingParams.length > 0) {
throw new Error(`Missing required parameters: ${missingParams.join(', ')}`);
}
// Validate parameter types
for (const input of detail.capability.metadata.inputs) {
if (input.name in params) {
const paramValue = params[input.name];
// Add type validation logic based on input.type
console.log(`Validating ${input.name}: ${typeof paramValue} vs ${input.type}`);
}
}
// Execute with validated parameters
return await codebolt.capability.startCapability(capabilityName, type, params);
};
// Usage
try {
const result = await validateAndExecute(
'data-processor',
'skill',
{ input: 'data.csv', format: 'json' }
);
console.log('Execution result:', result);
} catch (error) {
console.error('Validation failed:', error);
}
Common Use Cases
1. Capability Discovery and Documentation
Generate documentation for capabilities:
const generateCapabilityDocs = async (capabilityName: string, type: CapabilityType) => {
const detail = await codebolt.capability.getCapabilityDetail(capabilityName, type);
if (!detail.success || !detail.capability) {
return null;
}
const docs = {
name: detail.capability.name,
type: detail.capability.type,
description: detail.capability.description,
version: detail.capability.version,
author: detail.capability.author,
tags: detail.capability.tags,
inputs: detail.capability.metadata?.inputs || [],
outputs: detail.capability.metadata?.outputs || [],
dependencies: detail.capability.metadata?.dependencies || []
};
return docs;
};
2. Dynamic Parameter Builder
Build parameter objects with defaults:
const buildParameters = async (capabilityName: string, type: CapabilityType, userParams: Record<string, any>) => {
const detail = await codebolt.capability.getCapabilityDetail(capabilityName, type);
if (!detail.success || !detail.capability?.metadata?.inputs) {
return userParams;
}
// Start with defaults
const params: Record<string, any> = {};
detail.capability.metadata.inputs.forEach(input => {
if (input.default !== undefined) {
params[input.name] = input.default;
}
});
// Override with user-provided values
return { ...params, ...userParams };
};
// Usage
const params = await buildParameters('image-resizer', 'skill', { width: 800 });
console.log('Built parameters:', params); // Includes defaults + user overrides
3. Capability Compatibility Check
Check if capability meets requirements:
const checkCapabilityCompatibility = async (
capabilityName: string,
type: CapabilityType,
requirements: { tags?: string[]; maxTimeout?: number }
) => {
const detail = await codebolt.capability.getCapabilityDetail(capabilityName, type);
if (!detail.success || !detail.capability) {
return { compatible: false, reason: 'Capability not found' };
}
// Check tag requirements
if (requirements.tags) {
const hasAllTags = requirements.tags.every(tag =>
detail.capability?.tags?.includes(tag)
);
if (!hasAllTags) {
return { compatible: false, reason: 'Missing required tags' };
}
}
// Check timeout requirements
if (requirements.maxTimeout) {
const defaultTimeout = detail.capability.metadata?.timeout || 30000;
if (defaultTimeout > requirements.maxTimeout) {
return { compatible: false, reason: 'Timeout exceeds maximum allowed' };
}
}
return { compatible: true, capability: detail.capability };
};
Notes
- Providing
capabilityTypeis recommended when capability names might be ambiguous - If multiple capabilities share the same name,
capabilityTypehelps identify the correct one - The metadata field may be empty for simpler capabilities
- Input and output schemas provide type information but don't validate at runtime
- Dependencies indicate other capabilities or system requirements needed
- Version information helps track capability updates and changes
- Author information can be used for filtering or verification
- Tags are useful for categorization and discovery
- This operation is useful for building dynamic UIs or validation systems
- Use this information to prepare proper parameters before calling
startCapability() - Timeout values are in milliseconds
- Capability details may include execution hints or best practices in the description