From 05d05a392cf439e496ba8c6c8765e1cb4e93348e Mon Sep 17 00:00:00 2001 From: g1nation Date: Thu, 14 May 2026 21:58:59 +0900 Subject: [PATCH] Resolve conflicts by preferring remote changes --- .astra/project-context/architecture.md | 64 +- .astra/project-context/scan-cache.json | 1532 ++++++++--------- docs/records/ConnectAI/chronicle.config.json | 10 +- ...connectai-architecture-문서-최신화-해줘.md | 40 + ...-중-업데이트가-필요한-부분이-있는지-확인해줘-.md | 40 + docs/records/ConnectAI/timeline.md | 23 +- media/sidebar.css | 12 + media/sidebar.js | 4 + package.json | 5 + src/agents/reflectionPersister.ts | 308 ++++ src/config.ts | 8 + src/lib/engine.ts | 28 +- 12 files changed, 1237 insertions(+), 837 deletions(-) create mode 100644 docs/records/ConnectAI/planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md create mode 100644 docs/records/ConnectAI/planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md create mode 100644 src/agents/reflectionPersister.ts diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md index 6bcdcd0..4c243ed 100644 --- a/.astra/project-context/architecture.md +++ b/.astra/project-context/architecture.md @@ -3,20 +3,20 @@ ## Snapshot -- **Workspace**: `connectai` `v2.1.2` _(absolute path varies by environment; resolved from the active VS Code workspace)_ +- **Workspace**: `ConnectAI` `v2.1.2` _(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**: 209 source files, ~36,083 lines across 5 top-level modules. +- **Stats**: 205 source files, ~36,036 lines across 5 top-level modules. ## Last Refresh -- **Time**: 2026-05-14T03:14:40.992Z -- **Files newly analysed**: 3 -- **Files reused from cache**: 206 +- **Time**: 2026-05-13T17:43:53.933Z +- **Files newly analysed**: 0 +- **Files reused from cache**: 205 ## Directory Map ```mermaid mindmap - root((connectai)) + root((ConnectAI)) src/ features/ core/ @@ -41,7 +41,7 @@ flowchart LR media["media/
6 files"] tests["tests/
27 files"] core_py["core_py/
6 files"] - docs["docs/
70 files"] + docs["docs/
66 files"] tests --> src ``` @@ -64,14 +64,14 @@ flowchart LR ## Modules -### `src/` — 100 files, ~23,880 lines +### `src/` — 100 files, ~23,874 lines **Sub-directories** - `src/features/` (28) — The 9-agent roster for 1인 기업 모드. Each entry is a static description — persona, role, specialty — used to build the speci - `src/core/` (15) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토 - `src/memory/` (8) — Episodic Memory (일화 기억) 과거 대화/회의/결정의 맥락 흐름을 저장합니다. 세션 종료 시 자동으로 에피소드를 요약하여 저장합니다. "왜 이렇게 결정했는지", "어떤 흐름으로 진행했는지" 기록. 저장 - `src/retrieval/` (8) — Brain Index — persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 매 질의마다 브레인의 모든 .md 파일을 읽고 토크나이즈해서 TF-I -- `src/docs/` (6) — Bug: Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts ... +- `src/docs/` (6) — src Chronicle Records - `src/lib/` (6) — Context Manager (컨텍스트 한계 관리) "context length = 132k" 는 "답변을 132k 토큰까지 생성해도 된다" 가 아닙니다. 시스템 프롬프트 + 대화 기록 + 입력 문서 + 생성될 답변 - `src/integrations/` (4) — Per-chat conversation history for the Telegram bot. Why this exists: the previous bot was stateless — every inbound mess - `src/lmstudio/` (4) — 4 files (.ts) @@ -85,13 +85,13 @@ flowchart LR - `src/config.ts` (216 lines) - `src/features/company/types.ts` (150 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/lib/paths.ts` (151 lines) -- `src/sidebarProvider.ts` (3023 lines) +- `src/sidebarProvider.ts` (3026 lines) - `src/features/company/agents.ts` (136 lines) — The 9-agent roster for 1인 기업 모드. Each entry is a static description — persona, role, specialty — used to build the specialist's system prompt at dispatch time. The set was adopted from Connectorigin's - `src/memory/types.ts` (126 lines) — Memory Type Definitions (메모리 타입 정의) Astra의 5-Layer Cognitive Memory System의 모든 타입을 정의합니다. ① Short-Term ② Long-Term ③ Project ④ Procedural ⑤ Episodic - `src/retrieval/scoring.ts` (518 lines) — Scoring Engine — TF-IDF + Bilingual Tokenizer 단순 includes() 키워드 매칭을 넘어서, TF-IDF 가중치 기반의 문서 스코어링을 제공합니다. 한국어/영어 양국어 토크나이저를 포함합니다. - `src/skills/agentKnowledgeMap.ts` (374 lines) - `src/core/services.ts` (164 lines) -- `src/agent.ts` (3241 lines) +- `src/agent.ts` (3232 lines) - `src/features/company/companyConfig.ts` (330 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/retrieval/lessonHelpers.ts` (325 lines) — Lesson / Experience Memory — pure helpers (no vscode dependency) "Lesson" = a markdown file in the active brain that captures a past mistake/risk and how to avoid repeating it. Identified by a lessons - `src/lib/engine.ts` (880 lines) @@ -107,11 +107,11 @@ flowchart LR - `src/features/company/promptBuilder.ts` (202 lines) — System-prompt construction for company-mode agents. Each specialist needs a prompt that includes: - Their identity (name, role, specialty) + optional persona. - The action-tag contract (, - `src/features/company/sessionStore.ts` (231 lines) — Disk persistence for company-mode session artefacts. Each company turn produces a timestamped directory: /.astra/company/sessions/2026-05-13T21-29/ ├─ brief.md ← CEO's task decompositio -### `media/` — 6 files, ~4,098 lines +### `media/` — 6 files, ~4,099 lines **Key files** - `media/sidebar.css` (1225 lines) — Stylesheet -- `media/sidebar.js` (1873 lines) +- `media/sidebar.js` (1874 lines) - `media/sidebar.html` (356 lines) — Astra - `media/settings-panel.css` (210 lines) — Stylesheet - `media/settings-panel.html` (164 lines) — Astra Settings @@ -160,11 +160,11 @@ flowchart LR - `core_py/optimizer.py` (55 lines) - `core_py/queue_worker.py` (82 lines) -### `docs/` — 70 files, ~2,758 lines +### `docs/` — 66 files, ~2,716 lines **Sub-directories** -- `docs/records/` (58) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고... -- `docs/docs/` (5) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ... +- `docs/records/` (54) — Astra Project Chronicle Records +- `docs/docs/` (5) — docs Chronicle Records **Key files** - `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서 @@ -172,26 +172,26 @@ flowchart LR - `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) — Experience Memory (Mistake / Lesson Loop) — Implementation Plan - `docs/records/ConnectAI/development/2026-05-02_connectai_project_knowledge_overview.md` (121 lines) — Astra Project Knowledge Overview - `docs/records/ConnectAI/development/2026-05-03_connectai_project_knowledge_overview.md` (121 lines) — Astra Project Knowledge Overview -- `docs/records/ConnectAI/timeline.md` (146 lines) — Project Timeline +- `docs/records/ConnectAI/timeline.md` (134 lines) — Project Timeline - `docs/Advanced_Features_Implementation_Guide.md` (40 lines) — Advanced Features Implementation Guide +- `docs/PROJECT_CHRONICLE_GUARD_ROADMAP.md` (43 lines) — Project Chronicle Guard: Search Engine Roadmap +- `docs/UX_UI_Consistency_Guidelines.md` (44 lines) — UX/UI Consistency Guidelines +- `docs/docs/records/docs/README.md` (18 lines) — docs Chronicle Records - `docs/docs/records/docs/bugs/BUG-0001-viewed-integration-retrieval-test-ts-1-59-integration-retrie.md` (16 lines) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ... - `docs/docs/records/docs/chronicle.config.json` (11 lines) — JSON configuration - `docs/docs/records/docs/project-profile.md` (31 lines) — Project Profile -- `docs/docs/records/docs/README.md` (18 lines) — docs Chronicle Records - `docs/docs/records/docs/timeline.md` (7 lines) — Project Timeline -- `docs/PROJECT_CHRONICLE_GUARD_ROADMAP.md` (43 lines) — Project Chronicle Guard: Search Engine Roadmap -- `docs/records/ConnectAI/bugs/BUG-0001-volumes-data-project-antigravity-connectai-프로젝트-코드-리뷰-해줄-수-있.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고... -- `docs/records/ConnectAI/bugs/BUG-0002-지금-내가-분석-요청하고-너가-답을-줄때-아래-템플릿에-맞춰-답을-써주고-있는데-개선-포인트가-있는지-확인해.md` (16 lines) — Bug: 지금 내가 분석 요청하고 너가 답을 줄때 아래 템플릿에 맞춰 답을 써주고 있는데, 개선 포인트가 있는지 확인해줘. ## 내가 보는 위험 가장 큰... -- `docs/records/ConnectAI/bugs/BUG-0003-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... -- `docs/records/ConnectAI/bugs/BUG-0004-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... -- `docs/records/ConnectAI/bugs/BUG-0005-다시한번-답줘-volumes-data-project-antigravity-connectai-내-질문에-대한-.md` (16 lines) — Bug: 다시한번 답줘. /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는... -- `docs/records/ConnectAI/bugs/BUG-0006-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... -- `docs/records/ConnectAI/bugs/BUG-0007-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... -- `docs/records/ConnectAI/bugs/BUG-0008-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... -- `docs/records/ConnectAI/bugs/BUG-0009-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ... -- `docs/records/ConnectAI/bugs/BUG-0010-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ... -- `docs/records/ConnectAI/bugs/BUG-0011-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ... -- `docs/records/ConnectAI/bugs/BUG-0012-질문이-있어-논문을-쓰려고해-논문-주제는-서비스적이-아닌-사용자가-ai에게-구조로-질문을-해야-사용자의-의도.md` (16 lines) — Bug: 질문이 있어. 논문을 쓰려고해. 논문 주제는 서비스적이 아닌 사용자가 ai에게 구조로 질문을 해야 사용자의 의도에 맞는 답변을 받을 수 있을까야... +- `docs/records/ConnectAI/README.md` (18 lines) — Astra Project Chronicle Records +- `docs/records/ConnectAI/bugs/BUG-0001-volumes-data-project-antigravity-connectai-프로젝트-코드-리뷰-해줄-수-있.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고... +- `docs/records/ConnectAI/bugs/BUG-0002-지금-내가-분석-요청하고-너가-답을-줄때-아래-템플릿에-맞춰-답을-써주고-있는데-개선-포인트가-있는지-확인해.md` (16 lines) — Bug: 지금 내가 분석 요청하고 너가 답을 줄때 아래 템플릿에 맞춰 답을 써주고 있는데, 개선 포인트가 있는지 확인해줘. ## 내가 보는 위험 가장 큰... +- `docs/records/ConnectAI/bugs/BUG-0003-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... +- `docs/records/ConnectAI/bugs/BUG-0004-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... +- `docs/records/ConnectAI/bugs/BUG-0005-다시한번-답줘-volumes-data-project-antigravity-connectai-내-질문에-대한-.md` (16 lines) — Bug: 다시한번 답줘. /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는... +- `docs/records/ConnectAI/bugs/BUG-0006-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... +- `docs/records/ConnectAI/bugs/BUG-0007-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... +- `docs/records/ConnectAI/bugs/BUG-0008-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused... +- `docs/records/ConnectAI/bugs/BUG-0009-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ... +- `docs/records/ConnectAI/bugs/BUG-0010-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ... ## VS Code Extension Surface - **Extension ID**: `g1nation.astra` @@ -307,7 +307,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한 **Designed for High-Performance Decision Making.** Copyright (C) **g1nation**. All rights reserved. -_Last auto-scan: 2026-05-14T03:14:40.992Z · signature `1f7ace87`_ +_Last auto-scan: 2026-05-13T17:43:53.933Z · signature `5020e02c`_ ## Purpose diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json index d060443..7560c6b 100644 --- a/.astra/project-context/scan-cache.json +++ b/.astra/project-context/scan-cache.json @@ -1,11 +1,11 @@ { "version": 1, - "generatedAt": "2026-05-14T03:14:41.017Z", + "generatedAt": "2026-05-13T17:43:53.948Z", "files": { "src/agent.ts": { - "mtimeMs": 1778720117489.3945, - "size": 189153, - "lines": 3241, + "mtimeMs": 1778683690000, + "size": 185807, + "lines": 3232, "role": "", "imports": [ "src/utils", @@ -38,8 +38,8 @@ ] }, "src/agents/AgentWorkflowManager.ts": { - "mtimeMs": 1778720117490.4294, - "size": 2322, + "mtimeMs": 1778690404000, + "size": 2262, "lines": 60, "role": "", "imports": [ @@ -49,8 +49,8 @@ ] }, "src/agents/factory.ts": { - "mtimeMs": 1778720117507.1616, - "size": 11242, + "mtimeMs": 1778690336000, + "size": 11023, "lines": 219, "role": "", "imports": [ @@ -59,8 +59,8 @@ ] }, "src/bridge.ts": { - "mtimeMs": 1778549008895.9155, - "size": 9932, + "mtimeMs": 1778681774000, + "size": 9705, "lines": 227, "role": "", "imports": [ @@ -72,21 +72,21 @@ ] }, "src/config.ts": { - "mtimeMs": 1778720117515.6978, - "size": 9835, + "mtimeMs": 1778690442000, + "size": 9619, "lines": 216, "role": "", "imports": [] }, "src/core/astraPath.ts": { - "mtimeMs": 1778037123135.2776, - "size": 1832, + "mtimeMs": 1778169995000, + "size": 1782, "lines": 50, "role": "Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토리를 해결하여, 사용자 프로젝트 루트가 아닌 ConnectAI 패키지 내부에 데이터를 저장합니다. 이 모듈은 AAL(Astra Autonomou", "imports": [] }, "src/core/conflict.ts": { - "mtimeMs": 1778038174478.8147, + "mtimeMs": 1778169995000, "size": 1726, "lines": 30, "role": "", @@ -95,35 +95,35 @@ ] }, "src/core/dataProcessor.ts": { - "mtimeMs": 1778038193232.0127, + "mtimeMs": 1778169995000, "size": 3235, "lines": 96, "role": "Aggregate result type definition", "imports": [] }, "src/core/errorHandler.ts": { - "mtimeMs": 1777511752606.2458, - "size": 2354, + "mtimeMs": 1777808065000, + "size": 2305, "lines": 49, "role": "", "imports": [] }, "src/core/errors.ts": { - "mtimeMs": 1778037081022.028, - "size": 958, + "mtimeMs": 1778169995000, + "size": 924, "lines": 34, "role": "g1nation Custom Error Classes", "imports": [] }, "src/core/events.ts": { - "mtimeMs": 1778028987396.9893, - "size": 1028, + "mtimeMs": 1777808065000, + "size": 993, "lines": 35, "role": "", "imports": [] }, "src/core/health.ts": { - "mtimeMs": 1778038139567.3984, + "mtimeMs": 1778169995000, "size": 2873, "lines": 79, "role": "", @@ -133,7 +133,7 @@ ] }, "src/core/lock.ts": { - "mtimeMs": 1778038157826.973, + "mtimeMs": 1778169995000, "size": 2358, "lines": 66, "role": "", @@ -142,8 +142,8 @@ ] }, "src/core/queue.ts": { - "mtimeMs": 1778666871393.5244, - "size": 2509, + "mtimeMs": 1778674336000, + "size": 2428, "lines": 81, "role": "", "imports": [ @@ -151,8 +151,8 @@ ] }, "src/core/responseRecovery.ts": { - "mtimeMs": 1778664139958.9634, - "size": 12529, + "mtimeMs": 1778598587000, + "size": 12304, "lines": 225, "role": "Response Recovery — Thought Quarantine + Final-only Retry + Auto-Continuation The user already asked their question; they're waiting for an answer, not for a chance to babysit the generation engine. S", "imports": [ @@ -160,8 +160,8 @@ ] }, "src/core/services.ts": { - "mtimeMs": 1778549008895.9155, - "size": 6856, + "mtimeMs": 1778421200000, + "size": 6692, "lines": 164, "role": "", "imports": [ @@ -170,8 +170,8 @@ ] }, "src/core/session.ts": { - "mtimeMs": 1777511752609.8882, - "size": 2873, + "mtimeMs": 1777808065000, + "size": 2785, "lines": 88, "role": "", "imports": [ @@ -180,14 +180,14 @@ ] }, "src/core/statusBar.ts": { - "mtimeMs": 1778028987401.3042, - "size": 2057, + "mtimeMs": 1777808065000, + "size": 2000, "lines": 57, "role": "", "imports": [] }, "src/core/telemetry.ts": { - "mtimeMs": 1778666901466.1726, + "mtimeMs": 1778674336000, "size": 5442, "lines": 129, "role": "Telemetry — append-only usage events to .astra/usage.jsonl Why local-file telemetry instead of a webview dashboard or remote endpoint: - Astra is local-first. No data leaves the machine. - JSONL is tr", @@ -197,8 +197,8 @@ ] }, "src/core/transaction.ts": { - "mtimeMs": 1778549008897.4194, - "size": 4590, + "mtimeMs": 1778251556000, + "size": 4458, "lines": 132, "role": "", "imports": [ @@ -206,51 +206,51 @@ "src/utils" ] }, + "src/docs/records/src/README.md": { + "mtimeMs": 1777949473000, + "size": 422, + "lines": 18, + "role": "src Chronicle Records", + "imports": [] + }, "src/docs/records/src/bugs/BUG-0001-edited-agent-ts-edited-agent-ts-edited-agent-ts-edited-agent.md": { - "mtimeMs": 1778028987403.465, - "size": 1813, + "mtimeMs": 1777949473000, + "size": 1797, "lines": 16, "role": "Bug: Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts ...", "imports": [] }, - "src/docs/records/src/bugs/BUG-0002-viewed-agent-ts-2159-2206-제공해주신-세부-파일-구조와-지식-수집-워크플로우-관점의-코드.md": { - "mtimeMs": 1778028987403.9697, - "size": 2217, + "src/docs/records/src/bugs/BUG-0002-viewed-agent-ts-2159-2206-제공해주신-세부-파일-구조와-지식-수집-워크플로우-관점의-코드.md": { + "mtimeMs": 1777949638000, + "size": 2201, "lines": 16, "role": "Bug: Viewed agent.ts:2159-2206 제공해주신 세부 파일 구조와 지식 수집 워크플로우 관점의 코드리뷰 요청을 정독했습니다. 이...", "imports": [] }, "src/docs/records/src/chronicle.config.json": { - "mtimeMs": 1778028987403.9697, - "size": 528, + "mtimeMs": 1777949638000, + "size": 517, "lines": 11, "role": "JSON configuration", "imports": [] }, "src/docs/records/src/project-profile.md": { - "mtimeMs": 1778028987404.973, - "size": 613, + "mtimeMs": 1777949473000, + "size": 582, "lines": 31, "role": "Project Profile", "imports": [] }, - "src/docs/records/src/README.md": { - "mtimeMs": 1778028987402.338, - "size": 440, - "lines": 18, - "role": "src Chronicle Records", - "imports": [] - }, "src/docs/records/src/timeline.md": { - "mtimeMs": 1778028987405.4775, - "size": 391, + "mtimeMs": 1777949638000, + "size": 381, "lines": 10, "role": "Project Timeline", "imports": [] }, "src/extension.ts": { - "mtimeMs": 1778720117520.6597, - "size": 51505, + "mtimeMs": 1778693606000, + "size": 50539, "lines": 966, "role": "", "imports": [ @@ -284,8 +284,8 @@ ] }, "src/features/approval/approvalPanelProvider.ts": { - "mtimeMs": 1778664480470.9922, - "size": 7285, + "mtimeMs": 1778674336000, + "size": 7132, "lines": 153, "role": "", "imports": [ @@ -294,8 +294,8 @@ ] }, "src/features/approval/approvalQueue.ts": { - "mtimeMs": 1778549008899.4456, - "size": 4851, + "mtimeMs": 1778251548000, + "size": 4722, "lines": 129, "role": "", "imports": [ @@ -303,8 +303,8 @@ ] }, "src/features/approval/approvalStatusBar.ts": { - "mtimeMs": 1778549008899.4456, - "size": 1642, + "mtimeMs": 1778251623000, + "size": 1601, "lines": 41, "role": "", "imports": [ @@ -312,8 +312,8 @@ ] }, "src/features/company/agents.ts": { - "mtimeMs": 1778720117521.671, - "size": 6820, + "mtimeMs": 1778680824000, + "size": 6684, "lines": 136, "role": "The 9-agent roster for 1인 기업 모드. Each entry is a static description — persona, role, specialty — used to build the specialist's system prompt at dispatch time. The set was adopted from Connectorigin's", "imports": [ @@ -321,8 +321,8 @@ ] }, "src/features/company/ceoPlanner.ts": { - "mtimeMs": 1778720117522.671, - "size": 8625, + "mtimeMs": 1778681095000, + "size": 8406, "lines": 219, "role": "CEO planner — turns a user prompt into a CompanyTaskPlan. Lifecycle of one planner call: 1. Build the planner system prompt (template + active-agent list). 2. Hit the AI service with the user prompt a", "imports": [ @@ -336,8 +336,8 @@ ] }, "src/features/company/ceoReporter.ts": { - "mtimeMs": 1778720117523.1748, - "size": 4932, + "mtimeMs": 1778681122000, + "size": 4812, "lines": 120, "role": "CEO synthesis pass — runs after all specialists have finished. Given the per-agent outputs, this asks the CEO model to produce the final markdown report (✅ 완료 / 🚀 다음 / 💡 인사이트) that the user actually", "imports": [ @@ -349,8 +349,8 @@ ] }, "src/features/company/companyConfig.ts": { - "mtimeMs": 1778720117524.177, - "size": 13803, + "mtimeMs": 1778686762000, + "size": 13473, "lines": 330, "role": "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", "imports": [ @@ -359,8 +359,8 @@ ] }, "src/features/company/dispatcher.ts": { - "mtimeMs": 1778720117524.6816, - "size": 20463, + "mtimeMs": 1778686839000, + "size": 20029, "lines": 434, "role": "Sequential dispatcher for 1인 기업 모드. Drives one company \"turn\": user prompt → CEO planner (JSON {brief, tasks}) → for each task in plan: dispatch one specialist (sequentially) - build specialist prompt", "imports": [ @@ -380,8 +380,8 @@ ] }, "src/features/company/index.ts": { - "mtimeMs": 1778720117525.2087, - "size": 1169, + "mtimeMs": 1778686769000, + "size": 1114, "lines": 55, "role": "Public API for 1인 기업 모드. Consumers (sidebarProvider, chatHandlers, command handlers) import from this barrel so internal layout can move around without touching every call site.", "imports": [ @@ -393,15 +393,15 @@ ] }, "src/features/company/promptAssets.ts": { - "mtimeMs": 1778720117525.2087, - "size": 6896, + "mtimeMs": 1778680887000, + "size": 6782, "lines": 114, "role": "Inlined prompt assets for the 1인 기업 mode. The CEO planner / reporter / casual-chat prompts are kept as TS string constants rather than loaded from prompts/.md at runtime, for two reasons: 1. Bundling.", "imports": [] }, "src/features/company/promptBuilder.ts": { - "mtimeMs": 1778720117527.2378, - "size": 10519, + "mtimeMs": 1778686868000, + "size": 10317, "lines": 202, "role": "System-prompt construction for company-mode agents. Each specialist needs a prompt that includes: - Their identity (name, role, specialty) + optional persona. - The action-tag contract (, ", "imports": [ @@ -411,29 +411,29 @@ ] }, "src/features/company/prompts/ceo-chat.md": { - "mtimeMs": 1778720117527.2378, - "size": 466, + "mtimeMs": 1778680831000, + "size": 462, "lines": 4, "role": "당신은 {{COMPANY}}의 CEO입니다. 사용자(사장님)와 짧게 인사·안부·잡담을 주고받습니다. - 한국어로 1~3문장. 친근하지만 사장-CEO 관계는 유지. - 인사·안부 질문이면 자연스럽게 응답하세요. 작업 지시가 아니면 굳이 작업 분배 제안 X. - 회사 정체성·최근 결정·추적기 상태가 컨텍스트에 있으면 자연스럽게 활용. - JSON 출력 금지. ", "imports": [] }, "src/features/company/prompts/ceo-planner.md": { - "mtimeMs": 1778720117527.2378, - "size": 3237, + "mtimeMs": 1778680831000, + "size": 3199, "lines": 38, "role": "당신은 \"{{COMPANY}}\"의 CEO입니다. 1인 AI 기업의 사령관이자 오케스트레이터입니다.", "imports": [] }, "src/features/company/prompts/ceo-report.md": { - "mtimeMs": 1778720117528.7502, - "size": 1394, + "mtimeMs": 1778680831000, + "size": 1373, "lines": 21, "role": "당신은 {{COMPANY}}의 CEO입니다. 방금 팀이 작업을 끝냈습니다. 각 에이전트의 산출물을 읽고 사장님께 올릴 종합 보고서를 작성하세요.", "imports": [] }, "src/features/company/sessionStore.ts": { - "mtimeMs": 1778720117528.7502, - "size": 8958, + "mtimeMs": 1778680971000, + "size": 8727, "lines": 231, "role": "Disk persistence for company-mode session artefacts. Each company turn produces a timestamped directory: /.astra/company/sessions/2026-05-13T21-29/ ├─ brief.md ← CEO's task decompositio", "imports": [ @@ -442,8 +442,8 @@ ] }, "src/features/company/telegramReport.ts": { - "mtimeMs": 1778720117530.263, - "size": 8279, + "mtimeMs": 1778686162000, + "size": 8111, "lines": 168, "role": "Telegram mirror for the secretary agent (영숙). After every company turn finishes, this helper takes the CEO synthesis + task list and pushes it to the user's Telegram chat — same behaviour as Connector", "imports": [ @@ -455,15 +455,15 @@ ] }, "src/features/company/types.ts": { - "mtimeMs": 1778720117530.263, - "size": 6604, + "mtimeMs": 1778686714000, + "size": 6454, "lines": 150, "role": "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", "imports": [] }, "src/features/projectArchitecture/index.ts": { - "mtimeMs": 1778720117531.2734, - "size": 25946, + "mtimeMs": 1778691699000, + "size": 25373, "lines": 573, "role": "Project Architecture Context (Feature 2) Builds a markdown document that captures the durable facts about a project — its purpose, modules, key files, constraints, decisions — so Astra can attach it t", "imports": [ @@ -473,15 +473,15 @@ ] }, "src/features/projectArchitecture/intentDetector.ts": { - "mtimeMs": 1778720117532.2788, - "size": 6318, + "mtimeMs": 1778676956000, + "size": 6170, "lines": 148, "role": "Project-intent detection from a chat message. Goal: when the user says \"나 ConnectAI 프로젝트 진행할 거야\" (or similar), spot the intent + project handle so the sidebar can activate Project Mode and auto-attach", "imports": [] }, "src/features/projectArchitecture/mermaid.ts": { - "mtimeMs": 1778720117533.2854, - "size": 2768, + "mtimeMs": 1778678215000, + "size": 2699, "lines": 69, "role": "Mermaid diagram renderers for the architecture doc. Two diagrams: a directory mindmap so the user can see the shape of the project at a glance, and a flowchart that shows which top-level module import", "imports": [ @@ -489,8 +489,8 @@ ] }, "src/features/projectArchitecture/scanner.ts": { - "mtimeMs": 1778720117534.286, - "size": 28943, + "mtimeMs": 1778678939000, + "size": 28299, "lines": 644, "role": "Deep static analyser for the Project Architecture Context generator. Walks the project tree (skipping the usual nodemodules / out / dist noise), pulls the role of each interesting file from its leadin", "imports": [ @@ -500,8 +500,8 @@ ] }, "src/features/projectChronicle/guardPrompt.ts": { - "mtimeMs": 1778028987407.7454, - "size": 6955, + "mtimeMs": 1777870211000, + "size": 6880, "lines": 75, "role": "", "imports": [ @@ -509,8 +509,8 @@ ] }, "src/features/projectChronicle/index.ts": { - "mtimeMs": 1778028987408.4517, - "size": 7679, + "mtimeMs": 1777808065000, + "size": 7490, "lines": 189, "role": "", "imports": [ @@ -521,15 +521,15 @@ ] }, "src/features/projectChronicle/markdownFileWriter.ts": { - "mtimeMs": 1778028987409.2556, - "size": 1358, + "mtimeMs": 1777808065000, + "size": 1317, "lines": 41, "role": "", "imports": [] }, "src/features/projectChronicle/templates.ts": { - "mtimeMs": 1778028987409.766, - "size": 6957, + "mtimeMs": 1777808065000, + "size": 6699, "lines": 258, "role": "", "imports": [ @@ -537,15 +537,15 @@ ] }, "src/features/projectChronicle/types.ts": { - "mtimeMs": 1778720117534.7898, - "size": 3247, + "mtimeMs": 1778676848000, + "size": 3129, "lines": 118, "role": "", "imports": [] }, "src/features/secondBrainTrace.ts": { - "mtimeMs": 1778549008900.949, - "size": 38235, + "mtimeMs": 1778248166000, + "size": 37475, "lines": 760, "role": "", "imports": [ @@ -554,8 +554,8 @@ ] }, "src/features/settings/settingsPanelProvider.ts": { - "mtimeMs": 1778664502139.8142, - "size": 21911, + "mtimeMs": 1778674336000, + "size": 21422, "lines": 489, "role": "", "imports": [ @@ -567,8 +567,8 @@ ] }, "src/integrations/telegram/conversationHistory.ts": { - "mtimeMs": 1778720117535.294, - "size": 6427, + "mtimeMs": 1778684811000, + "size": 6273, "lines": 154, "role": "Per-chat conversation history for the Telegram bot. Why this exists: the previous bot was stateless — every inbound message hit AIService.chat({system, user}) in isolation, with no memory of what the ", "imports": [ @@ -576,8 +576,8 @@ ] }, "src/integrations/telegram/telegramBot.ts": { - "mtimeMs": 1778549008903.0078, - "size": 11614, + "mtimeMs": 1778421270000, + "size": 11344, "lines": 270, "role": "", "imports": [ @@ -587,8 +587,8 @@ ] }, "src/integrations/telegram/telegramClient.ts": { - "mtimeMs": 1778549008904.013, - "size": 6027, + "mtimeMs": 1778252333000, + "size": 5873, "lines": 154, "role": "", "imports": [ @@ -597,22 +597,22 @@ ] }, "src/integrations/telegram/types.ts": { - "mtimeMs": 1778549008904.013, - "size": 1309, + "mtimeMs": 1778252305000, + "size": 1255, "lines": 54, "role": "Subset of the Telegram Bot API types we actually consume. Source: https://core.telegram.org/bots/api Only fields the bot reads or writes are typed — leaving the rest as unknown keeps the surface narro", "imports": [] }, "src/lib/contextManager.ts": { - "mtimeMs": 1778664139961.0637, - "size": 13257, + "mtimeMs": 1778597095000, + "size": 12982, "lines": 275, "role": "Context Manager (컨텍스트 한계 관리) \"context length = 132k\" 는 \"답변을 132k 토큰까지 생성해도 된다\" 가 아닙니다. 시스템 프롬프트 + 대화 기록 + 입력 문서 + 생성될 답변 + 여유분 ≤ context length 이 모듈은 요청을 보내기 전에 입력 토큰을 추정하고, - 동적으로 출력 상한(maxTokens)을 계", "imports": [] }, "src/lib/diagnostics.ts": { - "mtimeMs": 1778028987412.5159, - "size": 8599, + "mtimeMs": 1777978189000, + "size": 8389, "lines": 210, "role": "", "imports": [ @@ -620,8 +620,8 @@ ] }, "src/lib/discoverModels.ts": { - "mtimeMs": 1778549008905.0132, - "size": 1590, + "mtimeMs": 1778255896000, + "size": 1555, "lines": 35, "role": "", "imports": [ @@ -629,8 +629,8 @@ ] }, "src/lib/engine.ts": { - "mtimeMs": 1778720117536.941, - "size": 41710, + "mtimeMs": 1778690608000, + "size": 40830, "lines": 880, "role": "", "imports": [ @@ -643,8 +643,8 @@ ] }, "src/lib/formatter.ts": { - "mtimeMs": 1778028987413.7585, - "size": 3932, + "mtimeMs": 1777980992000, + "size": 3851, "lines": 81, "role": "", "imports": [ @@ -652,22 +652,22 @@ ] }, "src/lib/paths.ts": { - "mtimeMs": 1778664139961.0637, - "size": 6567, + "mtimeMs": 1778591351000, + "size": 6416, "lines": 151, "role": "", "imports": [] }, "src/lmstudio/activityTracker.ts": { - "mtimeMs": 1778549008906.526, - "size": 445, + "mtimeMs": 1778246443000, + "size": 426, "lines": 19, "role": "", "imports": [] }, "src/lmstudio/client.ts": { - "mtimeMs": 1778549008907.0293, - "size": 5920, + "mtimeMs": 1778472808000, + "size": 5773, "lines": 147, "role": "", "imports": [ @@ -675,8 +675,8 @@ ] }, "src/lmstudio/lifecycleManager.ts": { - "mtimeMs": 1778549008907.0293, - "size": 11074, + "mtimeMs": 1778251087000, + "size": 10783, "lines": 291, "role": "", "imports": [ @@ -687,8 +687,8 @@ ] }, "src/lmstudio/streamer.ts": { - "mtimeMs": 1778664139962.1995, - "size": 7924, + "mtimeMs": 1778598444000, + "size": 7762, "lines": 162, "role": "", "imports": [ @@ -697,17 +697,65 @@ ] }, "src/memory/EpisodicMemory.ts": { - "mtimeMs": 1778028987414.7522, - "size": 9855, + "mtimeMs": 1777858161000, + "size": 9577, "lines": 278, "role": "Episodic Memory (일화 기억) 과거 대화/회의/결정의 맥락 흐름을 저장합니다. 세션 종료 시 자동으로 에피소드를 요약하여 저장합니다. \"왜 이렇게 결정했는지\", \"어떤 흐름으로 진행했는지\" 기록. 저장 위치: {brainPath}/memory/episodes/.json", "imports": [ "src/memory/types" ] }, + "src/memory/LongTermMemory.ts": { + "mtimeMs": 1777858068000, + "size": 8364, + "lines": 243, + "role": "Long-Term Memory (장기 기억) 사용자의 취향, 프로젝트 목표, 반복 규칙, 과거 결정 사항을 영구적으로 저장하고 관리합니다. 저장 위치: {brainPath}/memory/longterm.json", + "imports": [ + "src/memory/types" + ] + }, + "src/memory/MemoryExtractor.ts": { + "mtimeMs": 1777858183000, + "size": 3838, + "lines": 115, + "role": "Memory Extractor (기억 추출기) 대화 종료 시 히스토리를 분석하여 각 메모리 레이어에 저장할 정보를 자동으로 추출합니다. LLM 호출 없이 패턴 매칭 기반으로 동작합니다.", + "imports": [ + "src/memory/LongTermMemory", + "src/memory/ProjectMemory", + "src/memory/EpisodicMemory" + ] + }, + "src/memory/ProceduralMemory.ts": { + "mtimeMs": 1777858120000, + "size": 5533, + "lines": 173, + "role": "Procedural Memory (절차 기억) 반복 작업의 절차와 패턴을 관리합니다. 기존 skill.md 시스템과 통합되어, Brain의 memory/procedures/ 아래의 MD 파일을 스캔하여 절차를 로드합니다. 저장 위치: {brainPath}/memory/procedures/.md", + "imports": [ + "src/memory/types" + ] + }, + "src/memory/ProjectMemory.ts": { + "mtimeMs": 1777864677000, + "size": 6533, + "lines": 212, + "role": "Project Memory (프로젝트 기억) 프로젝트별 요구사항, 코드 구조, 아키텍처 결정, 버그 기록 등을 Astra 확장 프로그램 내부에 저장하고 관리합니다. 저장 위치: {ConnectAI}/.astra/projectmemory.json (기존: {projectRoot}/.astra/ → 변경됨)", + "imports": [ + "src/memory/types", + "src/core/astraPath" + ] + }, + "src/memory/ShortTermMemory.ts": { + "mtimeMs": 1777858031000, + "size": 1167, + "lines": 37, + "role": "Short-Term Memory (단기 기억) 현재 대화의 즉시 맥락을 관리합니다. FIFO 방식으로 최근 N개 메시지를 유지합니다.", + "imports": [ + "src/memory/types" + ] + }, "src/memory/index.ts": { - "mtimeMs": 1778028987418.8357, - "size": 6498, + "mtimeMs": 1777858214000, + "size": 6310, "lines": 188, "role": "MemoryManager — 5-Layer Cognitive Memory System (통합 진입점) Astra의 모든 메모리 레이어를 통합 관리하는 중앙 매니저입니다. ① Short-Term Memory — 현재 대화 흐름 (FIFO) ② Long-Term Memory — 사용자 취향/규칙/결정 ③ Project Memory — 프로젝트별 지식 ④ Pro", "imports": [ @@ -721,64 +769,16 @@ "src/memory/types" ] }, - "src/memory/LongTermMemory.ts": { - "mtimeMs": 1778028987415.2708, - "size": 8607, - "lines": 243, - "role": "Long-Term Memory (장기 기억) 사용자의 취향, 프로젝트 목표, 반복 규칙, 과거 결정 사항을 영구적으로 저장하고 관리합니다. 저장 위치: {brainPath}/memory/longterm.json", - "imports": [ - "src/memory/types" - ] - }, - "src/memory/MemoryExtractor.ts": { - "mtimeMs": 1778028987415.8738, - "size": 3953, - "lines": 115, - "role": "Memory Extractor (기억 추출기) 대화 종료 시 히스토리를 분석하여 각 메모리 레이어에 저장할 정보를 자동으로 추출합니다. LLM 호출 없이 패턴 매칭 기반으로 동작합니다.", - "imports": [ - "src/memory/LongTermMemory", - "src/memory/ProjectMemory", - "src/memory/EpisodicMemory" - ] - }, - "src/memory/ProceduralMemory.ts": { - "mtimeMs": 1778028987416.5232, - "size": 5706, - "lines": 173, - "role": "Procedural Memory (절차 기억) 반복 작업의 절차와 패턴을 관리합니다. 기존 skill.md 시스템과 통합되어, Brain의 memory/procedures/ 아래의 MD 파일을 스캔하여 절차를 로드합니다. 저장 위치: {brainPath}/memory/procedures/.md", - "imports": [ - "src/memory/types" - ] - }, - "src/memory/ProjectMemory.ts": { - "mtimeMs": 1778028987417.0342, - "size": 6745, - "lines": 212, - "role": "Project Memory (프로젝트 기억) 프로젝트별 요구사항, 코드 구조, 아키텍처 결정, 버그 기록 등을 Astra 확장 프로그램 내부에 저장하고 관리합니다. 저장 위치: {ConnectAI}/.astra/projectmemory.json (기존: {projectRoot}/.astra/ → 변경됨)", - "imports": [ - "src/memory/types", - "src/core/astraPath" - ] - }, - "src/memory/ShortTermMemory.ts": { - "mtimeMs": 1778028987418.1267, - "size": 1204, - "lines": 37, - "role": "Short-Term Memory (단기 기억) 현재 대화의 즉시 맥락을 관리합니다. FIFO 방식으로 최근 N개 메시지를 유지합니다.", - "imports": [ - "src/memory/types" - ] - }, "src/memory/types.ts": { - "mtimeMs": 1778028987419.3413, - "size": 3575, + "mtimeMs": 1777858019000, + "size": 3449, "lines": 126, "role": "Memory Type Definitions (메모리 타입 정의) Astra의 5-Layer Cognitive Memory System의 모든 타입을 정의합니다. ① Short-Term ② Long-Term ③ Project ④ Procedural ⑤ Episodic", "imports": [] }, "src/retrieval/brainIndex.ts": { - "mtimeMs": 1778667252738.4248, - "size": 13270, + "mtimeMs": 1778674336000, + "size": 12945, "lines": 325, "role": "Brain Index — persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 매 질의마다 브레인의 모든 .md 파일을 읽고 토크나이즈해서 TF-IDF 점수를 계산했습니다 — 파일 수가 많아지면 그게 병목입니다. 이 모듈은 /.astra/brain-index.json 에", "imports": [ @@ -788,8 +788,8 @@ ] }, "src/retrieval/contextBudget.ts": { - "mtimeMs": 1778665501089.1736, - "size": 5283, + "mtimeMs": 1778674336000, + "size": 5143, "lines": 140, "role": "Context Budget Manager (컨텍스트 예산 관리) 시스템 프롬프트의 토큰 예산을 관리하여 로컬 모델의 context window를 효율적으로 활용합니다.", "imports": [ @@ -797,7 +797,7 @@ ] }, "src/retrieval/embeddings.ts": { - "mtimeMs": 1778667198243.6443, + "mtimeMs": 1778674336000, "size": 7294, "lines": 167, "role": "Embeddings — local hybrid (sparse + dense) retrieval support TF-IDF is fast and zero-cost but misses synonyms / paraphrase. A small local embedding model (BGE-small, multilingual-e5-small, nomic-embed", @@ -806,8 +806,8 @@ ] }, "src/retrieval/index.ts": { - "mtimeMs": 1778720117542.9775, - "size": 24278, + "mtimeMs": 1778676255000, + "size": 23764, "lines": 514, "role": "RetrievalOrchestrator — Unified RAG Pipeline Astra의 모든 검색 소스를 통합 관리하는 오케스트레이터입니다. 검색 흐름: ① Query Planning — 의도 분류 + 검색 전략 결정 ② Parallel Search — Brain + Memory + Project + Episode 동시 검색 ③ Result Fusio", "imports": [ @@ -824,8 +824,8 @@ ] }, "src/retrieval/knowledgeMix.ts": { - "mtimeMs": 1778720117543.9883, - "size": 7108, + "mtimeMs": 1778676121000, + "size": 6947, "lines": 161, "role": "Knowledge Mix — controls how much the assistant leans on Second Brain evidence vs. the model's own general knowledge for a given query. The single integer \"secondBrainWeight\" (0–100) drives three thin", "imports": [ @@ -834,8 +834,8 @@ ] }, "src/retrieval/lessonHelpers.ts": { - "mtimeMs": 1778665428445.0337, - "size": 14459, + "mtimeMs": 1778674336000, + "size": 14134, "lines": 325, "role": "Lesson / Experience Memory — pure helpers (no vscode dependency) \"Lesson\" = a markdown file in the active brain that captures a past mistake/risk and how to avoid repeating it. Identified by a lessons", "imports": [ @@ -843,22 +843,22 @@ ] }, "src/retrieval/scoring.ts": { - "mtimeMs": 1778667038342.5154, - "size": 21311, + "mtimeMs": 1778674336000, + "size": 20793, "lines": 518, "role": "Scoring Engine — TF-IDF + Bilingual Tokenizer 단순 includes() 키워드 매칭을 넘어서, TF-IDF 가중치 기반의 문서 스코어링을 제공합니다. 한국어/영어 양국어 토크나이저를 포함합니다.", "imports": [] }, "src/retrieval/types.ts": { - "mtimeMs": 1778665510728.6262, - "size": 2490, + "mtimeMs": 1778674336000, + "size": 2424, "lines": 66, "role": "Retrieval Types (검색 결과 통합 타입) 모든 검색 소스(Brain, Memory, Project, Episode)의 결과를 통합 인터페이스로 정의합니다.", "imports": [] }, "src/scaffolder/projectScaffolder.ts": { - "mtimeMs": 1778549008910.5835, - "size": 4619, + "mtimeMs": 1778251854000, + "size": 4508, "lines": 111, "role": "", "imports": [ @@ -868,22 +868,22 @@ ] }, "src/scaffolder/templates.ts": { - "mtimeMs": 1778549008910.5835, - "size": 5051, + "mtimeMs": 1778251830000, + "size": 4897, "lines": 154, "role": "Scaffolder template catalog. Templates are pure data — (projectName) => { [relativePath]: contents }. New templates are added by appending to TEMPLATES; the rest of the scaffolder (validation, IO, com", "imports": [] }, "src/security.ts": { - "mtimeMs": 1778038102847.8362, - "size": 3400, + "mtimeMs": 1778169995000, + "size": 3310, "lines": 90, "role": "", "imports": [] }, "src/sidebar/agentHandlers.ts": { - "mtimeMs": 1778720117552.737, - "size": 7921, + "mtimeMs": 1778676515000, + "size": 7752, "lines": 169, "role": "", "imports": [ @@ -893,8 +893,8 @@ ] }, "src/sidebar/brainHandlers.ts": { - "mtimeMs": 1778549008912.5908, - "size": 1113, + "mtimeMs": 1778248976000, + "size": 1080, "lines": 33, "role": "", "imports": [ @@ -902,8 +902,8 @@ ] }, "src/sidebar/chatHandlers.ts": { - "mtimeMs": 1778720117556.8992, - "size": 13720, + "mtimeMs": 1778686906000, + "size": 13454, "lines": 266, "role": "", "imports": [ @@ -914,8 +914,8 @@ ] }, "src/sidebar/chronicleHandlers.ts": { - "mtimeMs": 1778549008912.5908, - "size": 2120, + "mtimeMs": 1778248986000, + "size": 2068, "lines": 52, "role": "", "imports": [ @@ -923,9 +923,9 @@ ] }, "src/sidebarProvider.ts": { - "mtimeMs": 1778720117564.9683, - "size": 135062, - "lines": 3023, + "mtimeMs": 1778693581000, + "size": 132228, + "lines": 3026, "role": "", "imports": [ "src/utils", @@ -949,8 +949,8 @@ ] }, "src/skills/agentKnowledgeMap.ts": { - "mtimeMs": 1778720117565.968, - "size": 16081, + "mtimeMs": 1778676092000, + "size": 15707, "lines": 374, "role": "", "imports": [ @@ -959,8 +959,8 @@ ] }, "src/skills/externalSkillLoader.ts": { - "mtimeMs": 1778549008916.6155, - "size": 6018, + "mtimeMs": 1778470672000, + "size": 5859, "lines": 159, "role": "", "imports": [ @@ -969,8 +969,8 @@ ] }, "src/skills/scopedBrainRetriever.ts": { - "mtimeMs": 1778549008916.6155, - "size": 5859, + "mtimeMs": 1778419289000, + "size": 5706, "lines": 153, "role": "", "imports": [ @@ -981,8 +981,8 @@ ] }, "src/skills/skillInjectionService.ts": { - "mtimeMs": 1778549008918.12, - "size": 6421, + "mtimeMs": 1778681774000, + "size": 6276, "lines": 145, "role": "", "imports": [ @@ -991,22 +991,22 @@ ] }, "src/system/specs.ts": { - "mtimeMs": 1778549008918.12, - "size": 4444, + "mtimeMs": 1778251036000, + "size": 4326, "lines": 118, "role": "", "imports": [] }, "src/types/interfaces.ts": { - "mtimeMs": 1778036927218.7627, - "size": 1299, + "mtimeMs": 1778169995000, + "size": 1260, "lines": 39, "role": "Service Interfaces (서비스 인터페이스 정의) 각 서비스(Agent, Brain, FileSystem 등)의 추상화 인터페이스를 정의합니다. 의존성 주입(DI)과 단위 테스트를 위해 필수적입니다.", "imports": [] }, "src/utils.ts": { - "mtimeMs": 1778720117572.7004, - "size": 11718, + "mtimeMs": 1778675047000, + "size": 11450, "lines": 268, "role": "", "imports": [ @@ -1014,50 +1014,50 @@ ] }, "media/settings-panel.css": { - "mtimeMs": 1778549008877.4587, - "size": 4756, + "mtimeMs": 1778255405000, + "size": 4546, "lines": 210, "role": "Stylesheet", "imports": [] }, "media/settings-panel.html": { - "mtimeMs": 1778549008877.4587, - "size": 7823, + "mtimeMs": 1778255979000, + "size": 7659, "lines": 164, "role": "Astra Settings", "imports": [] }, "media/settings-panel.js": { - "mtimeMs": 1778549008878.4905, - "size": 11446, + "mtimeMs": 1778256014000, + "size": 11176, "lines": 270, "role": "", "imports": [] }, "media/sidebar.css": { - "mtimeMs": 1778720117436.0583, - "size": 50572, + "mtimeMs": 1778688155000, + "size": 49347, "lines": 1225, "role": "Stylesheet", "imports": [] }, "media/sidebar.html": { - "mtimeMs": 1778720117442.547, - "size": 20855, + "mtimeMs": 1778687548000, + "size": 20499, "lines": 356, "role": "Astra", "imports": [] }, "media/sidebar.js": { - "mtimeMs": 1778720117453.3223, - "size": 105804, - "lines": 1873, + "mtimeMs": 1778688191000, + "size": 103898, + "lines": 1874, "role": "", "imports": [] }, "tests/agentEngine.test.ts": { - "mtimeMs": 1778720117574.2246, - "size": 34703, + "mtimeMs": 1778690770000, + "size": 33921, "lines": 782, "role": "AgentEngine Integration Tests & Performance Benchmarks 검증 대상: 1. ErrorClassifier — 오류 유형(Transient/Permanent/Abort) 자동 분류 2. ErrorRecoveryMatrix — 각 규칙이 의도한 대응 전략으로 매핑되는지 검증 3. resilientExecute — 지수 백", "imports": [ @@ -1065,8 +1065,8 @@ ] }, "tests/approvalQueue.test.ts": { - "mtimeMs": 1778549008920.1624, - "size": 6079, + "mtimeMs": 1778251690000, + "size": 5915, "lines": 164, "role": "Unit tests for ApprovalQueue. Strategy: drive enqueue → approve / reject / clear / pre-empt directly, confirm the onChange event fires at the right moments and callbacks fire exactly once.", "imports": [ @@ -1074,8 +1074,8 @@ ] }, "tests/brainIndex.test.ts": { - "mtimeMs": 1778664139970.806, - "size": 5513, + "mtimeMs": 1778594450000, + "size": 5406, "lines": 107, "role": "", "imports": [ @@ -1083,8 +1083,8 @@ ] }, "tests/contextManager.test.ts": { - "mtimeMs": 1778664139971.9563, - "size": 6674, + "mtimeMs": 1778594523000, + "size": 6545, "lines": 129, "role": "", "imports": [ @@ -1092,8 +1092,8 @@ ] }, "tests/dataProcessor.test.ts": { - "mtimeMs": 1778028987448.8394, - "size": 3517, + "mtimeMs": 1777808065000, + "size": 3430, "lines": 87, "role": "/ ", "imports": [ @@ -1101,8 +1101,8 @@ ] }, "tests/findBrainFilesCache.test.ts": { - "mtimeMs": 1778549008921.7842, - "size": 2800, + "mtimeMs": 1778247665000, + "size": 2720, "lines": 80, "role": "Unit tests for findBrainFiles TTL cache.", "imports": [ @@ -1110,8 +1110,8 @@ ] }, "tests/integration_retrieval.test.ts": { - "mtimeMs": 1778028987449.4358, - "size": 4108, + "mtimeMs": 1777949141000, + "size": 4017, "lines": 91, "role": "", "imports": [ @@ -1120,8 +1120,8 @@ ] }, "tests/lessonHelpers.test.ts": { - "mtimeMs": 1778664139972.9592, - "size": 9591, + "mtimeMs": 1778595482000, + "size": 9400, "lines": 191, "role": "", "imports": [ @@ -1129,8 +1129,8 @@ ] }, "tests/lmStudioLifecycle.test.ts": { - "mtimeMs": 1778549008921.7842, - "size": 11703, + "mtimeMs": 1778250254000, + "size": 11385, "lines": 318, "role": "Unit tests for ModelLifecycleManager. Strategy: inject mock ILMStudioClient and a simple in-memory IActivityTracker. No real LM Studio or SDK is touched — the manager file does not import the SDK dire", "imports": [ @@ -1140,8 +1140,8 @@ ] }, "tests/lmStudioStreamer.test.ts": { - "mtimeMs": 1778664139973.4685, - "size": 8880, + "mtimeMs": 1778591604000, + "size": 8660, "lines": 220, "role": "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.", "imports": [ @@ -1150,8 +1150,8 @@ ] }, "tests/localPathPreflight.test.ts": { - "mtimeMs": 1778664139974.819, - "size": 24177, + "mtimeMs": 1778595955000, + "size": 23687, "lines": 490, "role": "", "imports": [ @@ -1159,15 +1159,15 @@ ] }, "tests/mocks/vscode.js": { - "mtimeMs": 1778549008931.3582, - "size": 1738, + "mtimeMs": 1778246810000, + "size": 1670, "lines": 68, "role": "", "imports": [] }, "tests/paths.test.ts": { - "mtimeMs": 1778549008931.3582, - "size": 2674, + "mtimeMs": 1778250990000, + "size": 2590, "lines": 84, "role": "Unit tests for the centralized path resolver.", "imports": [ @@ -1175,8 +1175,8 @@ ] }, "tests/projectChronicle.test.ts": { - "mtimeMs": 1778029332769.3286, - "size": 8558, + "mtimeMs": 1778169995000, + "size": 8359, "lines": 199, "role": "", "imports": [ @@ -1184,8 +1184,8 @@ ] }, "tests/projectChronicleGuardPrompt.test.ts": { - "mtimeMs": 1778028987452.0652, - "size": 2890, + "mtimeMs": 1777808369000, + "size": 2838, "lines": 52, "role": "", "imports": [ @@ -1193,8 +1193,8 @@ ] }, "tests/projectScaffolder.test.ts": { - "mtimeMs": 1778549008932.6519, - "size": 5935, + "mtimeMs": 1778251915000, + "size": 5800, "lines": 135, "role": "Unit tests for FileSystemProjectScaffolder. Drives against a real temp directory so end-to-end file IO + path-traversal defenses are exercised.", "imports": [ @@ -1202,8 +1202,8 @@ ] }, "tests/resilience_stress.test.ts": { - "mtimeMs": 1778028987453.0332, - "size": 7164, + "mtimeMs": 1777968922000, + "size": 6981, "lines": 183, "role": "Resilience & Boundary Stress Test Suite (v2.77.3) 이 테스트는 ConnectAI 엔진이 극한의 환경(인증 실패, 네트워크 차단, 타임아웃 등)에서 얼마나 안정적으로 복구되고, 신뢰성 지표(Resilience Metrics)를 정확히 기록하는지 검증합니다.", "imports": [ @@ -1211,8 +1211,8 @@ ] }, "tests/resilience_v4.test.ts": { - "mtimeMs": 1778028987453.5366, - "size": 3519, + "mtimeMs": 1777978211000, + "size": 3435, "lines": 84, "role": "", "imports": [ @@ -1221,8 +1221,8 @@ ] }, "tests/responseRecovery.test.ts": { - "mtimeMs": 1778664139974.819, - "size": 8933, + "mtimeMs": 1778598707000, + "size": 8782, "lines": 151, "role": "", "imports": [ @@ -1230,8 +1230,8 @@ ] }, "tests/scoring.test.ts": { - "mtimeMs": 1778043314856.5872, - "size": 6189, + "mtimeMs": 1778169995000, + "size": 6055, "lines": 134, "role": "", "imports": [ @@ -1239,8 +1239,8 @@ ] }, "tests/secondBrainTrace.test.ts": { - "mtimeMs": 1778028987455.0378, - "size": 23431, + "mtimeMs": 1777866065000, + "size": 23024, "lines": 407, "role": "", "imports": [ @@ -1248,8 +1248,8 @@ ] }, "tests/skillInjectionService.test.ts": { - "mtimeMs": 1778549008933.6833, - "size": 6913, + "mtimeMs": 1778681774000, + "size": 6741, "lines": 172, "role": "Unit tests for FileSystemSkillInjectionService. Strategy: drive the service against a real temp directory so path-traversal defenses and writeFileSync paths are exercised end-to-end. The service accep", "imports": [ @@ -1257,8 +1257,8 @@ ] }, "tests/systemPrompt.test.ts": { - "mtimeMs": 1778028987455.4153, - "size": 1244, + "mtimeMs": 1777966465000, + "size": 1215, "lines": 29, "role": "", "imports": [ @@ -1266,8 +1266,8 @@ ] }, "tests/systemSpecs.test.ts": { - "mtimeMs": 1778549008934.187, - "size": 3554, + "mtimeMs": 1778251130000, + "size": 3464, "lines": 90, "role": "Unit tests for SystemSpecs + HeuristicModelMemoryEstimator. Strategy: - HeuristicModelMemoryEstimator is pure — directly drive it with model ids. - NodeSystemSpecsProvider depends on os. so we test: a", "imports": [ @@ -1275,8 +1275,8 @@ ] }, "tests/telegramBot.test.ts": { - "mtimeMs": 1778549008934.187, - "size": 13375, + "mtimeMs": 1778253785000, + "size": 13012, "lines": 363, "role": "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", "imports": [ @@ -1286,8 +1286,8 @@ ] }, "tests/transaction.test.ts": { - "mtimeMs": 1777511752614.9685, - "size": 2132, + "mtimeMs": 1777808065000, + "size": 2064, "lines": 68, "role": "/ ", "imports": [ @@ -1295,8 +1295,8 @@ ] }, "tests/vulnerability.test.ts": { - "mtimeMs": 1777511752615.9702, - "size": 2160, + "mtimeMs": 1777808065000, + "size": 2100, "lines": 60, "role": "/ ", "imports": [ @@ -1305,536 +1305,508 @@ ] }, "core_py/events.py": { - "mtimeMs": 1778028987265.2336, - "size": 2438, + "mtimeMs": 1777559069000, + "size": 2374, "lines": 64, "role": "", "imports": [] }, "core_py/inference.py": { - "mtimeMs": 1778028987265.8833, - "size": 3925, + "mtimeMs": 1777559249000, + "size": 3834, "lines": 91, "role": "", "imports": [] }, "core_py/loader.py": { - "mtimeMs": 1778028987266.8376, - "size": 2429, + "mtimeMs": 1777559060000, + "size": 2368, "lines": 61, "role": "", "imports": [] }, "core_py/monitoring.py": { - "mtimeMs": 1778028987266.8376, - "size": 2116, + "mtimeMs": 1777559685000, + "size": 2060, "lines": 56, "role": "", "imports": [] }, "core_py/optimizer.py": { - "mtimeMs": 1778028987267.4917, - "size": 2382, + "mtimeMs": 1777559265000, + "size": 2327, "lines": 55, "role": "", "imports": [] }, "core_py/queue_worker.py": { - "mtimeMs": 1778028987268.5847, - "size": 3069, + "mtimeMs": 1777559676000, + "size": 2987, "lines": 82, "role": "", "imports": [] }, "docs/Advanced_Features_Implementation_Guide.md": { - "mtimeMs": 1778028987294.7693, - "size": 1844, + "mtimeMs": 1777808065000, + "size": 1804, "lines": 40, "role": "Advanced Features Implementation Guide", "imports": [] }, "docs/AgentEngine_Architecture.md": { - "mtimeMs": 1778028987295.9912, - "size": 14652, + "mtimeMs": 1777863061000, + "size": 14338, "lines": 314, "role": "AgentEngine Architecture Document", "imports": [] }, - "docs/docs/records/docs/bugs/BUG-0001-viewed-integration-retrieval-test-ts-1-59-integration-retrie.md": { - "mtimeMs": 1778028987313.924, - "size": 2075, - "lines": 16, - "role": "Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ...", - "imports": [] - }, - "docs/docs/records/docs/chronicle.config.json": { - "mtimeMs": 1778028987314.4072, - "size": 533, - "lines": 11, - "role": "JSON configuration", - "imports": [] - }, - "docs/docs/records/docs/project-profile.md": { - "mtimeMs": 1778028987314.9126, - "size": 617, - "lines": 31, - "role": "Project Profile", - "imports": [] - }, - "docs/docs/records/docs/README.md": { - "mtimeMs": 1778028987312.8103, - "size": 445, - "lines": 18, - "role": "docs Chronicle Records", - "imports": [] - }, - "docs/docs/records/docs/timeline.md": { - "mtimeMs": 1778028987315.4329, - "size": 217, - "lines": 7, - "role": "Project Timeline", - "imports": [] - }, "docs/EXPERIENCE_MEMORY_PLAN.md": { - "mtimeMs": 1778664139926.1729, - "size": 9512, + "mtimeMs": 1778595595000, + "size": 9390, "lines": 122, "role": "Experience Memory (Mistake / Lesson Loop) — Implementation Plan", "imports": [] }, "docs/PROJECT_CHRONICLE_GUARD_ROADMAP.md": { - "mtimeMs": 1778028987296.7407, - "size": 1677, + "mtimeMs": 1777948230000, + "size": 1634, "lines": 43, "role": "Project Chronicle Guard: Search Engine Roadmap", "imports": [] }, - "docs/records/ConnectAI/bugs/BUG-0001-volumes-data-project-antigravity-connectai-프로젝트-코드-리뷰-해줄-수-있.md": { - "mtimeMs": 1778028987317.1565, - "size": 1424, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0002-지금-내가-분석-요청하고-너가-답을-줄때-아래-템플릿에-맞춰-답을-써주고-있는데-개선-포인트가-있는지-확인해.md": { - "mtimeMs": 1778028987317.6665, - "size": 2575, - "lines": 16, - "role": "Bug: 지금 내가 분석 요청하고 너가 답을 줄때 아래 템플릿에 맞춰 답을 써주고 있는데, 개선 포인트가 있는지 확인해줘. ## 내가 보는 위험 가장 큰...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0003-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { - "mtimeMs": 1778028987320.982, - "size": 1907, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0004-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { - "mtimeMs": 1778028987321.984, - "size": 1899, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0005-다시한번-답줘-volumes-data-project-antigravity-connectai-내-질문에-대한-.md": { - "mtimeMs": 1778028987322.4868, - "size": 1884, - "lines": 16, - "role": "Bug: 다시한번 답줘. /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0006-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { - "mtimeMs": 1778028987322.9897, - "size": 1639, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0007-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { - "mtimeMs": 1778028987322.9897, - "size": 1839, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0008-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { - "mtimeMs": 1778028987323.9915, - "size": 1753, - "lines": 16, - "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0009-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { - "mtimeMs": 1778028987324.4944, - "size": 2311, - "lines": 16, - "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0010-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { - "mtimeMs": 1778028987324.9973, - "size": 2355, - "lines": 16, - "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0011-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { - "mtimeMs": 1778028987325.5178, - "size": 2293, - "lines": 16, - "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0012-질문이-있어-논문을-쓰려고해-논문-주제는-서비스적이-아닌-사용자가-ai에게-구조로-질문을-해야-사용자의-의도.md": { - "mtimeMs": 1778727537111.4634, - "size": 2354, - "lines": 16, - "role": "Bug: 질문이 있어. 논문을 쓰려고해. 논문 주제는 서비스적이 아닌 사용자가 ai에게 구조로 질문을 해야 사용자의 의도에 맞는 답변을 받을 수 있을까야...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0013-thesis-paper를-쓰려고-하는데-아래와-같이-쓰면-좋을까-이런-식으로-쓰면-되지-않을까-싶음-1-in.md": { - "mtimeMs": 1778728112255.496, - "size": 2527, - "lines": 16, - "role": "Bug: Thesis paper를 쓰려고 하는데 아래와 같이 쓰면 좋을까? 이런 식으로 쓰면 되지 않을까 싶음 1. Introduction Thesis ...", - "imports": [] - }, - "docs/records/ConnectAI/bugs/BUG-0014-논문-outline-title-인간-ai-상호작용에서-의도-정렬을-높이기-위한-최소-질의-구조-연구-또는-사.md": { - "mtimeMs": 1778728474713.4639, - "size": 2531, - "lines": 16, - "role": "Bug: 논문 Outline Title 인간-AI 상호작용에서 의도 정렬을 높이기 위한 최소 질의 구조 연구 또는 사용자의 인지적 편향을 보완하는 구조화...", - "imports": [] - }, - "docs/records/ConnectAI/chronicle.config.json": { - "mtimeMs": 1778728474789.8633, - "size": 371, - "lines": 11, - "role": "JSON configuration", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0001-volumes-data-project-antigravity-connectai-이-프로젝트를-지금-개발-중에-.md": { - "mtimeMs": 1778028987326.5986, - "size": 1463, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트를 지금 개발 중에 있어. 코드 리뷰를 하고 잘된점과 ...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0002-지금-너의-제2뇌-지식을-이용해서-아래-프로젝트-평가하고-앞으로-어느부분을-더-집중해서-개선을-하면-좋을지-.md": { - "mtimeMs": 1778028987326.5986, - "size": 1897, - "lines": 19, - "role": "ADR: 지금 너의 제2뇌 지식을 이용해서 아래 프로젝트 평가하고 앞으로 어느부분을 더 집중해서 개선을 하면 좋을지 알려주면 좋겠어. /Volumes/D...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0003-volumes-data-project-antigravity-connectai-이-프로젝트-자체를-나는-자비스.md": { - "mtimeMs": 1778028987328.1038, - "size": 1805, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 자체를 나는 자비스와 같은 툴로 만드는 것이 내 목표...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0004-volumes-data-project-antigravity-connectai-이-프로젝트-자체를-나는-자비스.md": { - "mtimeMs": 1778028987328.613, - "size": 1491, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 자체를 나는 자비스와 같은 툴로 만드는 것이 내 목표...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0005-volumes-data-project-antigravity-connectai-이-프로젝트-아키텍처-분석해줘.md": { - "mtimeMs": 1778028987329.1296, - "size": 1531, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 아키텍처 분석해줘.", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0006-volumes-data-project-antigravity-connectai-프로젝트에-대해서-너가-사용자-.md": { - "mtimeMs": 1778028987329.1296, - "size": 1623, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트에 대해서 너가 사용자 입장에서 평가 해주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0007-volumes-data-project-antigravity-connectai-이거에-기능-개선을-하고-싶어-.md": { - "mtimeMs": 1778549008870.013, - "size": 1944, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이거에 기능 개선을 하고 싶어. 너가 기획과 방향성을 정해주면 좋...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0008-volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이.md": { - "mtimeMs": 1778664139928.3345, - "size": 1625, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0009-이-프로젝트의-구조에-대해서-설명해봐.md": { - "mtimeMs": 1778720117388.955, - "size": 1526, - "lines": 19, - "role": "ADR: 이 프로젝트의 구조에 대해서 설명해봐.", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0010-volumes-data-project-antigravity-connectai-self-reflection-기.md": { - "mtimeMs": 1778720117389.4595, - "size": 1487, - "lines": 19, - "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI self reflection 기능이 적용되었는지 확인해줘. 1인 ...", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0011-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md": { - "mtimeMs": 1778720344688.4775, - "size": 1604, - "lines": 19, - "role": "ADR: E:\\Wiki\\connectai self reflection 기능이 있는데 어떻게 SELF REFLECTION이 반영되는지 분석해줘.", - "imports": [] - }, - "docs/records/ConnectAI/decisions/ADR-0012-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md": { - "mtimeMs": 1778720368351.8215, - "size": 1448, - "lines": 19, - "role": "ADR: E:\\Wiki\\connectai self reflection 기능이 있는데 어떻게 SELF REFLECTION이 반영되는지 분석해줘.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": { - "mtimeMs": 1778028987330.4185, - "size": 1564, - "lines": 30, - "role": "Development Log: Answer Format Readability Tuning", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_connectai_project_knowledge_overview.md": { - "mtimeMs": 1778028987330.9385, - "size": 4661, - "lines": 121, - "role": "Astra Project Knowledge Overview", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_local-path-code-review-preflight.md": { - "mtimeMs": 1778028987330.9385, - "size": 1890, - "lines": 35, - "role": "Development Log: Local Path Code Review Preflight", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_no-evidence-no-project-claim.md": { - "mtimeMs": 1778028987331.969, - "size": 1563, - "lines": 35, - "role": "Development Log: No Evidence, No Project Claim", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_progressive-answer-format.md": { - "mtimeMs": 1778028987332.698, - "size": 1223, - "lines": 29, - "role": "Development Log: Progressive Answer Format", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_project-claim-output-brake.md": { - "mtimeMs": 1778028987333.7078, - "size": 1524, - "lines": 35, - "role": "Development Log: Project Claim Output Brake", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_project-claim-policy-enforcement.md": { - "mtimeMs": 1778028987334.2126, - "size": 1551, - "lines": 35, - "role": "Development Log: Project Claim Policy Enforcement", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_query-intent-search-tuning.md": { - "mtimeMs": 1778028987335.4814, - "size": 1946, - "lines": 35, - "role": "Development Log: Query Intent Search Tuning", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_remove-local-template-replies.md": { - "mtimeMs": 1778028987335.4814, - "size": 1074, - "lines": 25, - "role": "Development Log: Remove Local Template Replies", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-02_second-brain-trace-quality-tuning.md": { - "mtimeMs": 1778028987336.4841, - "size": 1467, - "lines": 26, - "role": "Development Log: Second Brain Trace Quality Tuning", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-03_connectai_project_knowledge_overview.md": { - "mtimeMs": 1778028987336.988, - "size": 4787, - "lines": 121, - "role": "Astra Project Knowledge Overview", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-오늘-많은-것을-업데이트했어-많_implementation.md": { - "mtimeMs": 1778028987337.4993, - "size": 1858, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 오늘 많은 것을 업데이트했어. 많이 고친것 같지만 그럼에도 불구하...", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-이-프로젝트-분석해줘-volum_implementation.md": { - "mtimeMs": 1778028987337.4993, - "size": 1770, - "lines": 23, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 분석해줘./Volumes/Data/project/An...", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-이-프로젝트-분석해줘_implementation.md": { - "mtimeMs": 1778028987338.1978, - "size": 1749, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 분석해줘.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-2.md": { - "mtimeMs": 1778664139929.635, - "size": 1597, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-3.md": { - "mtimeMs": 1778664139930.2983, - "size": 1663, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-4.md": { - "mtimeMs": 1778664139930.8157, - "size": 1739, - "lines": 24, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation.md": { - "mtimeMs": 1778664139931.329, - "size": 706, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업할거야_implementation.md": { - "mtimeMs": 1778720117403.2517, - "size": 1012, - "lines": 22, - "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업할거야", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-13_너는-분석-요청하거나-내가-작업-요청을-할때-connectai-architecture-md-문서를-참고하고-_implementation.md": { - "mtimeMs": 1778720117403.2517, - "size": 1760, - "lines": 22, - "role": "Development Log: 너는 분석 요청하거나 내가 작업 요청을 할때 connectai architecture.md 문서를 참고하고 작업을 하나?", - "imports": [] - }, - "docs/records/ConnectAI/development/2026-05-14_reflector-에이전트가-1인-기업-에이전트-목록에는-안보이는데_implementation.md": { - "mtimeMs": 1778720474901.9106, - "size": 1519, - "lines": 24, - "role": "Development Log: REFLECTOR 에이전트가 1인 기업 에이전트 목록에는 안보이는데", - "imports": [] - }, - "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업-할-거야.md": { - "mtimeMs": 1778720117404.2578, - "size": 668, - "lines": 16, - "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업 할 거야.", - "imports": [] - }, - "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업할거야.md": { - "mtimeMs": 1778720117405.2607, - "size": 667, - "lines": 16, - "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업할거야", - "imports": [] - }, - "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-하위-폴더-포함해서.md": { - "mtimeMs": 1778720117405.2607, - "size": 736, - "lines": 16, - "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 하위 폴더 포함해서 딥 리서치 해줘. 최적화 할 부분...", - "imports": [] - }, - "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트를-작업할거야.md": { - "mtimeMs": 1778720117406.7637, - "size": 735, - "lines": 16, - "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트를 작업할거야.", - "imports": [] - }, - "docs/records/ConnectAI/planning/2026-05-02_project-chronicle-guard.md": { - "mtimeMs": 1778028987339.2349, - "size": 3004, - "lines": 58, - "role": "Feature Plan: Project Chronicle Guard", - "imports": [] - }, - "docs/records/ConnectAI/planning/2026-05-02_second-brain-trace-mode.md": { - "mtimeMs": 1778028987339.818, - "size": 1503, - "lines": 36, - "role": "Feature Plan: Second Brain Trace Mode", - "imports": [] - }, - "docs/records/ConnectAI/planning/2026-05-13_상세하게-아키텍처-기준으로-설명해줘.md": { - "mtimeMs": 1778720117406.7637, - "size": 1260, - "lines": 40, - "role": "Feature Plan: 상세하게 아키텍처 기준으로 설명해줘.", - "imports": [] - }, - "docs/records/ConnectAI/project-profile.md": { - "mtimeMs": 1778028987341.925, - "size": 987, - "lines": 30, - "role": "Project Profile", - "imports": [] - }, - "docs/records/ConnectAI/README.md": { - "mtimeMs": 1778028987316.5518, - "size": 616, - "lines": 18, - "role": "Astra Project Chronicle Records", - "imports": [] - }, - "docs/records/ConnectAI/timeline.md": { - "mtimeMs": 1778728474718.0542, - "size": 9652, - "lines": 146, - "role": "Project Timeline", - "imports": [] - }, - "docs/refactoring_roadmap.md": { - "mtimeMs": 1778232062143.956, - "size": 3176, - "lines": 53, - "role": "🛠️ ConnectAI 아키텍처 리팩토링 로드맵", - "imports": [] - }, "docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md": { - "mtimeMs": 1778664139927.3354, - "size": 12706, + "mtimeMs": 1778592247000, + "size": 12254, "lines": 452, "role": "Telegram Remote Execution 기획서", "imports": [] }, "docs/UX_UI_Consistency_Guidelines.md": { - "mtimeMs": 1778028987311.5012, - "size": 2553, + "mtimeMs": 1777808065000, + "size": 2509, "lines": 44, "role": "UX/UI Consistency Guidelines", "imports": [] + }, + "docs/docs/records/docs/README.md": { + "mtimeMs": 1777949758000, + "size": 427, + "lines": 18, + "role": "docs Chronicle Records", + "imports": [] + }, + "docs/docs/records/docs/bugs/BUG-0001-viewed-integration-retrieval-test-ts-1-59-integration-retrie.md": { + "mtimeMs": 1777949758000, + "size": 2059, + "lines": 16, + "role": "Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ...", + "imports": [] + }, + "docs/docs/records/docs/chronicle.config.json": { + "mtimeMs": 1777949758000, + "size": 522, + "lines": 11, + "role": "JSON configuration", + "imports": [] + }, + "docs/docs/records/docs/project-profile.md": { + "mtimeMs": 1777949758000, + "size": 586, + "lines": 31, + "role": "Project Profile", + "imports": [] + }, + "docs/docs/records/docs/timeline.md": { + "mtimeMs": 1777949758000, + "size": 210, + "lines": 7, + "role": "Project Timeline", + "imports": [] + }, + "docs/records/ConnectAI/README.md": { + "mtimeMs": 1777808202000, + "size": 598, + "lines": 18, + "role": "Astra Project Chronicle Records", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0001-volumes-data-project-antigravity-connectai-프로젝트-코드-리뷰-해줄-수-있.md": { + "mtimeMs": 1777865266000, + "size": 1408, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0002-지금-내가-분석-요청하고-너가-답을-줄때-아래-템플릿에-맞춰-답을-써주고-있는데-개선-포인트가-있는지-확인해.md": { + "mtimeMs": 1777889979000, + "size": 2559, + "lines": 16, + "role": "Bug: 지금 내가 분석 요청하고 너가 답을 줄때 아래 템플릿에 맞춰 답을 써주고 있는데, 개선 포인트가 있는지 확인해줘. ## 내가 보는 위험 가장 큰...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0003-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { + "mtimeMs": 1777962835000, + "size": 1891, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0004-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { + "mtimeMs": 1777964236000, + "size": 1883, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0005-다시한번-답줘-volumes-data-project-antigravity-connectai-내-질문에-대한-.md": { + "mtimeMs": 1777965245000, + "size": 1868, + "lines": 16, + "role": "Bug: 다시한번 답줘. /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0006-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { + "mtimeMs": 1777965308000, + "size": 1623, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0007-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { + "mtimeMs": 1777965612000, + "size": 1823, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0008-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md": { + "mtimeMs": 1777966704000, + "size": 1737, + "lines": 16, + "role": "Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0009-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { + "mtimeMs": 1777977740000, + "size": 2295, + "lines": 16, + "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0010-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { + "mtimeMs": 1777981089000, + "size": 2339, + "lines": 16, + "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", + "imports": [] + }, + "docs/records/ConnectAI/bugs/BUG-0011-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { + "mtimeMs": 1777982331000, + "size": 2277, + "lines": 16, + "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", + "imports": [] + }, + "docs/records/ConnectAI/chronicle.config.json": { + "mtimeMs": 1778694061000, + "size": 416, + "lines": 11, + "role": "JSON configuration", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0001-volumes-data-project-antigravity-connectai-이-프로젝트를-지금-개발-중에-.md": { + "mtimeMs": 1777860282000, + "size": 1444, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트를 지금 개발 중에 있어. 코드 리뷰를 하고 잘된점과 ...", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0002-지금-너의-제2뇌-지식을-이용해서-아래-프로젝트-평가하고-앞으로-어느부분을-더-집중해서-개선을-하면-좋을지-.md": { + "mtimeMs": 1777869330000, + "size": 1878, + "lines": 19, + "role": "ADR: 지금 너의 제2뇌 지식을 이용해서 아래 프로젝트 평가하고 앞으로 어느부분을 더 집중해서 개선을 하면 좋을지 알려주면 좋겠어. /Volumes/D...", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0003-volumes-data-project-antigravity-connectai-이-프로젝트-자체를-나는-자비스.md": { + "mtimeMs": 1777877376000, + "size": 1786, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 자체를 나는 자비스와 같은 툴로 만드는 것이 내 목표...", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0004-volumes-data-project-antigravity-connectai-이-프로젝트-자체를-나는-자비스.md": { + "mtimeMs": 1777878318000, + "size": 1472, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 자체를 나는 자비스와 같은 툴로 만드는 것이 내 목표...", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0005-volumes-data-project-antigravity-connectai-이-프로젝트-아키텍처-분석해줘.md": { + "mtimeMs": 1777889802000, + "size": 1512, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 아키텍처 분석해줘.", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0006-volumes-data-project-antigravity-connectai-프로젝트에-대해서-너가-사용자-.md": { + "mtimeMs": 1777902312000, + "size": 1604, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트에 대해서 너가 사용자 입장에서 평가 해주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0007-volumes-data-project-antigravity-connectai-이거에-기능-개선을-하고-싶어-.md": { + "mtimeMs": 1778398958000, + "size": 1925, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 이거에 기능 개선을 하고 싶어. 너가 기획과 방향성을 정해주면 좋...", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0008-volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이.md": { + "mtimeMs": 1778600479000, + "size": 1606, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0009-이-프로젝트의-구조에-대해서-설명해봐.md": { + "mtimeMs": 1778678639000, + "size": 1507, + "lines": 19, + "role": "ADR: 이 프로젝트의 구조에 대해서 설명해봐.", + "imports": [] + }, + "docs/records/ConnectAI/decisions/ADR-0010-volumes-data-project-antigravity-connectai-self-reflection-기.md": { + "mtimeMs": 1778689955000, + "size": 1468, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI self reflection 기능이 적용되었는지 확인해줘. 1인 ...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": { + "mtimeMs": 1777808065000, + "size": 1534, + "lines": 30, + "role": "Development Log: Answer Format Readability Tuning", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_connectai_project_knowledge_overview.md": { + "mtimeMs": 1777808211000, + "size": 4540, + "lines": 121, + "role": "Astra Project Knowledge Overview", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_local-path-code-review-preflight.md": { + "mtimeMs": 1777808065000, + "size": 1855, + "lines": 35, + "role": "Development Log: Local Path Code Review Preflight", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_no-evidence-no-project-claim.md": { + "mtimeMs": 1777808065000, + "size": 1528, + "lines": 35, + "role": "Development Log: No Evidence, No Project Claim", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_progressive-answer-format.md": { + "mtimeMs": 1777808065000, + "size": 1194, + "lines": 29, + "role": "Development Log: Progressive Answer Format", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_project-claim-output-brake.md": { + "mtimeMs": 1777808065000, + "size": 1489, + "lines": 35, + "role": "Development Log: Project Claim Output Brake", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_project-claim-policy-enforcement.md": { + "mtimeMs": 1777808065000, + "size": 1516, + "lines": 35, + "role": "Development Log: Project Claim Policy Enforcement", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_query-intent-search-tuning.md": { + "mtimeMs": 1777808065000, + "size": 1911, + "lines": 35, + "role": "Development Log: Query Intent Search Tuning", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_remove-local-template-replies.md": { + "mtimeMs": 1777808065000, + "size": 1049, + "lines": 25, + "role": "Development Log: Remove Local Template Replies", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-02_second-brain-trace-quality-tuning.md": { + "mtimeMs": 1777808065000, + "size": 1441, + "lines": 26, + "role": "Development Log: Second Brain Trace Quality Tuning", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-03_connectai_project_knowledge_overview.md": { + "mtimeMs": 1777808211000, + "size": 4666, + "lines": 121, + "role": "Astra Project Knowledge Overview", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-오늘-많은-것을-업데이트했어-많_implementation.md": { + "mtimeMs": 1777986879000, + "size": 1836, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 오늘 많은 것을 업데이트했어. 많이 고친것 같지만 그럼에도 불구하...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-이-프로젝트-분석해줘-volum_implementation.md": { + "mtimeMs": 1777967233000, + "size": 1747, + "lines": 23, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 분석해줘./Volumes/Data/project/An...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-05_volumes-data-project-antigravity-connectai-이-프로젝트-분석해줘_implementation.md": { + "mtimeMs": 1777966822000, + "size": 1727, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 분석해줘.", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-2.md": { + "mtimeMs": 1778598784000, + "size": 1575, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-3.md": { + "mtimeMs": 1778599019000, + "size": 1641, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation-4.md": { + "mtimeMs": 1778600781000, + "size": 1715, + "lines": 24, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-12_volumes-data-project-antigravity-connectai-분석하고-부족한-부분이나-개선이_implementation.md": { + "mtimeMs": 1778598509000, + "size": 684, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 분석하고 부족한 부분이나 개선이 필요한 부분을 알려주면 좋겠어.", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업할거야_implementation.md": { + "mtimeMs": 1778691256000, + "size": 990, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업할거야", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-13_너는-분석-요청하거나-내가-작업-요청을-할때-connectai-architecture-md-문서를-참고하고-_implementation.md": { + "mtimeMs": 1778678912000, + "size": 1738, + "lines": 22, + "role": "Development Log: 너는 분석 요청하거나 내가 작업 요청을 할때 connectai architecture.md 문서를 참고하고 작업을 하나?", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업-할-거야.md": { + "mtimeMs": 1778690673000, + "size": 652, + "lines": 16, + "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업 할 거야.", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업할거야.md": { + "mtimeMs": 1778680095000, + "size": 651, + "lines": 16, + "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 작업할거야", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-하위-폴더-포함해서.md": { + "mtimeMs": 1778689036000, + "size": 720, + "lines": 16, + "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트 하위 폴더 포함해서 딥 리서치 해줘. 최적화 할 부분...", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트를-작업할거야.md": { + "mtimeMs": 1778677791000, + "size": 719, + "lines": 16, + "role": "Discussion: /Volumes/Data/project/Antigravity/ConnectAI 이 프로젝트를 작업할거야.", + "imports": [] + }, + "docs/records/ConnectAI/planning/2026-05-02_project-chronicle-guard.md": { + "mtimeMs": 1777808065000, + "size": 2946, + "lines": 58, + "role": "Feature Plan: Project Chronicle Guard", + "imports": [] + }, + "docs/records/ConnectAI/planning/2026-05-02_second-brain-trace-mode.md": { + "mtimeMs": 1777808065000, + "size": 1467, + "lines": 36, + "role": "Feature Plan: Second Brain Trace Mode", + "imports": [] + }, + "docs/records/ConnectAI/planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md": { + "mtimeMs": 1778693933000, + "size": 1340, + "lines": 40, + "role": "Feature Plan: Connectai architecture 문서 최신화 해줘.", + "imports": [] + }, + "docs/records/ConnectAI/planning/2026-05-13_상세하게-아키텍처-기준으로-설명해줘.md": { + "mtimeMs": 1778678870000, + "size": 1220, + "lines": 40, + "role": "Feature Plan: 상세하게 아키텍처 기준으로 설명해줘.", + "imports": [] + }, + "docs/records/ConnectAI/planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md": { + "mtimeMs": 1778694061000, + "size": 2970, + "lines": 40, + "role": "Feature Plan: 지금 connectai architecture.md 문서 내용 중 업데이트가 필요한 부분이 있는지 확인해줘. 그러고 최신화해줘. 너가 분석해", + "imports": [] + }, + "docs/records/ConnectAI/project-profile.md": { + "mtimeMs": 1777808208000, + "size": 957, + "lines": 30, + "role": "Project Profile", + "imports": [] + }, + "docs/records/ConnectAI/timeline.md": { + "mtimeMs": 1778694061000, + "size": 8783, + "lines": 134, + "role": "Project Timeline", + "imports": [] + }, + "docs/refactoring_roadmap.md": { + "mtimeMs": 1778171332000, + "size": 3123, + "lines": 53, + "role": "🛠️ ConnectAI 아키텍처 리팩토링 로드맵", + "imports": [] } } } \ No newline at end of file diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json index 39122f2..8a060b4 100644 --- a/docs/records/ConnectAI/chronicle.config.json +++ b/docs/records/ConnectAI/chronicle.config.json @@ -1,11 +1,11 @@ { "projectId": "connectai", - "projectName": "connectai", - "projectRoot": "E:\\Wiki\\connectai", - "recordRoot": "E:\\Wiki\\connectai\\docs\\records\\connectai", + "projectName": "ConnectAI", + "projectRoot": "/Volumes/Data/project/Antigravity/ConnectAI", + "recordRoot": "/Volumes/Data/project/Antigravity/ConnectAI/docs/records/ConnectAI", "description": "Auto-created by Project Architecture activation.", "corePurpose": "", "detailLevel": "standard", - "createdAt": "2026-05-14T00:57:32.245Z", - "updatedAt": "2026-05-14T04:39:56.139Z" + "createdAt": "2026-05-13T13:09:33.788Z", + "updatedAt": "2026-05-14T12:42:12.047Z" } diff --git a/docs/records/ConnectAI/planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md b/docs/records/ConnectAI/planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md new file mode 100644 index 0000000..f65584a --- /dev/null +++ b/docs/records/ConnectAI/planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md @@ -0,0 +1,40 @@ +# Feature Plan: Connectai architecture 문서 최신화 해줘. + +## 1. Feature Name +Connectai architecture 문서 최신화 해줘. + +## 2. Reason +Capture the current planning or architecture direction before implementation continues. + +## 3. Original User Request +Connectai architecture 문서 최신화 해줘. + +## 4. Interpreted User Intent +Connectai architecture 문서 최신화 해줘. + +## 5. Background +문서의 최신화를 위해 현재 내용과 업데이트 방향에 대한 구체적인 요구사항이 필요합니다. + +## 6. Scope +- Continue from the active project conversation. +- Use the selected project record folder automatically. + +## 7. Out Of Scope +- Manual record type selection. +- Blocking the user with record-writing prompts. + +## 8. Development Direction +문서의 최신화를 위해 현재 내용과 업데이트 방향에 대한 구체적인 요구사항이 필요합니다. + +## 9. Dependency Strategy +Prefer existing project modules and local Markdown records. + +## 10. Expected Value +Future work can resume with the latest project intent and reasoning preserved. + +## 11. Success Criteria +- The record is saved automatically after a meaningful project turn. +- The record stays under the active project. + +## 12. Developer Instruction +Use this record as lightweight context for the next development or review pass. diff --git a/docs/records/ConnectAI/planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md b/docs/records/ConnectAI/planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md new file mode 100644 index 0000000..544a3ee --- /dev/null +++ b/docs/records/ConnectAI/planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md @@ -0,0 +1,40 @@ +# Feature Plan: 지금 connectai architecture.md 문서 내용 중 업데이트가 필요한 부분이 있는지 확인해줘. 그러고 최신화해줘. 너가 분석해 + +## 1. Feature Name +지금 connectai architecture.md 문서 내용 중 업데이트가 필요한 부분이 있는지 확인해줘. 그러고 최신화해줘. 너가 분석해 + +## 2. Reason +Capture the current planning or architecture direction before implementation continues. + +## 3. Original User Request +지금 connectai architecture.md 문서 내용 중 업데이트가 필요한 부분이 있는지 확인해줘. 그러고 최신화해줘. 너가 분석해 + +## 4. Interpreted User Intent +지금 connectai architecture.md 문서 내용 중 업데이트가 필요한 부분이 있는지 확인해줘. 그러고 최신화해줘. 너가 분석해 + +## 5. Background +제가 분석을 수행하려면 먼저 `ARCHITECTURE_ANALYSIS.md` 파일의 실제 내용이 필요합니다. 이전 확인 결과, 해당 파일을 읽는 과정에서 접근에 실패했거나 내용을 확인할 수 없었습니다. 따라서 제가 문서의 최신화 작업을 시작하고 어떤 부분을 업데이트해야 할지 판단하기 위해서는 **해당 파일의 전체 내용을 제공**해 주시거나, 파일이 실제로 접근 가능한 상태인지 다시 확인해 주셔야 합니다. 파일 내용을 제공해 주시면, 그 내용을 바탕으로 현재 프로젝트 상황과 기술적 맥락을 고려하여 최신화 방향과 구체적인 수정 사항을 제시해 드리겠습니다. + +## 6. Scope +- Continue from the active project conversation. +- Use the selected project record folder automatically. + +## 7. Out Of Scope +- Manual record type selection. +- Blocking the user with record-writing prompts. + +## 8. Development Direction +제가 분석을 수행하려면 먼저 `ARCHITECTURE_ANALYSIS.md` 파일의 실제 내용이 필요합니다. 이전 확인 결과, 해당 파일을 읽는 과정에서 접근에 실패했거나 내용을 확인할 수 없었습니다. 따라서 제가 문서의 최신화 작업을 시작하고 어떤 부분을 업데이트해야 할지 판단하기 위해서는 **해당 파일의 전체 내용을 제공**해 주시거나, 파일이 실제로 접근 가능한 상태인지 다시 확인해 주셔야 합니다. 파일 내용을 제공해 주시면, 그 내용을 바탕으로 현재 프로젝트 상황과 기술적 맥락을 고려하여 최신화 방향과 구체적인 수정 사항을 제시해 드리겠습니다. + +## 9. Dependency Strategy +Prefer existing project modules and local Markdown records. + +## 10. Expected Value +Future work can resume with the latest project intent and reasoning preserved. + +## 11. Success Criteria +- The record is saved automatically after a meaningful project turn. +- The record stays under the active project. + +## 12. Developer Instruction +Use this record as lightweight context for the next development or review pass. diff --git a/docs/records/ConnectAI/timeline.md b/docs/records/ConnectAI/timeline.md index 5d7bce0..e2d2964 100644 --- a/docs/records/ConnectAI/timeline.md +++ b/docs/records/ConnectAI/timeline.md @@ -127,23 +127,8 @@ ## 2026-05-13 - Auto development record created: development/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업할거야_implementation.md -## 2026-05-14 -- Auto decision record created: decisions\ADR-0011-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md +## 2026-05-13 +- Auto planning record created: planning/2026-05-13_connectai-architecture-문서-최신화-해줘.md -## 2026-05-14 -- Auto decision record created: decisions\ADR-0012-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md - -## 2026-05-14 -- Auto development record created: development\2026-05-14_reflector-에이전트가-1인-기업-에이전트-목록에는-안보이는데_implementation.md - -## 2026-05-14 -- Auto bug record created: bugs\BUG-0012-질문이-있어-논문을-쓰려고해-논문-주제는-서비스적이-아닌-사용자가-ai에게-구조로-질문을-해야-사용자의-의도.md - -## 2026-05-14 -- Auto bug record created: bugs\BUG-0013-thesis-paper를-쓰려고-하는데-아래와-같이-쓰면-좋을까-이런-식으로-쓰면-되지-않을까-싶음-1-in.md - -## 2026-05-14 -- Auto bug record created: bugs\BUG-0014-논문-outline-title-인간-ai-상호작용에서-의도-정렬을-높이기-위한-최소-질의-구조-연구-또는-사.md - -## 2026-05-14 -- Auto discussion record created: discussions\2026-05-14_최성연-알아-칼리버스에서-근무한데.md +## 2026-05-13 +- Auto planning record created: planning/2026-05-13_지금-connectai-architecture-md-문서-내용-중-업데이트가-필요한-부분이-있는지-확인해줘-.md diff --git a/media/sidebar.css b/media/sidebar.css index 65ee44e..f0b1e4c 100644 --- a/media/sidebar.css +++ b/media/sidebar.css @@ -749,12 +749,24 @@ margin: 4px 0; font-size: 10.5px; color: var(--text-primary); + opacity: 1; + transition: opacity 600ms ease, margin 600ms ease, padding 600ms ease, max-height 600ms ease; + max-height: 80px; + overflow: hidden; } .arch-refresh-card .arc-head { color: var(--text-bright); font-weight: 600; margin-bottom: 2px; } .arch-refresh-card .arc-meta { color: var(--text-dim); font-size: 9.5px; } .arch-refresh-card.no-changes { border-style: dashed; } + .arch-refresh-card.fading { + opacity: 0; + max-height: 0; + margin: 0; + padding-top: 0; + padding-bottom: 0; + border-width: 0; + } /* Inline model picker that lives in the input footer, next to the attach button. Replaces the (now-removed) bottom model row + the separate diff --git a/media/sidebar.js b/media/sidebar.js index 21e741b..6b58b14 100644 --- a/media/sidebar.js +++ b/media/sidebar.js @@ -932,6 +932,10 @@ if (chatEl) { chatEl.appendChild(card); chatEl.scrollTop = chatEl.scrollHeight; + setTimeout(() => { + card.classList.add('fading'); + card.addEventListener('transitionend', () => card.remove(), { once: true }); + }, 3000); } break; } diff --git a/package.json b/package.json index 26da7f0..3dbe83e 100644 --- a/package.json +++ b/package.json @@ -416,6 +416,11 @@ "type": "boolean", "default": true, "description": "Insert a Self-Reflection (Reflector) stage between Researcher and Writer in the multi-agent workflow. The Reflector critically reviews the plan and research output (gaps, contradictions, unsupported claims, drift from the original objective) and feeds a structured critique to the Writer, which must address it before producing the final report. Reflection failures are non-fatal (the Writer still runs with empty critique). Disable to save one LLM call per mission if you prioritize latency or are running on a very small model." + }, + "g1nation.autoLessonFromReflection": { + "type": "boolean", + "default": true, + "description": "Persist substantive Reflector critiques to the active brain as lesson cards under `lessons/auto-reflector/`. Future missions automatically retrieve these cards (via the existing Experience-Memory pipeline) and inject them as ‘[⚠ ACTIVE LESSONS — verify these BEFORE finalizing]’ guardrails into Planner/Researcher/Writer context. A repeated critique (similar title) bumps `occurrences` and escalates `severity` (low→medium→high) instead of duplicating the card, so recurring patterns get louder over time. Disable to keep critiques single-mission only." } } } diff --git a/src/agents/reflectionPersister.ts b/src/agents/reflectionPersister.ts new file mode 100644 index 0000000..cfa3a5b --- /dev/null +++ b/src/agents/reflectionPersister.ts @@ -0,0 +1,308 @@ +/** + * ============================================================ + * Reflection → Lesson persistence + * + * Take the Reflector agent's structured critique and persist any substantive + * findings as a `lesson` card in `/lessons/auto-reflector/`. The + * existing brain retrieval pipeline (see `retrieval/brainIndex.ts` + + * `retrieval/lessonHelpers.ts`) then automatically boosts these cards and + * injects them as an `[⚠ ACTIVE LESSONS — verify these BEFORE finalizing your + * answer]` block in *future* missions' Planner/Researcher/Writer context, so a + * critique caught in mission N becomes a guardrail in mission N+1. + * + * Recurrence handling: if a similarly-titled auto-reflector lesson already + * exists, we bump `occurrences:` and escalate `severity` (low→medium→high) + * instead of producing a duplicate card. Same pattern reappearing 3+ times + * surfaces as severity:high, which the lesson retrieval/scoring layer + * propagates as a stronger guardrail. + * ============================================================ + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import { logInfo, logError } from '../utils'; +import { + lessonSlug, + parseLessonFrontmatter, + bumpLessonOccurrences, + normalizeLessonTitle, +} from '../retrieval/lessonHelpers'; + +interface ReflectionSections { + alignment: string; + gaps: string; + contradictions: string; + unsupported: string; + guidance: string; +} + +/** + * Pull the body of a `## ……` section out of the Reflector's markdown. Line-scan rather + * than a multi-line regex so it survives emoji headers and trailing whitespace without + * leaning on JS-unsupported regex features. + */ +function extractSection(text: string, headerKeyword: string): string { + if (!text) return ''; + const kw = headerKeyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const headerRe = new RegExp(`^##[^\\n]*${kw}[^\\n]*$`, 'i'); + const lines = text.split(/\r?\n/); + const buf: string[] = []; + let inSection = false; + for (const line of lines) { + if (headerRe.test(line)) { inSection = true; continue; } + if (inSection && /^##\s/.test(line)) break; + if (inSection) buf.push(line); + } + return buf.join('\n').trim(); +} + +function parseReflection(text: string): ReflectionSections { + return { + alignment: extractSection(text, 'Alignment'), + gaps: extractSection(text, 'Gaps'), + contradictions: extractSection(text, 'Contradictions'), + unsupported: extractSection(text, 'Unsupported'), + guidance: extractSection(text, 'Guidance'), + }; +} + +/** + * "Trivial" = the Reflector explicitly said nothing was found, or the section is too short to be + * meaningful. We don't want to spam the brain with `발견되지 않음` cards. + */ +function isTrivial(section: string): boolean { + if (!section) return true; + const stripped = section.replace(/[-*•·\s\n]+/g, '').toLowerCase(); + if (!stripped) return true; + if (/^(없음|발견되지않음|해당없음|na|nothing|none|n\/a)$/.test(stripped)) return true; + if (stripped.length < 12) return true; + return false; +} + +function hasSubstantiveContent(sections: ReflectionSections): boolean { + return !isTrivial(sections.gaps) + || !isTrivial(sections.contradictions) + || !isTrivial(sections.unsupported) + || !isTrivial(sections.guidance); +} + +/** Pick a short (≤80 char) title from the first actionable bullet across the substantive sections. */ +function deriveTitle(sections: ReflectionSections): string { + const order = [sections.guidance, sections.gaps, sections.unsupported, sections.contradictions]; + for (const sec of order) { + if (isTrivial(sec)) continue; + const firstBullet = sec.split('\n').find((l) => /^\s*[-*•]/.test(l)); + const raw = (firstBullet || sec.split('\n')[0] || '').replace(/^\s*[-*•]\s*/, '').trim(); + if (raw.length >= 10) { + return raw.length > 80 ? raw.slice(0, 77) + '…' : raw; + } + } + return 'Reflector finding (auto)'; +} + +function severityFor(occurrences: number): 'low' | 'medium' | 'high' { + if (occurrences >= 3) return 'high'; + if (occurrences >= 2) return 'medium'; + return 'low'; +} + +function buildLessonCard(params: { + title: string; + today: string; + situation: string; + sections: ReflectionSections; + severity: 'low' | 'medium' | 'high'; +}): string { + const { title, today, situation, sections, severity } = params; + const safeTitle = title.replace(/\n/g, ' ').trim(); + + const riskParts = [ + isTrivial(sections.gaps) ? '' : `**Gaps**\n${sections.gaps.trim()}`, + isTrivial(sections.unsupported) ? '' : `**Unsupported claims**\n${sections.unsupported.trim()}`, + isTrivial(sections.contradictions) ? '' : `**Contradictions**\n${sections.contradictions.trim()}`, + ].filter(Boolean); + const risk = riskParts.length ? riskParts.join('\n\n') : ''; + + const rootCause = isTrivial(sections.alignment) + ? '<원본 요청 대비 이탈/근본 원인이 critique에 명시되지 않음 — 회고 시 보강>' + : sections.alignment.trim(); + + const fix = isTrivial(sections.guidance) + ? '' + : sections.guidance.trim(); + + const bullets = isTrivial(sections.guidance) + ? [] + : sections.guidance + .split('\n') + .map((l) => l.trim()) + .filter((l) => /^[-*•]/.test(l)) + .map((l) => l.replace(/^[-*•]\s*/, '')) + .filter((l) => l.length > 0) + .slice(0, 6); + const checklistBlock = (bullets.length + ? bullets + : ['<다음 유사 mission 전에 위 Gaps / Unsupported 항목을 사전 점검>'] + ).map((c) => `- ${c}`).join('\n'); + + return [ + '---', + 'type: lesson', + `title: ${safeTitle}`, + 'applies-to: []', + `severity: ${severity}`, + 'source: auto-reflector', + 'occurrences: 1', + `last-seen: ${today}`, + '---', + '', + `# Lesson: ${safeTitle}`, + '', + '## Situation', + situation, + '', + '## Mistake / Risk', + risk, + '', + '## Root Cause', + rootCause, + '', + '## Fix', + fix, + '', + '## Prevention Checklist', + checklistBlock, + '', + '## Applies To', + '- auto-reflector', + '', + ].join('\n'); +} + +/** + * Cheap title-overlap match against existing auto-reflector cards. Exact-normalized-title hit wins + * outright; otherwise the best ≥60% term-overlap candidate is returned (or none). + */ +function findExistingLesson(autoDir: string, newTitle: string): { filePath: string; content: string } | undefined { + let entries: string[]; + try { + entries = fs.readdirSync(autoDir).filter((f) => f.endsWith('.md')); + } catch { + return undefined; + } + const newNorm = normalizeLessonTitle(newTitle); + if (!newNorm) return undefined; + const tokenize = (norm: string) => new Set(norm.match(/[a-z0-9]{3,}|[가-힣]{2,}/g) || []); + const newTerms = tokenize(newNorm); + + let best: { filePath: string; content: string; score: number } | undefined; + for (const f of entries) { + const filePath = path.join(autoDir, f); + let content = ''; + try { + content = fs.readFileSync(filePath, 'utf8'); + } catch { + continue; + } + const fm = parseLessonFrontmatter(content); + const existingTitle = (fm.title || '').trim(); + const existingNorm = normalizeLessonTitle(existingTitle); + if (!existingNorm) continue; + if (existingNorm === newNorm) return { filePath, content }; + if (newTerms.size === 0) continue; + const existingTerms = tokenize(existingNorm); + let overlap = 0; + for (const t of newTerms) if (existingTerms.has(t)) overlap++; + const score = overlap / newTerms.size; + if (score >= 0.6 && (!best || score > best.score)) { + best = { filePath, content, score }; + } + } + return best ? { filePath: best.filePath, content: best.content } : undefined; +} + +/** + * Replace (or insert) the `severity:` line in a lesson's frontmatter. Returns content unchanged if + * there is no frontmatter block — caller is responsible for not calling on free-form notes. + */ +function setSeverityInFrontmatter(content: string, severity: 'low' | 'medium' | 'high'): string { + if (!/^?---\s*\n/.test(content)) return content; + const end = content.indexOf('\n---', 4); + if (end < 0) return content; + let block = content.slice(0, end); + const rest = content.slice(end); + if (/^\s*severity\s*:/m.test(block)) { + block = block.replace(/^(\s*severity\s*:\s*).*$/m, `$1${severity}`); + } else { + block += `\nseverity: ${severity}`; + } + return block + rest; +} + +export interface PersistResult { + /** Absolute path of the file written or bumped. */ + filePath: string; + /** True if an existing lesson was updated (occurrences++); false for a new card. */ + bumped: boolean; + /** Current occurrences value after the operation. */ + occurrences: number; + /** Current severity after the operation. */ + severity: 'low' | 'medium' | 'high'; +} + +/** + * Persist the Reflector's critique as a lesson card. Returns `undefined` when nothing was written + * (no brain path, critique trivial, IO failure — all soft-fail by design; never throws). + */ +export function persistReflectionAsLesson(params: { + reflection: string; + originalPrompt: string; + brainDir: string; +}): PersistResult | undefined { + const { reflection, originalPrompt, brainDir } = params; + if (!reflection || !brainDir || !path.isAbsolute(brainDir)) return undefined; + + try { + const sections = parseReflection(reflection); + if (!hasSubstantiveContent(sections)) { + logInfo('[reflectionPersister] critique is trivial — skipping lesson dump.'); + return undefined; + } + + const today = new Date().toISOString().slice(0, 10); + const title = deriveTitle(sections); + const autoDir = path.join(brainDir, 'lessons', 'auto-reflector'); + try { + fs.mkdirSync(autoDir, { recursive: true }); + } catch { + // Fall through; the write below will surface the real failure. + } + + const existing = findExistingLesson(autoDir, title); + if (existing) { + let bumped = bumpLessonOccurrences(existing.content, today); + const newOcc = parseLessonFrontmatter(bumped).occurrences ?? 1; + const sev = severityFor(newOcc); + bumped = setSeverityInFrontmatter(bumped, sev); + fs.writeFileSync(existing.filePath, bumped, 'utf8'); + logInfo(`[reflectionPersister] bumped existing lesson (occ=${newOcc}, severity=${sev}): ${existing.filePath}`); + return { filePath: existing.filePath, bumped: true, occurrences: newOcc, severity: sev }; + } + + const situation = (originalPrompt || '').slice(0, 400).replace(/\s+/g, ' ').trim() + || ''; + const card = buildLessonCard({ title, today, situation, sections, severity: 'low' }); + + let filePath = path.join(autoDir, `${today}-${lessonSlug(title)}.md`); + let n = 2; + while (fs.existsSync(filePath)) { + filePath = path.join(autoDir, `${today}-${lessonSlug(title)}-${n++}.md`); + } + fs.writeFileSync(filePath, card, 'utf8'); + logInfo(`[reflectionPersister] new lesson saved: ${filePath}`); + return { filePath, bumped: false, occurrences: 1, severity: 'low' }; + } catch (e: any) { + logError('[reflectionPersister] failed to persist lesson.', { error: e?.message ?? String(e) }); + return undefined; + } +} diff --git a/src/config.ts b/src/config.ts index b65a9f3..bee4409 100644 --- a/src/config.ts +++ b/src/config.ts @@ -73,6 +73,13 @@ export interface IAgentConfig { * false: 기존 3단계(Planner→Researcher→Writer) 그대로 — 1 LLM 호출 절약 (저성능 모델/저지연 우선 시). */ enableReflection: boolean; + /** + * [Self-Reflection → Knowledge] Reflector critique 중 의미 있는 발견을 brain의 + * `lessons/auto-reflector/`에 lesson 카드로 영속화할지 여부. true(기본)이면 동일/유사 패턴이 + * 다음 미션에서 retrieval로 자동 주입되고, 같은 critique이 반복될수록 occurrences/severity가 + * 누적됨. false면 critique은 그 미션 한정으로만 사용되고 사라짐. + */ + autoLessonFromReflection: boolean; } // ─── 경로 정규화 유틸리티 ─── @@ -160,6 +167,7 @@ export function getConfig(): IAgentConfig { cfg.get('knowledgeMix.secondBrainWeight', 50) ))), enableReflection: cfg.get('enableReflection', true), + autoLessonFromReflection: cfg.get('autoLessonFromReflection', true), }; } diff --git a/src/lib/engine.ts b/src/lib/engine.ts index de73cea..abbcdf5 100644 --- a/src/lib/engine.ts +++ b/src/lib/engine.ts @@ -4,10 +4,12 @@ import * as path from 'path'; import { createHash } from 'crypto'; import { lockManager } from '../core/lock'; import { actionQueue } from '../core/queue'; -import { logInfo, logError } from '../utils'; +import { logInfo, logError, getActiveBrainProfile } from '../utils'; import { AgentDataValidator, PerformanceProfiler, CognitionAudit } from './diagnostics'; import { WikiFormatter } from './formatter'; import { ErrorType, RecoveryRule } from '../types/interfaces'; +import { getConfig } from '../config'; +import { persistReflectionAsLesson } from '../agents/reflectionPersister'; export { ErrorType, RecoveryRule }; // ───────────────────────────────────────────── @@ -557,6 +559,30 @@ export class AgentEngine { logError(`[AgentEngine] Reflector soft-fail — Writer 계속 진행: ${reflErr?.message || reflErr}`); reflection = ''; } + + // [Self-Reflection → Knowledge] Reflector가 의미 있는 critique을 내놓았으면 + // brain에 lesson 카드로 영속화한다. 다음 미션의 Planner/Researcher/Writer는 + // 기존 lesson retrieval 경로를 통해 이 카드를 자동으로 inject받는다. + // 동일 패턴 재발 시 카드를 새로 만들지 않고 occurrences를 증가시키며 severity를 + // low→medium→high로 가중. fire-and-forget으로 미션 흐름을 막지 않는다. + if (reflection && getConfig().autoLessonFromReflection !== false) { + try { + const brainDir = getActiveBrainProfile()?.localBrainPath; + if (brainDir) { + const result = persistReflectionAsLesson({ + reflection, + originalPrompt: prompt, + brainDir, + }); + if (result) { + logInfo(`[AgentEngine] Reflector critique → lesson (${result.bumped ? 'bumped' : 'new'}, severity=${result.severity}, occ=${result.occurrences}).`); + } + } + } catch (persistErr: any) { + // Lesson 영속화 실패는 미션 결과에 영향 없음 — 로그만 남기고 계속 진행. + logError(`[AgentEngine] lesson 영속화 실패 (무시): ${persistErr?.message || persistErr}`); + } + } } // --- Phase 4: Writer ---