This commit is contained in:
lincube
2026-03-20 22:37:37 +08:00
parent 20cd6041a7
commit 33baaa579d
92 changed files with 1149 additions and 2752 deletions

View File

@@ -0,0 +1,34 @@
# Ecosystem Boundaries
This document defines ownership boundaries for the LanMountainDesktop plugin ecosystem.
## Source of Truth
- Host runtime and plugin loading: `LanMountainDesktop`
- Plugin SDK API baseline: `LanMountainDesktop`
- Shared contracts used by host and plugins: `LanMountainDesktop`
- Plugin market index and ecosystem metadata: `LanAirApp`
- Official sample plugin implementation and release artifacts: `LanMountainDesktop.SamplePlugin`
## What Stays in This Repository
- Host runtime code and desktop shell behavior
- Plugin runtime, loader, install coordination, and host integration
- Plugin SDK public interfaces, contracts, and registration helpers
- Host appearance and settings infrastructure
- Tests that validate host + SDK behavior
## What Should Not Be Maintained Here as Authoritative
- Market documentation as a canonical developer portal
- Market publishing metadata as canonical source
- Official sample plugin source and release pipeline
- External reference projects (for example ClassIsland) as dependencies
## Local Debugging Rule
When running a workspace build, plugin market index and related market assets must be resolved from the sibling repository path:
- `..\\LanAirApp\\airappmarket\\index.json`
The host should not depend on an embedded `LanAirApp` mirror inside this repository for workspace market resolution.

View File

@@ -0,0 +1,62 @@
# Plugin SDK v4 Migration Guide
This guide describes the breaking changes introduced by Plugin SDK `4.0.0`.
## Version Baseline
- Host plugin SDK baseline: `4.0.0`
- Plugins targeting `3.x` are rejected by default
- Manifest file remains `plugin.json`
## Breaking Changes
1. `AddPluginDesktopComponent` now uses options-first registration.
2. `PluginDesktopComponentOptions` is now the canonical component registration shape and must include `ComponentId`.
3. Appearance and radius access are provided through strongly typed APIs:
- `IPluginAppearanceContext`
- `PluginAppearanceSnapshot`
- `PluginCornerRadiusTokens`
- `PluginCornerRadiusPreset`
4. `PluginDesktopComponentContext` now exposes `Appearance` as the primary appearance access point.
## New Component Registration Pattern
```csharp
services.AddPluginDesktopComponent<MyWidget>(new PluginDesktopComponentOptions
{
ComponentId = "YourPlugin.Widget",
DisplayName = "My Widget",
IconKey = "PuzzlePiece",
Category = "Plugins",
MinWidthCells = 4,
MinHeightCells = 3,
CornerRadiusPreset = PluginCornerRadiusPreset.Default
});
```
## Appearance Usage Pattern
```csharp
public MyWidget(PluginDesktopComponentContext context)
{
var mdRadius = context.Appearance.ResolveCornerRadius(PluginCornerRadiusPreset.Md);
var adaptiveRadius = context.Appearance.ResolveScaledCornerRadius(12, 8, 20);
}
```
## Manifest Update
Update plugin manifests to API `4.x`:
```json
{
"apiVersion": "4.0.0"
}
```
## Validation Checklist
- `plugin.json` declares `apiVersion` `4.0.0` (or compatible `4.x`)
- component registration migrated to options model
- runtime appearance access uses `IPluginAppearanceContext`
- plugin package rebuilt and republished as `.laapp`