API Enhancements
These API enhancements are planned for future releases. All current APIs are fully functional—these enhancements focus on improving developer experience, safety, and flexibility.
Bulk Operations Safety
Enhanced safety controls for bulk operations to prevent accidental data loss.
Dry Run Mode
Preview operations without executing them.
Memory Operations:
// Preview deletion
const result = await cortex.memory.deleteMany(spaceId, {
filters: { "metadata.importance": { $lt: 20 } },
dryRun: true,
});
console.log(`Would delete ${result.wouldDelete} memories`);
// Decide whether to proceed
if (result.wouldDelete < 100) {
await cortex.memory.deleteMany(spaceId, {
filters: { "metadata.importance": { $lt: 20 } },
});
}
Context Operations:
// Preview updates
const result = await cortex.contexts.updateMany(spaceId, {
filters: { status: "blocked" },
updates: { status: "cancelled" },
dryRun: true,
});
console.log(`Would update ${result.wouldUpdate} contexts`);
Confirmation Thresholds
Require explicit confirmation for large bulk operations.
// Automatic confirmation if below threshold
await cortex.memory.deleteMany(spaceId, {
filters: { accessCount: 0 },
confirmationThreshold: 10, // Auto-confirm if ≤ 10 records
requireConfirmation: true, // Prompt if > 10 records
});
// If > 10 records:
// Error: Confirmation required (47 records would be deleted)
// Use { confirmed: true } to proceed
await cortex.memory.deleteMany(spaceId, {
filters: { accessCount: 0 },
confirmed: true, // Explicit confirmation
});
Cascade Deletion Tracking
Track descendants deleted in cascade operations.
const result = await cortex.contexts.deleteMany(spaceId, {
filters: { status: "cancelled" },
});
console.log(result.deleted); // 5 (direct matches)
console.log(result.descendantsDeleted); // 12 (children/grandchildren)
Advanced Filtering
Enhanced filtering capabilities for queries and bulk operations.
Text Search Filters
Search by text content in string fields.
Context Operations:
// Search by purpose
const contexts = await cortex.contexts.list(spaceId, {
filters: {
purposeContains: "user authentication", // Text search
},
});
Nested Data Queries
Filter by nested object fields in data or metadata.
Memory Operations:
// Query nested metadata
const memories = await cortex.memory.list({
memorySpaceId: spaceId,
filters: {
"metadata.tags": "urgent", // Array contains
"metadata.priority": { $gte: 8 }, // Comparison
"data.user.tier": "premium", // Nested object
},
});
User Operations:
// Query nested profile data
const users = await cortex.users.list({
filters: {
"preferences.theme": "dark", // Nested preference
"metadata.tier": "enterprise", // Metadata field
},
});
Range Query Operators
Use comparison operators for numeric and date fields.
Supported Operators:
$gte- Greater than or equal$lte- Less than or equal$gt- Greater than$lt- Less than$eq- Equal$ne- Not equal
Examples:
// Numeric range
const memories = await cortex.memory.list({
memorySpaceId: spaceId,
filters: {
"metadata.importance": { $gte: 70, $lte: 90 },
accessCount: { $gt: 10 },
},
});
// Date range
const contexts = await cortex.contexts.list(spaceId, {
filters: {
createdAfter: new Date("2026-01-01"),
createdBefore: new Date("2026-12-31"),
completedAfter: new Date("2026-06-01"),
},
});
Conversation Reference Filters
Filter by linked ACID conversation properties.
const contexts = await cortex.contexts.list(spaceId, {
filters: {
"conversationRef.conversationId": "conv-123",
},
});
Version Filtering
Filter by version numbers (for versioned entities).
const contexts = await cortex.contexts.list(spaceId, {
filters: {
version: { $gte: 5 }, // Version 5 or higher
},
});
Facts Confidence Range Queries
Filter facts by confidence ranges.
// Current: Only lower bound
const facts = await cortex.facts.list({
memorySpaceId: spaceId,
minConfidence: 0.8, // confidence >= 0.8
});
// Planned: Full range queries
const facts = await cortex.facts.list({
memorySpaceId: spaceId,
filters: {
confidence: { $gte: 0.7, $lte: 0.9 }, // 0.7 ≤ confidence ≤ 0.9
},
});
Enhanced Export Capabilities
More powerful export options for data portability.
Direct File Writing
Write exports directly to file paths.
// Current: Returns data as string
const data = await cortex.memory.export(spaceId);
await fs.writeFile("memories.json", data);
// Planned: Direct file writing
await cortex.memory.export(spaceId, {
outputPath: "./backups/memories-2026-01.json",
});
Include Version History
Export with full version history.
await cortex.memory.export(spaceId, {
outputPath: "./backups/memories-full.json",
includeVersionHistory: true, // Include previousVersions array
});
Include Linked Conversations
Export with linked ACID conversation data.
await cortex.contexts.export(spaceId, {
outputPath: "./backups/contexts.json",
includeConversations: true, // Include linked conversation messages
});
await cortex.memory.export(spaceId, {
outputPath: "./backups/memories.json",
includeConversationContext: true, // Include ACID source conversations
});
Selective Message Export
Filter messages in conversation exports.
// Current: Includes all messages
const data = await cortex.conversations.export(spaceId, conversationId);
// Planned: Filter messages
await cortex.conversations.export(spaceId, conversationId, {
outputPath: "./backups/conversation.json",
includeFullMessages: false, // Only include message metadata
messageFilters: {
role: "assistant", // Only assistant messages
},
});
Multi-Tenancy Filters
Filter by tenant ID in multi-tenant deployments.
// Count memories by tenant
const count = await cortex.memory.count({
memorySpaceId: spaceId,
tenantId: "tenant-123", // Multi-tenancy filter
});
// List memories by tenant
const memories = await cortex.memory.list({
memorySpaceId: spaceId,
tenantId: "tenant-123",
});
Note: Currently, tenantId and participantId parameters are defined in TypeScript types but not yet passed to the backend.
Sessions API Enhancements
Improved session management capabilities.
Date Range Filters
Filter sessions by start date.
const sessions = await cortex.sessions.list(spaceId, {
startedAfter: new Date("2026-01-01"),
startedBefore: new Date("2026-01-31"),
});
Dry Run for Expiration
Preview idle session expiration.
const result = await cortex.sessions.expireIdle(spaceId, {
idleTimeoutMs: 30 * 60 * 1000, // 30 minutes
dryRun: true,
});
console.log(`Would expire ${result.expired.length} sessions`);
Session-Specific Error Codes
Dedicated error codes for session operations.
try {
await cortex.sessions.get(spaceId, sessionId);
} catch (error) {
if (error.code === CortexErrorCode.SESSION_NOT_FOUND) {
// Session doesn't exist
} else if (error.code === CortexErrorCode.SESSION_EXPIRED) {
// Session expired
} else if (error.code === CortexErrorCode.SESSION_ALREADY_ENDED) {
// Session already ended
}
}
User Operations Enhancements
Advanced user profile management features.
Profile Validation Configuration
Configure profile validation rules.
const cortex = new Cortex({
convexUrl: process.env.CONVEX_URL!,
userProfileValidation: {
requiredFields: ["displayName", "email"],
maxDisplayNameLength: 100,
emailRequired: true,
validateEmail: true,
},
});
// Validation enforced on create/update
await cortex.users.create({
id: "user-123",
displayName: "Alice",
// Error: email is required
});
Version Retention Configuration
Control how many profile versions to keep.
const cortex = new Cortex({
convexUrl: process.env.CONVEX_URL!,
userProfileVersionRetention: 10, // Keep last 10 versions only
});
Skip Versioning Option
Skip version creation for routine updates.
// Routine update (no version created)
await cortex.users.update("user-123", {
displayName: "Alice Smith",
skipVersioning: true,
});
Agent Management Enhancements
Sorting Implementation
Sort agent lists by various fields.
// Currently: Returns agents in database order
const agents = await cortex.agents.list();
// Planned: Sorting support
const agents = await cortex.agents.list({
sortBy: "totalMemories", // Sort by memory count
sortOrder: "desc", // Descending order
});
Analytics for Unregistered Agents
Get statistics for unregistered agents.
// Planned: Analytics for any agent ID
const stats = await cortex.analytics.getAgentStats("unregistered-agent-456");
console.log(stats.totalMemories);
console.log(stats.totalConversations);
Workarounds (Current Implementation)
Until these features are available, use these patterns:
Manual Dry Run
// Count before deleting
const count = await cortex.memory.count({
memorySpaceId: spaceId,
filters: { accessCount: 0 },
});
console.log(`Will delete ${count} memories`);
if (count < 100) {
await cortex.memory.deleteMany(spaceId, {
filters: { accessCount: 0 },
});
}
Manual Nested Filtering
// Client-side filtering for nested fields
const allMemories = await cortex.memory.list({ memorySpaceId: spaceId });
const filtered = allMemories.filter(m => m.metadata.tags?.includes("urgent"));
Manual Export to File
const data = await cortex.memory.export(spaceId);
await fs.writeFile("./backups/memories.json", data, "utf-8");