From 745ebc57f68739f378c535a3324c0b504ecdc5bf Mon Sep 17 00:00:00 2001 From: g1nation Date: Fri, 22 May 2026 15:26:10 +0900 Subject: [PATCH] Update project files --- .astra/project-context/architecture.md | 22 +++++++++--------- .astra/project-context/scan-cache.json | 23 ++++++++++++------- ...d46d2ca2057b05c488be1dcf439166ac5a9a1.json | 2 +- ...9f4f39d2bc368f77456c37b5eef9a94a66b5c.json | 2 +- ...5c7a44d7661af673b24e3f49551a7a2e50280.json | 2 +- ...adc543795e4b427b64540a49c9ab27c7fe213.json | 4 ++-- ...son => stress_conflict_1779430407960.json} | 18 +++++++-------- PATCHNOTES.md | 12 ++++++++++ docs/records/ConnectAI/chronicle.config.json | 2 +- ...ž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md | 19 +++++++++++++++ ...-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md | 16 +++++++++++++ docs/records/ConnectAI/timeline.md | 6 +++++ package-lock.json | 4 ++-- package.json | 2 +- src/agent.ts | 22 ++++++++++++++++-- 15 files changed, 117 insertions(+), 39 deletions(-) rename .astra/tests/stress/.astra/missions/{stress_conflict_1779429500089.json => stress_conflict_1779430407960.json} (81%) create mode 100644 docs/records/ConnectAI/decisions/ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md create mode 100644 docs/records/ConnectAI/discussions/2026-05-22_e-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md index c7f9aac..02343c6 100644 --- a/.astra/project-context/architecture.md +++ b/.astra/project-context/architecture.md @@ -3,15 +3,15 @@ ## Snapshot -- **Workspace**: `connectai` `v2.2.60` _(absolute path varies by environment; resolved from the active VS Code workspace)_ +- **Workspace**: `connectai` `v2.2.61` _(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**: 271 source files, ~55,157 lines across 5 top-level modules. +- **Stats**: 272 source files, ~55,207 lines across 5 top-level modules. ## Last Refresh -- **Time**: 2026-05-22T06:00:02.986Z +- **Time**: 2026-05-22T06:25:57.973Z - **Files newly analysed**: 1 -- **Files reused from cache**: 270 +- **Files reused from cache**: 271 ## Directory Map ```mermaid @@ -42,7 +42,7 @@ flowchart LR media["media/
6 files"] tests["tests/
35 files"] core_py["core_py/
6 files"] - docs["docs/
85 files"] + docs["docs/
86 files"] tests --> src ``` @@ -65,7 +65,7 @@ flowchart LR ## Modules -### `src/` β€” 139 files, ~38,157 lines +### `src/` β€” 139 files, ~38,185 lines **Sub-directories** - `src/features/` (66) β€” Astra Office β€” public API. λ‹€μŒ μ„Έμ…˜μ—μ„œ 좔가될 OfficeSnapshot presenter / schema 도 같은 entry 둜 λ…ΈμΆœ μ˜ˆμ •. ν˜„μž¬ λ…ΈμΆœ: full webview panel H @@ -93,7 +93,7 @@ flowchart LR - `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` (3694 lines) +- `src/agent.ts` (3722 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/retrieval/brainIndex.ts` (325 lines) β€” Brain Index β€” persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 λ§€ μ§ˆμ˜λ§ˆλ‹€ 브레인의 λͺ¨λ“  .md νŒŒμΌμ„ 읽고 ν† ν¬λ‚˜μ΄μ¦ˆν•΄μ„œ TF-IDF 점수λ₯Ό κ³„μ‚°ν–ˆμŠ΅λ‹ˆλ‹€ β€” 파일 μˆ˜κ°€ λ§Žμ•„μ§€λ©΄ 그게 병λͺ©μž…λ‹ˆλ‹€. 이 λͺ¨λ“ˆμ€ /.astra/brain-index.json 에 @@ -161,10 +161,10 @@ flowchart LR - `core_py/optimizer.py` (55 lines) - `core_py/queue_worker.py` (82 lines) -### `docs/` β€” 85 files, ~3,294 lines +### `docs/` β€” 86 files, ~3,316 lines **Sub-directories** -- `docs/records/` (72) β€” Bug: /Volumes/Data/project/Antigravity/ConnectAI ν”„λ‘œμ νŠΈ μ½”λ“œ 리뷰 해쀄 수 μžˆμ–΄? κ°œμ„ ν•  뢀뢄이 μžˆλŠ”μ§€, 그러고... +- `docs/records/` (73) β€” Bug: /Volumes/Data/project/Antigravity/ConnectAI ν”„λ‘œμ νŠΈ μ½”λ“œ 리뷰 해쀄 수 μžˆμ–΄? κ°œμ„ ν•  뢀뢄이 μžˆλŠ”μ§€, 그러고... - `docs/docs/` (5) β€” Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.tsλ₯Ό 톡해 ... - `docs/Meeting/` (0) @@ -175,7 +175,7 @@ flowchart LR - `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) β€” Experience Memory (Mistake / Lesson Loop) β€” Implementation Plan - `docs/records/ConnectAI/development/2026-05-02_connectai_project_knowledge_overview.md` (121 lines) β€” Astra Project Knowledge Overview - `docs/records/ConnectAI/development/2026-05-03_connectai_project_knowledge_overview.md` (121 lines) β€” Astra Project Knowledge Overview -- `docs/records/ConnectAI/timeline.md` (167 lines) β€” Project Timeline +- `docs/records/ConnectAI/timeline.md` (170 lines) β€” Project Timeline - `docs/Advanced_Features_Implementation_Guide.md` (40 lines) β€” Advanced Features Implementation Guide - `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 @@ -336,7 +336,7 @@ AstraλŠ” λŒ€ν‘œλ‹˜μ˜ λͺ…μ‹œμ μΈ 승인 ν•˜μ— 둜컬 μ‹œμŠ€ν…œμ˜ κ°•λ ₯ν•œ **Designed for High-Performance Decision Making.** Copyright (C) **g1nation**. All rights reserved. -_Last auto-scan: 2026-05-22T06:00:02.986Z Β· signature `3e9af639`_ +_Last auto-scan: 2026-05-22T06:25:57.973Z Β· signature `32c602bb`_ ## Purpose diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json index 02c51df..7ba780e 100644 --- a/.astra/project-context/scan-cache.json +++ b/.astra/project-context/scan-cache.json @@ -1,11 +1,11 @@ { "version": 1, - "generatedAt": "2026-05-22T06:00:03.020Z", + "generatedAt": "2026-05-22T06:25:58.013Z", "files": { "src/agent.ts": { - "mtimeMs": 1779428598292.2295, - "size": 216127, - "lines": 3694, + "mtimeMs": 1779430182152.1404, + "size": 217774, + "lines": 3722, "role": "", "imports": [ "src/utils", @@ -1977,7 +1977,7 @@ "imports": [] }, "docs/records/ConnectAI/chronicle.config.json": { - "mtimeMs": 1779429578331.412, + "mtimeMs": 1779430497353.3203, "size": 371, "lines": 11, "role": "JSON configuration", @@ -2116,6 +2116,13 @@ "role": "ADR: 였늘 νŒ€λ³„ 보고λ₯Ό ν–ˆμ–΄. κ·Έλƒ₯ ν•˜λŠ”κ²Œ λ„ˆλ¬΄ μ‹¬μ μœΌλ‘œ νž˜λ“ λ° μ–΄λ–»κ²Œ κ°œμ„ ν•  수 μžˆμ„κΉŒ?", "imports": [] }, + "docs/records/ConnectAI/decisions/ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md": { + "mtimeMs": 1779430149727.801, + "size": 2341, + "lines": 19, + "role": "ADR: AνŒ€μž₯이 μžˆμ–΄. νŒ€μ›μœΌλ‘œ Bκ°€ 있고 Cκ°€ μžˆμ–΄. AνŒ€μž₯은 0λΌλŠ” μ΄μ‚¬μ˜ μ œμ•ˆμ„ λ°›μ•„μ„œ λ‹€λ₯Έ νšŒμ‚¬λ‘œ κ°€κΈ°λ‘œ ν–ˆμ–΄. 이 μ†Œλ¬Έμ΄ νΌμ Έμ„œ B와 C도 μ•Œ...", + "imports": [] + }, "docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": { "mtimeMs": 1778028987330.4185, "size": 1564, @@ -2376,9 +2383,9 @@ "imports": [] }, "docs/records/ConnectAI/timeline.md": { - "mtimeMs": 1779420342806.9556, - "size": 10866, - "lines": 167, + "mtimeMs": 1779430149729.8076, + "size": 11074, + "lines": 170, "role": "Project Timeline", "imports": [] }, diff --git a/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json b/.astra/tests/stress/.astra/cache/259a37934ead3910a8722b82054d46d2ca2057b05c488be1dcf439166ac5a9a1.json index 50f67e0..ed6597e 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": 1779429500111, + "createdAt": 1779430407981, "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 dc2fa4c..ac836c7 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": 1779429500108, + "createdAt": 1779430407979, "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 53f2f19..72db54c 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": 1779429500106, + "createdAt": 1779430407976, "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 510e953..fb0fede 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_1779429500089\ndate: 2026-05-22T05:58:20.112Z\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]** μ „λž΅ 수립 쀑... (15ms)\n- **[RESEARCHER]** 핡심 정보 μˆ˜μ§‘ 및 뢄석 쀑... (3ms)\n- **[WRITER]** μ΅œμ’… 리포트 μž‘μ„± 및 νŽΈμ§‘ 쀑... (3ms)\n", - "createdAt": 1779429500113, + "result": "---\nid: stress_conflict_1779430407960\ndate: 2026-05-22T06:13:27.983Z\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]** μ „λž΅ 수립 쀑... (15ms)\n- **[RESEARCHER]** 핡심 정보 μˆ˜μ§‘ 및 뢄석 쀑... (2ms)\n- **[WRITER]** μ΅œμ’… 리포트 μž‘μ„± 및 νŽΈμ§‘ 쀑... (4ms)\n", + "createdAt": 1779430407983, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/missions/stress_conflict_1779429500089.json b/.astra/tests/stress/.astra/missions/stress_conflict_1779430407960.json similarity index 81% rename from .astra/tests/stress/.astra/missions/stress_conflict_1779429500089.json rename to .astra/tests/stress/.astra/missions/stress_conflict_1779430407960.json index 096f29c..a72b1d7 100644 --- a/.astra/tests/stress/.astra/missions/stress_conflict_1779429500089.json +++ b/.astra/tests/stress/.astra/missions/stress_conflict_1779430407960.json @@ -1,8 +1,8 @@ { - "missionId": "stress_conflict_1779429500089", + "missionId": "stress_conflict_1779430407960", "status": "completed", - "startTime": "2026-05-22T05:58:20.089Z", - "totalElapsedMs": 25, + "startTime": "2026-05-22T06:13:27.960Z", + "totalElapsedMs": 24, "results": { "planner": "Detailed Execution Plan: 1. Research 2. Analyze 3. Write report with high quality.", "researcher": "[CONFLICT WARNING] μ„±λŠ₯이 200% μ¦κ°€ν–ˆμŠ΅λ‹ˆλ‹€. vs κ·ΈλŸ¬λ‚˜ λ™μ‹œμ— 50% κ°μ†Œν–ˆμŠ΅λ‹ˆλ‹€. μ΅œμ ν™”μ™€ μ„±λŠ₯ μ €ν•˜κ°€ λ™μ‹œμ— 발견됨.", @@ -18,28 +18,28 @@ "to": "planner", "durationMs": 15, "message": "μ „λž΅ 수립 쀑...", - "ts": "2026-05-22T05:58:20.104Z" + "ts": "2026-05-22T06:13:27.975Z" }, { "from": "planner", "to": "researcher", - "durationMs": 3, + "durationMs": 2, "message": "핡심 정보 μˆ˜μ§‘ 및 뢄석 쀑...", - "ts": "2026-05-22T05:58:20.107Z" + "ts": "2026-05-22T06:13:27.977Z" }, { "from": "researcher", "to": "writer", - "durationMs": 3, + "durationMs": 4, "message": "μ΅œμ’… 리포트 μž‘μ„± 및 νŽΈμ§‘ 쀑...", - "ts": "2026-05-22T05:58:20.110Z" + "ts": "2026-05-22T06:13:27.981Z" }, { "from": "writer", "to": "completed", "durationMs": 3, "message": "λ―Έμ…˜ μ™„λ£Œ", - "ts": "2026-05-22T05:58:20.113Z" + "ts": "2026-05-22T06:13:27.984Z" } ], "resilienceMetrics": { diff --git a/PATCHNOTES.md b/PATCHNOTES.md index 2e8f891..7fd1588 100644 --- a/PATCHNOTES.md +++ b/PATCHNOTES.md @@ -1,5 +1,17 @@ # Astra Patch Notes +## v2.2.61 (2026-05-22) +### πŸ” 좜λ ₯ μ—†λŠ” μ•‘μ…˜μ—” 2번째 LLM 호좜 μƒλž΅ β€” "빈 응닡" κ·Όλ³Έ 원인 제거 +- **문제:** `git μ»€λ°‹ν•΄μ€˜` ν•œ λ²ˆμ— LLM이 2번 호좜됨 β€” β‘ `` μ•‘μ…˜μ„ λ±‰λŠ” 호좜, β‘‘κ²°κ³Όλ₯Ό μ •λ¦¬ν•˜λŠ” continuation 호좜. 2λ²ˆμ§Έκ°€ 빈 응닡(`eosFound`)으둜 μ‹€νŒ¨. +- **원인:** `run_command`λŠ” 터미널 좜λ ₯을 μΊ‘μ²˜ν•˜μ§€ μ•Šμ•„ λŒ€ν™”μ— μ£Όμž…ν•˜λŠ” λ‚΄μš©μ΄ μ—†λŠ”λ°λ„, ASTRAλŠ” continuationμ—μ„œ 26K+ 토큰 전체 μ»¨ν…μŠ€νŠΈλ₯Ό λ‹€μ‹œ μ‹€μ–΄ "κ²°κ³Όλ₯Ό 보고 λ‹΅ν•˜λΌ"λŠ” λ¬΄μ˜λ―Έν•œ 2번째 ν˜ΈμΆœμ„ 함. λΉˆμ•½ν•œ 둜컬 λͺ¨λΈμ΄ 81% μ°¬ μ»¨ν…μŠ€νŠΈμ—μ„œ λΆ•κ΄΄(첫 토큰뢀터 EOS). 타이밍 raceκ°€ μ•„λ‹ˆλΌ λΆˆν•„μš”ν•˜κ²Œ 무거운 2번째 호좜이 원인. +- **μˆ˜μ •:** μ•‘μ…˜μ΄ λͺ¨λΈμ΄ 해석할 λ‚΄μš©μ„ μ‹€μ œλ‘œ μ£Όμž…ν–ˆλŠ”μ§€(`read_file`/`list_files`/`read_brain`/`read_sheet`λŠ” μ‹œμŠ€ν…œ λ©”μ‹œμ§€ μ£Όμž…, `run_command`·파일 생성/μˆ˜μ •/μ‚­μ œλŠ” μ£Όμž… μ—†μŒ) νŒμ •. **μ£Όμž…μ΄ μ—†μœΌλ©΄ continuation LLM ν˜ΈμΆœμ„ μƒλž΅**ν•˜κ³  결정둠적 ν™•μ • λ©”μ‹œμ§€("μ‹€ν–‰ν•œ μž‘μ—…: …")만 좜λ ₯. 읽기 계열 μ•‘μ…˜μ—” continuation μœ μ§€. +- 효과: `run_command`·파일 μ“°κΈ° ν›„ 빈 응닡이 사라지고, 더 λΉ λ₯΄κ³ (λΆˆν•„μš”ν•œ 26K 토큰 호좜 제거) μ‹€μ œ μ‹€ν–‰λœ λͺ…령을 κ·ΈλŒ€λ‘œ 확인 κ°€λŠ₯. +- **μ‹ κ·œ νŒ¨ν‚€μ§•:** `astra-2.2.61.vsix`. + +--- + + + ## v2.2.60 (2026-05-22) ### πŸ”§ `&&` λͺ…λ Ή 체이닝 β€” μ½”λ“œ λ ˆλ²¨μ—μ„œ PowerShell λ¬Έλ²•μœΌλ‘œ μžλ™ λ³€ν™˜ - **문제:** v2.2.59μ—μ„œ ν”„λ‘¬ν”„νŠΈλ‘œ "`&&` μ“°μ§€ 말라"κ³  μ§€μ‹œν–ˆμœΌλ‚˜, λͺ¨λΈμ΄ μ—¬μ „νžˆ `cd ... && git add . && git commit ... && git push`λ₯Ό 좜λ ₯ β†’ PowerShell 5.1μ—μ„œ `'&&' 토큰은 μ˜¬λ°”λ₯Έ λ¬Έ ꡬ뢄 κΈ°ν˜Έκ°€ μ•„λ‹™λ‹ˆλ‹€` νŒŒμ„œ 였λ₯˜λ‘œ **λͺ…λ Ή 전체가 μ‹€ν–‰ μ‹€νŒ¨**. diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json index c2a5a7f..d509291 100644 --- a/docs/records/ConnectAI/chronicle.config.json +++ b/docs/records/ConnectAI/chronicle.config.json @@ -7,5 +7,5 @@ "corePurpose": "", "detailLevel": "standard", "createdAt": "2026-05-20T09:42:40.003Z", - "updatedAt": "2026-05-22T05:59:38.330Z" + "updatedAt": "2026-05-22T06:26:09.044Z" } diff --git a/docs/records/ConnectAI/decisions/ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md b/docs/records/ConnectAI/decisions/ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md new file mode 100644 index 0000000..fe97028 --- /dev/null +++ b/docs/records/ConnectAI/decisions/ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md @@ -0,0 +1,19 @@ +# ADR: AνŒ€μž₯이 μžˆμ–΄. νŒ€μ›μœΌλ‘œ Bκ°€ 있고 Cκ°€ μžˆμ–΄. AνŒ€μž₯은 0λΌλŠ” μ΄μ‚¬μ˜ μ œμ•ˆμ„ λ°›μ•„μ„œ λ‹€λ₯Έ νšŒμ‚¬λ‘œ κ°€κΈ°λ‘œ ν–ˆμ–΄. 이 μ†Œλ¬Έμ΄ νΌμ Έμ„œ B와 C도 μ•Œ... + +## Status +accepted + +## Context +AνŒ€μž₯이 μžˆμ–΄. νŒ€μ›μœΌλ‘œ Bκ°€ 있고 Cκ°€ μžˆμ–΄. AνŒ€μž₯은 0λΌλŠ” μ΄μ‚¬μ˜ μ œμ•ˆμ„ λ°›μ•„μ„œ λ‹€λ₯Έ νšŒμ‚¬λ‘œ κ°€κΈ°λ‘œ ν–ˆμ–΄. 이 μ†Œλ¬Έμ΄ νΌμ Έμ„œ B와 C도 μ•Œκ²Œ λ˜μ—ˆμ§€. 그러고 2일 λ’€ B와 Cκ°€ Aλ₯Ό λΆˆλŸ¬μ„œ 회의λ₯Ό 함. 그러고 μ§ˆλ¬Έμ„ ν•˜κ³ . κ°‘μžκΈ° 그럼 λ‚˜ 이일 (μ§€κΈˆ μž‘μ—…ν•˜κ³  μžˆλŠ”) ν•˜κ³  μ‹Άμ§€ μ•Šλ‹€ λΆ€λ‹΄λœλ‹€. 그러고 λ‹€μŒλ‚  ν’€λ Έμ–΄. 그러곀 4μΌμ§Έλ˜λŠ”λ‚  Aκ°€ Bμ—κ²Œ 업무 μ§€μ‹œ, ν”Όλ“œλ°±μ„ ν•˜λŠ”λ° Bκ°€, μ™œ ν•˜λ‚˜ ν•˜λ‚˜ λ‹€ 참견이냐,, ν•˜λ©΄μ„œ ν™”λ₯Ό 냄. κ·Έλž˜μ„œ Aκ°€ 선은 λ„˜μ§€ 말아달라 ν•˜λ‹ˆκΉŒ. Bκ°€ ν™”κ°€ λ‚˜μ„œ. 막말을 ν•˜κΈ° μ‹œμž‘ν•¨. μ‹œλ°”, 쒇도 μ‹€λ ₯ μ—†λŠ”κ²Œ νŒ€μž₯이면 닀냐 ν•˜κ³  λ©±μ‚΄ 작고 밀쳐 λƒˆλ‹€λ„€. 이거 λΆ„μ„ν•΄μ€˜. + +## Decision +이 사건은 λ‹¨μˆœν•œ κ°ˆλ“±μ„ λ„˜μ–΄ **'쑰직의 μ‹ λ’° ꡬ쑰(Trust Structure)κ°€ μ™„μ „νžˆ λΆ•μ λœ μƒνƒœ'**λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. νŒ€μž₯의 이직 κ²°μ •μ΄λΌλŠ” μ™ΈλΆ€ 좩격이 쑰직 내뢀에 'λΆˆμ•ˆμ •μ„±'을 μ „νŒŒν–ˆκ³ , 이것이 κ΅¬μ„±μ›λ“€μ˜ 심리적 λ°©μ–΄ κΈ°μ œμ™€ κ²°ν•©λ˜μ–΄ ν­λ°œν•œ μΌ€μ΄μŠ€μž…λ‹ˆλ‹€. 상황을 **심리학적/쑰직관리적 관점**μ—μ„œ μ„Έ κ°€μ§€ λ‹¨κ³„λ‘œ 뢄석해 λ“œλ¦½λ‹ˆλ‹€. ## 1. 트리거(Trigger): 리더십 곡백과 'μ‹ λ’°μ˜ 진폭' λ°œμƒ * **ν˜„μƒ:** νŒ€μž₯ Aκ°€ 이직을 κ²°μ •ν•œ μˆœκ°„, 쑰직 λ‚΄ 'λ¦¬λ”μ‹­μ˜ κΆŒμœ„'와 'μ•ˆμ •μ„±'이 λ™μ‹œμ— λ¬΄λ„ˆμ‘ŒμŠ΅λ‹ˆλ‹€. * **뢄석:** ꡬ성원 B와 Cμ—κ²Œ νŒ€μž₯의 이직은 λ‹¨μˆœνžˆ μ‚¬λžŒμ΄ λ°”λ€ŒλŠ” 것이 μ•„λ‹ˆλΌ, **"μš°λ¦¬κ°€ λ―Ώκ³  λ”°λ₯Ό 수 μžˆλŠ” 체계가 사라짐"**을 μ˜λ―Έν•©λ‹ˆλ‹€. μ†Œλ¬Έμ΄ νΌμ§€λ©΄μ„œ λ°œμƒν•œ λΆˆμ•ˆκ°μ΄ '업무 ν•˜κ³  μ‹Άμ§€ μ•Šλ‹€'λΌλŠ” 극단적인 κ±°λΆ€ λ°˜μ‘(심리적 퇴행)으둜 λ‚˜νƒ€λ‚œ κ²ƒμž…λ‹ˆλ‹€μ„œμž…λ‹ˆλ‹€. * **κ²°κ³Ό:** νŒ€μž₯이 자리λ₯Ό λΉ„μš°λŠ” μƒν™©μ—μ„œ ꡬ성원듀은 'λ‚˜λ„ λ²„λ €μ§ˆ 수 μžˆλ‹€' ν˜Ήμ€ ... + +## 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/discussions/2026-05-22_e-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md b/docs/records/ConnectAI/discussions/2026-05-22_e-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md new file mode 100644 index 0000000..9166f67 --- /dev/null +++ b/docs/records/ConnectAI/discussions/2026-05-22_e-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md @@ -0,0 +1,16 @@ +# Discussion: E:\Wiki\connectai git에 μ»€λ°‹ν•˜κ³  ν‘Έμ‰¬ν•΄μ€˜. + +## User Request Summary +E:\Wiki\connectai git에 μ»€λ°‹ν•˜κ³  ν‘Έμ‰¬ν•΄μ€˜. + +## Interpreted Intent +Capture a meaningful project discussion automatically instead of requiring manual record selection. + +## Questions +No explicit question was captured. + +## Main Discussion +- `E:\Wiki\connectai` ν”„λ‘œμ νŠΈμ˜ λ³€κ²½ 사항을 Git에 λ°˜μ˜ν•˜κΈ° μœ„ν•΄ `add`, `commit`, `push` λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κ² μŠ΅λ‹ˆλ‹€. cd 'E:\Wiki\connectai' && git add . && git commit -m 'Update project files' && git push origin main `E:\Wiki\connectai`의 λ³€κ²½ 사항을 `add`, `commit`, `push` 슀크립트둜 μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. + +## Decisions +No decisions captured yet. diff --git a/docs/records/ConnectAI/timeline.md b/docs/records/ConnectAI/timeline.md index ef5367b..3911d05 100644 --- a/docs/records/ConnectAI/timeline.md +++ b/docs/records/ConnectAI/timeline.md @@ -165,3 +165,9 @@ ## 2026-05-22 - Auto decision record created: decisions\ADR-0019-였늘-νŒ€λ³„-보고λ₯Ό-ν–ˆμ–΄-κ·Έλƒ₯-ν•˜λŠ”κ²Œ-λ„ˆλ¬΄-μ‹¬μ μœΌλ‘œ-νž˜λ“ λ°-μ–΄λ–»κ²Œ-κ°œμ„ ν• -수-μžˆμ„κΉŒ.md + +## 2026-05-22 +- Auto decision record created: decisions\ADR-0020-aνŒ€μž₯이-μžˆμ–΄-νŒ€μ›μœΌλ‘œ-bκ°€-있고-cκ°€-μžˆμ–΄-aνŒ€μž₯은-0λΌλŠ”-μ΄μ‚¬μ˜-μ œμ•ˆμ„-λ°›μ•„μ„œ-λ‹€λ₯Έ-νšŒμ‚¬λ‘œ-κ°€κΈ°λ‘œ-ν–ˆμ–΄-.md + +## 2026-05-22 +- Auto discussion record created: discussions\2026-05-22_e-wiki-connectai-git에-μ»€λ°‹ν•˜κ³ -ν‘Έμ‰¬ν•΄μ€˜.md diff --git a/package-lock.json b/package-lock.json index 3be79b7..8951749 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "astra", - "version": "2.2.59", + "version": "2.2.61", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "astra", - "version": "2.2.60", + "version": "2.2.61", "license": "MIT", "dependencies": { "@lmstudio/sdk": "^1.5.0", diff --git a/package.json b/package.json index e024572..a964b4f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "astra", "displayName": "Astra", "description": "The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.", - "version": "2.2.60", + "version": "2.2.61", "publisher": "g1nation", "license": "MIT", "icon": "assets/icon.png", diff --git a/src/agent.ts b/src/agent.ts index 2a3a940..04e37bd 100644 --- a/src/agent.ts +++ b/src/agent.ts @@ -1188,7 +1188,13 @@ export class AgentExecutor { this.statusBarManager.updateStatus(AgentStatus.Executing); // Action tags are honored only from the visible final answer β€” never from hidden reasoning. + // Snapshot history length so we can tell whether the actions injected any content for the + // model to interpret: read_file / list_files / read_brain / read_sheet push system messages, + // while run_command (no stdout captured) and file writes inject nothing. Only the former + // warrant a follow-up LLM call. + const historyLenBeforeActions = this.chatHistory.length; const report = await this.executeActions(cleanedVisible, rootPath, activeBrain); + const actionsInjectedContext = this.chatHistory.length > historyLenBeforeActions; // Self-Reflector Phase C β€” 일반 μ±„νŒ… κ²½λ‘œμ—μ„œλ„ μ½”λ“œ 파일 생성 직후 // syntax 체크 μ‹€ν–‰. μ˜΅μ…˜ OFFλ©΄ ν†΅μ§Έλ‘œ skip. try { @@ -1263,8 +1269,13 @@ export class AgentExecutor { if (report.length > 0) { logInfo('Agent actions executed.', { loopDepth: loopDepth + 1, report }); - // Continue loop if needed - if (loopDepth < config.maxAutoSteps) { + // A follow-up LLM call ("continuation") is only worth making when an action injected + // content the model must interpret (read_file / list_files / read_brain / read_sheet). + // Output-less actions β€” run_command (no stdout captured), file create/edit/delete β€” + // give the continuation nothing to do, yet it would re-send the whole, often near-full, + // context; on a weak/long-context local model that second call collapses to an empty + // response. For those, confirm deterministically and stop. No second LLM call. + if (actionsInjectedContext && loopDepth < config.maxAutoSteps) { const currentActionStr = report.join('|'); const lastActionStr = this.context.workspaceState.get('lastActionStr'); @@ -1283,6 +1294,13 @@ export class AgentExecutor { await new Promise(r => setTimeout(r, 800)); if (this.isStaleRun(runId)) return; await this.handlePrompt(continuationPrompt, modelName, { ...options, loopDepth: loopDepth + 1, runId }); + } else if (!actionsInjectedContext) { + // Output-less actions β€” confirm what actually ran (deterministic), no follow-up LLM call. + logInfo('Actions produced no interpretable output β€” skipping continuation call.', { loopDepth, report }); + this.webview.postMessage({ + type: 'streamChunk', + value: '\n\n---\nμ‹€ν–‰ν•œ μž‘μ—…:\n' + report.map(r => `- ${r}`).join('\n'), + }); } return; }