2026-08-11 23:03:55 +08:00
|
|
|
using LanMountainDesktop.Services.AirAppMarket;
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
namespace LanMountainDesktop.Tests;
|
|
|
|
|
|
2026-08-11 23:03:55 +08:00
|
|
|
public sealed class AirAppMarketIndexDocumentTests
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
{
|
|
|
|
|
[Fact]
|
2026-07-14 11:40:12 +09:00
|
|
|
public void Load_WithFlatV3Entry_MapsDisplayFieldsAndWorkspacePath()
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
{
|
2026-07-14 11:40:12 +09:00
|
|
|
var document = AirAppMarketIndexDocument.Load(CreateFlatIndexJson(), "test-index.json");
|
2026-08-11 23:03:55 +08:00
|
|
|
var plugin = Assert.Single(document.AirApps);
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
var source = Assert.Single(plugin.PackageSources);
|
|
|
|
|
|
2026-08-11 23:03:55 +08:00
|
|
|
Assert.Equal("LanMountainDesktop.SampleAirApp", plugin.Id);
|
|
|
|
|
Assert.Equal("LanMountain Sample AirApp", plugin.Name);
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
Assert.Equal("SDK v5 sample plugin.", plugin.Description);
|
|
|
|
|
Assert.Equal("LanMountainDesktop", plugin.Author);
|
|
|
|
|
Assert.Equal("0.4.0", plugin.Version);
|
|
|
|
|
Assert.Equal("5.0.0", plugin.ApiVersion);
|
|
|
|
|
Assert.Equal("0.0.1", plugin.MinHostVersion);
|
|
|
|
|
Assert.Equal("https://raw.githubusercontent.com/wwiinnddyy/LanAirApp/main/airappmarket/assets/sample-plugin.svg", plugin.IconUrl);
|
2026-08-11 23:03:55 +08:00
|
|
|
Assert.Equal("https://raw.githubusercontent.com/wwiinnddyy/LanMountainDesktop.SampleAirApp/main/README.md", plugin.ReadmeUrl);
|
|
|
|
|
Assert.Equal("workspace://LanMountainDesktop.SampleAirApp/LanMountainDesktop.SampleAirApp.0.4.0.laapp", source.Url);
|
|
|
|
|
Assert.Equal(AirAppPackageSourceKind.WorkspaceLocal, source.SourceKind);
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
}
|
|
|
|
|
|
2026-07-14 11:40:12 +09:00
|
|
|
[Fact]
|
|
|
|
|
public void Load_WithLegacyNestedV2Entry_RejectsUnsupportedSchema()
|
|
|
|
|
{
|
|
|
|
|
var exception = Assert.Throws<InvalidOperationException>(() =>
|
|
|
|
|
AirAppMarketIndexDocument.Load(CreateNestedV2IndexJson(), "legacy-index.json"));
|
|
|
|
|
|
|
|
|
|
Assert.Contains("schemaVersion '2.0.0'", exception.Message, StringComparison.Ordinal);
|
|
|
|
|
Assert.Contains("only supports '3.0.0'", exception.Message, StringComparison.Ordinal);
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-11 23:03:55 +08:00
|
|
|
private static string CreateFlatIndexJson(string repositoryName = "LanMountainDesktop.SampleAirApp")
|
2026-07-14 11:40:12 +09:00
|
|
|
{
|
|
|
|
|
return $$"""
|
|
|
|
|
{
|
|
|
|
|
"schemaVersion": "3.0.0",
|
|
|
|
|
"sourceId": "official",
|
|
|
|
|
"sourceName": "LanAirApp",
|
|
|
|
|
"generatedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"contracts": [],
|
|
|
|
|
"plugins": [
|
|
|
|
|
{
|
2026-08-11 23:03:55 +08:00
|
|
|
"pluginId": "LanMountainDesktop.SampleAirApp",
|
|
|
|
|
"name": "LanMountain Sample AirApp",
|
2026-07-14 11:40:12 +09:00
|
|
|
"description": "SDK v5 sample plugin.",
|
|
|
|
|
"author": "LanMountainDesktop",
|
|
|
|
|
"version": "0.4.0",
|
|
|
|
|
"apiVersion": "5.0.0",
|
|
|
|
|
"minHostVersion": "0.0.1",
|
2026-08-11 23:03:55 +08:00
|
|
|
"entranceAssembly": "LanMountainDesktop.SampleAirApp.dll",
|
2026-07-14 11:40:12 +09:00
|
|
|
"iconUrl": "https://raw.githubusercontent.com/wwiinnddyy/LanAirApp/main/airappmarket/assets/sample-plugin.svg",
|
|
|
|
|
"readmeUrl": "https://raw.githubusercontent.com/wwiinnddyy/{{repositoryName}}/main/README.md",
|
|
|
|
|
"projectUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"homepageUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"repositoryUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"releaseTag": "v0.4.0",
|
2026-08-11 23:03:55 +08:00
|
|
|
"releaseAssetName": "LanMountainDesktop.SampleAirApp.0.4.0.laapp",
|
2026-07-14 11:40:12 +09:00
|
|
|
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
|
|
|
"packageSizeBytes": 1024,
|
|
|
|
|
"publishedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"updatedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"releaseNotes": "Reference plugin for SDK v5 validation.",
|
|
|
|
|
"tags": [ "official", "sdk" ],
|
|
|
|
|
"sharedContracts": [],
|
2026-08-11 23:03:55 +08:00
|
|
|
"desktopComponents": [ "LanMountainDesktop.SampleAirApp.StatusClock" ],
|
2026-07-14 11:40:12 +09:00
|
|
|
"settingsSections": [ "status" ],
|
|
|
|
|
"exports": [],
|
|
|
|
|
"messageTypes": [],
|
|
|
|
|
"packageSources": [
|
|
|
|
|
{
|
|
|
|
|
"kind": "workspaceLocal",
|
2026-08-11 23:03:55 +08:00
|
|
|
"url": "workspace://LanMountainDesktop.SampleAirApp/LanMountainDesktop.SampleAirApp.0.4.0.laapp"
|
2026-07-14 11:40:12 +09:00
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
""";
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-11 23:03:55 +08:00
|
|
|
private static string CreateNestedV2IndexJson(string repositoryName = "LanMountainDesktop.SampleAirApp")
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
{
|
|
|
|
|
return $$"""
|
|
|
|
|
{
|
|
|
|
|
"schemaVersion": "2.0.0",
|
|
|
|
|
"sourceId": "official",
|
|
|
|
|
"sourceName": "LanAirApp",
|
|
|
|
|
"generatedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"contracts": [],
|
|
|
|
|
"plugins": [
|
|
|
|
|
{
|
|
|
|
|
"manifest": {
|
2026-08-11 23:03:55 +08:00
|
|
|
"id": "LanMountainDesktop.SampleAirApp",
|
|
|
|
|
"name": "LanMountain Sample AirApp",
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
"description": "SDK v5 sample plugin.",
|
|
|
|
|
"author": "LanMountainDesktop",
|
|
|
|
|
"version": "0.4.0",
|
|
|
|
|
"apiVersion": "5.0.0",
|
2026-08-11 23:03:55 +08:00
|
|
|
"entranceAssembly": "LanMountainDesktop.SampleAirApp.dll",
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
"sharedContracts": []
|
|
|
|
|
},
|
|
|
|
|
"compatibility": {
|
|
|
|
|
"minHostVersion": "0.0.1",
|
|
|
|
|
"apiVersion": "5.0.0"
|
|
|
|
|
},
|
|
|
|
|
"repository": {
|
|
|
|
|
"projectUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"readmeUrl": "https://raw.githubusercontent.com/wwiinnddyy/{{repositoryName}}/main/README.md",
|
|
|
|
|
"homepageUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"repositoryUrl": "https://github.com/wwiinnddyy/{{repositoryName}}",
|
|
|
|
|
"iconUrl": "https://raw.githubusercontent.com/wwiinnddyy/LanAirApp/main/airappmarket/assets/sample-plugin.svg",
|
|
|
|
|
"tags": [ "official", "sdk" ],
|
|
|
|
|
"releaseNotes": "Reference plugin for SDK v5 validation."
|
|
|
|
|
},
|
|
|
|
|
"publication": {
|
|
|
|
|
"releaseTag": "v0.4.0",
|
2026-08-11 23:03:55 +08:00
|
|
|
"releaseAssetName": "LanMountainDesktop.SampleAirApp.0.4.0.laapp",
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
|
|
|
"packageSizeBytes": 1024,
|
|
|
|
|
"publishedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"updatedAt": "2026-04-29T00:00:00Z",
|
|
|
|
|
"packageSources": [
|
|
|
|
|
{
|
|
|
|
|
"kind": "workspaceLocal",
|
2026-08-11 23:03:55 +08:00
|
|
|
"path": "workspace://LanMountainDesktop.SampleAirApp/LanMountainDesktop.SampleAirApp.0.4.0.laapp",
|
|
|
|
|
"assetName": "LanMountainDesktop.SampleAirApp.0.4.0.laapp",
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
|
|
|
"sizeBytes": 1024,
|
|
|
|
|
"releaseTag": "v0.4.0",
|
|
|
|
|
"priority": 0
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"capabilities": {
|
2026-08-11 23:03:55 +08:00
|
|
|
"desktopComponents": [ "LanMountainDesktop.SampleAirApp.StatusClock" ],
|
Support .laapp/plugin.json and improve market models
Add support for the new plugin package contract (.laapp + plugin.json) while keeping backward compatibility with legacy .lmdp/manifest.json, and improve market metadata resolution and launcher handling.
Key changes:
- LanMountainDesktop.Launcher: PluginInstallerService now recognizes plugin.json and .laapp, preserves legacy manifest/package names, searches for manifests with a helper, and removes existing packages matching either extension.
- LanMountainDesktop.PluginTemplate: README updated to document .laapp, plugin.json, runtime contract and packaging expectations.
- Tests: New and extended tests for PluginInstallerService and a PluginMarketIndexDocumentTests covering nested index parsing and metadata enrichment.
- LauncherClient & PluginMarketInstallService: ResolveLauncherPath now probes multiple candidate locations (useful for dev and packaged layouts); LauncherClient also adjusted launcher arguments to use the updated CLI form.
- SettingsDomainServices: Added BuildCapabilities to safely build capability lists from entries (null checks, projection, de-dup via DistinctBy).
- AirAppMarketMetadataResolverService & PluginMarketModels: Prefer existing manifest/publication/compatibility values when enriching entries, add ApiVersion/Path fields, normalize compatibility logic and package source URL/path handling; handle Sha256/size/publication dates more robustly.
- Misc: Added localization spec/checklist/tasks under .trae for a localization fix initiative.
These changes enable the new plugin packaging format, improve robustness of market data enrichment, make launcher discovery more flexible for different environments, and add tests and docs to cover the new behaviors.
2026-04-30 00:02:52 +08:00
|
|
|
"settingsSections": [ "status" ]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
""";
|
|
|
|
|
}
|
|
|
|
|
}
|