feat(core): 자기지식 접지·웹 접근·환경 자가점검 — 할루시네이션 방어 3중화 (v2.2.247)
- Alignment Self-Learning: 자가 조사(질문 전 두뇌 검색)·사용자 답변 두뇌 저장·핵심메시지/프로젝트 컨텍스트 주입 (alignmentResearch.ts 신규)
- 웹 접근: Bridge 폴백 직접 fetch(webFetch.ts 신규)·<fetch_url> 액션 태그·기업 모드 URL/아키텍처 컨텍스트 주입·bare 도메인 인식
- 트리거 버그 수정: startsWith('/') 가 절대경로를 슬래시 명령으로 오인 — 분석 지시·URL 주입 전멸 원인 (회귀 테스트 고정)
- 자기지식 접지: 기능 인벤토리 lazy 재생성·학습 메커니즘 정본 섹션·[인벤토리 대조] 태그 의무화·결정론적 재구현 제안 정정 훅(featureConceptMap.ts 신규)
- 환경 자가점검: HealthCheckMonitor 에 Bridge/두뇌 볼륨/git 자격증명/확장 버전 검사 4종 + readyBar ⚠ 표시
- 두뇌 동기화: 원격 미설정 시 로컬 새로고침 모드·staged 기준 commit 판정·인증 부재 안내
- 기타: outputFormat 기본 markdown(제목 렌더 복구)·레슨/행동제약 truncation 보호 구역 이동·[CONTEXT] 절단 우선순위 재정렬
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+26
-2
@@ -269,6 +269,23 @@ export interface IAgentConfig {
|
||||
companyIntentAlignmentMode: 'off' | 'smart' | 'strict';
|
||||
/** alignment 라운드 최대 횟수 (질문→답변 사이클). 1~5. */
|
||||
companyIntentAlignmentMaxRounds: number;
|
||||
/**
|
||||
* URL 자동 수집 — 사용자 프롬프트에 http(s) URL 이 있으면 LLM 호출 전에
|
||||
* 본문을 가져와 컨텍스트로 주입 (일반 챗 + 기업 모드 + alignment 공통 게이트).
|
||||
* Bridge 추출 우선, 실패 시 직접 fetch 폴백.
|
||||
*/
|
||||
webAutoFetchEnabled: boolean;
|
||||
/**
|
||||
* Alignment 자가 조사 — openQuestions 를 사용자에게 보여주기 전에 두뇌를
|
||||
* 검색해 스스로 답할 수 있는 질문을 걸러낸다. 끄면 기존 동작 (질문 즉시 노출).
|
||||
*/
|
||||
companyAlignmentSelfResearch: boolean;
|
||||
/**
|
||||
* Alignment 학습 루프 — 사용자가 alignment 라운드에서 직접 답한 Q/A 를
|
||||
* 두뇌의 "Alignment Knowledge" 폴더에 노트로 저장. 다음 turn 의 자가 조사가
|
||||
* 이 노트를 발견해 같은 질문을 두 번 묻지 않게 된다.
|
||||
*/
|
||||
companyAlignmentKnowledgeSave: boolean;
|
||||
/**
|
||||
* Pixel Office 시각화 패널을 사이드바에 표시할지 여부. UI layer 전용 —
|
||||
* 끈다고 Agent 행동이 바뀌지 않는다. Off면 webview는 패널을 숨기고
|
||||
@@ -538,6 +555,9 @@ export function getConfig(): IAgentConfig {
|
||||
// 이유는 config 가 features/ 아래 모듈을 의존하면 의도치 않은 순환 import 가 생기기 때문.
|
||||
// 둘이 어긋나면 안 되므로 변경 시 양쪽 같이 갱신.
|
||||
companyIntentAlignmentMaxRounds: Math.max(1, Math.min(5, cfg.get<number>('company.intentAlignmentMaxRounds', 3))),
|
||||
webAutoFetchEnabled: cfg.get<boolean>('web.autoFetchUrls', true),
|
||||
companyAlignmentSelfResearch: cfg.get<boolean>('company.alignmentSelfResearch', true),
|
||||
companyAlignmentKnowledgeSave: cfg.get<boolean>('company.alignmentKnowledgeSave', true),
|
||||
selfReflectorEnabled: cfg.get<boolean>('selfReflector.enabled', false),
|
||||
hollowCheckEnabled: cfg.get<boolean>('hollowCheck.enabled', true),
|
||||
hollowCheckAutoRetry: cfg.get<boolean>('hollowCheck.autoRetry', true),
|
||||
@@ -557,8 +577,12 @@ export function getConfig(): IAgentConfig {
|
||||
polishPersonaOverride: (cfg.get<string>('polishPersonaOverride', '') || '').trim(),
|
||||
liveStreamTokens: cfg.get<boolean>('liveStreamTokens', true),
|
||||
outputFormat: ((): 'plain' | 'markdown' => {
|
||||
const v = (cfg.get<string>('outputFormat', 'plain') || 'plain').trim().toLowerCase();
|
||||
return v === 'markdown' ? 'markdown' : 'plain';
|
||||
// 기본 'markdown' — 채팅 webview 가 marked 로 렌더하므로 plain 이 기본이면
|
||||
// 최종본(streamReplace)에서 ## 헤더가 제거되어 제목/본문이 같은 크기로
|
||||
// 보이는 가독성 문제가 생긴다 (스트리밍 중에는 raw 가 그대로 렌더되어
|
||||
// 멀쩡하다가 완료 순간 평문으로 변하는 증상).
|
||||
const v = (cfg.get<string>('outputFormat', 'markdown') || 'markdown').trim().toLowerCase();
|
||||
return v === 'plain' ? 'plain' : 'markdown';
|
||||
})(),
|
||||
chronicleAutoRecord: cfg.get<boolean>('chronicleAutoRecord', true),
|
||||
lmStudioTopP: Math.max(0, Math.min(1, cfg.get<number>('lmStudio.sampling.topP', 0.9))),
|
||||
|
||||
Reference in New Issue
Block a user