From 214c207ac923abfe201827e305349b9fff700a18 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Wed, 10 Dec 2025 13:06:35 -0800 Subject: [PATCH 1/2] preset fix --- .../CommandsEditor/CommandsEditor.tsx | 2 +- .../PresetsSettings/PresetRow/PresetRow.tsx | 2 +- .../PresetsSettings/PresetsSettings.tsx | 64 ++++++++++++++++++- .../SettingsView/PresetsSettings/types.ts | 7 +- 4 files changed, 66 insertions(+), 9 deletions(-) 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..ceebe4206e5 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 { 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, @@ -75,6 +109,10 @@ export function PresetsSettings() { }); }; + const handleAddTemplate = (template: PresetTemplate) => { + createPreset.mutate(template.preset); + }; + const handleDeleteRow = (rowIndex: number) => { const preset = localPresets[rowIndex]; if (!preset) return; @@ -108,10 +146,30 @@ 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.

+ +
+ + Quick add: + + {PRESET_TEMPLATES.map((template) => ( + + ))} +
diff --git a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/types.ts b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/types.ts index beee54db800..de733981492 100644 --- a/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/types.ts +++ b/apps/desktop/src/renderer/screens/main/components/SettingsView/PresetsSettings/types.ts @@ -12,18 +12,17 @@ export interface PresetColumnConfig { } export const PRESET_COLUMNS: PresetColumnConfig[] = [ - { key: "name", label: "Name", placeholder: "Preset name (i.e. Dev Server)" }, + { key: "name", label: "Name", placeholder: "e.g. Dev Server" }, { key: "cwd", label: "CWD", - placeholder: "Working directory (i.e. ./src). Defaults to workspace root", + placeholder: "e.g. ./src (optional)", mono: true, }, { key: "commands", label: "Commands", - placeholder: - "Commands to run at startup (i.e. npm run dev). Enter to add more commands.", + placeholder: "e.g. npm run dev", mono: true, }, ]; From 4b491899d8ed2343fc40c97b1849decc19e3855c Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Wed, 10 Dec 2025 13:13:15 -0800 Subject: [PATCH 2/2] unique naming for terminals --- .../PresetsSettings/PresetsSettings.tsx | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) 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 ceebe4206e5..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,6 @@ 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"; @@ -58,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, @@ -110,6 +118,7 @@ export function PresetsSettings() { }; const handleAddTemplate = (template: PresetTemplate) => { + if (isTemplateAdded(template)) return; createPreset.mutate(template.preset); }; @@ -156,19 +165,27 @@ export function PresetsSettings() { Quick add: - {PRESET_TEMPLATES.map((template) => ( - - ))} + {PRESET_TEMPLATES.map((template) => { + const alreadyAdded = isTemplateAdded(template); + return ( + + ); + })}