diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md index ee5233b..1997701 100644 --- a/.astra/project-context/architecture.md +++ b/.astra/project-context/architecture.md @@ -3,20 +3,20 @@ ## Snapshot -- **Workspace**: `connectai` `v2.2.63` _(absolute path varies by environment; resolved from the active VS Code workspace)_ +- **Workspace**: `ConnectAI` `v2.2.73` _(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**: 276 source files, ~55,424 lines across 5 top-level modules. +- **Stats**: 285 source files, ~56,679 lines across 5 top-level modules. ## Last Refresh -- **Time**: 2026-05-22T10:04:22.779Z +- **Time**: 2026-05-23T06:46:38.895Z - **Files newly analysed**: 5 -- **Files reused from cache**: 271 +- **Files reused from cache**: 280 ## Directory Map ```mermaid mindmap - root((connectai)) + root((ConnectAI)) src/ features/ core/ @@ -31,7 +31,6 @@ mindmap docs/ records/ docs/ - Meeting/ ``` ## Module Dependencies @@ -42,7 +41,7 @@ flowchart LR media["media/
6 files"] tests["tests/
35 files"] core_py["core_py/
6 files"] - docs["docs/
90 files"] + docs["docs/
99 files"] tests --> src ``` @@ -65,14 +64,14 @@ flowchart LR ## Modules -### `src/` — 139 files, ~38,303 lines +### `src/` — 139 files, ~39,180 lines **Sub-directories** - `src/features/` (66) — Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel H - `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) @@ -82,22 +81,22 @@ flowchart LR - `src/scaffolder/` (2) — Scaffolder template catalog. Templates are pure data — (projectName) => { [relativePath]: contents }. New templates are **Key files** -- `src/utils.ts` (408 lines) -- `src/config.ts` (301 lines) +- `src/utils.ts` (448 lines) +- `src/config.ts` (394 lines) - `src/features/company/types.ts` (446 lines) — Type definitions for the 1인 기업 (One-Person Company) mode. The mode turns the user into a virtual CEO that dispatches work to a roster of specialist agents. Each turn produces a session directory conta - `src/core/services.ts` (164 lines) - `src/lib/paths.ts` (151 lines) - `src/features/company/companyConfig.ts` (896 lines) — State + config plumbing for 1인 기업 모드. Two surfaces: - CompanyState (runtime data: enabled flag, company name, which agents are active, per-agent model overrides). Persisted in VS Code's globalState so -- `src/sidebarProvider.ts` (4226 lines) +- `src/sidebarProvider.ts` (4327 lines) - `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` (536 lines) — Scoring Engine — TF-IDF + Bilingual Tokenizer 단순 includes() 키워드 매칭을 넘어서, TF-IDF 가중치 기반의 문서 스코어링을 제공합니다. 한국어/영어 양국어 토크나이저를 포함합니다. - `src/skills/agentKnowledgeMap.ts` (374 lines) - `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/agent.ts` (3823 lines) +- `src/agent.ts` (4076 lines) - `src/features/providers/types.ts` (63 lines) — Cloud LLM provider routing — model id prefix → provider id 매핑. Prefix 규칙: openrouter:anthropic/claude-3.5-sonnet → { provider: 'openrouter', model: 'anthropic/claude-3.5-sonnet' } anthropic:claude-3-5 -- `src/lib/engine.ts` (906 lines) +- `src/lib/engine.ts` (940 lines) - `src/retrieval/brainIndex.ts` (325 lines) — Brain Index — persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 매 질의마다 브레인의 모든 .md 파일을 읽고 토크나이즈해서 TF-IDF 점수를 계산했습니다 — 파일 수가 많아지면 그게 병목입니다. 이 모듈은 /.astra/brain-index.json 에 -- `src/features/company/dispatcher.ts` (1437 lines) — 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 +- `src/features/company/dispatcher.ts` (1435 lines) — 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 - `src/features/providers/providerConfig.ts` (78 lines) — Provider 별 API key + enable 토글 저장소. 설계: - API key 자체는 vscode.SecretStorage (secrets) 에 — settings.json / Settings Sync 침범 안 받음. - enabled 토글은 일반 settings (g1nation.providers..enabled) — 사용자가 패널에서 - `src/features/approval/approvalQueue.ts` (129 lines) - `src/integrations/telegram/telegramClient.ts` (154 lines) @@ -106,19 +105,19 @@ flowchart LR - `src/features/company/pixelOfficeState.ts` (286 lines) — Pixel Office — Agent Work Pipeline 상태를 시각화하는 UI Layer 전용 모듈. ─────────────────── 설계 원칙 ─────────────────── 1. Agent 핵심 판단 로직을 절대 바꾸지 않는다. Pipeline 진행, contract 합의, 검수 cycle, 승인 게이트 — 모두 기존 dispatcher - `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 - `src/features/projectArchitecture/scanner.ts` (644 lines) — 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 -- `src/lib/contextManager.ts` (275 lines) — Context Manager (컨텍스트 한계 관리) "context length = 132k" 는 "답변을 132k 토큰까지 생성해도 된다" 가 아닙니다. 시스템 프롬프트 + 대화 기록 + 입력 문서 + 생성될 답변 + 여유분 ≤ context length 이 모듈은 요청을 보내기 전에 입력 토큰을 추정하고, - 동적으로 출력 상한(maxTokens)을 계 +- `src/lib/contextManager.ts` (278 lines) — Context Manager (컨텍스트 한계 관리) "context length = 132k" 는 "답변을 132k 토큰까지 생성해도 된다" 가 아닙니다. 시스템 프롬프트 + 대화 기록 + 입력 문서 + 생성될 답변 + 여유분 ≤ context length 이 모듈은 요청을 보내기 전에 입력 토큰을 추정하고, - 동적으로 출력 상한(maxTokens)을 계 -### `media/` — 6 files, ~7,342 lines +### `media/` — 6 files, ~7,455 lines **Key files** -- `media/sidebar.css` (2078 lines) — Stylesheet -- `media/sidebar.js` (3677 lines) -- `media/sidebar.html` (545 lines) — Astra +- `media/sidebar.css` (2068 lines) — Stylesheet +- `media/sidebar.js` (3807 lines) +- `media/sidebar.html` (538 lines) — Astra - `media/settings-panel.html` (381 lines) — Astra Settings - `media/settings-panel.css` (210 lines) — Stylesheet - `media/settings-panel.js` (451 lines) -### `tests/` — 35 files, ~5,969 lines +### `tests/` — 35 files, ~6,004 lines *Depends on*: `src/` **Sub-directories** @@ -126,10 +125,10 @@ flowchart LR **Key files** - `tests/agentEngine.test.ts` (782 lines) — AgentEngine Integration Tests & Performance Benchmarks 검증 대상: 1. ErrorClassifier — 오류 유형(Transient/Permanent/Abort) 자동 분류 2. ErrorRecoveryMatrix — 각 규칙이 의도한 대응 전략으로 매핑되는지 검증 3. resilientExecute — 지수 백 -- `tests/lmStudioLifecycle.test.ts` (318 lines) — 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 +- `tests/lmStudioLifecycle.test.ts` (326 lines) — 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 - `tests/telegramBot.test.ts` (363 lines) — Unit tests for TelegramBot + truncateForTelegram. Strategy: - TelegramBot is driven by an injected ITelegramClient stub. We script getUpdates to return queued batches and assert that: - the offset cur -- `tests/lmStudioStreamer.test.ts` (220 lines) — Unit tests for LMStudioStreamer. Strategy: inject a fake ILMStudioClient that returns a fake model handle whose respond() yields a controllable async iterable. No real SDK or WebSocket touched. -- `tests/localPathPreflight.test.ts` (490 lines) +- `tests/lmStudioStreamer.test.ts` (222 lines) — Unit tests for LMStudioStreamer. Strategy: inject a fake ILMStudioClient that returns a fake model handle whose respond() yields a controllable async iterable. No real SDK or WebSocket touched. +- `tests/localPathPreflight.test.ts` (492 lines) - `tests/secondBrainTrace.test.ts` (407 lines) - `tests/approvalQueue.test.ts` (164 lines) — 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. - `tests/projectScaffolder.test.ts` (135 lines) — Unit tests for FileSystemProjectScaffolder. Drives against a real temp directory so end-to-end file IO + path-traversal defenses are exercised. @@ -144,7 +143,7 @@ flowchart LR - `tests/vulnerability.test.ts` (60 lines) — / - `tests/brainIndex.test.ts` (107 lines) - `tests/calendarApi.test.ts` (131 lines) -- `tests/contextManager.test.ts` (129 lines) +- `tests/contextManager.test.ts` (149 lines) - `tests/icsParser.test.ts` (134 lines) - `tests/lessonHelpers.test.ts` (191 lines) - `tests/projectChronicle.test.ts` (199 lines) @@ -161,39 +160,38 @@ flowchart LR - `core_py/optimizer.py` (55 lines) - `core_py/queue_worker.py` (82 lines) -### `docs/` — 90 files, ~3,401 lines +### `docs/` — 99 files, ~3,631 lines **Sub-directories** -- `docs/records/` (77) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고... -- `docs/docs/` (5) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ... -- `docs/Meeting/` (0) +- `docs/records/` (86) — Astra Project Chronicle Records +- `docs/docs/` (5) — docs Chronicle Records **Key files** - `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서 - `docs/AgentEngine_Architecture.md` (314 lines) — AgentEngine Architecture Document +- `docs/records/ConnectAI/timeline.md` (209 lines) — Project Timeline - `docs/ASTRA_OFFICE_REFACTOR.md` (198 lines) — Astra Office Refactor — Design Doc - `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) — Experience Memory (Mistake / Lesson Loop) — Implementation Plan - `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` (182 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/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 프로젝트에만 완전히 집중하겠습니다. ... ## VS Code Extension Surface - **Extension ID**: `g1nation.astra` @@ -227,7 +225,7 @@ flowchart LR - `g1nation.calendar.refresh` — Astra: Google Calendar 새로고침 📅 - `g1nation.calendar.connectOAuth` — Astra: Google Calendar OAuth 연결 (쓰기) 🔐 - `g1nation.devilAgent.toggle` — Astra: Toggle Devil Agent 🎭 -- **Configuration** (69 settings): +- **Configuration** (87 settings): - `g1nation.multiAgentEnabled` *(boolean)* _(default: `false`)_ — Enable Multi-Agent Workflow (Planner -> Researcher -> Writer) for complex tasks. - `g1nation.datacollectBridgeUrl` *(string)* _(default: `"http://127.0.0.1:3002"`)_ — Wiki/Datacollect MCP Bridge URL. /research, /benchmark, /youtube chat slash commands route here. The Bridge must be running (`npm run bridge` in the Datacollect project). - `g1nation.datacollectSavePath` *(string)* _(default: `""`)_ @@ -253,6 +251,18 @@ flowchart LR - `g1nation.finalOnlyRetryOnThoughtLeak` *(boolean)* _(default: `true`)_ — If the model emits only hidden reasoning (, <|channel|>thought, "Thinking Process:" …) and no user-visible answer, Astra silently re-asks it for the final answer only. Hidden reasoning is never - `g1nation.lmStudio.idleTimeoutMs` *(number)* _(default: `300000`)_ — Auto-eject the loaded LM Studio model after this many milliseconds of inactivity. Set to 0 to disable. Default: 300000 (5 minutes). - `g1nation.lmStudio.autoLoadOnSelect` *(boolean)* _(default: `true`)_ — Automatically load LM Studio models into memory when selected from the Astra sidebar. + - `g1nation.lmStudio.sampling.topP` *(number)* _(default: `0.9`)_ — Nucleus sampling cutoff. Small / quantized models often spew wrong-neighbour tokens (한글 깨짐: 붕괴→붕점) when the tail is wide. Lower (0.8–0.9) tightens; 1.0 disables. Applied to both SDK and REST paths. + - `g1nation.lmStudio.sampling.topK` *(number)* _(default: `20`)_ — Top-K sampling cutoff. 0 disables. Default 20 — tighter for small models, raise to 40–80 for large models that already sample well. + - `g1nation.lmStudio.sampling.minP` *(number)* _(default: `0.05`)_ — Min-P floor — discards tokens with probability below this fraction of the top token. Good defence against rare-token glitches. 0 disables. + - `g1nation.lmStudio.sampling.repeatPenalty` *(number)* _(default: `1.1`)_ — Repeat / frequency penalty to curb stutter (것입니다서입니다…). 1.0 disables. Values 1.05–1.2 are typical. + - `g1nation.lmStudio.statsInBudget` *(boolean)* _(default: `true`)_ — Show token/s and time-to-first-token from LM Studio prediction stats in the context-budget badge after each turn (SDK path only). + - `g1nation.lmStudio.draftModel` *(string)* _(default: `""`)_ — [Speculative decoding] LM Studio model key of a small draft model (e.g. 'gemma-2b-it') used to accelerate the main model. Empty disables. 1.5–3x throughput on large models. The draft must be downloade + - `g1nation.lmStudio.load.flashAttention` *(boolean)* _(default: `true`)_ — [Load option] Enable Flash Attention when loading models. Faster generation + lower memory on compatible hardware, especially helpful for long contexts. Default: true. + - `g1nation.lmStudio.load.gpuOffloadRatio` *(string)* _(default: `"max"`)_ — [Load option] How much of the model to offload to GPU. 'max' = all (default), 'off' = CPU only, or a number 0–1 (e.g. '0.5' = half). Numeric strings are parsed. + - `g1nation.lmStudio.load.offloadKVCacheToGpu` *(boolean)* _(default: `true`)_ — [Load option] Keep KV cache on GPU memory. Faster but requires VRAM headroom. Default: true. + - `g1nation.lmStudio.load.keepModelInMemory` *(boolean)* _(default: `true`)_ — [Load option] Prevent the model from being swapped out of system memory. Improves interactive responsiveness; raises RAM use. Default: true. + - `g1nation.lmStudio.load.useFp16ForKVCache` *(boolean)* _(default: `false`)_ — [Load option] Store KV cache in FP16 (halves cache memory). Tiny quality impact for most models — try if you run out of VRAM at long contexts. Default: false. + - `g1nation.lmStudio.load.evalBatchSize` *(number)* _(default: `0`)_ — [Load option] Token batch size during evaluation. 0 = engine default. Higher (512–1024) improves prefill speed on GPU at the cost of memory. - `g1nation.localBrainPath` *(string)* _(default: `""`)_ — Folder path for your local Second Brain knowledge base. Leave empty to use the default folder. - `g1nation.brainProfiles` *(array)* _(default: `[]`)_ — Multiple brain profiles. Each item supports id, name, localBrainPath, secondBrainRepo, and description. - `g1nation.activeBrainId` *(string)* _(default: `""`)_ — Active brain profile id used for the current chat context. @@ -274,21 +284,9 @@ flowchart LR - `g1nation.knowledgeMix.secondBrainWeight` *(number)* _(default: `50`)_ — Knowledge Mix (0–100): how heavily the assistant should lean on Second Brain evidence vs. its own general knowledge. 0 = Second Brain disabled (model knowledge only). 50 = balanced (legacy default). 1 - `g1nation.enableReflection` *(boolean)* _(default: `true`)_ — 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 c - `g1nation.autoLessonFromReflection` *(boolean)* _(default: `true`)_ — 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 pipe - - `g1nation.company.intentClassifierModel` *(string)* _(default: `""`)_ — Model used to classify whether an incoming chat message in 1인 기업 모드 is a (a) casual chat / question, (b) follow-up on the previous round, or (c) a brand-new task that should trigger the full work pipe - - `g1nation.company.disableIntentClassifier` *(boolean)* _(default: `false`)_ — Bypass the intent classifier and always run the full work pipeline on every chat message in 1인 기업 모드 (legacy behaviour). Enable this only if you want every input — including 'thanks', 'show me X again - - `g1nation.company.autoSelectPipeline` *(boolean)* _(default: `true`)_ — Let the intent classifier *automatically switch* to the pipeline it recommends for this turn (e.g. short '기획서까지만' for a planning ask, full '풀 프로덕트' for an end-to-end product). Your explicitly-activate - - `g1nation.company.intentAlignmentMode` *(string)* _(default: `"smart"`)_ — Intent Alignment — turn user prompts into an explicit Requirement Contract (C-G-C-F-Q) before dispatching a pipeline. 'off' = legacy, pipeline runs immediately. 'smart' (default) = run when confidence - - `g1nation.company.intentAlignmentMaxRounds` *(number)* _(default: `3`)_ — Maximum back-and-forth rounds the Intent Alignment analyzer is allowed to ask before forcing a 'confirm or cancel' card (it stops asking new questions and shows the current contract for user approval) - - `g1nation.selfReflector.enabled` *(boolean)* _(default: `false`)_ — Self-Reflector Phase A — append a [Self-Reflector Check] block at the end of every substantive LLM answer (Consistency / Completeness / Accuracy, plus References / Paths for code answers). Zero extra - - `g1nation.selfReflector.externalVerification` *(boolean)* _(default: `false`)_ — Self-Reflector Phase B — after every 1인 기업 specialist response, run a *separate* LLM call to verify the output from an outside-context perspective (catches the 'same model self-validates' blind spot). - - `g1nation.selfReflector.executionVerification` *(boolean)* _(default: `false`)_ — Self-Reflector Phase C — after a code file is created via , automatically run the language's syntax check (Python: py_compile, JS: node --check, TS: project tsc --noEmit). Failures are su - - `g1nation.company.pixelOffice.enabled` *(boolean)* _(default: `true`)_ — Show the Pixel Office visualisation panel above the chat — a small pixel-office-style display that mirrors the agent's current pipeline status (analyzing, need_clarification, executing, reviewing, wai - - `g1nation.company.pixelOffice.bubbles` *(boolean)* _(default: `true`)_ — Show short comic-style speech bubbles above the Pixel Office character on status changes / key events (e.g. '코드 들어간다', '잠깐, 이건 다시 보자', '좋아, 끝났다!'). Bubbles are purely narrative — they never influence - - `g1nation.google.clientId` *(string)* _(default: `""`)_ - - `g1nation.google.clientSecret` *(string)* _(default: `""`)_ - - `g1nation.google.calendarId` *(string)* _(default: `"primary"`)_ - - `g1nation.google.defaultEventDurationMinutes` *(number)* _(default: `60`)_ — end / duration 둘 다 없는 일정의 기본 길이 (분). agent 가 회의록에서 시각만 추출하고 종료 시각은 명시 안 했을 때 적용. - - _…and 9 more_ + - `g1nation.workflow.synthesizerEnabled` *(boolean)* _(default: `true`)_ + - `g1nation.workflow.multiAgentMode` *(string)* _(default: `"auto"`)_ + - _…and 27 more_ ## Dependencies - **Runtime** (2): `@lmstudio/sdk`, `pdf-parse` @@ -336,7 +334,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한 **Designed for High-Performance Decision Making.** Copyright (C) **g1nation**. All rights reserved. -_Last auto-scan: 2026-05-22T10:04:22.779Z · signature `1c723399`_ +_Last auto-scan: 2026-05-23T06:46:38.895Z · signature `457ea57e`_ ## Purpose diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json index 80950fd..6ef3039 100644 --- a/.astra/project-context/scan-cache.json +++ b/.astra/project-context/scan-cache.json @@ -1,11 +1,11 @@ { "version": 1, - "generatedAt": "2026-05-22T10:04:22.814Z", + "generatedAt": "2026-05-23T06:46:38.906Z", "files": { "src/agent.ts": { - "mtimeMs": 1779444190560.5042, - "size": 220916, - "lines": 3823, + "mtimeMs": 1779517702000, + "size": 232696, + "lines": 4076, "role": "", "imports": [ "src/utils", @@ -39,9 +39,9 @@ ] }, "src/agents/AgentWorkflowManager.ts": { - "mtimeMs": 1778720117490.4294, - "size": 2322, - "lines": 60, + "mtimeMs": 1779509768000, + "size": 2783, + "lines": 66, "role": "", "imports": [ "src/agents/factory", @@ -50,9 +50,9 @@ ] }, "src/agents/factory.ts": { - "mtimeMs": 1778720117507.1616, - "size": 11242, - "lines": 219, + "mtimeMs": 1779513282000, + "size": 15847, + "lines": 273, "role": "", "imports": [ "src/config", @@ -60,8 +60,8 @@ ] }, "src/agents/reflectionPersister.ts": { - "mtimeMs": 1778807413489.8743, - "size": 12294, + "mtimeMs": 1778763469000, + "size": 11986, "lines": 308, "role": "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", "imports": [ @@ -70,8 +70,8 @@ ] }, "src/bridge.ts": { - "mtimeMs": 1779411812096.6685, - "size": 10768, + "mtimeMs": 1779492050000, + "size": 10526, "lines": 242, "role": "", "imports": [ @@ -83,21 +83,21 @@ ] }, "src/config.ts": { - "mtimeMs": 1779444175132.1973, - "size": 15153, - "lines": 301, + "mtimeMs": 1779517494000, + "size": 20523, + "lines": 394, "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": "", @@ -106,35 +106,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": "", @@ -144,7 +144,7 @@ ] }, "src/core/lock.ts": { - "mtimeMs": 1778038157826.973, + "mtimeMs": 1778169995000, "size": 2358, "lines": 66, "role": "", @@ -153,8 +153,8 @@ ] }, "src/core/queue.ts": { - "mtimeMs": 1778666871393.5244, - "size": 2509, + "mtimeMs": 1778674336000, + "size": 2428, "lines": 81, "role": "", "imports": [ @@ -162,17 +162,17 @@ ] }, "src/core/responseRecovery.ts": { - "mtimeMs": 1778664139958.9634, - "size": 12529, - "lines": 225, + "mtimeMs": 1779510440000, + "size": 15870, + "lines": 293, "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": [ "src/lib/contextManager" ] }, "src/core/services.ts": { - "mtimeMs": 1778549008895.9155, - "size": 6856, + "mtimeMs": 1778421200000, + "size": 6692, "lines": 164, "role": "", "imports": [ @@ -181,8 +181,8 @@ ] }, "src/core/session.ts": { - "mtimeMs": 1777511752609.8882, - "size": 2873, + "mtimeMs": 1777808065000, + "size": 2785, "lines": 88, "role": "", "imports": [ @@ -191,14 +191,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", @@ -208,8 +208,8 @@ ] }, "src/core/transaction.ts": { - "mtimeMs": 1778549008897.4194, - "size": 4590, + "mtimeMs": 1778251556000, + "size": 4458, "lines": 132, "role": "", "imports": [ @@ -217,52 +217,52 @@ "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": 1779411729280.646, - "size": 65966, - "lines": 1233, + "mtimeMs": 1779518653000, + "size": 65568, + "lines": 1247, "role": "", "imports": [ "src/utils", @@ -297,8 +297,8 @@ ] }, "src/features/approval/approvalPanelProvider.ts": { - "mtimeMs": 1778664480470.9922, - "size": 7285, + "mtimeMs": 1778674336000, + "size": 7132, "lines": 153, "role": "", "imports": [ @@ -307,8 +307,8 @@ ] }, "src/features/approval/approvalQueue.ts": { - "mtimeMs": 1778549008899.4456, - "size": 4851, + "mtimeMs": 1778251548000, + "size": 4722, "lines": 129, "role": "", "imports": [ @@ -316,8 +316,8 @@ ] }, "src/features/approval/approvalStatusBar.ts": { - "mtimeMs": 1778549008899.4456, - "size": 1642, + "mtimeMs": 1778251623000, + "size": 1601, "lines": 41, "role": "", "imports": [ @@ -325,8 +325,8 @@ ] }, "src/features/astraOffice/index.ts": { - "mtimeMs": 1779065453862.6475, - "size": 807, + "mtimeMs": 1778931477000, + "size": 789, "lines": 18, "role": "Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel HTML 생성 함수. sidebarProvider.ts 는 이 한 줄만 import.", "imports": [ @@ -337,8 +337,8 @@ ] }, "src/features/astraOffice/presenter.ts": { - "mtimeMs": 1779065453862.6475, - "size": 7549, + "mtimeMs": 1778932441000, + "size": 7368, "lines": 181, "role": "Presenter — 옛 AgentWorkState + bubble queue + activity items 를 OfficeSnapshot 으로 변환하는 pure 함수. mini / full view 둘 다 같은 OfficeSnapshot 을 받게 만드는 게 목표. 이번 세션의 범위: 인터페이스 + 스텁. 실제 wiring 은 다음 세션에서: - sideb", "imports": [ @@ -348,8 +348,8 @@ ] }, "src/features/astraOffice/schema.ts": { - "mtimeMs": 1779065453864.1523, - "size": 10936, + "mtimeMs": 1778931632000, + "size": 10631, "lines": 305, "role": "OfficeSnapshot — Astra Office 의 도메인 타입. 동시성 진실 (docs/ASTRAOFFICEREFACTOR.md §1): dispatcher 는 직렬이라 한 시점에 active agent 는 0 또는 1명. 이걸 데이터로 강제하는 게 이 타입의 핵심 역할. 이 세션에서는 타입 + validator + empty factory 만. 백", "imports": [ @@ -357,29 +357,29 @@ ] }, "src/features/astraOffice/view/layoutSchema.ts": { - "mtimeMs": 1779065453864.8176, - "size": 6655, + "mtimeMs": 1778931707000, + "size": 6475, "lines": 180, "role": "Pixel Office layout 저장 스키마 — workspaceState 의 g1nation.pixelOfficeLayout 키 에 저장되는 객체의 런타임 validator + v1 → v2 migration. 옛 runtime.ts 의 isV2Snap() heuristic 을 정식 schema 로 격상. webview 에서 받는 즉시 한 번 통과시키", "imports": [] }, "src/features/astraOffice/view/officeBody.ts": { - "mtimeMs": 1779065453865.8494, - "size": 4207, + "mtimeMs": 1779031377000, + "size": 4104, "lines": 103, "role": "", "imports": [] }, "src/features/astraOffice/view/officeStyles.ts": { - "mtimeMs": 1779065453866.8667, - "size": 26165, + "mtimeMs": 1779031606000, + "size": 25746, "lines": 419, "role": "", "imports": [] }, "src/features/astraOffice/view/panelHtml.ts": { - "mtimeMs": 1779065453867.871, - "size": 949, + "mtimeMs": 1778937313000, + "size": 923, "lines": 26, "role": "Full Astra Office webview HTML composition. 옛 sidebarProvider.ts 의 거대한 pixelOfficePanelHtml 을 4개 파일로 분리한 entry. 이번 세션은 동작 동등 분리 만. 다음 세션에 mini view 와 공통 presenter 도입.", "imports": [ @@ -389,15 +389,15 @@ ] }, "src/features/astraOffice/view/runtime.ts": { - "mtimeMs": 1779411798626.195, - "size": 93940, + "mtimeMs": 1779492050000, + "size": 91938, "lines": 1932, "role": "자동 분리: src/sidebarProvider.ts 4002-5116 (IIFE 본문) 에서 추출. 동작 동등. ${assets.derivedBase} placeholder 는 panelHtml 에서 .replace() 로 실제 값 주입. 다음 세션에서 OfficeSnapshot 기반으로 단계적으로 잘라낼 예정.", "imports": [] }, "src/features/calendar/calendarApi.ts": { - "mtimeMs": 1779065453869.39, - "size": 8987, + "mtimeMs": 1778935879000, + "size": 8782, "lines": 205, "role": "Google Calendar API v3 — event create/list 호출. access token 은 caller 가 직접 주입한다. 만료 처리는 withFreshAccessToken 헬퍼가 refresh token 으로 갱신 → 호출 → 401 발생 시 한 번 더 갱신 + 재시도. 외부 라이브러리(googleapis) 안 씀 — Calendar ", "imports": [ @@ -406,8 +406,8 @@ ] }, "src/features/calendar/calendarCache.ts": { - "mtimeMs": 1779065453870.9949, - "size": 12065, + "mtimeMs": 1778937433000, + "size": 11824, "lines": 241, "role": "Google Calendar (iCal) 캐시 — fetch + parse + 회사 shared/calendarcache.md 에 저장. Connectorigin 의 googlecalendar.py 를 TypeScript / native fetch 로 옮김. OAuth 없음. 사용자가 Google Calendar 설정 → \"비공개 주소(iCal 형식)\" 복", "imports": [ @@ -415,15 +415,15 @@ ] }, "src/features/calendar/icsParser.ts": { - "mtimeMs": 1779065453870.9949, - "size": 4937, + "mtimeMs": 1778934638000, + "size": 4823, "lines": 114, "role": "Minimal ICS parser — no library deps. Connectorigin 의 Python 버전을 그대로 옮겼고, 본 함수는 pure 라서 단위테스트가 쉽다. 처리 범위: - VEVENT 블록 추출 - line continuation (다음 줄이 공백 시작) 펼치기 - SUMMARY / DESCRIPTION / LOCATION / DTST", "imports": [] }, "src/features/calendar/index.ts": { - "mtimeMs": 1779065453871.9966, - "size": 593, + "mtimeMs": 1778935400000, + "size": 561, "lines": 32, "role": "", "imports": [ @@ -434,15 +434,15 @@ ] }, "src/features/calendar/oauth.ts": { - "mtimeMs": 1779065453873.0256, - "size": 10940, + "mtimeMs": 1778935851000, + "size": 10705, "lines": 235, "role": "Google OAuth 2.0 — loopback (Desktop app) 흐름. Google 은 Desktop 앱 OAuth client 에 대해 http://127.0.0.1: redirect URI 를 허용한다. 본 모듈은: 1. ephemeral port 에 일회용 HTTP 서버 띄움 2. 사용자 브라우저로 Google 로", "imports": [] }, "src/features/company/agents.ts": { - "mtimeMs": 1779065453874.572, - "size": 15242, + "mtimeMs": 1778936611000, + "size": 15031, "lines": 211, "role": "기본 에이전트 로스터 — 1인 기업 모드의 출고 디폴트. 설계 의도: 소프트웨어/게임 개발 IT 회사의 1인 기업 운영을 가정. 한 사람이 기획 → 디자인 → 개발 → QA → 출시 → 운영/마케팅을 모두 책임질 때 필요한 직군을 빠짐없이 커버하되 역할이 겹치지 않게 분리한다. 직군 구분 (혼동 방지): - 기획자(business) : 무엇을 만들지 정의 ", "imports": [ @@ -450,8 +450,8 @@ ] }, "src/features/company/ceoPlanner.ts": { - "mtimeMs": 1778814432469.254, - "size": 12050, + "mtimeMs": 1778902489000, + "size": 11781, "lines": 269, "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": [ @@ -464,8 +464,8 @@ ] }, "src/features/company/ceoReporter.ts": { - "mtimeMs": 1778739926808.2551, - "size": 5017, + "mtimeMs": 1778762677000, + "size": 4895, "lines": 122, "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": [ @@ -477,8 +477,8 @@ ] }, "src/features/company/companyConfig.ts": { - "mtimeMs": 1778811673797.1216, - "size": 41035, + "mtimeMs": 1778902489000, + "size": 40139, "lines": 896, "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": [ @@ -487,9 +487,9 @@ ] }, "src/features/company/dispatcher.ts": { - "mtimeMs": 1779065453875.0962, - "size": 74549, - "lines": 1437, + "mtimeMs": 1778936524000, + "size": 73113, + "lines": 1435, "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": [ "src/core/services", @@ -515,8 +515,8 @@ ] }, "src/features/company/index.ts": { - "mtimeMs": 1778814836698.1172, - "size": 2702, + "mtimeMs": 1778902489000, + "size": 2596, "lines": 106, "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": [ @@ -533,7 +533,7 @@ ] }, "src/features/company/intentAlignment.ts": { - "mtimeMs": 1778813958976.1824, + "mtimeMs": 1778902489000, "size": 15285, "lines": 334, "role": "Intent Alignment — 사용자의 자연어 요청을 실행 가능한 작업 조건으로 변환. 사용자는 자기 의도와 배경지식이 에이전트에게 충분히 전달되었다고 착각하는 경향이 있다 (투명성의 착각·지식의 저주·공통 기반 부족). 그래서 에이전트가 즉시 작업에 돌입하면 사용자가 머릿속에 가진 것과 다른 결과를 만들어 낸다. 이 모듈은 그 격차를 메꾸는 한 단계 ", @@ -544,7 +544,7 @@ ] }, "src/features/company/intentClassifier.ts": { - "mtimeMs": 1778819562785.657, + "mtimeMs": 1778902489000, "size": 17372, "lines": 348, "role": "Intent classifier for 1인 기업 모드 chat input. The company mode used to route every chat message through the full dispatcher (CEO planner → specialists → CEO synthesis). That meant casual messages like \"고", @@ -554,8 +554,8 @@ ] }, "src/features/company/pipelineTemplates.ts": { - "mtimeMs": 1779065453876.108, - "size": 15403, + "mtimeMs": 1778933936000, + "size": 15125, "lines": 278, "role": "Built-in pipeline templates for 1인 기업 모드. These are blueprints, not data — they're surfaced in the manage panel's \"템플릿에서 추가\" dropdown so a non-developer user can stamp out a working pipeline in one cl", "imports": [ @@ -563,22 +563,22 @@ ] }, "src/features/company/pixelOfficeState.ts": { - "mtimeMs": 1778843402595.067, + "mtimeMs": 1778902489000, "size": 10025, "lines": 286, "role": "Pixel Office — Agent Work Pipeline 상태를 시각화하는 UI Layer 전용 모듈. ─────────────────── 설계 원칙 ─────────────────── 1. Agent 핵심 판단 로직을 절대 바꾸지 않는다. Pipeline 진행, contract 합의, 검수 cycle, 승인 게이트 — 모두 기존 dispatcher ", "imports": [] }, "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": 1779065453877.1128, - "size": 19037, + "mtimeMs": 1778936588000, + "size": 18723, "lines": 314, "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": [ @@ -590,29 +590,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/resumeStore.ts": { - "mtimeMs": 1778807413496.3787, - "size": 5806, + "mtimeMs": 1778768128000, + "size": 5672, "lines": 134, "role": "Disk persistence for company-turn resume state. 각 turn의 sessionDir 안에 resume.json을 두고, dispatcher가 매 의미 있는 시점(plan 확정 / 각 stage 직후 / abort 시점)에 현재 상태를 덮어쓴다. 재개 시점에는 이 파일을 읽어 nextIndex 부터 dispatch 재개. ", "imports": [ @@ -622,8 +622,8 @@ ] }, "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": [ @@ -632,8 +632,8 @@ ] }, "src/features/company/telegramReport.ts": { - "mtimeMs": 1778739949327.3745, - "size": 8294, + "mtimeMs": 1778762677000, + "size": 8126, "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": [ @@ -645,22 +645,22 @@ ] }, "src/features/company/types.ts": { - "mtimeMs": 1778813870251.361, - "size": 21323, + "mtimeMs": 1778902489000, + "size": 20877, "lines": 446, "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/datacollect/bridgeClient.ts": { - "mtimeMs": 1779174431038.135, + "mtimeMs": 1779277308000, "size": 3518, "lines": 86, "role": "", "imports": [] }, "src/features/datacollect/slashRouter.ts": { - "mtimeMs": 1779343360530.8965, - "size": 73170, + "mtimeMs": 1779518658000, + "size": 73164, "lines": 1413, "role": "", "imports": [ @@ -670,15 +670,15 @@ ] }, "src/features/devilAgent/devilPrompt.ts": { - "mtimeMs": 1779065453878.1177, - "size": 3662, + "mtimeMs": 1778943576000, + "size": 3591, "lines": 71, "role": "Devil's Advocate (도현) — system prompt 빌더. 설계 원칙: - 모든 약점을 나열하지 않음. 한 turn 에 1개 — 사용자가 깊게 생각하게. - 'X 입장에서 본다면' framing — 본인 의견이 아니라 다른 시점 으로 제시. 이는 LLM 의 '내가 옳다' 경향을 줄이는 잘 알려진 패턴. - 통계 / 구체 수치 / 외부 사례 ", "imports": [] }, "src/features/devilAgent/devilService.ts": { - "mtimeMs": 1779065453879.116, - "size": 2517, + "mtimeMs": 1778943601000, + "size": 2457, "lines": 60, "role": "Devil Agent — 직전 답변에 대한 반박 생성기. 동작: 1. agent.ts 가 main turn 완료 직후 호출 2. 같은 model/engine 으로 별도 LLM call 1회 — 짧은 비판 한 문단 생성 3. 결과를 webview 로 'devilRebuttal' message 로 send 4. 실패 / 비활성 시 silent skip — ma", "imports": [ @@ -686,8 +686,8 @@ ] }, "src/features/devilAgent/index.ts": { - "mtimeMs": 1779065453879.116, - "size": 276, + "mtimeMs": 1778943609000, + "size": 263, "lines": 13, "role": "", "imports": [ @@ -696,8 +696,8 @@ ] }, "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": [ @@ -707,15 +707,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": [ @@ -723,8 +723,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": [ @@ -734,8 +734,8 @@ ] }, "src/features/projectChronicle/guardPrompt.ts": { - "mtimeMs": 1778028987407.7454, - "size": 6955, + "mtimeMs": 1777870211000, + "size": 6880, "lines": 75, "role": "", "imports": [ @@ -743,8 +743,8 @@ ] }, "src/features/projectChronicle/index.ts": { - "mtimeMs": 1778028987408.4517, - "size": 7679, + "mtimeMs": 1777808065000, + "size": 7490, "lines": 189, "role": "", "imports": [ @@ -755,15 +755,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": [ @@ -771,15 +771,15 @@ ] }, "src/features/projectChronicle/types.ts": { - "mtimeMs": 1778720117534.7898, - "size": 3247, + "mtimeMs": 1778676848000, + "size": 3129, "lines": 118, "role": "", "imports": [] }, "src/features/providers/anthropic.ts": { - "mtimeMs": 1779065453880.645, - "size": 4219, + "mtimeMs": 1778941456000, + "size": 4111, "lines": 108, "role": "Anthropic Messages API adapter. 차이점 (OpenAI 와): 1. base URL: https://api.anthropic.com/v1 2. 인증: x-api-key: + anthropic-version: 2023-06-01 3. system prompt 는 messages 가 아니라 top-level system 필드 ", "imports": [ @@ -789,8 +789,8 @@ ] }, "src/features/providers/gemini.ts": { - "mtimeMs": 1779065453881.3628, - "size": 4434, + "mtimeMs": 1778941478000, + "size": 4326, "lines": 108, "role": "Google Gemini Generative Language API adapter. 차이점 (OpenAI 와): 1. base URL: https://generativelanguage.googleapis.com/v1beta 2. 인증: ?key= (query parameter) 3. 메시지 형식: contents: [{role: 'user'", "imports": [ @@ -800,8 +800,8 @@ ] }, "src/features/providers/index.ts": { - "mtimeMs": 1779065453882.3787, - "size": 3311, + "mtimeMs": 1778941521000, + "size": 3242, "lines": 69, "role": "Cloud LLM provider public API. 일반 호출 흐름: 1. agent.ts 의 chat 진입부에서 parseModelPrefix(modelId) 호출 2. null → local engine 경로 (옛 로직). 객체 → streamCloudCompletion(context, hit, params) 호출 3. Response 의 body ", "imports": [ @@ -813,8 +813,8 @@ ] }, "src/features/providers/openrouter.ts": { - "mtimeMs": 1779065453882.3787, - "size": 2748, + "mtimeMs": 1778941431000, + "size": 2673, "lines": 75, "role": "OpenRouter — OpenAI 호환 API. 별도 transform 없이 fetch Response 를 그대로 반환. Base: https://openrouter.ai/api/v1 POST /chat/completions — OpenAI 형식 그대로. stream:true 면 SSE. GET /models — 사용 가능 모델 목록. 인증: Author", "imports": [ @@ -823,8 +823,8 @@ ] }, "src/features/providers/providerConfig.ts": { - "mtimeMs": 1779065453883.386, - "size": 2761, + "mtimeMs": 1778941498000, + "size": 2683, "lines": 78, "role": "Provider 별 API key + enable 토글 저장소. 설계: - API key 자체는 vscode.SecretStorage (secrets) 에 — settings.json / Settings Sync 침범 안 받음. - enabled 토글은 일반 settings (g1nation.providers..enabled) — 사용자가 패널에서 ", "imports": [ @@ -832,22 +832,22 @@ ] }, "src/features/providers/streamHelpers.ts": { - "mtimeMs": 1779065453883.386, - "size": 6048, + "mtimeMs": 1778941413000, + "size": 5904, "lines": 144, "role": "Stream transformer — provider 별 SSE 형식을 OpenAI 호환 SSE 로 변환. 이렇게 하면 agent.ts 의 기존 SSE 파서 (data: {...delta...} 형식 가정) 가 변경 없이 모든 provider 출력을 같은 코드 경로로 소비할 수 있다. 신규 provider 가 들어와도 adapter 하나만 추가하면 됨 (c", "imports": [] }, "src/features/providers/types.ts": { - "mtimeMs": 1779065453884.8909, - "size": 2433, + "mtimeMs": 1778941377000, + "size": 2370, "lines": 63, "role": "Cloud LLM provider routing — model id prefix → provider id 매핑. Prefix 규칙: openrouter:anthropic/claude-3.5-sonnet → { provider: 'openrouter', model: 'anthropic/claude-3.5-sonnet' } anthropic:claude-3-5", "imports": [] }, "src/features/secondBrainTrace.ts": { - "mtimeMs": 1779411561816.5603, - "size": 39429, + "mtimeMs": 1779492050000, + "size": 38637, "lines": 792, "role": "", "imports": [ @@ -856,8 +856,8 @@ ] }, "src/features/selfReflector/selfReflectorExecution.ts": { - "mtimeMs": 1779325350825.2378, - "size": 9570, + "mtimeMs": 1779277718000, + "size": 9363, "lines": 207, "role": "Self-Reflector Phase C — 실행 기반 검증. Phase A/B는 LLM 텍스트 분석에 의존하므로 \"코드가 실제로 컴파일되는가?\" 같은 질문엔 한계가 있다. Phase C는 정답: 그냥 실행해 본다. 동작: 1. action-tag executor가 반환한 report를 받아 ✅ Created: / ✅ Edited: ", "imports": [ @@ -865,21 +865,21 @@ ] }, "src/features/selfReflector/selfReflectorHollow.ts": { - "mtimeMs": 1778821213094.901, + "mtimeMs": 1778902489000, "size": 10482, "lines": 258, "role": "Self-Reflector — 빈 깡통(Hollow Code) 검출 휴리스틱. Phase C(syntax/lint)는 문법 오류만 잡는다. 작은 LLM이 가장 자주 만드는 실패 패턴은 문법은 맞지만 본문이 비어 있는 코드 — def foo(): pass, # TODO: implement, import만 있고 로직 0줄인 모듈 등. 사용자가 \"완료 됐다\"라는", "imports": [] }, "src/features/selfReflector/selfReflectorPrompt.ts": { - "mtimeMs": 1778821145026.1665, + "mtimeMs": 1778902489000, "size": 6139, "lines": 108, "role": "Self-Reflector — 답변 산출물의 자기 검증 레이어. Memory(기억) 단계는 이미 충분히 강하지만 Verification(검증) 단계는 사용자 피드백에 의존적이다. 이 모듈은 그 격차를 메꾸는 3단 구조: Phase A (이 파일) ─ 시스템 프롬프트에 self-check 체크리스트 룰을 박아 LLM이 응답 마지막에 [Self-Reflecto", "imports": [] }, "src/features/selfReflector/selfReflectorVerifier.ts": { - "mtimeMs": 1778821237110.5894, + "mtimeMs": 1778902489000, "size": 7495, "lines": 172, "role": "Self-Reflector Phase B — 분리된 콘텍스트에서 LLM 한 번 더 호출해 응답을 외부 시각으로 검증. Phase A의 self-check는 같은 모델·같은 콘텍스트에서 자기 자신을 보는 한계가 있다. 모델이 자기가 만든 답변을 자신 있게 잘못 평가하는 과신 편향은 LLM의 잘 알려진 약점이다. Phase B는 이걸 보완하기 위해: 1. sp", @@ -889,8 +889,8 @@ ] }, "src/features/settings/settingsPanelProvider.ts": { - "mtimeMs": 1779444222128.0447, - "size": 32643, + "mtimeMs": 1779492050000, + "size": 31952, "lines": 691, "role": "", "imports": [ @@ -904,8 +904,8 @@ ] }, "src/features/sheets/index.ts": { - "mtimeMs": 1779065453886.916, - "size": 250, + "mtimeMs": 1778935930000, + "size": 237, "lines": 13, "role": "", "imports": [ @@ -913,8 +913,8 @@ ] }, "src/features/sheets/sheetsApi.ts": { - "mtimeMs": 1779065453887.9194, - "size": 7960, + "mtimeMs": 1778936110000, + "size": 7794, "lines": 166, "role": "Google Sheets API v4 — read / write / append. 토큰은 calendar 와 공유 (같은 OAuth 에 spreadsheets scope 포함). 별도 셋업 없음 — \"Astra: Google Calendar OAuth 연결\" 명령으로 한 번 로그인하면 둘 다 동작한다. 외부 라이브러리 안 씀 — Sheets API REST", "imports": [ @@ -922,8 +922,8 @@ ] }, "src/features/tasks/index.ts": { - "mtimeMs": 1779065453887.9194, - "size": 238, + "mtimeMs": 1778936468000, + "size": 225, "lines": 13, "role": "", "imports": [ @@ -931,15 +931,15 @@ ] }, "src/features/tasks/taskStore.ts": { - "mtimeMs": 1779065453888.9917, - "size": 9366, + "mtimeMs": 1778936462000, + "size": 9121, "lines": 245, "role": "Task tracker — .astra/company/shared/tasks.md 단일 파일. 설계 원칙: - 외부 DB 없이 사람이 읽을 수 있는 마크다운 테이블에 누적. git 으로 history 추적 가능. - 파싱은 regex 기반 (셀 구분자 |). 사용자가 손으로 편집해도 fault-tolerant. - 모든 task 는 안정적 id (t001,", "imports": [] }, "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": [ @@ -947,8 +947,8 @@ ] }, "src/integrations/telegram/telegramBot.ts": { - "mtimeMs": 1778549008903.0078, - "size": 11614, + "mtimeMs": 1778421270000, + "size": 11344, "lines": 270, "role": "", "imports": [ @@ -958,8 +958,8 @@ ] }, "src/integrations/telegram/telegramClient.ts": { - "mtimeMs": 1778549008904.013, - "size": 6027, + "mtimeMs": 1778252333000, + "size": 5873, "lines": 154, "role": "", "imports": [ @@ -968,22 +968,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, - "lines": 275, + "mtimeMs": 1779513818000, + "size": 13258, + "lines": 278, "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": [ @@ -991,8 +991,8 @@ ] }, "src/lib/discoverModels.ts": { - "mtimeMs": 1778549008905.0132, - "size": 1590, + "mtimeMs": 1778255896000, + "size": 1555, "lines": 35, "role": "", "imports": [ @@ -1000,9 +1000,9 @@ ] }, "src/lib/engine.ts": { - "mtimeMs": 1778807413498.881, - "size": 43604, - "lines": 906, + "mtimeMs": 1779509734000, + "size": 45131, + "lines": 940, "role": "", "imports": [ "src/core/lock", @@ -1016,8 +1016,8 @@ ] }, "src/lib/formatter.ts": { - "mtimeMs": 1778028987413.7585, - "size": 3932, + "mtimeMs": 1777980992000, + "size": 3851, "lines": 81, "role": "", "imports": [ @@ -1025,32 +1025,32 @@ ] }, "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, - "lines": 147, + "mtimeMs": 1779517529000, + "size": 11168, + "lines": 255, "role": "", "imports": [ "src/utils" ] }, "src/lmstudio/lifecycleManager.ts": { - "mtimeMs": 1778549008907.0293, - "size": 11074, - "lines": 291, + "mtimeMs": 1779517553000, + "size": 11372, + "lines": 300, "role": "", "imports": [ "src/lmstudio/client", @@ -1060,9 +1060,9 @@ ] }, "src/lmstudio/streamer.ts": { - "mtimeMs": 1779444193875.363, - "size": 8477, - "lines": 171, + "mtimeMs": 1779517620000, + "size": 13164, + "lines": 252, "role": "", "imports": [ "src/lmstudio/client", @@ -1070,17 +1070,65 @@ ] }, "src/memory/EpisodicMemory.ts": { - "mtimeMs": 1779411639504.3022, - "size": 10940, + "mtimeMs": 1779492050000, + "size": 10643, "lines": 297, "role": "Episodic Memory (일화 기억) 과거 대화/회의/결정의 맥락 흐름을 저장합니다. 세션 종료 시 자동으로 에피소드를 요약하여 저장합니다. \"왜 이렇게 결정했는지\", \"어떤 흐름으로 진행했는지\" 기록. 저장 위치: {brainPath}/memory/episodes/.json", "imports": [ "src/memory/types" ] }, + "src/memory/LongTermMemory.ts": { + "mtimeMs": 1779492050000, + "size": 8974, + "lines": 252, + "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": 1779411771475.9016, - "size": 6530, + "mtimeMs": 1779492050000, + "size": 6342, "lines": 188, "role": "MemoryManager — 5-Layer Cognitive Memory System (통합 진입점) Astra의 모든 메모리 레이어를 통합 관리하는 중앙 매니저입니다. ① Short-Term Memory — 현재 대화 흐름 (FIFO) ② Long-Term Memory — 사용자 취향/규칙/결정 ③ Project Memory — 프로젝트별 지식 ④ Pro", "imports": [ @@ -1094,64 +1142,16 @@ "src/memory/types" ] }, - "src/memory/LongTermMemory.ts": { - "mtimeMs": 1779411767886.338, - "size": 9226, - "lines": 252, - "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": [ @@ -1161,8 +1161,8 @@ ] }, "src/retrieval/contextBudget.ts": { - "mtimeMs": 1778665501089.1736, - "size": 5283, + "mtimeMs": 1778674336000, + "size": 5143, "lines": 140, "role": "Context Budget Manager (컨텍스트 예산 관리) 시스템 프롬프트의 토큰 예산을 관리하여 로컬 모델의 context window를 효율적으로 활용합니다.", "imports": [ @@ -1170,7 +1170,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", @@ -1179,8 +1179,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": [ @@ -1197,8 +1197,8 @@ ] }, "src/retrieval/knowledgeMix.ts": { - "mtimeMs": 1778821115241.6562, - "size": 7786, + "mtimeMs": 1778902489000, + "size": 7621, "lines": 165, "role": "Knowledge Mix — model 지식 vs Second Brain 지식의 상대 비율을 LLM에게 전달하는 정책 레이어. ── 정책 v2 (상대값+상대값=상대값) ────────────────────────────────────── weight는 0~100 정수이지만 상대 비율로만 해석한다. 즉 \"70\"은 \"100% 중 70%\"라는 상대 표현이고, 시", "imports": [ @@ -1207,8 +1207,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": [ @@ -1216,22 +1216,22 @@ ] }, "src/retrieval/scoring.ts": { - "mtimeMs": 1779411675045.9507, - "size": 22287, + "mtimeMs": 1779492050000, + "size": 21751, "lines": 536, "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": [ @@ -1241,22 +1241,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": 1779429436188.0647, - "size": 6053, - "lines": 154, + "mtimeMs": 1779494950000, + "size": 6174, + "lines": 159, "role": "", "imports": [] }, "src/sidebar/agentHandlers.ts": { - "mtimeMs": 1778720117552.737, - "size": 7921, + "mtimeMs": 1778676515000, + "size": 7752, "lines": 169, "role": "", "imports": [ @@ -1266,8 +1266,8 @@ ] }, "src/sidebar/brainHandlers.ts": { - "mtimeMs": 1778549008912.5908, - "size": 1113, + "mtimeMs": 1778248976000, + "size": 1080, "lines": 33, "role": "", "imports": [ @@ -1275,9 +1275,9 @@ ] }, "src/sidebar/chatHandlers.ts": { - "mtimeMs": 1779343234943.2488, - "size": 40131, - "lines": 707, + "mtimeMs": 1779518648000, + "size": 39607, + "lines": 710, "role": "", "imports": [ "src/sidebarProvider", @@ -1291,18 +1291,18 @@ ] }, "src/sidebar/chronicleHandlers.ts": { - "mtimeMs": 1778549008912.5908, - "size": 2120, - "lines": 52, + "mtimeMs": 1779514386000, + "size": 2422, + "lines": 59, "role": "", "imports": [ "src/sidebarProvider" ] }, "src/sidebarProvider.ts": { - "mtimeMs": 1779411747417.136, - "size": 198818, - "lines": 4226, + "mtimeMs": 1779518686000, + "size": 200699, + "lines": 4327, "role": "", "imports": [ "src/utils", @@ -1329,8 +1329,8 @@ ] }, "src/skills/agentKnowledgeMap.ts": { - "mtimeMs": 1778720117565.968, - "size": 16081, + "mtimeMs": 1778676092000, + "size": 15707, "lines": 374, "role": "", "imports": [ @@ -1339,8 +1339,8 @@ ] }, "src/skills/externalSkillLoader.ts": { - "mtimeMs": 1778549008916.6155, - "size": 6018, + "mtimeMs": 1778470672000, + "size": 5859, "lines": 159, "role": "", "imports": [ @@ -1349,8 +1349,8 @@ ] }, "src/skills/scopedBrainRetriever.ts": { - "mtimeMs": 1779411581885.858, - "size": 6369, + "mtimeMs": 1779492050000, + "size": 6213, "lines": 156, "role": "", "imports": [ @@ -1362,8 +1362,8 @@ ] }, "src/skills/skillInjectionService.ts": { - "mtimeMs": 1778549008918.12, - "size": 6421, + "mtimeMs": 1778681774000, + "size": 6276, "lines": 145, "role": "", "imports": [ @@ -1372,23 +1372,23 @@ ] }, "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": 1779428605818.0505, - "size": 20391, - "lines": 408, + "mtimeMs": 1779513331000, + "size": 23609, + "lines": 448, "role": "", "imports": [ "src/config", @@ -1396,50 +1396,50 @@ ] }, "media/settings-panel.css": { - "mtimeMs": 1778549008877.4587, - "size": 4756, + "mtimeMs": 1778255405000, + "size": 4546, "lines": 210, "role": "Stylesheet", "imports": [] }, "media/settings-panel.html": { - "mtimeMs": 1779444233279.6733, - "size": 21424, + "mtimeMs": 1779492050000, + "size": 21043, "lines": 381, "role": "Astra Settings", "imports": [] }, "media/settings-panel.js": { - "mtimeMs": 1779444245246.522, - "size": 21555, + "mtimeMs": 1779492050000, + "size": 21104, "lines": 451, "role": "", "imports": [] }, "media/sidebar.css": { - "mtimeMs": 1779065453854.1843, - "size": 90311, - "lines": 2078, + "mtimeMs": 1778943817000, + "size": 88173, + "lines": 2068, "role": "Stylesheet", "imports": [] }, "media/sidebar.html": { - "mtimeMs": 1779083405649.7578, - "size": 34977, - "lines": 545, + "mtimeMs": 1779518692000, + "size": 34475, + "lines": 538, "role": "Astra", "imports": [] }, "media/sidebar.js": { - "mtimeMs": 1779083454849.123, - "size": 217481, - "lines": 3677, + "mtimeMs": 1779517691000, + "size": 222774, + "lines": 3807, "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": [ @@ -1447,8 +1447,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": [ @@ -1456,8 +1456,8 @@ ] }, "tests/brainIndex.test.ts": { - "mtimeMs": 1778664139970.806, - "size": 5513, + "mtimeMs": 1778594450000, + "size": 5406, "lines": 107, "role": "", "imports": [ @@ -1465,8 +1465,8 @@ ] }, "tests/calendarApi.test.ts": { - "mtimeMs": 1779065453894.5227, - "size": 5234, + "mtimeMs": 1778935637000, + "size": 5103, "lines": 131, "role": "", "imports": [ @@ -1475,17 +1475,17 @@ ] }, "tests/contextManager.test.ts": { - "mtimeMs": 1778664139971.9563, - "size": 6674, - "lines": 129, + "mtimeMs": 1779514030000, + "size": 7755, + "lines": 149, "role": "", "imports": [ "src/lib/contextManager" ] }, "tests/dataProcessor.test.ts": { - "mtimeMs": 1778028987448.8394, - "size": 3517, + "mtimeMs": 1777808065000, + "size": 3430, "lines": 87, "role": "/ ", "imports": [ @@ -1493,8 +1493,8 @@ ] }, "tests/devilAgent.test.ts": { - "mtimeMs": 1779065453895.5222, - "size": 3240, + "mtimeMs": 1778943907000, + "size": 3179, "lines": 61, "role": "", "imports": [ @@ -1502,8 +1502,8 @@ ] }, "tests/findBrainFilesCache.test.ts": { - "mtimeMs": 1778549008921.7842, - "size": 2800, + "mtimeMs": 1778247665000, + "size": 2720, "lines": 80, "role": "Unit tests for findBrainFiles TTL cache.", "imports": [ @@ -1511,8 +1511,8 @@ ] }, "tests/icsParser.test.ts": { - "mtimeMs": 1779065453895.5222, - "size": 5145, + "mtimeMs": 1778934828000, + "size": 5011, "lines": 134, "role": "", "imports": [ @@ -1520,8 +1520,8 @@ ] }, "tests/integration_retrieval.test.ts": { - "mtimeMs": 1778028987449.4358, - "size": 4108, + "mtimeMs": 1777949141000, + "size": 4017, "lines": 91, "role": "", "imports": [ @@ -1530,8 +1530,8 @@ ] }, "tests/lessonHelpers.test.ts": { - "mtimeMs": 1778664139972.9592, - "size": 9591, + "mtimeMs": 1778595482000, + "size": 9400, "lines": 191, "role": "", "imports": [ @@ -1539,9 +1539,9 @@ ] }, "tests/lmStudioLifecycle.test.ts": { - "mtimeMs": 1778549008921.7842, - "size": 11703, - "lines": 318, + "mtimeMs": 1779516701000, + "size": 11539, + "lines": 326, "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": [ "src/lmstudio/lifecycleManager", @@ -1550,9 +1550,9 @@ ] }, "tests/lmStudioStreamer.test.ts": { - "mtimeMs": 1778664139973.4685, - "size": 8880, - "lines": 220, + "mtimeMs": 1779516692000, + "size": 8788, + "lines": 222, "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": [ "src/lmstudio/streamer", @@ -1560,24 +1560,24 @@ ] }, "tests/localPathPreflight.test.ts": { - "mtimeMs": 1778664139974.819, - "size": 24177, - "lines": 490, + "mtimeMs": 1779510896000, + "size": 23892, + "lines": 492, "role": "", "imports": [ "src/agent" ] }, "tests/mocks/vscode.js": { - "mtimeMs": 1778549008931.3582, - "size": 1738, + "mtimeMs": 1778246810000, + "size": 1670, "lines": 68, "role": "", "imports": [] }, "tests/officeSchema.test.ts": { - "mtimeMs": 1779065453896.7021, - "size": 10125, + "mtimeMs": 1778932509000, + "size": 9884, "lines": 241, "role": "", "imports": [ @@ -1587,8 +1587,8 @@ ] }, "tests/paths.test.ts": { - "mtimeMs": 1778549008931.3582, - "size": 2674, + "mtimeMs": 1778250990000, + "size": 2590, "lines": 84, "role": "Unit tests for the centralized path resolver.", "imports": [ @@ -1596,8 +1596,8 @@ ] }, "tests/pipelineTemplates.test.ts": { - "mtimeMs": 1779065453897.361, - "size": 3053, + "mtimeMs": 1778934174000, + "size": 2984, "lines": 69, "role": "", "imports": [ @@ -1605,8 +1605,8 @@ ] }, "tests/projectChronicle.test.ts": { - "mtimeMs": 1778029332769.3286, - "size": 8558, + "mtimeMs": 1778169995000, + "size": 8359, "lines": 199, "role": "", "imports": [ @@ -1614,8 +1614,8 @@ ] }, "tests/projectChronicleGuardPrompt.test.ts": { - "mtimeMs": 1778028987452.0652, - "size": 2890, + "mtimeMs": 1777808369000, + "size": 2838, "lines": 52, "role": "", "imports": [ @@ -1623,8 +1623,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": [ @@ -1632,8 +1632,8 @@ ] }, "tests/providers.test.ts": { - "mtimeMs": 1779065453898.3752, - "size": 4215, + "mtimeMs": 1778942187000, + "size": 4118, "lines": 97, "role": "", "imports": [ @@ -1642,8 +1642,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": [ @@ -1651,8 +1651,8 @@ ] }, "tests/resilience_v4.test.ts": { - "mtimeMs": 1778028987453.5366, - "size": 3519, + "mtimeMs": 1777978211000, + "size": 3435, "lines": 84, "role": "", "imports": [ @@ -1661,8 +1661,8 @@ ] }, "tests/responseRecovery.test.ts": { - "mtimeMs": 1778664139974.819, - "size": 8933, + "mtimeMs": 1778598707000, + "size": 8782, "lines": 151, "role": "", "imports": [ @@ -1670,8 +1670,8 @@ ] }, "tests/scoring.test.ts": { - "mtimeMs": 1778043314856.5872, - "size": 6189, + "mtimeMs": 1778169995000, + "size": 6055, "lines": 134, "role": "", "imports": [ @@ -1679,8 +1679,8 @@ ] }, "tests/secondBrainTrace.test.ts": { - "mtimeMs": 1778028987455.0378, - "size": 23431, + "mtimeMs": 1777866065000, + "size": 23024, "lines": 407, "role": "", "imports": [ @@ -1688,8 +1688,8 @@ ] }, "tests/sheetsApi.test.ts": { - "mtimeMs": 1779065453899.3755, - "size": 4026, + "mtimeMs": 1778936029000, + "size": 3913, "lines": 113, "role": "", "imports": [ @@ -1698,8 +1698,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": [ @@ -1707,17 +1707,17 @@ ] }, "tests/systemPrompt.test.ts": { - "mtimeMs": 1778028987455.4153, - "size": 1244, - "lines": 29, + "mtimeMs": 1779513481000, + "size": 1455, + "lines": 32, "role": "", "imports": [ "src/utils" ] }, "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": [ @@ -1725,8 +1725,8 @@ ] }, "tests/taskStore.test.ts": { - "mtimeMs": 1779065453901.3855, - "size": 7411, + "mtimeMs": 1778936645000, + "size": 7226, "lines": 185, "role": "", "imports": [ @@ -1735,8 +1735,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": [ @@ -1746,8 +1746,8 @@ ] }, "tests/transaction.test.ts": { - "mtimeMs": 1777511752614.9685, - "size": 2132, + "mtimeMs": 1777808065000, + "size": 2064, "lines": 68, "role": "/ ", "imports": [ @@ -1755,8 +1755,8 @@ ] }, "tests/vulnerability.test.ts": { - "mtimeMs": 1777511752615.9702, - "size": 2160, + "mtimeMs": 1777808065000, + "size": 2100, "lines": 60, "role": "/ ", "imports": [ @@ -1765,678 +1765,741 @@ ] }, "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, - "lines": 40, - "role": "Advanced Features Implementation Guide", - "imports": [] - }, - "docs/AgentEngine_Architecture.md": { - "mtimeMs": 1778028987295.9912, - "size": 14652, - "lines": 314, - "role": "AgentEngine Architecture Document", - "imports": [] - }, "docs/ASTRA_OFFICE_REFACTOR.md": { - "mtimeMs": 1779065453844.1316, - "size": 9593, + "mtimeMs": 1778931177000, + "size": 9395, "lines": 198, "role": "Astra Office Refactor — Design Doc", "imports": [ "docs/features/astraOffice" ] }, - "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를 통해 ...", + "docs/Advanced_Features_Implementation_Guide.md": { + "mtimeMs": 1777808065000, + "size": 1804, + "lines": 40, + "role": "Advanced Features Implementation Guide", "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", + "docs/AgentEngine_Architecture.md": { + "mtimeMs": 1777863061000, + "size": 14338, + "lines": 314, + "role": "AgentEngine Architecture Document", "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, + "docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md": { + "mtimeMs": 1778592247000, + "size": 12254, + "lines": 452, + "role": "Telegram Remote Execution 기획서", + "imports": [] + }, + "docs/UX_UI_Consistency_Guidelines.md": { + "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": 1778028987317.6665, - "size": 2575, + "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": 1778028987320.982, - "size": 1907, + "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": 1778028987321.984, - "size": 1899, + "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": 1778028987322.4868, - "size": 1884, + "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": 1778028987322.9897, - "size": 1639, + "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": 1778028987322.9897, - "size": 1839, + "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": 1778028987323.9915, - "size": 1753, + "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": 1778028987324.4944, - "size": 2311, + "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": 1778028987324.9973, - "size": 2355, + "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": 1778028987325.5178, - "size": 2293, + "docs/records/ConnectAI/bugs/BUG-0011-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md": { + "mtimeMs": 1777982331000, + "size": 2277, "lines": 16, "role": "Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...", "imports": [] }, - "docs/records/ConnectAI/bugs/BUG-0012-질문이-있어-논문을-쓰려고해-논문-주제는-서비스적이-아닌-사용자가-ai에게-구조로-질문을-해야-사용자의-의도.md": { - "mtimeMs": 1778727537111.4634, + "docs/records/ConnectAI/bugs/BUG-0012-질문이-있어-논문을-쓰려고해-논문-주제는-서비스적이-아닌-사용자가-ai에게-구조로-질문을-해야-사용자의-의도.md": { + "mtimeMs": 1778762677000, "size": 2354, "lines": 16, "role": "Bug: 질문이 있어. 논문을 쓰려고해. 논문 주제는 서비스적이 아닌 사용자가 ai에게 구조로 질문을 해야 사용자의 의도에 맞는 답변을 받을 수 있을까야...", "imports": [] }, - "docs/records/ConnectAI/bugs/BUG-0013-thesis-paper를-쓰려고-하는데-아래와-같이-쓰면-좋을까-이런-식으로-쓰면-되지-않을까-싶음-1-in.md": { - "mtimeMs": 1778728112255.496, + "docs/records/ConnectAI/bugs/BUG-0013-thesis-paper를-쓰려고-하는데-아래와-같이-쓰면-좋을까-이런-식으로-쓰면-되지-않을까-싶음-1-in.md": { + "mtimeMs": 1778762677000, "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, + "docs/records/ConnectAI/bugs/BUG-0014-논문-outline-title-인간-ai-상호작용에서-의도-정렬을-높이기-위한-최소-질의-구조-연구-또는-사.md": { + "mtimeMs": 1778762677000, "size": 2531, "lines": 16, "role": "Bug: 논문 Outline Title 인간-AI 상호작용에서 의도 정렬을 높이기 위한 최소 질의 구조 연구 또는 사용자의 인지적 편향을 보완하는 구조화...", "imports": [] }, "docs/records/ConnectAI/chronicle.config.json": { - "mtimeMs": 1779442717216.4915, - "size": 371, + "mtimeMs": 1779518029000, + "size": 416, "lines": 11, "role": "JSON configuration", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0001-volumes-data-project-antigravity-connectai-이-프로젝트를-지금-개발-중에-.md": { - "mtimeMs": 1778028987326.5986, - "size": 1463, + "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": 1778028987326.5986, - "size": 1897, + "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": 1778028987328.1038, - "size": 1805, + "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": 1778028987328.613, - "size": 1491, + "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": 1778028987329.1296, - "size": 1531, + "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": 1778028987329.1296, - "size": 1623, + "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": 1778549008870.013, - "size": 1944, + "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": 1778664139928.3345, - "size": 1625, + "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": 1778720117388.955, - "size": 1526, + "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": 1778720117389.4595, - "size": 1487, + "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/decisions/ADR-0011-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md": { - "mtimeMs": 1778720344688.4775, + "docs/records/ConnectAI/decisions/ADR-0011-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md": { + "mtimeMs": 1778762677000, "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, + "docs/records/ConnectAI/decisions/ADR-0012-e-wiki-connectai-self-reflection-기능이-있는데-어떻게-self-reflection.md": { + "mtimeMs": 1778762677000, "size": 1448, "lines": 19, "role": "ADR: E:\\Wiki\\connectai self reflection 기능이 있는데 어떻게 SELF REFLECTION이 반영되는지 분석해줘.", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0013-e-wiki-connectai-이-프로젝트야.md": { - "mtimeMs": 1778842918359.619, + "docs/records/ConnectAI/decisions/ADR-0013-e-wiki-connectai-이-프로젝트야.md": { + "mtimeMs": 1778902489000, "size": 1370, "lines": 19, "role": "ADR: E:\\Wiki\\connectai 이 프로젝트야", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0014-astra-office-부분-관련해서-개선할-부분이-너무-많아-개선점이-무었이-있는지-의견-주면-좋겠어.md": { - "mtimeMs": 1778842955303.0571, + "docs/records/ConnectAI/decisions/ADR-0014-astra-office-부분-관련해서-개선할-부분이-너무-많아-개선점이-무었이-있는지-의견-주면-좋겠어.md": { + "mtimeMs": 1778902489000, "size": 1560, "lines": 19, "role": "ADR: ASTRA OFFICE 부분 관련해서 개선할 부분이 너무 많아. 개선점이 무었이 있는지 의견 주면 좋겠어.", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0015-너의-생각은-사용자가-다음-행동을-추측-안-해도-되는-astra-이게-가장-큰-효과-있을-거-같습니다-3개-.md": { - "mtimeMs": 1779065453846.6514, - "size": 2501, + "docs/records/ConnectAI/decisions/ADR-0015-너의-생각은-사용자가-다음-행동을-추측-안-해도-되는-astra-이게-가장-큰-효과-있을-거-같습니다-3개-.md": { + "mtimeMs": 1778943211000, + "size": 2482, "lines": 19, "role": "ADR: 너의 생각은? \"사용자가 다음 행동을 추측 안 해도 되는 Astra\" 이게 가장 큰 효과 있을 거 같습니다. 3개 작업으로 묶어볼 수 있어요: ...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0016-내가-블로그글-작성시-사용하고-있는-지침서인데-slot1번-기준으로-더-자연스럽고-트랜디하고-구독자에게-자연.md": { - "mtimeMs": 1779065453847.7014, - "size": 2451, + "docs/records/ConnectAI/decisions/ADR-0016-내가-블로그글-작성시-사용하고-있는-지침서인데-slot1번-기준으로-더-자연스럽고-트랜디하고-구독자에게-자연.md": { + "mtimeMs": 1779029444000, + "size": 2432, "lines": 19, "role": "ADR: 내가 블로그글 작성시 사용하고 있는 지침서인데 slot1번 기준으로 더 자연스럽고 트랜디하고 구독자에게 자연스럽게 정보를 전달 할 수 있게 개선...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0017-e-wiki-connectai-질문이-있어-지금-이-프로젝트는-2nd-지식을-내가-특정-폴더로-wiki화한-.md": { - "mtimeMs": 1779270264270.286, + "docs/records/ConnectAI/decisions/ADR-0017-e-wiki-connectai-질문이-있어-지금-이-프로젝트는-2nd-지식을-내가-특정-폴더로-wiki화한-.md": { + "mtimeMs": 1779492050000, "size": 1823, "lines": 19, "role": "ADR: E:\\Wiki\\connectai 질문이 있어. 지금 이 프로젝트는 2nd 지식을 내가 특정 폴더로 wiki화한 md 파일들을 불러오는 방식으로 ...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0018-방금-2nd-뇌-에-lateral-thinking-관련-지식을-추가했어-이-기능이-앞으로-너가-답을-할때-어.md": { - "mtimeMs": 1779420144716.2415, + "docs/records/ConnectAI/decisions/ADR-0018-방금-2nd-뇌-에-lateral-thinking-관련-지식을-추가했어-이-기능이-앞으로-너가-답을-할때-어.md": { + "mtimeMs": 1779492050000, "size": 1619, "lines": 19, "role": "ADR: 방금 2nd 뇌 에 Lateral Thinking 관련 지식을 추가했어. 이 기능이 앞으로 너가 답을 할때 어떠한 영향을 끼치는지 알려주면 좋겠...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0019-오늘-팀별-보고를-했어-그냥-하는게-너무-심적으로-힘든데-어떻게-개선할-수-있을까.md": { - "mtimeMs": 1779420342804.8145, + "docs/records/ConnectAI/decisions/ADR-0019-오늘-팀별-보고를-했어-그냥-하는게-너무-심적으로-힘든데-어떻게-개선할-수-있을까.md": { + "mtimeMs": 1779492050000, "size": 1642, "lines": 19, "role": "ADR: 오늘 팀별 보고를 했어. 그냥 하는게 너무 심적으로 힘든데 어떻게 개선할 수 있을까?", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0020-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { - "mtimeMs": 1779430149727.801, + "docs/records/ConnectAI/decisions/ADR-0020-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { + "mtimeMs": 1779492050000, "size": 2341, "lines": 19, "role": "ADR: A팀장이 있어. 팀원으로 B가 있고 C가 있어. A팀장은 0라는 이사의 제안을 받아서 다른 회사로 가기로 했어. 이 소문이 퍼져서 B와 C도 알...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0021-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { - "mtimeMs": 1779434247942.7249, + "docs/records/ConnectAI/decisions/ADR-0021-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { + "mtimeMs": 1779492050000, "size": 2333, "lines": 19, "role": "ADR: A팀장이 있어. 팀원으로 B가 있고 C가 있어. A팀장은 0라는 이사의 제안을 받아서 다른 회사로 가기로 했어. 이 소문이 퍼져서 B와 C도 알...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0022-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { - "mtimeMs": 1779442646619.3445, + "docs/records/ConnectAI/decisions/ADR-0022-a팀장이-있어-팀원으로-b가-있고-c가-있어-a팀장은-0라는-이사의-제안을-받아서-다른-회사로-가기로-했어-.md": { + "mtimeMs": 1779492050000, "size": 2353, "lines": 19, "role": "ADR: A팀장이 있어. 팀원으로 B가 있고 C가 있어. A팀장은 0라는 이사의 제안을 받아서 다른 회사로 가기로 했어. 이 소문이 퍼져서 B와 C도 알...", "imports": [] }, - "docs/records/ConnectAI/decisions/ADR-0023-메일-다듬어줘-안녕하세요-문의-주신-poc-진행-관련하여-아래와-같이-회신드립니다-현재-내부-검토-결과-락인.md": { - "mtimeMs": 1779442717209.4446, + "docs/records/ConnectAI/decisions/ADR-0023-메일-다듬어줘-안녕하세요-문의-주신-poc-진행-관련하여-아래와-같이-회신드립니다-현재-내부-검토-결과-락인.md": { + "mtimeMs": 1779492050000, "size": 2164, "lines": 19, "role": "ADR: 메일 다듬어줘. 안녕하세요. 문의 주신 POC 진행 관련하여 아래와 같이 회신드립니다. 현재 내부 검토 결과, 락인컴퍼니의 LIAPP 및 LIS...", "imports": [] }, + "docs/records/ConnectAI/decisions/ADR-0024-volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-.md": { + "mtimeMs": 1779515288000, + "size": 1188, + "lines": 19, + "role": "ADR: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "imports": [] + }, "docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": { - "mtimeMs": 1778028987330.4185, - "size": 1564, + "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": 1778028987330.9385, - "size": 4661, + "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": 1778028987330.9385, - "size": 1890, + "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": 1778028987331.969, - "size": 1563, + "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": 1778028987332.698, - "size": 1223, + "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": 1778028987333.7078, - "size": 1524, + "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": 1778028987334.2126, - "size": 1551, + "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": 1778028987335.4814, - "size": 1946, + "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": 1778028987335.4814, - "size": 1074, + "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": 1778028987336.4841, - "size": 1467, + "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": 1778028987336.988, - "size": 4787, + "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": 1778028987337.4993, - "size": 1858, + "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": 1778028987337.4993, - "size": 1770, + "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": 1778028987338.1978, - "size": 1749, + "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": 1778664139929.635, - "size": 1597, + "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": 1778664139930.2983, - "size": 1663, + "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": 1778664139930.8157, - "size": 1739, + "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": 1778664139931.329, - "size": 706, + "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": 1778720117403.2517, - "size": 1012, + "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": 1778720117403.2517, - "size": 1760, + "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/development/2026-05-14_reflector-에이전트가-1인-기업-에이전트-목록에는-안보이는데_implementation.md": { - "mtimeMs": 1778720474901.9106, + "docs/records/ConnectAI/development/2026-05-14_reflector-에이전트가-1인-기업-에이전트-목록에는-안보이는데_implementation.md": { + "mtimeMs": 1778762677000, "size": 1519, "lines": 24, "role": "Development Log: REFLECTOR 에이전트가 1인 기업 에이전트 목록에는 안보이는데", "imports": [] }, - "docs/records/ConnectAI/development/2026-05-16_astra-google-calendar-oauth-연결_implementation-2.md": { - "mtimeMs": 1779065453847.7014, - "size": 1252, + "docs/records/ConnectAI/development/2026-05-16_astra-google-calendar-oauth-연결_implementation-2.md": { + "mtimeMs": 1778937290000, + "size": 1230, "lines": 22, "role": "Development Log: Astra: Google Calendar OAuth 연결", "imports": [] }, - "docs/records/ConnectAI/development/2026-05-16_astra-google-calendar-oauth-연결_implementation.md": { - "mtimeMs": 1779065453848.7056, - "size": 1289, + "docs/records/ConnectAI/development/2026-05-16_astra-google-calendar-oauth-연결_implementation.md": { + "mtimeMs": 1778937268000, + "size": 1267, "lines": 22, "role": "Development Log: Astra: Google Calendar OAuth 연결", "imports": [] }, - "docs/records/ConnectAI/development/2026-05-16_astra-office가-아직은-많이-부족한것-같은데-어떻게-하면-트랜디하고-재미있는-볼거리가-될-수-있을지_implementation.md": { - "mtimeMs": 1779065453849.6394, - "size": 1772, + "docs/records/ConnectAI/development/2026-05-16_astra-office가-아직은-많이-부족한것-같은데-어떻게-하면-트랜디하고-재미있는-볼거리가-될-수-있을지_implementation.md": { + "mtimeMs": 1778942937000, + "size": 1750, "lines": 22, "role": "Development Log: astra office가 아직은 많이 부족한것 같은데 어떻게 하면 트랜디하고 재미있는 볼거리가 될 수 있을지. 개선점 줄 수 있어?", "imports": [] }, - "docs/records/ConnectAI/development/2026-05-22_e-wiki-connectai-이-프로젝트가-너의-프로젝트인데-단순히-cloud-base-ai-model을-_implementation.md": { - "mtimeMs": 1779412633314.1108, + "docs/records/ConnectAI/development/2026-05-22_e-wiki-connectai-이-프로젝트가-너의-프로젝트인데-단순히-cloud-base-ai-model을-_implementation.md": { + "mtimeMs": 1779492050000, "size": 1638, "lines": 22, "role": "Development Log: E:\\Wiki\\connectai 이 프로젝트가 너의 프로젝트인데, 단순히 cloud base ai model을 사용하는 것과 너를 사용하는 것이...", "imports": [] }, - "docs/records/ConnectAI/discussions/2026-05-13_volumes-data-project-antigravity-connectai-이-프로젝트-작업-할-거야.md": { - "mtimeMs": 1778720117404.2578, - "size": 668, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation-2.md": { + "mtimeMs": 1779510546000, + "size": 1823, + "lines": 25, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 하고 사용자 입장에서 개선이 필요한 부분이 있는지 확...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation.md": { + "mtimeMs": 1779510462000, + "size": 823, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 하고 사용자 입장에서 개선이 필요한 부분이 있는지 확...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-해줘-그리고-어떻게_implementation.md": { + "mtimeMs": 1779508381000, + "size": 854, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 해줘 그리고 어떻게 하면 더 유저 친화적으로 너를 개...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-2.md": { + "mtimeMs": 1779512574000, + "size": 1836, + "lines": 26, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-3.md": { + "mtimeMs": 1779514787000, + "size": 851, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-4.md": { + "mtimeMs": 1779514895000, + "size": 1786, + "lines": 23, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-5.md": { + "mtimeMs": 1779514975000, + "size": 1334, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "imports": [] + }, + "docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation.md": { + "mtimeMs": 1779511474000, + "size": 851, + "lines": 22, + "role": "Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안...", + "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": 1778720117405.2607, - "size": 667, + "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": 1778720117405.2607, - "size": 736, + "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": 1778720117406.7637, - "size": 735, + "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/discussions/2026-05-14_최성연-알아-칼리버스에서-근무한데.md": { - "mtimeMs": 1778733596076.9204, + "docs/records/ConnectAI/discussions/2026-05-14_최성연-알아-칼리버스에서-근무한데.md": { + "mtimeMs": 1778762677000, "size": 1297, "lines": 16, "role": "Discussion: 최성연 알아? 칼리버스에서 근무한데", "imports": [] }, - "docs/records/ConnectAI/discussions/2026-05-22_e-wiki-connectai-git에-커밋하고-푸쉬해줘.md": { - "mtimeMs": 1779431169034.8508, + "docs/records/ConnectAI/discussions/2026-05-22_e-wiki-connectai-git에-커밋하고-푸쉬해줘.md": { + "mtimeMs": 1779492050000, "size": 745, "lines": 16, "role": "Discussion: E:\\Wiki\\connectai git에 커밋하고 푸쉬해줘.", "imports": [] }, "docs/records/ConnectAI/planning/2026-05-02_project-chronicle-guard.md": { - "mtimeMs": 1778028987339.2349, - "size": 3004, + "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": 1778028987339.818, - "size": 1503, + "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": 1778807413479.8662, - "size": 1380, + "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": 1778720117406.7637, - "size": 1260, + "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": 1778807413480.8667, - "size": 3010, + "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": 1778028987341.925, - "size": 987, + "mtimeMs": 1777808208000, + "size": 957, "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": 1779442717211.4546, - "size": 11829, - "lines": 182, + "mtimeMs": 1779515288000, + "size": 13264, + "lines": 209, "role": "Project Timeline", "imports": [] }, "docs/refactoring_roadmap.md": { - "mtimeMs": 1778232062143.956, - "size": 3176, + "mtimeMs": 1778171332000, + "size": 3123, "lines": 53, "role": "🛠️ ConnectAI 아키텍처 리팩토링 로드맵", "imports": [] - }, - "docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md": { - "mtimeMs": 1778664139927.3354, - "size": 12706, - "lines": 452, - "role": "Telegram Remote Execution 기획서", - "imports": [] - }, - "docs/UX_UI_Consistency_Guidelines.md": { - "mtimeMs": 1778028987311.5012, - "size": 2553, - "lines": 44, - "role": "UX/UI Consistency Guidelines", - "imports": [] } } } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json b/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json index 961f8fc..23975a0 100644 --- a/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json +++ b/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json @@ -1,5 +1,5 @@ { "result": "Final report with inconsistencies. This should be long enough to pass validation.", - "createdAt": 1779495116625, + "createdAt": 1779518828393, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/65775be352df43297b63c7af59c9f4f39d2bc368f77456c37b5eef9a94a66b5c.json b/.astra/tests/stress/.astra/cache/65775be352df43297b63c7af59c9f4f39d2bc368f77456c37b5eef9a94a66b5c.json index 12cd895..6b31886 100644 --- a/.astra/tests/stress/.astra/cache/65775be352df43297b63c7af59c9f4f39d2bc368f77456c37b5eef9a94a66b5c.json +++ b/.astra/tests/stress/.astra/cache/65775be352df43297b63c7af59c9f4f39d2bc368f77456c37b5eef9a94a66b5c.json @@ -1,5 +1,5 @@ { "result": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.", - "createdAt": 1779495116625, + "createdAt": 1779518828393, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/6894d26c5b0a55d25d756a473225c7a44d7661af673b24e3f49551a7a2e50280.json b/.astra/tests/stress/.astra/cache/6894d26c5b0a55d25d756a473225c7a44d7661af673b24e3f49551a7a2e50280.json index 0c29e17..8d3b6e9 100644 --- a/.astra/tests/stress/.astra/cache/6894d26c5b0a55d25d756a473225c7a44d7661af673b24e3f49551a7a2e50280.json +++ b/.astra/tests/stress/.astra/cache/6894d26c5b0a55d25d756a473225c7a44d7661af673b24e3f49551a7a2e50280.json @@ -1,5 +1,5 @@ { "result": "Detailed Execution Plan: 1. Research 2. Analyze 3. Write report with high quality.", - "createdAt": 1779495116624, + "createdAt": 1779518828392, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/88cb61499f88ed38165b64bd3e8adc543795e4b427b64540a49c9ab27c7fe213.json b/.astra/tests/stress/.astra/cache/88cb61499f88ed38165b64bd3e8adc543795e4b427b64540a49c9ab27c7fe213.json index 28d5f34..e9e7980 100644 --- a/.astra/tests/stress/.astra/cache/88cb61499f88ed38165b64bd3e8adc543795e4b427b64540a49c9ab27c7fe213.json +++ b/.astra/tests/stress/.astra/cache/88cb61499f88ed38165b64bd3e8adc543795e4b427b64540a49c9ab27c7fe213.json @@ -1,5 +1,5 @@ { - "result": "---\nid: stress_conflict_1779495116612\ndate: 2026-05-23T00:11:56.625Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\nFinal report with inconsistencies. This should be long enough to pass validation.\n\nFinal report with inconsistencies. This should be long enough to pass validation.\n\n---\n## 💡 Astra의 선제적 제안 (Proactive Next Actions)\nFinal report with inconsistencies. This should be long enough to pass validation.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `60/100` | ⚠️ Medium |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[PLANNER]** 전략 수립 중... (11ms)\n- **[RESEARCHER]** 핵심 정보 수집 및 분석 중... (0ms)\n- **[WRITER]** 최종 리포트 작성 및 편집 중... (1ms)\n", - "createdAt": 1779495116625, + "result": "---\nid: stress_conflict_1779518828380\ndate: 2026-05-23T06:47:08.394Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\nFinal report with inconsistencies. This should be long enough to pass validation.\n\nFinal report with inconsistencies. This should be long enough to pass validation.\n\n---\n## 💡 Astra의 선제적 제안 (Proactive Next Actions)\nFinal report with inconsistencies. This should be long enough to pass validation.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `60/100` | ⚠️ Medium |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[PLANNER]** 전략 수립 중... (12ms)\n- **[RESEARCHER]** 핵심 정보 수집 및 분석 중... (1ms)\n- **[WRITER]** 최종 리포트 작성 및 편집 중... (0ms)\n", + "createdAt": 1779518828394, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/missions/stress_conflict_1779495116612.json b/.astra/tests/stress/.astra/missions/stress_conflict_1779518828380.json similarity index 82% rename from .astra/tests/stress/.astra/missions/stress_conflict_1779495116612.json rename to .astra/tests/stress/.astra/missions/stress_conflict_1779518828380.json index 561530c..879e3f5 100644 --- a/.astra/tests/stress/.astra/missions/stress_conflict_1779495116612.json +++ b/.astra/tests/stress/.astra/missions/stress_conflict_1779518828380.json @@ -1,8 +1,8 @@ { - "missionId": "stress_conflict_1779495116612", + "missionId": "stress_conflict_1779518828380", "status": "completed", - "startTime": "2026-05-23T00:11:56.613Z", - "totalElapsedMs": 13, + "startTime": "2026-05-23T06:47:08.380Z", + "totalElapsedMs": 14, "results": { "planner": "Detailed Execution Plan: 1. Research 2. Analyze 3. Write report with high quality.", "researcher": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.", @@ -16,30 +16,30 @@ { "from": "idle", "to": "planner", - "durationMs": 11, + "durationMs": 12, "message": "전략 수립 중...", - "ts": "2026-05-23T00:11:56.624Z" + "ts": "2026-05-23T06:47:08.392Z" }, { "from": "planner", "to": "researcher", - "durationMs": 0, + "durationMs": 1, "message": "핵심 정보 수집 및 분석 중...", - "ts": "2026-05-23T00:11:56.624Z" + "ts": "2026-05-23T06:47:08.393Z" }, { "from": "researcher", "to": "writer", - "durationMs": 1, + "durationMs": 0, "message": "최종 리포트 작성 및 편집 중...", - "ts": "2026-05-23T00:11:56.625Z" + "ts": "2026-05-23T06:47:08.393Z" }, { "from": "writer", "to": "completed", "durationMs": 1, "message": "미션 완료", - "ts": "2026-05-23T00:11:56.626Z" + "ts": "2026-05-23T06:47:08.394Z" } ], "resilienceMetrics": { diff --git a/PATCHNOTES.md b/PATCHNOTES.md index 7227da9..fbf1925 100644 --- a/PATCHNOTES.md +++ b/PATCHNOTES.md @@ -1,5 +1,145 @@ # Astra Patch Notes +## v2.2.72 (2026-05-23) +### ⚡ LM Studio 통신 hardening + 속도 부스트 팩 +한 turn 에 두 라운드 작업을 묶었다. (A) 통신 경로 안전망 9건 + (B) 속도 개선 4건. + +**(A) 통신 hardening** +- **Sampling parity SDK ↔ REST.** 기존엔 `topP/topK/minP/repeatPenalty` 가 SDK 경로에만 적용 → 핸들이 죽어 REST 로 fallback 되면 한글 토큰 깨짐(`붕괴→붕점`) 재발. 공유 `LmStudioSampling` + `samplingToRestBody` 로 두 경로가 동일 값을 보내도록 통일. Ollama 도 `options.{top_p,top_k,min_p,repeat_penalty}` 로 같이 받음. +- **신규 설정:** `g1nation.lmStudio.sampling.{topP=0.9, topK=20, minP=0.05, repeatPenalty=1.1}` + `g1nation.lmStudio.statsInBudget=true`. +- **prediction.stats UI 노출.** 매 turn 끝나면 ctx-badge 에 `… · 32.1 tok/s · TTFT 0.40s` 표시 (SDK 경로만). 툴팁에 출력 토큰 수 / 총 시간 / stopReason 도 추가. +- **listDownloaded TTL 캐시 (60s).** 사이드바 드롭다운 열 때마다 LM Studio 디스크 walk 하던 호출을 캐싱. 빈 결과는 캐싱 안 함 (방금 켠 LM Studio 가리는 회귀 방지). `setBaseUrl` / `invalidateCaches()` 가 캐시 초기화. +- **Empty-response 복구 일원화.** `LMStudioStreamer.stream()` 의 attempt-2 retry 가 dead-handle 에러뿐 아니라 "에러 없이 0 token" 케이스도 다룸. agent.ts 의 중복된 handle-reset retry 블록 (~30 LOC) 삭제. REST fallback 은 유지. +- **handle-dead 패턴 확장.** `channel closed`, `WebSocket (is not open|closed|disconnected)`, `Connection (lost|reset|closed)`, `ECONNRESET`, `socket hang up` 추가. +- **`httpToWebSocketUrl` path 정리.** `/api/v0`, `/api/v1`, `/v1`, `/api` 를 loop 으로 unwind — `http://host/api/v0` → ws root 까지 한 번에. +- **service-down 조기 break.** `createStreamingRequest` 가 `error.cause.code === 'ECONNREFUSED' | 'ENOTFOUND' | 'EAI_AGAIN'` 감지 시 attempt/variant/candidate 루프 즉시 종료. 12회 fetch → 1회 → 사용자 에러 ~1s. +- **callAgent cutoff warn.** sub-agent SDK 호출도 `stopReason` 검사 → `/maxPredicted|context|truncat/` 매칭 시 logError. 잘린 specialist 출력이 silently pipeline 을 오염시키는 거 방지. + +**(B) 속도 부스트** +- **Speculative decoding.** 신규 설정 `g1nation.lmStudio.draftModel` (빈 값 = OFF). 작은 draft 모델 (e.g. `gemma-2b-it`) 지정 시 large 모델 1.5~3× throughput. `ChatStreamRequest.draftModel` → SDK `respond({draftModel})`. main 모델 load 직후 lifecycle 이 `unstable_preloadDraftModel` 호출해 cold-load 비용 제거. ctx-badge 에 `spec 68%` accept-ratio 표시 (60%+ healthy, 30% 미만 = draft 가 잘못 골라 오히려 느려질 수 있음). +- **Load-time 옵션 (8개).** `client.load()` 가 `LMStudioLoadConfig` 받아 `LLMLoadModelConfig` (GPUSetting 래퍼 포함) 으로 SDK 에 전달. + - `g1nation.lmStudio.load.flashAttention` (true) — long-context 10~20% + - `g1nation.lmStudio.load.gpuOffloadRatio` ("max" | "off" | 0-1) + - `g1nation.lmStudio.load.offloadKVCacheToGpu` (true) + - `g1nation.lmStudio.load.keepModelInMemory` (true) — swap-out 방지 + - `g1nation.lmStudio.load.useFp16ForKVCache` (false) — KV-cache 메모리 반감 (VRAM 빠듯할 때) + - `g1nation.lmStudio.load.evalBatchSize` (0 = 엔진 default) — prefill 속도 +- **`liveStreamTokens` 기본 → true (← false).** TTFT 체감 향상 — sanitize + `streamReplace` 가 생성 끝에 최종 답변으로 교체하므로 control token 노출은 잠깐만 가능. (memory 의 "sanitize-before-post handles the leak" 가 근거) + +**시스템 프롬프트 KV-cache (item 1+5)**: 조사 결과 현재 ordering (stable head → `[CONTEXT]` body → stable tail) 이 이미 prefix-cache 친화적이라 코드 변경 없음. 단, agent persona-first 배치는 small-model anchoring 우선으로 유지 — KV-cache 잠재 이득보다 답변 품질이 우선. + +**Touched:** `src/{config,agent,extension}.ts`, `src/lmstudio/{client,streamer,lifecycleManager}.ts`, `media/sidebar.js`, `package.json` (12개 신규 설정 + `liveStreamTokens` default flip), 2개 test FakeClient 에 `listDownloadedCached` stub. 401/401 jest 통과 · tsc clean · esbuild 2.9MB. + +**신규 패키징:** `astra-2.2.72.vsix`. + +--- + +## v2.2.71 (2026-05-23) +### 📦 자동 기록 줄 전체를 도구 ▾ 메뉴 안으로 이동 +- **요청 명확화:** v2.2.70 에서 토글만 도구 메뉴에 추가했는데, 사용자가 원했던 건 사이드바 하단의 records-line ("● 자동 기록 · filename · 기록 ▾") **줄 전체** 를 도구 메뉴 안으로 옮기는 것. +- **수정:** `media/sidebar.html` 의 `
` 통째로 삭제. 그 안에 있던 모든 요소 (자동 기록 status, recordsLatest, chronicleRecordSel, openChronicleRecordBtn, refreshChronicleRecordsBtn, openDesignerBtn) 를 도구 ▾ 드롭다운 안으로 흡수. 도구 메뉴는 `hdr-menu-wide` 로 변경. +- **새 메뉴 레이아웃:** 도구 ▾ 클릭 시 + - "자동 기록" 섹션 — 토글 / 최근 저장 기록 status / 기록 selector / 선택 기록 열기 / 새로고침 / 폴더 열기 + - "도구" 섹션 — 근거 추적 JSON 보기 / 원본 답변을 두뇌에 저장 / 두뇌 동기화 +- **JS 안전성:** 모든 element ID 는 유지했으므로 기존 sidebar.js 핸들러는 그대로 작동. `renderChronicleAutoToggle` 만 살짝 수정 — chronicleAutoStatus 가 이제 자식 (status-dot · recordsLatest) 을 가진 컨테이너라 `textContent` 직접 할당이 자식을 지우는 회귀를 막기 위해 opacity / title 만 갱신하도록 변경. +- **사이드바 공간:** records-line 줄 한 줄 제거 → context bar 와 chat 본문 사이 noise 감소. +- **신규 패키징:** `astra-2.2.71.vsix`. + +--- + +## v2.2.70 (2026-05-23) +### 🎚 자동 기록 On/Off 토글 (도구 메뉴) +- **추가:** 사이드바 records-line 의 "자동 기록" 표시를 끄고 켤 수 있는 토글. 위치는 **도구 ▾** 드롭다운 첫 항목 (`자동 기록: 켜짐 / 꺼짐`). +- **신규 설정:** `g1nation.chronicleAutoRecord` (기본 `true`). 토글 클릭 시 즉시 VS Code Global 설정에 영구 저장 — 다음 세션에도 유지. +- **gating:** `_autoWriteChronicleAfterPrompt` 진입 시 `getConfig().chronicleAutoRecord === false` 면 early return. 자동 저장만 멈추고, 수동 기록 (도구 메뉴의 다른 기록 항목, `/wiki` 등) 은 그대로 동작. +- **UI 피드백:** OFF 일 때 records-line 의 "자동 기록" 라벨이 "자동 기록 (꺼짐)" + dim opacity, 최근 기록 라벨도 dim 처리해 한눈에 상태 파악. 클릭 반응성을 위해 낙관적 갱신 후 서버 응답으로 보정. +- **메시지:** 신규 webview ↔ extension 메시지 `setChronicleAutoRecord` / `getChronicleAutoRecord` / `chronicleAutoRecordStatus`. `chronicleHandlers.ts` 에서 라우팅. +- **신규 패키징:** `astra-2.2.70.vsix`. + +--- + +## v2.2.69 (2026-05-23) +### 💾 대화 히스토리 — 슬라이딩 윈도우 + 모드 전환 bridge +- **현황 확인:** "히스토리 전역 단일 관리" 요구는 이미 충족 — `AgentExecutor.chatHistory` 단일 인스턴스이며 에이전트/회사/멀티에이전트 모드 전환은 history 를 비우지 않는다. 명시적 `/newChat` 이나 세션 삭제 때만 reset. +- **수정 1 — sliding window 요약.** 기존 `trimHistoryToBudget` 은 오래된 메시지를 단순히 `[이전 대화 N개 ... 생략됨]` count 마커로 대체 → 모델이 "이전에 무슨 얘기를 했는지" 모름. 이제는 dropped 메시지 배열을 marker factory 로 같이 넘기고, agent.ts `buildDroppedHistorySummary()` 가 추가 LLM 호출 없이 heuristic 으로 (a) 각 user prompt 첫 문장 (b) 각 assistant 답변 첫 문장 (R1 conclusion-first 가정) 만 뽑아 `U1: ... / A1: ... / U2: ...` 형식의 한 system 메시지로 압축. 8턴 이상이면 가장 오래된 절반은 한 줄로 축약. +- **수정 2 — 모드 전환 bridge.** `AgentExecutor._lastModeSignature` 로 (agent skill, multiAgent, company mode, brain) 의 해시를 추적. handlePrompt 진입 시 직전 값과 다르면 system prompt 에 `[MODE TRANSITION BRIDGE] 이전 모드 / 현재 모드 / 직전 대화 주제` 한 블록을 끼움. chatHistory 는 그대로라 사용자에겐 대화 연속이고, 모델은 새 페르소나/포맷을 따르면서도 직전 맥락을 잊지 않는다. `clearHistory` / `resetConversation` 에서 signature 도 함께 초기화해 새 세션 첫 메시지에 spurious bridge 가 끼지 않게 함. +- **시그니처 변경:** `trimHistoryToBudget` 의 `makeMarker` 가 `(droppedCount, droppedMessages)` 두 인자를 받는다. 호출부 (`agent.ts`) 와 단위 테스트 (`contextManager.test.ts`) 갱신. +- **신규 패키징:** `astra-2.2.69.vsix`. + +--- + +## v2.2.68 (2026-05-23) +### 📐 답변 형식 — 7개 hard rules +- **변경:** 답변 포맷 규칙을 사용자가 지정한 7개 hard rule 로 전면 교체. 기존 "긴 답변엔 핵심 요약 블록 + 상세 설명 + 제안" 의 3-section 템플릿은 폐기. + - R1. 첫 문장에 결론 (no 인삿말, no "분석해보겠습니다", no "핵심 요약" 라벨) + - R2. 섹션 최대 3개 + - R3. 같은 내용을 두 번 말하지 않는다 + - R4. 볼드는 전체 답변에서 3개 이하 + - R5. 추가 정보 없이 판단 가능하면 바로 실행 + - R6. 질문은 1개만 — (a) 방향이 두 갈래로 갈리고 사용자 의도를 알 수 없을 때, 또는 (b) 비가역 작업 직전 + - R7. 추측 가능하면 추측+실행하되 가정 한 줄 명시 ("가정: ...") +- **적용 범위:** 단일 에이전트 경로 (`BASE_SYSTEM_PROMPT [OUTPUT FORMAT]`) + 멀티 에이전트 최종 단계 (`SynthesizerAgent` persona) 양쪽에 동일 규칙 주입. 두 경로 모두 같은 형식으로 답변하도록 보장. +- **부수 정리:** `[FOLLOW-UP QUESTION RULES]` 섹션은 R6 에 흡수돼 제거. `[ENGINEERING STANCE]` 의 "Give the verdict first, then explain tradeoffs" 도 R1 과 중복이라 정리. +- **신규 패키징:** `astra-2.2.68.vsix`. + +--- + +## v2.2.67 (2026-05-23) +### 🧠 두뇌 추가/수정/삭제 정상화 +- **문제:** v2.2.66 이후 신고된 두 가지 회귀. + 1. 두뇌 "추가" 후 dropdown 에 새 brain 이 들어가긴 하는데 선택된 표시는 마지막 옵션인 `+ Add New Brain...` 으로 굳어버림 → 사용자에겐 "이름이 add new brain 으로 바뀜" 으로 보임. + 2. 그 상태에서 "수정"/"삭제" 버튼이 침묵 — 클릭해도 아무 일 안 일어남. +- **원인 1 — selected 적용 순서:** brainProfiles 핸들러가 `option.selected = true` 를 `appendChild` 직전에 거는 패턴이라 일부 Chromium webview 가 무시. 결과적으로 dropdown selectedIndex 가 마지막 옵션 (`+ Add New Brain...`) 에 머무름. +- **원인 2 — `brainSel.value === 'new'` 잠금:** 사용자가 dropdown 의 `+ Add New Brain...` 옵션을 직접 클릭하거나, 폴더 선택 모달을 취소하면 `brainSel.value` 가 `'new'` 로 굳어버림. 수정/삭제 버튼 onclick 첫 줄 `if (brainSel.value === 'new') return;` 가 silently early-return → 수정 안 됨. +- **수정 1 — selected 적용 순서 변경.** 옵션을 다 넣은 *후에* `brainSel.value = activeBrainId` 로 한 번에 selection 적용. appendChild 전 `o.selected = true` 패턴 제거. 이전에 `'new'` 로 굳어있던 값도 확실히 덮어쓴다. +- **수정 2 — 'new' 클릭 즉시 복원.** `brainSel.onchange` 가 `'new'` 를 감지하면 `addBrain` 메시지를 보냄과 *동시에* dropdown 을 직전 유효 선택(`brainSel.dataset.lastSelected`)으로 즉시 되돌림. 사용자가 폴더 선택을 취소해도 dropdown 이 `'new'` 로 굳지 않는다. +- **수정 3 — Edit/Delete 폴백.** 두 버튼이 만약 dropdown 이 `'new'` 인 순간에도 작동하도록 직전 유효 선택 또는 첫 실제 옵션으로 폴백. 더 이상 silent early-return 없음. +- **신규 패키징:** `astra-2.2.67.vsix`. + +--- + +## v2.2.66 (2026-05-23) +### 🧠 두뇌(지식 폴더) 드롭다운 회귀 수정 +- **문제:** 사이드바 컨텍스트 바의 두뇌 선택자가 갑자기 `+ Add New Brain...` 하나만 보이는 상태. readyBar 에는 `Brain 5407` 처럼 brain 자체는 정상 인식되는데 dropdown 만 빔. +- **원인 추정:** webview 의 `ready` 핸드셰이크 체인 (`_sendBrainStatus → _sendBrainProfiles → _sendSessionList → _sendModels → _sendChronicleProjects → _restoreActiveSessionIntoView → _sendReadyStatus`) 도중 한 단계가 throw 하면 그 뒤가 통째로 안 도는 구조. 또는 빈 profiles 배열 메시지가 한 번이라도 도착하면 기존 dropdown 옵션을 그대로 비워버리는 핸들러. +- **수정 1 — sidebar.js 방어:** `brainProfiles` 메시지의 `profiles` 가 빈 배열/undefined 이면 기존 dropdown 옵션을 보존하고 warn 로그만 남긴다. 잘못된 상태로 옵션을 0개로 만들어 `+ Add New Brain...` 만 남기는 회귀 차단. `case` 블록을 `{...}` scope 로 감싸 향후 const 명 충돌도 예방. +- **수정 2 — 초기 setup 이중 보장:** sidebarProvider.ts view 생성 시점에 `_restoreActiveSessionIntoView` + `_sendReadyStatus` 외에 `_sendBrainProfiles` / `_sendAgentsList` / `_sendModels` 도 직접 한 번 푸시. 'ready' 체인이 깨져도 dropdown 은 살아 있음. +- **수정 3 — 진단 로그:** `_sendBrainProfiles` 가 호출될 때마다 `profiles=N activeBrainId=X` 를 logInfo. 재발 시 Output → Astra 채널만 보면 원인 즉시 판별. +- **신규 패키징:** `astra-2.2.66.vsix`. + +--- + +## v2.2.65 (2026-05-23) +### 🧼 마크다운 마커 2차 sanitize — enforcer 재주입까지 차단 +- **문제:** v2.2.64 에서 `stripMarkdownFormatting` 을 `cleanedVisible` (모델 raw 출력 직후) 에만 적용했는데, 그 이후 단계인 `enforceLocalPathReviewAnswer` 가 sanitize 된 답변 앞에 `## 경로 확인 결과` 헤더를 하드코딩으로 다시 prepend → 화면에는 마커가 그대로 노출. `## 간단 요약`, `## 강점`, `## 근거`, `## 다음 액션` 등 ~20곳에서 같은 패턴. +- **수정:** `agent.ts` `finalAssistantContent` (webview / chatHistory 에 들어가는 진짜 최종 문자열) 단계에 sanitizer 2차 패스를 추가. 1차(모델 출력) + 2차(enforcer 출력) 이중 방어로 어떤 코드 경로에서 `##`/`**` 가 prepend 되어도 디스플레이 직전에 모두 벗겨진다. +- **신규 패키징:** `astra-2.2.65.vsix`. + +--- + +## v2.2.64 (2026-05-23) +### 🪶 Plain-text 출력 + 긴 답변 강제 요약 +- **문제:** 작은 로컬 모델이 학습된 습관으로 `## 다음 한 수`, `**` 강조 마커를 그대로 노출. 어떤 답변엔 라벨만 있고 본론으로 곧장 들어가서 사용자가 현황을 빠르게 파악하기 어려움. +- **수정 1 — 후처리 sanitizer.** `responseRecovery.ts` 에 `stripMarkdownFormatting(text)` 추가. 코드 블록/인라인 코드는 보존하고 줄 시작 `#{1,6}\s+` 헤더 마커, `**bold**` / `__bold__`, 단일 `*강조*`, blockquote `> `, asterisk 불릿 `* ` 만 제거. 라벨 텍스트(`핵심 요약`, `다음 한 수`)는 그대로 유지. +- **수정 2 — Synthesizer 강제 규칙.** Synthesizer 페르소나에 `[FORMAT — PLAIN TEXT ONLY, NO MARKDOWN]` 블록과 `[STRUCTURE]` 블록 추가. **답변이 ~4문장 / ~400자 를 넘으면 반드시 `핵심 요약` 블록(2~4 bullets)을 답변 맨 앞에 넣는다.** 짧은 답변은 그대로. +- **수정 3 — BASE_SYSTEM_PROMPT 정비.** 기존 `[OUTPUT FORMAT]` 의 `## 핵심 요약`, `## 상세 설명` 같은 마크다운 헤더 예시 → bare label (예: `핵심 요약`) 로 교체. `[STRICT GLOBAL RULES]` 에 `[NO MARKDOWN MARKERS]` 명문화. 단일 에이전트 경로도 plain text 출력. +- **수정 4 — review-evaluation 가이드 정비.** `1. ## 한 줄 판단` 같은 markdown-prefix 라벨 → `1) 한 줄 판단` 으로 교체. 마크다운 마커가 prompt 단계에서 모델에 학습되지 않도록. +- **수정 5 — Drafter 페르소나 정비.** 섹션 라벨도 plain text. Synthesizer가 받는 입력이 깨끗해야 최종 출력도 깨끗. +- **양쪽 경로 적용.** 단일 에이전트(`agent.ts` line ~1189) + multi-agent (`finalReport` 직전) 두 곳 모두에서 `outputFormat === 'plain'` 이면 sanitizer 통과. `chatHistory` 에도 정제본만 저장 → 다음 턴 컨텍스트에서 마커가 재학습되지 않음. +- **신규 설정:** `g1nation.outputFormat` (`plain` 기본 / `markdown` opt-out). + +### 🧩 5단계 파이프라인 (Planner → Researcher → Reflector → Drafter → Synthesizer) + 깔끔한 스트림 +- **문제:** 작은 로컬 모델(예: gemma 4 e2b/e4b)이 컨텍스트 한계 때문에 한 번에 답을 끝내려다 EOS/잘림 발생. 또 multi-agent 모드일 때 채팅 본문에 `> **[Planner]** ...` 같은 단계 메시지가 본문에 섞여 사용자에게 답답함. 일부 응답에서 `<|channel|>thought ...` 같은 control token이 짧게 노출. +- **수정 1 — Synthesizer 단계 추가 (5번째).** Drafter(=기존 Writer)가 1차 초안만 빠르게 생성하고, **Synthesizer**가 작은 draft만 받아 도입 한 줄·섹션 흐름·결론을 정리. 입력이 가벼워 작은 모델로도 한 번에 처리 가능. 신규 클래스 `SynthesizerAgent` (`src/agents/factory.ts`), `AgentEngine` 생성자 4번째 파라미터, `PipelineStage` 에 `synthesizer` 추가. +- **수정 2 — 자동 발동 확장.** 기존 트리거는 prompt > 180자 + 키워드일 때만 → 작은 모델일 때도 single-agent 로 가다 폭사. 신규 `g1nation.workflow.multiAgentMode` (`auto`/`always`/`off`) 에서 **`auto` 기본값:** (a) 모델 ≤4B (b) prompt 가 컨텍스트의 30% 이상 (c) "코드 리뷰/심층 분석/보고서" 등 키워드 (d) 사용자가 `multiAgentEnabled` 명시적 ON — 중 하나만 만족해도 5단계 발동. 인사·12자 미만 prompt 는 제외. +- **수정 3 — 단계 메시지를 채팅 본문에서 분리.** 진행 상태(`> **[Researcher]** ...`)를 채팅 버블에 흘리던 코드 제거. 대신 신규 webview message `workflowStage` 가 사이드바 상단의 `statusLabel + thinkingBar` 한 줄에만 표시 → "생각 단계가 본문에 계속 보임" 답답함 제거. 라벨도 `① 계획 → ② 자료 수집 → ③ 자기 검증 → ④ 초안 작성 → ⑤ 최종 정리` 한국어 + 번호로 통일. +- **수정 4 — 라이브 토큰 스트리밍 기본 OFF.** 신규 `g1nation.liveStreamTokens` (기본 `false`): 토큰을 내부에서만 누적하고 `extractVisibleFinal` sanitize 끝난 최종 답변만 한 번에 표시 → Harmony `<|channel|>thought`/`` 마커가 잠시라도 화면에 노출되는 누설 원천 차단. `true` 로 두면 legacy 라이브 스트리밍 복원. +- **신규 설정 4개:** `g1nation.workflow.synthesizerEnabled` (기본 true), `g1nation.workflow.multiAgentMode` (auto/always/off, 기본 auto), `g1nation.workflow.autoCtxFractionThreshold` (기본 0.30), `g1nation.liveStreamTokens` (기본 false). +- **소프트 페일 보장:** Synthesizer가 빈 출력/예외를 내도 미션을 막지 않고 Drafter 초안을 그대로 최종 답변으로 사용. Reflector와 동일한 패턴. +- **신규 패키징:** `astra-2.2.64.vsix`. + +--- + ## v2.2.63 (2026-05-22) ### 🎚️ 한국어 오타 최소화 — 채팅 Temperature 설정 + anti-glitch 샘플링 - **문제:** 채팅 분석 답변에 한국어 오타(`붕괴`→`붕점`, `핵심`→`핵점`, `텍스트`→`텍록`)가 잦음. 토큰 단위 샘플링 glitch. diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json index c7265a7..4939ff0 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-20T09:42:40.003Z", - "updatedAt": "2026-05-22T10:07:21.651Z" + "createdAt": "2026-05-23T03:51:11.620Z", + "updatedAt": "2026-05-23T06:48:11.444Z" } diff --git a/docs/records/ConnectAI/decisions/ADR-0024-volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-.md b/docs/records/ConnectAI/decisions/ADR-0024-volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-.md new file mode 100644 index 0000000..a320f50 --- /dev/null +++ b/docs/records/ConnectAI/decisions/ADR-0024-volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-.md @@ -0,0 +1,19 @@ +# ADR: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Status +accepted + +## Context +/Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안을 줄 것이 잇는지 평가해줘. + +## Decision +현재 프로젝트의 개선 방향은 여전히 '사용자 경험(UX)을 통한 복잡성 은폐'에 초점을 맞추고 있으며, 이를 위해 `src/extension.ts` 파일의 핵심 로직 분석이 필수적입니다. 파일 내용이 제공되는 대로 즉시 분석하여 다음 단계로 넘어가겠습니다. 이 파일을 통해 ConnectAI가 어떤 순서와 방식으로 작동하는지 파악해야만, 사용자에게 '마법'처럼 느껴지는 인터페이스를 설계할 수 있습니다. (시스템에서 `src/extension.ts` 파일 내용을 읽어오는 중입니다.) + +## Reason +Captured automatically because the conversation contained decision-oriented language. + +## Alternatives +Not captured yet. + +## Consequences +- Future prompts should treat this as project context unless the user changes direction. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation-2.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation-2.md new file mode 100644 index 0000000..e21fe6a --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation-2.md @@ -0,0 +1,25 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 하고 사용자 입장에서 개선이 필요한 부분이 있는지 확... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +## 경로 확인 결과 제공된 로컬 프로젝트 경로에는 접근할 수 있고, 코드 파일도 일부 확인되었습니다. 만약 추가적인 코드 확인이 필요하다면 이나 액션 태그를 즉시 사용하여 스스로 파일을 읽어보고 분석을 진행하겠습니다. 이전 응답에서 "파일을 제공해주세요" 라거나 "먼저 분석할까요?" 라고 묻는 것은 잘못된 안내입니다. 액션 태그를 통해 스스로 필요한 코드를 열어보겠습니다. ## 핵심 요약 - **현 상태 평가**: 현재 ConnectAI는 강력한 기능적 기반을 갖추고 있지만, 사용자에게 '현재 무엇이 일어나고 있는지'를 직관적으로 보여주는 시각적 피드백과 명시적인 작업 흐름 가시성이 가장 큰 개선점입니다. - **가장 중요한 UX 개선**: 복잡한 내부 로직(예: 검색, 계획 수립)을 수행할 때 사용자에게 '시스템이 지금 무엇을 하고 있는지'를 단계별로 보여주는 UI/UX 메커니즘을 추가해야 합니다. - **기술적 위험 요소**: 현재 ... + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- src/extension.ts +- src/utils.ts +- src/features/company/types.ts +- media/sidebar.html + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation.md new file mode 100644 index 0000000..369a807 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation.md @@ -0,0 +1,22 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 하고 사용자 입장에서 개선이 필요한 부분이 있는지 확... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +/Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 하고 사용자 입장에서 개선이 필요한 부분이 있는지 확인해줘. + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- No explicit changed file list was captured automatically. + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-해줘-그리고-어떻게_implementation.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-해줘-그리고-어떻게_implementation.md new file mode 100644 index 0000000..7eb3cb4 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-해줘-그리고-어떻게_implementation.md @@ -0,0 +1,22 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 해줘 그리고 어떻게 하면 더 유저 친화적으로 너를 개... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +/Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰를 해줘 그리고 어떻게 하면 더 유저 친화적으로 너를 개선할 수 있는지 의견 주면 좋겠어. + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- No explicit changed file list was captured automatically. + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-2.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-2.md new file mode 100644 index 0000000..9ac8b99 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-2.md @@ -0,0 +1,26 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +핵심 요약 - 현재 프로젝트 구조를 기반으로 코드를 직접 분석하기보다는, 아키텍처 문서와 주요 파일 목록을 통해 사용자 경험(UX) 및 기능적 개선점을 제안하는 것이 효과적입니다. - 가장 먼저 검토해야 할 부분은 `src/extension.ts`의 핵심 로직 흐름 파악과, 사용자가 체감할 수 있는 인터페이스(UI/UX)의 간소화입니다. - 장기적으로는 '지식 관리 정책'을 강화하여 지식 검색의 신뢰도를 높이고, 사용자 피드백 루프를 공식적인 기능으로 통합하는 것이 중요합니다. 상세 설명 요청하신 대로 `/Volumes/Data/project/Antigravity/ConnectAI` 프로젝트 전체에 대한 코드 리뷰 및 개선 제안을 진행했습니다. 다만, 이 요청은 동일한 내용이 세 번 반복되었으므로, 한 번의 포괄적인 분석으로 답변드리겠습니다. 현재 제공된 파일 목록과 아키텍처 컨텍스트를 바탕으로 볼 때, 코드를 직접 읽어보지 않고도 사용자 관점에서 개선할 수 있는 영역을 중심으로 평... + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- src/extension.ts +- src/utils.ts +- architecture.md +- media/sidebar.html +- src/retrieval/lessonHelpers.ts + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-3.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-3.md new file mode 100644 index 0000000..ed6dd66 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-3.md @@ -0,0 +1,22 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +/Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안을 줄 것이 잇는지 평가해줘. + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- No explicit changed file list was captured automatically. + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-4.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-4.md new file mode 100644 index 0000000..20714f8 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-4.md @@ -0,0 +1,23 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +현재 프로젝트의 가장 큰 개선점은 복잡한 내부 아키텍처를 사용자에게는 '마법'처럼 느껴지도록 추상화하고, 사용자의 의도를 파악하는 과정을 더욱 직관적인 경험으로 다듬는 것입니다. 프로젝트 구조와 목표(ConnectAI)를 고려했을 때, 기술적 안정성보다 사용자 여정(User Journey)과 신뢰도 확보에 초점을 맞춰 개선 방향을 제시합니다. 개선할 핵심 영역은 다음과 같습니다. 1. 의도 파악 과정의 시각화 및 간소화: 사용자가 무엇을 원하는지 AI가 추론하는 과정을 사용자에게 투명하게 보여주되, 그 복잡성을 느끼게 해서는 안 됩니다. 2. 정보 출처의 명확한 제시: 모든 답변에 대해 정보의 생성 시점과 맥락(Second Brain)을 함께 제시하여 신뢰도를 극대화해야 합니다. 3. 피드백 루프의 공식 기능 통합: 사용자가 AI의 결과물이나 아키텍처를 보고 '수정 제안' 버튼을 누르면, 해당 로직이 즉시 `src/utils.ts`와 같은 핵심 파일에 반영되는 명시적인 메커니즘을 구... + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- src/utils.ts +- src/extension.ts + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-5.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-5.md new file mode 100644 index 0000000..2d39d3e --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-5.md @@ -0,0 +1,22 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +현재 프로젝트의 가장 시급한 개선점은 내부 아키텍처를 사용자에게는 '마법'처럼 보이도록 추상화하고, 사용자의 의도를 파악하는 과정을 더욱 직관적인 경험으로 다듬는 것입니다. 이전 논의에서 제시된 UX/기술적 개선 방향(의도 파악 시각화, 출처 명시 강화 등)은 모두 유효하며, 이들을 실제로 구현하기 위해서는 핵심 실행 로직을 정확히 이해하는 것이 선행되어야 합니다. 따라서 다음 단계로 `src/extension.ts` 파일을 분석하여 현재 시스템이 어떤 순서와 방식으로 작동하는지 파악하겠습니다. + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- src/extension.ts + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation.md b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation.md new file mode 100644 index 0000000..ed6dd66 --- /dev/null +++ b/docs/records/ConnectAI/development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation.md @@ -0,0 +1,22 @@ +# Development Log: /Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안... + +## Purpose +Record the implementation or verification outcome from the current conversation. + +## Implementation Summary +/Volumes/Data/project/Antigravity/ConnectAI 코드 리뷰하고 사용자 입장에서 개선이 필요한 부분이 있는지, 제안을 줄 것이 잇는지 평가해줘. + +## Architecture +Captured automatically from the assistant response and active project context. + +## Changed Files +- No explicit changed file list was captured automatically. + +## Dependency Notes +No new dependency note was captured automatically. + +## Bugs +No bugs recorded. + +## Lessons +- Automatic project records should be generated in the background when the turn contains durable project knowledge. diff --git a/docs/records/ConnectAI/timeline.md b/docs/records/ConnectAI/timeline.md index f1d6cfe..155c18b 100644 --- a/docs/records/ConnectAI/timeline.md +++ b/docs/records/ConnectAI/timeline.md @@ -180,3 +180,30 @@ ## 2026-05-22 - Auto decision record created: decisions\ADR-0023-메일-다듬어줘-안녕하세요-문의-주신-poc-진행-관련하여-아래와-같이-회신드립니다-현재-내부-검토-결과-락인.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-해줘-그리고-어떻게_implementation.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰를-하고-사용자-입장에_implementation-2.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-2.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-3.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-4.md + +## 2026-05-23 +- Auto development record created: development/2026-05-23_volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-_implementation-5.md + +## 2026-05-23 +- Auto decision record created: decisions/ADR-0024-volumes-data-project-antigravity-connectai-코드-리뷰하고-사용자-입장에서-.md diff --git a/media/sidebar.html b/media/sidebar.html index 7ceb009..f1c7b42 100644 --- a/media/sidebar.html +++ b/media/sidebar.html @@ -2,6 +2,7 @@ + Astra @@ -40,7 +41,15 @@
-
+
+
자동 기록
+ +
+
+ + + +
도구
@@ -123,25 +132,9 @@
-
-
- - 자동 기록 - -
- -
- -
-
작업 기록
-
- - - -
-
-
+ +