AX Agent 창 제목 고정 및 PPT 품질 재루프 고도화

- 채팅창 Windows 제목을 AX Agent로 고정해 작업 표시줄/Alt+Tab에서 대화 제목이 섞이지 않도록 조정

- Assets/ppt manifest와 템플릿 카탈로그를 추가해 basic100/core100 등 고품질 PPT 자산을 실행 폴더, 소스 루트, AppData 템플릿 폴더에서 안정적으로 탐색하도록 개선

- pptx_create 결과에서 asset missing과 color fallback을 구분해 진단 메시지를 남기고 Cowork에서는 PPT quality/slide alerts/Needs work 기준으로 최대 2회 재생성 루프를 타도록 품질 게이트 추가

- PPT 시스템 프롬프트와 pptx-creator 스킬 지시를 document_plan -> pptx_create 중심으로 정렬

- 검증: dotnet build ...verify_ppt_quality_gate 경고 0/오류 0, dotnet test ...PptxSkillTemplatePackTests|PptxSkillAutoRepairTests|PptxSkillGoldenDeckTests|PptQualityGatePolicyTests|PptxTemplateManifestCatalogTests 통과 12
This commit is contained in:
2026-04-15 21:49:09 +09:00
parent 2c48ca211a
commit f8067a1f9b
16 changed files with 666 additions and 68 deletions

View File

@@ -0,0 +1,43 @@
using System.IO;
using AxCopilot.Services.Agent;
using FluentAssertions;
using Xunit;
namespace AxCopilot.Tests.Services;
public class PptxTemplateManifestCatalogTests
{
[Fact]
public void Resolve_ShouldReturnManifestEntry_ForKnownTemplate()
{
var entry = PptxTemplateManifestCatalog.Resolve("basic100");
entry.Should().NotBeNull();
entry!.FileName.Should().Be("BASIC100 기준 템플릿 V1.pptx");
entry.FallbackTheme.Should().Be("professional");
}
[Fact]
public void ResolveTemplate_ShouldFindBundledSourceAsset_FromTestRuntime()
{
var resolution = PptxTemplateManifestCatalog.ResolveTemplate("basic100");
resolution.Entry.Should().NotBeNull();
resolution.IsResolved.Should().BeTrue();
resolution.Status.Should().Be("resolved");
File.Exists(resolution.ResolvedPath).Should().BeTrue();
Path.GetFileName(resolution.ResolvedPath!).Should().Be(resolution.Entry!.FileName);
}
[Fact]
public void EnumerateCandidateDirectories_ShouldIncludeProjectSourceAssets()
{
var directories = PptxTemplateManifestCatalog.EnumerateCandidateDirectoriesForTesting(
AppContext.BaseDirectory,
Environment.CurrentDirectory,
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
directories.Should().Contain(path =>
path.EndsWith(Path.Combine("src", "AxCopilot", "Assets", "ppt"), StringComparison.OrdinalIgnoreCase));
}
}