feat: add websocket wizard foundation

This commit is contained in:
a.tolmachev
2026-04-07 18:03:55 +03:00
parent d8981f8a75
commit 35e9c8c754
6 changed files with 266 additions and 5 deletions
+36
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.websocket.label': 'Socket config',
'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.',
@@ -667,6 +668,23 @@ var TRANSLATIONS = {
'wizard.step3.grpc.route_label': 'gRPC route',
'wizard.step3.grpc.request_label': 'Request',
'wizard.step3.grpc.response_label': 'Response',
'wizard.step3.websocket.title': 'WebSocket subscription',
'wizard.step3.websocket.subtitle': 'Define the subscription handshake, message templates and runtime tuning that Crank should use before collecting bounded WebSocket events.',
'wizard.step3.websocket.connection_title': 'Connection',
'wizard.step3.websocket.connection_subtitle': 'The upstream base URL from step 2 becomes the WebSocket endpoint unless you override it here.',
'wizard.step3.websocket.path': 'Socket path',
'wizard.step3.websocket.path_hint': 'Appended to the upstream URL from step 2. Leave empty when the upstream URL already points to the full WebSocket endpoint.',
'wizard.step3.websocket.subprotocols': 'Subprotocols',
'wizard.step3.websocket.subprotocols_hint': 'One subprotocol per line. Crank offers them during the handshake in the same order.',
'wizard.step3.websocket.messages_title': 'Subscription messages',
'wizard.step3.websocket.messages_subtitle': 'Templates are sent after the socket opens. They can reference MCP input through the mapping step.',
'wizard.step3.websocket.subscribe_template': 'Subscribe template',
'wizard.step3.websocket.unsubscribe_template': 'Unsubscribe template',
'wizard.step3.websocket.runtime_title': 'Connection tuning',
'wizard.step3.websocket.runtime_subtitle': 'Used by the runtime adapter for heartbeats and reconnects in bounded session-oriented flows.',
'wizard.step3.websocket.heartbeat': 'Heartbeat interval (ms)',
'wizard.step3.websocket.reconnect_attempts': 'Reconnect attempts',
'wizard.step3.websocket.reconnect_backoff': 'Reconnect backoff (ms)',
'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',
@@ -1569,6 +1587,7 @@ var TRANSLATIONS = {
'wizard.step3.rest.label': 'Конфиг запроса',
'wizard.step3.graphql.label': 'GQL операция',
'wizard.step3.grpc.label': 'RPC метод',
'wizard.step3.websocket.label': 'Конфиг сокета',
'wizard.step3.soap.label': 'WSDL binding',
'wizard.step3.rest.title': 'HTTP метод и формат',
'wizard.step3.rest.subtitle': 'Выберите HTTP-метод, который отправляет эта операция, и настройте content negotiation headers. Crank сериализует аргументы MCP-инструмента в нужный формат request body.',
@@ -1631,6 +1650,23 @@ var TRANSLATIONS = {
'wizard.step3.grpc.route_label': 'gRPC route',
'wizard.step3.grpc.request_label': 'Запрос',
'wizard.step3.grpc.response_label': 'Ответ',
'wizard.step3.websocket.title': 'WebSocket subscription',
'wizard.step3.websocket.subtitle': 'Определите handshake подписки, шаблоны сообщений и runtime-параметры, которые Crank должен использовать перед сбором bounded WebSocket events.',
'wizard.step3.websocket.connection_title': 'Соединение',
'wizard.step3.websocket.connection_subtitle': 'Base URL upstream-а из шага 2 станет WebSocket endpoint-ом, если вы явно не переопределите его здесь.',
'wizard.step3.websocket.path': 'Путь сокета',
'wizard.step3.websocket.path_hint': 'Добавляется к upstream URL из шага 2. Оставьте пустым, если upstream URL уже указывает на полный WebSocket endpoint.',
'wizard.step3.websocket.subprotocols': 'Subprotocols',
'wizard.step3.websocket.subprotocols_hint': 'По одному subprotocol на строку. Crank предложит их в handshake в том же порядке.',
'wizard.step3.websocket.messages_title': 'Сообщения подписки',
'wizard.step3.websocket.messages_subtitle': 'Шаблоны отправляются после открытия сокета. Они могут ссылаться на MCP input через mapping на следующем шаге.',
'wizard.step3.websocket.subscribe_template': 'Шаблон subscribe',
'wizard.step3.websocket.unsubscribe_template': 'Шаблон unsubscribe',
'wizard.step3.websocket.runtime_title': 'Тюнинг соединения',
'wizard.step3.websocket.runtime_subtitle': 'Используется runtime adapter-ом для heartbeat и reconnect в bounded session-oriented flows.',
'wizard.step3.websocket.heartbeat': 'Интервал heartbeat (мс)',
'wizard.step3.websocket.reconnect_attempts': 'Число reconnect attempts',
'wizard.step3.websocket.reconnect_backoff': 'Backoff reconnect-а (мс)',
'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': 'Файлы контракта',