listCapabilities
codebolt.capability.listCapabilities(filter: CapabilityFilter): Promise<ListCapabilitiesResponse>
Lists all available capabilities with optional filtering by type, tags, or author.
Parameters
filter(CapabilityFilter, optional): Optional filter criteria to narrow down the list of capabilities.
Returns
Promise<[ListCapabilitiesResponse](/docs/reference/type-reference/codeboltjs/interfaces/ListCapabilitiesResponse)>: A promise that resolves to a list of capabilities matching the filter criteria.
Response Structure
The method returns a Promise that resolves to a ListCapabilitiesResponse object with the following properties:
Response Properties:
type(string): Always "listCapabilitiesResponse"success(boolean): Indicates if the operation was successfulcapabilities(Capability[]): Array of capability objectsid(string): Unique identifier for the capabilityname(string): Name of the capabilitytype(CapabilityType): Type of capability (skill, power, talent, etc.)description(string): Description of what the capability doesauthor(string, optional): Author of the capabilitytags(string[], optional): Tags associated with the capabilityversion(string, optional): Version of the capabilitymetadata(CapabilityMetadata, optional): Additional metadata including inputs, outputs, dependencies
error(string, optional): Error details if the operation failedrequestId(string, optional): Unique identifier for the request
Examples
Example 1: List All Capabilities
import codebolt from '@codebolt/codeboltjs';
// Get all available capabilities without filtering
const result = await codebolt.capability.listCapabilities();
if (result.success) {
console.log(`Found ${result.capabilities.length} capabilities:`);
result.capabilities.forEach(cap => {
console.log(`- ${cap.name} (${cap.type}): ${cap.description}`);
});
} else {
console.error('Failed to list capabilities:', result.error);
}
Example 2: Filter by Type
// List only skills
const skills = await codebolt.capability.listCapabilities({
type: 'skill'
});
console.log('Available skills:', skills.capabilities);
// List only powers
const powers = await codebolt.capability.listCapabilities({
type: 'power'
});
console.log('Available powers:', powers.capabilities);
Example 3: Filter by Tags
// Find AI-related capabilities
const aiCapabilities = await codebolt.capability.listCapabilities({
tags: ['ai', 'machine-learning']
});
console.log('AI Capabilities:', aiCapabilities.capabilities);
// Find data processing capabilities
const dataCapabilities = await codebolt.capability.listCapabilities({
tags: ['data', 'processing']
});
console.log('Data Processing Capabilities:', dataCapabilities.capabilities);
Example 4: Filter by Author
// Get capabilities by a specific author
const authorCapabilities = await codebolt.capability.listCapabilities({
author: 'codebolt-team'
});
console.log('Official Codebolt capabilities:', authorCapabilities.capabilities);
// Get community capabilities
const communityCapabilities = await codebolt.capability.listCapabilities({
author: 'community-contributor'
});
console.log('Community capabilities:', communityCapabilities.capabilities);
Example 5: Combined Filters
// Combine multiple filters
const filtered = await codebolt.capability.listCapabilities({
type: 'skill',
tags: ['automation'],
author: 'codebolt-team'
});
console.log('Filtered capabilities:', filtered.capabilities);
Example 6: Error Handling
try {
const result = await codebolt.capability.listCapabilities();
if (!result.success) {
console.error('Operation failed:', result.error);
return;
}
// Process capabilities
result.capabilities.forEach(capability => {
console.log(`${capability.name}: ${capability.description}`);
});
// Group by type
const byType = result.capabilities.reduce((acc, cap) => {
if (!acc[cap.type]) acc[cap.type] = [];
acc[cap.type].push(cap);
return acc;
}, {} as Record<string, typeof result.capabilities>);
console.log('Capabilities by type:', byType);
} catch (error) {
console.error('Unexpected error:', error);
}
Common Use Cases
1. Capability Discovery
Discover available capabilities before execution:
const discoverCapabilities = async () => {
const result = await codebolt.capability.listCapabilities();
const capabilityMap = result.capabilities.reduce((map, cap) => {
map[cap.name] = cap;
return map;
}, {} as Record<string, any>);
return capabilityMap;
};
const capabilities = await discoverCapabilities();
console.log('Available capabilities:', Object.keys(capabilities));
2. Building a Capability Browser
Create a user-friendly browser for capabilities:
const browseCapabilities = async (filter?: CapabilityFilter) => {
const result = await codebolt.capability.listCapabilities(filter);
// Group by type
const grouped = result.capabilities.reduce((acc, cap) => {
if (!acc[cap.type]) acc[cap.type] = [];
acc[cap.type].push({
name: cap.name,
description: cap.description,
author: cap.author,
tags: cap.tags
});
return acc;
}, {} as Record<string, any[]>);
return grouped;
};
const browser = await browseCapabilities();
console.log('Capability Browser:', browser);
3. Search and Filter
Implement advanced search functionality:
const searchCapabilities = async (searchTerm: string) => {
const result = await codebolt.capability.listCapabilities();
const matched = result.capabilities.filter(cap =>
cap.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
cap.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
cap.tags?.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase()))
);
return matched;
};
const results = await searchCapabilities('image');
console.log('Image-related capabilities:', results);
Notes
- The
filterparameter is optional. When not provided, all capabilities are returned - Filtering is performed on the server side, so only matching results are returned
- Multiple filter criteria are combined with AND logic (all must match)
- Tags filter requires all specified tags to be present on the capability
- Empty results are possible if no capabilities match the filter criteria
- Use specific helper methods like
listSkills(),listPowers(), orlistTalents()for simpler type-based filtering - Capabilities include metadata about inputs, outputs, and dependencies when available
- Author names are case-sensitive
- This operation does not require authentication for listing public capabilities