diff --git a/README.md b/README.md index e5e5d53..d620a1d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # AX Commander +- 업데이트: 2026-04-15 20:06 (KST) +- 빠른 로컬 테스트용 Windows 빌드 스크립트 [build-quick.ps1](/E:/AX%20Copilot%20-%20Codex/build-quick.ps1)를 추가했습니다. 인스톨러/`dist` 패키징 없이 `src/AxCopilot/AxCopilot.csproj`만 `dotnet build -c Release -r win-x64`로 빌드합니다. +- 기본 출력 경로는 `src\AxCopilot\bin\Release\net8.0-windows10.0.17763.0\win-x64`이며, 기본 실행은 `--no-restore` 경로를 우선 사용해 반복 테스트 속도를 줄였습니다. 첫 실행이나 패키지 변경 시에는 `-Restore`, 실행 중 잠금이 있으면 `-StopRunningApp` 옵션을 사용할 수 있습니다. + - 업데이트: 2026-04-15 19:59 (KST) - AX Agent 스트리밍 중 탭 전환, 새 대화, 경과 시간이 멈춘 것처럼 보이던 회귀를 수정했습니다. `src/AxCopilot/Services/ChatSessionStateService.cs`는 탭별 마지막 대화 ID와 활성 탭이 실제로 바뀐 경우에만 설정 저장을 수행합니다. - 원인은 스트리밍 UI가 현재 대화를 다시 그릴 때마다 같은 세션 상태를 반복 저장하고, 그 저장이 `SettingsChanged`를 다시 발생시켜 `UpdateTabUI -> SwitchToTabConversation -> SaveLastConversations` 루프를 만들던 흐름이었습니다. diff --git a/build-quick.ps1 b/build-quick.ps1 new file mode 100644 index 0000000..250cd15 --- /dev/null +++ b/build-quick.ps1 @@ -0,0 +1,99 @@ +[CmdletBinding()] +param( + [switch]$Restore, + [switch]$Clean, + [switch]$StopRunningApp +) + +$ErrorActionPreference = "Stop" + +$root = Split-Path -Parent $MyInvocation.MyCommand.Path +$project = Join-Path $root "src\AxCopilot\AxCopilot.csproj" +$assetsFile = Join-Path $root "src\AxCopilot\obj\project.assets.json" +$configuration = "Release" +$runtime = "win-x64" +$targetFramework = "net8.0-windows10.0.17763.0" +$output = Join-Path $root "src\AxCopilot\bin\$configuration\$targetFramework\$runtime" + +function Invoke-Dotnet { + param( + [Parameter(Mandatory = $true)] + [string[]]$Arguments + ) + + Write-Host ("dotnet " + ($Arguments -join " ")) -ForegroundColor DarkGray + & dotnet @Arguments + if ($LASTEXITCODE -ne 0) { + throw "dotnet command failed with exit code $LASTEXITCODE." + } +} + +Write-Host "" +Write-Host "========================================" -ForegroundColor Cyan +Write-Host " AX Copilot - Quick Build (Windows)" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" + +if (-not (Test-Path $project)) { + throw "Project file not found: $project" +} + +if ($StopRunningApp) { + $running = Get-Process -Name "AxCopilot" -ErrorAction SilentlyContinue + if ($running) { + Write-Host "[0/3] Stopping running AxCopilot.exe..." -ForegroundColor Yellow + $running | Stop-Process -Force + } +} + +if ($Clean) { + Write-Host "[1/3] Cleaning previous quick-build output..." -ForegroundColor Yellow + Invoke-Dotnet -Arguments @( + "clean", $project, + "-c", $configuration, + "-r", $runtime, + "--nologo", + "-v", "minimal" + ) +} + +$shouldRestore = $Restore -or -not (Test-Path $assetsFile) +if ($shouldRestore) { + Write-Host "[2/3] Restoring NuGet packages..." -ForegroundColor Yellow + Invoke-Dotnet -Arguments @( + "restore", $project, + "-r", $runtime, + "--nologo", + "-v", "minimal" + ) +} + +Write-Host "[3/3] Building AxCopilot only (no installer, no publish)..." -ForegroundColor Yellow +$buildArgs = @( + "build", $project, + "-c", $configuration, + "-r", $runtime, + "--nologo", + "-v", "minimal", + "-m", + "-p:RunAnalyzersDuringBuild=false" +) + +if (-not $shouldRestore) { + $buildArgs += "--no-restore" +} + +Invoke-Dotnet -Arguments $buildArgs + +Write-Host "" +Write-Host "========================================" -ForegroundColor Green +Write-Host " Quick Build Complete" -ForegroundColor Green +Write-Host "========================================" -ForegroundColor Green +Write-Host "" +Write-Host ("Output: " + $output) -ForegroundColor Green +Write-Host "Skipped: installer, dist packaging, obfuscation, publish bundle" -ForegroundColor Green +Write-Host "" +Write-Host "Examples:" -ForegroundColor Cyan +Write-Host " .\build-quick.ps1" +Write-Host " .\build-quick.ps1 -StopRunningApp" +Write-Host " .\build-quick.ps1 -Restore -Clean" diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 257cd4e..41f4dee 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -1529,3 +1529,7 @@ UI ?遺우쁽????域뱀뮆???귐뗫솯?醫딆춦 ???袁る퓮 ?臾믩씜 ??疫 - `src/AxCopilot.Tests/Services/ChatSessionStateServiceTests.cs`에 `Save_DoesNotPersistOrRaiseEvents_WhenSessionStateIsUnchanged`, `Save_PersistsAndRaisesEvents_WhenSessionStateChanges`를 추가해 반복 저장 루프 회귀를 고정했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_streaming_tab_loop_fix\\ -p:IntermediateOutputPath=obj\\verify_streaming_tab_loop_fix\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatSessionStateServiceTests|ChatStreamingUiPolicyTests|AxAgentExecutionEngineTests" -p:OutputPath=bin\\verify_streaming_tab_loop_fix_tests\\ -p:IntermediateOutputPath=obj\\verify_streaming_tab_loop_fix_tests\\` 통과 51 +업데이트: 2026-04-15 20:06 (KST) +- 빠른 로컬 테스트 전용 Windows 스크립트 `build-quick.ps1`를 루트에 추가했습니다. 목적은 인스톨러 빌드와 `dist` 패키징을 건너뛰고 `src/AxCopilot/AxCopilot.csproj`만 직접 `Release + win-x64`로 빌드해 `src\\AxCopilot\\bin\\Release\\net8.0-windows10.0.17763.0\\win-x64` 출력물을 빠르게 갱신하는 것입니다. +- 스크립트는 기본적으로 `dotnet build --no-restore` 경로를 사용하고, `obj\\project.assets.json`이 없거나 사용자가 `-Restore`를 준 경우에만 restore를 수행합니다. 잠금 문제를 줄이기 위해 `-StopRunningApp`, 출력물 정리를 원할 때 `-Clean` 옵션도 함께 지원합니다. +- 검증: `powershell -ExecutionPolicy Bypass -File .\\build-quick.ps1` 실행으로 빠른 빌드 스크립트가 정상 완료되고 출력 경로가 갱신되는 것을 확인했습니다.