v2.2.313~319: 보고 품질·조사 신뢰성 수술 + 네이버 쇼핑인사이트/검색어트렌드 연동

- 파트별 완성, 웹 실접속 증빙, 턴 의도 브리핑, 본문 불일치 검증, 하위 질문
  체크리스트, 사이트 심층 수집 (PATCHNOTES.md v2.2.313~318 참조)
- /naver-shopping, /naver-trend: 네이버 데이터랩 API 연동. compare/discover
  자동 판별, API 배치 상한 캡슐화, 카테고리 트리 fuzzy 매칭, 자격증명은
  Astra 설정 패널 SecretStorage 로 관리
This commit is contained in:
2026-08-05 18:20:32 +09:00
parent 7d6b8b509f
commit c79eda1862
51 changed files with 37435 additions and 89 deletions
@@ -4,6 +4,7 @@ import { stripMarkdownFormatting, looksCutOff } from '../../core/responseRecover
import {
sanitizeAssistantContent,
parseRationale,
stripLeakedInternalSections,
} from '../../lib/contextBuilders/outputSanitization';
import {
isSecondBrainInventoryRequest,
@@ -42,6 +43,11 @@ export interface ProcessFinalAnswerInput {
actualModel: string;
engine: string;
inputTokens: number;
/**
* [v2.2.314] Project Record Guard(designerContext) 활성 턴 여부 — 활성이면 가드가
* 요구하는 "요청 요약" 류 섹션을 보존하고, 아니면 유출 스캐폴딩으로 보고 제거한다.
*/
recordGuardActive?: boolean;
}
export interface ProcessFinalAnswerResult {
@@ -87,6 +93,11 @@ export function processFinalAnswer(input: ProcessFinalAnswerInput): ProcessFinal
),
localPathContext
);
// [v2.2.314] 내부 스캐폴딩 섹션 유출 제거 — Record Guard 턴이 아니면 "요청 요약/
// 사용자 의도 추론/핵심 확인 질문" 류는 규칙 4 위반 유출이므로 결정론으로 걷어낸다.
if (!input.recordGuardActive) {
assistantContent = stripLeakedInternalSections(assistantContent);
}
if (prompt && isSecondBrainInventoryRequest(prompt) && brainFiles.length > 0 && isNoBrainDataRefusal(assistantContent)) {
assistantContent = buildSecondBrainInventoryFallbackAnswer(activeBrain, brainFiles, secondBrainTrace);
}