162 lines
11 KiB
HTML
162 lines
11 KiB
HTML
<!-- REST variant -->
|
|
<div id="step-panel-3-rest" class="step-pane">
|
|
<div class="step-panel-header">
|
|
<div class="step-panel-eyebrow">
|
|
<div class="step-panel-eyebrow-line"></div>
|
|
<span data-step-counter>Step 3 of 5</span>
|
|
</div>
|
|
<h1 class="step-panel-title" data-i18n="wizard.step3.rest.title">HTTP метод и формат</h1>
|
|
<p class="step-panel-subtitle" data-i18n="wizard.step3.rest.subtitle">Выберите HTTP-метод и формат запроса. Crank подставит параметры MCP инструмента в запрос к API.</p>
|
|
</div>
|
|
|
|
<!-- HTTP method picker -->
|
|
<div class="config-card" style="margin-bottom: 20px;">
|
|
<div class="config-card-header">
|
|
<div class="config-card-header-icon">
|
|
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="var(--text-secondary)" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M2 8h12M10 4l4 4-4 4"/>
|
|
</svg>
|
|
</div>
|
|
<div>
|
|
<div class="config-card-title" data-i18n="wizard.step3.rest.method_title">HTTP метод</div>
|
|
<div class="config-card-subtitle" data-i18n="wizard.step3.rest.method_subtitle">Метод, который отправляется в API при каждом вызове инструмента</div>
|
|
</div>
|
|
<span class="config-card-optional" style="color:var(--error,#f87171);" data-i18n="wizard.required">Required</span>
|
|
</div>
|
|
<div class="config-card-body">
|
|
<div class="method-grid">
|
|
<button class="method-card" data-method="GET" onclick="selectMethod(this)">
|
|
<span class="method-name">GET</span>
|
|
<span class="method-desc" data-i18n="wizard.step3.rest.read">Чтение</span>
|
|
</button>
|
|
<button class="method-card active" data-method="POST" onclick="selectMethod(this)">
|
|
<span class="method-name">POST</span>
|
|
<span class="method-desc" data-i18n="wizard.step3.rest.create">Создание</span>
|
|
</button>
|
|
<button class="method-card" data-method="PUT" onclick="selectMethod(this)">
|
|
<span class="method-name">PUT</span>
|
|
<span class="method-desc" data-i18n="wizard.step3.rest.replace">Замена</span>
|
|
</button>
|
|
<button class="method-card" data-method="PATCH" onclick="selectMethod(this)">
|
|
<span class="method-name">PATCH</span>
|
|
<span class="method-desc" data-i18n="wizard.step3.rest.update">Обновление</span>
|
|
</button>
|
|
<button class="method-card" data-method="DELETE" onclick="selectMethod(this)">
|
|
<span class="method-name">DELETE</span>
|
|
<span class="method-desc" data-i18n="wizard.step3.rest.remove">Удаление</span>
|
|
</button>
|
|
</div>
|
|
<div class="method-callout" id="method-callout-rest" hidden></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Request format -->
|
|
<div class="config-card" style="margin-bottom: 20px;">
|
|
<div class="config-card-header">
|
|
<div class="config-card-header-icon">
|
|
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="var(--text-secondary)" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
<rect x="2" y="3" width="12" height="10" rx="1.5"/>
|
|
<path d="M5 7h6M5 10h4"/>
|
|
</svg>
|
|
</div>
|
|
<div>
|
|
<div class="config-card-title" data-i18n="wizard.step3.rest.format_title">Формат запроса</div>
|
|
<div class="config-card-subtitle" data-i18n="wizard.step3.rest.format_subtitle">Формат данных запроса и ожидаемого ответа</div>
|
|
</div>
|
|
<span class="config-card-optional" data-i18n="wizard.optional">Optional</span>
|
|
</div>
|
|
<div class="config-card-body" style="gap: 16px;">
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label class="form-label" data-i18n="wizard.step3.rest.content_type">Content-Type</label>
|
|
<select class="form-select">
|
|
<option selected>application/json</option>
|
|
<option>application/x-www-form-urlencoded</option>
|
|
<option>multipart/form-data</option>
|
|
<option>text/plain</option>
|
|
</select>
|
|
<div class="form-hint" data-i18n="wizard.step3.rest.content_type_hint">В каком формате отправлять данные в API.</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="form-label" data-i18n="wizard.step3.rest.accept">Accept</label>
|
|
<select class="form-select">
|
|
<option selected>application/json</option>
|
|
<option>text/plain</option>
|
|
<option>*/*</option>
|
|
</select>
|
|
<div class="form-hint" data-i18n="wizard.step3.rest.accept_hint">Какой формат ответа ожидать от API.</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="config-card approval-gate-card" style="margin-bottom: 20px;">
|
|
<div class="config-card-header">
|
|
<div class="config-card-header-icon">
|
|
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="var(--text-secondary)" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M8 2l5 2v4c0 3-2 5-5 6-3-1-5-3-5-6V4l5-2z"/>
|
|
<path d="M6 8l1.4 1.4L10.5 6"/>
|
|
</svg>
|
|
</div>
|
|
<div>
|
|
<div class="config-card-title" data-i18n="wizard.approval.title">Подтверждение человеком</div>
|
|
<div class="config-card-subtitle" data-i18n="wizard.approval.subtitle">Включайте для действий, которые нельзя выполнять без явного решения пользователя.</div>
|
|
</div>
|
|
</div>
|
|
<div class="config-card-body" style="gap: 16px;">
|
|
<label class="toggle-row approval-toggle-row" for="approval-required">
|
|
<span id="approval-required-toggle" class="toggle" aria-hidden="true"></span>
|
|
<span class="toggle-text">
|
|
<span class="toggle-label" data-i18n="wizard.approval.required_label">Требовать подтверждение перед выполнением</span>
|
|
<span class="toggle-desc" data-i18n="wizard.approval.required_desc">MCP клиент получит ожидающий запрос, а действие выполнится только после подтверждения через отдельный эндпоинт подтверждения.</span>
|
|
</span>
|
|
<input id="approval-required" type="checkbox" class="approval-toggle-input">
|
|
</label>
|
|
|
|
<div id="approval-config-fields" class="approval-config-fields" hidden>
|
|
<div class="form-group">
|
|
<label class="form-label" for="approval-ttl-seconds" data-i18n="wizard.approval.ttl">Сколько ждать подтверждение</label>
|
|
<select id="approval-ttl-seconds" class="form-select">
|
|
<option value="60">1 минута</option>
|
|
<option value="180">3 минуты</option>
|
|
<option value="300" selected>5 минут</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label" for="approval-title" data-i18n="wizard.approval.confirmation_title">Заголовок подтверждения</label>
|
|
<input id="approval-title" class="form-input" type="text" autocomplete="off" placeholder="Подтвердите выполнение операции">
|
|
<div class="form-hint" data-i18n="wizard.approval.confirmation_title_hint">Этот текст увидит внешний интерфейс подтверждения.</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label" for="approval-body" data-i18n="wizard.approval.confirmation_body">Описание для пользователя</label>
|
|
<textarea id="approval-body" class="form-textarea" rows="4" placeholder="Проверьте параметры операции и подтвердите выполнение."></textarea>
|
|
<div class="form-hint" data-i18n="wizard.approval.confirmation_body_hint">Коротко объясните, что произойдет после подтверждения.</div>
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<label class="checkbox-pill approval-preview-pill">
|
|
<input id="approval-show-payload-preview" type="checkbox" checked>
|
|
<span data-i18n="wizard.approval.show_payload">Показывать параметры запроса</span>
|
|
</label>
|
|
<div class="form-group">
|
|
<label class="form-label" for="approval-payload-preview-mode" data-i18n="wizard.approval.payload_mode">Как показывать параметры</label>
|
|
<select id="approval-payload-preview-mode" class="form-select">
|
|
<option value="summary" data-i18n="wizard.approval.payload.summary">Краткое описание</option>
|
|
<option value="masked_json" data-i18n="wizard.approval.payload.masked_json">JSON с маскированием секретов</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="approval-preview-card">
|
|
<div class="approval-preview-eyebrow" data-i18n="wizard.approval.preview_label">Предпросмотр для интерфейса подтверждения</div>
|
|
<div class="approval-preview-title" id="approval-preview-title">Подтвердите выполнение операции</div>
|
|
<div class="approval-preview-body" id="approval-preview-body">Проверьте параметры операции и подтвердите выполнение.</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div><!-- /step-pane-3-rest -->
|