This commit is contained in:
@@ -170,7 +170,7 @@ input:focus, textarea:focus, select:focus {
|
||||
height: 100dvh;
|
||||
min-width: 0;
|
||||
max-width: 260px;
|
||||
overflow-x: hidden;
|
||||
overflow: hidden auto;
|
||||
}
|
||||
.brand { display: flex; gap: 12px; align-items: center; min-width: 0; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
|
||||
.brand-mark { width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; background: #111827; color: #fff; }
|
||||
@@ -179,7 +179,7 @@ input:focus, textarea:focus, select:focus {
|
||||
.brand small { display: block; color: var(--muted); margin-top: 2px; }
|
||||
.brand > div { min-width: 0; overflow: hidden; }
|
||||
.brand strong, .brand small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.nav-groups { display: flex; flex-direction: column; gap: 14px; flex: 1; min-width: 0; overflow-y: auto; overflow-x: hidden; scrollbar-gutter: stable; }
|
||||
.nav-groups { display: flex; flex-direction: column; gap: 14px; flex: 1 0 auto; min-width: 0; overflow: visible; }
|
||||
.nav-group { display: flex; flex-direction: column; gap: 5px; min-width: 0; overflow-x: hidden; }
|
||||
.nav-group p {
|
||||
margin: 0 0 2px;
|
||||
@@ -632,7 +632,7 @@ summary { cursor: pointer; font-weight: 900; margin-bottom: 10px; }
|
||||
|
||||
@media (max-width: 820px) {
|
||||
.app-shell { grid-template-columns: 1fr; }
|
||||
.sidebar { position: static; height: auto; }
|
||||
.sidebar { position: static; height: auto; max-width: none; overflow: visible; }
|
||||
.nav-groups { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
.workspace { padding: 16px; }
|
||||
.topbar, .section-head { align-items: stretch; flex-direction: column; }
|
||||
|
||||
@@ -10,15 +10,15 @@
|
||||
"fullInstaller": {
|
||||
"fileName": "YMhut_Box_WinUI_Setup_2.0.7.6.exe",
|
||||
"url": "https://update.ymhut.cn/downloads/YMhut_Box_WinUI_Setup_2.0.7.6.exe",
|
||||
"sha256": "38990585884af04fe4b86344418e9021dcf319bce351cd46bbe18762bd18bd1d",
|
||||
"size": 113488208,
|
||||
"sha256": "a7f9fce2b13bc0569bec4b2317531b6be447e10c26e5f4704dfdcd6d570c0d40",
|
||||
"size": 113490312,
|
||||
"version": "2.0.7.6"
|
||||
},
|
||||
"msix": {
|
||||
"fileName": "YMhutBox_2.0.7.6_x64.msix",
|
||||
"url": "https://update.ymhut.cn/downloads/YMhutBox_2.0.7.6_x64.msix",
|
||||
"sha256": "015820df9a5076d3759619fc90cb23b0250d6828adb6713ac48d0587162e4070",
|
||||
"size": 259972073,
|
||||
"sha256": "1f1e79d391edd0084e09c482d958026b5afc70abd33ff61e0880f12c903d0cb1",
|
||||
"size": 259974016,
|
||||
"version": "2.0.7.6"
|
||||
},
|
||||
"appInstaller": {
|
||||
@@ -32,15 +32,15 @@
|
||||
"fullInstaller": {
|
||||
"fileName": "YMhut_Box_WinUI_Setup_2.0.7.6.exe",
|
||||
"url": "https://update.ymhut.cn/downloads/YMhut_Box_WinUI_Setup_2.0.7.6.exe",
|
||||
"sha256": "38990585884af04fe4b86344418e9021dcf319bce351cd46bbe18762bd18bd1d",
|
||||
"size": 113488208,
|
||||
"sha256": "a7f9fce2b13bc0569bec4b2317531b6be447e10c26e5f4704dfdcd6d570c0d40",
|
||||
"size": 113490312,
|
||||
"version": "2.0.7.6"
|
||||
},
|
||||
"msix": {
|
||||
"fileName": "YMhutBox_2.0.7.6_x64.msix",
|
||||
"url": "https://update.ymhut.cn/downloads/YMhutBox_2.0.7.6_x64.msix",
|
||||
"sha256": "015820df9a5076d3759619fc90cb23b0250d6828adb6713ac48d0587162e4070",
|
||||
"size": 259972073,
|
||||
"sha256": "1f1e79d391edd0084e09c482d958026b5afc70abd33ff61e0880f12c903d0cb1",
|
||||
"size": 259974016,
|
||||
"version": "2.0.7.6"
|
||||
},
|
||||
"appInstaller": {
|
||||
@@ -56,5 +56,5 @@
|
||||
"updateInfo": "The official update-info catalog only describes the full offline installer, MSIX, and appinstaller artifacts.",
|
||||
"distribution": "The update channel publishes the full offline installer, MSIX, and appinstaller artifacts."
|
||||
},
|
||||
"createdAt": "2026-06-30T02:26:21.1755219Z"
|
||||
"createdAt": "2026-06-30T03:46:00.7795331Z"
|
||||
}
|
||||
@@ -263,13 +263,14 @@ public sealed class OpenSourceReferenceService(AppPaths paths, ILogService? logS
|
||||
|
||||
private static IEnumerable<(string Name, string Version)> StaticPackageFallback()
|
||||
{
|
||||
yield return ("Microsoft.Data.Sqlite", "10.0.0");
|
||||
yield return ("Microsoft.Extensions.DependencyInjection", "10.0.0");
|
||||
yield return ("Microsoft.Data.Sqlite", "10.0.9");
|
||||
yield return ("Microsoft.Extensions.DependencyInjection", "10.0.9");
|
||||
yield return ("Microsoft.Web.WebView2", "1.0.3967.48");
|
||||
yield return ("Microsoft.WindowsAppSDK", "1.8.260416003");
|
||||
yield return ("QRCoder", "1.8.0");
|
||||
yield return ("System.Drawing.Common", "10.0.0");
|
||||
yield return ("System.Management", "10.0.0");
|
||||
yield return ("SQLitePCLRaw.bundle_e_sqlite3", "3.0.3");
|
||||
yield return ("System.Drawing.Common", "10.0.9");
|
||||
yield return ("System.Management", "10.0.9");
|
||||
yield return ("ZXing.Net", "0.16.11");
|
||||
}
|
||||
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.9" />
|
||||
<PackageReference Include="QRCoder" Version="1.8.0" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.0" />
|
||||
<PackageReference Include="System.Management" Version="10.0.0" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="3.0.3" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.9" />
|
||||
<PackageReference Include="System.Management" Version="10.0.9" />
|
||||
<PackageReference Include="ZXing.Net" Version="0.16.11" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -171,7 +171,7 @@ public sealed class FeedbackServiceTests
|
||||
[TestMethod]
|
||||
public void FeedbackSubmissionUsesUnifiedManagementEndpoint()
|
||||
{
|
||||
Assert.AreEqual("https://update.ymhut.cn/", FeedbackSubmissionService.Endpoint);
|
||||
StringAssert.StartsWith(FeedbackSubmissionService.Endpoint, "https://update.ymhut.cn/");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed class RemoteMediaCatalogTests
|
||||
|
||||
Assert.AreEqual("1.0.6", catalog.LayoutVersion);
|
||||
Assert.AreEqual("grid", catalog.UiConfig.DefaultView);
|
||||
Assert.IsTrue(catalog.Categories.Count >= 2);
|
||||
Assert.IsGreaterThanOrEqualTo(2, catalog.Categories.Count);
|
||||
|
||||
var image = catalog.Categories.Single(category => category.Id == "image");
|
||||
Assert.IsTrue(image.Enabled);
|
||||
@@ -39,7 +39,7 @@ public sealed class RemoteMediaCatalogTests
|
||||
var catalog = RemoteMediaCatalogParser.Parse(ReadRepoFile("box-old", "server", "media-types.json"));
|
||||
|
||||
Assert.AreEqual("1.0.8", catalog.LayoutVersion);
|
||||
Assert.IsTrue(catalog.Categories.Count >= 2);
|
||||
Assert.IsGreaterThanOrEqualTo(2, catalog.Categories.Count);
|
||||
Assert.IsTrue(catalog.Categories.Any(category => category.Id == "image" && category.Sources.Count >= 7));
|
||||
Assert.IsTrue(catalog.Categories.Any(category => category.Id == "video" && category.Sources.Any(source => source.Id == "radom_xjj_mv")));
|
||||
}
|
||||
@@ -189,7 +189,8 @@ public sealed class RemoteMediaCatalogTests
|
||||
var remote = await service.LoadAsync(forceRefresh: true);
|
||||
|
||||
Assert.AreEqual(RemoteMediaCatalogLoadSource.Remote, remote.Source);
|
||||
Assert.IsTrue(api.LastUri?.Query.Contains("_=", StringComparison.Ordinal) == true);
|
||||
Assert.IsNotNull(api.LastUri);
|
||||
StringAssert.Contains(api.LastUri.Query, "_=");
|
||||
Assert.IsTrue(File.Exists(Path.Combine(paths.Cache, "remote-media", "media-types.json")));
|
||||
|
||||
var fallback = new RemoteMediaCatalogService(paths, new FakeApiManager(string.Empty, success: false));
|
||||
|
||||
@@ -135,7 +135,7 @@ public sealed class RemoteMediaResolverTests
|
||||
await resolver.ResolveMediaAsync("https://example.test/random", RemoteMediaKind.Image);
|
||||
|
||||
var randomRequests = observed.Where(item => item.Uri.AbsolutePath == "/random").ToArray();
|
||||
Assert.IsTrue(randomRequests.Length >= 4);
|
||||
Assert.IsGreaterThanOrEqualTo(4, randomRequests.Length);
|
||||
Assert.AreNotEqual(randomRequests[0].Uri.Query, randomRequests[2].Uri.Query);
|
||||
Assert.IsTrue(randomRequests.All(item => item.NoCache));
|
||||
Assert.IsTrue(randomRequests.All(item => item.NoStore));
|
||||
|
||||
@@ -455,7 +455,7 @@ public sealed class StartupCheckTests
|
||||
|
||||
Assert.IsNotNull(latest);
|
||||
Assert.AreEqual("legacy", latest.ManifestIdentity);
|
||||
Assert.AreEqual(1, latest.Items.Count);
|
||||
Assert.HasCount(1, latest.Items);
|
||||
Assert.IsFalse(File.Exists(legacyPath));
|
||||
Assert.AreEqual(Path.Combine(paths.Logs, AppDatabasePaths.MainDatabaseFileName), store.DatabasePath);
|
||||
}
|
||||
@@ -480,12 +480,13 @@ public sealed class StartupCheckTests
|
||||
|
||||
await pipeline.RunAsync(new InlineProgress<StartupInitializationStageProgress>(progress.Add));
|
||||
|
||||
Assert.IsTrue(progress.Count > 0);
|
||||
Assert.IsNotEmpty(progress);
|
||||
Assert.AreEqual(100, progress[^1].Progress);
|
||||
for (var index = 1; index < progress.Count; index++)
|
||||
{
|
||||
Assert.IsTrue(
|
||||
progress[index].Progress >= progress[index - 1].Progress,
|
||||
Assert.IsGreaterThanOrEqualTo(
|
||||
progress[index - 1].Progress,
|
||||
progress[index].Progress,
|
||||
$"Progress moved backwards at {index}: {progress[index - 1].Progress} -> {progress[index].Progress}");
|
||||
}
|
||||
|
||||
|
||||
@@ -560,7 +560,7 @@ public sealed class ToolExecutorTests
|
||||
Assert.IsTrue(result.Ok);
|
||||
Assert.IsNotNull(result.Document);
|
||||
Assert.AreEqual("error", result.Document.Status);
|
||||
Assert.IsTrue(result.Document.Blocks.Count >= 2);
|
||||
Assert.IsGreaterThanOrEqualTo(2, result.Document.Blocks.Count);
|
||||
StringAssert.Contains(result.Output, "源站拒绝");
|
||||
Assert.IsFalse(result.Output.Contains(endpoint.SourceUrl, StringComparison.OrdinalIgnoreCase));
|
||||
Assert.IsFalse(result.Output.Contains("接口地址", StringComparison.OrdinalIgnoreCase));
|
||||
@@ -627,7 +627,7 @@ public sealed class ToolExecutorTests
|
||||
Assert.IsNotNull(result.Document);
|
||||
var cards = result.Document.Blocks.FirstOrDefault(block => block.Kind == ToolResultBlockKind.RankedList);
|
||||
Assert.IsNotNull(cards);
|
||||
Assert.AreEqual(2, cards.Items.Count);
|
||||
Assert.HasCount(2, cards.Items);
|
||||
Assert.AreEqual("1", cards.Items[0].Leading);
|
||||
StringAssert.Contains(cards.Items[0].Title, "Hot title one");
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ public sealed class ToolResultExperienceCatalogTests
|
||||
var catalog = new ToolCatalog(ToolCatalog.DefaultModules());
|
||||
var experiences = new ToolResultExperienceCatalog(catalog);
|
||||
|
||||
Assert.AreEqual(catalog.Modules.Count, experiences.Experiences.Count);
|
||||
Assert.HasCount(catalog.Modules.Count, experiences.Experiences);
|
||||
|
||||
var ids = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var module in catalog.Modules)
|
||||
@@ -32,7 +32,7 @@ public sealed class ToolResultExperienceCatalogTests
|
||||
var catalog = new ToolCatalog(ToolCatalog.DefaultModules());
|
||||
var experiences = new ToolResultExperienceCatalog(catalog);
|
||||
|
||||
Assert.AreEqual(catalog.Modules.Count, experiences.PageExperiences.Count);
|
||||
Assert.HasCount(catalog.Modules.Count, experiences.PageExperiences);
|
||||
|
||||
var ids = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var module in catalog.Modules)
|
||||
@@ -42,8 +42,8 @@ public sealed class ToolResultExperienceCatalogTests
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(experience.ExperienceId), module.Id);
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(experience.InputLayout), module.Id);
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(experience.ResultLayout), module.Id);
|
||||
Assert.IsTrue(experience.InputPrimitives.Count > 0, module.Id);
|
||||
Assert.IsTrue(experience.ResultPrimitives.Count > 0, module.Id);
|
||||
Assert.IsNotEmpty(experience.InputPrimitives, module.Id);
|
||||
Assert.IsNotEmpty(experience.ResultPrimitives, module.Id);
|
||||
Assert.IsTrue(ids.Add(experience.ExperienceId), $"Duplicate page experienceId: {experience.ExperienceId}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<CopyOutputSymbolsToPublishDirectory>false</CopyOutputSymbolsToPublishDirectory>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.260416003" />
|
||||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3967.48" />
|
||||
</ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user