mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
parent
5e1ec2b3e9
commit
54827a1b25
115 changed files with 3426 additions and 337 deletions
411
AGENTS.md
411
AGENTS.md
|
|
@ -1,180 +1,88 @@
|
|||
# AGENTS.md - Flow.Launcher
|
||||
|
||||
This document provides essential information for AI agents working on the Flow.Launcher codebase.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Flow.Launcher is a Windows productivity launcher (similar to Alfred/Raycast) built with:
|
||||
- **WPF** (original UI framework) - `Flow.Launcher/`
|
||||
- **Avalonia** (migration in progress ~35-40%) - `Flow.Launcher.Avalonia/`
|
||||
Windows productivity launcher (like Alfred/Raycast) with dual UI frameworks:
|
||||
- **WPF**: `Flow.Launcher/` (original)
|
||||
- **Avalonia**: `Flow.Launcher.Avalonia/` (migration ~35-40%)
|
||||
- **.NET 9.0** targeting `net9.0-windows10.0.19041.0`
|
||||
- **CommunityToolkit.Mvvm** for MVVM patterns
|
||||
- **FluentAvalonia** for modern UI in Avalonia version
|
||||
- **CommunityToolkit.Mvvm** for MVVM
|
||||
|
||||
The codebase is actively being migrated from WPF to Avalonia. See `AVALONIA_MIGRATION_CHECKLIST.md` for detailed progress.
|
||||
See `AVALONIA_MIGRATION_CHECKLIST.md` for migration progress.
|
||||
|
||||
---
|
||||
|
||||
## Essential Commands
|
||||
|
||||
### Build
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Build entire solution
|
||||
# Build
|
||||
dotnet build
|
||||
|
||||
# Build specific project
|
||||
dotnet build Flow.Launcher.Avalonia/Flow.Launcher.Avalonia.csproj
|
||||
|
||||
# Release build
|
||||
dotnet build -c Release
|
||||
|
||||
# Restore dependencies (required for CI)
|
||||
nuget restore
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
# Test (NUnit 4.x)
|
||||
dotnet test
|
||||
dotnet test --filter "FullyQualifiedName~FuzzyMatcherTest"
|
||||
dotnet test --filter "Name~WhenSearching"
|
||||
|
||||
# Run tests with verbosity
|
||||
dotnet test --verbosity normal
|
||||
|
||||
# Run specific test file/class
|
||||
dotnet test --filter "ClassName=FuzzyMatcherTest"
|
||||
# Run
|
||||
./Output/Debug/Flow.Launcher.exe # WPF
|
||||
./Output/Debug/Avalonia/Flow.Launcher.Avalonia.exe # Avalonia
|
||||
```
|
||||
|
||||
### Run
|
||||
|
||||
```bash
|
||||
# Run WPF version
|
||||
./Output/Debug/Flow.Launcher.exe
|
||||
|
||||
# Run Avalonia version
|
||||
./Output/Debug/Avalonia/Flow.Launcher.Avalonia.exe
|
||||
```
|
||||
|
||||
### Output Locations
|
||||
|
||||
| Configuration | WPF Output | Avalonia Output |
|
||||
|---------------|------------|-----------------|
|
||||
| Debug | `Output/Debug/` | `Output/Debug/Avalonia/` |
|
||||
| Release | `Output/Release/` | `Output/Release/Avalonia/` |
|
||||
|
||||
---
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
Flow.Launcher/
|
||||
├── Flow.Launcher/ # WPF main application
|
||||
│ ├── MainWindow.xaml # Main search window
|
||||
│ ├── SettingWindow.xaml # Settings window
|
||||
│ ├── ViewModel/ # ViewModels (MVVM)
|
||||
│ ├── SettingPages/ # Settings page views/viewmodels
|
||||
│ ├── Helper/ # Utility classes
|
||||
│ ├── Converters/ # XAML value converters
|
||||
│ ├── Themes/ # Theme XAML files
|
||||
│ ├── Languages/ # Localization (*.xaml)
|
||||
│ └── Resources/ # Icons, fonts, styles
|
||||
│
|
||||
├── Flow.Launcher.Avalonia/ # Avalonia main application (migration)
|
||||
│ ├── MainWindow.axaml # Main search window
|
||||
│ ├── Views/ # Avalonia views
|
||||
│ │ ├── SettingPages/ # Settings pages
|
||||
│ │ └── Controls/ # Custom controls
|
||||
│ ├── ViewModel/ # ViewModels
|
||||
│ ├── Helper/ # Utilities
|
||||
│ ├── Converters/ # Avalonia converters
|
||||
│ └── Themes/ # Avalonia themes
|
||||
│
|
||||
├── Flow.Launcher.Plugin/ # Plugin SDK (shared)
|
||||
│ ├── Interfaces/ # IPlugin, IPublicAPI, etc.
|
||||
│ ├── Result.cs # Search result model
|
||||
│ ├── Query.cs # Query model
|
||||
│ └── PluginMetadata.cs # Plugin metadata
|
||||
│
|
||||
├── Flow.Launcher.Infrastructure/ # Shared infrastructure
|
||||
│ ├── UserSettings/ # Settings models
|
||||
│ ├── StringMatcher.cs # Fuzzy search algorithm
|
||||
│ └── Logger/ # Logging utilities
|
||||
│
|
||||
├── Flow.Launcher.Core/ # Core business logic
|
||||
│ ├── Plugin/ # Plugin management
|
||||
│ │ └── PluginManager.cs # Plugin lifecycle
|
||||
│ ├── Resource/ # Internationalization
|
||||
│ └── ExternalPlugins/ # Plugin store
|
||||
│
|
||||
├── Plugins/ # Built-in plugins
|
||||
│ ├── Flow.Launcher.Plugin.Calculator/
|
||||
│ ├── Flow.Launcher.Plugin.Explorer/
|
||||
│ ├── Flow.Launcher.Plugin.Program/
|
||||
│ ├── Flow.Launcher.Plugin.WebSearch/
|
||||
│ └── ... (10+ plugins)
|
||||
│
|
||||
├── Flow.Launcher.Test/ # Unit tests (NUnit)
|
||||
│
|
||||
└── Scripts/ # Build scripts
|
||||
└── post_build.ps1 # Packaging script
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Code Conventions
|
||||
## Code Style
|
||||
|
||||
### Naming
|
||||
- **PascalCase**: types, public members, methods, properties
|
||||
- **camelCase**: locals, parameters
|
||||
- **_camelCase**: private fields (underscore prefix)
|
||||
- **PascalCase**: constants (per `.editorconfig`)
|
||||
- No `this.` qualifier
|
||||
|
||||
- **PascalCase** for public members, types, properties, methods
|
||||
- **camelCase** for local variables, parameters
|
||||
- **_camelCase** for private fields (underscore prefix)
|
||||
- **UPPER_CASE** constants are PascalCase per `.editorconfig`
|
||||
- No `this.` qualifier (per `.editorconfig`)
|
||||
|
||||
### C# Style
|
||||
|
||||
### C# Conventions
|
||||
```csharp
|
||||
// File-scoped namespaces preferred
|
||||
// File-scoped namespaces
|
||||
namespace Flow.Launcher.ViewModel;
|
||||
|
||||
// Prefer var when type is apparent
|
||||
var results = new List<Result>();
|
||||
|
||||
// Braces always required
|
||||
// Allman braces, always required
|
||||
if (condition)
|
||||
{
|
||||
DoSomething();
|
||||
}
|
||||
|
||||
// Allman brace style (new line before opening brace)
|
||||
public void Method()
|
||||
{
|
||||
// ...
|
||||
}
|
||||
|
||||
// 4-space indentation for code
|
||||
// 2-space indentation for XML/XAML
|
||||
// 4-space indent (code), 2-space (XML/XAML)
|
||||
```
|
||||
|
||||
### MVVM Patterns
|
||||
### Imports
|
||||
- Sort system directives first (`dotnet_sort_system_directives_first = true`)
|
||||
- Using placement: outside namespace
|
||||
|
||||
The project uses **CommunityToolkit.Mvvm** with source generators:
|
||||
### Error Handling
|
||||
- Use nullable reference types (enabled in Avalonia project)
|
||||
- Prefer `is null` checks over reference equality
|
||||
- Use null propagation and coalesce expressions
|
||||
|
||||
### XAML (XamlStyler)
|
||||
- One attribute per line (except ≤2)
|
||||
- Space before closing slash: `<Element />`
|
||||
- Attribute order: `x:Class` → `xmlns` → `x:Key/Name` → layout → size → margin/padding → others
|
||||
|
||||
**WPF**: `.xaml` with `xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"`
|
||||
**Avalonia**: `.axaml` with `xmlns="https://github.com/avaloniaui"`
|
||||
|
||||
## MVVM Patterns
|
||||
|
||||
```csharp
|
||||
// ViewModels use ObservableObject base
|
||||
// Avalonia: CommunityToolkit.Mvvm
|
||||
public partial class MainViewModel : ObservableObject
|
||||
{
|
||||
// [ObservableProperty] generates property + change notification
|
||||
[ObservableProperty]
|
||||
private string _queryText = string.Empty;
|
||||
|
||||
// [RelayCommand] generates ICommand implementation
|
||||
[RelayCommand]
|
||||
private void Search() { ... }
|
||||
private void Search() { }
|
||||
}
|
||||
|
||||
// WPF uses BaseModel which wraps INotifyPropertyChanged
|
||||
// WPF: BaseModel with manual INPC
|
||||
public class MainViewModel : BaseModel
|
||||
{
|
||||
public string QueryText
|
||||
|
|
@ -192,120 +100,40 @@ public class MainViewModel : BaseModel
|
|||
}
|
||||
```
|
||||
|
||||
### XAML Style
|
||||
|
||||
Uses XamlStyler with specific rules (see `Settings.XamlStyler`):
|
||||
- One attribute per line (except when ≤2)
|
||||
- Specific attribute ordering (x:Class first, then xmlns, etc.)
|
||||
- Space before closing slash: `<Element />`
|
||||
|
||||
**WPF XAML** (`.xaml`):
|
||||
```xml
|
||||
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
```
|
||||
|
||||
**Avalonia AXAML** (`.axaml`):
|
||||
```xml
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ui="using:FluentAvalonia.UI.Controls">
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Plugin Architecture
|
||||
|
||||
### Plugin Interface
|
||||
|
||||
All plugins implement `IPlugin` or `IAsyncPlugin`:
|
||||
|
||||
```csharp
|
||||
public interface IPlugin : IAsyncPlugin
|
||||
{
|
||||
List<Result> Query(Query query);
|
||||
void Init(PluginInitContext context);
|
||||
}
|
||||
|
||||
public interface IAsyncPlugin
|
||||
{
|
||||
Task<List<Result>> QueryAsync(Query query, CancellationToken token);
|
||||
Task InitAsync(PluginInitContext context);
|
||||
}
|
||||
```
|
||||
|
||||
### Creating Results
|
||||
|
||||
```csharp
|
||||
return new List<Result>
|
||||
// Result creation
|
||||
new Result
|
||||
{
|
||||
new Result
|
||||
{
|
||||
Title = "Result Title",
|
||||
SubTitle = "Optional subtitle",
|
||||
IcoPath = "Images/icon.png", // Relative to plugin directory
|
||||
Score = 100, // Higher = better match
|
||||
Action = context =>
|
||||
{
|
||||
// Execute action, return true to hide window
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Title = "Title",
|
||||
SubTitle = "Subtitle",
|
||||
IcoPath = "Images/icon.png",
|
||||
Score = 100,
|
||||
Action = context => true // return true to hide window
|
||||
};
|
||||
```
|
||||
|
||||
### Plugin Metadata
|
||||
## Avalonia Migration Notes
|
||||
|
||||
Each plugin needs `plugin.json`:
|
||||
```json
|
||||
{
|
||||
"ID": "unique-guid",
|
||||
"ActionKeyword": "keyword",
|
||||
"Name": "Plugin Name",
|
||||
"Description": "Description",
|
||||
"Author": "Author",
|
||||
"Version": "1.0.0",
|
||||
"Language": "csharp",
|
||||
"Website": "https://...",
|
||||
"IcoPath": "Images\\icon.png",
|
||||
"ExecuteFileName": "Plugin.dll"
|
||||
}
|
||||
```
|
||||
| WPF | Avalonia |
|
||||
|-----|----------|
|
||||
| `.xaml` | `.axaml` |
|
||||
| `Visibility` | `IsVisible` |
|
||||
| `Collapsed` | Not available |
|
||||
| `BoolToVisibilityConverter` | Direct bool binding |
|
||||
| `xmlns:microsoft` | `xmlns:avaloniaui` |
|
||||
|
||||
### Plugin Settings
|
||||
|
||||
```csharp
|
||||
// Load settings
|
||||
var settings = context.API.LoadSettingJsonStorage<MySettings>();
|
||||
|
||||
// Save (automatic on app close, or manual)
|
||||
context.API.SaveSettingJsonStorage<MySettings>();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Key Classes & Files
|
||||
|
||||
| Class/File | Purpose |
|
||||
|------------|---------|
|
||||
| `MainViewModel.cs` | Main search window logic |
|
||||
| `ResultsViewModel.cs` | Search results management |
|
||||
| `Settings.cs` | User settings model |
|
||||
| `PluginManager.cs` | Plugin lifecycle management |
|
||||
| `StringMatcher.cs` | Fuzzy search algorithm |
|
||||
| `IPublicAPI.cs` | Plugin API interface |
|
||||
| `Result.cs` | Search result model |
|
||||
| `Query.cs` | Search query model |
|
||||
|
||||
---
|
||||
Use `#if AVALONIA` for conditional compilation.
|
||||
|
||||
## Testing
|
||||
|
||||
- **Framework**: NUnit 4.x
|
||||
- **Mocking**: Moq
|
||||
- **Test file naming**: `*Test.cs`
|
||||
- **Test class attribute**: `[TestFixture]`
|
||||
|
||||
```csharp
|
||||
[TestFixture]
|
||||
public class FuzzyMatcherTest
|
||||
|
|
@ -317,114 +145,31 @@ public class FuzzyMatcherTest
|
|||
var result = matcher.FuzzyMatch("chr", "Chrome");
|
||||
ClassicAssert.IsTrue(result.RawScore > 0);
|
||||
}
|
||||
|
||||
[TestCase("chrome")]
|
||||
[TestCase("chr")]
|
||||
public void ParameterizedTest(string query)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
## Key Files
|
||||
|
||||
## Avalonia Migration Notes
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `MainViewModel.cs` | Search window logic |
|
||||
| `ResultsViewModel.cs` | Results management |
|
||||
| `Settings.cs` | User settings |
|
||||
| `PluginManager.cs` | Plugin lifecycle |
|
||||
| `StringMatcher.cs` | Fuzzy search |
|
||||
| `IPublicAPI.cs` | Plugin API |
|
||||
|
||||
When working on the Avalonia migration:
|
||||
## Gotchas
|
||||
|
||||
1. **File extensions**: Use `.axaml` not `.xaml` for Avalonia
|
||||
2. **Namespace**: Use `xmlns="https://github.com/avaloniaui"`
|
||||
3. **Controls**: Use FluentAvalonia `ui:SettingsExpander` for settings pages
|
||||
4. **Visibility**: Use `IsVisible` not `Visibility` (no `Collapsed` enum)
|
||||
5. **Converters**: Different converter approach (see `Converters/`)
|
||||
6. **Define directive**: `#if AVALONIA` for conditional compilation
|
||||
|
||||
**Key differences**:
|
||||
```xml
|
||||
<!-- WPF -->
|
||||
<Button Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}" />
|
||||
|
||||
<!-- Avalonia -->
|
||||
<Button IsVisible="{Binding IsVisible}" />
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Localization
|
||||
|
||||
Resources are in `Languages/*.xaml` files:
|
||||
|
||||
```xml
|
||||
<!-- Languages/en.xaml -->
|
||||
<sys:String x:Key="startFlowLauncherOnSystemStartup">Start Flow Launcher on system startup</sys:String>
|
||||
```
|
||||
|
||||
Usage in XAML:
|
||||
```xml
|
||||
<!-- WPF -->
|
||||
<TextBlock Text="{DynamicResource startFlowLauncherOnSystemStartup}" />
|
||||
|
||||
<!-- Avalonia (custom extension) -->
|
||||
<TextBlock Text="{i18n:Localize startFlowLauncherOnSystemStartup}" />
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Adding a new setting
|
||||
|
||||
1. Add property to `Flow.Launcher.Infrastructure/UserSettings/Settings.cs`
|
||||
2. Add UI in appropriate settings page (WPF and/or Avalonia)
|
||||
3. Bind to ViewModel property
|
||||
|
||||
### Adding a new plugin
|
||||
|
||||
1. Create project under `Plugins/` folder
|
||||
2. Reference `Flow.Launcher.Plugin`
|
||||
3. Implement `IPlugin` or `IAsyncPlugin`
|
||||
4. Add `plugin.json` metadata
|
||||
5. Add to solution and build dependencies in WPF project
|
||||
|
||||
### Fixing a ViewModel binding
|
||||
|
||||
1. Ensure property raises `PropertyChanged` or uses `[ObservableProperty]`
|
||||
2. Check DataContext is set correctly
|
||||
3. Verify binding path matches property name exactly
|
||||
|
||||
---
|
||||
|
||||
## Gotchas & Tips
|
||||
|
||||
1. **Build order matters**: WPF project depends on plugins being built first
|
||||
2. **Kill running instance**: Build kills running `Flow.Launcher.exe` automatically
|
||||
3. **Plugin isolation**: Plugins run in separate app domains, can't share state directly
|
||||
4. **Settings persist**: Changes to `Settings.cs` properties auto-save via Fody PropertyChanged
|
||||
5. **Windows Search**: Some tests require Windows Search service (`WSearch`) to be running
|
||||
6. **Nullable**: Avalonia project has `<Nullable>enable</Nullable>`, WPF does not
|
||||
7. **Framework reference**: Avalonia still references WPF assemblies for `IPublicAPI` compatibility
|
||||
|
||||
---
|
||||
|
||||
## CI/CD
|
||||
|
||||
GitHub Actions workflow (`.github/workflows/dotnet.yml`):
|
||||
- Runs on Windows
|
||||
- Uses .NET 9.0
|
||||
- Builds Release configuration
|
||||
- Runs tests
|
||||
- Creates installer via Squirrel
|
||||
|
||||
Key environment variables:
|
||||
- `FlowVersion`: Version number (e.g., "1.20.2")
|
||||
- `BUILD_NUMBER`: CI build number
|
||||
|
||||
---
|
||||
1. Build order matters - plugins must build before WPF
|
||||
2. Build kills running `Flow.Launcher.exe` automatically
|
||||
3. Plugins run in separate app domains
|
||||
4. Settings auto-save via Fody PropertyChanged
|
||||
5. Some tests require Windows Search service (`WSearch`)
|
||||
6. Avalonia has `<Nullable>enable</Nullable>`, WPF does not
|
||||
|
||||
## Resources
|
||||
|
||||
- **Migration checklist**: `AVALONIA_MIGRATION_CHECKLIST.md`
|
||||
- **Plugin SDK docs**: `Flow.Launcher.Plugin/README.md`
|
||||
- **EditorConfig**: `.editorconfig` for code style
|
||||
- **XAML formatting**: `Settings.XamlStyler`
|
||||
- `.editorconfig` - C#/VB style rules
|
||||
- `Settings.XamlStyler` - XAML formatting
|
||||
- `Flow.Launcher.Plugin/README.md` - Plugin SDK docs
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ public class AvaloniaPublicAPI : IPublicAPI
|
|||
|
||||
public string GetTranslation(string key) => _i18n.GetTranslation(key);
|
||||
|
||||
public List<PluginPair> GetAllPlugins() => PluginManager.AllPlugins;
|
||||
public List<PluginPair> GetAllPlugins() => PluginManager.GetAllLoadedPlugins();
|
||||
public List<PluginPair> GetAllInitializedPlugins(bool includeFailed) => PluginManager.GetAllInitializedPlugins(includeFailed);
|
||||
public MatchResult FuzzySearch(string query, string stringToCompare) =>
|
||||
Ioc.Default.GetRequiredService<StringMatcher>().FuzzyMatch(query, stringToCompare);
|
||||
|
||||
|
|
|
|||
19
Flow.Launcher.Avalonia/Converters/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Converters/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Converters/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<RootNamespace>Flow.Launcher.Avalonia</RootNamespace>
|
||||
<AssemblyName>Flow.Launcher.Avalonia</AssemblyName>
|
||||
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
|
@ -78,4 +79,75 @@
|
|||
<Resource Include="WpfResources\*.xaml" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Remove duplicate DLLs from plugins that already exist in the root folder -->
|
||||
<!-- Remove by name since root typically has newer compatible versions -->
|
||||
<Target Name="RemoveDuplicatePluginDlls" AfterTargets="Build" Condition="Exists('$(OutputPath)Plugins')">
|
||||
<Exec Command="powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem '$(OutputPath.TrimEnd('\'))' -Filter '*.dll' | ForEach-Object { $name = $_.Name; Get-ChildItem '$(OutputPath)Plugins' -Recurse -Filter $name | Remove-Item -Force }"" IgnoreExitCode="true" />
|
||||
</Target>
|
||||
|
||||
<!-- Remove non-Windows runtime folders from plugins (keep only win-x64) -->
|
||||
<Target Name="RemovePluginNonWindowsRuntimes" AfterTargets="Build" Condition="Exists('$(OutputPath)Plugins')">
|
||||
<Exec Command="powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem '$(OutputPath)Plugins' -Recurse -Directory -Filter 'runtimes' | ForEach-Object { Get-ChildItem $_.FullName -Directory | Where-Object { $_.Name -notmatch '^win-x64$' } | Remove-Item -Recurse -Force }"" IgnoreExitCode="true" />
|
||||
</Target>
|
||||
|
||||
<!-- Remove duplicate win-x64 runtime from plugins since root already has it -->
|
||||
<Target Name="RemovePluginDuplicateRuntimes" AfterTargets="RemovePluginNonWindowsRuntimes" Condition="Exists('$(OutputPath)Plugins') And Exists('$(OutputPath)runtimes\win-x64')">
|
||||
<Exec Command="powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem '$(OutputPath)runtimes\win-x64' -File | ForEach-Object { $name = $_.Name; Get-ChildItem '$(OutputPath)Plugins' -Recurse -Filter $name | Where-Object { $_.Directory.Name -eq 'win-x64' } | Remove-Item -Force }"" IgnoreExitCode="true" />
|
||||
</Target>
|
||||
|
||||
<!-- Remove XML documentation files to reduce output size -->
|
||||
<Target Name="RemoveXmlDocFiles" AfterTargets="Build">
|
||||
<Delete Files="@(None)" Condition="'%(Extension)' == '.xml'" />
|
||||
<Exec Command="powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem '$(OutputPath.TrimEnd('\'))' -Recurse -Filter '*.xml' | Remove-Item -Force -ErrorAction SilentlyContinue"" IgnoreExitCode="true" />
|
||||
</Target>
|
||||
|
||||
<!-- Remove unnecessary runtime folders to reduce output size (Windows-only target) -->
|
||||
<Target Name="RemoveUnnecessaryRuntimesAfterBuild" AfterTargets="Build">
|
||||
<RemoveDir Directories="$(OutputPath)runtimes\browser-wasm;
|
||||
$(OutputPath)runtimes\linux-arm;
|
||||
$(OutputPath)runtimes\linux-arm64;
|
||||
$(OutputPath)runtimes\linux-armel;
|
||||
$(OutputPath)runtimes\linux-mips64;
|
||||
$(OutputPath)runtimes\linux-musl-arm;
|
||||
$(OutputPath)runtimes\linux-musl-arm64;
|
||||
$(OutputPath)runtimes\linux-musl-x64;
|
||||
$(OutputPath)runtimes\linux-musl-s390x;
|
||||
$(OutputPath)runtimes\linux-ppc64le;
|
||||
$(OutputPath)runtimes\linux-s390x;
|
||||
$(OutputPath)runtimes\linux-x64;
|
||||
$(OutputPath)runtimes\linux-x86;
|
||||
$(OutputPath)runtimes\maccatalyst-arm64;
|
||||
$(OutputPath)runtimes\maccatalyst-x64;
|
||||
$(OutputPath)runtimes\osx;
|
||||
$(OutputPath)runtimes\osx-arm64;
|
||||
$(OutputPath)runtimes\osx-x64;
|
||||
$(OutputPath)runtimes\win-arm;
|
||||
$(OutputPath)runtimes\win-arm64;
|
||||
$(OutputPath)runtimes\win-x86"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="RemoveUnnecessaryRuntimesAfterPublish" AfterTargets="Publish">
|
||||
<RemoveDir Directories="$(PublishDir)runtimes\browser-wasm;
|
||||
$(PublishDir)runtimes\linux-arm;
|
||||
$(PublishDir)runtimes\linux-arm64;
|
||||
$(PublishDir)runtimes\linux-armel;
|
||||
$(PublishDir)runtimes\linux-mips64;
|
||||
$(PublishDir)runtimes\linux-musl-arm;
|
||||
$(PublishDir)runtimes\linux-musl-arm64;
|
||||
$(PublishDir)runtimes\linux-musl-x64;
|
||||
$(PublishDir)runtimes\linux-musl-s390x;
|
||||
$(PublishDir)runtimes\linux-ppc64le;
|
||||
$(PublishDir)runtimes\linux-s390x;
|
||||
$(PublishDir)runtimes\linux-x64;
|
||||
$(PublishDir)runtimes\linux-x86;
|
||||
$(PublishDir)runtimes\maccatalyst-arm64;
|
||||
$(PublishDir)runtimes\maccatalyst-x64;
|
||||
$(PublishDir)runtimes\osx;
|
||||
$(PublishDir)runtimes\osx-arm64;
|
||||
$(PublishDir)runtimes\osx-x64;
|
||||
$(PublishDir)runtimes\win-arm;
|
||||
$(PublishDir)runtimes\win-arm64;
|
||||
$(PublishDir)runtimes\win-x86"/>
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
19
Flow.Launcher.Avalonia/Helper/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Helper/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Helper/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -7,6 +7,9 @@ using CommunityToolkit.Mvvm.DependencyInjection;
|
|||
using Flow.Launcher.Avalonia.ViewModel;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using System;
|
||||
#if DEBUG
|
||||
using Avalonia.Diagnostics;
|
||||
#endif
|
||||
|
||||
namespace Flow.Launcher.Avalonia;
|
||||
|
||||
|
|
|
|||
19
Flow.Launcher.Avalonia/Resource/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Resource/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Resource/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Avalonia/ViewModel/SettingPages/codemap.md
Normal file
19
Flow.Launcher.Avalonia/ViewModel/SettingPages/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/ViewModel/SettingPages/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Avalonia/ViewModel/codemap.md
Normal file
19
Flow.Launcher.Avalonia/ViewModel/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/ViewModel/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Avalonia/Views/Controls/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Views/Controls/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Views/Controls/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Avalonia/Views/SettingPages/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Views/SettingPages/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Views/SettingPages/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Avalonia/Views/codemap.md
Normal file
19
Flow.Launcher.Avalonia/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Avalonia/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
50
Flow.Launcher.Avalonia/codemap.md
Normal file
50
Flow.Launcher.Avalonia/codemap.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# Flow.Launcher.Avalonia/
|
||||
|
||||
## Responsibility
|
||||
The `Flow.Launcher.Avalonia` directory is the core of the Avalonia-based UI implementation for Flow Launcher. It handles the application lifecycle, the primary search interface, and provides compatibility layers for existing plugins that were originally designed for the WPF version. It serves as the main entry point for the Avalonia flavor of the application.
|
||||
|
||||
## Design
|
||||
- **MVVM (Model-View-ViewModel)**: Separation of UI (`MainWindow.axaml`) and logic (`MainViewModel.cs`).
|
||||
- **Dependency Injection (DI)**: Uses `Microsoft.Extensions.DependencyInjection` and `CommunityToolkit.Mvvm`'s `Ioc` for service management.
|
||||
- **Bridge Pattern**: `AvaloniaPublicAPI` adapts the `IPublicAPI` interface to work with Avalonia's infrastructure, allowing plugins to function without major modifications.
|
||||
- **Singleton**: Core services like `Settings`, `MainViewModel`, and `Internationalization` are registered as singletons within the DI container.
|
||||
- **WPF Compatibility Shim**: A unique architectural decision to run a background WPF `Application` instance to support legacy plugins that rely on `System.Windows.Application.Current`.
|
||||
|
||||
### Key Classes
|
||||
|
||||
| Class | Purpose |
|
||||
|-------|---------|
|
||||
| `Program.cs` | Entry point. Initializes a background WPF `Application` instance for plugin compatibility before starting the Avalonia app. |
|
||||
| `App.axaml.cs` | Manages application lifecycle, DI container configuration, settings loading, and plugin initialization. |
|
||||
| `MainWindow.axaml.cs` | Code-behind for the primary search window. Handles window positioning, focus management, and keyboard shortcuts (Escape, Arrows). |
|
||||
| `AvaloniaPublicAPI.cs` | Implementation of `IPublicAPI`. Provides plugins with access to Flow Launcher's core functionality (Querying, UI control, Clipboard, etc.) in the Avalonia context. |
|
||||
|
||||
## Flow
|
||||
|
||||
### Application Startup
|
||||
1. **`Program.Main`**: Initializes `System.Windows.Application` (WPF) to provide `Application.Current.Resources` for legacy plugins.
|
||||
2. **`App.Initialize`**:
|
||||
- Loads user settings from JSON via `FlowLauncherJsonStorage`.
|
||||
- Configures the DI container (`ConfigureDI`).
|
||||
- Injects translations into application resources.
|
||||
3. **`App.OnFrameworkInitializationCompleted`**:
|
||||
- Resolves `MainViewModel` from DI.
|
||||
- Instantiates `MainWindow`.
|
||||
- Starts asynchronous plugin initialization (`InitializePluginsAsync`).
|
||||
|
||||
### Search Execution
|
||||
1. User input in `MainWindow`'s `QueryTextBox` updates `MainViewModel.QueryText` via binding.
|
||||
2. `MainViewModel` (in `Flow.Launcher.Avalonia/ViewModel`) triggers `PluginManager` to query active plugins.
|
||||
3. Results are returned and displayed in the UI.
|
||||
|
||||
## Integration
|
||||
- **`Flow.Launcher.Core`**: Directly integrates with `PluginManager` for plugin lifecycle and `Internationalization` for multi-language support.
|
||||
- **`Flow.Launcher.Infrastructure`**: Relies on `UserSettings`, `Logger`, and `StringMatcher` (fuzzy search logic).
|
||||
- **`Flow.Launcher.Plugin`**: Implements the `IPublicAPI` interface to allow plugins to interact with the Avalonia-hosted app.
|
||||
- **WPF Ecosystem**: Maintains a runtime dependency on WPF (`System.Windows`) to ensure that plugins using WPF-specific resources or `Application.Current` do not crash.
|
||||
|
||||
## Avalonia vs WPF Implementation Details
|
||||
- **WPF Shim**: Unlike the original WPF version, the Avalonia version must manually spin up a WPF environment in `Program.cs` to maintain plugin compatibility.
|
||||
- **Window Positioning**: `MainWindow` uses Avalonia's `Screens` API to center itself at 25% from the top of the primary screen, mimicking the WPF behavior.
|
||||
- **Event Handling**: Uses Avalonia-specific events like `Deactivated` and `PointerPressed` for window management and dragging.
|
||||
- **DI Strategy**: Uses a modern `ServiceCollection`-based DI approach compared to the older WPF implementation's service resolution.
|
||||
19
Flow.Launcher.Core/Configuration/codemap.md
Normal file
19
Flow.Launcher.Core/Configuration/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Configuration/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/ExternalPlugins/Environments/codemap.md
Normal file
19
Flow.Launcher.Core/ExternalPlugins/Environments/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/ExternalPlugins/Environments/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/ExternalPlugins/codemap.md
Normal file
19
Flow.Launcher.Core/ExternalPlugins/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/ExternalPlugins/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/Plugin/JsonRPCV2Models/codemap.md
Normal file
19
Flow.Launcher.Core/Plugin/JsonRPCV2Models/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Plugin/JsonRPCV2Models/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/Plugin/codemap.md
Normal file
19
Flow.Launcher.Core/Plugin/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Plugin/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/Properties/codemap.md
Normal file
19
Flow.Launcher.Core/Properties/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Properties/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/Resource/codemap.md
Normal file
19
Flow.Launcher.Core/Resource/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Resource/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Core/Storage/codemap.md
Normal file
19
Flow.Launcher.Core/Storage/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Core/Storage/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
34
Flow.Launcher.Core/codemap.md
Normal file
34
Flow.Launcher.Core/codemap.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Flow.Launcher.Core
|
||||
|
||||
Core business logic engine responsible for plugin orchestration, application updates, and resource management.
|
||||
|
||||
## Responsibility
|
||||
- **Plugin Lifecycle Management**: Discovers, loads, initializes, queries, and disposes of plugins. Supports C#, Python, Node.js, and executable plugins.
|
||||
- **Resource & Internationalization**: Coordinates multi-language support and theme resources, dynamically merging XAML dictionaries.
|
||||
- **Application Updates**: Manages the self-update mechanism using Squirrel.Windows and GitHub releases.
|
||||
- **External Plugin Integration**: Interfaces with the community plugin store and manifest systems to allow discovery and installation of community-made plugins.
|
||||
|
||||
## Design
|
||||
- **Centralized Coordinator (Static Hub)**: `PluginManager` is the primary static entry point for plugin operations, maintaining global lists of loaded plugins.
|
||||
- **Dependency Injection**: Utilizes `CommunityToolkit.Mvvm.DependencyInjection` (Ioc) to access services like `IPublicAPI`.
|
||||
- **Interface-Based Extensibility**: Uses interfaces like `IPlugin`, `IAsyncPlugin`, and `IPluginI18n` to decouple core logic from specific plugin implementations.
|
||||
- **Asynchronous Execution**: Comprehensive use of `async/await` and `CancellationToken` for non-blocking plugin queries and lifecycle events.
|
||||
- **Resource Merging Pattern**: `Internationalization` dynamically merges `ResourceDictionary` objects from both the main application and individual plugins into the global application resources.
|
||||
|
||||
## Flow
|
||||
### Plugin Query Flow
|
||||
1. **Parsing**: raw user input is parsed into a structured `Query` object (via `QueryBuilder`).
|
||||
2. **Selection**: `PluginManager.ValidPluginsForQuery` identifies matching plugins based on action keywords or global status.
|
||||
3. **Execution**: `PluginManager.QueryForPluginAsync` executes queries in parallel across selected plugins.
|
||||
4. **Aggregation**: `Result` objects are aggregated, updated with metadata (PluginID, directory), and returned to the UI layer.
|
||||
|
||||
### Update Flow
|
||||
1. `Updater.UpdateAppAsync` checks the GitHub repository for new releases via Squirrel.
|
||||
2. If found, updates are downloaded and applied.
|
||||
3. Portable data is migrated to the new version directory if a portable install is detected.
|
||||
|
||||
## Integration
|
||||
- **`Flow.Launcher.Infrastructure`**: Consumes settings, constants, and logging utilities.
|
||||
- **`Flow.Launcher.Plugin`**: Implements the SDK interfaces used by plugins to communicate with the host.
|
||||
- **`Squirrel.Windows`**: External dependency for installation and delta-update logic.
|
||||
- **`Avalonia`/`WPF`**: The `Internationalization` system interacts directly with the UI framework's resource dictionaries.
|
||||
|
|
@ -67,6 +67,26 @@
|
|||
"System.IO.Pipelines": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Avalonia": {
|
||||
"type": "Transitive",
|
||||
"resolved": "11.2.3",
|
||||
"contentHash": "pD6woFAUfGcyEvMmrpctntU4jv4fT8752pfx1J5iRORVX3Ob0oQi8PWo0TXVaAJZiSfH0cdKTeKx0w0DzD0/mg==",
|
||||
"dependencies": {
|
||||
"Avalonia.BuildServices": "0.0.29",
|
||||
"Avalonia.Remote.Protocol": "11.2.3",
|
||||
"MicroCom.Runtime": "0.11.0"
|
||||
}
|
||||
},
|
||||
"Avalonia.BuildServices": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.0.29",
|
||||
"contentHash": "U4eJLQdoDNHXtEba7MZUCwrBErBTxFp6sUewXBOdAhU0Kwzwaa/EKFcYm8kpcysjzKtfB4S0S9n0uxKZFz/ikw=="
|
||||
},
|
||||
"Avalonia.Remote.Protocol": {
|
||||
"type": "Transitive",
|
||||
"resolved": "11.2.3",
|
||||
"contentHash": "6V0aNtld48WmO8tAlWwlRlUmXYcOWv+1eJUSl1ETF+1blUe5yhcSmuWarPprO0hDk8Ta6wGfdfcrnVl2gITYcA=="
|
||||
},
|
||||
"Ben.Demystifier": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.4.1",
|
||||
|
|
@ -138,6 +158,11 @@
|
|||
"resolved": "2.5.192",
|
||||
"contentHash": "jaJuwcgovWIZ8Zysdyf3b7b34/BrADw4v82GaEZymUhDd3ScMPrYd/cttekeDteJJPXseJxp04yTIcxiVUjTWg=="
|
||||
},
|
||||
"MicroCom.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.11.0",
|
||||
"contentHash": "MEnrZ3UIiH40hjzMDsxrTyi8dtqB5ziv3iBeeU4bXsL/7NLSal9F1lZKpK+tfBRnUoDSdtcW3KufE4yhATOMCA=="
|
||||
},
|
||||
"Microsoft.NET.StringTools": {
|
||||
"type": "Transitive",
|
||||
"resolved": "17.6.3",
|
||||
|
|
@ -1173,7 +1198,7 @@
|
|||
"BitFaster.Caching": "[2.5.4, )",
|
||||
"CommunityToolkit.Mvvm": "[8.4.0, )",
|
||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
||||
"InputSimulator": "[1.0.4, )",
|
||||
"MemoryPack": "[1.21.4, )",
|
||||
"Microsoft.VisualStudio.Threading": "[17.14.15, )",
|
||||
|
|
@ -1189,6 +1214,7 @@
|
|||
"flow.launcher.plugin": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Avalonia": "[11.2.3, )",
|
||||
"JetBrains.Annotations": "[2025.2.2, )"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
19
Flow.Launcher.Infrastructure/DialogJump/Models/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/DialogJump/Models/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/DialogJump/Models/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/DialogJump/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/DialogJump/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/DialogJump/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Exception/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Exception/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Exception/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Hotkey/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Hotkey/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Hotkey/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Http/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Http/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Http/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Image/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Image/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Image/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Logger/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Logger/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Logger/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Properties/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Properties/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Properties/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/Storage/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/Storage/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/Storage/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Infrastructure/UserSettings/codemap.md
Normal file
19
Flow.Launcher.Infrastructure/UserSettings/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Infrastructure/UserSettings/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
70
Flow.Launcher.Infrastructure/codemap.md
Normal file
70
Flow.Launcher.Infrastructure/codemap.md
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# Flow.Launcher.Infrastructure/
|
||||
|
||||
The Infrastructure project provides the foundational services, utilities, and shared models used across the Flow.Launcher ecosystem. It serves as a bridge between high-level application logic and low-level system interactions.
|
||||
|
||||
## Responsibility
|
||||
|
||||
- **Persistence & Storage**: Manages serialization and deserialization of application data and settings using robust JSON/Binary storage mechanisms.
|
||||
- **Fuzzy Matching**: Implements the core search logic, including fuzzy string matching, acronym detection, and multi-language support (e.g., Pinyin).
|
||||
- **Global Hotkey Management**: Intercepts and processes system-wide keyboard events using low-level Windows hooks.
|
||||
- **Configuration**: Provides a centralized, reactive `Settings` model that drives the application's behavior and appearance.
|
||||
- **Logging**: Offers a unified logging interface wrapping NLog for error reporting and debugging.
|
||||
- **System Integration**: Wraps complex Win32 API calls and provides helpers for file system operations, image processing, and environment management.
|
||||
|
||||
## Design Patterns
|
||||
|
||||
- **Persistence Framework (Generic Storage)**: `JsonStorage<T>` uses a generic approach to provide consistent serialization logic, including atomic writes and backup recovery.
|
||||
- **Reactive Model**: The `Settings` class uses the MVVM pattern (via `CommunityToolkit.Mvvm`) to notify the UI of configuration changes.
|
||||
- **Static Service/Singleton**: Core utilities like `Log`, `DataLocation`, and `Win32Helper` are implemented as static services for global accessibility.
|
||||
- **Dependency Injection**: Services like `StringMatcher` are registered and resolved via `CommunityToolkit.Mvvm.DependencyInjection` to decouple components.
|
||||
- **Template Method**: `JsonStorage<T>` defines the save/load algorithm, while derived classes like `FlowLauncherJsonStorage<T>` specialize the storage location.
|
||||
|
||||
## Key Classes
|
||||
|
||||
### Configuration & Data
|
||||
- **`UserSettings.Settings`**: The primary configuration model. It implements `IHotkeySettings` and holds hundreds of user-configurable properties. It is reactive, triggering UI updates immediately upon property change.
|
||||
- **`UserSettings.DataLocation`**: Encapsulates the logic for determining where application data is stored (Roaming vs. Portable mode).
|
||||
- **`Constant`**: Centralized repository for application-wide constants, paths, and URLs.
|
||||
|
||||
### Search Engine
|
||||
- **`StringMatcher`**: The heart of Flow's search capability. It combines acronym matching and fuzzy substring matching. It supports search precision tuning and leverages `IAlphabet` for localized character translation.
|
||||
- **`MatchResult`**: A model representing the outcome of a search match, containing the score and the indices of matched characters for UI highlighting.
|
||||
|
||||
### Storage Systems
|
||||
- **`Storage.JsonStorage<T>`**: A robust JSON storage implementation featuring:
|
||||
- **Atomic Writes**: Uses `.tmp` files and `File.Replace` to prevent data corruption during crashes.
|
||||
- **Backup System**: Automatically maintains `.bak` files and timestamped backups if loading fails.
|
||||
- **`Storage.FlowLauncherJsonStorage<T>`**: A specialization of `JsonStorage` that automatically routes files to the appropriate `UserData` directory.
|
||||
|
||||
### Logging & Diagnostics
|
||||
- **`Logger.Log`**: A static wrapper for NLog. It supports asynchronous file logging and debug string output. It includes a `Demystify` step for exception stacks to make them more readable.
|
||||
- **`Stopwatch`**: High-resolution timing utility for performance profiling.
|
||||
|
||||
### Input & System
|
||||
- **`Hotkey.GlobalHotkey`**: Manages low-level `WH_KEYBOARD_LL` hooks to intercept hotkeys before they reach other applications.
|
||||
- **`Win32Helper`**: Provides a clean C# interface for complex P/Invoke operations, including window management, shell execution, and system font retrieval.
|
||||
|
||||
## Data & Control Flow
|
||||
|
||||
### Search & Result Flow
|
||||
1. **Input**: A query string enters from the UI.
|
||||
2. **Preprocessing**: `StringMatcher` trims the query and optionally translates it via `PinyinAlphabet` or other `IAlphabet` implementations.
|
||||
3. **Matching**:
|
||||
- **Acronym Match**: Checks if query characters match the starts of words or uppercase letters.
|
||||
- **Fuzzy Match**: Performs substring matching and character distance calculation.
|
||||
4. **Scoring**: A score is calculated based on match length, position, and closeness of characters.
|
||||
5. **Output**: A `MatchResult` is returned to the `PluginManager` to be ranked against other results.
|
||||
|
||||
### Settings Lifecycle
|
||||
1. **Loading**: On startup, `FlowLauncherJsonStorage<Settings>` reads `Settings.json`. If corrupt, it attempts to restore from `Settings.json.bak`.
|
||||
2. **Injection**: The `Settings` instance is registered in the `Ioc` container.
|
||||
3. **Modification**: UI components bind to `Settings` properties. Changes trigger `OnPropertyChanged`.
|
||||
4. **Persistence**: The `Save()` method is called (often triggered by application exit or manual save), executing an atomic write to disk.
|
||||
|
||||
## Integration Points
|
||||
|
||||
- **NLog**: Backend for the `Log` service.
|
||||
- **CommunityToolkit.Mvvm**: Used for the `Ioc` container and `ObservableObject` base classes.
|
||||
- **CsWin32 / PInvoke**: Deep integration with Windows APIs for hotkeys, file explorer interaction, and UI rendering hints.
|
||||
- **Flow.Launcher.Plugin**: Infrastructure provides the concrete implementations for many interfaces defined in the Plugin SDK.
|
||||
- **System.Text.Json**: The primary serialization engine for all storage components.
|
||||
19
Flow.Launcher.Plugin/Interfaces/codemap.md
Normal file
19
Flow.Launcher.Plugin/Interfaces/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Plugin/Interfaces/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Plugin/Properties/codemap.md
Normal file
19
Flow.Launcher.Plugin/Properties/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Plugin/Properties/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Plugin/SharedCommands/codemap.md
Normal file
19
Flow.Launcher.Plugin/SharedCommands/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Plugin/SharedCommands/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher.Plugin/SharedModels/codemap.md
Normal file
19
Flow.Launcher.Plugin/SharedModels/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher.Plugin/SharedModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
33
Flow.Launcher.Plugin/codemap.md
Normal file
33
Flow.Launcher.Plugin/codemap.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Flow.Launcher.Plugin Codemap
|
||||
|
||||
## Responsibility
|
||||
The `Flow.Launcher.Plugin` module serves as the **Plugin SDK** for Flow.Launcher. It defines the essential building blocks, interfaces, and models required for developers to create plugins. It acts as the formal contract between the Flow.Launcher core application and its extensibility layer, ensuring a stable and consistent API for search results, UI interaction, and system integration across different plugin languages (C#, Python, JavaScript, etc.).
|
||||
|
||||
## Design
|
||||
The SDK is built on several key architectural patterns:
|
||||
- **Interface-based Extensibility**: The core functionality is driven by interfaces (`IPlugin`, `IAsyncPlugin`) that define how plugins are queried. Optional features are exposed via specialized interfaces like `IContextMenu`, `ISettingProvider`, and `IReloadable`.
|
||||
- **Command/Action Pattern**: The `Result` class encapsulates its own execution logic through `Action` and `AsyncAction` delegates. This decouples the search engine from the specific logic of what happens when a result is clicked.
|
||||
- **Contextual Initialization**: Plugins receive their environment data and a reference to the application's capabilities via `PluginInitContext` and the `IPublicAPI` interface during the `Init` phase.
|
||||
- **Marker Interfaces**: The `IFeatures` interface serves as a base for all optional capability interfaces, allowing the core system to dynamically discover and invoke plugin features.
|
||||
|
||||
### Key Components:
|
||||
- **`Result`**: The primary model for search results, containing display data (Title, SubTitle, Icons) and execution delegates.
|
||||
- **`Query`**: Represents the user's input, providing parsed search terms and action keywords.
|
||||
- **`IPublicAPI`**: The interface providing plugins with access to global functions (logging, UI control, settings storage, HTTP utilities).
|
||||
- **`PluginMetadata`**: Identity and configuration data extracted from the plugin's `plugin.json` manifest.
|
||||
|
||||
## Flow
|
||||
The lifecycle and data flow of a plugin within Flow.Launcher follow a strictly defined sequence:
|
||||
|
||||
1. **Discovery & Load**: The `PluginManager` (in Core) scans the `Plugins` directory, parses `plugin.json` into `PluginMetadata`, and instantiates the plugin class.
|
||||
2. **Initialization**: The `Init(PluginInitContext)` method is called. The plugin stores the `IPublicAPI` reference for future use.
|
||||
3. **Query Loop**: When the user types, the system constructs a `Query` object. It then calls `Query(Query)` (Sync) or `QueryAsync(Query, CancellationToken)` (Async) on all relevant plugins.
|
||||
4. **Result Aggregation**: Plugins return a `List<Result>`. The Core sorts these results based on `Score` and displays them in the UI.
|
||||
5. **Action Execution**: When a result is selected, the Core invokes `Result.ExecuteAsync()`, which runs the plugin-defined delegate.
|
||||
6. **Feedback**: Plugins use `IPublicAPI` to trigger side-effects, such as changing the current query, showing notifications, or saving persistent settings.
|
||||
|
||||
## Integration
|
||||
- **Search Integration**: Plugins hook into the main launcher window by providing results that match user queries.
|
||||
- **UI Integration**: Plugins provide custom settings panels via `ISettingProvider` and additional context menu options via `IContextMenu`.
|
||||
- **Storage Integration**: Plugins persist their state using `LoadSettingJsonStorage<T>` (for configuration) or `LoadCacheBinaryStorageAsync<T>` (for high-performance data caching) provided by the API.
|
||||
- **System Integration**: Through `IPublicAPI`, plugins can execute shell commands, manage the clipboard, download files, and subscribe to system-wide events like theme changes or keyboard hooks.
|
||||
19
Flow.Launcher/Converters/codemap.md
Normal file
19
Flow.Launcher/Converters/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/Converters/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/Helper/codemap.md
Normal file
19
Flow.Launcher/Helper/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/Helper/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/Properties/codemap.md
Normal file
19
Flow.Launcher/Properties/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/Properties/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/SettingPages/ViewModels/codemap.md
Normal file
19
Flow.Launcher/SettingPages/ViewModels/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/SettingPages/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/SettingPages/Views/codemap.md
Normal file
19
Flow.Launcher/SettingPages/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/SettingPages/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/SettingPages/codemap.md
Normal file
19
Flow.Launcher/SettingPages/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/SettingPages/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/Storage/codemap.md
Normal file
19
Flow.Launcher/Storage/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/Storage/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Flow.Launcher/ViewModel/codemap.md
Normal file
19
Flow.Launcher/ViewModel/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Flow.Launcher/ViewModel/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
46
Flow.Launcher/codemap.md
Normal file
46
Flow.Launcher/codemap.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
# Flow.Launcher (WPF Main Application)
|
||||
|
||||
## Responsibility
|
||||
This directory contains the entry point and the primary WPF user interface for Flow Launcher. It acts as the host for the entire application, orchestrating the lifecycle, plugin management integration, and user interaction.
|
||||
|
||||
Its main duties include:
|
||||
- **Application Lifecycle**: Managing startup, single-instance enforcement, and graceful shutdown.
|
||||
- **Main Search UI**: Providing the global search window (`MainWindow`) and handling its positioning, animations, and visibility.
|
||||
- **Settings Management**: Hosting the multi-page settings window and ensuring user configurations are persisted.
|
||||
- **Plugin API Hosting**: Implementing the `IPublicAPI` which serves as the primary bridge between the application core and external plugins.
|
||||
- **System Integration**: Handling system tray icons, global hotkeys, and Windows-native notifications.
|
||||
|
||||
## Design Patterns
|
||||
- **MVVM (Model-View-ViewModel)**: Strict separation of UI (`.xaml`/`.cs`) and logic (`MainViewModel`, `ResultsViewModel` in `Flow.Launcher.ViewModel`).
|
||||
- **Dependency Injection (DI)**: Uses `Microsoft.Extensions.DependencyInjection` and `CommunityToolkit.Mvvm` to manage service lifetimes (e.g., `Settings`, `MainViewModel`, `IPublicAPI` are singletons).
|
||||
- **Bridge Pattern**: `PublicAPIInstance` acts as a bridge, decoupling the Plugin SDK (`Flow.Launcher.Plugin`) from the internal implementation details of the core application.
|
||||
- **Observer Pattern**: Extensive use of `INotifyPropertyChanged` and event handlers to sync UI state with settings and search results.
|
||||
- **Singleton**: Ensured via the DI container for core application-wide state.
|
||||
|
||||
## Key Classes
|
||||
- **`App.xaml.cs`**: The application's orchestrator. It configures DI, initializes the `PluginManager`, handles unhandled exceptions, and manages the single-instance logic.
|
||||
- **`MainWindow.xaml.cs`**: The main search interface. Handles complex UI logic like blur effects (Backdrop), custom window positioning on multiple monitors, and search-box focus management.
|
||||
- **`PublicAPIInstance.cs`**: The concrete implementation of the `IPublicAPI` interface. This is the object passed to every plugin, allowing them to interact with the launcher (e.g., `ChangeQuery`, `ShowMsg`, `OpenUrl`).
|
||||
- **`SettingWindow.xaml.cs`**: The UI for user configuration. It uses a `NavigationView` to switch between different settings categories (General, Plugins, Theme, etc.).
|
||||
- **`Notification.cs`**: A wrapper for the Windows notification system (using `Microsoft.Toolkit.Uwp.Notifications`), falling back to custom WPF windows (`Msg.xaml`) for older OS versions.
|
||||
- **`ResultListBox.xaml.cs`**: A customized `ListBox` that handles specialized interaction logic like drag-and-drop of file results and mouse-over selection behaviors.
|
||||
|
||||
## Data & Control Flow
|
||||
1. **Startup Flow**:
|
||||
`App.Main()` -> Load `Settings` -> `App.OnStartup()` -> `PluginManager.LoadPlugins()` -> `PluginManager.InitializePluginsAsync()` -> Create `MainWindow`.
|
||||
2. **Search Flow**:
|
||||
User types in `MainWindow.QueryTextBox` -> `MainViewModel.QueryText` updates -> `MainViewModel.QueryResults()` -> `PluginManager.QueryAsync()` -> Results update in `ResultsViewModel` -> `MainWindow` UI reflects results.
|
||||
3. **Execution Flow**:
|
||||
User selects result -> `MainViewModel.SelectResult()` -> Result's `Action` (defined in plugin) is executed via `MainViewModel`.
|
||||
4. **Settings Flow**:
|
||||
User changes setting in `SettingWindow` -> `Settings` property updates (via binding) -> `Settings.Save()` is called (auto-persisted to JSON) -> UI/Core responds to `PropertyChanged`.
|
||||
|
||||
## Integration Points
|
||||
- **`Flow.Launcher.Core`**: Heavily dependent on `PluginManager` for all search logic and `Internationalization` for multi-language support.
|
||||
- **`Flow.Launcher.Infrastructure`**: Consumes `Settings`, `Logger`, `Http`, and `ImageLoader`.
|
||||
- **`Flow.Launcher.ViewModel`**: The primary data source for all windows in this project.
|
||||
- **`Flow.Launcher.Plugin`**: Provides the SDK interfaces and models used to communicate with plugins.
|
||||
- **External Libraries**:
|
||||
- `ModernWpf`: For Windows 11-style UI controls.
|
||||
- `CommunityToolkit.Mvvm`: For the MVVM framework and DI.
|
||||
- `Squirrel`: For application updates and restart logic.
|
||||
|
|
@ -172,6 +172,26 @@
|
|||
"resolved": "6.3.0.90",
|
||||
"contentHash": "WVTb5MxwGqKdeasd3nG5udlV4t6OpvkFanziwI133K0/QJ5FvZmfzRQgpAjGTJhQfIA8GP7AzKQ3sTY9JOFk8Q=="
|
||||
},
|
||||
"Avalonia": {
|
||||
"type": "Transitive",
|
||||
"resolved": "11.2.3",
|
||||
"contentHash": "pD6woFAUfGcyEvMmrpctntU4jv4fT8752pfx1J5iRORVX3Ob0oQi8PWo0TXVaAJZiSfH0cdKTeKx0w0DzD0/mg==",
|
||||
"dependencies": {
|
||||
"Avalonia.BuildServices": "0.0.29",
|
||||
"Avalonia.Remote.Protocol": "11.2.3",
|
||||
"MicroCom.Runtime": "0.11.0"
|
||||
}
|
||||
},
|
||||
"Avalonia.BuildServices": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.0.29",
|
||||
"contentHash": "U4eJLQdoDNHXtEba7MZUCwrBErBTxFp6sUewXBOdAhU0Kwzwaa/EKFcYm8kpcysjzKtfB4S0S9n0uxKZFz/ikw=="
|
||||
},
|
||||
"Avalonia.Remote.Protocol": {
|
||||
"type": "Transitive",
|
||||
"resolved": "11.2.3",
|
||||
"contentHash": "6V0aNtld48WmO8tAlWwlRlUmXYcOWv+1eJUSl1ETF+1blUe5yhcSmuWarPprO0hDk8Ta6wGfdfcrnVl2gITYcA=="
|
||||
},
|
||||
"Ben.Demystifier": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.4.1",
|
||||
|
|
@ -271,6 +291,11 @@
|
|||
"resolved": "3.4.5",
|
||||
"contentHash": "R/d2VSdbRQHDWfPf5sjvMOWrWvxh/CswdMDKODppHTjsDLIkLQbQrnjmtAaVqu0qgUf8KFlVzEfxy3GIVoCK9g=="
|
||||
},
|
||||
"MicroCom.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.11.0",
|
||||
"contentHash": "MEnrZ3UIiH40hjzMDsxrTyi8dtqB5ziv3iBeeU4bXsL/7NLSal9F1lZKpK+tfBRnUoDSdtcW3KufE4yhATOMCA=="
|
||||
},
|
||||
"Microsoft.Extensions.Configuration": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.9",
|
||||
|
|
@ -1619,7 +1644,7 @@
|
|||
"FSharp.Core": "[9.0.303, )",
|
||||
"Flow.Launcher.Infrastructure": "[1.0.0, )",
|
||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
||||
"Meziantou.Framework.Win32.Jobs": "[3.4.5, )",
|
||||
"Microsoft.IO.RecyclableMemoryStream": "[3.0.1, )",
|
||||
"SemanticVersioning": "[3.0.0, )",
|
||||
|
|
@ -1634,7 +1659,7 @@
|
|||
"BitFaster.Caching": "[2.5.4, )",
|
||||
"CommunityToolkit.Mvvm": "[8.4.0, )",
|
||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
||||
"InputSimulator": "[1.0.4, )",
|
||||
"MemoryPack": "[1.21.4, )",
|
||||
"Microsoft.VisualStudio.Threading": "[17.14.15, )",
|
||||
|
|
@ -1650,9 +1675,853 @@
|
|||
"flow.launcher.plugin": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Avalonia": "[11.2.3, )",
|
||||
"JetBrains.Annotations": "[2025.2.2, )"
|
||||
}
|
||||
}
|
||||
},
|
||||
"net9.0-windows10.0.19041/win-x64": {
|
||||
"Microsoft.Win32.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.win.Microsoft.Win32.Primitives": "4.3.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.Registry": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.0.0",
|
||||
"contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "5.0.0",
|
||||
"System.Security.Principal.Windows": "5.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.0",
|
||||
"contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ=="
|
||||
},
|
||||
"runtime.any.System.Collections": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==",
|
||||
"dependencies": {
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.any.System.Diagnostics.Tools": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "S/GPBmfPBB48ZghLxdDR7kDAJVAqgAuThyDJho3OLP5OS4tWD2ydyL8LKm8lhiBxce10OKe9X2zZ6DUjAqEbPg=="
|
||||
},
|
||||
"runtime.any.System.Diagnostics.Tracing": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ=="
|
||||
},
|
||||
"runtime.any.System.Globalization": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "sMDBnad4rp4t7GY442Jux0MCUuKL4otn5BK6Ni0ARTXTSpRNBzZ7hpMfKSvnVSED5kYJm96YOWsqV0JH0d2uuw=="
|
||||
},
|
||||
"runtime.any.System.Globalization.Calendars": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w=="
|
||||
},
|
||||
"runtime.any.System.IO": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ=="
|
||||
},
|
||||
"runtime.any.System.Reflection": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ=="
|
||||
},
|
||||
"runtime.any.System.Reflection.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "cPhT+Vqu52+cQQrDai/V91gubXUnDKNRvlBnH+hOgtGyHdC17aQIU64EaehwAQymd7kJA5rSrVRNfDYrbhnzyA=="
|
||||
},
|
||||
"runtime.any.System.Reflection.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "Nrm1p3armp6TTf2xuvaa+jGTTmncALWFq22CpmwRvhDf6dE9ZmH40EbOswD4GnFLrMRS0Ki6Kx5aUPmKK/hZBg=="
|
||||
},
|
||||
"runtime.any.System.Resources.ResourceManager": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ=="
|
||||
},
|
||||
"runtime.any.System.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==",
|
||||
"dependencies": {
|
||||
"System.Private.Uri": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.any.System.Runtime.Handles": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "GG84X6vufoEzqx8PbeBKheE4srOhimv+yLtGb/JkR3Y2FmoqmueLNFU4Xx8Y67plFpltQSdK74x0qlEhIpv/CQ=="
|
||||
},
|
||||
"runtime.any.System.Runtime.InteropServices": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "lBoFeQfxe/4eqjPi46E0LU/YaCMdNkQ8B4MZu/mkzdIAZh8RQ1NYZSj0egrQKdgdvlPFtP4STtob40r4o2DBAw=="
|
||||
},
|
||||
"runtime.any.System.Text.Encoding": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "+ihI5VaXFCMVPJNstG4O4eo1CfbrByLxRrQQTqOTp1ttK0kUKDqOdBSTaCB2IBk/QtjDrs6+x4xuezyMXdm0HQ=="
|
||||
},
|
||||
"runtime.any.System.Text.Encoding.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "NLrxmLsfRrOuVqPWG+2lrQZnE53MLVeo+w9c54EV+TUo4c8rILpsDXfY8pPiOy9kHpUHHP07ugKmtsU3vVW5Jg=="
|
||||
},
|
||||
"runtime.any.System.Threading.Tasks": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w=="
|
||||
},
|
||||
"runtime.any.System.Threading.Timer": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "w4ehZJ+AwXYmGwYu+rMvym6RvMaRiUEQR1u6dwcyuKHxz8Heu/mO9AG1MquEgTyucnhv3M43X0iKpDOoN17C0w=="
|
||||
},
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q=="
|
||||
},
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA=="
|
||||
},
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw=="
|
||||
},
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A=="
|
||||
},
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ=="
|
||||
},
|
||||
"runtime.osx.10.10-x64.CoreCompat.System.Drawing": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.8.64",
|
||||
"contentHash": "Ey7xQgWwixxdrmhzEUvaR4kxZDSQMWQScp8ViLvmL5xCBKG6U3TaMv/jzHilpfQXpHmJ4IylKGzzMvnYX2FwHQ=="
|
||||
},
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
|
||||
},
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g=="
|
||||
},
|
||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg=="
|
||||
},
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ=="
|
||||
},
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A=="
|
||||
},
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg=="
|
||||
},
|
||||
"runtime.win.Microsoft.Win32.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==",
|
||||
"dependencies": {
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.win.System.Console": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "RRACWygml5dnmfgC1SW6tLGsFgwsUAKFtvhdyHnIEz4EhWyrd7pacDdY95CacQJy7BMXRDRCejC9aCRC0Y1sQA==",
|
||||
"dependencies": {
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Text.Encoding.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.win.System.Diagnostics.Debug": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g=="
|
||||
},
|
||||
"runtime.win.System.IO.FileSystem": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==",
|
||||
"dependencies": {
|
||||
"System.Buffers": "4.3.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Text.Encoding.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Overlapped": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.win.System.Net.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "lkXXykakvXUU+Zq2j0pC6EO20lEhijjqMc01XXpp1CJN+DeCwl3nsj4t5Xbpz3kA7yQyTqw6d9SyIzsyLsV3zA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Primitives": "4.3.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.win.System.Net.Sockets": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==",
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Net.NameResolution": "4.3.0",
|
||||
"System.Net.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Principal.Windows": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Overlapped": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"runtime.win.System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==",
|
||||
"dependencies": {
|
||||
"System.Private.Uri": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Buffers": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
|
||||
"dependencies": {
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Collections": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Collections": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Console": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"runtime.win.System.Console": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.Debug": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.win.System.Diagnostics.Debug": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.9",
|
||||
"contentHash": "wpsUfnyv8E5K4WQaok6weewvAbQhcLwXFcHBm5U0gdEaBs85N//ssuYvRPFWwz2rO/9/DFP3A1sGMzUFBj8y3w=="
|
||||
},
|
||||
"System.Diagnostics.Tools": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Diagnostics.Tools": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.Tracing": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Diagnostics.Tracing": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Drawing.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.0",
|
||||
"contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.SystemEvents": "7.0.0"
|
||||
}
|
||||
},
|
||||
"System.Globalization": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Globalization": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Globalization.Calendars": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Globalization.Calendars": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Globalization.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.any.System.IO": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO.Compression": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Buffers": "4.3.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.native.System": "4.3.0",
|
||||
"runtime.native.System.IO.Compression": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO.FileSystem": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.win.System.IO.FileSystem": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Net.Http": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Diagnostics.DiagnosticSource": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Globalization.Extensions": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem": "4.3.0",
|
||||
"System.Net.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.OpenSsl": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Security.Cryptography.X509Certificates": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.native.System": "4.3.0",
|
||||
"runtime.native.System.Net.Http": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Net.NameResolution": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Net.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Principal.Windows": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.native.System": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Net.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"runtime.win.System.Net.Primitives": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Net.Sockets": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Net.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"runtime.win.System.Net.Sockets": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Private.Uri": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "I4SwANiUGho1esj4V4oSlPllXjzCZDE+5XXso2P03LW2vOda2Enzh8DWOxwN6hnrJyp314c7KuVu31QYhRzOGg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Reflection": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Reflection.Extensions": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Reflection.Primitives": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Resources.ResourceManager": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Resources.ResourceManager": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"runtime.any.System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.win.System.Runtime.Extensions": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.Handles": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Runtime.Handles": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.InteropServices": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"runtime.any.System.Runtime.InteropServices": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.InteropServices.RuntimeInformation": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
|
||||
"dependencies": {
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Extensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"runtime.native.System": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.AccessControl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.1",
|
||||
"contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw=="
|
||||
},
|
||||
"System.Security.Cryptography.Algorithms": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Runtime.Numerics": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.Apple": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Cng": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Csp": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Encoding": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Collections.Concurrent": "4.3.0",
|
||||
"System.Linq": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.OpenSsl": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Runtime.Numerics": "4.3.0",
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.X509Certificates": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Globalization.Calendars": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Runtime.Numerics": "4.3.0",
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Cng": "4.3.0",
|
||||
"System.Security.Cryptography.Csp": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.OpenSsl": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"runtime.native.System": "4.3.0",
|
||||
"runtime.native.System.Net.Http": "4.3.0",
|
||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.0.0",
|
||||
"contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
|
||||
},
|
||||
"System.Text.Encoding": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Text.Encoding": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"runtime.any.System.Text.Encoding.Extensions": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Threading.Overlapped": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "m3HQ2dPiX/DSTpf+yJt8B0c+SRvzfqAJKx+QDWi+VLhz8svLT23MVjEOHPF/KiSLeArKU/iHescrbLd3yVgyNg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Threading.Timer": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
"contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"runtime.any.System.Threading.Timer": "4.3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.BrowserBookmark/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.BrowserBookmark/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.BrowserBookmark/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Calculator/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Calculator/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Calculator/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Calculator/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Calculator/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Calculator/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Calculator/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/Helper/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/Helper/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Helper/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/IProvider/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/Search/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/Search/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Search/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Explorer/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Explorer/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Explorer/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.PluginIndicator/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.PluginIndicator/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.PluginIndicator/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.PluginsManager/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.PluginsManager/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.PluginsManager/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.PluginsManager/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.PluginsManager/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.PluginsManager/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.PluginsManager/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.ProcessKiller/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.ProcessKiller/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.ProcessKiller/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.ProcessKiller/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.ProcessKiller/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.ProcessKiller/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.ProcessKiller/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.ProcessKiller/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/Logger/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/Logger/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Logger/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/Programs/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/Programs/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Programs/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/ViewModels/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/ViewModels/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Views/Commands/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/Views/Models/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/Views/Models/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Views/Models/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Program/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Program/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Program/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/Converters/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Shell/Converters/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Shell/Converters/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/Converters/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Shell/ViewModels/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Shell/ViewModels/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/ViewModels/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Shell/Views/Avalonia/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Shell/Views/Avalonia/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Shell/Views/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Shell/Views/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/Views/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Shell/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Shell/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Shell/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Sys/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Sys/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Sys/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
19
Plugins/Flow.Launcher.Plugin.Url/codemap.md
Normal file
19
Plugins/Flow.Launcher.Plugin.Url/codemap.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.Url/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Plugins/Flow.Launcher.Plugin.WebSearch/Views/Avalonia/
|
||||
|
||||
<!-- Explorer: Fill in this section with architectural understanding -->
|
||||
|
||||
## Responsibility
|
||||
|
||||
<!-- What is this folder's job in the system? -->
|
||||
|
||||
## Design
|
||||
|
||||
<!-- Key patterns, abstractions, architectural decisions -->
|
||||
|
||||
## Flow
|
||||
|
||||
<!-- How does data/control flow through this module? -->
|
||||
|
||||
## Integration
|
||||
|
||||
<!-- How does it connect to other parts of the system? -->
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue