@xynehq/jaf 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +596 -0
- package/dist/a2a/agent-card.d.ts +28 -0
- package/dist/a2a/agent-card.d.ts.map +1 -0
- package/dist/a2a/agent-card.js +250 -0
- package/dist/a2a/agent-card.js.map +1 -0
- package/dist/a2a/agent.d.ts +38 -0
- package/dist/a2a/agent.d.ts.map +1 -0
- package/dist/a2a/agent.js +223 -0
- package/dist/a2a/agent.js.map +1 -0
- package/dist/a2a/client.d.ts +35 -0
- package/dist/a2a/client.d.ts.map +1 -0
- package/dist/a2a/client.js +337 -0
- package/dist/a2a/client.js.map +1 -0
- package/dist/a2a/examples/client-example.d.ts +104 -0
- package/dist/a2a/examples/client-example.d.ts.map +1 -0
- package/dist/a2a/examples/client-example.js +232 -0
- package/dist/a2a/examples/client-example.js.map +1 -0
- package/dist/a2a/examples/server-example.d.ts +9 -0
- package/dist/a2a/examples/server-example.d.ts.map +1 -0
- package/dist/a2a/examples/server-example.js +209 -0
- package/dist/a2a/examples/server-example.js.map +1 -0
- package/dist/a2a/examples/weather-agent.d.ts +8 -0
- package/dist/a2a/examples/weather-agent.d.ts.map +1 -0
- package/dist/a2a/examples/weather-agent.js +232 -0
- package/dist/a2a/examples/weather-agent.js.map +1 -0
- package/dist/a2a/executor.d.ts +43 -0
- package/dist/a2a/executor.d.ts.map +1 -0
- package/dist/a2a/executor.js +507 -0
- package/dist/a2a/executor.js.map +1 -0
- package/dist/a2a/index.d.ts +378 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +72 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/a2a/memory/cleanup.d.ts +58 -0
- package/dist/a2a/memory/cleanup.d.ts.map +1 -0
- package/dist/a2a/memory/cleanup.js +281 -0
- package/dist/a2a/memory/cleanup.js.map +1 -0
- package/dist/a2a/memory/factory.d.ts +38 -0
- package/dist/a2a/memory/factory.d.ts.map +1 -0
- package/dist/a2a/memory/factory.js +369 -0
- package/dist/a2a/memory/factory.js.map +1 -0
- package/dist/a2a/memory/index.d.ts +13 -0
- package/dist/a2a/memory/index.d.ts.map +1 -0
- package/dist/a2a/memory/index.js +16 -0
- package/dist/a2a/memory/index.js.map +1 -0
- package/dist/a2a/memory/providers/in-memory.d.ts +10 -0
- package/dist/a2a/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/a2a/memory/providers/in-memory.js +539 -0
- package/dist/a2a/memory/providers/in-memory.js.map +1 -0
- package/dist/a2a/memory/providers/postgres.d.ts +10 -0
- package/dist/a2a/memory/providers/postgres.d.ts.map +1 -0
- package/dist/a2a/memory/providers/postgres.js +404 -0
- package/dist/a2a/memory/providers/postgres.js.map +1 -0
- package/dist/a2a/memory/providers/redis.d.ts +10 -0
- package/dist/a2a/memory/providers/redis.d.ts.map +1 -0
- package/dist/a2a/memory/providers/redis.js +435 -0
- package/dist/a2a/memory/providers/redis.js.map +1 -0
- package/dist/a2a/memory/serialization.d.ts +53 -0
- package/dist/a2a/memory/serialization.d.ts.map +1 -0
- package/dist/a2a/memory/serialization.js +233 -0
- package/dist/a2a/memory/serialization.js.map +1 -0
- package/dist/a2a/memory/types.d.ts +395 -0
- package/dist/a2a/memory/types.d.ts.map +1 -0
- package/dist/a2a/memory/types.js +85 -0
- package/dist/a2a/memory/types.js.map +1 -0
- package/dist/a2a/protocol.d.ts +38 -0
- package/dist/a2a/protocol.d.ts.map +1 -0
- package/dist/a2a/protocol.js +211 -0
- package/dist/a2a/protocol.js.map +1 -0
- package/dist/a2a/server.d.ts +343 -0
- package/dist/a2a/server.d.ts.map +1 -0
- package/dist/a2a/server.js +362 -0
- package/dist/a2a/server.js.map +1 -0
- package/dist/a2a/types.d.ts +730 -0
- package/dist/a2a/types.d.ts.map +1 -0
- package/dist/a2a/types.js +73 -0
- package/dist/a2a/types.js.map +1 -0
- package/dist/adk/agents/index.d.ts +48 -0
- package/dist/adk/agents/index.d.ts.map +1 -0
- package/dist/adk/agents/index.js +277 -0
- package/dist/adk/agents/index.js.map +1 -0
- package/dist/adk/artifacts/index.d.ts +62 -0
- package/dist/adk/artifacts/index.d.ts.map +1 -0
- package/dist/adk/artifacts/index.js +394 -0
- package/dist/adk/artifacts/index.js.map +1 -0
- package/dist/adk/config/llm-config.d.ts +75 -0
- package/dist/adk/config/llm-config.d.ts.map +1 -0
- package/dist/adk/config/llm-config.js +422 -0
- package/dist/adk/config/llm-config.js.map +1 -0
- package/dist/adk/content/index.d.ts +58 -0
- package/dist/adk/content/index.d.ts.map +1 -0
- package/dist/adk/content/index.js +220 -0
- package/dist/adk/content/index.js.map +1 -0
- package/dist/adk/examples/advanced-features.d.ts +22 -0
- package/dist/adk/examples/advanced-features.d.ts.map +1 -0
- package/dist/adk/examples/advanced-features.js +380 -0
- package/dist/adk/examples/advanced-features.js.map +1 -0
- package/dist/adk/examples/basic-agent.d.ts +28 -0
- package/dist/adk/examples/basic-agent.d.ts.map +1 -0
- package/dist/adk/examples/basic-agent.js +207 -0
- package/dist/adk/examples/basic-agent.js.map +1 -0
- package/dist/adk/examples/multi-agent.d.ts +24 -0
- package/dist/adk/examples/multi-agent.d.ts.map +1 -0
- package/dist/adk/examples/multi-agent.js +321 -0
- package/dist/adk/examples/multi-agent.js.map +1 -0
- package/dist/adk/examples/streaming-example.d.ts +9 -0
- package/dist/adk/examples/streaming-example.d.ts.map +1 -0
- package/dist/adk/examples/streaming-example.js +193 -0
- package/dist/adk/examples/streaming-example.js.map +1 -0
- package/dist/adk/index.d.ts +65 -0
- package/dist/adk/index.d.ts.map +1 -0
- package/dist/adk/index.js +251 -0
- package/dist/adk/index.js.map +1 -0
- package/dist/adk/models.d.ts +338 -0
- package/dist/adk/models.d.ts.map +1 -0
- package/dist/adk/models.js +466 -0
- package/dist/adk/models.js.map +1 -0
- package/dist/adk/providers/error-handler.d.ts +100 -0
- package/dist/adk/providers/error-handler.d.ts.map +1 -0
- package/dist/adk/providers/error-handler.js +289 -0
- package/dist/adk/providers/error-handler.js.map +1 -0
- package/dist/adk/providers/llm-service.d.ts +41 -0
- package/dist/adk/providers/llm-service.d.ts.map +1 -0
- package/dist/adk/providers/llm-service.js +520 -0
- package/dist/adk/providers/llm-service.js.map +1 -0
- package/dist/adk/providers/type-converters.d.ts +34 -0
- package/dist/adk/providers/type-converters.d.ts.map +1 -0
- package/dist/adk/providers/type-converters.js +436 -0
- package/dist/adk/providers/type-converters.js.map +1 -0
- package/dist/adk/runners/index.d.ts +33 -0
- package/dist/adk/runners/index.d.ts.map +1 -0
- package/dist/adk/runners/index.js +466 -0
- package/dist/adk/runners/index.js.map +1 -0
- package/dist/adk/schemas/index.d.ts +85 -0
- package/dist/adk/schemas/index.d.ts.map +1 -0
- package/dist/adk/schemas/index.js +363 -0
- package/dist/adk/schemas/index.js.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts +10 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.js +145 -0
- package/dist/adk/sessions/examples/session-provider-usage.js.map +1 -0
- package/dist/adk/sessions/index.d.ts +53 -0
- package/dist/adk/sessions/index.d.ts.map +1 -0
- package/dist/adk/sessions/index.js +451 -0
- package/dist/adk/sessions/index.js.map +1 -0
- package/dist/adk/sessions/postgres-provider.d.ts +22 -0
- package/dist/adk/sessions/postgres-provider.d.ts.map +1 -0
- package/dist/adk/sessions/postgres-provider.js +293 -0
- package/dist/adk/sessions/postgres-provider.js.map +1 -0
- package/dist/adk/sessions/redis-provider.d.ts +19 -0
- package/dist/adk/sessions/redis-provider.d.ts.map +1 -0
- package/dist/adk/sessions/redis-provider.js +237 -0
- package/dist/adk/sessions/redis-provider.js.map +1 -0
- package/dist/adk/streaming/index.d.ts +76 -0
- package/dist/adk/streaming/index.d.ts.map +1 -0
- package/dist/adk/streaming/index.js +419 -0
- package/dist/adk/streaming/index.js.map +1 -0
- package/dist/adk/tools/index.d.ts +27 -0
- package/dist/adk/tools/index.d.ts.map +1 -0
- package/dist/adk/tools/index.js +506 -0
- package/dist/adk/tools/index.js.map +1 -0
- package/dist/adk/types.d.ts +351 -0
- package/dist/adk/types.d.ts.map +1 -0
- package/dist/adk/types.js +107 -0
- package/dist/adk/types.js.map +1 -0
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +438 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/tool-results.d.ts +57 -0
- package/dist/core/tool-results.d.ts.map +1 -0
- package/dist/core/tool-results.js +133 -0
- package/dist/core/tool-results.js.map +1 -0
- package/dist/core/tracing.d.ts +32 -0
- package/dist/core/tracing.d.ts.map +1 -0
- package/dist/core/tracing.js +132 -0
- package/dist/core/tracing.js.map +1 -0
- package/dist/core/types.d.ts +165 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/demo/agents.d.ts +23 -0
- package/dist/demo/agents.d.ts.map +1 -0
- package/dist/demo/agents.js +69 -0
- package/dist/demo/agents.js.map +1 -0
- package/dist/demo/index.d.ts +2 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +250 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/mock-provider.d.ts +22 -0
- package/dist/demo/mock-provider.d.ts.map +1 -0
- package/dist/demo/mock-provider.js +138 -0
- package/dist/demo/mock-provider.js.map +1 -0
- package/dist/demo/tools.d.ts +14 -0
- package/dist/demo/tools.d.ts.map +1 -0
- package/dist/demo/tools.js +115 -0
- package/dist/demo/tools.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/factory.d.ts +22 -0
- package/dist/memory/factory.d.ts.map +1 -0
- package/dist/memory/factory.js +88 -0
- package/dist/memory/factory.js.map +1 -0
- package/dist/memory/providers/in-memory.d.ts +7 -0
- package/dist/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/memory/providers/in-memory.js +287 -0
- package/dist/memory/providers/in-memory.js.map +1 -0
- package/dist/memory/providers/postgres.d.ts +15 -0
- package/dist/memory/providers/postgres.d.ts.map +1 -0
- package/dist/memory/providers/postgres.js +495 -0
- package/dist/memory/providers/postgres.js.map +1 -0
- package/dist/memory/providers/redis.d.ts +18 -0
- package/dist/memory/providers/redis.d.ts.map +1 -0
- package/dist/memory/providers/redis.js +354 -0
- package/dist/memory/providers/redis.js.map +1 -0
- package/dist/memory/types.d.ts +296 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +93 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/policies/handoff.d.ts +16 -0
- package/dist/policies/handoff.d.ts.map +1 -0
- package/dist/policies/handoff.js +20 -0
- package/dist/policies/handoff.js.map +1 -0
- package/dist/policies/validation.d.ts +14 -0
- package/dist/policies/validation.d.ts.map +1 -0
- package/dist/policies/validation.js +92 -0
- package/dist/policies/validation.js.map +1 -0
- package/dist/providers/mcp.d.ts +17 -0
- package/dist/providers/mcp.d.ts.map +1 -0
- package/dist/providers/mcp.js +111 -0
- package/dist/providers/mcp.js.map +1 -0
- package/dist/providers/model.d.ts +3 -0
- package/dist/providers/model.d.ts.map +1 -0
- package/dist/providers/model.js +113 -0
- package/dist/providers/model.js.map +1 -0
- package/dist/server/index.d.ts +35 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +66 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/server.d.ts +12 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +394 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +456 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +75 -0
- package/dist/server/types.js.map +1 -0
- package/dist/test-utils/db-setup.d.ts +34 -0
- package/dist/test-utils/db-setup.d.ts.map +1 -0
- package/dist/test-utils/db-setup.js +149 -0
- package/dist/test-utils/db-setup.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +199 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-math.d.ts +31 -0
- package/dist/utils/safe-math.d.ts.map +1 -0
- package/dist/utils/safe-math.js +86 -0
- package/dist/utils/safe-math.js.map +1 -0
- package/dist/visualization/example.d.ts +9 -0
- package/dist/visualization/example.d.ts.map +1 -0
- package/dist/visualization/example.js +236 -0
- package/dist/visualization/example.js.map +1 -0
- package/dist/visualization/graphviz.d.ts +42 -0
- package/dist/visualization/graphviz.d.ts.map +1 -0
- package/dist/visualization/graphviz.js +403 -0
- package/dist/visualization/graphviz.js.map +1 -0
- package/dist/visualization/index.d.ts +10 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +12 -0
- package/dist/visualization/index.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Redis Task Provider for JAF
|
|
3
|
+
* Pure functional Redis-based storage for A2A tasks
|
|
4
|
+
*/
|
|
5
|
+
import { createA2ATaskNotFoundError, createA2ATaskStorageError, createSuccess, createFailure } from '../types.js';
|
|
6
|
+
import { serializeA2ATask, deserializeA2ATask, sanitizeTask } from '../serialization.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create a Redis-based A2A task provider
|
|
9
|
+
*/
|
|
10
|
+
export const createA2ARedisTaskProvider = async (config, redisClient) => {
|
|
11
|
+
const keyPrefix = config.keyPrefix || 'jaf:a2a:tasks:';
|
|
12
|
+
// Pure functions for key generation
|
|
13
|
+
const getTaskKey = (taskId) => `${keyPrefix}task:${taskId}`;
|
|
14
|
+
const getContextIndexKey = (contextId) => `${keyPrefix}context:${contextId}`;
|
|
15
|
+
const getStateIndexKey = (state) => `${keyPrefix}state:${state}`;
|
|
16
|
+
const getStatsKey = () => `${keyPrefix}stats`;
|
|
17
|
+
const getMetaKey = (taskId) => `${keyPrefix}meta:${taskId}`;
|
|
18
|
+
// Pure function to convert Redis hash to serialized task
|
|
19
|
+
const hashToSerializedTask = (hash) => ({
|
|
20
|
+
taskId: hash.taskId,
|
|
21
|
+
contextId: hash.contextId,
|
|
22
|
+
state: hash.state,
|
|
23
|
+
taskData: hash.taskData,
|
|
24
|
+
statusMessage: hash.statusMessage,
|
|
25
|
+
createdAt: hash.createdAt,
|
|
26
|
+
updatedAt: hash.updatedAt,
|
|
27
|
+
metadata: hash.metadata
|
|
28
|
+
});
|
|
29
|
+
// Pure function to convert serialized task to Redis hash
|
|
30
|
+
const serializedTaskToHash = (serialized) => {
|
|
31
|
+
const hash = {
|
|
32
|
+
taskId: serialized.taskId,
|
|
33
|
+
contextId: serialized.contextId,
|
|
34
|
+
state: serialized.state,
|
|
35
|
+
taskData: serialized.taskData,
|
|
36
|
+
createdAt: serialized.createdAt,
|
|
37
|
+
updatedAt: serialized.updatedAt
|
|
38
|
+
};
|
|
39
|
+
if (serialized.statusMessage)
|
|
40
|
+
hash.statusMessage = serialized.statusMessage;
|
|
41
|
+
if (serialized.metadata)
|
|
42
|
+
hash.metadata = serialized.metadata;
|
|
43
|
+
return hash;
|
|
44
|
+
};
|
|
45
|
+
// Forward declare provider for recursive calls
|
|
46
|
+
const provider = {};
|
|
47
|
+
const providerImpl = {
|
|
48
|
+
storeTask: async (task, metadata) => {
|
|
49
|
+
try {
|
|
50
|
+
// Validate and sanitize task
|
|
51
|
+
const sanitizeResult = sanitizeTask(task);
|
|
52
|
+
if (!sanitizeResult.success) {
|
|
53
|
+
return sanitizeResult;
|
|
54
|
+
}
|
|
55
|
+
// Serialize task
|
|
56
|
+
const serializeResult = serializeA2ATask(sanitizeResult.data, metadata);
|
|
57
|
+
if (!serializeResult.success) {
|
|
58
|
+
return serializeResult;
|
|
59
|
+
}
|
|
60
|
+
const serialized = serializeResult.data;
|
|
61
|
+
const taskKey = getTaskKey(task.id);
|
|
62
|
+
const contextIndexKey = getContextIndexKey(task.contextId);
|
|
63
|
+
const stateIndexKey = getStateIndexKey(task.status.state);
|
|
64
|
+
// Use Redis transaction for atomicity
|
|
65
|
+
const multi = redisClient.multi();
|
|
66
|
+
// Store task data as hash
|
|
67
|
+
const taskHash = serializedTaskToHash(serialized);
|
|
68
|
+
multi.hmset(taskKey, taskHash);
|
|
69
|
+
// Set TTL if specified
|
|
70
|
+
if (metadata?.expiresAt) {
|
|
71
|
+
const ttlSeconds = Math.floor((metadata.expiresAt.getTime() - Date.now()) / 1000);
|
|
72
|
+
if (ttlSeconds > 0) {
|
|
73
|
+
multi.expire(taskKey, ttlSeconds);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (config.defaultTtl) {
|
|
77
|
+
multi.expire(taskKey, config.defaultTtl);
|
|
78
|
+
}
|
|
79
|
+
// Add to indices
|
|
80
|
+
multi.sadd(contextIndexKey, task.id);
|
|
81
|
+
multi.sadd(stateIndexKey, task.id);
|
|
82
|
+
// Update stats
|
|
83
|
+
multi.hincrby(getStatsKey(), 'totalTasks', 1);
|
|
84
|
+
multi.hincrby(getStatsKey(), `state:${task.status.state}`, 1);
|
|
85
|
+
await multi.exec();
|
|
86
|
+
return createSuccess(undefined);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return createFailure(createA2ATaskStorageError('store', 'redis', task.id, error));
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
getTask: async (taskId) => {
|
|
93
|
+
try {
|
|
94
|
+
const taskKey = getTaskKey(taskId);
|
|
95
|
+
const exists = await redisClient.exists(taskKey);
|
|
96
|
+
if (!exists) {
|
|
97
|
+
return createSuccess(null);
|
|
98
|
+
}
|
|
99
|
+
const hash = await redisClient.hgetall(taskKey);
|
|
100
|
+
if (!hash || !hash.taskData) {
|
|
101
|
+
return createSuccess(null);
|
|
102
|
+
}
|
|
103
|
+
const serialized = hashToSerializedTask(hash);
|
|
104
|
+
const deserializeResult = deserializeA2ATask(serialized);
|
|
105
|
+
if (!deserializeResult.success) {
|
|
106
|
+
return deserializeResult;
|
|
107
|
+
}
|
|
108
|
+
return createSuccess(deserializeResult.data);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return createFailure(createA2ATaskStorageError('get', 'redis', taskId, error));
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
updateTask: async (task, metadata) => {
|
|
115
|
+
try {
|
|
116
|
+
const taskKey = getTaskKey(task.id);
|
|
117
|
+
const exists = await redisClient.exists(taskKey);
|
|
118
|
+
if (!exists) {
|
|
119
|
+
return createFailure(createA2ATaskNotFoundError(task.id, 'redis'));
|
|
120
|
+
}
|
|
121
|
+
// Get existing task to check for state changes
|
|
122
|
+
const existingHash = await redisClient.hgetall(taskKey);
|
|
123
|
+
const oldState = existingHash.state;
|
|
124
|
+
// Validate and sanitize task
|
|
125
|
+
const sanitizeResult = sanitizeTask(task);
|
|
126
|
+
if (!sanitizeResult.success) {
|
|
127
|
+
return sanitizeResult;
|
|
128
|
+
}
|
|
129
|
+
// Merge metadata
|
|
130
|
+
const existingMetadata = existingHash.metadata ? JSON.parse(existingHash.metadata) : {};
|
|
131
|
+
const mergedMetadata = { ...existingMetadata, ...metadata };
|
|
132
|
+
// Serialize updated task
|
|
133
|
+
const serializeResult = serializeA2ATask(sanitizeResult.data, mergedMetadata);
|
|
134
|
+
if (!serializeResult.success) {
|
|
135
|
+
return serializeResult;
|
|
136
|
+
}
|
|
137
|
+
const serialized = serializeResult.data;
|
|
138
|
+
const multi = redisClient.multi();
|
|
139
|
+
// Update task data
|
|
140
|
+
const taskHash = serializedTaskToHash(serialized);
|
|
141
|
+
multi.hmset(taskKey, taskHash);
|
|
142
|
+
// Update indices if state changed
|
|
143
|
+
if (oldState !== task.status.state) {
|
|
144
|
+
const oldStateIndexKey = getStateIndexKey(oldState);
|
|
145
|
+
const newStateIndexKey = getStateIndexKey(task.status.state);
|
|
146
|
+
multi.srem(oldStateIndexKey, task.id);
|
|
147
|
+
multi.sadd(newStateIndexKey, task.id);
|
|
148
|
+
// Update stats
|
|
149
|
+
multi.hincrby(getStatsKey(), `state:${oldState}`, -1);
|
|
150
|
+
multi.hincrby(getStatsKey(), `state:${task.status.state}`, 1);
|
|
151
|
+
}
|
|
152
|
+
await multi.exec();
|
|
153
|
+
return createSuccess(undefined);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
return createFailure(createA2ATaskStorageError('update', 'redis', task.id, error));
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
updateTaskStatus: async (taskId, newState, statusMessage, timestamp) => {
|
|
160
|
+
try {
|
|
161
|
+
const taskKey = getTaskKey(taskId);
|
|
162
|
+
const exists = await redisClient.exists(taskKey);
|
|
163
|
+
if (!exists) {
|
|
164
|
+
return createFailure(createA2ATaskNotFoundError(taskId, 'redis'));
|
|
165
|
+
}
|
|
166
|
+
// Get existing task
|
|
167
|
+
const hash = await redisClient.hgetall(taskKey);
|
|
168
|
+
const serialized = hashToSerializedTask(hash);
|
|
169
|
+
const deserializeResult = deserializeA2ATask(serialized);
|
|
170
|
+
if (!deserializeResult.success) {
|
|
171
|
+
return deserializeResult;
|
|
172
|
+
}
|
|
173
|
+
const task = deserializeResult.data;
|
|
174
|
+
// Update task status
|
|
175
|
+
const updatedTask = {
|
|
176
|
+
...task,
|
|
177
|
+
status: {
|
|
178
|
+
...task.status,
|
|
179
|
+
state: newState,
|
|
180
|
+
message: statusMessage || task.status.message,
|
|
181
|
+
timestamp: timestamp || new Date().toISOString()
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
return providerImpl.updateTask(updatedTask);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return createFailure(createA2ATaskStorageError('update-status', 'redis', taskId, error));
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
findTasks: async (query) => {
|
|
191
|
+
try {
|
|
192
|
+
let taskIds = [];
|
|
193
|
+
if (query.contextId) {
|
|
194
|
+
// Get tasks by context
|
|
195
|
+
const contextIndexKey = getContextIndexKey(query.contextId);
|
|
196
|
+
taskIds = await redisClient.smembers(contextIndexKey);
|
|
197
|
+
}
|
|
198
|
+
else if (query.state) {
|
|
199
|
+
// Get tasks by state
|
|
200
|
+
const stateIndexKey = getStateIndexKey(query.state);
|
|
201
|
+
taskIds = await redisClient.smembers(stateIndexKey);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// Get all task keys and extract IDs
|
|
205
|
+
const pattern = `${keyPrefix}task:*`;
|
|
206
|
+
const keys = await redisClient.keys(pattern);
|
|
207
|
+
taskIds = keys.map((key) => key.replace(`${keyPrefix}task:`, ''));
|
|
208
|
+
}
|
|
209
|
+
// Filter by specific task ID if provided
|
|
210
|
+
if (query.taskId) {
|
|
211
|
+
taskIds = taskIds.filter(id => id === query.taskId);
|
|
212
|
+
}
|
|
213
|
+
// Fetch tasks and apply additional filters
|
|
214
|
+
const results = [];
|
|
215
|
+
for (const taskId of taskIds) {
|
|
216
|
+
const taskKey = getTaskKey(taskId);
|
|
217
|
+
const exists = await redisClient.exists(taskKey);
|
|
218
|
+
if (!exists)
|
|
219
|
+
continue;
|
|
220
|
+
const hash = await redisClient.hgetall(taskKey);
|
|
221
|
+
if (!hash || !hash.taskData)
|
|
222
|
+
continue;
|
|
223
|
+
// Apply date filters
|
|
224
|
+
if (query.since) {
|
|
225
|
+
const createdAt = new Date(hash.createdAt);
|
|
226
|
+
if (createdAt < query.since)
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (query.until) {
|
|
230
|
+
const createdAt = new Date(hash.createdAt);
|
|
231
|
+
if (createdAt > query.until)
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const serialized = hashToSerializedTask(hash);
|
|
235
|
+
const deserializeResult = deserializeA2ATask(serialized);
|
|
236
|
+
if (deserializeResult.success) {
|
|
237
|
+
results.push(deserializeResult.data);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Sort by timestamp (newest first)
|
|
241
|
+
results.sort((a, b) => {
|
|
242
|
+
const timeA = new Date(a.status.timestamp || '').getTime();
|
|
243
|
+
const timeB = new Date(b.status.timestamp || '').getTime();
|
|
244
|
+
return timeB - timeA;
|
|
245
|
+
});
|
|
246
|
+
// Apply pagination
|
|
247
|
+
const offset = query.offset || 0;
|
|
248
|
+
const limit = query.limit || results.length;
|
|
249
|
+
const paginatedResults = results.slice(offset, offset + limit);
|
|
250
|
+
return createSuccess(paginatedResults);
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
return createFailure(createA2ATaskStorageError('find', 'redis', undefined, error));
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
getTasksByContext: async (contextId, limit) => {
|
|
257
|
+
return providerImpl.findTasks({ contextId, limit });
|
|
258
|
+
},
|
|
259
|
+
deleteTask: async (taskId) => {
|
|
260
|
+
try {
|
|
261
|
+
const taskKey = getTaskKey(taskId);
|
|
262
|
+
const exists = await redisClient.exists(taskKey);
|
|
263
|
+
if (!exists) {
|
|
264
|
+
return createSuccess(false);
|
|
265
|
+
}
|
|
266
|
+
// Get task data for index cleanup
|
|
267
|
+
const hash = await redisClient.hgetall(taskKey);
|
|
268
|
+
const contextId = hash.contextId;
|
|
269
|
+
const state = hash.state;
|
|
270
|
+
const multi = redisClient.multi();
|
|
271
|
+
// Delete task
|
|
272
|
+
multi.del(taskKey);
|
|
273
|
+
// Remove from indices
|
|
274
|
+
if (contextId) {
|
|
275
|
+
const contextIndexKey = getContextIndexKey(contextId);
|
|
276
|
+
multi.srem(contextIndexKey, taskId);
|
|
277
|
+
}
|
|
278
|
+
if (state) {
|
|
279
|
+
const stateIndexKey = getStateIndexKey(state);
|
|
280
|
+
multi.srem(stateIndexKey, taskId);
|
|
281
|
+
}
|
|
282
|
+
// Update stats
|
|
283
|
+
multi.hincrby(getStatsKey(), 'totalTasks', -1);
|
|
284
|
+
if (state) {
|
|
285
|
+
multi.hincrby(getStatsKey(), `state:${state}`, -1);
|
|
286
|
+
}
|
|
287
|
+
await multi.exec();
|
|
288
|
+
return createSuccess(true);
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
return createFailure(createA2ATaskStorageError('delete', 'redis', taskId, error));
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
deleteTasksByContext: async (contextId) => {
|
|
295
|
+
try {
|
|
296
|
+
const contextIndexKey = getContextIndexKey(contextId);
|
|
297
|
+
const taskIds = await redisClient.smembers(contextIndexKey);
|
|
298
|
+
if (taskIds.length === 0) {
|
|
299
|
+
return createSuccess(0);
|
|
300
|
+
}
|
|
301
|
+
let deletedCount = 0;
|
|
302
|
+
for (const taskId of taskIds) {
|
|
303
|
+
const deleteResult = await providerImpl.deleteTask(taskId);
|
|
304
|
+
if (deleteResult.success && deleteResult.data) {
|
|
305
|
+
deletedCount++;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return createSuccess(deletedCount);
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
return createFailure(createA2ATaskStorageError('delete-by-context', 'redis', undefined, error));
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
cleanupExpiredTasks: async () => {
|
|
315
|
+
try {
|
|
316
|
+
// Redis automatically handles TTL expiration, but we can clean up orphaned indices
|
|
317
|
+
const pattern = `${keyPrefix}task:*`;
|
|
318
|
+
const taskKeys = await redisClient.keys(pattern);
|
|
319
|
+
let cleanedCount = 0;
|
|
320
|
+
for (const taskKey of taskKeys) {
|
|
321
|
+
const exists = await redisClient.exists(taskKey);
|
|
322
|
+
if (!exists) {
|
|
323
|
+
// This shouldn't happen with Redis TTL, but clean up if needed
|
|
324
|
+
const taskId = taskKey.replace(`${keyPrefix}task:`, '');
|
|
325
|
+
const deleteResult = await providerImpl.deleteTask(taskId);
|
|
326
|
+
if (deleteResult.success && deleteResult.data) {
|
|
327
|
+
cleanedCount++;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return createSuccess(cleanedCount);
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
return createFailure(createA2ATaskStorageError('cleanup', 'redis', undefined, error));
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
getTaskStats: async (contextId) => {
|
|
338
|
+
try {
|
|
339
|
+
const tasksByState = {
|
|
340
|
+
submitted: 0,
|
|
341
|
+
working: 0,
|
|
342
|
+
'input-required': 0,
|
|
343
|
+
completed: 0,
|
|
344
|
+
canceled: 0,
|
|
345
|
+
failed: 0,
|
|
346
|
+
rejected: 0,
|
|
347
|
+
'auth-required': 0,
|
|
348
|
+
unknown: 0
|
|
349
|
+
};
|
|
350
|
+
let totalTasks = 0;
|
|
351
|
+
let oldestTask;
|
|
352
|
+
let newestTask;
|
|
353
|
+
if (contextId) {
|
|
354
|
+
// Get tasks for specific context
|
|
355
|
+
const contextIndexKey = getContextIndexKey(contextId);
|
|
356
|
+
const taskIds = await redisClient.smembers(contextIndexKey);
|
|
357
|
+
for (const taskId of taskIds) {
|
|
358
|
+
const taskKey = getTaskKey(taskId);
|
|
359
|
+
const exists = await redisClient.exists(taskKey);
|
|
360
|
+
if (!exists)
|
|
361
|
+
continue;
|
|
362
|
+
const hash = await redisClient.hgetall(taskKey);
|
|
363
|
+
if (!hash)
|
|
364
|
+
continue;
|
|
365
|
+
totalTasks++;
|
|
366
|
+
const state = hash.state;
|
|
367
|
+
if (state) {
|
|
368
|
+
tasksByState[state]++;
|
|
369
|
+
}
|
|
370
|
+
const createdAt = new Date(hash.createdAt);
|
|
371
|
+
if (!oldestTask || createdAt < oldestTask) {
|
|
372
|
+
oldestTask = createdAt;
|
|
373
|
+
}
|
|
374
|
+
if (!newestTask || createdAt > newestTask) {
|
|
375
|
+
newestTask = createdAt;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// Get global stats from Redis hash
|
|
381
|
+
const statsKey = getStatsKey();
|
|
382
|
+
const stats = await redisClient.hgetall(statsKey);
|
|
383
|
+
totalTasks = parseInt(stats.totalTasks || '0');
|
|
384
|
+
// Get state counts
|
|
385
|
+
for (const state of Object.keys(tasksByState)) {
|
|
386
|
+
tasksByState[state] = parseInt(stats[`state:${state}`] || '0');
|
|
387
|
+
}
|
|
388
|
+
// For global stats, we'd need to scan all tasks to get date ranges
|
|
389
|
+
// This is expensive, so we'll leave them undefined for now
|
|
390
|
+
}
|
|
391
|
+
return createSuccess({
|
|
392
|
+
totalTasks,
|
|
393
|
+
tasksByState,
|
|
394
|
+
oldestTask,
|
|
395
|
+
newestTask
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
return createFailure(createA2ATaskStorageError('stats', 'redis', undefined, error));
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
healthCheck: async () => {
|
|
403
|
+
try {
|
|
404
|
+
const startTime = Date.now();
|
|
405
|
+
// Simple ping to Redis
|
|
406
|
+
await redisClient.ping();
|
|
407
|
+
const latencyMs = Date.now() - startTime;
|
|
408
|
+
return createSuccess({
|
|
409
|
+
healthy: true,
|
|
410
|
+
latencyMs
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
return createSuccess({
|
|
415
|
+
healthy: false,
|
|
416
|
+
error: error.message
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
close: async () => {
|
|
421
|
+
try {
|
|
422
|
+
// Redis client cleanup is typically handled externally
|
|
423
|
+
// We don't close the client here as it might be shared
|
|
424
|
+
return createSuccess(undefined);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
return createFailure(createA2ATaskStorageError('close', 'redis', undefined, error));
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
// Set up the provider variable
|
|
432
|
+
Object.assign(provider, providerImpl);
|
|
433
|
+
return provider;
|
|
434
|
+
};
|
|
435
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../../src/a2a/memory/providers/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Task Serialization Functions for JAF
|
|
3
|
+
* Pure functions for serializing/deserializing A2A tasks for storage
|
|
4
|
+
*/
|
|
5
|
+
import { A2ATask } from '../types.js';
|
|
6
|
+
import { A2AResult } from './types.js';
|
|
7
|
+
export interface A2ATaskSerialized {
|
|
8
|
+
readonly taskId: string;
|
|
9
|
+
readonly contextId: string;
|
|
10
|
+
readonly state: string;
|
|
11
|
+
readonly taskData: string;
|
|
12
|
+
readonly statusMessage?: string;
|
|
13
|
+
readonly createdAt: string;
|
|
14
|
+
readonly updatedAt: string;
|
|
15
|
+
readonly metadata?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pure function to serialize an A2A task for storage
|
|
19
|
+
*/
|
|
20
|
+
export declare const serializeA2ATask: (task: A2ATask, metadata?: Record<string, any>) => A2AResult<A2ATaskSerialized>;
|
|
21
|
+
/**
|
|
22
|
+
* Pure function to deserialize an A2A task from storage
|
|
23
|
+
*/
|
|
24
|
+
export declare const deserializeA2ATask: (stored: A2ATaskSerialized) => A2AResult<A2ATask>;
|
|
25
|
+
/**
|
|
26
|
+
* Pure function to create a minimal task representation for indexing
|
|
27
|
+
*/
|
|
28
|
+
export declare const createTaskIndex: (task: A2ATask) => A2AResult<{
|
|
29
|
+
readonly taskId: string;
|
|
30
|
+
readonly contextId: string;
|
|
31
|
+
readonly state: string;
|
|
32
|
+
readonly timestamp: string;
|
|
33
|
+
readonly hasHistory: boolean;
|
|
34
|
+
readonly hasArtifacts: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Pure function to extract searchable text from a task for full-text search
|
|
38
|
+
*/
|
|
39
|
+
export declare const extractTaskSearchText: (task: A2ATask) => A2AResult<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Pure function to validate task data integrity
|
|
42
|
+
*/
|
|
43
|
+
export declare const validateTaskIntegrity: (task: A2ATask) => A2AResult<true>;
|
|
44
|
+
/**
|
|
45
|
+
* Pure function to create a deep copy of a task (for immutability)
|
|
46
|
+
*/
|
|
47
|
+
export declare const cloneTask: (task: A2ATask) => A2AResult<A2ATask>;
|
|
48
|
+
/**
|
|
49
|
+
* Pure function to sanitize task data for storage
|
|
50
|
+
* Removes any potentially dangerous or invalid data
|
|
51
|
+
*/
|
|
52
|
+
export declare const sanitizeTask: (task: A2ATask) => A2AResult<A2ATask>;
|
|
53
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../../src/a2a/memory/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAA2B,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAA2D,MAAM,YAAY,CAAC;AAGhG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,OAAO,EACb,WAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC7B,SAAS,CAAC,iBAAiB,CA+B7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,iBAAiB,KACxB,SAAS,CAAC,OAAO,CAkBnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,KAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,CAeA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,OAAO,KAAG,SAAS,CAAC,MAAM,CAoCrE,CAAC;AAsBF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,OAAO,KAAG,SAAS,CAAC,IAAI,CA2EnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,KAAG,SAAS,CAAC,OAAO,CAU1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,KAAG,SAAS,CAAC,OAAO,CA4C7D,CAAC"}
|