@onshoreoutsourcing/ai-traceability-sdk
v1.1.0
Published
AI Traceability TypeScript SDK for comprehensive activity tracking and MCP integration
Downloads
7
Maintainers
Readme
AI Traceability TypeScript SDK
TypeScript SDK for comprehensive AI activity tracking with full feature parity to the Python SDK.
Features
- ✅ Complete Type Safety - Full TypeScript type definitions
- ✅ Async/Promise Support - Native async/await patterns
- ✅ Automatic Batching - Configurable batch processing
- ✅ Retry Logic - Exponential backoff with configurable retries
- ✅ Session Management - Context managers for activity grouping
- ✅ Complete Tool Call Tracking - All 25+ fields supported
- ✅ File Tracking & Security - Epic 4 file operation monitoring
- ✅ MCP Integration - Claude/Cursor IDE support
- ✅ Browser & Node.js - Isomorphic JavaScript support
- ✅ Error Handling - Comprehensive error types and handling
Installation
npm install @onshoreoutsourcing/ai-traceability-sdkQuick Start
import { AITraceabilityClient } from '@onshoreoutsourcing/ai-traceability-sdk';
// Initialize client
const client = new AITraceabilityClient({
apiKey: 'your-api-key',
serviceUrl: 'https://api.ai-traceability.com'
});
// Use with session context
await client.withSession({
agentType: 'my-agent',
userId: 'user123'
}, async (session) => {
// Log a chat message
await session.logChat('user', 'Hello, how can I help?');
// Log tool usage with complete tracking
await session.logToolCall({
toolName: 'web_search',
toolCategory: 'research',
requestParams: { query: 'AI news' },
responseData: { results: ['...'] },
durationMs: 150,
estimatedCostCents: 5,
mcpServerName: 'my-mcp-server',
status: 'completed'
});
// Log AI decision
await session.logDecision({
name: 'search_strategy',
reasoningSteps: [
'Analyzed user query',
'Selected web search tool',
'Formatted search parameters'
],
confidenceScore: 0.9,
selectedOption: { strategy: 'web_search' },
alternativesConsidered: [
{ strategy: 'knowledge_base' },
{ strategy: 'direct_answer' }
]
});
});
// Close client
await client.close();Advanced Usage
Manual Session Management
const session = client.createSession({
agentType: 'my-agent',
sessionId: 'custom-session-123'
});
await session.start();
try {
await session.logActivity('processing', {
content: 'Processing user request',
metadata: { requestId: '123' }
});
// ... more activities
} finally {
await session.end();
}Complete Tool Call Tracking
await client.logToolCall('session-id', {
// Core fields
toolName: 'database_query',
toolCategory: 'data',
toolVersion: '2.1.0',
// MCP server fields
mcpServerName: 'claude-desktop',
mcpServerVersion: '1.5.0',
// Request/Response
requestParams: { table: 'users', filters: {} },
responseData: { count: 150, rows: [] },
// Performance tracking
startTime: new Date('2024-01-01T10:00:00Z'),
endTime: new Date('2024-01-01T10:00:00.150Z'),
durationMs: 150,
cpuMs: 45,
memoryMb: 12,
networkBytes: 2048,
// Cost tracking
estimatedCostCents: 3,
billingModel: 'per-query',
rateLimitConsumed: 1,
// Status
status: 'completed',
retryCount: 0,
// Data classification
dataClassification: 'internal',
containsPii: true,
// Tracing
correlationId: 'req-123',
traceId: 'trace-456',
// Context
userAgent: 'MyApp/1.0',
sourceLocation: 'handlers/user.ts:45',
additionalMetadata: {
queryComplexity: 'simple',
cacheHit: false
}
});Configuration Options
const client = new AITraceabilityClient({
apiKey: 'your-api-key',
serviceUrl: 'https://api.ai-traceability.com',
// Timeout configuration
timeout: 30000, // 30 seconds
// Retry configuration
retryAttempts: 3,
retryDelay: 1000, // 1 second base delay
// Batching configuration
batchSize: 100,
batchTimeout: 5000, // 5 seconds
autoFlush: true,
// Debug mode
debug: true,
// SSL verification
verifySSL: true
});File Tracking & Security Analysis
The SDK provides comprehensive file operation tracking and security analysis capabilities:
import {
FileOperationType,
FileOperationData,
SecurityAnalysisData
} from '@onshoreoutsourcing/ai-traceability-sdk';
// Track basic file operations
await client.logFileRead('session-id', {
filePath: '/app/data/config.json',
fileSize: 1024,
partialRead: false,
userId: '[email protected]',
projectId: 'project-123'
});
await client.logFileWrite('session-id', {
filePath: '/app/output/results.json',
contentSize: 2048,
operationType: 'write',
contentHashBefore: 'abc123',
contentHashAfter: 'def456',
userId: '[email protected]',
projectId: 'project-123'
});
// Track file moves and copies
await client.logFileMove('session-id', {
sourcePath: '/old/location.txt',
destinationPath: '/new/location.txt',
fileSize: 1536,
userId: '[email protected]'
});
// Security analysis
const securityResult = await client.analyzeFileSecurity('session-id', {
filePath: '/suspicious/script.sh',
operation: FileOperationType.WRITE,
content: '#!/bin/bash\nrm -rf /',
fileSize: 1024
});
console.log(`Risk Score: ${securityResult.riskScore}`);
console.log(`Threats: ${securityResult.threats.join(', ')}`);
// Anomaly detection
const anomalies = await client.detectFileAnomalies('session-id', {
sessionId: 'session-id',
timeWindowMinutes: 60
});
// Risk scoring
const riskScore = await client.calculateFileRiskScore('session-id', {
filePath: '/system/critical.exe',
operation: FileOperationType.DELETE,
isSensitive: true,
isExecutable: true,
isSystem: true
});
// Batch file operations
await client.logFileOperationsBatch('session-id', [
{
operationType: FileOperationType.READ,
sessionId: 'session-id',
filePath: '/batch/file1.txt',
fileSize: 1024
},
{
operationType: FileOperationType.WRITE,
sessionId: 'session-id',
filePath: '/batch/file2.txt',
contentSize: 2048
}
]);Error Handling
import {
AuthenticationError,
RateLimitError,
ValidationError,
NetworkError,
TimeoutError,
ServerError
} from '@onshoreoutsourcing/ai-traceability-sdk';
try {
await client.logActivity('session', 'chat', { content: 'test' });
} catch (error) {
if (error instanceof AuthenticationError) {
console.error('Invalid API key');
} else if (error instanceof RateLimitError) {
console.error(`Rate limited. Retry after: ${error.retryAfter} seconds`);
} else if (error instanceof ValidationError) {
console.error('Invalid request data');
} else if (error instanceof NetworkError) {
console.error('Network connectivity issue');
} else if (error instanceof TimeoutError) {
console.error('Request timed out');
} else if (error instanceof ServerError) {
console.error(`Server error: ${error.statusCode}`);
}
}Browser Support
The SDK works in both Node.js and browser environments:
<script type="module">
import { AITraceabilityClient } from '@onshoreoutsourcing/ai-traceability-sdk';
const client = new AITraceabilityClient({
apiKey: 'your-api-key'
});
// Use as normal...
</script>Testing
# Run tests
npm test
# Run with coverage
npm run test:coverage
# Watch mode
npm run test:watchBuilding
# Build TypeScript
npm run build
# Development watch mode
npm run devAPI Reference
Client Methods
Core Activity Tracking
logActivity(sessionId, activityType, data, activitySubtype?, durationMs?, tokenCount?)- Log an activitylogToolCall(sessionId, toolCall)- Log tool usage with complete schemalogDecision(sessionId, decision)- Log AI decision with reasoning
File Tracking & Security (Epic 4)
logFileRead(sessionId, operationData)- Track file read operationslogFileWrite(sessionId, operationData)- Track file write operationslogFileDelete(sessionId, operationData)- Track file deletion operationslogFileMove(sessionId, operationData)- Track file move/rename operationslogFileCopy(sessionId, operationData)- Track file copy operationsanalyzeFileSecurity(sessionId, analysisData)- Perform comprehensive security analysisdetectFileAnomalies(sessionId, detectionData)- Detect anomalous file access patternscalculateFileRiskScore(sessionId, riskData)- Calculate comprehensive risk scoreslogFileOperationsBatch(sessionId, operations)- Process multiple file operations in batch
Session & Batch Management
flush()- Manually flush batch queuewithSession(config, callback)- Execute callback with session contextcreateSession(config)- Create manual sessiongetStats()- Get client statisticsclose()- Close client and cleanup
Session Methods
start()- Start the sessionend()- End the sessionlogActivity(type, data, ...)- Log activity in sessionlogToolCall(toolCall)- Log tool call in sessionlogDecision(decision)- Log decision in sessionlogChat(role, content, metadata?)- Convenience method for chatgetSessionId()- Get session IDisActive()- Check if session is active
Error Types
TraceabilityClientError- Base error classAuthenticationError- Invalid API keyRateLimitError- Rate limit exceededValidationError- Invalid request dataNetworkError- Network connectivity issuesTimeoutError- Request timeoutServerError- Server-side errors
License
MIT
