API Reference¶
Programmatic usage documentation for CapiscIO CLI
This document provides comprehensive API documentation for using CapiscIO CLI programmatically.
Table of Contents¶
Installation¶
Core Classes¶
A2AValidator¶
The main validation class for A2A agent cards.
Constructor¶
Parameters:
- httpClient (optional): Custom HTTP client implementation
Methods¶
validate(input, options?): Promise<ValidationResult>¶
Main validation method that supports both files and URLs.
const result = await validator.validate('./agent.json', {
strictness: 'progressive',
timeout: 10000
});
Parameters:
- input: AgentCard | string - Agent card object or URL/file path
- options: ValidationOptions - Validation configuration
Returns: Promise<ValidationResult>
validateProgressive(input, options?): Promise<ValidationResult>¶
Convenience method for progressive validation.
validateStrict(input, options?): Promise<ValidationResult>¶
Convenience method for strict validation.
validateConservative(input, options?): Promise<ValidationResult>¶
Convenience method for conservative validation.
validateSchemaOnly(card, options?): Promise<ValidationResult>¶
Schema-only validation (no network calls).
FetchHttpClient¶
Default HTTP client implementation using native fetch API.
import { FetchHttpClient } from 'capiscio-cli';
const httpClient = new FetchHttpClient();
const validator = new A2AValidator(httpClient);
Methods¶
get(url, options?): Promise<HttpResponse>¶
Performs HTTP GET request.
const response = await httpClient.get('https://example.com/agent.json', {
timeout: 5000,
headers: { 'Authorization': 'Bearer token' }
});
Types & Interfaces¶
AgentCard¶
interface AgentCard {
protocolVersion: string;
name: string;
description: string;
url: string;
preferredTransport: TransportProtocol;
additionalInterfaces?: AgentInterface[];
provider: AgentProvider;
iconUrl?: string;
version: string;
documentationUrl?: string;
capabilities?: AgentCapabilities;
securitySchemes?: Record<string, SecurityScheme>;
security?: Array<Record<string, string[]>>;
defaultInputModes?: string[];
defaultOutputModes?: string[];
skills?: AgentSkill[];
supportsAuthenticatedExtendedCard?: boolean;
signatures?: AgentCardSignature[];
extensions?: AgentExtension[];
}
ValidationResult¶
interface ValidationResult {
success: boolean;
score: number;
errors: ValidationError[];
warnings: ValidationWarning[];
suggestions: ValidationSuggestion[];
validations: ValidationCheck[];
versionInfo?: VersionInfo;
}
ValidationOptions¶
interface ValidationOptions {
transport?: TransportProtocol | 'all';
strictness?: ValidationStrictness;
a2aVersion?: string;
timeout?: number;
compliance?: boolean;
registryReady?: boolean;
testMessage?: string;
skipDynamic?: boolean;
suggestions?: boolean;
showVersionCompat?: boolean;
}
ValidationStrictness¶
TransportProtocol¶
ValidationError¶
interface ValidationError {
code: string;
message: string;
field?: string;
severity: 'error';
fixable?: boolean;
}
ValidationWarning¶
interface ValidationWarning {
code: string;
message: string;
field?: string;
severity: 'warning';
fixable?: boolean;
}
ValidationSuggestion¶
interface ValidationSuggestion {
id: string;
message: string;
severity: 'info';
impact?: string;
fixable?: boolean;
}
ValidationCheck¶
interface ValidationCheck {
id: string;
name: string;
status: 'passed' | 'failed' | 'skipped';
message: string;
duration?: number;
details?: string;
}
HttpClient Interface¶
interface HttpClient {
get(url: string, options?: RequestOptions): Promise<HttpResponse>;
}
interface RequestOptions {
timeout?: number;
headers?: Record<string, string>;
signal?: AbortSignal;
}
interface HttpResponse {
status: number;
data: any;
headers: Record<string, string>;
}
Validation Options¶
Strictness Levels¶
| Level | Description | Use Case |
|---|---|---|
strict |
Full compliance, zero tolerance | Production deployment |
progressive |
Balanced validation with warnings | Development, CI/CD |
conservative |
Minimal requirements only | Early development |
Common Options¶
const options: ValidationOptions = {
strictness: 'progressive', // Validation level
timeout: 10000, // HTTP timeout in ms
skipDynamic: false, // Skip network calls
registryReady: false, // Registry deployment checks
showVersionCompat: true // Detailed version analysis
};
Error Handling¶
Error Types¶
// Validation errors
if (!result.success) {
result.errors.forEach(error => {
console.error(`${error.code}: ${error.message}`);
if (error.field) {
console.error(`Field: ${error.field}`);
}
});
}
// HTTP errors
try {
const result = await validator.validate('https://invalid-url.com');
} catch (error) {
if (error instanceof HttpError) {
console.error(`HTTP ${error.status}: ${error.message}`);
}
}
Error Codes¶
SCHEMA_VALIDATION_ERROR: Schema validation failedVERSION_MISMATCH_ERROR: Version compatibility issuesVALIDATION_FAILED: General validation failureENDPOINT_UNREACHABLE: Network connectivity issuesNOT_FOUND: Agent card not foundTIMEOUT: Request timeout
Examples¶
Basic Validation¶
import { A2AValidator } from 'capiscio-cli';
const validator = new A2AValidator();
// Validate local file
const result = await validator.validate('./agent.json');
console.log(`Validation ${result.success ? 'passed' : 'failed'}`);
console.log(`Score: ${result.score}/100`);
// Validate URL
const urlResult = await validator.validate('https://api.example.com');
if (!urlResult.success) {
urlResult.errors.forEach(error => {
console.error(`Error: ${error.message}`);
});
}
Strict Validation for Production¶
const validator = new A2AValidator();
const result = await validator.validateStrict('./agent.json', {
registryReady: true,
timeout: 15000
});
if (result.success) {
console.log('✅ Agent ready for production deployment!');
} else {
console.log('❌ Agent failed production validation:');
result.errors.forEach(error => {
console.log(` • ${error.message}`);
});
process.exit(1);
}
Schema-Only Validation¶
const validator = new A2AValidator();
const agentCard = JSON.parse(fs.readFileSync('./agent.json', 'utf8'));
const result = await validator.validateSchemaOnly(agentCard);
if (result.success) {
console.log('Schema validation passed');
} else {
console.log('Schema issues found:');
result.errors.forEach(error => {
console.log(` ${error.field}: ${error.message}`);
});
}
Custom HTTP Client¶
class CustomHttpClient implements HttpClient {
async get(url: string, options?: RequestOptions): Promise<HttpResponse> {
// Custom implementation with authentication, retries, etc.
const response = await fetch(url, {
headers: {
'Authorization': 'Bearer ' + process.env.API_TOKEN,
...options?.headers
}
});
return {
status: response.status,
data: await response.json(),
headers: Object.fromEntries(response.headers.entries())
};
}
}
const validator = new A2AValidator(new CustomHttpClient());
const result = await validator.validate('https://protected-api.example.com');
CI/CD Integration¶
// ci-validation.js
import { A2AValidator } from 'capiscio-cli';
const validator = new A2AValidator();
const result = await validator.validate('./dist/agent.json', {
strictness: 'progressive',
skipDynamic: true // No network calls in CI
});
// Output for CI systems
console.log(JSON.stringify({
success: result.success,
score: result.score,
errors: result.errors.length,
warnings: result.warnings.length
}, null, 2));
process.exit(result.success ? 0 : 1);
Batch Validation¶
import { A2AValidator } from 'capiscio-cli';
import { glob } from 'glob';
const validator = new A2AValidator();
const agentFiles = await glob('./agents/**/*.json');
const results = await Promise.all(
agentFiles.map(async (file) => {
const result = await validator.validate(file);
return {
file,
success: result.success,
score: result.score,
errors: result.errors.length
};
})
);
// Report summary
const passed = results.filter(r => r.success).length;
const total = results.length;
console.log(`Validation Summary: ${passed}/${total} agents passed`);
// Report failures
results.filter(r => !r.success).forEach(result => {
console.log(`❌ ${result.file}: ${result.errors} errors`);
});