mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-21 09:18:00 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4d2574508 | ||
|
|
ceac9cefe5 |
No files matched your search
@@ -128,7 +128,7 @@ public partial class BiasOfTheDayAssistant : AssistantBaseCore
|
|||||||
ChatId = this.SettingsManager.ConfigurationData.BiasOfTheDay.BiasOfTheDayChatId,
|
ChatId = this.SettingsManager.ConfigurationData.BiasOfTheDay.BiasOfTheDayChatId,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Workspaces.IsChatExisting(biasChat))
|
if (WorkspaceBehaviour.IsChatExisting(biasChat))
|
||||||
{
|
{
|
||||||
MessageBus.INSTANCE.DeferMessage(this, Event.LOAD_CHAT, biasChat);
|
MessageBus.INSTANCE.DeferMessage(this, Event.LOAD_CHAT, biasChat);
|
||||||
this.NavigationManager.NavigateTo(Routes.CHAT);
|
this.NavigationManager.NavigateTo(Routes.CHAT);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public partial class Changelog
|
|||||||
|
|
||||||
public static readonly Log[] LOGS =
|
public static readonly Log[] LOGS =
|
||||||
[
|
[
|
||||||
|
new (195, "v0.9.20, build 195 (2024-11-16 20:44 UTC)", "v0.9.20.md"),
|
||||||
new (194, "v0.9.19, build 194 (2024-11-14 05:58 UTC)", "v0.9.19.md"),
|
new (194, "v0.9.19, build 194 (2024-11-14 05:58 UTC)", "v0.9.19.md"),
|
||||||
new (193, "v0.9.18, build 193 (2024-11-09 21:10 UTC)", "v0.9.18.md"),
|
new (193, "v0.9.18, build 193 (2024-11-09 21:10 UTC)", "v0.9.18.md"),
|
||||||
new (192, "v0.9.17, build 192 (2024-11-03 11:11 UTC)", "v0.9.17.md"),
|
new (192, "v0.9.17, build 192 (2024-11-03 11:11 UTC)", "v0.9.17.md"),
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
using AIStudio.Chat;
|
using AIStudio.Chat;
|
||||||
using AIStudio.Dialogs;
|
using AIStudio.Dialogs;
|
||||||
@@ -41,18 +40,6 @@ public partial class Workspaces : ComponentBase
|
|||||||
private const Placement WORKSPACE_ITEM_TOOLTIP_PLACEMENT = Placement.Bottom;
|
private const Placement WORKSPACE_ITEM_TOOLTIP_PLACEMENT = Placement.Bottom;
|
||||||
|
|
||||||
public static readonly Guid WORKSPACE_ID_BIAS = Guid.Parse("82050a4e-ee92-43d7-8ee5-ab512f847e02");
|
public static readonly Guid WORKSPACE_ID_BIAS = Guid.Parse("82050a4e-ee92-43d7-8ee5-ab512f847e02");
|
||||||
private static readonly JsonSerializerOptions JSON_OPTIONS = new()
|
|
||||||
{
|
|
||||||
WriteIndented = true,
|
|
||||||
AllowTrailingCommas = true,
|
|
||||||
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
|
|
||||||
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
|
|
||||||
PropertyNameCaseInsensitive = true,
|
|
||||||
Converters =
|
|
||||||
{
|
|
||||||
new JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseUpper),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly List<TreeItemData<ITreeItem>> treeItems = new();
|
private readonly List<TreeItemData<ITreeItem>> treeItems = new();
|
||||||
|
|
||||||
@@ -160,16 +147,6 @@ public partial class Workspaces : ComponentBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> LoadWorkspaceName(Guid workspaceId)
|
|
||||||
{
|
|
||||||
if(workspaceId == Guid.Empty)
|
|
||||||
return string.Empty;
|
|
||||||
|
|
||||||
var workspacePath = Path.Join(SettingsManager.DataDirectory, "workspaces", workspaceId.ToString());
|
|
||||||
var workspaceNamePath = Path.Join(workspacePath, "name");
|
|
||||||
return await File.ReadAllTextAsync(workspaceNamePath, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task<IReadOnlyCollection<TreeItemData<ITreeItem>>> LoadWorkspaces()
|
private async Task<IReadOnlyCollection<TreeItemData<ITreeItem>>> LoadWorkspaces()
|
||||||
{
|
{
|
||||||
var workspaces = new List<TreeItemData<ITreeItem>>();
|
var workspaces = new List<TreeItemData<ITreeItem>>();
|
||||||
@@ -261,22 +238,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
|
|
||||||
public async Task StoreChat(ChatThread chat, bool reloadTreeItems = true)
|
public async Task StoreChat(ChatThread chat, bool reloadTreeItems = true)
|
||||||
{
|
{
|
||||||
string chatDirectory;
|
await WorkspaceBehaviour.StoreChat(chat);
|
||||||
if (chat.WorkspaceId == Guid.Empty)
|
|
||||||
chatDirectory = Path.Join(SettingsManager.DataDirectory, "tempChats", chat.ChatId.ToString());
|
|
||||||
else
|
|
||||||
chatDirectory = Path.Join(SettingsManager.DataDirectory, "workspaces", chat.WorkspaceId.ToString(), chat.ChatId.ToString());
|
|
||||||
|
|
||||||
// Ensure the directory exists:
|
|
||||||
Directory.CreateDirectory(chatDirectory);
|
|
||||||
|
|
||||||
// Save the chat name:
|
|
||||||
var chatNamePath = Path.Join(chatDirectory, "name");
|
|
||||||
await File.WriteAllTextAsync(chatNamePath, chat.Name);
|
|
||||||
|
|
||||||
// Save the thread as thread.json:
|
|
||||||
var chatPath = Path.Join(chatDirectory, "thread.json");
|
|
||||||
await File.WriteAllTextAsync(chatPath, JsonSerializer.Serialize(chat, JSON_OPTIONS), Encoding.UTF8);
|
|
||||||
|
|
||||||
// Reload the tree items:
|
// Reload the tree items:
|
||||||
if(reloadTreeItems)
|
if(reloadTreeItems)
|
||||||
@@ -284,24 +246,6 @@ public partial class Workspaces : ComponentBase
|
|||||||
|
|
||||||
this.StateHasChanged();
|
this.StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task LoadChat(LoadChat loadChat)
|
|
||||||
{
|
|
||||||
var chatPath = loadChat.WorkspaceId == Guid.Empty
|
|
||||||
? Path.Join(SettingsManager.DataDirectory, "tempChats", loadChat.ChatId.ToString())
|
|
||||||
: Path.Join(SettingsManager.DataDirectory, "workspaces", loadChat.WorkspaceId.ToString(), loadChat.ChatId.ToString());
|
|
||||||
|
|
||||||
await this.LoadChat(chatPath, switchToChat: true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsChatExisting(LoadChat loadChat)
|
|
||||||
{
|
|
||||||
var chatPath = loadChat.WorkspaceId == Guid.Empty
|
|
||||||
? Path.Join(SettingsManager.DataDirectory, "tempChats", loadChat.ChatId.ToString())
|
|
||||||
: Path.Join(SettingsManager.DataDirectory, "workspaces", loadChat.WorkspaceId.ToString(), loadChat.ChatId.ToString());
|
|
||||||
|
|
||||||
return Directory.Exists(chatPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task<ChatThread?> LoadChat(string? chatPath, bool switchToChat)
|
private async Task<ChatThread?> LoadChat(string? chatPath, bool switchToChat)
|
||||||
{
|
{
|
||||||
@@ -328,7 +272,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var chatData = await File.ReadAllTextAsync(Path.Join(chatPath, "thread.json"), Encoding.UTF8);
|
var chatData = await File.ReadAllTextAsync(Path.Join(chatPath, "thread.json"), Encoding.UTF8);
|
||||||
var chat = JsonSerializer.Deserialize<ChatThread>(chatData, JSON_OPTIONS);
|
var chat = JsonSerializer.Deserialize<ChatThread>(chatData, WorkspaceBehaviour.JSON_OPTIONS);
|
||||||
if (switchToChat)
|
if (switchToChat)
|
||||||
{
|
{
|
||||||
this.CurrentChatThread = chat;
|
this.CurrentChatThread = chat;
|
||||||
@@ -354,7 +298,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
|
|
||||||
if (askForConfirmation)
|
if (askForConfirmation)
|
||||||
{
|
{
|
||||||
var workspaceName = await this.LoadWorkspaceName(chat.WorkspaceId);
|
var workspaceName = await WorkspaceBehaviour.LoadWorkspaceName(chat.WorkspaceId);
|
||||||
var dialogParameters = new DialogParameters
|
var dialogParameters = new DialogParameters
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@@ -419,7 +363,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var workspaceId = Guid.Parse(Path.GetFileName(workspacePath));
|
var workspaceId = Guid.Parse(Path.GetFileName(workspacePath));
|
||||||
var workspaceName = await this.LoadWorkspaceName(workspaceId);
|
var workspaceName = await WorkspaceBehaviour.LoadWorkspaceName(workspaceId);
|
||||||
var dialogParameters = new DialogParameters
|
var dialogParameters = new DialogParameters
|
||||||
{
|
{
|
||||||
{ "Message", $"Please enter a new or edit the name for your workspace '{workspaceName}':" },
|
{ "Message", $"Please enter a new or edit the name for your workspace '{workspaceName}':" },
|
||||||
@@ -482,7 +426,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var workspaceId = Guid.Parse(Path.GetFileName(workspacePath));
|
var workspaceId = Guid.Parse(Path.GetFileName(workspacePath));
|
||||||
var workspaceName = await this.LoadWorkspaceName(workspaceId);
|
var workspaceName = await WorkspaceBehaviour.LoadWorkspaceName(workspaceId);
|
||||||
|
|
||||||
// Determine how many chats are in the workspace:
|
// Determine how many chats are in the workspace:
|
||||||
var chatCount = Directory.EnumerateDirectories(workspacePath).Count();
|
var chatCount = Directory.EnumerateDirectories(workspacePath).Count();
|
||||||
@@ -572,7 +516,7 @@ public partial class Workspaces : ComponentBase
|
|||||||
ChatId = Guid.NewGuid(),
|
ChatId = Guid.NewGuid(),
|
||||||
Name = string.Empty,
|
Name = string.Empty,
|
||||||
Seed = this.RNG.Next(),
|
Seed = this.RNG.Next(),
|
||||||
SystemPrompt = "You are a helpful assistant!",
|
SystemPrompt = SystemPrompts.DEFAULT,
|
||||||
Blocks = [],
|
Blocks = [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -112,18 +112,19 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable
|
|||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
if (firstRender && this.workspaces is not null && this.chatThread is not null && this.mustStoreChat)
|
if (firstRender && this.chatThread is not null && this.mustStoreChat)
|
||||||
{
|
{
|
||||||
this.mustStoreChat = false;
|
this.mustStoreChat = false;
|
||||||
await this.workspaces.StoreChat(this.chatThread, false);
|
await WorkspaceBehaviour.StoreChat(this.chatThread);
|
||||||
this.currentWorkspaceId = this.chatThread.WorkspaceId;
|
this.currentWorkspaceId = this.chatThread.WorkspaceId;
|
||||||
this.currentWorkspaceName = await this.workspaces.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
this.currentWorkspaceName = await WorkspaceBehaviour.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstRender && this.workspaces is not null && this.mustLoadChat)
|
if (firstRender && this.mustLoadChat)
|
||||||
{
|
{
|
||||||
this.mustLoadChat = false;
|
this.mustLoadChat = false;
|
||||||
await this.workspaces.LoadChat(this.loadChat);
|
this.chatThread = await WorkspaceBehaviour.LoadChat(this.loadChat);
|
||||||
|
this.StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.mustScrollToBottomAfterRender)
|
if(this.mustScrollToBottomAfterRender)
|
||||||
@@ -323,16 +324,22 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable
|
|||||||
|
|
||||||
private async Task SaveThread()
|
private async Task SaveThread()
|
||||||
{
|
{
|
||||||
if(this.workspaces is null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(this.chatThread is null)
|
if(this.chatThread is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this.CanThreadBeSaved)
|
if (!this.CanThreadBeSaved)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
//
|
||||||
|
// When the workspace component is visible, we store the chat
|
||||||
|
// through the workspace component. The advantage of this is that
|
||||||
|
// the workspace gets updated automatically when the chat is saved.
|
||||||
|
//
|
||||||
|
if (this.workspaces is not null)
|
||||||
|
await this.workspaces.StoreChat(this.chatThread);
|
||||||
|
else
|
||||||
|
await WorkspaceBehaviour.StoreChat(this.chatThread);
|
||||||
|
|
||||||
await this.workspaces.StoreChat(this.chatThread);
|
|
||||||
this.hasUnsavedChanges = false;
|
this.hasUnsavedChanges = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,7 +469,7 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable
|
|||||||
await this.SaveThread();
|
await this.SaveThread();
|
||||||
|
|
||||||
this.currentWorkspaceId = this.chatThread.WorkspaceId;
|
this.currentWorkspaceId = this.chatThread.WorkspaceId;
|
||||||
this.currentWorkspaceName = await this.workspaces.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
this.currentWorkspaceName = await WorkspaceBehaviour.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadedChatChanged()
|
private async Task LoadedChatChanged()
|
||||||
@@ -474,7 +481,7 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable
|
|||||||
this.hasUnsavedChanges = false;
|
this.hasUnsavedChanges = false;
|
||||||
this.userInput = string.Empty;
|
this.userInput = string.Empty;
|
||||||
this.currentWorkspaceId = this.chatThread?.WorkspaceId ?? Guid.Empty;
|
this.currentWorkspaceId = this.chatThread?.WorkspaceId ?? Guid.Empty;
|
||||||
this.currentWorkspaceName = this.chatThread is null ? string.Empty : await this.workspaces.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
this.currentWorkspaceName = this.chatThread is null ? string.Empty : await WorkspaceBehaviour.LoadWorkspaceName(this.chatThread.WorkspaceId);
|
||||||
|
|
||||||
this.userInput = string.Empty;
|
this.userInput = string.Empty;
|
||||||
if (this.SettingsManager.ConfigurationData.Chat.ShowLatestMessageAfterLoading)
|
if (this.SettingsManager.ConfigurationData.Chat.ShowLatestMessageAfterLoading)
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
using AIStudio.Chat;
|
||||||
|
using AIStudio.Settings;
|
||||||
|
|
||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public static class WorkspaceBehaviour
|
||||||
|
{
|
||||||
|
public static readonly JsonSerializerOptions JSON_OPTIONS = new()
|
||||||
|
{
|
||||||
|
WriteIndented = true,
|
||||||
|
AllowTrailingCommas = true,
|
||||||
|
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
|
||||||
|
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
|
||||||
|
PropertyNameCaseInsensitive = true,
|
||||||
|
Converters =
|
||||||
|
{
|
||||||
|
new JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseUpper),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static bool IsChatExisting(LoadChat loadChat)
|
||||||
|
{
|
||||||
|
var chatPath = loadChat.WorkspaceId == Guid.Empty
|
||||||
|
? Path.Join(SettingsManager.DataDirectory, "tempChats", loadChat.ChatId.ToString())
|
||||||
|
: Path.Join(SettingsManager.DataDirectory, "workspaces", loadChat.WorkspaceId.ToString(), loadChat.ChatId.ToString());
|
||||||
|
|
||||||
|
return Directory.Exists(chatPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task StoreChat(ChatThread chat)
|
||||||
|
{
|
||||||
|
string chatDirectory;
|
||||||
|
if (chat.WorkspaceId == Guid.Empty)
|
||||||
|
chatDirectory = Path.Join(SettingsManager.DataDirectory, "tempChats", chat.ChatId.ToString());
|
||||||
|
else
|
||||||
|
chatDirectory = Path.Join(SettingsManager.DataDirectory, "workspaces", chat.WorkspaceId.ToString(), chat.ChatId.ToString());
|
||||||
|
|
||||||
|
// Ensure the directory exists:
|
||||||
|
Directory.CreateDirectory(chatDirectory);
|
||||||
|
|
||||||
|
// Save the chat name:
|
||||||
|
var chatNamePath = Path.Join(chatDirectory, "name");
|
||||||
|
await File.WriteAllTextAsync(chatNamePath, chat.Name);
|
||||||
|
|
||||||
|
// Save the thread as thread.json:
|
||||||
|
var chatPath = Path.Join(chatDirectory, "thread.json");
|
||||||
|
await File.WriteAllTextAsync(chatPath, JsonSerializer.Serialize(chat, JSON_OPTIONS), Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<ChatThread?> LoadChat(LoadChat loadChat)
|
||||||
|
{
|
||||||
|
var chatPath = loadChat.WorkspaceId == Guid.Empty
|
||||||
|
? Path.Join(SettingsManager.DataDirectory, "tempChats", loadChat.ChatId.ToString())
|
||||||
|
: Path.Join(SettingsManager.DataDirectory, "workspaces", loadChat.WorkspaceId.ToString(), loadChat.ChatId.ToString());
|
||||||
|
|
||||||
|
if(!Directory.Exists(chatPath))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var chatData = await File.ReadAllTextAsync(Path.Join(chatPath, "thread.json"), Encoding.UTF8);
|
||||||
|
var chat = JsonSerializer.Deserialize<ChatThread>(chatData, JSON_OPTIONS);
|
||||||
|
return chat;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<string> LoadWorkspaceName(Guid workspaceId)
|
||||||
|
{
|
||||||
|
if(workspaceId == Guid.Empty)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
|
var workspacePath = Path.Join(SettingsManager.DataDirectory, "workspaces", workspaceId.ToString());
|
||||||
|
var workspaceNamePath = Path.Join(workspacePath, "name");
|
||||||
|
return await File.ReadAllTextAsync(workspaceNamePath, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -63,8 +63,11 @@ def "main fix_web_assets" []: nothing -> nothing {
|
|||||||
mkdir wwwroot/system
|
mkdir wwwroot/system
|
||||||
|
|
||||||
# Copy the web assets from the first RID to the source project:
|
# Copy the web assets from the first RID to the source project:
|
||||||
let source_path: glob = $"bin/release/net8.0/($rid)/publish/wwwroot/_content/*"
|
let source_paths = glob --depth 99 bin/release/net8.0/($rid)/publish/wwwroot/_content/*
|
||||||
cp --recursive --force --update $source_path wwwroot/system/
|
|
||||||
|
for source_path in $source_paths {
|
||||||
|
cp --recursive --force --update $source_path wwwroot/system/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def "main publish" []: nothing -> nothing {
|
def "main publish" []: nothing -> nothing {
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# v0.9.20, build 195 (2024-11-16 20:44 UTC)
|
||||||
|
- Fixed bugs related to storing and loading chats when the workspaces were docked to the left and were collapsed.
|
||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
0.9.19
|
0.9.20
|
||||||
2024-11-14 05:58:02 UTC
|
2024-11-15 20:44:07 UTC
|
||||||
194
|
195
|
||||||
8.0.111 (commit f3835a7fb4)
|
8.0.111 (commit f3835a7fb4)
|
||||||
8.0.11 (commit 9cb3b725e3)
|
8.0.11 (commit 9cb3b725e3)
|
||||||
1.82.0 (commit f6e511eec)
|
1.82.0 (commit f6e511eec)
|
||||||
7.15.0
|
7.15.0
|
||||||
1.8.1
|
1.8.1
|
||||||
9c0dea99271, release
|
ca46dde69c0, release
|
||||||
Generated
+1
-1
@@ -2174,7 +2174,7 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mindwork-ai-studio"
|
name = "mindwork-ai-studio"
|
||||||
version = "0.9.19"
|
version = "0.9.20"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"arboard",
|
"arboard",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mindwork-ai-studio"
|
name = "mindwork-ai-studio"
|
||||||
version = "0.9.19"
|
version = "0.9.20"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "MindWork AI Studio"
|
description = "MindWork AI Studio"
|
||||||
authors = ["Thorsten Sommer"]
|
authors = ["Thorsten Sommer"]
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
"package": {
|
"package": {
|
||||||
"productName": "MindWork AI Studio",
|
"productName": "MindWork AI Studio",
|
||||||
"version": "0.9.19"
|
"version": "0.9.20"
|
||||||
},
|
},
|
||||||
"tauri": {
|
"tauri": {
|
||||||
"allowlist": {
|
"allowlist": {
|
||||||
|
|||||||
Reference in new issue
Block a user