Script di publish e modello più piccolo con effort low come predefiniti

scripts/publish.sh crea in dist/ gli eseguibili single-file per win-x64 e
linux-x64 (o i rid indicati) e toglie i simboli delle librerie native;
dist/ è ignorata da git. Ogni motore dichiara DefaultModelId (Haiku 5.5 per
Claude Code, GPT-5.6 Luna per Codex) e il ViewModel parte da quel modello con
effort low, all'avvio e a ogni cambio di CLI; "Predefinito" resta scelta
possibile.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-10-15 12:03:03 +02:00
1 parent d6f293722e
commit d7e8a341ab
4 files changed
+32 -5

No files matched your search

+1
View File
@@ -1,2 +1,3 @@
bin/ bin/
obj/ obj/
dist/
+5
View File
@@ -19,6 +19,9 @@ abstract class Engine
public abstract string Executable { get; } public abstract string Executable { get; }
public abstract ModelOption[] Models { get; } public abstract ModelOption[] Models { get; }
public abstract string[] Efforts { get; } public abstract string[] Efforts { get; }
/// <summary>Modello scelto all'avvio e a ogni cambio di CLI: il più piccolo, per risposte rapide ed economiche.</summary>
public abstract string DefaultModelId { get; }
public string DefaultEffort => "low";
/// <summary>True se l'id di sessione lo genera il motore e l'app lo legge dall'output.</summary> /// <summary>True se l'id di sessione lo genera il motore e l'app lo legge dall'output.</summary>
public abstract bool OwnsSessionId { get; } 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[] Efforts { get; } = ["low", "medium", "high", "xhigh", "max"];
public override string DefaultModelId => "claude-haiku-5-5";
public override List<string> BuildArgs(string prompt, string? sessionId, bool resume, string model, string effort, bool structured) public override List<string> 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[] Efforts { get; } = ["low", "medium", "high", "xhigh", "max"];
public override string DefaultModelId => "gpt-5.6-luna";
public override List<string> BuildArgs(string prompt, string? sessionId, bool resume, string model, string effort, bool structured) public override List<string> BuildArgs(string prompt, string? sessionId, bool resume, string model, string effort, bool structured)
{ {
+7 -5
View File
@@ -63,7 +63,7 @@ class MainViewModel : ObservableObject
{ {
static readonly ModelOption Default = new("Predefinito", ""); static readonly ModelOption Default = new("Predefinito", "");
static readonly ModelOption Custom = new("Altro ID…", "__custom"); static readonly ModelOption Custom = new("Altro ID…", "__custom");
const string DefaultEffort = "Predefinito"; const string NoEffort = "Predefinito";
public ObservableCollection<MessageVm> Messages { get; } = []; public ObservableCollection<MessageVm> Messages { get; } = [];
public ObservableCollection<ChatItem> Chats { get; } = []; public ObservableCollection<ChatItem> Chats { get; } = [];
@@ -102,7 +102,7 @@ class MainViewModel : ObservableObject
bool busy, updating, sidebarOpen = true; bool busy, updating, sidebarOpen = true;
ModelOption selectedModel = Default; ModelOption selectedModel = Default;
string customModel = ""; string customModel = "";
string selectedEffort = DefaultEffort; string selectedEffort = NoEffort;
readonly RelayCommand<object> send, newChat; readonly RelayCommand<object> send, newChat;
public MainViewModel() public MainViewModel()
@@ -188,8 +188,10 @@ class MainViewModel : ObservableObject
{ {
selectedEngine = choice; selectedEngine = choice;
ModelChoices = [Default, .. choice.Engine.Models, Custom]; ModelChoices = [Default, .. choice.Engine.Models, Custom];
EffortChoices = [DefaultEffort, .. choice.Engine.Efforts]; EffortChoices = [NoEffort, .. choice.Engine.Efforts];
SelectedModel = Default; CustomModel = ""; SelectedEffort = DefaultEffort; // 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)); Raise(nameof(SelectedEngine)); Raise(nameof(Author)); Raise(nameof(InputPlaceholder)); Raise(nameof(BusyText));
} }
@@ -242,7 +244,7 @@ class MainViewModel : ObservableObject
if (!CanSend) return; if (!CanSend) return;
var text = input.Trim(); var text = input.Trim();
var model = IsCustomModel ? customModel.Trim() : selectedModel.Id; var model = IsCustomModel ? customModel.Trim() : selectedModel.Id;
var effort = selectedEffort == DefaultEffort ? "" : selectedEffort; var effort = selectedEffort == NoEffort ? "" : selectedEffort;
Input = ""; IsBusy = true; Input = ""; IsBusy = true;
Add("user", text); Add("user", text);
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Crea gli eseguibili single-file self-contained in dist/<rid>/.
# 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