diff --git a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/CommandsEditor/CommandsEditor.tsx b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/CommandsEditor/CommandsEditor.tsx index 49498d2d63e..714a88af282 100644 --- a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/CommandsEditor/CommandsEditor.tsx +++ b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/CommandsEditor/CommandsEditor.tsx @@ -80,7 +80,7 @@ export function CommandsEditor({ onChange={(e) => handleCommandChange(index, e.target.value)} onKeyDown={(e) => handleCommandKeyDown(e, index)} onBlur={onBlur} - className="h-7 px-2 text-sm font-mono flex-1" + className="h-7 px-2 text-sm font-mono flex-1 min-w-0" placeholder={placeholder} /> {commands.length > 1 && ( diff --git a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetRow/PresetRow.tsx b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetRow/PresetRow.tsx index 13d1582db9e..e482da99212 100644 --- a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetRow/PresetRow.tsx +++ b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetRow/PresetRow.tsx @@ -47,7 +47,7 @@ function PresetCell({ value={value as string} onChange={(e) => onChange(rowIndex, column.key, e.target.value)} onBlur={() => onBlur(rowIndex, column.key)} - className={`h-8 px-2 text-sm w-full ${column.mono ? "font-mono" : ""}`} + className={`h-8 px-2 text-sm w-full min-w-0 truncate ${column.mono ? "font-mono" : ""}`} placeholder={column.placeholder} /> ); diff --git a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetsSettings.tsx b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetsSettings.tsx index cafe50dc0e4..c9255ab1103 100644 --- a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetsSettings.tsx +++ b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/PresetsSettings.tsx @@ -1,6 +1,7 @@ import { Button } from "@superset/ui/button"; -import { useEffect, useState } from "react"; -import { HiOutlinePlus } from "react-icons/hi2"; +import { useEffect, useMemo, useState } from "react"; +import { HiOutlineCheck, HiOutlinePlus } from "react-icons/hi2"; +import { LuSparkles } from "react-icons/lu"; import { usePresets } from "renderer/react-query/presets"; import { PresetRow } from "./PresetRow"; import { @@ -9,6 +10,39 @@ import { type TerminalPreset, } from "./types"; +interface PresetTemplate { + name: string; + description: string; + preset: { + name: string; + cwd: string; + commands: string[]; + }; +} + +const PRESET_TEMPLATES: PresetTemplate[] = [ + { + name: "Codex (Danger Mode)", + description: "OpenAI Codex with full sandbox access and high reasoning", + preset: { + name: "Codex Danger", + cwd: "", + commands: [ + 'codex -c model_reasoning_effort="high" --ask-for-approval never --sandbox danger-full-access -c model_reasoning_summary="detailed" -c model_supports_reasoning_summaries=true', + ], + }, + }, + { + name: "Claude (Danger Mode)", + description: "Claude Code with permissions auto-approved", + preset: { + name: "Claude Danger", + cwd: "", + commands: ["claude --dangerously-skip-permissions"], + }, + }, +]; + export function PresetsSettings() { const { presets: serverPresets, @@ -24,6 +58,14 @@ export function PresetsSettings() { setLocalPresets(serverPresets); }, [serverPresets]); + const existingPresetNames = useMemo( + () => new Set(serverPresets.map((p) => p.name)), + [serverPresets], + ); + + const isTemplateAdded = (template: PresetTemplate) => + existingPresetNames.has(template.preset.name); + const handleCellChange = ( rowIndex: number, column: PresetColumnKey, @@ -75,6 +117,11 @@ export function PresetsSettings() { }); }; + const handleAddTemplate = (template: PresetTemplate) => { + if (isTemplateAdded(template)) return; + createPreset.mutate(template.preset); + }; + const handleDeleteRow = (rowIndex: number) => { const preset = localPresets[rowIndex]; if (!preset) return; @@ -108,10 +155,38 @@ export function PresetsSettings() { Add Preset -
- Create and manage terminal presets for quick terminal creation. Press - Enter to add a new command. +
+ Presets let you quickly launch terminals with pre-configured commands. + Create a preset below, then use it from the "New Terminal" dropdown in + any workspace.
+ +