Commit Graph

11 Commits

Author SHA1 Message Date
koriweb 6adbc2a6fa feat(review): /review 코드 리뷰 map-reduce 청킹 명령 (v2.2.255)
일반 에이전트 채팅이 큰 코드베이스 리뷰를 단일 호출로 처리하다 약한 로컬
모델에서 빈 응답으로 무너지던 문제를, /meet 의 검증된 map-reduce 로 우회.

- /review <디렉터리|파일> [초점] 신설 (코어 채팅 경로 무수정)
- Map: 파일별 독립 리뷰(라인 인용 근거), callLmSynthesis 재시도/붕괴감지 활용,
  한 파일 실패해도 부분 리뷰로 진행
- Reduce: 노트 통합 + hierarchical fold 로 reduce 입력을 약한 모델 한도(16K) 안 유지
- 의존성/빌드 산출물 제외, 파일 30개·400KB 상한, 결과 wiki 저장
- 신규 reviewPrompt.ts / reviewFiles.ts, 테스트 +5건(전체 667 통과)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:18:20 +09:00
koriweb 64d8093080 feat(meet): 회의록 가이드 v2 반영 + 모델 출력 붕괴 복원력 (v2.2.253)
회의록 출력물 개선 (실무 회의록 가이드 v2):
- 섹션 우선순위 재정렬(①결정 ②액션 ③오픈이슈 ④리스크 ⑤논의)
- 논의사항 주제별 bullet 간결화, 오픈 이슈 섹션 복원
- 액션 아이템 산출물 컬럼 추가(담당·작업·기한·산출물 4요소), 담당자 개인 우선
- Executive Summary 결과 중심, 결정사항은 확정된 것만

모델 출력 붕괴(degeneration) 대응:
- callLmSynthesis 재시도 내장(repeat_penalty↑/top_k↓로 반복 억제 강화) + looksDegenerate 감지
- 긴 녹취 조각 실패 시 절반 분할 재귀 재시도(12K→6K→3.5K)
- 부분 회의록 fallback(한 조각 실패해도 전체 중단 안 함)

하위호환: 액션 표 파서 신6컬럼/구5컬럼 모두 파싱, 섹션 번호 무관 탐지,
회의일 추출 일시/날짜 둘 다 인식. 테스트 +13건(전체 659 통과).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 17:16:55 +09:00
koriweb 1208050557 fix(output): 한·영 깨진 토큰("덩ey") 결정론 감지 + 1회 수리 패스 (v2.2.230)
소형 로컬 모델이 한국어 단어 중간에 영문 토큰을 섞는 디코딩 사고
("덩어리"→"덩ey", "결과적으로"→"결ently"). 프롬프트 출력 위생 규칙으로는
못 막음 — 지시 불이행이 아니라 토큰 붕괴라서. 사후 보정으로 해결:

- hangulHygiene.ts: 고정밀 감지 패턴(한글 음절+영문 소문자 2+ 연속) —
  "API를"/"Code의"(영문+조사)·"플랜B"(한글+대문자)는 정상 표기로 미감지,
  코드 블록 제외. 감지 시 LLM 수리 1회 (깨진 토큰만 복원, 내용 변경 금지).
- 수리 검증 게이트: 길이 ±35% 이내 + 깨진 토큰 감소 — 미통과 시 원문 유지
  (수리가 더 망치는 것 방지). 실패 전 과정 로그 (관측성 원칙).
- 적용 경로: 채팅 답변(스트림 후·확정 전) + /wikify 산출물(영구 자산이라
  더 중요 — "🩹 표기 오류 N건 교정" 표시).

테스트 11건 (감지 정밀도·검증 게이트·실패 안전).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 13:50:26 +09:00
koriweb bfb0d23a2f feat(wiki): /wikify 포맷 정본 통일 + 채팅 URL 실데이터 주입 (v2.2.229)
[포맷 통일 — Datacollect 가 정본]
/wikify 와 Datacollect research 가 각자 포맷 사본을 들고 어긋났던 문제.
더 최신인 Datacollect 포맷을 wiki_format.mjs 정본으로 추출(브리지 측)하고,
/wikify 는 GET /api/wiki/template 로 받아 소비. 구버전 브리지면 내장 사본
fallback (정본 v3.1과 동일 내용). 포맷 수정은 이제 wiki_format.mjs 한 곳.

/wikify 가 정본을 따르며 고쳐진 것:
- category "10_Wiki/Topics"(물리 경로 버그) → 논리 도메인 규칙
- 고정 신뢰도 B/0.8 → 소스 평가 동적 부여 (충돌 신뢰도 권고의 입력 품질)
- aliases 빈 배열 → 동의어 3-8개 강제 (어휘갭 검색 보완)
- "## 🔗 관련 문서 링크" → "## 🔗 지식 그래프" + 고아 방지 up-link
- 인라인 [S#] 출처 인용 + 📚 출처 섹션, 비교표·코드 패턴 조건 섹션

[채팅 URL 접근 — 강제 주입 패턴 4번째 적용]
일반 채팅에 URL 을 주면 "접근 불가"라고 답하던 공백: urlContext 가 URL 감지
시 브리지 /api/web-extract(기존 /wikify 인프라 재사용)로 본문 추출 →
컨텍스트 주입 (8K 캡, 잘림 시 /wikify 안내). 실패 시 정직 블록 (브리지 확인
안내 + 추측 금지). 슬래시 명령은 제외 (자체 처리). 주입 성공 로그 포함.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 13:42:43 +09:00
koriweb b72501fae5 feat(growth): 주간 성장 사이클 자동화 + 텔레그램 양방향 HITL (v2.2.220)
P4 — Self-Evolving OS 폐루프 자동화:
- growthCycleWatcher: 매주(기본 일 20:00 KST, 설정 가능) 자동으로
  ① 골든셋 검색 평가(recall/MRR 주간 추이) ② 학습 큐 갱신(Need Engine)
  ③ 지식 노후 점검 ④ 성장 리포트 ⑤ 승인(approved)된 학습 큐 항목을
  Research Agent 로 자동 실행(사이클당 최대 3건) ⑥ 요약 알림+텔레그램.
  승인 자체는 여전히 사람 — Permission Based Learning 유지, 자동화되는
  것은 '승인된 것의 실행'뿐. 결과물은 기존 수동 명령과 동일 위치
  (.astra/eval/, .astra/growth/) — 완전 호환. 수동 트리거 명령
  (growthCycle.runNow) 제공. 단계별 독립 try/catch.

P5 — 텔레그램 양방향 HITL:
- /meet confirm 코어를 출력 중립 processConfirmDecisions 로 추출
  (웹뷰·텔레그램 공용) — 핸들러는 위임 호출로 슬림화.
- 텔레그램 인바운드에 confirm/pending(보류) 분기 — 회사 밖에서
  "confirm 1=ok 2=6/20 3=skip" 회신으로 보류 액션 등록 완결.
- 데일리 브리핑에 보류 목록 + 회신 안내 포함 — 아침 브리핑에서
  바로 확정하는 흐름 완성.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 18:29:58 +09:00
koriweb c42c66a3fc feat(retrieval): 청크 검색 기본 켬(+62.5%p recall@1) + 확신도 전역화 (v2.2.218)
P1 — 섹션 청크 검색 기본 활성화:
- 골든셋 24질의 A/B 측정: 파일 단위 → 섹션 청크에서
  recall@1 12.5%→75.0% · recall@3 33.3%→83.3% · recall@5 37.5%→87.5%
  · MRR 0.217→0.802. 18질의 개선·악화 0건.
- Phase 1-가 구현은 완성돼 있었으나 chunkLevelRetrieval 기본값이 false 라
  실전 채팅이 열등한 파일 모드로 동작 — package.json·config 기본값 true 로.
- tests/retrievalEvalCompare.test.ts: 환경변수(ASTRA_EVAL_BRAIN) 게이트형
  A/B 회귀 측정 도구 (평소 skip — CI/패키징 무영향).

P2 — 확신도 전역화 (/meet 원칙을 모든 대화로):
- memoryContext 에 [GROUNDING] 블록 — 두뇌 근거 강도(강/보통/약)를 점수로
  평가해 답변 정책 주입: 약함 → "⚠️ 두뇌 근거 약함" 표기+단정 금지,
  강함 → 근거 문서 제목 인용, 보통 → 사실/추론 구분 서술.

P3 — 회의 용어집 자동화 + 출력 위생:
- /meet 실행마다 담당자 이름·사용자 메타데이터 용어를 .astra/meet_glossary.json
  에 누적, 다음 실행 때 자동 주입 (STT 보정 용어집 — 반복 회의 표기 일관성).
- selfIdentity 블록에 한·영 혼합 깨진 표기 금지 규칙 (전 대화, 무비용).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 18:13:11 +09:00
koriweb 70ea421827 feat(meet): 확신 게이트 등록 + /meet confirm + 데일리 브리핑 (v2.2.216)
캘린더 등록 정책을 "확신 없으면 등록 대신 질문"으로 전환:
- 액션 표에 상태 컬럼(확정/진행미정/기한미정/조건부:선행/반복:주기) — LLM 분류.
- 확정+기한만 자동 등록. 진행미정·기한미정·조건부는 보류 목록으로 질문,
  `/meet confirm 1=6/20 2=ok 3=skip` 답변으로 등록 완결 (/meet pending 재확인).
- 조건부 규칙: ok=날짜 없는 Tasks 로 [조건부] 등록(선행조건 노트 명시),
  날짜=그날을 '조건 확인일'로 등록 — 의존 대상이 제목/노트에서 즉시 인지됨.
- 반복 업무: 반복 등록 없이 첫 1회만(다음 해당 요일) — 까먹음 방지.
- 기한 해석 불가 확정건: 구버전의 +5일 추측 등록 제거 → 보류 질문.
- 과거 날짜(옛 녹취): 과거 날짜 그대로 등록 + "과거자료·완료확인 필요" 표기.
- 중복 방지: 녹취 sha256 해시 레지스트리(.astra/meet_registered.json)로
  같은 녹취 재실행 시 이중 등록 차단.
- tasksApi: due 옵션화(날짜 없는 task 지원).

데일리 브리핑 (신규):
- 평일 KST 09:30(설정 가능) 오늘의 캘린더 일정 + Tasks(오늘 마감/기한 경과/
  조건부 대기)를 텔레그램 발송. 텔레그램·캘린더 미연결 시 조용히 skip.
- g1nation.dailyBriefing.enabled(기본 true) / .time("09:30").

테스트: meetRegistration 15건 (분류 게이트·confirm 파싱·날짜 정규화·중복 키).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 16:22:19 +09:00
koriweb a52bf6ee85 feat: /stocks 판정 결정론화 + /meet 정확도 파이프라인 (v2.2.211)
/stocks judge — 조건 판정 정확도 (P2/P3/P4):
- criteriaEval.ts 신설: 8개 키워드 중 수치 기준 7개("5,800%" 파싱·임계값
  비교)와 충족/미충족 판정·투자성향별 대표 3개 선택을 코드로 결정론 계산.
  LLM 은 '기술력' 도메인 정성 판단(키워드 모호 시)과 근거 서술만 담당,
  실패 시 결정론 폴백 → judge 가 LLM 형식 오류로 실패하는 경로 제거.
- cmdJudge: 판정 전 Naver 실시간 펀더멘털 fetch(실패 시 저장값 폴백) +
  결과에 데이터 출처 표기.
- tests/stocksCriteria.test.ts: 사용자 실제 분류 패턴(마녀공장/기가비스/
  엔켐) 픽스처 8건 — 코드 판정이 기존 패턴과 일치함을 고정.

/meet — 할루시네이션·문맥 누락 (P1/P5/P6):
- 근거 인용 의무: 결정·액션마다 발언 원문 인용(근거: "…") — 인용 불가
  항목은 결정/액션 금지 (날조 구조적 억제).
- 60K 하드 자르기 폐지 → 12K 조각 추출(Map) + 병합(Reduce) 2단계.
  lost-in-the-middle·후반부 증발 해소, 커버리지 60K→144K자.
- g1nation.meetVerifyPass(기본 off): 결정·액션을 근거 소스와 LLM 대조해
  확인 불가 항목을 '⚠️ 검증 결과' 섹션으로 표시.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 18:51:54 +09:00
koriweb 6b017b0d31 feat: Bridge 타깃 토글 + /research 제거 + 환각·오염 방지 강화 (v2.2.205)
- Datacollect Bridge 로컬/NAS 타깃 토글(Settings 패널) + NAS URL/x-bridge-token.
  기본 local = 현행 동작 유지. (백엔드 NAS 분리 준비)
- /research(NotebookLM) 제거 — 로컬 Datacollect 앱 전용으로 분리.
- 에러로그 오염 차단: STT/스택트레이스/에러덤프를 장기기억 채굴 제외 + 자동
  추출 항목 14일 TTL(참조 시 슬라이딩 연장). 기존·수동 항목 무영향.
- 컨텍스트 [주제] 태깅 + 교차오염 방지 경계 지침.
- "확인 불가" 사실 날조 금지 규칙(R7과 구분).
- /meet STT 오타 보정: 철자 정규화 허용하되 사실 날조는 차단.

타입체크 + 407 테스트 통과.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 16:47:55 +09:00
koriweb 2ea5185cd6 feat(weekly): /weekly 주간 보고서(금주/차주) 추가 + /meet 정확도 개선 (v2.2.204)
- /weekly: 차주 날짜 입력→금주 자동 역산, Google Tasks 기반 금주/차주 보고서.
  버킷팅은 코드(예측 가능), 포맷팅만 LLM. 신규 weeklyPrompt.ts + coordination.ts runWeekly.
- 기존 CEO /weekly 리뷰 카드(dashboards.ts) 제거 — 이름 충돌 해소, /weekly 일원화.
- /meet: 액션아이템에 '작업 상세' 열 추가, 캘린더 notes 가 실제 작업 내용을 담도록 재구성.
- /meet: 발언자 추적 복원 + 비선형 회의 재조립 + 근거/할루시네이션 억제 규칙으로 오귀속 감소.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 16:12:33 +09:00
koriweb 7bec20620a refactor: v2.2.195-201 — slashRouter god-file 해체 (–95%) + 인프라 5개 추출
아키텍처 감사 결과 HIGH 2건 + MED 2건 + LOW 1건 — 7 라운드 정리 시리즈.
기능 변경 없음, 순수 구조 정리.

**slashRouter.ts: 4,174 → 201줄 (–3,973, –95%)**
**agent.ts: 1,617 → 1,551줄 (–66, –4%)**

v2.2.195: eventSourcedStore + SystemPromptBlock registry
  - createEventStore<E>(opts) — 4 store (customers/hire/runway/feedback) I/O 240줄 중복 제거
  - _turnCtx 5 named string field → 1 Map<string, string> (새 verification block 추가 25곳→1곳)
  - buildAstraModeSystemPrompt: 5 ternary gate + 5 위치 → 1 for-loop join

v2.2.196: trackers cluster split
  - src/features/teamops/handlers/_shared.ts (fmtKrw/parseAmount/daysUntil/parseTaskOwner/stageEmoji/STAGE_ORDER/TERMINAL_STAGES)
  - src/features/teamops/handlers/trackers.ts (runway/customers/hire)
  - src/features/teamops/handlers/index.ts (barrel)
  - extension.ts 에 side-effect import (순환 import 회피)

v2.2.197: mtimeFileCache + PostAnswerHook registry
  - src/lib/mtimeFileCache.ts — createMtimeFileCache<T>(name, parse) (terminologyBlock + termValidator 2-cache invariant 자동화)
  - src/agent/postAnswerHooks/{types,index}.ts — Devil/SelfCheck/TermValidator 3 _maybeX method → 1 runPostAnswerHooks(ctx) loop
  - agent.ts –66줄

v2.2.198: dashboards cluster split
  - src/features/teamops/handlers/dashboards.ts (morning/evening/cohort/weekly)

v2.2.199: coordination + communication clusters split
  - src/features/teamops/handlers/coordination.ts (task/decisions/onesie/blocked/standup)
  - src/features/teamops/handlers/communication.ts (draft/feedback)
  - callLmSynthesis export 노출 (communication 이 사용)
  - 옛 parseTaskOwner local 정의 삭제 (_shared.ts 사용)

v2.2.200: system cluster split
  - src/features/system/handlers.ts (memory/glossary/help)

v2.2.201: datacollect cluster split + LLM 인프라 추출
  - src/features/datacollect/handlers.ts (research/benchmark/youtube/blog/wikify/meet)
  - src/features/datacollect/llm.ts (callLmSynthesis + repairKoreanGlitches + bridgeErrorRemedy)
  - slashRouter import 4개로 축소: vscode/logInfo/getBridgeBaseUrl/bridgeErrorRemedy

**최종 slashRouter (201줄):**
- REGISTRY Map + registerSlashCommand/listSlashCommands/isSlashCommand
- handleSlashCommand (dispatcher + 에러 처리)
- Webview interface + chunk helper
- getRecentSlashCommands ring buffer (actionability scoring 용)

**미래 부담 감소 metrics:**
- 새 슬래시 명령: god-file 끝에 함수 + register → 1 파일 + 1 register call
- 새 verification block: 5곳 편집 → 1 set call
- 새 event store: 60줄 boilerplate → createEventStore 한 줄
- 새 post-answer hook: 3 step → 1 push
- 새 mtime cache: Map + invariant 관리 → createMtimeFileCache 한 줄

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 11:55:22 +09:00