uno-agentic-support
Uno Platformアプリのエージェント駆動型開発向けのアプリ内サポート機能です。uno_app_startでUno Platformアプリを実行または準備する際に使用できます。また、AGENT_CONSOLE_LOGで指定されたログファイルが見つからない場合、「uno-agentic-support」エントリが不足している場合、またはエージェントUIテスト中にHot ReloadやHot Designが表示されたままになっている場合にも使用します。
description の原文を見る
In-app support for agentic development of Uno Platform apps. Use when running or preparing a Uno Platform app for agent-driven execution with uno_app_start. Also use when the expected log file specified in AGENT_CONSOLE_LOG is missing or lacks "uno-agentic-support" entry, or Hot Reload / Hot Design remains visible during agent UI testing.
SKILL.md 本文
Uno Platform アプリのエージェント開発向けアプリ内サポート
エージェントを使用して Uno Platform アプリを実行する場合に使用します。 このスキルは、Uno アプリがエージェント開発をサポートするための適切な設定が行われていることを確保します。
アプリがエージェントによって実行される場合(つまり、AGENT_CONSOLE_LOG がコマンドライン引数として渡されるか、AGENT_CONSOLE_LOG 環境変数が設定されている場合)、このスキルは以下を確保します:
- アプリからの包括的で早期段階のログが、エージェントによって指定されたログファイルで利用可能である
- Uno Studio Hot Reload / Hot Design UI が無効化され、アプリ UI テストへの干渉やアプリスタートアップの遅延を防ぐ
1. このスキルを使用する場合
以下のいずれかに該当する場合、このスキルを選択してください:
- エージェントが現在のワーキングフォルダ内の Uno アプリを実行することが予定されている
- エージェントが現在のワーキングフォルダ内の Uno アプリを実行し、
AGENT_CONSOLE_LOGがコマンドライン引数として渡されたか、AGENT_CONSOLE_LOG環境変数が設定されていて、以下のいずれかが当てはまる:- 指定されたログファイルが作成されていない、または
uno-agentic-supportに言及するログエントリが含まれていない - 指定されたログファイルに
uno-agentic-support: trueに言及するログエントリが含まれているが、エージェントによって起動された Uno アプリが依然として Hot Reload / Hot Design UI を表示している
- 指定されたログファイルが作成されていない、または
2. 一時停止 — 編集を適用する前の前提条件ゲート
このスキルからの編集を適用する前に、現在のワーキングフォルダでこの前提条件チェックを実行し、結果に基づいて対応してください。
Uno Platform アプリプロジェクトがワーキングフォルダに存在する必要があります。ワーキングフォルダから Uno アプリの .csproj を探してください。有効な Uno アプリプロジェクトは Uno SDK を使用し、プロジェクトフォルダ内またはその下に App.xaml.cs を含む必要があります。
Uno Platform アプリプロジェクトが見つからない場合は、ユーザーにこの旨を報告し、一時停止してください。
3. App.xaml.cs がエージェント開発用にワイヤアップされていることを確認
App.xaml.cs で:
-
盲目的に貼り付けるのではなく、適応させてください。Uno テンプレートとアプリケーションホストセットアップは異なります。既存のアプリ動作、ロギングプロバイダー、フィルター、ホスト設定、名前空間、およびコメントは、エージェントサポートと直接的に競合しない限り、保持してください。
-
Appクラスがこれらのコードスニペットを含むことを確認してください:#if DEBUG readonly bool startedByAgent; #endif #if DEBUG bool InitializeAgentSupport() { string? agentConsoleLogPath = ResolveAgentConsoleLogPath(); if (agentConsoleLogPath is not null) { var stream = new FileStream(agentConsoleLogPath, FileMode.CreateNew, FileAccess.Write, FileShare.Read); var writer = new StreamWriter(stream) { AutoFlush = true }; Console.SetOut(writer); Console.SetError(writer); } // Make sure that loggings made before the application host is initialized are captured LogExtensionPoint.AmbientLoggerFactory = LoggerFactory.Create(ConfigureAppLogging); #if HAS_UNO Uno.UI.Adapter.Microsoft.Extensions.Logging.LoggingAdapter.Initialize(); #endif return agentConsoleLogPath is not null; } static string? ResolveAgentConsoleLogPath() { const string Key = "AGENT_CONSOLE_LOG"; string prefix = Key + "="; foreach (string arg in Environment.GetCommandLineArgs()) { if (arg.StartsWith(prefix, StringComparison.Ordinal)) { string value = arg[prefix.Length..]; if (!string.IsNullOrEmpty(value)) return value; } } string? fromEnv = Environment.GetEnvironmentVariable(Key); return string.IsNullOrEmpty(fromEnv) ? null : fromEnv; } #endif void ConfigureAppLogging(ILoggingBuilder logBuilder) { _ = logBuilder.SetMinimumLevel(LogLevel.Warning); #if DEBUG // Set the default log level for the app's own namespace to Debug _ = logBuilder.AddFilter(GetType().Namespace!.Split('.')[0], LogLevel.Debug); // Make sure that agents receive the logs in the console if (startedByAgent) _ = logBuilder.AddConsole(); // Uno Platform namespace filter groups // Uncomment individual methods to see more detailed logging //// Generic Xaml events //logBuilder.XamlLogLevel(LogLevel.Debug); //// Layout specific messages //logBuilder.XamlLayoutLogLevel(LogLevel.Debug); //// Storage messages //logBuilder.StorageLogLevel(LogLevel.Debug); //// Binding related messages //logBuilder.XamlBindingLogLevel(LogLevel.Debug); //// Binder memory references tracking //logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug); //// DevServer and HotReload related //logBuilder.HotReloadCoreLogLevel(LogLevel.Information); //// Debug JS interop //logBuilder.WebAssemblyLogLevel(LogLevel.Debug); #endif } -
Appコンストラクタは以下のステートメントで始まる必要があります。存在しない場合は追加するか、存在しているが先頭にない場合はコンストラクタの最上部に移動してください:#if DEBUG startedByAgent = InitializeAgentSupport(); var logger = this.Log(); if (logger.IsEnabled(LogLevel.Debug)) logger.LogDebug("Application Launched in DEBUG mode. uno-agentic-support: {StartedByAgent}", startedByAgent); #endif -
OnLaunchedメソッド内:- アプリケーションホスト設定は
configure: ConfigureAppLoggingとenableUnoLogging: trueを指定して.UseLogging()を呼び出す必要があります。 .UseLogging()が既に存在する場合は、既存のアプリ固有のロギング設定を保持し、ConfigureAppLoggingが依然として実行され、Uno ロギングが有効のままになるように適応させてください。.UseLogging()がない場合は、既存のホスト設定チェーンに追加してください:.UseLogging( configure: ConfigureAppLogging, enableUnoLogging: true )ConfigureAppLogging内で、既存のアプリ固有のフィルターとプロバイダーを保持してください。エージェント固有の部分がない場合のみ追加してください:logBuilder.SetMinimumLevel(LogLevel.Warning);logBuilder.AddFilter(GetType().Namespace!.Split('.')[0], LogLevel.Debug);if (startedByAgent) logBuilder.AddConsole();
- 既存の
UseStudio呼び出しが存在する場合は、以下のように置き換えてください:#if DEBUG MainWindow.UseStudio(showHotReloadIndicator: !startedByAgent, launchHotDesignOnStart: !startedByAgent); #endif
- アプリケーションホスト設定は
4. 検証
編集後:
- リポジトリのアクティブなビルドと実行ディレクティブを使用してアプリをビルドまたは起動します。
AGENT_CONSOLE_LOG=<new-log-path>を指定してください。 - ログファイルが存在することを確認してください。
uno-agentic-support: Trueを含むことを確認してください。- Hot Reload / Hot Design UI が表示されていないことを確認してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- VincentH-Net
- ライセンス
- MIT
- 最終更新
- 2026/5/8
Source: https://github.com/VincentH-Net/dotnet-agentic-engineering / ライセンス: MIT