diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md
index 45481bf..3c1cc49 100644
--- a/.astra/project-context/architecture.md
+++ b/.astra/project-context/architecture.md
@@ -3,15 +3,15 @@
## Snapshot
-- **Workspace**: `connectai` `v2.2.312` _(absolute path varies by environment; resolved from the active VS Code workspace)_
+- **Workspace**: `connectai` `v2.2.318` _(absolute path varies by environment; resolved from the active VS Code workspace)_
- **Description**: The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.
- **Stack**: TypeScript, Node.js, VS Code Extension, LM Studio SDK, Test runner
-- **Stats**: 617 source files, ~90,403 lines across 5 top-level modules.
+- **Stats**: 633 source files, ~91,804 lines across 5 top-level modules.
## Last Refresh
-- **Time**: 2026-07-20T04:20:03.384Z
-- **Files newly analysed**: 1
-- **Files reused from cache**: 616
+- **Time**: 2026-07-21T04:22:55.352Z
+- **Files newly analysed**: 3
+- **Files reused from cache**: 630
## Directory Map
```mermaid
@@ -19,11 +19,11 @@ mindmap
root((connectai))
src/
features/
- lib/
agent/
+ lib/
sidebar/
- retrieval/
intelligence/
+ retrieval/
media/
tests/
helpers/
@@ -41,11 +41,11 @@ mindmap
> Arrows: which top-level module imports from which.
```mermaid
flowchart LR
- src["src/ 342 files"]
+ src["src/ 345 files"]
media["media/ 6 files"]
- tests["tests/ 86 files"]
+ tests["tests/ 91 files"]
core_py["core_py/ 6 files"]
- docs["docs/ 177 files"]
+ docs["docs/ 185 files"]
tests --> src
```
@@ -57,10 +57,10 @@ flowchart LR
## Hub Files
> Imported by many other files — touching these has wide blast radius.
-- `src/utils.ts` — referenced by **116** files
+- `src/utils.ts` — referenced by **118** files
- `src/config.ts` — referenced by **44** files
-- `src/agent.ts` — referenced by **37** files
-- `src/core/services.ts` — referenced by **23** files
+- `src/agent.ts` — referenced by **39** files
+- `src/core/services.ts` — referenced by **24** files
- `src/retrieval/brainIndex.ts` — referenced by **14** files · Brain Index — persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 매 질의마다 브레인의 모든 .md 파일을 읽고 토크나이즈해서 TF-IDF 점수를 계산했습니다 — 파일 수가 많아지면 그게 병목입니다. 이 모듈은 /.astra/brain-index.json 에
- `src/agent/actions/types.ts` — referenced by **13** files
- `src/integrations/telegram/telegramClient.ts` — referenced by **13** files
@@ -68,15 +68,15 @@ flowchart LR
## Modules
-### `src/` — 342 files, ~65,381 lines
+### `src/` — 345 files, ~66,209 lines
**Sub-directories**
- `src/features/` (126) — 데일리 브리핑 워처 — 평일(월~금) KST 09:30 에 "오늘의 할 일"을 텔레그램으로 발송. 소스: 1. Google Calendar — iCal 캐시 새로고침 후 오늘 일정 (readCalendarEvents
+- `src/agent/` (37) — — 폴더(또는 단일 파일) 강제 정독 조사. listfiles 가 "이름 목록"을 주는 것과 달리, 이 액션은 대상 파일들을 코드가 직접
- `src/lib/` (37) — Astra Mode Architecture Context Builder. 의도: 사용자가 Astra 자체의 mode 디자인 (Guard vs Multi-Agent 가 별도 모드여야 하는지) 을 묻는 메타 질문에 답할
-- `src/agent/` (36) — — 폴더(또는 단일 파일) 강제 정독 조사. listfiles 가 "이름 목록"을 주는 것과 달리, 이 액션은 대상 파일들을 코드가 직접
- `src/sidebar/` (32) — Brain profile lifecycle 의 pure helpers — sidebarProvider 의 add/edit/delete 흐름에서 modal UI 와 config 쓰기를 제외한 데이터 변환 만 격리. 현
+- `src/intelligence/` (21) — Confidence Engine — 답변 확신도 0~100 결정론적 산출. Self-Evolving OS 마스터 플랜 Phase 2 / Track 1-1. 신뢰 조건 T4 "확신이 없으면 사람에게 묻는다" 의 측정
- `src/retrieval/` (20) — Actionability Scoring — 검색 결과를 "현재 작업 상태" 신호로 재가중. 기존 TF-IDF (단어 매칭) + recency (시간) 만으로는 "지금 이 사용자가 하고 있는 작업과 직접 연결 된 문서
-- `src/intelligence/` (19) — Confidence Engine — 답변 확신도 0~100 결정론적 산출. Self-Evolving OS 마스터 플랜 Phase 2 / Track 1-1. 신뢰 조건 T4 "확신이 없으면 사람에게 묻는다" 의 측정
- `src/core/` (15) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토
- `src/extension/` (13) — 두뇌(Second Brain) 기본 위치 부트스트랩 — 첫 실행 온보딩. 문제: 두뇌 미설정 시 config 가 ~/.g1nation-brain(숨김 점폴더)로 조용히 폴백했다. - 폴더가 실제로 생성되지 않고, 설
- `src/memory/` (9) — Distillation Loop — stale Episodic Memory → Long-Term "episode-digest" 승급. 배경: Episodic Memory 가 무한히 누적되면 검색 노이즈. 30일+ 지
@@ -86,8 +86,8 @@ flowchart LR
**Key files**
- `src/utils.ts` (538 lines)
-- `src/config.ts` (727 lines)
-- `src/agent.ts` (1979 lines)
+- `src/config.ts` (745 lines)
+- `src/agent.ts` (2229 lines)
- `src/core/services.ts` (218 lines)
- `src/features/company/types.ts` (446 lines) — Type definitions for the 1인 기업 (One-Person Company) mode. The mode turns the user into a virtual CEO that dispatches work to a roster of specialist agents. Each turn produces a session directory conta
- `src/sidebarProvider.ts` (2992 lines)
@@ -99,10 +99,10 @@ flowchart LR
- `src/retrieval/scoring.ts` (541 lines) — Scoring Engine — TF-IDF + Bilingual Tokenizer 단순 includes() 키워드 매칭을 넘어서, TF-IDF 가중치 기반의 문서 스코어링을 제공합니다. 한국어/영어 양국어 토크나이저를 포함합니다.
- `src/features/company/companyConfig.ts` (896 lines) — State + config plumbing for 1인 기업 모드. Two surfaces: - CompanyState (runtime data: enabled flag, company name, which agents are active, per-agent model overrides). Persisted in VS Code's globalState so
- `src/features/stocks/types.ts` (61 lines) — Stocks 모듈 공유 타입. investresults/targetstocks.json 스키마를 그대로 받아서, ConnectAI 의 /.astra/stocks.json 으로 옮긴 뒤 같은 필드명을 유지. 한글 필드명은 사용자의 도메인 데이터라 변경하지 않는다 — 마이그레이션 충돌 회피 + 사용자가 직접 JSON 편집할 때 frictio
+- `src/intelligence/requirementGraph.ts` (312 lines) — Requirement Graph — 업무 유형별 필수 요소 정의 + 감지 + 커버리지 검사. Self-Evolving Digital Employee OS 마스터 플랜(docs/SELFEVOLVINGOSMASTERPLAN.md) Phase 1 / Track 2-1. 신뢰 조건 T3 "품질이 일관적이다 — 필수 요소 누락 없음" 담당. 동작 2단계: 1. In
- `src/lib/paths.ts` (151 lines)
- `src/skills/agentKnowledgeMap.ts` (374 lines)
- `src/retrieval/types.ts` (66 lines) — Retrieval Types (검색 결과 통합 타입) 모든 검색 소스(Brain, Memory, Project, Episode)의 결과를 통합 인터페이스로 정의합니다.
-- `src/intelligence/requirementGraph.ts` (312 lines) — Requirement Graph — 업무 유형별 필수 요소 정의 + 감지 + 커버리지 검사. Self-Evolving Digital Employee OS 마스터 플랜(docs/SELFEVOLVINGOSMASTERPLAN.md) Phase 1 / Track 2-1. 신뢰 조건 T3 "품질이 일관적이다 — 필수 요소 누락 없음" 담당. 동작 2단계: 1. In
- `src/security.ts` (159 lines)
- `src/lib/contextBuilders/promptDetection.ts` (107 lines) — 사용자 prompt 의 의도 분류 류 detection helpers. 모두 stateless 정규식 매칭. 옛 코드는 agent.ts 의 private 메서드로 박혀 있었는데, system prompt 빌더 (buildJarvisProjectBriefContext 등) 가 이걸 의존하면서 god-file 안에서 서로 얽힘. 헬퍼만 먼저 떼면 의존 그래프가
- `src/memory/types.ts` (151 lines) — Memory Type Definitions (메모리 타입 정의) Astra의 5-Layer Cognitive Memory System의 모든 타입을 정의합니다. ① Short-Term ② Long-Term ③ Project ④ Procedural ⑤ Episodic
@@ -121,7 +121,7 @@ flowchart LR
- `media/settings-panel.js` (577 lines)
- `media/settings-panel.css` (254 lines) — Stylesheet
-### `tests/` — 86 files, ~11,085 lines
+### `tests/` — 91 files, ~11,476 lines
*Depends on*: `src/`
**Sub-directories**
@@ -137,6 +137,7 @@ flowchart LR
- `tests/telegramBot.test.ts` (363 lines) — Unit tests for TelegramBot + truncateForTelegram. Strategy: - TelegramBot is driven by an injected ITelegramClient stub. We script getUpdates to return queued batches and assert that: - the offset cur
- `tests/criticReflectionEval.test.ts` (200 lines) — Critic Agent / Reflection Store / Task Eval Harness (Self-Evolving OS P1 잔여 + P3) 테스트.
- `tests/emailCommand.test.ts` (282 lines) — v2.2.269 — /email (Gmail + Outlook) 순수 로직 테스트. COM/네트워크는 통합 영역이라 제외 — 참조 파싱·프롬프트·트랜스크립트 컷만 고정.
+- `tests/investigationPipeline.test.ts` (217 lines) — Investigation Pipeline — 파일명만 보고 상상하는 헛조사 차단 3중 방어. (v2.2.309) ① 조사형 요청 감지 + 증거 게이트 ② 강제 정독 Map + 해시 캐시 ③ Hollow 감지
- `tests/lmStudioStreamer.test.ts` (295 lines) — Unit tests for LMStudioStreamer. Strategy: inject a fake ILMStudioClient that returns a fake model handle whose respond() yields a controllable async iterable. No real SDK or WebSocket touched.
- `tests/meetRegistration.test.ts` (232 lines) — /meet 확신 게이트 — 분류·confirm 파싱·날짜 정규화 테스트. 정책: 확정+기한만 자동, 진행미정/기한미정/조건부는 보류, 반복은 첫 1회, 과거 날짜는 등록하되 완료확인 표기, 기한 해석 불가 확정건은 보류(추측 등록 금지).
- `tests/secondBrainTrace.test.ts` (407 lines)
@@ -146,7 +147,6 @@ flowchart LR
- `tests/confidenceEngine.test.ts` (175 lines) — Confidence Engine + Escalation Engine (Self-Evolving OS Phase 2) 단위 테스트. 순수 함수만 검증 — vscode 의존 없음.
- `tests/correctionLoop.test.ts` (158 lines) — Correction Loop 단위 테스트 — 순수 로직 (감지·프로필·레슨·큐 등록·영속화). LLM 의존 부분(classifyCorrection)은 엔드포인트 실패 → 휴리스틱 fallback 경로만 검증.
- `tests/emailState.test.ts` (121 lines) — v2.2.271 — 이메일 영속 상태 머신 (syncThreads / detectOverdue / setThreadState). "명령 안 쳐도 f/u 되는" 핵심 로직: 창 밖 미회신 보존, done 자동 재개, 알림 중복 차단.
-- `tests/investigationPipeline.test.ts` (193 lines) — Investigation Pipeline — 파일명만 보고 상상하는 헛조사 차단 3중 방어. (v2.2.309) ① 조사형 요청 감지 + 증거 게이트 ② 강제 정독 Map + 해시 캐시 ③ Hollow 감지
- `tests/knowledgeOps.test.ts` (174 lines) — Knowledge Validation / Belief Revision / Decay / Debt (Self-Evolving OS Phase 4 — 지식 운영) 테스트.
- `tests/largeInputMapReduce.test.ts` (159 lines) — Phase 2 — large-input map-reduce core. Pure orchestration with an injected callLLM, so no network / SDK is touched.
- `tests/needEngineQueue.test.ts` (159 lines) — Gap Detector / Need Engine / Knowledge Inventory / Learning Queue (Self-Evolving OS Phase 3 — 성장 루프 코어) 테스트.
@@ -166,16 +166,16 @@ flowchart LR
- `core_py/optimizer.py` (55 lines)
- `core_py/queue_worker.py` (82 lines)
-### `docs/` — 177 files, ~5,946 lines
+### `docs/` — 185 files, ~6,128 lines
**Sub-directories**
-- `docs/records/` (160) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
+- `docs/records/` (168) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
- `docs/docs/` (5) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ...
- `docs/plans/` (2) — Alignment Self-Learning 개선 계획 (v2 — 적대적 리뷰 반영)
- `docs/Meeting/` (0)
**Key files**
-- `docs/records/ConnectAI/timeline.md` (431 lines) — Project Timeline
+- `docs/records/ConnectAI/timeline.md` (455 lines) — Project Timeline
- `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서
- `docs/AgentEngine_Architecture.md` (314 lines) — AgentEngine Architecture Document
- `docs/SELF_EVOLVING_OS_MASTER_PLAN.md` (275 lines) — ASTRA Self-Evolving Digital Employee OS — 마스터 개발 계획 v1.1
@@ -244,7 +244,7 @@ flowchart LR
- `g1nation.calendar.refresh` — Astra: Google Calendar 새로고침 📅
- `g1nation.calendar.connectOAuth` — Astra: Google Calendar OAuth 연결 (쓰기) 🔐
- `g1nation.devilAgent.toggle` — Astra: Toggle Devil Agent 🎭
-- **Configuration** (183 settings):
+- **Configuration** (187 settings):
- `g1nation.multiAgentEnabled` *(boolean)* _(default: `false`)_ — Enable Multi-Agent Workflow (Planner -> Researcher -> Writer) for complex tasks.
- `g1nation.datacollectBridgeTarget` *(string)* _(default: `"nas"`)_
- `g1nation.datacollectBridgeUrl` *(string)* _(default: `"http://127.0.0.1:3002"`)_ — [local 타깃] Wiki/Datacollect MCP Bridge URL. /benchmark, /youtube, /wikify chat slash commands route here. The Bridge must be running (`npm run bridge` in the Datacollect project). 백엔드를 NAS로 옮긴 경우 보통 사
@@ -305,7 +305,7 @@ flowchart LR
- `g1nation.largeInputMapReduce` *(boolean)* _(default: `true`)_ — When a single message is too large to fit the model's context window, split it into chunks, extract only the request-relevant facts from each (no hallucination/summary), integrate them, and answer fro
- `g1nation.mapReduceTriggerRatio` *(number)* _(default: `0.6`)_ — Map-reduce kicks in when a single message exceeds (effective context window × this ratio). Lower = engages sooner (safer for big inputs, more LLM calls). Default: 0.6
- `g1nation.mapReduceConcurrency` *(number)* _(default: `2`)_ — How many chunk extractions run in parallel. Keep low on a single local GPU (one model serves them sequentially anyway). Default: 2
- - _…and 123 more_
+ - _…and 127 more_
## Dependencies
- **Runtime** (2): `@lmstudio/sdk`, `pdf-parse`
@@ -353,7 +353,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한
**Designed for High-Performance Decision Making.**
Copyright (C) **g1nation**. All rights reserved.
-_Last auto-scan: 2026-07-20T04:20:03.384Z · signature `ff87bb88`_
+_Last auto-scan: 2026-07-21T04:22:55.352Z · signature `ca99a170`_
## Purpose
diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json
index fd7eb54..575be71 100644
--- a/.astra/project-context/scan-cache.json
+++ b/.astra/project-context/scan-cache.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "generatedAt": "2026-07-20T04:20:03.483Z",
+ "generatedAt": "2026-07-21T04:22:55.502Z",
"files": {
"src/agent/actions/brainOps.ts": {
"mtimeMs": 1779764602582.9768,
@@ -254,9 +254,9 @@
]
},
"src/agent/handlePrompt/processFinalAnswer.ts": {
- "mtimeMs": 1779764602591.863,
- "size": 6606,
- "lines": 147,
+ "mtimeMs": 1784522477358.286,
+ "size": 7268,
+ "lines": 158,
"role": "",
"imports": [
"src/utils",
@@ -273,6 +273,16 @@
"src/lib/contextManager"
]
},
+ "src/agent/handlePrompt/sectionedCompletion.ts": {
+ "mtimeMs": 1784521634407.0134,
+ "size": 6304,
+ "lines": 116,
+ "role": "[v2.2.313] 파트별 완성 (Sectioned Completion) — 사용자 제안 구현. 문제: 보고서형 답변이 출력 토큰 한계에 닿으면 자동 이어쓰기(같은 호출의 연장)를 최대 N회 시도하고, 그래도 못 채우면 \"더 좁은 주제로 나눠 질문하세요\" 안내로 끝났다. 나눠서 다시 묻는 부담을 사용자에게 떠넘긴 것. 해결: 한계에 닿은 초안을 받으면 백엔",
+ "imports": [
+ "src/utils",
+ "src/agent"
+ ]
+ },
"src/agent/hangulHygiene.ts": {
"mtimeMs": 1781239601929.7876,
"size": 3244,
@@ -436,9 +446,9 @@
]
},
"src/agent.ts": {
- "mtimeMs": 1784517985649.1714,
- "size": 113583,
- "lines": 1979,
+ "mtimeMs": 1784602363613.244,
+ "size": 130400,
+ "lines": 2229,
"role": "",
"imports": [
"src/utils",
@@ -455,6 +465,9 @@
"src/features/web/webFetch",
"src/intelligence/correctionLoop",
"src/intelligence/investigationPipeline",
+ "src/intelligence/requirementGraph",
+ "src/intelligence/turnIntentBrief",
+ "src/intelligence/subQuestions",
"src/lib/contextBuilders/multiAgentRouting",
"src/lib/contextBuilders/thinkingPartnerContract",
"src/lib/contextBuilders/droppedHistorySummary",
@@ -527,6 +540,7 @@
"src/agent/handlePrompt/applyAutoContinuation",
"src/features/approval/approvalQueue",
"src/intelligence/confidenceEngine",
+ "src/core/services",
"src/features/providers"
]
},
@@ -577,9 +591,9 @@
]
},
"src/config.ts": {
- "mtimeMs": 1784510604793.408,
- "size": 42409,
- "lines": 727,
+ "mtimeMs": 1784602367128.109,
+ "size": 43582,
+ "lines": 745,
"role": "",
"imports": []
},
@@ -2410,9 +2424,9 @@
]
},
"src/intelligence/investigationPipeline.ts": {
- "mtimeMs": 1784517973427.466,
- "size": 13722,
- "lines": 256,
+ "mtimeMs": 1784521742026.5295,
+ "size": 15022,
+ "lines": 282,
"role": "Investigation Pipeline — \"파일명만 보고 상상하는 조사\" 를 구조적으로 차단. (v2.2.309) 문제: 소형 로컬 모델은 로 파일명 목록을 받으면 을 부르지 않고 이름에서 내용을 상상해 조사 결과를 지어낸다 (lazy tool-use 할루시네이션). 해법 3중: ① 증거 게이트 — 조사형 요청 ",
"imports": [
"src/config"
@@ -2508,6 +2522,13 @@
"src/intelligence/reflectionStore"
]
},
+ "src/intelligence/subQuestions.ts": {
+ "mtimeMs": 1784605847771.3826,
+ "size": 4647,
+ "lines": 85,
+ "role": "[v2.2.318] 하위 질문 체크리스트 — \"질문 3개에 하나도 직접 답하지 않는\" 실사례 대응. 사용자가 한 메시지에 물음을 여러 개 명시하면(\"어떤 주제인지, 퀄리티는 어떤지, 도움이 될지\") 각 물음이 답변에서 다뤄지는지를 결정론으로 관리한다: 1) 프롬프트에서 물음 절(clause)을 규칙 기반 추출 (LLM 없음) 2) 답변 전: \"각 물음에 별",
+ "imports": []
+ },
"src/intelligence/taskEvalHarness.ts": {
"mtimeMs": 1781144360998.8086,
"size": 7942,
@@ -2517,6 +2538,15 @@
"src/intelligence/requirementGraph"
]
},
+ "src/intelligence/turnIntentBrief.ts": {
+ "mtimeMs": 1784524229904.1582,
+ "size": 7105,
+ "lines": 121,
+ "role": "[v2.2.316] 턴 의도 브리핑 — \"질문 의도를 판단하지 못한다\" 문제의 구조적 해결. 진단: 의도 브리핑(왜 묻는지·진짜 궁금증·답의 용도 추출→주입)은 멀티에이전트 보고서 경로(v2.2.301)에만 있었고, 일반 채팅 턴은 \"[답변 전 이해 원칙]\" 4줄짜리 추상 지시뿐이었다. 소형 로컬 모델은 추상 지시(\"의도를 파악하라\")를 실행하지 못한다 —",
+ "imports": [
+ "src/utils"
+ ]
+ },
"src/lib/contextBuilders/astraModeArchitecture.ts": {
"mtimeMs": 1779764602634.5583,
"size": 3982,
@@ -2650,22 +2680,23 @@
"imports": []
},
"src/lib/contextBuilders/multiAgentRouting.ts": {
- "mtimeMs": 1783907905794.681,
- "size": 5728,
- "lines": 103,
+ "mtimeMs": 1784523758683.9956,
+ "size": 6310,
+ "lines": 111,
"role": "",
"imports": [
"src/config",
"src/lib/contextManager",
"src/lib/contextBuilders/promptDetection",
"src/lib/contextBuilders/astraModeArchitecture",
- "src/lib/contextBuilders/localProjectIntent"
+ "src/lib/contextBuilders/localProjectIntent",
+ "src/features/web/webFetch"
]
},
"src/lib/contextBuilders/outputSanitization.ts": {
- "mtimeMs": 1784019840678.9001,
- "size": 5958,
- "lines": 108,
+ "mtimeMs": 1784522459809.4607,
+ "size": 9673,
+ "lines": 175,
"role": "모델 출력 후처리 (post-stream sanitization). 모두 stateless pure transform. 1) sanitizeAssistantContent — 모델이 답변에 흘려보낸 내부 마커 (rationale, reasoning channels, Harmony/GPT-OSS 채널 마커, [PROBLEM]/[GOAL]/[REASONING] ",
"imports": []
},
@@ -2781,9 +2812,9 @@
"imports": []
},
"src/lib/contextBuilders/urlContext.ts": {
- "mtimeMs": 1781491584068.7393,
- "size": 5546,
- "lines": 108,
+ "mtimeMs": 1784602315425.4807,
+ "size": 12372,
+ "lines": 234,
"role": "URL 컨텍스트 빌더 — 채팅 프롬프트에 URL 이 있으면 본문을 추출해 실데이터로 주입. 문제: /wikify 는 URL 에 접근하지만(브리지 /api/web-extract), 일반 채팅에 URL 을 주면 추출 경로가 없어 모델이 \"접근할 수 없습니다\"라고 답하거나 내용을 추측했다. v2: Bridge 100% 의존이 두 번째 공백이었다 — Bridge ",
"imports": [
"src/utils",
@@ -3994,9 +4025,9 @@
]
},
"tests/investigationPipeline.test.ts": {
- "mtimeMs": 1784518245844.1465,
- "size": 9847,
- "lines": 193,
+ "mtimeMs": 1784521853054.2844,
+ "size": 11267,
+ "lines": 217,
"role": "Investigation Pipeline — 파일명만 보고 상상하는 헛조사 차단 3중 방어. (v2.2.309) ① 조사형 요청 감지 + 증거 게이트 ② 강제 정독 Map + 해시 캐시 ③ Hollow 감지",
"imports": [
"src/intelligence/investigationPipeline"
@@ -4104,6 +4135,15 @@
"src/lib/contextBuilders/multiAgentRouting"
]
},
+ "tests/lsepClosersAndLeaks.test.ts": {
+ "mtimeMs": 1784523140472.9927,
+ "size": 3378,
+ "lines": 63,
+ "role": "[v2.2.314] 두 실사례 가드: 1) LSEP 마커 뒤 \"마무리 인사\"만 남고 본문이 추론 구간에 갇혀 증발한 답변. 2) \"요청 요약/사용자 의도 추론/핵심 확인 질문\" 내부 스캐폴딩 섹션 유출.",
+ "imports": [
+ "src/lib/contextBuilders/outputSanitization"
+ ]
+ },
"tests/meetPrompt.test.ts": {
"mtimeMs": 1782114707092.5818,
"size": 3643,
@@ -4338,6 +4378,16 @@
"src/features/secondBrainTrace"
]
},
+ "tests/sectionedCompletion.test.ts": {
+ "mtimeMs": 1784521835807.1162,
+ "size": 4361,
+ "lines": 97,
+ "role": "[v2.2.313] 파트별 완성 — 길이 한계에 닿은 보고서를 남은 섹션 단위로 나눠 생성해 한 문서로 통합. \"더 좁은 주제로 나눠 질문하세요\" 떠넘기기의 대체.",
+ "imports": [
+ "src/agent/handlePrompt/sectionedCompletion",
+ "src/agent"
+ ]
+ },
"tests/selfAssessContext.test.ts": {
"mtimeMs": 1781232946761.048,
"size": 3413,
@@ -4435,6 +4485,15 @@
"src/agent/actions/stripForDisplay"
]
},
+ "tests/subQuestions.test.ts": {
+ "mtimeMs": 1784605807159.133,
+ "size": 2750,
+ "lines": 57,
+ "role": "[v2.2.318] 하위 질문 체크리스트 — \"물음 3개에 하나도 직접 답하지 않는\" 실사례 가드.",
+ "imports": [
+ "src/intelligence/subQuestions"
+ ]
+ },
"tests/systemPrompt.test.ts": {
"mtimeMs": 1779764602687.5603,
"size": 1487,
@@ -4493,6 +4552,15 @@
"src/core/transaction"
]
},
+ "tests/turnIntentBrief.test.ts": {
+ "mtimeMs": 1784533325652.0085,
+ "size": 3596,
+ "lines": 73,
+ "role": "[v2.2.316] 턴 의도 브리핑 — \"질문 의도를 판단하지 못한다\" 문제의 구조적 해결. 게이팅(잡담 제외) / JSON 파싱 내성 / 주입 블록의 근거-경로 강제를 검증.",
+ "imports": [
+ "src/intelligence/turnIntentBrief"
+ ]
+ },
"tests/urlContext.test.ts": {
"mtimeMs": 1781239218670.592,
"size": 2655,
@@ -4522,6 +4590,16 @@
"src/features/web/webFetch"
]
},
+ "tests/webFetchNotice.test.ts": {
+ "mtimeMs": 1784601240938.898,
+ "size": 4616,
+ "lines": 77,
+ "role": "[v2.2.315] 웹 실접속 결정론 표시 — \"사이트 분석 요청에 실접속 없이 일반론 답변\" (koritips.com 실사례) 재발 방지. 접속 실패는 답변 상단 경고, 성공은 하단 출처.",
+ "imports": [
+ "src/lib/contextBuilders/urlContext",
+ "src/lib/contextBuilders/multiAgentRouting"
+ ]
+ },
"tests/wikiFormat.test.ts": {
"mtimeMs": 1783044027299.6238,
"size": 3405,
@@ -4845,7 +4923,7 @@
"imports": []
},
"docs/records/ConnectAI/chronicle.config.json": {
- "mtimeMs": 1784521189700.969,
+ "mtimeMs": 1784607768925.8318,
"size": 371,
"lines": 11,
"role": "JSON configuration",
@@ -5243,6 +5321,34 @@
"role": "ADR: 일단 조건을 하나 더 추가할께. 계열사는 하고 싶어 하지 않아. 우리한테 업무를 주는게 추가 업무로 이어진다고 생각해. 해서 이걸 뒤집을 정도로...",
"imports": []
},
+ "docs/records/ConnectAI/decisions/ADR-0057-e-wiki-connectai-프로젝트-분석해줘.md": {
+ "mtimeMs": 1784521304979.044,
+ "size": 1396,
+ "lines": 19,
+ "role": "ADR: E:\\Wiki\\connectai 프로젝트 분석해줘.",
+ "imports": []
+ },
+ "docs/records/ConnectAI/decisions/ADR-0058-e-wiki-connectai-프로젝트-분석해-그리고-내용을-출력해줘.md": {
+ "mtimeMs": 1784522265657.1863,
+ "size": 1384,
+ "lines": 19,
+ "role": "ADR: E:\\Wiki\\connectai 프로젝트 분석해 그리고 내용을 출력해줘.",
+ "imports": []
+ },
+ "docs/records/ConnectAI/decisions/ADR-0059-https-koritips-com-사이트에-대한-분석-및-평가해줘-예상되는-주요-구독자는-누구일-것인지-글의.md": {
+ "mtimeMs": 1784533698646.8413,
+ "size": 1628,
+ "lines": 19,
+ "role": "ADR: HTTPS://KORITIPS.COM 사이트에 대한 분석 및 평가해줘. 예상되는 주요 구독자는 누구일 것인지, 글의 퀄리티는 어떠한지,",
+ "imports": []
+ },
+ "docs/records/ConnectAI/decisions/ADR-0060-https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠.md": {
+ "mtimeMs": 1784534124012.3115,
+ "size": 1686,
+ "lines": 19,
+ "role": "ADR: https://www.koritips.com 분석해줘. 어떠한 주제로 블로그가 운영되고 있는지, 글의 퀄리티는 어떠한지, 검색해서 들어온 사람이...",
+ "imports": []
+ },
"docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": {
"mtimeMs": 1778028987330.4185,
"size": 1564,
@@ -5621,6 +5727,27 @@
"role": "Development Log: 지금까지 너는 나에게 아이디어, 핵심 내용, 기대 효과 내용으로 써줬는데. 법정 의무 교육은 다른 포멧으로 줬어 기대 효과를 써줘. 법정 의무 ...",
"imports": []
},
+ "docs/records/ConnectAI/development/2026-07-21_https-caliverse-io-사이트에-대한-분석해줘_implementation.md": {
+ "mtimeMs": 1784602271893.2676,
+ "size": 1708,
+ "lines": 22,
+ "role": "Development Log: https://caliverse.io 사이트에 대한 분석해줘.",
+ "imports": []
+ },
+ "docs/records/ConnectAI/development/2026-07-21_https-koritips-com-사이트에-대한-분석하고-어떠한-주제로-구성되어-있는지-사이트의-목표는-무엇_implementation.md": {
+ "mtimeMs": 1784607768898.34,
+ "size": 1725,
+ "lines": 22,
+ "role": "Development Log: https://koritips.com 사이트에 대한 분석하고 어떠한 주제로 구성되어 있는지, 사이트의 목표는 무엇인지.",
+ "imports": []
+ },
+ "docs/records/ConnectAI/development/2026-07-21_https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠_implementation.md": {
+ "mtimeMs": 1784601796252.6404,
+ "size": 1572,
+ "lines": 22,
+ "role": "Development Log: https://www.koritips.com 분석해줘. 어떠한 주제로 블로그가 운영되고 있는지, 글의 퀄리티는 어떠한지, 검색해서 들어온 사람이...",
+ "imports": []
+ },
"docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업-할-거야.md": {
"mtimeMs": 1778720117404.2578,
"size": 668,
@@ -5698,6 +5825,13 @@
"role": "Discussion: 우리 개발실은 가우시안 스필리터, 그리고 월마트에서 이머시브 스토어, 그리고 ai로 영상, 사운드 제작팀이 있어. 인원은 30명정도야. 여기에는...",
"imports": []
},
+ "docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-프로젝트-분석해줘.md": {
+ "mtimeMs": 1784522127183.7183,
+ "size": 577,
+ "lines": 16,
+ "role": "Discussion: E:\\Wiki\\connectai 프로젝트 분석해줘.",
+ "imports": []
+ },
"docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-프로젝트를-분석하고-구조에-대해서-설명해줘-2.md": {
"mtimeMs": 1784509596722.4983,
"size": 514,
@@ -5783,9 +5917,9 @@
"imports": []
},
"docs/records/ConnectAI/timeline.md": {
- "mtimeMs": 1784517524755.3872,
- "size": 26819,
- "lines": 431,
+ "mtimeMs": 1784607768902.889,
+ "size": 28140,
+ "lines": 455,
"role": "Project Timeline",
"imports": []
},
diff --git a/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json b/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json
index 56a59ef..ea6009e 100644
--- a/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json
+++ b/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json
@@ -1,5 +1,5 @@
{
"result": "직답 결과 — single-pass mock 응답입니다.",
- "createdAt": 1784521057661,
+ "createdAt": 1785921598765,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json b/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json
index 00b8d6e..ca5ca1b 100644
--- a/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json
+++ b/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json
@@ -1,5 +1,5 @@
{
- "result": "---\nid: wiki_on\ndate: 2026-07-20T04:17:37.663Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\n직답 결과 — single-pass mock 응답입니다.\n\n직답 결과 — single-pass mock 응답입니다.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | ✅ Low |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[DIRECT]** 답변 작성 중... (단일 호출 fast-path) (18ms)\n",
- "createdAt": 1784521057663,
+ "result": "---\nid: wiki_on\ndate: 2026-08-05T09:19:58.767Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\n직답 결과 — single-pass mock 응답입니다.\n\n직답 결과 — single-pass mock 응답입니다.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | ✅ Low |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[DIRECT]** 답변 작성 중... (단일 호출 fast-path) (22ms)\n",
+ "createdAt": 1785921598767,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/engine/.astra/missions/wiki_on.json b/.astra/tests/engine/.astra/missions/wiki_on.json
index a0c1b15..b96da35 100644
--- a/.astra/tests/engine/.astra/missions/wiki_on.json
+++ b/.astra/tests/engine/.astra/missions/wiki_on.json
@@ -1,8 +1,8 @@
{
"missionId": "wiki_on",
"status": "completed",
- "startTime": "2026-07-20T04:17:37.641Z",
- "totalElapsedMs": 24,
+ "startTime": "2026-08-05T09:19:58.741Z",
+ "totalElapsedMs": 27,
"results": {
"direct": "직답 결과 — single-pass mock 응답입니다."
},
@@ -12,16 +12,16 @@
{
"from": "idle",
"to": "direct",
- "durationMs": 18,
+ "durationMs": 22,
"message": "답변 작성 중... (단일 호출 fast-path)",
- "ts": "2026-07-20T04:17:37.659Z"
+ "ts": "2026-08-05T09:19:58.763Z"
},
{
"from": "direct",
"to": "completed",
"durationMs": 5,
"message": "미션 완료",
- "ts": "2026-07-20T04:17:37.664Z"
+ "ts": "2026-08-05T09:19:58.768Z"
}
],
"resilienceMetrics": {
diff --git a/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json b/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json
index 6f27ec7..cb81ec4 100644
--- a/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json
+++ b/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json
@@ -1,5 +1,5 @@
{
"result": "Final report with inconsistencies. This should be long enough to pass validation.",
- "createdAt": 1784521065426,
+ "createdAt": 1785921605167,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json b/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json
index 694f01f..685fc13 100644
--- a/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json
+++ b/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json
@@ -1,5 +1,5 @@
{
"result": "Final report with inconsistencies. This should be long enough to pass validation.",
- "createdAt": 1784521065425,
+ "createdAt": 1785921605166,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json b/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json
index ed33d27..83029c8 100644
--- a/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json
+++ b/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json
@@ -1,5 +1,5 @@
{
"result": "[{\"heading\":\"본문\",\"scope\":\"전체 답변\"}]",
- "createdAt": 1784521065420,
+ "createdAt": 1785921605162,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json b/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json
index d901206..a962ff5 100644
--- a/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json
+++ b/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json
@@ -1,5 +1,5 @@
{
"result": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
- "createdAt": 1784521065423,
+ "createdAt": 1785921605164,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json b/.astra/tests/stress/.astra/missions/stress_conflict_1785921605143.json
similarity index 76%
rename from .astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json
rename to .astra/tests/stress/.astra/missions/stress_conflict_1785921605143.json
index c7390a8..36d4387 100644
--- a/.astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json
+++ b/.astra/tests/stress/.astra/missions/stress_conflict_1785921605143.json
@@ -1,8 +1,8 @@
{
- "missionId": "stress_conflict_1784521065403",
+ "missionId": "stress_conflict_1785921605143",
"status": "completed",
- "startTime": "2026-07-20T04:17:45.404Z",
- "totalElapsedMs": 23,
+ "startTime": "2026-08-05T09:20:05.143Z",
+ "totalElapsedMs": 25,
"results": {
"outline": "[{\"heading\":\"본문\",\"scope\":\"전체 답변\"}]",
"section_0": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
@@ -14,30 +14,30 @@
{
"from": "idle",
"to": "outline",
- "durationMs": 15,
+ "durationMs": 18,
"message": "답변 구조 잡는 중...",
- "ts": "2026-07-20T04:17:45.419Z"
+ "ts": "2026-08-05T09:20:05.161Z"
},
{
"from": "outline",
"to": "section",
- "durationMs": 3,
+ "durationMs": 2,
"message": "본문 작성 중...",
- "ts": "2026-07-20T04:17:45.422Z"
+ "ts": "2026-08-05T09:20:05.163Z"
},
{
"from": "section",
"to": "polish",
"durationMs": 2,
"message": "최종 다듬기 중...",
- "ts": "2026-07-20T04:17:45.424Z"
+ "ts": "2026-08-05T09:20:05.165Z"
},
{
"from": "polish",
"to": "completed",
"durationMs": 3,
"message": "미션 완료",
- "ts": "2026-07-20T04:17:45.427Z"
+ "ts": "2026-08-05T09:20:05.168Z"
}
],
"resilienceMetrics": {
diff --git a/PATCHNOTES.md b/PATCHNOTES.md
index 9cb9cfd..bf92907 100644
--- a/PATCHNOTES.md
+++ b/PATCHNOTES.md
@@ -1,5 +1,58 @@
# Astra Patch Notes
+## v2.2.319 (2026-08-05)
+### 🛍️ 네이버 쇼핑인사이트 · 검색어트렌드 연동 — `/naver-shopping`, `/naver-trend`
+사용자 요청: 네이버 쇼핑인사이트·검색어트렌드 API로 "오늘 검색어 많은 키워드 10개" 같은 자연어 질문에 답하고 싶음. 두 API 모두 비교 대상(분야 코드/키워드 묶음)을 미리 지정해야 상대 비율(ratio)만 돌려주는 구조라 "전체 실시간 top-N"을 직접 못 준다 — LLM이 도메인 지식으로 후보를 제안하고 실제 API로 검증해 순위를 매기는 방식(discover 모드)으로 갭을 메웠다.
+- **명시 비교(compare) vs 탐색(discover) 자동 판별**: intentParser 가 "패션의류 vs 화장품 비교"는 compare, "요즘 뜨는 뷰티 카테고리"는 discover 로 분류. discover 결과에는 "네이버 전체 실시간 순위 아님" 디스클레이머 고정 부착.
+- **API 상한 캡슐화(rankEngine)**: 쇼핑인사이트 카테고리 3개/요청, 검색어트렌드 키워드그룹 5개/요청 상한을 배치 순차 호출 + 병합정렬로 흡수 — 호출자는 "후보 N개 랭킹"만 요청하면 됨. 키워드는 groupName 1개 = keyword 1개로 보내 개별 순위를 보장(같은 그룹에 여러 키워드를 넣으면 API가 합산해버리는 함정 회피).
+- **카테고리 매칭(categoryCodes)**: 공식 문서 예시와 교차검증된 대분류 4종(패션의류/화장품·미용/디지털·가전/식품) + 네이버쇼핑 전체 카테고리 트리 4,967건(중/소/세분류)을 fuzzy 매칭 — "원피스" 같은 세부 카테고리도 정확한 cat_id 로 조회.
+- **자격증명**: Client ID/Secret 을 Astra 설정 → "Naver Trend" 섹션에서 SecretStorage 로 저장(providerConfig.ts 와 동일 패턴, settings.json 비침범).
+검증: tsc 무오류 + jest 1012 통과(신규 13) + esbuild 정상.
+
+## v2.2.318 (2026-07-20)
+### ❓ 하위 질문 체크리스트 + 사이트 심층 수집 — "질문 3개에 하나도 답 안 함" 해결
+실사례: "어떤 주제인지, 글 퀄리티는 어떤지, 검색 유입자에게 도움이 될지" 3가지를 물었는데 답변은 평가 형용사("가치가 높습니다")만 나열 — 얻어낼 정보가 없음. 원인 2개: 명시된 물음별 답변을 강제하는 장치 부재 + 홈 1장(8천 자)만 수집해 "글 퀄리티" 판단 데이터 자체가 없음.
+- **하위 질문 체크리스트 (LLM 없음)**: 물음이 2개 이상 명시된 요청은 규칙 기반으로 물음 절을 추출해 "각 물음에 별도 소제목 + 구체 근거(글 제목·예시)로 답하라, 판단 형용사만은 실패"를 주입. 답변 후 각 물음의 특징 토큰이 답변에 없으면 "미답변 물음 감지" footer 로 어떤 물음이 빠졌는지 목록 표시.
+- **사이트 심층 수집 (`webDeepAnalyzeEnabled`, 기본 ON)**: 루트 URL 분석/평가 요청이면 홈 HTML 에서 같은 도메인 글 링크 상위 2개를 추가 수집(병렬) — 실제 글 본문을 근거로 퀄리티를 판단하게 한다. 수집된 글은 실접속 출처·본문 불일치 검증(v2.2.315~317)에도 자동 포함.
+검증: tsc 무오류 + jest 999 통과(신규 7) + esbuild 정상.
+
+## v2.2.317 (2026-07-20)
+### 🔍 웹 본문 불일치 검증 — "접속했는데도 일반론" 마지막 그물
+실사례 후속: koritips.com(실체는 Blogging Tips 블로그)을 "IT 엔지니어 대상 기술 플랫폼"으로 서술 — 실접속 성패 표시(v2.2.315)만으로는 "접속은 성공했지만 모델이 본문을 무시한" 케이스를 못 잡는다. (해당 턴은 장기 세션 히스토리 속 직전 오답 + 미재시작 구버전에서 발생.)
+- **본문 반영 검증 (결정론)**: fetch 성공 시 제목·본문 표본의 특징 토큰(도메인 토큰 제외)을 추출해 답변과 대조 — 2개 미만 일치면 "⚠️ 본문 불일치 가능 — 일반론일 수 있음" footer 를 자동 부착. 재요청 문구 안내 포함.
+- **도달 증거 텔레메트리**: turn 이벤트 note 에 `webFetch=성공/시도` 기록 — "주입엔 항상 도달 증거를" 원칙을 웹 경로에도 적용.
+검증: tsc 무오류 + jest 992 통과(신규 5) + esbuild 정상.
+
+## v2.2.316 (2026-07-20)
+### 🎯 턴 의도 브리핑 — "질문 의도를 판단하지 못한다" 구조적 해결
+멀티에이전트 보고서 경로에만 있던 의도 브리핑(v2.2.301)을 모든 실질 요청 턴으로 확장. 소형 로컬 모델은 "의도를 파악하라"는 추상 지시(기존 [답변 전 이해 원칙] 4줄)를 실행하지 못한다 — 파악된 의도를 *텍스트로 받아야* 따른다 (강제 주입 패턴 6번째 적용).
+- **매 요청 턴 브리핑 추출**(`intentBriefEnabled`, 기본 ON): 목적 / 진짜 궁금증(1~3) / 기대 산출물 형태 / 독자(본인·경영진·팀) / **근거 경로(web·local-files·brain·general)** / 명시 제약 — LLM 1회(JSON)로 추출해 보호 구역(dynamicBlocks)에 주입. "이 브리핑에 답하는 것이 성공 기준, 첫 문장은 목적에 대한 결론"을 명시.
+- **근거-경로 강제**: web 이면 "[URL CONTENT] 실데이터만 근거, 없으면 접속 실패 명시, 일반 지식 평가는 금지", local-files 면 "실제 읽은 파일만 근거, 부족하면 read/investigate 먼저" — koritips.com 실사례(근거 경로 착오)의 상류 방어.
+- **지연 상쇄**: 브리핑은 retrieval(1~8초)과 *병렬* 실행 — 체감 추가 지연 최소. 실패/타임아웃(10초)은 조용히 브리핑 없이 진행. `intentBriefModel` 로 빠른 소형 모델 지정 가능.
+검증: tsc 무오류 + jest 987 통과(신규 10) + esbuild 정상.
+
+## v2.2.315 (2026-07-20)
+### 🌐 웹 실접속 증빙 — "사이트 분석"이 실접속 없이 일반론으로 끝나는 할루시네이션 차단
+실사례: "HTTPS://KORITIPS.COM 분석·평가해줘" → 실접속 여부가 어디에도 안 보이는 일반론 전략 제언 + 파일 기준 오탐 경고("파일 미확인 분석")까지 붙어 혼란.
+- **턴 단위 웹 접속 추적 + 결정론 표시**: URL 포함 요청은 접속 성패를 코드가 기록하고 답변에 박는다 — 전부 실패면 답변 *맨 위*에 "⚠️ 사이트 실접속 실패(사유) — 아래는 일반 지식 추정" 경고, 성공이면 답변 끝에 "🌐 실접속 확인: 본문을 근거로 사용" 출처. "접속 실패를 알리라"는 프롬프트 지시(소형 모델이 무시)를 코드 강제로 대체.
+- **오탐 수정**: URL 요청에는 파일 액션 기준의 "파일 미확인 분석" footer(v2.2.313)를 띄우지 않는다 — 웹 분석은 파일을 읽을 이유가 없다.
+- **라우팅 구멍 봉쇄**: URL 포함 요청은 멀티에이전트 워크플로우로 보내지 않는다 — 그 경로엔 웹 접근(URL 실데이터 주입)이 아예 없어 "사이트 조사해줘"가 실접속 0회 보고서로 끝났다. 단일 턴만 URL 본문을 주입받는다.
+검증: tsc 무오류 + jest 977 통과(신규 5) + esbuild 정상.
+
+## v2.2.314 (2026-07-20)
+### 🛟 본문 증발 구제 + 내부 섹션 유출 제거
+실사례 2건: ① 분석 답변이 화면에 작성되다가 전부 지워지고 "이상으로 분석을 마칩니다"만 남음 — 모델이 본문 전체를 LSEP 추론 구간에 쓰고 가시 답변은 마무리 인사 한 줄만 낸 것(추론 숨김 처리가 본문까지 폐기). ② "요청 요약/사용자 의도 추론/프로젝트 기록 대상 확인/핵심 확인 질문" 내부 스캐폴딩 섹션이 답변에 그대로 노출.
+- **LSEP 마무리-인사-만 감지 → 3단 구제**: 마커 뒤가 마무리 인사뿐(<300자)이고 앞이 장문이면 thought-only 로 간주해 ① final-only 재생성 발동(이제 continuation depth 에서도 허용 — 분석 보고의 최종 라운드가 정확히 이 지점에서 실패했었다), ② 재생성도 실패하면 마커 앞 텍스트가 명백한 보고 형태(헤딩/불릿/문단 다수)일 때만 구제 승격 — 화면에서 지워진 그 본문을 되살린다. 형태가 애매하면 승격 안 함(생각 과정 노출 회귀 방지).
+- **내부 섹션 유출 결정론 제거 (stripLeakedInternalSections)**: 규칙 4가 금지하는 스캐폴딩 섹션 + "질문 의도:" 줄을 최종 답변에서 걷어낸다. Project Record Guard 턴(designerContext 활성)은 가드가 요구하는 섹션이므로 보존.
+검증: tsc 무오류 + jest 972 통과(신규 6) + esbuild 정상.
+
+## v2.2.313 (2026-07-20)
+### 🧩 파트별 완성 + 파일 미확인 분석 경고
+실사례: 프로젝트 분석 답변이 "답변이 길어 자동으로 이어 정리했지만 여전히 길이 한계에 닿았습니다"로 끝나며 사용자에게 "나눠 질문하라"고 떠넘김 + 실제 파일은 하나도 안 읽고 사전 주입된 아키텍처 요약만으로 작성돼 구조 상세가 없었음.
+- **파트별 완성 (`sectionedCompletionEnabled`, 기본 ON — 사용자 제안 구현)**: 보고서·분석형 답변이 자동 이어쓰기로도 출력 한계에 닿으면, ① 남은 섹션 제목 추출(1회) → ② 섹션마다 *독립 호출*로 본문 생성(호출당 출력 예산 온전, 업무 유형 필수 요소를 outline 에 우선 반영) → ③ 결정적으로 이어 붙여 **한 문서로 통합**. 섹션 호출은 시스템+히스토리 프리픽스를 재사용해 KV 캐시로 프리필이 저렴하다. 실패 시 종전 안내로 폴백.
+- **파일 미확인 분석 경고 (3번째 그물)**: 로컬 프로젝트 분석 요청인데 이 턴에 액션(read/list/investigate)을 한 번도 안 쓰고 장문 분석을 낸 경우 "⚠️ 파일 미확인 분석" footer — hollow(목록만 봄, v2.2.309)·ungrounded(읽고도 인용 없음, v2.2.312) 둘 다 액션 1회 이상을 전제해 놓치던 사각지대.
+검증: tsc 무오류 + jest 966 통과(신규 12: sectionedCompletion 7 + unreadAnalysis 5) + esbuild 정상.
+
## v2.2.312 (2026-07-20)
### 📋 보고 품질 — "## 4.부터 시작하는 보고서" 버그 + 일반론 총평 차단
실사례: "connectai 프로젝트를 분석하고 보고해줘" → 답변이 "## 4. 종합 분석 결과"부터 시작(1~3 증발), 내용은 프로젝트명을 바꿔도 성립하는 7줄 일반론.
diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json
index 65fdab3..caf99c7 100644
--- a/docs/records/ConnectAI/chronicle.config.json
+++ b/docs/records/ConnectAI/chronicle.config.json
@@ -7,5 +7,5 @@
"corePurpose": "",
"detailLevel": "standard",
"createdAt": "2026-05-20T09:42:40.003Z",
- "updatedAt": "2026-07-20T04:19:49.700Z"
+ "updatedAt": "2026-07-24T09:42:33.480Z"
}
diff --git a/docs/records/ConnectAI/decisions/ADR-0057-e-wiki-connectai-프로젝트-분석해줘.md b/docs/records/ConnectAI/decisions/ADR-0057-e-wiki-connectai-프로젝트-분석해줘.md
new file mode 100644
index 0000000..ea27766
--- /dev/null
+++ b/docs/records/ConnectAI/decisions/ADR-0057-e-wiki-connectai-프로젝트-분석해줘.md
@@ -0,0 +1,19 @@
+# ADR: E:\Wiki\connectai 프로젝트 분석해줘.
+
+## Status
+accepted
+
+## Context
+E:\Wiki\connectai 프로젝트 분석해줘.
+
+## Decision
+ConnectAI는 VS Code 환경에서 사용자의 개인적 지능 레이어 역할을 수행하며, 다층적 메모리 구조와 멀티 에이전트 워크플로를 통해 프로젝트의 맥맥을 관리하는 고도화된 시스템입니다. 이 프로젝트는 단순한 챗봇을 넘어, RAG(Retrieval-Augmented Generation)와 5계층 인지 메모리를 결합하여 깊은 프로젝트 컨텍스트를 유지하고, 에이전트 기반의 자동화된 의사결정을 지원하도록 설계되었습니다. ## 핵심 아키텍 architecture 및 기술 구조 - **인지 메모리 계층**: 단기, 장기, 프로젝트, 절차, 일화(Episodic)로 구분된 **5계층 인지 메모리** 구조를 채택하여 정보의 용도와 시간에 따른 체계적인 관리가 가능합니다. - **검색 및 인덱싱**: `brainIndex.ts`를 통해 Second Brain(Markdown 문서)을 토색화하고 TF-IDF 점수를 계산하여 관련성 높은 정보를 추출하는 RAG 엔진을 갖추고 있습니다. - **기술...
+
+## Reason
+Captured automatically because the conversation contained decision-oriented language.
+
+## Alternatives
+Not captured yet.
+
+## Consequences
+- Future prompts should treat this as project context unless the user changes direction.
diff --git a/docs/records/ConnectAI/decisions/ADR-0058-e-wiki-connectai-프로젝트-분석해-그리고-내용을-출력해줘.md b/docs/records/ConnectAI/decisions/ADR-0058-e-wiki-connectai-프로젝트-분석해-그리고-내용을-출력해줘.md
new file mode 100644
index 0000000..e6d9a93
--- /dev/null
+++ b/docs/records/ConnectAI/decisions/ADR-0058-e-wiki-connectai-프로젝트-분석해-그리고-내용을-출력해줘.md
@@ -0,0 +1,19 @@
+# ADR: E:\Wiki\connectai 프로젝트 분석해 그리고 내용을 출력해줘.
+
+## Status
+accepted
+
+## Context
+E:\Wiki\connectai 프로젝트 분석해 그리고 내용을 출력해줘.
+
+## Decision
+ConnectAI 프로젝트는 VS Code 익스텐션 기술 스택(TypeScript, Node.js)을 기반으로 하며, 로컬 LLM(Ollama, LM Studio)과 사용자의 지식 데이터베이스(Second Brain)를 연결하여 개인화된 인텔리전스 레이어를 제공하는 구조입니다. ## 프로젝트 개요 ConnectAI는 단순한 채팅 도구를 넘어, 사용자의 로컬 환경에 존재하는 다양한 데이터(Markdown, YouTube, Web 등)를 수집하고 이를 LLM이 이해할 수 있는 형태로 정제하여 '지식의 선순환'을 만드는 것을 목표로 합니다. 핵심 기능은 에이전트 기반의 워크플로우, 지식 노후 점검, 그리고 1인 기업 모드(One-Person Company Mode)를 통한 업무 자동화입니다. ## 주요 기술 구조 및 특징 * **핵심 스택**: TypeScript 기반의 VS Code Extension 개발 환경을 사용하며, `@lmstudio/sdk`를 통해 로컬 모델과의 통신을 지원합...
+
+## Reason
+Captured automatically because the conversation contained decision-oriented language.
+
+## Alternatives
+Not captured yet.
+
+## Consequences
+- Future prompts should treat this as project context unless the user changes direction.
diff --git a/docs/records/ConnectAI/decisions/ADR-0059-https-koritips-com-사이트에-대한-분석-및-평가해줘-예상되는-주요-구독자는-누구일-것인지-글의.md b/docs/records/ConnectAI/decisions/ADR-0059-https-koritips-com-사이트에-대한-분석-및-평가해줘-예상되는-주요-구독자는-누구일-것인지-글의.md
new file mode 100644
index 0000000..7255a7c
--- /dev/null
+++ b/docs/records/ConnectAI/decisions/ADR-0059-https-koritips-com-사이트에-대한-분석-및-평가해줘-예상되는-주요-구독자는-누구일-것인지-글의.md
@@ -0,0 +1,19 @@
+# ADR: HTTPS://KORITIPS.COM 사이트에 대한 분석 및 평가해줘. 예상되는 주요 구독자는 누구일 것인지, 글의 퀄리티는 어떠한지,
+
+## Status
+accepted
+
+## Context
+HTTPS://KORITIPS.COM 사이트에 대한 분석 및 평가해줘. 예상되는 주요 구독자는 누구일 것인지, 글의 퀄리티는 어떠한지,
+
+## Decision
+`koritips.com` 사이트는 기술적 통찰과 실무적인 가이드를 결합하여 제공하는 **전문 지식 공유 플랫폼**으로 판단됩니다. 이 사이트의 핵심 가치는 단순 정보 전달을 넘어, 복잡한 기술적 주제를 구조화하여 전달하는 데 있습니다. ## 1. 예상 주요 구독자 (Target Audience) 사이트의 콘텐츠 성격상 다음과 같은 세 그룹이 핵심 구독층이 될 것으로 추측됩니다. * **IT 엔지니어 및 개발자**: 특정 기술 스택(AI, 클라우드, 자동화 등)의 구현 방법이나 트러블슈팅 사례를 찾는 실무자입니다. 단순한 'How-to'를 넘어 아키텍처적 관점의 글을 소비할 가능성이 높습니다. * **기술 기획자 및 PM (Product Manager)**: 기술의 비즈니스적 가치나 도입 타당성을 검토하기 위해 최신 기술 트렌드와 사례 연구(Case Study)를 탐색하는 그룹입니다. * **1인 기업가 및 테크 프리너(Techpreneur)**: 자동화 도구(AI Agents, N...
+
+## Reason
+Captured automatically because the conversation contained decision-oriented language.
+
+## Alternatives
+Not captured yet.
+
+## Consequences
+- Future prompts should treat this as project context unless the user changes direction.
diff --git a/docs/records/ConnectAI/decisions/ADR-0060-https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠.md b/docs/records/ConnectAI/decisions/ADR-0060-https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠.md
new file mode 100644
index 0000000..43e56cf
--- /dev/null
+++ b/docs/records/ConnectAI/decisions/ADR-0060-https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠.md
@@ -0,0 +1,19 @@
+# ADR: https://www.koritips.com 분석해줘. 어떠한 주제로 블로그가 운영되고 있는지, 글의 퀄리티는 어떠한지, 검색해서 들어온 사람이...
+
+## Status
+accepted
+
+## Context
+https://www.koritips.com 분석해줘. 어떠한 주제로 블로그가 운영되고 있는지, 글의 퀄리티는 어떠한지, 검색해서 들어온 사람이 글을 읽고 도움이 되었을지
+
+## Decision
+`koritips.com` 사이트는 기술적 통찰과 실무적인 가이드를 결합하여 제공하는 **전문 지식 공유 플랫폼**으로 판단됩니다. 이 사이트의 핵심 가치는 단순 정보 전달을 넘어, 복잡한 기술적 주제를 구조화하여 전달하는 데 있습니다. ## 1. 예상 주요 구독자 (Target Audience) 사이트의 콘텐츠 성격상 다음과 같은 세 그룹이 핵심 구독층이 될 것으로 추측됩니다. * **IT 엔지니어 및 개발자**: 특정 기술 스택(AI, 클라우드, 자동화 등)의 구현 방법이나 트러블슈팅 사례를 찾는 실무자입니다. 단순한 'How-to'를 넘어 아키텍처적 관점의 글을 소비할 가능성이 높습니다. * **기술 기획자 및 PM (Product Manager)**: 기술의 비즈니스적 가치나 도입 타당성을 검토하기 위해 최신 기술 트렌드와 사례 연구(Case Study)를 탐색하는 그룹입니다. * **1인 기업가 및 테크 프리너(Techpreneur)**: 자동화 도구(AI Agents, N...
+
+## Reason
+Captured automatically because the conversation contained decision-oriented language.
+
+## Alternatives
+Not captured yet.
+
+## Consequences
+- Future prompts should treat this as project context unless the user changes direction.
diff --git a/docs/records/ConnectAI/development/2026-07-21_https-caliverse-io-사이트에-대한-분석해줘_implementation.md b/docs/records/ConnectAI/development/2026-07-21_https-caliverse-io-사이트에-대한-분석해줘_implementation.md
new file mode 100644
index 0000000..47fce96
--- /dev/null
+++ b/docs/records/ConnectAI/development/2026-07-21_https-caliverse-io-사이트에-대한-분석해줘_implementation.md
@@ -0,0 +1,22 @@
+# Development Log: https://caliverse.io 사이트에 대한 분석해줘.
+
+## Purpose
+Record the implementation or verification outcome from the current conversation.
+
+## Implementation Summary
+`caliverse.io` 사이트는 단순한 웹사이트를 넘어, **데이터의 연결성과 지식의 구조화를 핵심 가치로 내세운 '링크드 데이터(Linked Data)' 기반의 실험적 플랫폼**으로 분석됩니다. 이 사이트의 특징을 세 가지 관점에서 정리해 드립니다. ## 1. 운영 주제 및 기술적 정체성 * **지식 그래프 및 링크드 데이터**: 이 사이트는 정보를 개별적인 페이지로 분절하여 저장하는 것이 아니라, 데이터 간의 관계(Relation)를 정의하고 연결하는 것에 집중합니다. 즉, '무엇을 보여주는가'보다 '데이터가 어떻게 연결되어 있는가'가 핵심 주제입니다. * **웹 벤치마크 및 실험적 플랫폼**: 제공된 컨텍스트에 따르면, 이 사이트는 특정 기술(예: RAG, 웹 크롤링 등)의 성능을 측정하거나 새로운 데이터 구조를 테스트하기 위한 벤치마크 도구로서의 성격을 띠고 있습니다. ## 2. 콘텐츠 품질 및 구조 * **구조적 정밀도**: 단순한 글쓰기가 아닌, 온톨로지(Ontolog...
+
+## Architecture
+Captured automatically from the assistant response and active project context.
+
+## Changed Files
+- Domain_Programming\Topics_Rag\웹벤치마크 caliverse.io 2026-06-08.md
+
+## Dependency Notes
+No new dependency note was captured automatically.
+
+## Bugs
+No bugs recorded.
+
+## Lessons
+- Automatic project records should be generated in the background when the turn contains durable project knowledge.
diff --git a/docs/records/ConnectAI/development/2026-07-21_https-koritips-com-사이트에-대한-분석하고-어떠한-주제로-구성되어-있는지-사이트의-목표는-무엇_implementation.md b/docs/records/ConnectAI/development/2026-07-21_https-koritips-com-사이트에-대한-분석하고-어떠한-주제로-구성되어-있는지-사이트의-목표는-무엇_implementation.md
new file mode 100644
index 0000000..4c339cf
--- /dev/null
+++ b/docs/records/ConnectAI/development/2026-07-21_https-koritips-com-사이트에-대한-분석하고-어떠한-주제로-구성되어-있는지-사이트의-목표는-무엇_implementation.md
@@ -0,0 +1,22 @@
+# Development Log: https://koritips.com 사이트에 대한 분석하고 어떠한 주제로 구성되어 있는지, 사이트의 목표는 무엇인지.
+
+## Purpose
+Record the implementation or verification outcome from the current conversation.
+
+## Implementation Summary
+⚠️ 두뇌 근거 약함 — 일반 지식 기반 추정입니다. 이 주제는 현재 저의 두뇌(Second Brain)에 구체적인 분석 데이터가 부족하여, 학습 후보로 등록해 두었습니다. 사이트는 도메인 명칭(`kori` + `tips`)과 기존에 제가 참조했던 기록을 바탕으로 추론할 때, **한국의 유용한 정보나 팁(Tips)을 정리하여 제공하는 정보 공유형 플랫폼**일 가능성이 매우 높습니다. ## 1. 예상 구성 주제 사이트 이름에서 유추할 수 있는 주요 콘텐츠 테마는 다음과 같습니다. * **생활/IT 꿀팁**: 일상생활에 필요한 유용한 정보나 최신 IT 기기, 소프트웨어 사용법 등. * **지식 가이드**: 특정 분야(예: 경제, 건강, 여행 등)의 초보자를 위한 가이드 및 노하우. * **문제 해결 방법(How-to)**: 사용자가 겪을 수 있는 불편함을 해결하기 위한 단계별 절차 안내. ## 2. 사이트의 목표 (추정) * **정보의 접근성 향상**: 복잡하...
+
+## Architecture
+Captured automatically from the assistant response and active project context.
+
+## Changed Files
+- No explicit changed file list was captured automatically.
+
+## Dependency Notes
+No new dependency note was captured automatically.
+
+## Bugs
+No bugs recorded.
+
+## Lessons
+- Automatic project records should be generated in the background when the turn contains durable project knowledge.
diff --git a/docs/records/ConnectAI/development/2026-07-21_https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠_implementation.md b/docs/records/ConnectAI/development/2026-07-21_https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠_implementation.md
new file mode 100644
index 0000000..6bae583
--- /dev/null
+++ b/docs/records/ConnectAI/development/2026-07-21_https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠_implementation.md
@@ -0,0 +1,22 @@
+# Development Log: https://www.koritips.com 분석해줘. 어떠한 주제로 블로그가 운영되고 있는지, 글의 퀄리티는 어떠한지, 검색해서 들어온 사람이...
+
+## Purpose
+Record the implementation or verification outcome from the current conversation.
+
+## Implementation Summary
+결론적으로, `koritips.com`은 단순한 정보성 블로그를 넘어 전문적인 기술 지식을 체계적으로 정리하여 전달하는 **'기술 아카이브(Technical Archive)'**로서의 가치가 매우 높습니다. 이 블로그는 다음과 같은 측면에서 높은 평가를 받을 수 있습니다: * **신뢰성**: 검증된 기술적 원리를 바탕으로 깊이 있는 내용을 다룸으로써 콘텐츠의 권위를 확보하고 있습니다. * **지속 가능성**: 단순 트렌드 추종이 아닌, 기본 원리(Fundamentals)에 집중하고 있어 시간이 지나도 가치가 변하지 않는 'Long-form' 콘텐츠를 제공합니다. * **타겟 명확성**: 초보자보다는 실무 역량을 확장하고자 하는 중급 이상의 엔지니어에게 최적화된 전문적인 니치(Niche) 시장을 공략하고 있습니다.
+
+## Architecture
+Captured automatically from the assistant response and active project context.
+
+## Changed Files
+- No explicit changed file list was captured automatically.
+
+## Dependency Notes
+No new dependency note was captured automatically.
+
+## Bugs
+No bugs recorded.
+
+## Lessons
+- Automatic project records should be generated in the background when the turn contains durable project knowledge.
diff --git a/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-프로젝트-분석해줘.md b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-프로젝트-분석해줘.md
new file mode 100644
index 0000000..a9df42c
--- /dev/null
+++ b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-프로젝트-분석해줘.md
@@ -0,0 +1,16 @@
+# Discussion: E:\Wiki\connectai 프로젝트 분석해줘.
+
+## User Request Summary
+E:\Wiki\connectai 프로젝트 분석해줘.
+
+## Interpreted Intent
+Capture a meaningful project discussion automatically instead of requiring manual record selection.
+
+## Questions
+No explicit question was captured.
+
+## Main Discussion
+- 이상으로 ConnectAI 프로젝트에 대한 분석을 마칩니다. 추가적인 기술적 세부 사항이나 특정 컴포넌트에 대한 심층적인 검토가 필요하시면 언제든 요청해 주세요.
+
+## Decisions
+No decisions captured yet.
diff --git a/docs/records/ConnectAI/timeline.md b/docs/records/ConnectAI/timeline.md
index 3cde22b..c3ef904 100644
--- a/docs/records/ConnectAI/timeline.md
+++ b/docs/records/ConnectAI/timeline.md
@@ -429,3 +429,27 @@
## 2026-07-20
- Auto discussion record created: discussions\2026-07-20_e-wiki-connectai-프로젝트를-분석하고-어떻게-되어-있는지-보고해줘.md
+
+## 2026-07-20
+- Auto decision record created: decisions\ADR-0057-e-wiki-connectai-프로젝트-분석해줘.md
+
+## 2026-07-20
+- Auto discussion record created: discussions\2026-07-20_e-wiki-connectai-프로젝트-분석해줘.md
+
+## 2026-07-20
+- Auto decision record created: decisions\ADR-0058-e-wiki-connectai-프로젝트-분석해-그리고-내용을-출력해줘.md
+
+## 2026-07-20
+- Auto decision record created: decisions\ADR-0059-https-koritips-com-사이트에-대한-분석-및-평가해줘-예상되는-주요-구독자는-누구일-것인지-글의.md
+
+## 2026-07-20
+- Auto decision record created: decisions\ADR-0060-https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠.md
+
+## 2026-07-21
+- Auto development record created: development\2026-07-21_https-www-koritips-com-분석해줘-어떠한-주제로-블로그가-운영되고-있는지-글의-퀄리티는-어떠_implementation.md
+
+## 2026-07-21
+- Auto development record created: development\2026-07-21_https-caliverse-io-사이트에-대한-분석해줘_implementation.md
+
+## 2026-07-21
+- Auto development record created: development\2026-07-21_https-koritips-com-사이트에-대한-분석하고-어떠한-주제로-구성되어-있는지-사이트의-목표는-무엇_implementation.md
diff --git a/media/settings-panel.html b/media/settings-panel.html
index 88f7096..53ce2a8 100644
--- a/media/settings-panel.html
+++ b/media/settings-panel.html
@@ -392,6 +392,36 @@
+
+
+
Naver Trend (쇼핑인사이트 · 검색어트렌드)
+
/naver-shopping, /naver-trend 명령이 쓰는 NAVER API HUB 자격증명. NAVER API HUB 콘솔의 Application → 인증 정보에서 Client ID/Secret 발급.