diff --git a/.gitignore b/.gitignore index cd42ee3..9ba2259 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ bin/ obj/ +dist/ diff --git a/Core/Engine.cs b/Core/Engine.cs index 50c7f8e..3a4d3af 100644 --- a/Core/Engine.cs +++ b/Core/Engine.cs @@ -19,6 +19,9 @@ abstract class Engine public abstract string Executable { get; } public abstract ModelOption[] Models { get; } public abstract string[] Efforts { get; } + /// Modello scelto all'avvio e a ogni cambio di CLI: il più piccolo, per risposte rapide ed economiche. + public abstract string DefaultModelId { get; } + public string DefaultEffort => "low"; /// True se l'id di sessione lo genera il motore e l'app lo legge dall'output. public abstract bool OwnsSessionId { get; } @@ -51,6 +54,7 @@ sealed class ClaudeEngine : Engine ]; public override string[] Efforts { get; } = ["low", "medium", "high", "xhigh", "max"]; + public override string DefaultModelId => "claude-haiku-5-5"; public override List BuildArgs(string prompt, string? sessionId, bool resume, string model, string effort, bool structured) { @@ -86,6 +90,7 @@ sealed class CodexEngine : Engine ]; public override string[] Efforts { get; } = ["low", "medium", "high", "xhigh", "max"]; + public override string DefaultModelId => "gpt-5.6-luna"; public override List BuildArgs(string prompt, string? sessionId, bool resume, string model, string effort, bool structured) { diff --git a/Gui/MainViewModel.cs b/Gui/MainViewModel.cs index 747f612..96ce6d2 100644 --- a/Gui/MainViewModel.cs +++ b/Gui/MainViewModel.cs @@ -63,7 +63,7 @@ class MainViewModel : ObservableObject { static readonly ModelOption Default = new("Predefinito", ""); static readonly ModelOption Custom = new("Altro ID…", "__custom"); - const string DefaultEffort = "Predefinito"; + const string NoEffort = "Predefinito"; public ObservableCollection Messages { get; } = []; public ObservableCollection Chats { get; } = []; @@ -102,7 +102,7 @@ class MainViewModel : ObservableObject bool busy, updating, sidebarOpen = true; ModelOption selectedModel = Default; string customModel = ""; - string selectedEffort = DefaultEffort; + string selectedEffort = NoEffort; readonly RelayCommand send, newChat; public MainViewModel() @@ -188,8 +188,10 @@ class MainViewModel : ObservableObject { selectedEngine = choice; ModelChoices = [Default, .. choice.Engine.Models, Custom]; - EffortChoices = [DefaultEffort, .. choice.Engine.Efforts]; - SelectedModel = Default; CustomModel = ""; SelectedEffort = DefaultEffort; + EffortChoices = [NoEffort, .. choice.Engine.Efforts]; + // valori iniziali: il modello più piccolo del motore ed effort basso ("Predefinito" resta selezionabile) + SelectedModel = ModelChoices.FirstOrDefault(m => m.Id == choice.Engine.DefaultModelId) ?? Default; + CustomModel = ""; SelectedEffort = choice.Engine.DefaultEffort; Raise(nameof(SelectedEngine)); Raise(nameof(Author)); Raise(nameof(InputPlaceholder)); Raise(nameof(BusyText)); } @@ -242,7 +244,7 @@ class MainViewModel : ObservableObject if (!CanSend) return; var text = input.Trim(); var model = IsCustomModel ? customModel.Trim() : selectedModel.Id; - var effort = selectedEffort == DefaultEffort ? "" : selectedEffort; + var effort = selectedEffort == NoEffort ? "" : selectedEffort; Input = ""; IsBusy = true; Add("user", text); diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..70e627a --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Crea gli eseguibili single-file self-contained in dist//. +# Senza argomenti: win-x64 e linux-x64. Con argomenti: i rid indicati (es. linux-arm64). +# Funziona da Linux, WSL e macOS (la compilazione per un altro sistema non richiede quel sistema). +set -euo pipefail +cd "$(dirname "$0")/.." + +rids=("$@") +[ ${#rids[@]} -eq 0 ] && rids=(win-x64 linux-x64) + +for rid in "${rids[@]}"; do + echo "== $rid" + dotnet publish agent-wiki-ui.csproj -c Release -r "$rid" --self-contained -p:PublishSingleFile=true -o "dist/$rid" --nologo -v quiet + find "dist/$rid" -name '*.pdb' -delete # simboli delle librerie native: inutili a chi usa l'app +done + +echo +echo "Eseguibili pronti:" +for rid in "${rids[@]}"; do ls -lh "dist/$rid" | awk -v r="$rid" 'NR>1 {print " dist/" r "/" $9 " (" $5 ")"}'; done