Update project files

This commit is contained in:
2026-05-22 15:00:14 +09:00
parent 132d130ff1
commit 8016ef18fa
29 changed files with 1353 additions and 804 deletions
+61
View File
@@ -1,5 +1,66 @@
# Astra Patch Notes
## v2.2.60 (2026-05-22)
### 🔧 `&&` 명령 체이닝 — 코드 레벨에서 PowerShell 문법으로 자동 변환
- **문제:** v2.2.59에서 프롬프트로 "`&&` 쓰지 말라"고 지시했으나, 모델이 여전히 `cd ... && git add . && git commit ... && git push`를 출력 → PowerShell 5.1에서 `'&&' 토큰은 올바른 문 구분 기호가 아닙니다` 파서 오류로 **명령 전체가 실행 실패**.
- **원인:** 모든 git/npm 튜토리얼이 `&&`를 쓰므로, 시스템 프롬프트 규칙만으로는 소형 로컬 모델의 `&&` 출력을 신뢰성 있게 막을 수 없음.
- **수정:** `sanitizeCommand`가 터미널로 보내기 직전 **`&&` 체인을 PowerShell 조건부 체인으로 결정론적 변환**. `A && B && C``A; if ($?) { B; if ($?) { C } }`. `$?`로 단축 평가(short-circuit)를 보존 — 예: `cd` 실패 시 `git`이 엉뚱한 디렉터리에서 실행되지 않음. 따옴표 안의 `&&`(커밋 메시지 등)는 분리 대상에서 제외.
- 이제 모델이 `&&`를 출력해도 git add/commit/push 다단계 명령이 정상 실행됨.
- **신규 패키징:** `astra-2.2.60.vsix`.
---
## v2.2.59 (2026-05-22)
### 🩹 긴 대화에서 "빈 응답" 차단 — 출력 토큰 예산 확보
- **문제:** 긴 세션(예: 34개 메시지, ~29.6K 토큰)에서 모델이 빈 응답을 반환하고 "AI 엔진이 빈 응답을 반환했습니다 / Output budget: 1,073 tokens" 오류 출력.
- **원인:** 대화 기록 압축(`trimHistoryToBudget`)이 출력용으로 **단 512토큰(`minOutputTokens`)만 예약**했음. 그래서 32K 윈도우가 거의 다 찰 때까지 프롬프트가 자라도록 허용 → 답변에 ~1K 토큰만 남음. gemma 4B-active 같은 소형/MoE 로컬 모델은 이 압박에서 첫 토큰부터 EOS를 뱉어 **빈 응답**을 냄.
- **수정:** 기록·시스템 프롬프트를 자르기 전에 **실제 답변용 예산(`preferredOutputReserve`)을 컨텍스트의 ~10%, 최소 2048토큰 확보**(상한은 `maxOutputTokens`)하도록 변경. 이제 프롬프트가 항상 답변 공간을 남기고 잘려, 32K 모델에서도 출력 예산이 3K+ 보장됨. `minOutputTokens`(512)는 절대 하한 clamp 용도로만 유지.
- **추가:** `[EXECUTION RULE]`에 PowerShell 체이닝 규칙 명시 — 명령 연결은 `;` 사용, `&&` 금지(PowerShell 5.1 구문 오류). git add/commit/push 같은 다단계 명령이 터미널에서 정상 실행됨.
- **신규 패키징:** `astra-2.2.59.vsix`.
---
## v2.2.58 (2026-05-22)
### 📋 답변은 "핵심 요약 먼저, 상세 아래" — 한눈에 들어오는 출력 포맷
- **문제:** 답변 내용 퀄리티는 좋으나 분량이 길어 한눈에 안 들어옴. 게다가 요약(`## 요약`)이 맨 위가 아니라 **맨 아래**에 출력되고, `## ## 요약`처럼 헤딩 접두사가 중복되며, 이미 금지된 "핵심 확인 질문" 섹션이 누출됨.
- **원인:** `[OUTPUT FORMAT]`이 "기술 분석/아키텍처/트러블슈팅/전략 기획일 때만" 3섹션을 쓰라는 **모호한 카테고리 게이트**라, 일반 상담형 질문에서 모델이 포맷을 제멋대로 해석함.
- **수정 1 — 길이 게이트.** 카테고리 대신 **길이 기준**으로 전환: 답변이 ~4문장을 넘으면 무조건 `## 핵심 요약`(불릿 2~4개, 전체를 관통하는 스캔 가능한 요약)을 **맨 위**에 출력하고 그 아래 `## 상세 설명`. 요약 앞 인트로 문단 금지. 짧은 답변은 헤딩 없이 바로 답변.
- **수정 2 — 헤딩 규칙.** 모든 마크다운 헤딩은 정확히 `## ` 하나로 시작(`## ##` 중복 금지).
- **수정 3 — 후속 질문 규칙 강화.** 후속 질문은 한 문장·한 줄·라벨 없음. 섹션 헤딩·"질문 의도" 설명·복수 질문 금지 → "핵심 확인 질문" 섹션 누출 차단.
- **신규 패키징:** `astra-2.2.58.vsix`.
---
## v2.2.57 (2026-05-22)
### 🚀 실행 요청은 설명 대신 즉시 실행 — `[EXECUTION RULE]` 추가
- **문제:** "E:\Wiki\Datacollect 서버 실행해줘" 같은 요청에 ASTRA가 직접 실행하지 않고, `npm run platform` 등 추측성 명령·존재하지 않는 포트(`8787`)·환경변수(`GEMINI_API_KEY`)를 지어내며 "이렇게 하시기 바랍니다" 식 튜토리얼만 출력했음.
- **원인:** 시스템 프롬프트의 `[LOCAL PATH RULE]`이 "review/analysis/debugging"만 다뤄, "실행/구동/시작" 요청에 발동되는 규칙이 전무했음. 모델이 학습 prior대로 산문 설명으로 회귀.
- **수정 1 — 프롬프트.** `[EXECUTION RULE]` 신설: 실행/구동/시작/run/start 키워드 → 튜토리얼 금지, 명령을 모르면 `<read_file>`로 package.json을 먼저 읽고 그 다음 `<run_command>`로 실제 스크립트 실행. 추측한 스크립트명·포트·환경변수 단정 금지. Few-shot 예시 1건 포함(작은 로컬 모델의 태그 준수율 향상).
- **수정 2 — 경로 경계.** `<read_file>`/`<list_files>`가 워크스페이스 안으로만 제한돼 형제 프로젝트(`E:\Wiki\Datacollect` 등)의 package.json을 못 읽던 문제 해결. `security.ts`가 워크스페이스의 **상위 디렉터리 1단계**까지 신뢰 루트로 포함(드라이브 루트로는 확장 안 함). 이로써 형제 프로젝트를 읽어 정확한 실행 명령을 찾을 수 있음 → 환각 제거.
- **신규 패키징:** `astra-2.2.57.vsix`.
---
## v2.2.56 (2026-05-22)
### ⚡ 코드 리뷰 기반 성능·메모리 최적화 (12건, 동작 변경 없음)
- **🔴 브레인 코퍼스 디스크 재읽기 제거.** `secondBrainTrace`는 메시지마다 브레인 전체를 디스크에서 다시 읽어 재분류했음 → mtime+size 키 스캔 캐시로 변경(파일이 실제로 바뀔 때만 재읽기). `scopedBrainRetriever`(텔레그램 경로)도 동일 안티패턴 → 캐시된 `getBrainTokenIndex()` + `scoreTfIdfPreTokenized` 경로로 라우팅. 점수 결과는 바이트 단위로 동일.
- **🟡 메모리 누수·중복 작업 정리.** `agent.ts` `chatHistory` 무제한 증가 → 최근 40개 유지·오래된 도구 결과 본문 축약. `EpisodicMemory` 에피소드 JSON 메시지마다 재읽기 → 디렉터리 mtime 키 캐시. `_walkBrainFiles``readdirSync({withFileTypes})`·단일 누산기(`concat` 제거). TF-IDF `termFrequency` → 문서별 term-count `Map` 1회 사전 계산. `getConfig()` 중복 호출 1회로 통합.
- **🟢 누수·정리 보강.** `clearBrainTokenIndex()``deactivate()`·브레인 프로필 전환 시 호출. 웹뷰 메시지 리스너 dispose 배선. `LongTermMemory` `longTermMaxEntries`(100) 강제. Pixel Office 인터벌은 뷰 비표시 시 일시정지. `/ping`은 핑마다 브레인 전체 탐색 대신 5초 TTL 캐시 응답.
- 전 항목 동작 보존 — 기능·출력 변경 없음. 타입 체크(`tsc --noEmit`) 무오류, 테스트 400/400 통과.
- **신규 패키징:** `astra-2.2.56.vsix`.
---
## v2.2.55 (2026-05-21)
### 📅 /meet — 회의록 액션 아이템 → Google 캘린더 자동 등록 (Phase 1)
- `/meet`이 회의록 합성·저장 후, **액션 아이템 표를 파싱해 task별 종일 일정으로 Google Calendar에 자동 등록**한다.