@xynehq/jaf
Version:
Juspay Agent Framework - A purely functional agent framework with immutable state and composable tools
395 lines • 13.5 kB
TypeScript
/**
* A2A Task Memory Types for JAF
* Extends the core memory system to support A2A task queue persistence
*/
import { z } from 'zod';
import { A2ATask, TaskState } from '../types.js';
export interface A2ATaskQuery {
readonly taskId?: string;
readonly contextId?: string;
readonly state?: TaskState;
readonly limit?: number;
readonly offset?: number;
readonly since?: Date;
readonly until?: Date;
readonly includeHistory?: boolean;
readonly includeArtifacts?: boolean;
}
export interface A2ATaskStorage {
readonly taskId: string;
readonly contextId: string;
readonly state: TaskState;
readonly taskData: string;
readonly statusMessage?: string;
readonly createdAt: Date;
readonly updatedAt: Date;
readonly expiresAt?: Date;
readonly metadata?: Readonly<Record<string, any>>;
}
export type A2ATaskProvider = {
/**
* Store a new A2A task
*/
readonly storeTask: (task: A2ATask, metadata?: {
expiresAt?: Date;
[key: string]: any;
}) => Promise<A2AResult<void>>;
/**
* Retrieve a task by ID
*/
readonly getTask: (taskId: string) => Promise<A2AResult<A2ATask | null>>;
/**
* Update an existing task
*/
readonly updateTask: (task: A2ATask, metadata?: {
[key: string]: any;
}) => Promise<A2AResult<void>>;
/**
* Update task status only (optimized for frequent status changes)
*/
readonly updateTaskStatus: (taskId: string, state: TaskState, statusMessage?: any, timestamp?: string) => Promise<A2AResult<void>>;
/**
* Search tasks by query
*/
readonly findTasks: (query: A2ATaskQuery) => Promise<A2AResult<A2ATask[]>>;
/**
* Get tasks by context ID
*/
readonly getTasksByContext: (contextId: string, limit?: number) => Promise<A2AResult<A2ATask[]>>;
/**
* Delete a task
*/
readonly deleteTask: (taskId: string) => Promise<A2AResult<boolean>>;
/**
* Delete tasks by context ID
*/
readonly deleteTasksByContext: (contextId: string) => Promise<A2AResult<number>>;
/**
* Clean up expired tasks
*/
readonly cleanupExpiredTasks: () => Promise<A2AResult<number>>;
/**
* Get task statistics
*/
readonly getTaskStats: (contextId?: string) => Promise<A2AResult<{
totalTasks: number;
tasksByState: Record<TaskState, number>;
oldestTask?: Date;
newestTask?: Date;
}>>;
/**
* Health check for the task provider
*/
readonly healthCheck: () => Promise<A2AResult<{
healthy: boolean;
latencyMs?: number;
error?: string;
}>>;
/**
* Close/cleanup the provider
*/
readonly close: () => Promise<A2AResult<void>>;
};
export declare const A2ATaskMemoryConfigSchema: z.ZodObject<{
type: z.ZodEnum<["memory", "redis", "postgres"]>;
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
type: "memory" | "redis" | "postgres";
keyPrefix: string;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
defaultTtl?: number | undefined;
}, {
type: "memory" | "redis" | "postgres";
keyPrefix?: string | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
}>;
export declare const A2AInMemoryTaskConfigSchema: z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"memory">;
maxTasksPerContext: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "memory";
keyPrefix: string;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
maxTasksPerContext: number;
defaultTtl?: number | undefined;
}, {
type: "memory";
keyPrefix?: string | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
maxTasksPerContext?: number | undefined;
}>;
export declare const A2ARedisTaskConfigSchema: z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"redis">;
host: z.ZodDefault<z.ZodString>;
port: z.ZodDefault<z.ZodNumber>;
password: z.ZodOptional<z.ZodString>;
db: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "redis";
host: string;
port: number;
db: number;
keyPrefix: string;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
password?: string | undefined;
defaultTtl?: number | undefined;
}, {
type: "redis";
host?: string | undefined;
port?: number | undefined;
password?: string | undefined;
db?: number | undefined;
keyPrefix?: string | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
}>;
export declare const A2APostgresTaskConfigSchema: z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"postgres">;
host: z.ZodDefault<z.ZodString>;
port: z.ZodDefault<z.ZodNumber>;
database: z.ZodDefault<z.ZodString>;
username: z.ZodDefault<z.ZodString>;
password: z.ZodOptional<z.ZodString>;
ssl: z.ZodDefault<z.ZodBoolean>;
tableName: z.ZodDefault<z.ZodString>;
maxConnections: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "postgres";
host: string;
port: number;
keyPrefix: string;
database: string;
username: string;
ssl: boolean;
tableName: string;
maxConnections: number;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
password?: string | undefined;
defaultTtl?: number | undefined;
}, {
type: "postgres";
host?: string | undefined;
port?: number | undefined;
password?: string | undefined;
keyPrefix?: string | undefined;
database?: string | undefined;
username?: string | undefined;
ssl?: boolean | undefined;
tableName?: string | undefined;
maxConnections?: number | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
}>;
export declare const A2ATaskProviderConfigSchema: z.ZodUnion<[z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"memory">;
maxTasksPerContext: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "memory";
keyPrefix: string;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
maxTasksPerContext: number;
defaultTtl?: number | undefined;
}, {
type: "memory";
keyPrefix?: string | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
maxTasksPerContext?: number | undefined;
}>, z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"redis">;
host: z.ZodDefault<z.ZodString>;
port: z.ZodDefault<z.ZodNumber>;
password: z.ZodOptional<z.ZodString>;
db: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "redis";
host: string;
port: number;
db: number;
keyPrefix: string;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
password?: string | undefined;
defaultTtl?: number | undefined;
}, {
type: "redis";
host?: string | undefined;
port?: number | undefined;
password?: string | undefined;
db?: number | undefined;
keyPrefix?: string | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
}>, z.ZodObject<{
keyPrefix: z.ZodDefault<z.ZodString>;
defaultTtl: z.ZodOptional<z.ZodNumber>;
cleanupInterval: z.ZodDefault<z.ZodNumber>;
maxTasks: z.ZodDefault<z.ZodNumber>;
enableHistory: z.ZodDefault<z.ZodBoolean>;
enableArtifacts: z.ZodDefault<z.ZodBoolean>;
} & {
type: z.ZodLiteral<"postgres">;
host: z.ZodDefault<z.ZodString>;
port: z.ZodDefault<z.ZodNumber>;
database: z.ZodDefault<z.ZodString>;
username: z.ZodDefault<z.ZodString>;
password: z.ZodOptional<z.ZodString>;
ssl: z.ZodDefault<z.ZodBoolean>;
tableName: z.ZodDefault<z.ZodString>;
maxConnections: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
type: "postgres";
host: string;
port: number;
keyPrefix: string;
database: string;
username: string;
ssl: boolean;
tableName: string;
maxConnections: number;
cleanupInterval: number;
maxTasks: number;
enableHistory: boolean;
enableArtifacts: boolean;
password?: string | undefined;
defaultTtl?: number | undefined;
}, {
type: "postgres";
host?: string | undefined;
port?: number | undefined;
password?: string | undefined;
keyPrefix?: string | undefined;
database?: string | undefined;
username?: string | undefined;
ssl?: boolean | undefined;
tableName?: string | undefined;
maxConnections?: number | undefined;
defaultTtl?: number | undefined;
cleanupInterval?: number | undefined;
maxTasks?: number | undefined;
enableHistory?: boolean | undefined;
enableArtifacts?: boolean | undefined;
}>]>;
export type A2ATaskMemoryConfig = z.infer<typeof A2ATaskMemoryConfigSchema>;
export type A2AInMemoryTaskConfig = z.infer<typeof A2AInMemoryTaskConfigSchema>;
export type A2ARedisTaskConfig = z.infer<typeof A2ARedisTaskConfigSchema>;
export type A2APostgresTaskConfig = z.infer<typeof A2APostgresTaskConfigSchema>;
export type A2ATaskProviderConfig = z.infer<typeof A2ATaskProviderConfigSchema>;
export type A2ATaskError = {
readonly _tag: 'A2ATaskError';
readonly message: string;
readonly code: string;
readonly provider: string;
readonly taskId?: string;
readonly cause?: Error;
};
export type A2ATaskNotFoundError = {
readonly _tag: 'A2ATaskNotFoundError';
readonly message: string;
readonly taskId: string;
readonly provider: string;
};
export type A2ATaskStorageError = {
readonly _tag: 'A2ATaskStorageError';
readonly message: string;
readonly operation: string;
readonly provider: string;
readonly taskId?: string;
readonly cause?: Error;
};
export type A2ATaskErrorUnion = A2ATaskError | A2ATaskNotFoundError | A2ATaskStorageError;
export type A2AResult<T> = {
success: true;
data: T;
} | {
success: false;
error: A2ATaskErrorUnion;
};
export declare const createA2ATaskError: (message: string, code: string, provider: string, taskId?: string, cause?: Error) => A2ATaskError;
export declare const createA2ATaskNotFoundError: (taskId: string, provider: string) => A2ATaskNotFoundError;
export declare const createA2ATaskStorageError: (operation: string, provider: string, taskId?: string, cause?: Error) => A2ATaskStorageError;
export declare const isA2ATaskError: (error: any) => error is A2ATaskErrorUnion;
export declare const isA2ATaskNotFoundError: (error: any) => error is A2ATaskNotFoundError;
export declare const isA2ATaskStorageError: (error: any) => error is A2ATaskStorageError;
export declare const createA2ASuccess: <T>(data: T) => A2AResult<T>;
export declare const createA2AFailure: (error: A2ATaskErrorUnion) => A2AResult<never>;
export declare const createSuccess: <T>(data: T) => A2AResult<T>;
export declare const createFailure: (error: A2ATaskErrorUnion) => A2AResult<never>;
//# sourceMappingURL=types.d.ts.map