diff --git a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs index 32f2f20d..f006f54f 100644 --- a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs +++ b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs @@ -266,9 +266,21 @@ public partial class AttachDocuments : MSGComponentBase /// private void ClaimDefaultZoneRole() { - if (!this.CatchAllDocuments || this.Scope is null) + if (!this.CatchAllDocuments) return; + if (this.Scope is null) + { + // + // There is nothing to claim: the surrounding page, assistant, or dialog is not a drop + // area at all. The flag would then do nothing, and silently -- which is how a zone ends + // up promising a behaviour it cannot deliver. So say it out loud: either the area needs + // a DropZoneScope, or the flag does not belong here. + // + this.Logger.LogWarning("The attachment zone '{Name}' wants to be the default target of its area, but it does not live in a drop zone scope. Dropping next to this zone will do nothing.", this.Name); + return; + } + this.isDefaultZone = this.Scope.TryBecomeDefaultZone(this); if (!this.isDefaultZone) this.Logger.LogDebug("The attachment zone '{Name}' asked to be the default target of its area, which another zone already is. It now takes only the drops aimed at itself.", this.Name); diff --git a/app/MindWork AI Studio/Components/PathDropZone.razor.cs b/app/MindWork AI Studio/Components/PathDropZone.razor.cs index fa86b320..6b0d6b2d 100644 --- a/app/MindWork AI Studio/Components/PathDropZone.razor.cs +++ b/app/MindWork AI Studio/Components/PathDropZone.razor.cs @@ -120,9 +120,21 @@ public partial class PathDropZone : MSGComponentBase /// private void ClaimDefaultZoneRole() { - if (!this.CatchAllDocuments || this.Scope is null) + if (!this.CatchAllDocuments) return; + if (this.Scope is null) + { + // + // There is nothing to claim: the surrounding page, assistant, or dialog is not a drop + // area at all. The flag would then do nothing, and silently -- which is how a zone ends + // up promising a behaviour it cannot deliver. So say it out loud: either the area needs + // a DropZoneScope, or the flag does not belong here. + // + this.Logger.LogWarning("The path drop zone '{ZoneId}' wants to be the default target of its area, but it does not live in a drop zone scope. Dropping next to this zone will do nothing.", this.dropZoneId); + return; + } + this.isDefaultZone = this.Scope.TryBecomeDefaultZone(this); if (!this.isDefaultZone) this.Logger.LogDebug("The path drop zone '{ZoneId}' asked to be the default target of its area, which another zone already is. It now takes only the drops aimed at itself.", this.dropZoneId); diff --git a/app/MindWork AI Studio/Components/ReadFileContent.razor.cs b/app/MindWork AI Studio/Components/ReadFileContent.razor.cs index 20218590..a64fc4c5 100644 --- a/app/MindWork AI Studio/Components/ReadFileContent.razor.cs +++ b/app/MindWork AI Studio/Components/ReadFileContent.razor.cs @@ -244,9 +244,21 @@ public partial class ReadFileContent : MSGComponentBase /// private void ClaimDefaultZoneRole() { - if (!this.CatchAllDocuments || this.Scope is null) + if (!this.CatchAllDocuments) return; + if (this.Scope is null) + { + // + // There is nothing to claim: the surrounding page, assistant, or dialog is not a drop + // area at all. The flag would then do nothing, and silently -- which is how a zone ends + // up promising a behaviour it cannot deliver. So say it out loud: either the area needs + // a DropZoneScope, or the flag does not belong here. + // + this.Logger.LogWarning("The file zone '{ZoneId}' wants to be the default target of its area, but it does not live in a drop zone scope. Dropping next to this zone will do nothing.", this.dropZoneId); + return; + } + this.isDefaultZone = this.Scope.TryBecomeDefaultZone(this); if (!this.isDefaultZone) this.Logger.LogDebug("The file zone '{ZoneId}' asked to be the default target of its area, which another zone already is. It now takes only the drops aimed at itself.", this.dropZoneId); diff --git a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor index 791eb151..c2b8f965 100644 --- a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor @@ -59,7 +59,7 @@ @T("Use the default system prompt") - + @T("Predefined User Input") @@ -83,6 +83,7 @@ HelperText="@T("Tell the AI your predefined user input.")" ReadOnly="@this.IsReadOnly" /> + @T("File Attachments") diff --git a/app/MindWork AI Studio/Dialogs/ProfileDialog.razor b/app/MindWork AI Studio/Dialogs/ProfileDialog.razor index a711e084..b72d3135 100644 --- a/app/MindWork AI Studio/Dialogs/ProfileDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ProfileDialog.razor @@ -47,7 +47,7 @@ HelperText="@T("Tell the AI something about yourself. What is your profession? How experienced are you in this profession? Which technologies do you like?")" ReadOnly="@this.IsReadOnly" /> - + - + @T("Please be aware that your profile info becomes part of the system prompt. This means it uses up context space — the “memory” the LLM uses to understand and respond to your request. If your profile is extremely long, the LLM may struggle to focus on your actual task.") diff --git a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogBatchProcessing.razor b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogBatchProcessing.razor index 941300f6..abab1c02 100644 --- a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogBatchProcessing.razor +++ b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogBatchProcessing.razor @@ -26,12 +26,12 @@ @if (this.SettingsManager.ConfigurationData.BatchProcessing.PromptSource is BatchProcessingPromptSource.FREE_PROMPT) { - + } else if (this.SettingsManager.ConfigurationData.BatchProcessing.PromptSource is BatchProcessingPromptSource.FILE_IMPORT) { - + } else