개발언어 워크플로 힌트와 문서 품질 출력 경로를 고도화한다
- CodeLanguageCatalog에 manifest/build/test/lint 조회 API와 workflow summary 조합기를 추가해 no-LSP fallback과 컨텍스트 생성이 같은 힌트 소스를 재사용하도록 정리한다. - WorkspaceContextGenerator에 Language Workflow 섹션을 추가해 상위 언어의 실행 힌트를 .ax-context.md에 기록하고, HtmlSkill/ExcelSkill은 공통 ArtifactQualityOutputFormatter로 품질 요약과 repair guide를 일관되게 출력하도록 맞춘다. - README.md, docs/DEVELOPMENT.md, docs/NEXT_ROADMAP.md를 2026-04-15 09:49 (KST) 기준으로 갱신하고, CodeLanguageCatalogTests 및 WorkspaceContextGeneratorTests를 확장해 빌드 경고 0/오류 0과 관련 테스트 35건 통과를 확인한다.
This commit is contained in:
@@ -380,6 +380,72 @@ public static class CodeLanguageCatalog
|
||||
sb.Append(BuildLspSupportDescription());
|
||||
return sb.ToString();
|
||||
}
|
||||
public static IReadOnlyList<string> GetManifestHints(string? key)
|
||||
{
|
||||
var normalizedKey = FindByKey(key)?.Key;
|
||||
if (string.IsNullOrWhiteSpace(normalizedKey))
|
||||
return [];
|
||||
|
||||
return s_manifestHints.TryGetValue(normalizedKey, out var hints)
|
||||
? hints
|
||||
: [];
|
||||
}
|
||||
|
||||
public static IReadOnlyList<string> GetBuildHints(string? key)
|
||||
{
|
||||
var normalizedKey = FindByKey(key)?.Key;
|
||||
if (string.IsNullOrWhiteSpace(normalizedKey))
|
||||
return [];
|
||||
|
||||
return s_buildHints.TryGetValue(normalizedKey, out var hints)
|
||||
? hints
|
||||
: [];
|
||||
}
|
||||
|
||||
public static IReadOnlyList<string> GetTestHints(string? key)
|
||||
{
|
||||
var normalizedKey = FindByKey(key)?.Key;
|
||||
if (string.IsNullOrWhiteSpace(normalizedKey))
|
||||
return [];
|
||||
|
||||
return s_testHints.TryGetValue(normalizedKey, out var hints)
|
||||
? hints
|
||||
: [];
|
||||
}
|
||||
|
||||
public static IReadOnlyList<string> GetLintHints(string? key)
|
||||
{
|
||||
var normalizedKey = FindByKey(key)?.Key;
|
||||
if (string.IsNullOrWhiteSpace(normalizedKey))
|
||||
return [];
|
||||
|
||||
return s_lintHints.TryGetValue(normalizedKey, out var hints)
|
||||
? hints
|
||||
: [];
|
||||
}
|
||||
|
||||
public static string BuildWorkflowSummary(string? key, int maxHintsPerKind = 2)
|
||||
{
|
||||
var capability = FindByKey(key);
|
||||
if (capability == null)
|
||||
return string.Empty;
|
||||
|
||||
var parts = new List<string>();
|
||||
AppendHintBlock(parts, "manifests", GetManifestHints(capability.Key), maxHintsPerKind);
|
||||
AppendHintBlock(parts, "build", GetBuildHints(capability.Key), maxHintsPerKind);
|
||||
AppendHintBlock(parts, "test", GetTestHints(capability.Key), maxHintsPerKind);
|
||||
AppendHintBlock(parts, "lint", GetLintHints(capability.Key), maxHintsPerKind);
|
||||
|
||||
var primaryGuidance = capability.Guidance.FirstOrDefault();
|
||||
if (!string.IsNullOrWhiteSpace(primaryGuidance))
|
||||
parts.Add("focus: " + primaryGuidance);
|
||||
|
||||
if (parts.Count == 0)
|
||||
return capability.DisplayName;
|
||||
|
||||
return $"{capability.DisplayName}: {string.Join(" | ", parts)}";
|
||||
}
|
||||
|
||||
public static string BuildFallbackSupportDescription()
|
||||
=> "LSP 서버가 없거나 연결되지 않아도 확장자, 매니페스트, build/test/lint 힌트 기반의 정적 분석을 계속 제공합니다.";
|
||||
|
||||
@@ -417,4 +483,19 @@ public static class CodeLanguageCatalog
|
||||
|
||||
return sb.ToString().TrimEnd();
|
||||
}
|
||||
|
||||
private static void AppendHintBlock(List<string> parts, string label, IReadOnlyList<string> hints, int maxHintsPerKind)
|
||||
{
|
||||
if (hints.Count == 0)
|
||||
return;
|
||||
|
||||
var limited = hints
|
||||
.Where(hint => !string.IsNullOrWhiteSpace(hint))
|
||||
.Take(Math.Max(1, maxHintsPerKind))
|
||||
.ToList();
|
||||
if (limited.Count == 0)
|
||||
return;
|
||||
|
||||
parts.Add($"{label}: {string.Join(", ", limited)}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user