feat: v2.2.3 - Stability, Self-Reflector & Intent Alignment
- 버전 2.2.3 상향 및 PATCHNOTES.md 업데이트 - [신규] src/features/selfReflector/ - 성찰 실행/검증/프롬프트 모듈 추가 - [신규] intentAlignment.ts, intentClassifier.ts - 의도 정렬 시스템 추가 - [신규] pixelOfficeState.ts - 픽셀 오피스 상태 관리 추가 - sidebarProvider, dispatcher, chatHandlers 핵심 로직 최적화 - astra-2.2.3.vsix 패키지 생성 완료 (298 tests PASS)
This commit is contained in:
@@ -72,6 +72,67 @@ export interface IAgentConfig {
|
||||
* true(기본): Reflector가 plan/research를 비판적으로 검토한 critique을 Writer에 주입.
|
||||
* false: 기존 3단계(Planner→Researcher→Writer) 그대로 — 1 LLM 호출 절약 (저성능 모델/저지연 우선 시).
|
||||
*/
|
||||
/**
|
||||
* Model id used by the 1인 기업 mode intent classifier (route message to
|
||||
* pipeline vs casual chat). Empty → falls back to `defaultModel`. Recommended
|
||||
* a fast small model (gemma e2b 등) so classification adds <1 s per send.
|
||||
*/
|
||||
companyIntentClassifierModel: string;
|
||||
/**
|
||||
* Bypass the intent classifier and always run the full pipeline. Legacy
|
||||
* behaviour. Off by default because chat / question / thanks shouldn't
|
||||
* dispatch all agents.
|
||||
*/
|
||||
companyDisableIntentClassifier: boolean;
|
||||
/**
|
||||
* 분류기가 추천한 파이프라인으로 *이번 turn만* 자동 전환할지. 켜면
|
||||
* 사용자가 명시적으로 활성화해 둔 파이프라인보다 분류기 추천이 우선.
|
||||
* 끄면 분류기 추천은 채팅 라벨에만 표시되고 dispatch는 사용자 활성
|
||||
* 파이프라인 그대로. 처음 써 보는 사용자는 끈 채 추천만 보고 점차
|
||||
* 신뢰 생기면 켜는 흐름을 권장 — 기본 false.
|
||||
*/
|
||||
companyAutoSelectPipeline: boolean;
|
||||
/**
|
||||
* Intent Alignment 모드. new_task 발생 시 사용자 의도를 C-G-C-F-Q로
|
||||
* 정리하는 단계를 어떻게 다룰지.
|
||||
* - 'off' : alignment 비활성. 분류기가 new_task 라고 하면 곧장 pipeline.
|
||||
* - 'smart' : 기본값. confidence high면 자동 진행, medium/low면 사용자 확인.
|
||||
* - 'strict' : confidence 무관 항상 사용자에게 contract 확인 카드 띄움.
|
||||
*/
|
||||
companyIntentAlignmentMode: 'off' | 'smart' | 'strict';
|
||||
/** alignment 라운드 최대 횟수 (질문→답변 사이클). 1~5. */
|
||||
companyIntentAlignmentMaxRounds: number;
|
||||
/**
|
||||
* Pixel Office 시각화 패널을 사이드바에 표시할지 여부. UI layer 전용 —
|
||||
* 끈다고 Agent 행동이 바뀌지 않는다. Off면 webview는 패널을 숨기고
|
||||
* 백엔드도 broadcast 자체를 skip해서 자원 절약.
|
||||
*/
|
||||
/**
|
||||
* Self-Reflector Phase A — 모든 LLM 응답 끝에 [Self-Reflector Check]
|
||||
* 자기검증 블록을 자동으로 붙이게 한다. 추가 LLM 콜 없음. 본질적으로
|
||||
* 응답 품질 안전망이라 끌 이유는 적지만, 잡담 위주 환경에서 노이즈로
|
||||
* 느껴진다면 꺼둘 수 있다.
|
||||
*/
|
||||
selfReflectorEnabled: boolean;
|
||||
/**
|
||||
* Self-Reflector Phase B — 회사 모드 specialist 응답 직후 *분리된 콘텍스트*
|
||||
* 에서 LLM 한 번 더 호출해 외부 시각으로 검증. 실패 시 1회 retry. 비용
|
||||
* 추가되므로 기본 OFF.
|
||||
*/
|
||||
selfReflectorExternalEnabled: boolean;
|
||||
/**
|
||||
* Self-Reflector Phase C — 코드 산출물에 한해 syntax/lint를 실제로 돌려
|
||||
* 실행 기반 검증. Python: py_compile, JS: node --check, TS: tsc --noEmit.
|
||||
* 실패 시 에러를 응답에 첨부. 기본 OFF — 사용자 환경에 toolchain이
|
||||
* 깔려 있어야 의미가 있다.
|
||||
*/
|
||||
selfReflectorExecutionEnabled: boolean;
|
||||
companyPixelOfficeEnabled: boolean;
|
||||
/**
|
||||
* Pixel Office의 캐릭터 말풍선 연출을 켤지. enabled가 true이고 이 값도
|
||||
* true일 때만 말풍선이 생성된다. 시끄럽게 느껴지면 사용자가 끌 수 있게.
|
||||
*/
|
||||
companyPixelOfficeBubbles: boolean;
|
||||
enableReflection: boolean;
|
||||
/**
|
||||
* [Self-Reflection → Knowledge] Reflector critique 중 의미 있는 발견을 brain의
|
||||
@@ -166,6 +227,19 @@ export function getConfig(): IAgentConfig {
|
||||
knowledgeMixSecondBrainWeight: Math.max(0, Math.min(100, Math.round(
|
||||
cfg.get<number>('knowledgeMix.secondBrainWeight', 50)
|
||||
))),
|
||||
companyIntentClassifierModel: (cfg.get<string>('company.intentClassifierModel', '') || '').trim(),
|
||||
companyDisableIntentClassifier: cfg.get<boolean>('company.disableIntentClassifier', false),
|
||||
companyAutoSelectPipeline: cfg.get<boolean>('company.autoSelectPipeline', true),
|
||||
companyIntentAlignmentMode: ((): 'off' | 'smart' | 'strict' => {
|
||||
const v = (cfg.get<string>('company.intentAlignmentMode', 'smart') || 'smart').trim().toLowerCase();
|
||||
return v === 'off' || v === 'strict' ? v : 'smart';
|
||||
})(),
|
||||
companyIntentAlignmentMaxRounds: Math.max(1, Math.min(5, cfg.get<number>('company.intentAlignmentMaxRounds', 3))),
|
||||
selfReflectorEnabled: cfg.get<boolean>('selfReflector.enabled', true),
|
||||
selfReflectorExternalEnabled: cfg.get<boolean>('selfReflector.externalVerification', false),
|
||||
selfReflectorExecutionEnabled: cfg.get<boolean>('selfReflector.executionVerification', false),
|
||||
companyPixelOfficeEnabled: cfg.get<boolean>('company.pixelOffice.enabled', true),
|
||||
companyPixelOfficeBubbles: cfg.get<boolean>('company.pixelOffice.bubbles', true),
|
||||
enableReflection: cfg.get<boolean>('enableReflection', true),
|
||||
autoLessonFromReflection: cfg.get<boolean>('autoLessonFromReflection', true),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user