fix: align routing resolve payload
This commit is contained in:
parent
e608f71e5a
commit
5de94ca089
@ -19,8 +19,19 @@ class GoRuntimeDispatchDesktopClient implements RuntimeDispatchResolver {
|
||||
Iterable<String> requiredCapabilities = const <String>[],
|
||||
}) async {
|
||||
final response = await _client.request(
|
||||
method: 'xworkmate.dispatch.resolve',
|
||||
method: 'xworkmate.routing.resolve',
|
||||
params: <String, dynamic>{
|
||||
'routing': <String, dynamic>{
|
||||
'routingMode': 'auto',
|
||||
if (preferredProviderId.trim().isNotEmpty)
|
||||
'preferredGatewayTarget': preferredProviderId.trim(),
|
||||
'explicitExecutionTarget': '',
|
||||
'explicitProviderId': preferredProviderId.trim(),
|
||||
'explicitModel': '',
|
||||
'explicitSkills': const <String>[],
|
||||
'allowSkillInstall': false,
|
||||
'availableSkills': const <Object?>[],
|
||||
},
|
||||
'preferredProviderId': preferredProviderId.trim(),
|
||||
'requiredCapabilities': requiredCapabilities
|
||||
.map((item) => item.trim())
|
||||
@ -45,8 +56,19 @@ class GoRuntimeDispatchDesktopClient implements RuntimeDispatchResolver {
|
||||
required Map<String, dynamic> nodeInfo,
|
||||
}) async {
|
||||
final response = await _client.request(
|
||||
method: 'xworkmate.dispatch.resolve',
|
||||
method: 'xworkmate.routing.resolve',
|
||||
params: <String, dynamic>{
|
||||
'routing': <String, dynamic>{
|
||||
'routingMode': 'auto',
|
||||
if (preferredProviderId.trim().isNotEmpty)
|
||||
'preferredGatewayTarget': preferredProviderId.trim(),
|
||||
'explicitExecutionTarget': '',
|
||||
'explicitProviderId': preferredProviderId.trim(),
|
||||
'explicitModel': '',
|
||||
'explicitSkills': const <String>[],
|
||||
'allowSkillInstall': false,
|
||||
'availableSkills': const <Object?>[],
|
||||
},
|
||||
'preferredProviderId': preferredProviderId.trim(),
|
||||
'requiredCapabilities': requiredCapabilities
|
||||
.map((item) => item.trim())
|
||||
|
||||
71
test/runtime/go_runtime_dispatch_desktop_client_test.dart
Normal file
71
test/runtime/go_runtime_dispatch_desktop_client_test.dart
Normal file
@ -0,0 +1,71 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:xworkmate/runtime/gateway_acp_client.dart';
|
||||
import 'package:xworkmate/runtime/go_runtime_dispatch_desktop_client.dart';
|
||||
import 'package:xworkmate/runtime/runtime_external_code_agents.dart';
|
||||
|
||||
void main() {
|
||||
test('desktop dispatch resolver uses xworkmate.routing.resolve', () async {
|
||||
final capture = await _startAcpHttpServer();
|
||||
addTearDown(capture.close);
|
||||
|
||||
final client = GatewayAcpClient(
|
||||
endpointResolver: () => capture.baseEndpoint,
|
||||
);
|
||||
final resolver = GoRuntimeDispatchDesktopClient(
|
||||
client: client,
|
||||
endpointResolver: () => capture.baseEndpoint,
|
||||
);
|
||||
addTearDown(resolver.dispose);
|
||||
|
||||
await resolver.resolveGatewayDispatch(
|
||||
providers: const <ExternalCodeAgentProvider>[],
|
||||
preferredProviderId: 'codex',
|
||||
requiredCapabilities: const <String>['skill-a'],
|
||||
nodeState: const <String, dynamic>{},
|
||||
nodeInfo: const <String, dynamic>{},
|
||||
);
|
||||
|
||||
expect(capture.method, 'xworkmate.routing.resolve');
|
||||
expect(capture.body, contains('"routingMode":"auto"'));
|
||||
expect(capture.body, contains('"preferredGatewayTarget":"codex"'));
|
||||
});
|
||||
}
|
||||
|
||||
Future<_CapturedAcpHttpServer> _startAcpHttpServer() async {
|
||||
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
|
||||
final capture = _CapturedAcpHttpServer._(
|
||||
server,
|
||||
Uri.parse('http://127.0.0.1:${server.port}'),
|
||||
);
|
||||
server.listen((request) async {
|
||||
final body = await utf8.decoder.bind(request).join();
|
||||
capture.body = body;
|
||||
final decoded = jsonDecode(body);
|
||||
capture.method = decoded['method']?.toString() ?? '';
|
||||
final id = decoded['id']?.toString() ?? 'request-id';
|
||||
request.response.headers.contentType = ContentType.json;
|
||||
request.response.write(
|
||||
jsonEncode(<String, dynamic>{
|
||||
'jsonrpc': '2.0',
|
||||
'id': id,
|
||||
'result': <String, dynamic>{'providerId': 'codex'},
|
||||
}),
|
||||
);
|
||||
await request.response.close();
|
||||
});
|
||||
return capture;
|
||||
}
|
||||
|
||||
class _CapturedAcpHttpServer {
|
||||
_CapturedAcpHttpServer._(this._server, this.baseEndpoint);
|
||||
|
||||
final HttpServer _server;
|
||||
final Uri baseEndpoint;
|
||||
String method = '';
|
||||
String body = '';
|
||||
|
||||
Future<void> close() => _server.close(force: true);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user