feat: add soap wizard foundation

This commit is contained in:
a.tolmachev
2026-04-07 17:09:01 +03:00
parent 78dc5ebc37
commit d8981f8a75
7 changed files with 475 additions and 9 deletions
+74
View File
@@ -605,6 +605,7 @@ var TRANSLATIONS = {
'wizard.step3.rest.label': 'Request config',
'wizard.step3.graphql.label': 'GQL operation',
'wizard.step3.grpc.label': 'RPC method',
'wizard.step3.soap.label': 'WSDL binding',
'wizard.step3.rest.title': 'HTTP method & format',
'wizard.step3.rest.subtitle': 'Choose the HTTP verb this operation sends and configure content negotiation headers. Crank will serialize MCP tool arguments into the appropriate request body format.',
'wizard.step3.rest.method_title': 'HTTP method',
@@ -666,6 +667,27 @@ var TRANSLATIONS = {
'wizard.step3.grpc.route_label': 'gRPC route',
'wizard.step3.grpc.request_label': 'Request',
'wizard.step3.grpc.response_label': 'Response',
'wizard.step3.soap.title': 'WSDL and SOAP binding',
'wizard.step3.soap.subtitle': 'Upload the WSDL/XSD bundle, inspect services and choose the exact service, port and operation that Crank should expose as an MCP tool.',
'wizard.step3.soap.wsdl_title': 'Contract files',
'wizard.step3.soap.wsdl_subtitle': 'WSDL is required. Supporting XSD files are optional and can be uploaded before discovery.',
'wizard.step3.soap.choose_wsdl': 'Choose WSDL',
'wizard.step3.soap.choose_xsd': 'Choose XSD',
'wizard.step3.soap.no_wsdl': 'No WSDL selected',
'wizard.step3.soap.no_xsd': 'No XSD selected',
'wizard.step3.soap.upload_discover': 'Upload and inspect services',
'wizard.step3.soap.binding_title': 'Selected binding',
'wizard.step3.soap.binding_subtitle': 'The chosen service, port and operation become the target binding for this operation draft.',
'wizard.step3.soap.service_name': 'Service',
'wizard.step3.soap.port_name': 'Port',
'wizard.step3.soap.operation_name': 'Operation',
'wizard.step3.soap.version': 'SOAP version',
'wizard.step3.soap.action': 'SOAPAction',
'wizard.step3.soap.binding_style': 'Binding style',
'wizard.step3.soap.binding.document_literal': 'Document literal',
'wizard.step3.soap.binding.rpc_literal': 'RPC literal',
'wizard.step3.soap.endpoint_override': 'Endpoint override',
'wizard.step3.soap.endpoint_override_hint': 'Defaults to the upstream base URL from step 2. Override only when the binding address differs from the selected upstream.',
'wizard.step4.title': 'Tool config',
'wizard.step4.subtitle': 'Name your tool, write the LLM-facing description, and define the input/output schemas. The description is the primary signal the model uses when deciding whether to call this tool.',
'wizard.step4.identity_title': 'Tool identity',
@@ -766,6 +788,21 @@ var TRANSLATIONS = {
'wizard.busy.import_yaml': 'Importing YAML…',
'wizard.busy.publish': 'Publishing operation…',
'wizard.busy.descriptor': 'Uploading descriptor set…',
'wizard.busy.wsdl': 'Inspecting WSDL…',
'wizard.step3.soap.wsdl_selected': 'WSDL selected',
'wizard.step3.soap.wsdl_selected_body': 'The WSDL file is staged and will be uploaded with the current draft.',
'wizard.step3.soap.xsd_selected': 'XSD selected',
'wizard.step3.soap.xsd_selected_body': 'The XSD file is staged and will be uploaded with the current draft.',
'wizard.step3.soap.wsdl_uploaded': 'WSDL uploaded',
'wizard.step3.soap.xsd_uploaded': 'XSD uploaded',
'wizard.step3.soap.services_discovered': '{services} service(s), {ports} port(s) and {operations} operation(s) discovered from the uploaded contract.',
'wizard.step3.soap.services_none': 'No SOAP services discovered from the uploaded WSDL yet.',
'wizard.step3.soap.applied': 'SOAP binding applied',
'wizard.step3.soap.applied_body': 'The selected service, port and operation were applied to the current draft.',
'wizard.step3.soap.no_wsdl_error': 'WSDL is required',
'wizard.step3.soap.no_wsdl_error_body': 'Choose a WSDL file or reuse an already uploaded draft contract before inspection.',
'wizard.step3.soap.discovered': 'SOAP services discovered',
'wizard.step3.soap.discovered_body': 'The uploaded WSDL was inspected through the backend and the available bindings are ready to apply.',
'wizard.sample.input_saved': 'Input sample saved',
'wizard.sample.input_saved_body': 'The input sample is now stored against the current draft version.',
'wizard.sample.output_saved': 'Output sample saved',
@@ -1532,6 +1569,7 @@ var TRANSLATIONS = {
'wizard.step3.rest.label': 'Конфиг запроса',
'wizard.step3.graphql.label': 'GQL операция',
'wizard.step3.grpc.label': 'RPC метод',
'wizard.step3.soap.label': 'WSDL binding',
'wizard.step3.rest.title': 'HTTP метод и формат',
'wizard.step3.rest.subtitle': 'Выберите HTTP-метод, который отправляет эта операция, и настройте content negotiation headers. Crank сериализует аргументы MCP-инструмента в нужный формат request body.',
'wizard.step3.rest.method_title': 'HTTP метод',
@@ -1593,6 +1631,27 @@ var TRANSLATIONS = {
'wizard.step3.grpc.route_label': 'gRPC route',
'wizard.step3.grpc.request_label': 'Запрос',
'wizard.step3.grpc.response_label': 'Ответ',
'wizard.step3.soap.title': 'WSDL и SOAP binding',
'wizard.step3.soap.subtitle': 'Загрузите WSDL/XSD bundle, получите список сервисов и выберите точный service, port и operation, который Crank должен опубликовать как MCP tool.',
'wizard.step3.soap.wsdl_title': 'Файлы контракта',
'wizard.step3.soap.wsdl_subtitle': 'WSDL обязателен. Supporting XSD files можно загрузить дополнительно до discovery.',
'wizard.step3.soap.choose_wsdl': 'Выбрать WSDL',
'wizard.step3.soap.choose_xsd': 'Выбрать XSD',
'wizard.step3.soap.no_wsdl': 'WSDL не выбран',
'wizard.step3.soap.no_xsd': 'XSD не выбран',
'wizard.step3.soap.upload_discover': 'Загрузить и получить сервисы',
'wizard.step3.soap.binding_title': 'Выбранный binding',
'wizard.step3.soap.binding_subtitle': 'Выбранные service, port и operation станут target binding для текущего draft.',
'wizard.step3.soap.service_name': 'Service',
'wizard.step3.soap.port_name': 'Port',
'wizard.step3.soap.operation_name': 'Operation',
'wizard.step3.soap.version': 'SOAP версия',
'wizard.step3.soap.action': 'SOAPAction',
'wizard.step3.soap.binding_style': 'Binding style',
'wizard.step3.soap.binding.document_literal': 'Document literal',
'wizard.step3.soap.binding.rpc_literal': 'RPC literal',
'wizard.step3.soap.endpoint_override': 'Endpoint override',
'wizard.step3.soap.endpoint_override_hint': 'По умолчанию берется upstream base URL из шага 2. Переопределяйте только если binding address отличается от выбранного upstream.',
'wizard.step4.title': 'Конфиг инструмента',
'wizard.step4.subtitle': 'Задайте имя инструмента, описание для LLM и определите входную/выходную схему. Описание — главный сигнал, по которому модель решает, вызывать ли этот инструмент.',
'wizard.step4.identity_title': 'Идентичность инструмента',
@@ -1693,6 +1752,21 @@ var TRANSLATIONS = {
'wizard.busy.import_yaml': 'Импорт YAML…',
'wizard.busy.publish': 'Публикация операции…',
'wizard.busy.descriptor': 'Загрузка descriptor set…',
'wizard.busy.wsdl': 'Inspection WSDL…',
'wizard.step3.soap.wsdl_selected': 'WSDL выбран',
'wizard.step3.soap.wsdl_selected_body': 'WSDL staged и будет загружен вместе с текущим draft.',
'wizard.step3.soap.xsd_selected': 'XSD выбран',
'wizard.step3.soap.xsd_selected_body': 'XSD staged и будет загружен вместе с текущим draft.',
'wizard.step3.soap.wsdl_uploaded': 'WSDL загружен',
'wizard.step3.soap.xsd_uploaded': 'XSD загружен',
'wizard.step3.soap.services_discovered': 'Из загруженного контракта найдено {services} service(s), {ports} port(s) и {operations} operation(s).',
'wizard.step3.soap.services_none': 'Из загруженного WSDL пока не найдено ни одного SOAP service.',
'wizard.step3.soap.applied': 'SOAP binding применен',
'wizard.step3.soap.applied_body': 'Выбранные service, port и operation применены к текущему draft.',
'wizard.step3.soap.no_wsdl_error': 'Нужен WSDL',
'wizard.step3.soap.no_wsdl_error_body': 'Выберите WSDL или используйте уже загруженный контракт текущего draft перед inspection.',
'wizard.step3.soap.discovered': 'SOAP services получены',
'wizard.step3.soap.discovered_body': 'Загруженный WSDL был inspected через backend, и доступные bindings готовы к применению.',
'wizard.sample.input_saved': 'Входной sample сохранен',
'wizard.sample.input_saved_body': 'Входной sample теперь сохранен в текущей версии черновика.',
'wizard.sample.output_saved': 'Выходной sample сохранен',