- {/* Name */}
-
-
- setForm((prev) => ({ ...prev, name: e.target.value }))}
- placeholder={t("workflow.formNamePlaceholder", "e.g. Documentation Review")}
- data-testid="workflow-step-name"
- />
-
-
- {/* Description */}
-
-
-
-
- {/* Mode Selector */}
-
-
-
-
-
-
-
-
- {/* Phase Selector */}
-
-
-
-
-
-
-
- {form.phase === "pre-merge"
- ? t("workflow.phasePreMergeHint", "Runs before merge — can block merge on failure")
- : t("workflow.phasePostMergeHint", "Runs after merge success — failures are logged but do not block")}
-
-
-
- {/* Gate mode */}
-
-
-
-
-
-
-
- {form.gateMode === "gate"
- ? t("workflow.gateModeGateHint", "Failures block merge and request remediation.")
- : t("workflow.gateModeAdvisoryHint", "Failures are recorded as advisory and do not block merge.")}
-
-
-
- {/* Prompt (AI mode only) */}
- {form.mode === "prompt" && (
-
-
-
-
-
-
- )}
-
- {/* Model override (prompt mode only) */}
- {form.mode === "prompt" && (
-
-
-
- {form.modelProvider && form.modelId && (
-
- )}
-
-
- {form.modelProvider && form.modelId
- ? t("workflow.modelHintCustom", "Using {{provider}}/{{modelId}}", { provider: form.modelProvider, modelId: form.modelId })
- : t("workflow.modelHintDefault", "Using global default model")}
-
-
- {
- const parsed = parseModelDropdownValue(value);
- setForm((prev) => ({ ...prev, modelProvider: parsed.provider, modelId: parsed.modelId }));
- }}
- placeholder={t("workflow.modelOverridePlaceholder", "Select a model override…")}
- label={t("workflow.modelOverrideDropdownLabel", "Model override for this workflow step")}
- />
-
-
- )}
-
- {/* Script selector (script mode only) */}
- {form.mode === "script" && (
-
-
- {Object.keys(availableScripts).length === 0 ? (
-
- {t("workflow.noScripts", "No scripts configured. Add scripts in Settings → Scripts first.")}
-
- ) : (
-
- )}
-
- )}
-
- {/* Enabled toggle */}
-
-
- {/* Default on toggle */}
-
-
- {/* Form actions */}
-
-
-
-
-