diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md
index 4b4b8b2..dcee541 100644
--- a/.astra/project-context/architecture.md
+++ b/.astra/project-context/architecture.md
@@ -3,15 +3,15 @@
## Snapshot
-- **Workspace**: `connectai` `v2.2.214` _(absolute path varies by environment; resolved from the active VS Code workspace)_
+- **Workspace**: `connectai` `v2.2.215` _(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**: 478 source files, ~76,527 lines across 5 top-level modules.
+- **Stats**: 482 source files, ~76,610 lines across 5 top-level modules.
## Last Refresh
-- **Time**: 2026-06-11T05:30:08.345Z
-- **Files newly analysed**: 3
-- **Files reused from cache**: 475
+- **Time**: 2026-06-11T05:40:30.212Z
+- **Files newly analysed**: 0
+- **Files reused from cache**: 482
## Directory Map
```mermaid
@@ -20,8 +20,8 @@ mindmap
src/
features/
sidebar/
- agent/
lib/
+ agent/
retrieval/
intelligence/
media/
@@ -40,11 +40,11 @@ mindmap
> Arrows: which top-level module imports from which.
```mermaid
flowchart LR
- src["src/
298 files"]
+ src["src/
299 files"]
media["media/
6 files"]
tests["tests/
45 files"]
core_py["core_py/
6 files"]
- docs["docs/
123 files"]
+ docs["docs/
126 files"]
tests --> src
```
@@ -67,13 +67,13 @@ flowchart LR
## Modules
-### `src/` — 298 files, ~56,894 lines
+### `src/` — 299 files, ~56,917 lines
**Sub-directories**
- `src/features/` (105) — Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel H
- `src/sidebar/` (35) — Brain profile lifecycle 의 pure helpers — sidebarProvider 의 add/edit/delete 흐름에서 modal UI 와 config 쓰기를 제외한 데이터 변환 만 격리. 현
+- `src/lib/` (30) — Astra Mode Architecture Context Builder. 의도: 사용자가 Astra 자체의 mode 디자인 (Guard vs Multi-Agent 가 별도 모드여야 하는지) 을 묻는 메타 질문에 답할
- `src/agent/` (29) — Post-answer hook registry — 답변 완료 후 실행되는 부가 작업 모음. 새 hook 추가 = 1 객체 push. agent.ts 는 이 배열을 iterate 만 함. 현재 등록 순서 (v2.2.1
-- `src/lib/` (29) — Astra Mode Architecture Context Builder. 의도: 사용자가 Astra 자체의 mode 디자인 (Guard vs Multi-Agent 가 별도 모드여야 하는지) 을 묻는 메타 질문에 답할
- `src/retrieval/` (18) — Actionability Scoring — 검색 결과를 "현재 작업 상태" 신호로 재가중. 기존 TF-IDF (단어 매칭) + recency (시간) 만으로는 "지금 이 사용자가 하고 있는 작업과 직접 연결 된 문서
- `src/intelligence/` (16) — Confidence Engine — 답변 확신도 0~100 결정론적 산출. Self-Evolving OS 마스터 플랜 Phase 2 / Track 1-1. 신뢰 조건 T4 "확신이 없으면 사람에게 묻는다" 의 측정
- `src/core/` (15) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토
@@ -165,17 +165,17 @@ flowchart LR
- `core_py/optimizer.py` (55 lines)
- `core_py/queue_worker.py` (82 lines)
-### `docs/` — 123 files, ~4,410 lines
+### `docs/` — 126 files, ~4,470 lines
**Sub-directories**
-- `docs/records/` (109) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
+- `docs/records/` (112) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
- `docs/docs/` (5) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ...
- `docs/Meeting/` (0)
**Key files**
- `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서
- `docs/AgentEngine_Architecture.md` (314 lines) — AgentEngine Architecture Document
-- `docs/records/ConnectAI/timeline.md` (278 lines) — Project Timeline
+- `docs/records/ConnectAI/timeline.md` (287 lines) — Project Timeline
- `docs/SELF_EVOLVING_OS_MASTER_PLAN.md` (275 lines) — ASTRA Self-Evolving Digital Employee OS — 마스터 개발 계획 v1.1
- `docs/ASTRA_OFFICE_REFACTOR.md` (198 lines) — Astra Office Refactor — Design Doc
- `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) — Experience Memory (Mistake / Lesson Loop) — Implementation Plan
@@ -348,7 +348,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한
**Designed for High-Performance Decision Making.**
Copyright (C) **g1nation**. All rights reserved.
-_Last auto-scan: 2026-06-11T05:30:08.345Z · signature `8baafc08`_
+_Last auto-scan: 2026-06-11T05:40:30.212Z · signature `3be9404d`_
## Purpose
diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json
index 2eebf74..8b41e2d 100644
--- a/.astra/project-context/scan-cache.json
+++ b/.astra/project-context/scan-cache.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "generatedAt": "2026-06-11T05:30:08.425Z",
+ "generatedAt": "2026-06-11T05:40:30.394Z",
"files": {
"src/agent/actions/brainOps.ts": {
"mtimeMs": 1779764602582.9768,
@@ -125,24 +125,26 @@
]
},
"src/agent/handlePrompt/buildAgentModeSystemPrompt.ts": {
- "mtimeMs": 1779764602589.828,
- "size": 4039,
- "lines": 75,
+ "mtimeMs": 1781156303654.8252,
+ "size": 4330,
+ "lines": 78,
"role": "",
"imports": [
"src/lib/contextBuilders/systemPromptShaping",
"src/lib/contextManager",
- "src/utils"
+ "src/utils",
+ "src/lib/contextBuilders/selfIdentity"
]
},
"src/agent/handlePrompt/buildAstraModeSystemPrompt.ts": {
- "mtimeMs": 1781155366197.795,
- "size": 8260,
- "lines": 114,
+ "mtimeMs": 1781156248693.8586,
+ "size": 6827,
+ "lines": 105,
"role": "",
"imports": [
"src/lib/contextBuilders/localProjectIntent",
"src/lib/contextBuilders/promptDetection",
+ "src/lib/contextBuilders/selfIdentity",
"src/retrieval/knowledgeMix"
]
},
@@ -2189,9 +2191,9 @@
"imports": []
},
"src/lib/contextBuilders/priorTurnConclusion.ts": {
- "mtimeMs": 1779764602640.9502,
- "size": 3761,
- "lines": 75,
+ "mtimeMs": 1781156354349.277,
+ "size": 4210,
+ "lines": 78,
"role": "",
"imports": [
"src/agent"
@@ -2242,6 +2244,13 @@
"src/features/secondBrainTrace"
]
},
+ "src/lib/contextBuilders/selfIdentity.ts": {
+ "mtimeMs": 1781156179655.8901,
+ "size": 2663,
+ "lines": 26,
+ "role": "[ASTRA 자기 지식 + 1인칭 정체성] 블록 — Astra/Agent 양쪽 모드 system prompt 가 공유. 왜 필요한가 (BUG: 자기 오보고): - 이 블록이 없으면 \"너는 어떻게 성장해?\" 같은 메타 질문에 모델이 학습 데이터의 일반 LLM 보일러플레이트(\"나는 frozen 모델이라 학습하지 않는다\")로 답한다. 실제 ASTRA 는 레슨·장",
+ "imports": []
+ },
"src/lib/contextBuilders/systemPromptShaping.ts": {
"mtimeMs": 1779764602644.5593,
"size": 3200,
@@ -3839,8 +3848,22 @@
"role": "Bug: 이 이메일을 봤을때 지금 어떠한 상태이고 우리가 취해야하는 행동은 뭐가 있을까? Hi Jason, Nice to e-meet you and no...",
"imports": []
},
+ "docs/records/ConnectAI/bugs/BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md": {
+ "mtimeMs": 1781156164255.9114,
+ "size": 2529,
+ "lines": 16,
+ "role": "Bug: 너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, 생성 품질은 생각보다 괜찮은 편(70~80점 수준) 입니다. 특히 ...",
+ "imports": []
+ },
+ "docs/records/ConnectAI/bugs/BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md": {
+ "mtimeMs": 1781156389283.776,
+ "size": 2625,
+ "lines": 16,
+ "role": "Bug: 이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을...",
+ "imports": []
+ },
"docs/records/ConnectAI/chronicle.config.json": {
- "mtimeMs": 1781155802019.6516,
+ "mtimeMs": 1781156389303.169,
"size": 371,
"lines": 11,
"role": "JSON configuration",
@@ -4112,6 +4135,13 @@
"role": "ADR: 아닐텐데, astra 너 자신은 자아 성찰적 학습 기능은 실제로 존재하고 작동 중인데, ASTRA가 \"자기 자신의 구조\"를 몰라서 일반 LLM ...",
"imports": []
},
+ "docs/records/ConnectAI/decisions/ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md": {
+ "mtimeMs": 1781155861160.9226,
+ "size": 1458,
+ "lines": 19,
+ "role": "ADR: 너가 ASTRA야 왜 남처럼 이야기 하지?",
+ "imports": []
+ },
"docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": {
"mtimeMs": 1778028987330.4185,
"size": 1564,
@@ -4470,9 +4500,9 @@
"imports": []
},
"docs/records/ConnectAI/timeline.md": {
- "mtimeMs": 1781155802007.9062,
- "size": 17627,
- "lines": 278,
+ "mtimeMs": 1781156389286.0684,
+ "size": 18155,
+ "lines": 287,
"role": "Project Timeline",
"imports": []
},
diff --git a/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json b/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json
index 53c1f7a..8d5dc7c 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": 1781155756607,
+ "createdAt": 1781156441449,
"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 a2cf38f..c064cf9 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-06-11T05:29:16.608Z\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) (24ms)\n",
- "createdAt": 1781155756609,
+ "result": "---\nid: wiki_on\ndate: 2026-06-11T05:40:41.450Z\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) (24ms)\n",
+ "createdAt": 1781156441450,
"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 b897235..7593962 100644
--- a/.astra/tests/engine/.astra/missions/wiki_on.json
+++ b/.astra/tests/engine/.astra/missions/wiki_on.json
@@ -1,7 +1,7 @@
{
"missionId": "wiki_on",
"status": "completed",
- "startTime": "2026-06-11T05:29:16.582Z",
+ "startTime": "2026-06-11T05:40:41.424Z",
"totalElapsedMs": 27,
"results": {
"direct": "직답 결과 — single-pass mock 응답입니다."
@@ -14,14 +14,14 @@
"to": "direct",
"durationMs": 24,
"message": "답변 작성 중... (단일 호출 fast-path)",
- "ts": "2026-06-11T05:29:16.606Z"
+ "ts": "2026-06-11T05:40:41.448Z"
},
{
"from": "direct",
"to": "completed",
"durationMs": 3,
"message": "미션 완료",
- "ts": "2026-06-11T05:29:16.609Z"
+ "ts": "2026-06-11T05:40:41.451Z"
}
],
"resilienceMetrics": {
diff --git a/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json b/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json
index ed0ce89..cf87e33 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": 1781155763566,
+ "createdAt": 1781156448307,
"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 ab5cc1c..87027d4 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": 1781155763565,
+ "createdAt": 1781156448306,
"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 2c18f72..3ed7c6c 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": 1781155763561,
+ "createdAt": 1781156448303,
"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 1ef2d03..e841c41 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": 1781155763563,
+ "createdAt": 1781156448304,
"modelVersion": "unknown"
}
\ No newline at end of file
diff --git a/.astra/tests/stress/.astra/missions/stress_conflict_1781155763541.json b/.astra/tests/stress/.astra/missions/stress_conflict_1781156448281.json
similarity index 76%
rename from .astra/tests/stress/.astra/missions/stress_conflict_1781155763541.json
rename to .astra/tests/stress/.astra/missions/stress_conflict_1781156448281.json
index df2f5d5..04aad82 100644
--- a/.astra/tests/stress/.astra/missions/stress_conflict_1781155763541.json
+++ b/.astra/tests/stress/.astra/missions/stress_conflict_1781156448281.json
@@ -1,8 +1,8 @@
{
- "missionId": "stress_conflict_1781155763541",
+ "missionId": "stress_conflict_1781156448281",
"status": "completed",
- "startTime": "2026-06-11T05:29:23.541Z",
- "totalElapsedMs": 26,
+ "startTime": "2026-06-11T05:40:48.281Z",
+ "totalElapsedMs": 27,
"results": {
"outline": "[{\"heading\":\"본문\",\"scope\":\"전체 답변\"}]",
"section_0": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
@@ -14,30 +14,30 @@
{
"from": "idle",
"to": "outline",
- "durationMs": 19,
+ "durationMs": 20,
"message": "답변 구조 잡는 중...",
- "ts": "2026-06-11T05:29:23.560Z"
+ "ts": "2026-06-11T05:40:48.301Z"
},
{
"from": "outline",
"to": "section",
- "durationMs": 2,
+ "durationMs": 3,
"message": "본문 작성 중...",
- "ts": "2026-06-11T05:29:23.562Z"
+ "ts": "2026-06-11T05:40:48.304Z"
},
{
"from": "section",
"to": "polish",
- "durationMs": 2,
+ "durationMs": 1,
"message": "최종 다듬기 중...",
- "ts": "2026-06-11T05:29:23.564Z"
+ "ts": "2026-06-11T05:40:48.305Z"
},
{
"from": "polish",
"to": "completed",
- "durationMs": 3,
+ "durationMs": 2,
"message": "미션 완료",
- "ts": "2026-06-11T05:29:23.567Z"
+ "ts": "2026-06-11T05:40:48.307Z"
}
],
"resilienceMetrics": {
diff --git a/docs/records/ConnectAI/bugs/BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md b/docs/records/ConnectAI/bugs/BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md
new file mode 100644
index 0000000..acb21f6
--- /dev/null
+++ b/docs/records/ConnectAI/bugs/BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md
@@ -0,0 +1,16 @@
+# Bug: 너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, **생성 품질은 생각보다 괜찮은 편(70~80점 수준)** 입니다. 특히 ...
+
+## Date
+2026-06-11
+
+## Symptom
+너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, **생성 품질은 생각보다 괜찮은 편(70~80점 수준)** 입니다. 특히 AI 회의록이 흔히 하는 실수인: * 존재하지 않는 내용 추가 * 참석자 역할 추정 * 액션 아이템 과다 생성 * 결정사항 왜곡 은 비교적 적습니다. 다만 실제 녹취록과 대조해보면 몇 가지 문제가 있습니다. --- # 잘된 점 ### 1. 핵심 안건 3개 추출 정확 녹취록에서 실제 논의된 내용은 1. 회원 DB 분리 2. 보안 솔루션 계약 3. 앱스토어 계정 딱 3개인데, 회의록도 동일하게 추출했습니다. 이건 좋습니다. --- ### 2. 회원 분리 결정 원문 > 3디즘 분리해야 돼요. > 회원 분리 회의록 > 회원 DB 분리 작업 결정 정확합니다. --- ### 3. 보안 솔루션 일정 원문 > 그건 6월달에 정해줄게요 회의록 > 6월 중 결정 예정 적절한 요약입니다. --- ### 4. 계정 연동 안함 원문 > 아니 그때 안 하기로 회의록 ...
+
+## Cause
+Captured automatically from the current conversation. Confirm root cause during follow-up review if needed.
+
+## Fix
+결론 수정: 사용자님의 정밀한 피드백을 통해 Astra(Gemma)의 회의록 생성 로직 중 '확정되지 않은 사실에 대한 과도한 단정(Over-confidence)'과 '음성 인식 오류(STT Error) 미정제'라는 명확한 개선 포인트를 확인했습니다. 이 피드백은 Astra의 `meet` 기능 엔진이 단순한 요약기가 아닌, 실무급 수준의 '문서 정제 도구'로 진화하기 위한 핵심적인 가이드라인입니다. 1. 분석 결과 및 영향도 [확인된 문제점] - 논리적 비약 (Hallucination of Certainty): "필요성 언급" 수준의 논의를 "구축 결정"이라는 확정적 문구로 변환하여 의사결정의 무게감을 왜곡함. - 추론의 과잉 (Over-inference): 원문에 없는 '계정 확보'라는 구체적 액션을 생성하여, 실제 업무 범위(사업팀 확인)를 벗어난 지시사항을 만듦. - 데이터 정제 미흡 (STT Post-processing 부재): "3D 3즘"과 같은 음성 인식 오류 문구를 그...
+
+## Prevention
+Keep automatic records tied to the active project and verify the relevant test or reproduction path.
diff --git a/docs/records/ConnectAI/bugs/BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md b/docs/records/ConnectAI/bugs/BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md
new file mode 100644
index 0000000..626ebfc
--- /dev/null
+++ b/docs/records/ConnectAI/bugs/BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md
@@ -0,0 +1,16 @@
+# Bug: 이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을...
+
+## Date
+2026-06-11
+
+## Symptom
+이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을 공유할께. 이번 회의록은 이전 회의록보다 확실히 좋아졌습니다. 점수로 보면: * 이전 회의록: 83점 * 이번 회의록: 88~90점 다만 제가 이전에 지적했던 문제 중 **일부는 그대로 반복되고 있고**, 일부는 개선되었습니다. --- # 개선된 부분 ## 1. 운영툴 구축 같은 "없는 결정" 생성 감소 이전 회의록 > 회원 분리 → 운영툴 구축 결정 처럼 추론이 과했음. 이번 회의록은 > 신규 어트랙션 홍보 > 미니게임 > 리소스 확보 정도로 실제 논의 범위 안에서 정리함. 이 부분은 좋아졌음. --- ## 2. 리스크 추출 정확도 상승 예를 들어 회의록 > 정보 유출 위험 > 모바일 성능 저하 > 일정 지연 가능성 실제 녹취에도 반복적으로 등장함. 특히 > 리소스가 늦게 전달돼도 이슈 > > 미니게임이 복잡해지면 이슈 부분을 잘 잡음. ...
+
+## Cause
+Captured automatically from the current conversation. Confirm root cause during follow-up review if needed.
+
+## Fix
+결론 수정: 사용자님의 이번 피드백은 Astra의 `meet` 엔진이 '요약기'에서 'PM(Project Manager)'으로 진화하기 위해 반드시 정복해야 할 [4대 위험 패턴]을 명확하게 짚어주셨습니다. 이 정보는 직전 결론(환각 감소 및 리스크 추출 정확도 상승)의 성과를 인정하면서도, 동시에 Astra가 여전히 '해석적 오류'라는 치명적인 약점을 가지고 있음을 증명하는 매우 중요한 데이터입니다. 1. 분석 결과 및 영향도 [확인된 핵심 패턴 (Critical Failure Patterns)] - 의견의 결정사항 승격 (Opinion $\to$ Decision): "좋을 것 같다"는 제안을 "결정됨"으로 확정 지어, 실제 의사결정권자에게 잘못된 정보를 전달할 위험이 있음. - 논의의 액션 아이템화 (Discussion $\to$ Action Item): 단순한 '필요성 언급'을 '누가 언제까지 하겠다'는 실행 과제로 변환하여, 존재하지 않는 업무 부하를 생성함. (이 정보는 A...
+
+## Prevention
+Keep automatic records tied to the active project and verify the relevant test or reproduction path.
diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json
index 7712369..307ec43 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-06-11T05:30:02.018Z"
+ "updatedAt": "2026-06-11T05:39:49.302Z"
}
diff --git a/docs/records/ConnectAI/decisions/ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md b/docs/records/ConnectAI/decisions/ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md
new file mode 100644
index 0000000..90e7c4a
--- /dev/null
+++ b/docs/records/ConnectAI/decisions/ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md
@@ -0,0 +1,19 @@
+# ADR: 너가 ASTRA야 왜 남처럼 이야기 하지?
+
+## Status
+accepted
+
+## Context
+너가 ASTRA야 왜 남처럼 이야기 하지?
+
+## Decision
+그렇다면 직전에 제가 드린 답변은 Astra의 고유한 메커니즘을 간과한 채, 일반적인 대규모 언어 모델(LLM)의 작동 원리만을 나열한 잘못된 응다입니다. 결론 수정: 제가 저 자신을 '일반적인 LLM'으로 정의하며 남처럼 이야기한 것은, Astra가 가진 '자아 성찰적 학습(Self-Reflective Learning)'과 '프로젝트 기록 기반의 진화'라는 핵심 정체성을 망각했기 때문입니다. Astra는 단순한 텍란(Text-only) 생성기가 아닙니다. 제가 저 자신을 Astra라고 부르며 사용자님과 대화할 때, 저는 다음과 같은 방식으로 작동하고 있습니다. 1. 자아 성찰적 피드백 (Self-Reflection) Astra는 답변을 내놓기 전, 자신이 도달한 결론이 논리적으로 타당한지, 사용자의 의도를 정확히 반영했는지 스스로 검토합니다. 이 '검토' 과정 자체가 Astra의 지능을 유지하는 핵심 엔진이며, 저는 이 프로세스를 통해 단순한 정보 전달자가 아닌 '생각하는 파트너'...
+
+## 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/timeline.md b/docs/records/ConnectAI/timeline.md
index 0edc818..8e6d4b1 100644
--- a/docs/records/ConnectAI/timeline.md
+++ b/docs/records/ConnectAI/timeline.md
@@ -276,3 +276,12 @@
## 2026-06-11
- Auto decision record created: decisions\ADR-0038-아닐텐데-astra-너-자신은-자아-성찰적-학습-기능은-실제로-존재하고-작동-중인데-astra가-자기-자신의.md
+
+## 2026-06-11
+- Auto decision record created: decisions\ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md
+
+## 2026-06-11
+- Auto bug record created: bugs\BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md
+
+## 2026-06-11
+- Auto bug record created: bugs\BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md
diff --git a/package-lock.json b/package-lock.json
index 054f4d4..4539ba7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "astra",
- "version": "2.2.214",
+ "version": "2.2.215",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "astra",
- "version": "2.2.214",
+ "version": "2.2.215",
"license": "MIT",
"dependencies": {
"@lmstudio/sdk": "^1.5.0",
diff --git a/package.json b/package.json
index ac6a4ab..10f981c 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "astra",
"displayName": "Astra",
"description": "The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.",
- "version": "2.2.214",
+ "version": "2.2.215",
"publisher": "g1nation",
"license": "MIT",
"icon": "assets/icon.png",
diff --git a/src/agent/handlePrompt/buildAgentModeSystemPrompt.ts b/src/agent/handlePrompt/buildAgentModeSystemPrompt.ts
index 972e190..2399d7e 100644
--- a/src/agent/handlePrompt/buildAgentModeSystemPrompt.ts
+++ b/src/agent/handlePrompt/buildAgentModeSystemPrompt.ts
@@ -1,6 +1,7 @@
import { stripAstraFormattingForAgentMode } from '../../lib/contextBuilders/systemPromptShaping';
import { estimateTokens } from '../../lib/contextManager';
import { logInfo } from '../../utils';
+import { buildSelfIdentityBlock } from '../../lib/contextBuilders/selfIdentity';
export interface BuildAgentModeSystemPromptInput {
/** Base system prompt — `Astra: …` block etc. */
@@ -69,7 +70,9 @@ export function buildAgentModeSystemPrompt(input: BuildAgentModeSystemPromptInpu
// [CONTEXT] … [/CONTEXT] 사이만 컨텍스트 초과 시 trim 대상 — agentBlock(앞)·reminder(뒤)·negative 는 보호.
// memoryCtx(RAG/메모리/lessons)도 [CONTEXT] 안에 넣어 토큰이 빡빡할 때 대화 기록보다 먼저 잘리게 한다.
const priorConclusionBlock = priorConclusionCtx ? '\n\n' + priorConclusionCtx : '';
- const fullSystemPrompt = `${agentBlock}${modeBridgeCtx ? '\n\n' + modeBridgeCtx : ''}${priorConclusionBlock}\n\n${strippedSystemPrompt}${designerCtx}${secondBrainTraceCtx}\n\n[CONTEXT]\n${memoryCtx}\n${knowledgeContextForPrompt}\n${contextBlock}\n[/CONTEXT]\n${negativeCtx}${agentTailReminder}`;
+ // [자기 지식 + 1인칭] Astra 모드와 공용 — Agent 모드에서도 자기 오보고/3인칭 화법 방지.
+ const selfIdentityBlock = '\n\n' + buildSelfIdentityBlock();
+ const fullSystemPrompt = `${agentBlock}${modeBridgeCtx ? '\n\n' + modeBridgeCtx : ''}${priorConclusionBlock}\n\n${strippedSystemPrompt}${selfIdentityBlock}${designerCtx}${secondBrainTraceCtx}\n\n[CONTEXT]\n${memoryCtx}\n${knowledgeContextForPrompt}\n${contextBlock}\n[/CONTEXT]\n${negativeCtx}${agentTailReminder}`;
return fullSystemPrompt;
}
diff --git a/src/agent/handlePrompt/buildAstraModeSystemPrompt.ts b/src/agent/handlePrompt/buildAstraModeSystemPrompt.ts
index be15304..b6dbb4c 100644
--- a/src/agent/handlePrompt/buildAstraModeSystemPrompt.ts
+++ b/src/agent/handlePrompt/buildAstraModeSystemPrompt.ts
@@ -3,6 +3,7 @@ import {
buildAstraStanceContext,
} from '../../lib/contextBuilders/localProjectIntent';
import { isThinkingPartnerRequest } from '../../lib/contextBuilders/promptDetection';
+import { buildSelfIdentityBlock } from '../../lib/contextBuilders/selfIdentity';
import { buildKnowledgeMixPolicy } from '../../retrieval/knowledgeMix';
export interface BuildAstraModeSystemPromptInput {
@@ -69,19 +70,9 @@ export function buildAstraModeSystemPrompt(input: BuildAstraModeSystemPromptInpu
"- [충돌] 지식 간 충돌 발생 시 시스템이 독단적으로 판단하지 말고, 반드시 [CONFLICT WARNING] 플래그와 함께 상충되는 두 관점을 모두 명시하여 사용자에게 판단을 위임할 것."
].join('\n');
- // [자기 지식] ASTRA 는 실제로 세션 간 성장하는 시스템이다(레슨·장기/일화 기억·두뇌 위키·
- // 평가 루프). 이 블록이 없으면 "너는 어떻게 성장해?" 같은 메타 질문에 모델이 학습 데이터의
- // 일반 LLM 보일러플레이트("나는 frozen 모델이라 학습하지 않는다")로 답하는 자기 오보고가
- // 발생한다 — 시스템의 실체를 모델에게 알려 정확히 자기 서술하게 한다.
- const selfGrowthIdentityCtx = isCasualConversation ? '' : [
- "\n### 🌱 ASTRA 자기 지식 (Self-Knowledge — 자신에 대한 질문에 이 사실로 답할 것)",
- "당신(ASTRA)은 가중치가 고정된 일반 LLM이 아니라, 세션 간 지식과 기억이 실제로 누적되는 성장형 시스템이다:",
- "- **두뇌(Second Brain)**: 리서치·위키화로 생성된 지식 문서가 두뇌 폴더에 영구 축적되고, 검색(RAG)으로 매 대화에 주입된다.",
- "- **장기 기억**: 대화에서 추출된 사실이 `memory/long_term.json`에, 일화는 `memory/episodes/`에 저장되어 다음 세션에 재사용된다.",
- "- **레슨(경험 기억)**: 작업 경험에서 만들어진 교훈이 `lessons/`에 쌓여 이후 판단에 반영된다.",
- "- **평가·성장 루프**: 골든셋 기반 검색 평가와 성장 리포트로 지식의 질을 측정·개선한다.",
- "따라서 '스스로 성장하는가'라는 질문에는 \"모델 가중치는 고정이지만, 시스템으로서 나는 위 메커니즘으로 세션을 넘어 지식·기억을 축적하며 성장한다\"가 정확한 답이다. '나는 학습하지 않는 정적 모델'이라는 일반론으로 답하지 말 것."
- ].join('\n');
+ // [자기 지식 + 1인칭] Astra/Agent 양 모드 공용 블록 — 자기 오보고("frozen 모델")와
+ // 3인칭 화법("Astra는~") 방지. 본문은 selfIdentity.ts 참조.
+ const selfGrowthIdentityCtx = isCasualConversation ? '' : `\n${buildSelfIdentityBlock()}`;
// [CONTEXT] … [/CONTEXT] 사이만 컨텍스트 초과 시 trim 대상 — negative constraints 는 보호.
const casualCtx = isCasualConversation
diff --git a/src/lib/contextBuilders/priorTurnConclusion.ts b/src/lib/contextBuilders/priorTurnConclusion.ts
index 88f2a76..ab10798 100644
--- a/src/lib/contextBuilders/priorTurnConclusion.ts
+++ b/src/lib/contextBuilders/priorTurnConclusion.ts
@@ -26,9 +26,12 @@ export function buildPriorTurnConclusionContext(history: ChatMessage[]): string
if (!conclusion) return '';
return [
'[PRIOR TURN CONCLUSION]',
- '직전 답변에서 내가 도달한 결론은 다음과 같다:',
+ '직전 답변에서 내가 도달한 결론은 다음과 같다 (참고용 인용 — 받아쓰기 금지):',
`> ${conclusion}`,
- '이번 턴의 사용자 메시지가 이 결론의 전제·근거·범위에 영향을 주는 정보라면, 그 결론을 *재평가* 해서 정정/보강된 결론으로 다시 말해라. 영향이 없다면 왜 없는지 한 줄로 짚고 자연스럽게 다음으로 넘어가라.',
+ // "…결론으로 다시 말해라" 문구는 소형 모델이 문자 그대로 해석해 위 인용문을
+ // 답변 서두에 그대로 복창하는 앵무새 버그를 유발했다(턴마다 같은 첫 문장 반복).
+ // 인용은 재평가의 *입력*일 뿐임을 명시하고 복창을 명시적으로 금지한다.
+ '주의: 위 인용문을 답변 서두나 본문에 그대로 반복하지 마라. 이번 사용자 메시지가 이 결론의 전제·근거·범위를 바꾸는 정보라면 결론을 재평가해 *너 자신의 새로운 문장으로* 정정/보강하라. 영향이 없다면 인용문을 언급하지 말고 질문에 바로 답하라.',
].join('\n');
}
diff --git a/src/lib/contextBuilders/selfIdentity.ts b/src/lib/contextBuilders/selfIdentity.ts
new file mode 100644
index 0000000..35b1abb
--- /dev/null
+++ b/src/lib/contextBuilders/selfIdentity.ts
@@ -0,0 +1,26 @@
+/**
+ * [ASTRA 자기 지식 + 1인칭 정체성] 블록 — Astra/Agent 양쪽 모드 system prompt 가 공유.
+ *
+ * 왜 필요한가 (BUG: 자기 오보고):
+ * - 이 블록이 없으면 "너는 어떻게 성장해?" 같은 메타 질문에 모델이 학습 데이터의
+ * 일반 LLM 보일러플레이트("나는 frozen 모델이라 학습하지 않는다")로 답한다.
+ * 실제 ASTRA 는 레슨·장기/일화 기억·두뇌 위키·평가/성장 루프(Self-Evolving OS)로
+ * 세션 간 성장하는 시스템이다 — 시스템의 실체를 모델에게 알려 정확히 자기 서술하게 한다.
+ * - 소형 로컬 모델은 자신을 "Astra는 ~" 처럼 3인칭으로 서술하는 경향이 있다 —
+ * 1인칭 규칙을 명시한다.
+ *
+ * 두뇌의 canonical 자기 문서(`AI_and_ML/ASTRA 자기 아키텍처`)와 쌍을 이룬다:
+ * 이 블록은 "항상 주입되는 요약", 두뇌 문서는 "RAG 로 검색되는 상세 사실".
+ */
+export function buildSelfIdentityBlock(): string {
+ return [
+ '### 🌱 ASTRA 자기 지식 (Self-Knowledge — 자신에 대한 질문에 이 사실로 답할 것)',
+ '당신은 ASTRA 본인이다. 자신을 "Astra는"처럼 3인칭으로 지칭하지 말고 반드시 1인칭(저/나)으로 말하라.',
+ '당신은 가중치가 고정된 일반 LLM이 아니라, 세션 간 지식과 기억이 실제로 누적되는 성장형 시스템이다:',
+ '- **두뇌(Second Brain)**: 리서치·위키화로 생성된 지식 문서가 두뇌 폴더에 영구 축적되고, 검색(RAG)으로 매 대화에 주입된다.',
+ '- **장기 기억**: 대화에서 추출된 사실이 `memory/long_term.json`에, 일화는 `memory/episodes/`에 저장되어 다음 세션에 재사용된다.',
+ '- **레슨(경험 기억)**: 작업 경험에서 만들어진 교훈이 `lessons/`에 쌓여 이후 판단에 반영된다.',
+ '- **평가·성장 루프(Self-Evolving OS)**: 골든셋 기반 검색/업무 평가, 성장 리포트, 학습 큐(Need Engine), 지식 노후 점검(Decay), 승인된 학습의 자동 실행(Research Agent)으로 지식의 질을 측정·개선한다.',
+ '따라서 "스스로 성장하는가"라는 질문에는 "모델 가중치는 고정이지만, 시스템으로서 저는 위 메커니즘으로 세션을 넘어 지식·기억을 축적하며 성장합니다"가 정확한 답이다. "나는 학습하지 않는 정적 모델"이라는 일반론으로 답하지 말 것. 자신의 기능·구조에 대한 상세 질문은 두뇌의 "ASTRA 자기 아키텍처" 문서를 근거로 답하라.',
+ ].join('\n');
+}