paygate-mcp 10.6.0 → 10.8.0

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.
@@ -0,0 +1,245 @@
1
+ /**
2
+ * A2A Protocol Support — Agent-to-Agent communication alongside MCP.
3
+ *
4
+ * Implements core A2A (Agent-to-Agent) protocol primitives for inter-agent
5
+ * communication, task delegation, and capability discovery. Supports:
6
+ *
7
+ * - Agent Cards (/.well-known/agent.json): Advertise agent capabilities
8
+ * - Task lifecycle: create → working → completed/failed/canceled
9
+ * - Message exchange with typed parts (text, file, data)
10
+ * - Agent skill discovery and matching
11
+ * - Billing hooks for task-based pricing
12
+ *
13
+ * A2A protocol specification: https://google.github.io/A2A/
14
+ *
15
+ * Zero external dependencies.
16
+ */
17
+ /** Agent capability advertised via Agent Card. */
18
+ export interface AgentSkill {
19
+ /** Unique skill ID. */
20
+ id: string;
21
+ /** Human-readable skill name. */
22
+ name: string;
23
+ /** Description of what this skill does. */
24
+ description?: string;
25
+ /** Tags for discoverability. */
26
+ tags?: string[];
27
+ /** Example prompts that invoke this skill. */
28
+ examples?: string[];
29
+ /** MIME types this skill accepts as input. */
30
+ inputModes?: string[];
31
+ /** MIME types this skill can produce as output. */
32
+ outputModes?: string[];
33
+ }
34
+ /** Agent Card served at /.well-known/agent.json. */
35
+ export interface AgentCard {
36
+ /** Agent name. */
37
+ name: string;
38
+ /** Agent description. */
39
+ description?: string;
40
+ /** Agent provider info. */
41
+ provider?: {
42
+ organization: string;
43
+ url?: string;
44
+ };
45
+ /** Agent version. */
46
+ version: string;
47
+ /** URL where A2A protocol requests are accepted. */
48
+ url: string;
49
+ /** Skills this agent provides. */
50
+ skills: AgentSkill[];
51
+ /** Supported A2A capabilities. */
52
+ capabilities?: {
53
+ streaming?: boolean;
54
+ pushNotifications?: boolean;
55
+ stateTransitionHistory?: boolean;
56
+ };
57
+ /** Authentication requirements. */
58
+ authentication?: {
59
+ schemes: string[];
60
+ credentials?: string;
61
+ };
62
+ /** Default input MIME types. */
63
+ defaultInputModes?: string[];
64
+ /** Default output MIME types. */
65
+ defaultOutputModes?: string[];
66
+ }
67
+ /** Status of an A2A task. */
68
+ export type A2ATaskStatus = 'submitted' | 'working' | 'input-required' | 'completed' | 'failed' | 'canceled';
69
+ /** A part of a message (text, file, or data). */
70
+ export interface MessagePart {
71
+ type: 'text' | 'file' | 'data';
72
+ /** Text content (for type='text'). */
73
+ text?: string;
74
+ /** File reference (for type='file'). */
75
+ file?: {
76
+ name?: string;
77
+ mimeType?: string;
78
+ uri?: string;
79
+ bytes?: string;
80
+ };
81
+ /** Structured data (for type='data'). */
82
+ data?: Record<string, unknown>;
83
+ /** Metadata about this part. */
84
+ metadata?: Record<string, unknown>;
85
+ }
86
+ /** A message in the A2A conversation. */
87
+ export interface A2AMessage {
88
+ /** Unique message ID. */
89
+ messageId: string;
90
+ /** Who sent this: 'user' (requesting agent) or 'agent' (this agent). */
91
+ role: 'user' | 'agent';
92
+ /** Message parts. */
93
+ parts: MessagePart[];
94
+ /** ISO timestamp. */
95
+ timestamp: string;
96
+ /** Arbitrary metadata. */
97
+ metadata?: Record<string, unknown>;
98
+ }
99
+ /** Status update for a task. */
100
+ export interface TaskStatus {
101
+ state: A2ATaskStatus;
102
+ message?: A2AMessage;
103
+ timestamp: string;
104
+ }
105
+ /** An A2A task. */
106
+ export interface A2ATask {
107
+ /** Unique task ID. */
108
+ id: string;
109
+ /** Session ID for multi-turn conversations. */
110
+ sessionId: string;
111
+ /** Current status. */
112
+ status: TaskStatus;
113
+ /** History of status transitions. */
114
+ history: TaskStatus[];
115
+ /** Artifacts produced by the task. */
116
+ artifacts: A2AArtifact[];
117
+ /** ISO creation timestamp. */
118
+ createdAt: string;
119
+ /** ISO last update timestamp. */
120
+ updatedAt: string;
121
+ /** Metadata. */
122
+ metadata?: Record<string, unknown>;
123
+ }
124
+ /** An artifact produced by a task. */
125
+ export interface A2AArtifact {
126
+ /** Unique artifact ID. */
127
+ id: string;
128
+ /** Artifact name. */
129
+ name?: string;
130
+ /** Artifact parts. */
131
+ parts: MessagePart[];
132
+ /** Whether this artifact is the final result. */
133
+ lastChunk?: boolean;
134
+ /** Artifact index (for multi-artifact tasks). */
135
+ index?: number;
136
+ /** Metadata. */
137
+ metadata?: Record<string, unknown>;
138
+ }
139
+ /** A2A JSON-RPC methods. */
140
+ export type A2AMethod = 'tasks/send' | 'tasks/get' | 'tasks/cancel' | 'tasks/pushNotification/set' | 'tasks/pushNotification/get' | 'tasks/sendSubscribe';
141
+ /** A2A JSON-RPC request. */
142
+ export interface A2ARequest {
143
+ jsonrpc: '2.0';
144
+ id?: string | number;
145
+ method: A2AMethod;
146
+ params?: Record<string, unknown>;
147
+ }
148
+ /** A2A JSON-RPC response. */
149
+ export interface A2AResponse {
150
+ jsonrpc: '2.0';
151
+ id?: string | number;
152
+ result?: unknown;
153
+ error?: {
154
+ code: number;
155
+ message: string;
156
+ data?: unknown;
157
+ };
158
+ }
159
+ export interface A2AManagerConfig {
160
+ /** This agent's card. */
161
+ agentCard: AgentCard;
162
+ /** Max tasks to retain. Default: 10000. */
163
+ maxTasks?: number;
164
+ /** Max task age in ms. Default: 86400000 (24h). */
165
+ maxTaskAgeMs?: number;
166
+ /** Whether to record state transition history. Default: true. */
167
+ recordHistory?: boolean;
168
+ }
169
+ export interface A2AStats {
170
+ /** Total tasks created. */
171
+ totalTasks: number;
172
+ /** Tasks by status. */
173
+ byStatus: Record<string, number>;
174
+ /** Total messages exchanged. */
175
+ totalMessages: number;
176
+ /** Total artifacts produced. */
177
+ totalArtifacts: number;
178
+ /** Active (non-terminal) tasks. */
179
+ activeTasks: number;
180
+ }
181
+ export declare class A2AManager {
182
+ private agentCard;
183
+ private tasks;
184
+ private maxTasks;
185
+ private maxTaskAgeMs;
186
+ private recordHistory;
187
+ private stats;
188
+ constructor(config: A2AManagerConfig);
189
+ /** Get the agent card for /.well-known/agent.json. */
190
+ getAgentCard(): AgentCard;
191
+ /** Update agent card. */
192
+ updateAgentCard(card: Partial<AgentCard>): void;
193
+ /**
194
+ * Handle an incoming A2A JSON-RPC request.
195
+ * Routes to the appropriate handler based on method.
196
+ */
197
+ handleRequest(request: A2ARequest): A2AResponse;
198
+ /**
199
+ * Create a new task or send a message to an existing task.
200
+ */
201
+ private handleTaskSend;
202
+ /**
203
+ * Get task status.
204
+ */
205
+ private handleTaskGet;
206
+ /**
207
+ * Cancel a task.
208
+ */
209
+ private handleTaskCancel;
210
+ /**
211
+ * Transition a task to a new state (for use by task handlers).
212
+ */
213
+ transitionTask(taskOrId: A2ATask | string, newState: A2ATaskStatus, message?: A2AMessage, artifact?: A2AArtifact): A2ATask | null;
214
+ /**
215
+ * Get a task by ID.
216
+ */
217
+ getTask(taskId: string): A2ATask | null;
218
+ /**
219
+ * List tasks with optional filters.
220
+ */
221
+ listTasks(opts?: {
222
+ sessionId?: string;
223
+ status?: A2ATaskStatus;
224
+ limit?: number;
225
+ }): A2ATask[];
226
+ /**
227
+ * Find skills matching a query.
228
+ */
229
+ findSkills(query: string): AgentSkill[];
230
+ /**
231
+ * Get stats.
232
+ */
233
+ getStats(): A2AStats;
234
+ /**
235
+ * Clean up old tasks.
236
+ */
237
+ cleanup(maxAgeMs?: number): number;
238
+ /**
239
+ * Destroy and release resources.
240
+ */
241
+ destroy(): void;
242
+ private sanitizeTask;
243
+ private evictOldTasks;
244
+ }
245
+ //# sourceMappingURL=a2a-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-protocol.d.ts","sourceRoot":"","sources":["../src/a2a-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * A2A Protocol Support — Agent-to-Agent communication alongside MCP.
4
+ *
5
+ * Implements core A2A (Agent-to-Agent) protocol primitives for inter-agent
6
+ * communication, task delegation, and capability discovery. Supports:
7
+ *
8
+ * - Agent Cards (/.well-known/agent.json): Advertise agent capabilities
9
+ * - Task lifecycle: create → working → completed/failed/canceled
10
+ * - Message exchange with typed parts (text, file, data)
11
+ * - Agent skill discovery and matching
12
+ * - Billing hooks for task-based pricing
13
+ *
14
+ * A2A protocol specification: https://google.github.io/A2A/
15
+ *
16
+ * Zero external dependencies.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.A2AManager = void 0;
20
+ // ─── A2A Manager ─────────────────────────────────────────────────────────────
21
+ class A2AManager {
22
+ agentCard;
23
+ tasks = new Map();
24
+ maxTasks;
25
+ maxTaskAgeMs;
26
+ recordHistory;
27
+ stats = {
28
+ totalTasks: 0,
29
+ byStatus: {},
30
+ totalMessages: 0,
31
+ totalArtifacts: 0,
32
+ activeTasks: 0,
33
+ };
34
+ constructor(config) {
35
+ this.agentCard = config.agentCard;
36
+ this.maxTasks = config.maxTasks ?? 10_000;
37
+ this.maxTaskAgeMs = config.maxTaskAgeMs ?? 86_400_000;
38
+ this.recordHistory = config.recordHistory ?? true;
39
+ }
40
+ /** Get the agent card for /.well-known/agent.json. */
41
+ getAgentCard() {
42
+ return { ...this.agentCard };
43
+ }
44
+ /** Update agent card. */
45
+ updateAgentCard(card) {
46
+ Object.assign(this.agentCard, card);
47
+ }
48
+ /**
49
+ * Handle an incoming A2A JSON-RPC request.
50
+ * Routes to the appropriate handler based on method.
51
+ */
52
+ handleRequest(request) {
53
+ const base = { jsonrpc: '2.0', id: request.id };
54
+ switch (request.method) {
55
+ case 'tasks/send':
56
+ return { ...base, ...this.handleTaskSend(request.params ?? {}) };
57
+ case 'tasks/get':
58
+ return { ...base, ...this.handleTaskGet(request.params ?? {}) };
59
+ case 'tasks/cancel':
60
+ return { ...base, ...this.handleTaskCancel(request.params ?? {}) };
61
+ default:
62
+ return { ...base, error: { code: -32601, message: `Unknown A2A method: ${request.method}` } };
63
+ }
64
+ }
65
+ /**
66
+ * Create a new task or send a message to an existing task.
67
+ */
68
+ handleTaskSend(params) {
69
+ const taskId = params.id;
70
+ const sessionId = params.sessionId ?? `session_${Date.now()}`;
71
+ const messageParts = params.message;
72
+ if (!messageParts?.parts || messageParts.parts.length === 0) {
73
+ return { error: { code: -32602, message: 'Message with parts is required' } };
74
+ }
75
+ const message = {
76
+ messageId: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
77
+ role: messageParts.role ?? 'user',
78
+ parts: messageParts.parts,
79
+ timestamp: new Date().toISOString(),
80
+ metadata: params.metadata,
81
+ };
82
+ this.stats.totalMessages++;
83
+ // Existing task — append message
84
+ if (taskId && this.tasks.has(taskId)) {
85
+ const task = this.tasks.get(taskId);
86
+ const newStatus = {
87
+ state: 'working',
88
+ message,
89
+ timestamp: new Date().toISOString(),
90
+ };
91
+ if (this.recordHistory) {
92
+ task.history.push(task.status);
93
+ }
94
+ task.status = newStatus;
95
+ task.updatedAt = new Date().toISOString();
96
+ return { result: this.sanitizeTask(task) };
97
+ }
98
+ // New task
99
+ this.evictOldTasks();
100
+ const newTaskId = taskId ?? `task_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
101
+ const status = {
102
+ state: 'submitted',
103
+ message,
104
+ timestamp: new Date().toISOString(),
105
+ };
106
+ const task = {
107
+ id: newTaskId,
108
+ sessionId,
109
+ status,
110
+ history: [],
111
+ artifacts: [],
112
+ createdAt: new Date().toISOString(),
113
+ updatedAt: new Date().toISOString(),
114
+ metadata: params.metadata,
115
+ };
116
+ this.tasks.set(newTaskId, task);
117
+ this.stats.totalTasks++;
118
+ this.stats.activeTasks++;
119
+ this.stats.byStatus['submitted'] = (this.stats.byStatus['submitted'] ?? 0) + 1;
120
+ return { result: this.sanitizeTask(task) };
121
+ }
122
+ /**
123
+ * Get task status.
124
+ */
125
+ handleTaskGet(params) {
126
+ const taskId = params.id;
127
+ if (!taskId) {
128
+ return { error: { code: -32602, message: 'Task ID is required' } };
129
+ }
130
+ const task = this.tasks.get(taskId);
131
+ if (!task) {
132
+ return { error: { code: -32001, message: `Task not found: ${taskId}` } };
133
+ }
134
+ return { result: this.sanitizeTask(task) };
135
+ }
136
+ /**
137
+ * Cancel a task.
138
+ */
139
+ handleTaskCancel(params) {
140
+ const taskId = params.id;
141
+ if (!taskId) {
142
+ return { error: { code: -32602, message: 'Task ID is required' } };
143
+ }
144
+ const task = this.tasks.get(taskId);
145
+ if (!task) {
146
+ return { error: { code: -32001, message: `Task not found: ${taskId}` } };
147
+ }
148
+ const terminalStates = ['completed', 'failed', 'canceled'];
149
+ if (terminalStates.includes(task.status.state)) {
150
+ return { error: { code: -32002, message: `Task already in terminal state: ${task.status.state}` } };
151
+ }
152
+ this.transitionTask(task, 'canceled');
153
+ return { result: this.sanitizeTask(task) };
154
+ }
155
+ /**
156
+ * Transition a task to a new state (for use by task handlers).
157
+ */
158
+ transitionTask(taskOrId, newState, message, artifact) {
159
+ const task = typeof taskOrId === 'string' ? this.tasks.get(taskOrId) : taskOrId;
160
+ if (!task)
161
+ return null;
162
+ const oldState = task.status.state;
163
+ if (this.recordHistory) {
164
+ task.history.push(task.status);
165
+ }
166
+ const newStatus = {
167
+ state: newState,
168
+ message,
169
+ timestamp: new Date().toISOString(),
170
+ };
171
+ task.status = newStatus;
172
+ task.updatedAt = new Date().toISOString();
173
+ if (artifact) {
174
+ task.artifacts.push(artifact);
175
+ this.stats.totalArtifacts++;
176
+ }
177
+ // Update stats
178
+ this.stats.byStatus[oldState] = Math.max(0, (this.stats.byStatus[oldState] ?? 0) - 1);
179
+ this.stats.byStatus[newState] = (this.stats.byStatus[newState] ?? 0) + 1;
180
+ const terminalStates = ['completed', 'failed', 'canceled'];
181
+ if (terminalStates.includes(newState) && !terminalStates.includes(oldState)) {
182
+ this.stats.activeTasks = Math.max(0, this.stats.activeTasks - 1);
183
+ }
184
+ return task;
185
+ }
186
+ /**
187
+ * Get a task by ID.
188
+ */
189
+ getTask(taskId) {
190
+ const task = this.tasks.get(taskId);
191
+ return task ? this.sanitizeTask(task) : null;
192
+ }
193
+ /**
194
+ * List tasks with optional filters.
195
+ */
196
+ listTasks(opts) {
197
+ let tasks = [...this.tasks.values()];
198
+ if (opts?.sessionId) {
199
+ tasks = tasks.filter(t => t.sessionId === opts.sessionId);
200
+ }
201
+ if (opts?.status) {
202
+ tasks = tasks.filter(t => t.status.state === opts.status);
203
+ }
204
+ tasks.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
205
+ if (opts?.limit) {
206
+ tasks = tasks.slice(0, opts.limit);
207
+ }
208
+ return tasks.map(t => this.sanitizeTask(t));
209
+ }
210
+ /**
211
+ * Find skills matching a query.
212
+ */
213
+ findSkills(query) {
214
+ const q = query.toLowerCase();
215
+ return this.agentCard.skills.filter(s => {
216
+ if (s.name.toLowerCase().includes(q))
217
+ return true;
218
+ if (s.description?.toLowerCase().includes(q))
219
+ return true;
220
+ if (s.tags?.some(t => t.toLowerCase().includes(q)))
221
+ return true;
222
+ return false;
223
+ });
224
+ }
225
+ /**
226
+ * Get stats.
227
+ */
228
+ getStats() {
229
+ return { ...this.stats, byStatus: { ...this.stats.byStatus } };
230
+ }
231
+ /**
232
+ * Clean up old tasks.
233
+ */
234
+ cleanup(maxAgeMs) {
235
+ const threshold = maxAgeMs ?? this.maxTaskAgeMs;
236
+ const cutoff = Date.now() - threshold;
237
+ let cleaned = 0;
238
+ for (const [id, task] of this.tasks) {
239
+ if (new Date(task.updatedAt).getTime() < cutoff) {
240
+ const terminalStates = ['completed', 'failed', 'canceled'];
241
+ if (!terminalStates.includes(task.status.state)) {
242
+ this.stats.activeTasks = Math.max(0, this.stats.activeTasks - 1);
243
+ }
244
+ this.tasks.delete(id);
245
+ cleaned++;
246
+ }
247
+ }
248
+ return cleaned;
249
+ }
250
+ /**
251
+ * Destroy and release resources.
252
+ */
253
+ destroy() {
254
+ this.tasks.clear();
255
+ this.stats = {
256
+ totalTasks: 0,
257
+ byStatus: {},
258
+ totalMessages: 0,
259
+ totalArtifacts: 0,
260
+ activeTasks: 0,
261
+ };
262
+ }
263
+ // ─── Private ─────────────────────────────────────────────────────────────
264
+ sanitizeTask(task) {
265
+ return {
266
+ ...task,
267
+ history: this.recordHistory ? [...task.history] : [],
268
+ artifacts: [...task.artifacts],
269
+ };
270
+ }
271
+ evictOldTasks() {
272
+ if (this.tasks.size < this.maxTasks)
273
+ return;
274
+ // Remove oldest completed tasks first
275
+ const entries = [...this.tasks.entries()]
276
+ .sort((a, b) => a[1].updatedAt.localeCompare(b[1].updatedAt));
277
+ const terminalStates = ['completed', 'failed', 'canceled'];
278
+ for (const [id, task] of entries) {
279
+ if (this.tasks.size < this.maxTasks * 0.8)
280
+ break; // Keep 80% capacity
281
+ if (terminalStates.includes(task.status.state)) {
282
+ this.tasks.delete(id);
283
+ }
284
+ }
285
+ }
286
+ }
287
+ exports.A2AManager = A2AManager;
288
+ //# sourceMappingURL=a2a-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-protocol.js","sourceRoot":"","sources":["../src/a2a-protocol.ts"],"names":[],"mappings":"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"}