feat(scenarios,environments): add markdown description field

- add optional description to scenario and environment entities
- expose description in create/update DTOs, MCP tools, and export DTOs
- render description as markdown on detail pages
- add description editor (CodeEditor) to create/edit forms for both resources
This commit is contained in:
2026-04-14 23:53:45 +03:00
parent 4dab218b75
commit e6aacc899d
20 changed files with 206 additions and 32 deletions
@@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { X, Save, ClipboardList } from 'lucide-react';
import { scenarios } from '../../api';
import { Breadcrumbs, Button, Card, Input, useToast } from '../../ui';
import { Breadcrumbs, Button, Card, Input, CodeEditor, useToast } from '../../ui';
import styles from '../Page.module.css';
export function CreateScenarioPage() {
@@ -12,6 +12,7 @@ export function CreateScenarioPage() {
const toast = useToast();
const [name, setName] = useState('');
const [description, setDescription] = useState('');
const [nameError, setNameError] = useState('');
const [saving, setSaving] = useState(false);
@@ -23,7 +24,7 @@ export function CreateScenarioPage() {
}
setSaving(true);
try {
const scenario = await scenarios.create(name.trim());
const scenario = await scenarios.create(name.trim(), description.trim() || undefined);
toast.success(t('scenarios.created'));
navigate(`/scenarios/${scenario.id}`);
} catch (err) {
@@ -64,6 +65,15 @@ export function CreateScenarioPage() {
required
autoFocus
/>
<div className={styles.formField}>
<label className={styles.fieldLabel}>{t('scenarios.form_description')}</label>
<CodeEditor
language="markdown"
value={description}
onChange={setDescription}
rows={8}
/>
</div>
</div>
<div className={styles.formActions}>