Skip to content

Commit 86c95a7

Browse files
committed
Make new tasks have unique IDs.
1 parent 3876df6 commit 86c95a7

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

packages/a2a_dart/lib/src/client/a2a_client.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import 'transport.dart';
2525
/// Events (SSE).
2626
class A2AClient {
2727
final _log = Logger('A2AClient');
28+
int _nextId = 1;
2829

2930
/// The base URL of the A2A server.
3031
final String url;
@@ -94,7 +95,7 @@ class A2AClient {
9495
'jsonrpc': '2.0',
9596
'method': 'create_task',
9697
'params': {'message': message.toJson()},
97-
'id': 1,
98+
'id': _nextId++,
9899
};
99100
_log.info('Creating task with message: ${message.toJson()}');
100101
final response = await transport.send(request);
@@ -120,7 +121,7 @@ class A2AClient {
120121
'jsonrpc': '2.0',
121122
'method': 'message/stream',
122123
'params': {'message': message.toJson()},
123-
'id': 1,
124+
'id': _nextId++,
124125
};
125126
_log.info('Sending message stream: ${message.toJson()}');
126127
return transport.sendStream(request);
@@ -136,7 +137,7 @@ class A2AClient {
136137
'jsonrpc': '2.0',
137138
'method': 'execute_task',
138139
'params': {'task_id': taskId},
139-
'id': 1,
140+
'id': _nextId++,
140141
};
141142
_log.info('Executing task $taskId');
142143
return transport.sendStream(request).map(

packages/a2a_dart/test/client/a2a_client_test.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,29 @@ void main() {
102102
);
103103
});
104104

105+
test('sends unique request IDs', () async {
106+
final message = Message(
107+
messageId: '1',
108+
role: Role.user,
109+
parts: [Part.text(text: 'Hello')],
110+
);
111+
final taskJson = {
112+
'id': '123',
113+
'contextId': '456',
114+
'status': {'state': 'submitted'},
115+
};
116+
117+
when(
118+
mockTransport.send(any),
119+
).thenAnswer((_) async => {'result': taskJson});
120+
121+
await client.createTask(message);
122+
await client.createTask(message);
123+
124+
final requests = verify(mockTransport.send(captureAny)).captured;
125+
expect(requests[0]['id'], isNot(equals(requests[1]['id'])));
126+
});
127+
105128
test('executeTask returns a stream of StreamingEvents on success', () {
106129
final streamController = StreamController<Map<String, dynamic>>();
107130
final eventJson = {

0 commit comments

Comments
 (0)