From a31d273bfe7a122bec32523e0f12b1ce8dcd5b2f Mon Sep 17 00:00:00 2001 From: g1nation Date: Mon, 20 Jul 2026 13:21:15 +0900 Subject: [PATCH] =?UTF-8?q?chore(records):=20.astra=20=EB=9F=B0=ED=83=80?= =?UTF-8?q?=EC=9E=84=20=EC=9E=90=EC=82=B0=20+=20ConnectAI=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=20=EB=8F=99=EA=B8=B0=ED=99=94=20(=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=A4=ED=96=89=EB=B6=84=C2=B7=EB=8C=80=ED=99=94?= =?UTF-8?q?=20=EA=B8=B0=EB=A1=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .astra/project-context/architecture.md | 188 +-- .astra/project-context/scan-cache.json | 1412 ++++++++++++----- ...cde86955f34dda22a6e02b95c9adc0a456927.json | 2 +- ...c10d377a9fef641dd359504b8d53aecd0a4c3.json | 4 +- .../tests/engine/.astra/missions/wiki_on.json | 10 +- ...b3d9d44f32b0e4cd024b2e055db3a0d34417e.json | 2 +- ...973124fb64ba505f767c53a783833bbc3fa6a.json | 2 +- ...0e6575e54853929e991e579e318f2f5a19030.json | 2 +- ...b73b3a5a01af5d82391ec29a25bd72b8239a5.json | 2 +- ...son => stress_conflict_1784521065403.json} | 16 +- docs/records/ConnectAI/chronicle.config.json | 2 +- ...œ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md | 16 + ...๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md | 16 + ...ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md | 16 + docs/records/ConnectAI/timeline.md | 9 + 15 files changed, 1179 insertions(+), 520 deletions(-) rename .astra/tests/stress/.astra/missions/{stress_conflict_1784020117492.json => stress_conflict_1784521065403.json} (78%) create mode 100644 docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md create mode 100644 docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md create mode 100644 docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md diff --git a/.astra/project-context/architecture.md b/.astra/project-context/architecture.md index 722a377..45481bf 100644 --- a/.astra/project-context/architecture.md +++ b/.astra/project-context/architecture.md @@ -3,15 +3,15 @@ ## Snapshot -- **Workspace**: `connectai` `v2.2.248` _(absolute path varies by environment; resolved from the active VS Code workspace)_ +- **Workspace**: `connectai` `v2.2.312` _(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**: 560 source files, ~83,596 lines across 5 top-level modules. +- **Stats**: 617 source files, ~90,403 lines across 5 top-level modules. ## Last Refresh -- **Time**: 2026-06-15T02:56:35.947Z +- **Time**: 2026-07-20T04:20:03.384Z - **Files newly analysed**: 1 -- **Files reused from cache**: 559 +- **Files reused from cache**: 616 ## Directory Map ```mermaid @@ -19,11 +19,11 @@ mindmap root((connectai)) src/ features/ - sidebar/ lib/ agent/ - intelligence/ + sidebar/ retrieval/ + intelligence/ media/ tests/ helpers/ @@ -41,11 +41,11 @@ mindmap > Arrows: which top-level module imports from which. ```mermaid flowchart LR - src["src/
317 files"] + src["src/
342 files"] media["media/
6 files"] - tests["tests/
58 files"] + tests["tests/
86 files"] core_py["core_py/
6 files"] - docs["docs/
173 files"] + docs["docs/
177 files"] tests --> src ``` @@ -57,71 +57,71 @@ flowchart LR ## Hub Files > Imported by many other files โ€” touching these has wide blast radius. -- `src/utils.ts` โ€” referenced by **102** files -- `src/config.ts` โ€” referenced by **38** files -- `src/agent.ts` โ€” referenced by **34** files -- `src/core/services.ts` โ€” referenced by **17** files -- `src/features/company/index.ts` โ€” referenced by **14** files ยท Public API for 1์ธ ๊ธฐ์—… ๋ชจ๋“œ. Consumers (sidebarProvider, chatHandlers, command handlers) import from this barrel so internal layout can move around without touching every call site. -- `src/features/company/types.ts` โ€” referenced by **14** files ยท 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/retrieval/brainIndex.ts` โ€” referenced by **12** files ยท Brain Index โ€” persistent, mtime-keyed tokenized cache of the Second Brain RAG ๊ฒ€์ƒ‰์€ ๋งค ์งˆ์˜๋งˆ๋‹ค ๋ธŒ๋ ˆ์ธ์˜ ๋ชจ๋“  .md ํŒŒ์ผ์„ ์ฝ๊ณ  ํ† ํฌ๋‚˜์ด์ฆˆํ•ด์„œ TF-IDF ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /.astra/brain-index.json ์— -- `src/integrations/telegram/telegramClient.ts` โ€” referenced by **12** files +- `src/utils.ts` โ€” referenced by **116** files +- `src/config.ts` โ€” referenced by **44** files +- `src/agent.ts` โ€” referenced by **37** files +- `src/core/services.ts` โ€” referenced by **23** files +- `src/retrieval/brainIndex.ts` โ€” referenced by **14** files ยท Brain Index โ€” persistent, mtime-keyed tokenized cache of the Second Brain RAG ๊ฒ€์ƒ‰์€ ๋งค ์งˆ์˜๋งˆ๋‹ค ๋ธŒ๋ ˆ์ธ์˜ ๋ชจ๋“  .md ํŒŒ์ผ์„ ์ฝ๊ณ  ํ† ํฌ๋‚˜์ด์ฆˆํ•ด์„œ TF-IDF ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /.astra/brain-index.json ์— +- `src/agent/actions/types.ts` โ€” referenced by **13** files +- `src/integrations/telegram/telegramClient.ts` โ€” referenced by **13** files +- `src/features/company/types.ts` โ€” referenced by **13** files ยท 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 ## Modules -### `src/` โ€” 317 files, ~61,246 lines +### `src/` โ€” 342 files, ~65,381 lines **Sub-directories** -- `src/features/` (112) โ€” Astra Office โ€” public API. ๋‹ค์Œ ์„ธ์…˜์—์„œ ์ถ”๊ฐ€๋  OfficeSnapshot presenter / schema ๋„ ๊ฐ™์€ entry ๋กœ ๋…ธ์ถœ ์˜ˆ์ •. ํ˜„์žฌ ๋…ธ์ถœ: full webview panel H -- `src/sidebar/` (35) โ€” Brain profile lifecycle ์˜ pure helpers โ€” sidebarProvider ์˜ add/edit/delete ํ๋ฆ„์—์„œ modal UI ์™€ config ์“ฐ๊ธฐ๋ฅผ ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋งŒ ๊ฒฉ๋ฆฌ. ํ˜„ -- `src/lib/` (33) โ€” Astra Mode Architecture Context Builder. ์˜๋„: ์‚ฌ์šฉ์ž๊ฐ€ Astra ์ž์ฒด์˜ mode ๋””์ž์ธ (Guard vs Multi-Agent ๊ฐ€ ๋ณ„๋„ ๋ชจ๋“œ์—ฌ์•ผ ํ•˜๋Š”์ง€) ์„ ๋ฌป๋Š” ๋ฉ”ํƒ€ ์งˆ๋ฌธ์— ๋‹ตํ•  -- `src/agent/` (31) โ€” ํ•œยท์˜ ๊นจ์ง„ ํ† ํฐ ๊ฐ์ง€ยท์ˆ˜๋ฆฌ โ€” ์†Œํ˜• ๋กœ์ปฌ ๋ชจ๋ธ์˜ ํ† ํฐ ๋ถ•๊ดด ๋ณด์ •. ์ฆ์ƒ: ํ•œ๊ตญ์–ด ๋‹จ์–ด ์ค‘๊ฐ„์— ์˜๋ฌธ ํ† ํฐ์ด ์„ž์ž„ โ€” "๋ฉ์–ด๋ฆฌ"โ†’"๋ฉey", "๊ฒฐ๊ณผ์ ์œผ๋กœ"โ†’"๊ฒฐently". ํ”„๋กฌํ”„ํŠธ ๊ทœ์น™([์ถœ๋ ฅ ์œ„์ƒ])์œผ๋กœ๋Š” ๋ชป ๋ง‰๋Š” -- `src/intelligence/` (18) โ€” Confidence Engine โ€” ๋‹ต๋ณ€ ํ™•์‹ ๋„ 0~100 ๊ฒฐ์ •๋ก ์  ์‚ฐ์ถœ. Self-Evolving OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ Phase 2 / Track 1-1. ์‹ ๋ขฐ ์กฐ๊ฑด T4 "ํ™•์‹ ์ด ์—†์œผ๋ฉด ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌป๋Š”๋‹ค" ์˜ ์ธก์ • -- `src/retrieval/` (18) โ€” Actionability Scoring โ€” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ "ํ˜„์žฌ ์ž‘์—… ์ƒํƒœ" ์‹ ํ˜ธ๋กœ ์žฌ๊ฐ€์ค‘. ๊ธฐ์กด TF-IDF (๋‹จ์–ด ๋งค์นญ) + recency (์‹œ๊ฐ„) ๋งŒ์œผ๋กœ๋Š” "์ง€๊ธˆ ์ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—…๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ ๋œ ๋ฌธ์„œ +- `src/features/` (126) โ€” ๋ฐ์ผ๋ฆฌ ๋ธŒ๋ฆฌํ•‘ ์›Œ์ฒ˜ โ€” ํ‰์ผ(์›”~๊ธˆ) KST 09:30 ์— "์˜ค๋Š˜์˜ ํ•  ์ผ"์„ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฐœ์†ก. ์†Œ์Šค: 1. Google Calendar โ€” iCal ์บ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์˜ค๋Š˜ ์ผ์ • (readCalendarEvents +- `src/lib/` (37) โ€” Astra Mode Architecture Context Builder. ์˜๋„: ์‚ฌ์šฉ์ž๊ฐ€ Astra ์ž์ฒด์˜ mode ๋””์ž์ธ (Guard vs Multi-Agent ๊ฐ€ ๋ณ„๋„ ๋ชจ๋“œ์—ฌ์•ผ ํ•˜๋Š”์ง€) ์„ ๋ฌป๋Š” ๋ฉ”ํƒ€ ์งˆ๋ฌธ์— ๋‹ตํ•  +- `src/agent/` (36) โ€” โ€” ํด๋”(๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ) ๊ฐ•์ œ ์ •๋… ์กฐ์‚ฌ. listfiles ๊ฐ€ "์ด๋ฆ„ ๋ชฉ๋ก"์„ ์ฃผ๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ์ด ์•ก์…˜์€ ๋Œ€์ƒ ํŒŒ์ผ๋“ค์„ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ +- `src/sidebar/` (32) โ€” Brain profile lifecycle ์˜ pure helpers โ€” sidebarProvider ์˜ add/edit/delete ํ๋ฆ„์—์„œ modal UI ์™€ config ์“ฐ๊ธฐ๋ฅผ ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋งŒ ๊ฒฉ๋ฆฌ. ํ˜„ +- `src/retrieval/` (20) โ€” Actionability Scoring โ€” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ "ํ˜„์žฌ ์ž‘์—… ์ƒํƒœ" ์‹ ํ˜ธ๋กœ ์žฌ๊ฐ€์ค‘. ๊ธฐ์กด TF-IDF (๋‹จ์–ด ๋งค์นญ) + recency (์‹œ๊ฐ„) ๋งŒ์œผ๋กœ๋Š” "์ง€๊ธˆ ์ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—…๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ ๋œ ๋ฌธ์„œ +- `src/intelligence/` (19) โ€” Confidence Engine โ€” ๋‹ต๋ณ€ ํ™•์‹ ๋„ 0~100 ๊ฒฐ์ •๋ก ์  ์‚ฐ์ถœ. Self-Evolving OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ Phase 2 / Track 1-1. ์‹ ๋ขฐ ์กฐ๊ฑด T4 "ํ™•์‹ ์ด ์—†์œผ๋ฉด ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌป๋Š”๋‹ค" ์˜ ์ธก์ • - `src/core/` (15) โ€” Astra Path Resolver (๊ฒฝ๋กœ ํ•ด๊ฒฐ๊ธฐ) Astra์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํŒŒ์ผ(.astra ๋””๋ ‰ํ† ๋ฆฌ)์˜ ๊ฒฝ๋กœ๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค์น˜ ๊ฒฝ๋กœ(extensionUri) ๊ธฐ๋ฐ˜์œผ๋กœ .astra ๋””๋ ‰ํ†  - `src/extension/` (13) โ€” ๋‘๋‡Œ(Second Brain) ๊ธฐ๋ณธ ์œ„์น˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ โ€” ์ฒซ ์‹คํ–‰ ์˜จ๋ณด๋”ฉ. ๋ฌธ์ œ: ๋‘๋‡Œ ๋ฏธ์„ค์ • ์‹œ config ๊ฐ€ ~/.g1nation-brain(์ˆจ๊น€ ์ ํด๋”)๋กœ ์กฐ์šฉํžˆ ํด๋ฐฑํ–ˆ๋‹ค. - ํด๋”๊ฐ€ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ , ์„ค - `src/memory/` (9) โ€” Distillation Loop โ€” stale Episodic Memory โ†’ Long-Term "episode-digest" ์Šน๊ธ‰. ๋ฐฐ๊ฒฝ: Episodic Memory ๊ฐ€ ๋ฌดํ•œํžˆ ๋ˆ„์ ๋˜๋ฉด ๊ฒ€์ƒ‰ ๋…ธ์ด์ฆˆ. 30์ผ+ ์ง€ +- `src/integrations/` (7) โ€” Per-chat conversation history for the Telegram bot. Why this exists: the previous bot was stateless โ€” every inbound mess - `src/docs/` (6) โ€” Bug: Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts Edited agent.ts ... -- `src/integrations/` (6) โ€” 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) +- `src/lmstudio/` (4) โ€” [๋ฉ”๋ชจ๋ฆฌยท๊ธฐ๋™ ๊ฐœ์„ ] SDK ๋ฅผ ํƒ€์ž… ์ „์šฉ์œผ๋กœ๋งŒ import โ€” ๊ฐ’ import ๋Š” ๋ฒˆ๋“ค ๋กœ๋“œ(=ํ™•์žฅ ํ™œ์„ฑํ™”) ์‹œ์ ์— SDK ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์‹ค์ œ ๋ชจ๋“ˆ ๋กœ๋“œ๋Š” getSdk() ์ฒซ ํ˜ธ์ถœ ๋•Œ require ๋กœ **Key files** -- `src/utils.ts` (485 lines) -- `src/config.ts` (661 lines) -- `src/agent.ts` (1677 lines) +- `src/utils.ts` (538 lines) +- `src/config.ts` (727 lines) +- `src/agent.ts` (1979 lines) +- `src/core/services.ts` (218 lines) - `src/features/company/types.ts` (446 lines) โ€” Type definitions for the 1์ธ ๊ธฐ์—… (One-Person Company) mode. The mode turns the user into a virtual CEO that dispatches work to a roster of specialist agents. Each turn produces a session directory conta -- `src/core/services.ts` (176 lines) -- `src/sidebarProvider.ts` (3468 lines) -- `src/integrations/telegram/telegramClient.ts` (154 lines) +- `src/sidebarProvider.ts` (2992 lines) - `src/agent/actions/types.ts` (41 lines) -- `src/lib/contextManager.ts` (278 lines) โ€” Context Manager (์ปจํ…์ŠคํŠธ ํ•œ๊ณ„ ๊ด€๋ฆฌ) "context length = 132k" ๋Š” "๋‹ต๋ณ€์„ 132k ํ† ํฐ๊นŒ์ง€ ์ƒ์„ฑํ•ด๋„ ๋œ๋‹ค" ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ๋Œ€ํ™” ๊ธฐ๋ก + ์ž…๋ ฅ ๋ฌธ์„œ + ์ƒ์„ฑ๋  ๋‹ต๋ณ€ + ์—ฌ์œ ๋ถ„ โ‰ค context length ์ด ๋ชจ๋“ˆ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์ž…๋ ฅ ํ† ํฐ์„ ์ถ”์ •ํ•˜๊ณ , - ๋™์ ์œผ๋กœ ์ถœ๋ ฅ ์ƒํ•œ(maxTokens)์„ ๊ณ„ -- `src/retrieval/brainIndex.ts` (566 lines) โ€” Brain Index โ€” persistent, mtime-keyed tokenized cache of the Second Brain RAG ๊ฒ€์ƒ‰์€ ๋งค ์งˆ์˜๋งˆ๋‹ค ๋ธŒ๋ ˆ์ธ์˜ ๋ชจ๋“  .md ํŒŒ์ผ์„ ์ฝ๊ณ  ํ† ํฌ๋‚˜์ด์ฆˆํ•ด์„œ TF-IDF ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /.astra/brain-index.json ์— +- `src/integrations/telegram/telegramClient.ts` (154 lines) +- `src/lib/contextManager.ts` (296 lines) โ€” Context Manager (์ปจํ…์ŠคํŠธ ํ•œ๊ณ„ ๊ด€๋ฆฌ) "context length = 132k" ๋Š” "๋‹ต๋ณ€์„ 132k ํ† ํฐ๊นŒ์ง€ ์ƒ์„ฑํ•ด๋„ ๋œ๋‹ค" ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ๋Œ€ํ™” ๊ธฐ๋ก + ์ž…๋ ฅ ๋ฌธ์„œ + ์ƒ์„ฑ๋  ๋‹ต๋ณ€ + ์—ฌ์œ ๋ถ„ โ‰ค context length ์ด ๋ชจ๋“ˆ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์ž…๋ ฅ ํ† ํฐ์„ ์ถ”์ •ํ•˜๊ณ , - ๋™์ ์œผ๋กœ ์ถœ๋ ฅ ์ƒํ•œ(maxTokens)์„ ๊ณ„ +- `src/retrieval/brainIndex.ts` (645 lines) โ€” Brain Index โ€” persistent, mtime-keyed tokenized cache of the Second Brain RAG ๊ฒ€์ƒ‰์€ ๋งค ์งˆ์˜๋งˆ๋‹ค ๋ธŒ๋ ˆ์ธ์˜ ๋ชจ๋“  .md ํŒŒ์ผ์„ ์ฝ๊ณ  ํ† ํฌ๋‚˜์ด์ฆˆํ•ด์„œ TF-IDF ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /.astra/brain-index.json ์— +- `src/features/datacollect/slashRouter.ts` (211 lines) - `src/retrieval/scoring.ts` (541 lines) โ€” Scoring Engine โ€” TF-IDF + Bilingual Tokenizer ๋‹จ์ˆœ includes() ํ‚ค์›Œ๋“œ ๋งค์นญ์„ ๋„˜์–ด์„œ, TF-IDF ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜์˜ ๋ฌธ์„œ ์Šค์ฝ”์–ด๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด/์˜์–ด ์–‘๊ตญ์–ด ํ† ํฌ๋‚˜์ด์ €๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. - `src/features/company/companyConfig.ts` (896 lines) โ€” State + config plumbing for 1์ธ ๊ธฐ์—… ๋ชจ๋“œ. Two surfaces: - CompanyState (runtime data: enabled flag, company name, which agents are active, per-agent model overrides). Persisted in VS Code's globalState so +- `src/features/stocks/types.ts` (61 lines) โ€” Stocks ๋ชจ๋“ˆ ๊ณต์œ  ํƒ€์ž…. investresults/targetstocks.json ์Šคํ‚ค๋งˆ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„์„œ, ConnectAI ์˜ /.astra/stocks.json ์œผ๋กœ ์˜ฎ๊ธด ๋’ค ๊ฐ™์€ ํ•„๋“œ๋ช…์„ ์œ ์ง€. ํ•œ๊ธ€ ํ•„๋“œ๋ช…์€ ์‚ฌ์šฉ์ž์˜ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค โ€” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ถฉ๋Œ ํšŒํ”ผ + ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ JSON ํŽธ์ง‘ํ•  ๋•Œ frictio - `src/lib/paths.ts` (151 lines) - `src/skills/agentKnowledgeMap.ts` (374 lines) -- `src/features/datacollect/slashRouter.ts` (201 lines) - `src/retrieval/types.ts` (66 lines) โ€” Retrieval Types (๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํ†ตํ•ฉ ํƒ€์ž…) ๋ชจ๋“  ๊ฒ€์ƒ‰ ์†Œ์Šค(Brain, Memory, Project, Episode)์˜ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. -- `src/intelligence/requirementGraph.ts` (273 lines) โ€” Requirement Graph โ€” ์—…๋ฌด ์œ ํ˜•๋ณ„ ํ•„์ˆ˜ ์š”์†Œ ์ •์˜ + ๊ฐ์ง€ + ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒ€์‚ฌ. Self-Evolving Digital Employee OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ(docs/SELFEVOLVINGOSMASTERPLAN.md) Phase 1 / Track 2-1. ์‹ ๋ขฐ ์กฐ๊ฑด T3 "ํ’ˆ์งˆ์ด ์ผ๊ด€์ ์ด๋‹ค โ€” ํ•„์ˆ˜ ์š”์†Œ ๋ˆ„๋ฝ ์—†์Œ" ๋‹ด๋‹น. ๋™์ž‘ 2๋‹จ๊ณ„: 1. In +- `src/intelligence/requirementGraph.ts` (312 lines) โ€” Requirement Graph โ€” ์—…๋ฌด ์œ ํ˜•๋ณ„ ํ•„์ˆ˜ ์š”์†Œ ์ •์˜ + ๊ฐ์ง€ + ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒ€์‚ฌ. Self-Evolving Digital Employee OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ(docs/SELFEVOLVINGOSMASTERPLAN.md) Phase 1 / Track 2-1. ์‹ ๋ขฐ ์กฐ๊ฑด T3 "ํ’ˆ์งˆ์ด ์ผ๊ด€์ ์ด๋‹ค โ€” ํ•„์ˆ˜ ์š”์†Œ ๋ˆ„๋ฝ ์—†์Œ" ๋‹ด๋‹น. ๋™์ž‘ 2๋‹จ๊ณ„: 1. In +- `src/security.ts` (159 lines) - `src/lib/contextBuilders/promptDetection.ts` (107 lines) โ€” ์‚ฌ์šฉ์ž prompt ์˜ ์˜๋„ ๋ถ„๋ฅ˜ ๋ฅ˜ detection helpers. ๋ชจ๋‘ stateless ์ •๊ทœ์‹ ๋งค์นญ. ์˜› ์ฝ”๋“œ๋Š” agent.ts ์˜ private ๋ฉ”์„œ๋“œ๋กœ ๋ฐ•ํ˜€ ์žˆ์—ˆ๋Š”๋ฐ, system prompt ๋นŒ๋” (buildJarvisProjectBriefContext ๋“ฑ) ๊ฐ€ ์ด๊ฑธ ์˜์กดํ•˜๋ฉด์„œ god-file ์•ˆ์—์„œ ์„œ๋กœ ์–ฝํž˜. ํ—ฌํผ๋งŒ ๋จผ์ € ๋–ผ๋ฉด ์˜์กด ๊ทธ๋ž˜ํ”„๊ฐ€ - `src/memory/types.ts` (151 lines) โ€” Memory Type Definitions (๋ฉ”๋ชจ๋ฆฌ ํƒ€์ž… ์ •์˜) Astra์˜ 5-Layer Cognitive Memory System์˜ ๋ชจ๋“  ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. โ‘  Short-Term โ‘ก Long-Term โ‘ข Project โ‘ฃ Procedural โ‘ค Episodic -- `src/features/stocks/types.ts` (53 lines) โ€” Stocks ๋ชจ๋“ˆ ๊ณต์œ  ํƒ€์ž…. investresults/targetstocks.json ์Šคํ‚ค๋งˆ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„์„œ, ConnectAI ์˜ /.astra/stocks.json ์œผ๋กœ ์˜ฎ๊ธด ๋’ค ๊ฐ™์€ ํ•„๋“œ๋ช…์„ ์œ ์ง€. ํ•œ๊ธ€ ํ•„๋“œ๋ช…์€ ์‚ฌ์šฉ์ž์˜ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค โ€” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ถฉ๋Œ ํšŒํ”ผ + ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ JSON ํŽธ์ง‘ํ•  ๋•Œ frictio -- `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/intelligence/confidenceEngine.ts` (165 lines) โ€” Confidence Engine โ€” ๋‹ต๋ณ€ ํ™•์‹ ๋„ 0~100 ๊ฒฐ์ •๋ก ์  ์‚ฐ์ถœ. Self-Evolving OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ Phase 2 / Track 1-1. ์‹ ๋ขฐ ์กฐ๊ฑด T4 "ํ™•์‹ ์ด ์—†์œผ๋ฉด ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌป๋Š”๋‹ค" ์˜ ์ธก์ • ๊ธฐ๋ฐ˜ โ€” Escalation Engine ์˜ ์ž…๋ ฅ. ์„ค๊ณ„ ์›์น™ (termValidator ์™€ ๋™์ผ): LLM ํ˜ธ์ถœ ์—†์Œ. ๊ฒ€์ƒ‰ ๊ทธ๋ผ์šด๋”ฉ ์‹ ํ˜ธ(ํ„ด -- `src/intelligence/reflectionStore.ts` (162 lines) โ€” Reflection Store โ€” ์—…๋ฌด turn ํšŒ๊ณ  ๊ธฐ๋ก + Failure Pattern ์ง‘๊ณ„. Self-Evolving OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ Phase 1 / Track 2-4 (Reflection Engine v1) + Phase 3 / Track 3-6 (Failure Pattern DB v1 ์‹œ๋“œ). ์‹ ๋ขฐ ์กฐ๊ฑด T5 "๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค" ์˜ - `src/extension/telegramCommands.ts` (103 lines) -- `src/security.ts` (159 lines) +- `src/lib/execUtil.ts` (104 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/features/calendar/calendarCache.ts` (271 lines) โ€” Google Calendar (iCal) ์บ์‹œ โ€” fetch + parse + ํšŒ์‚ฌ shared/calendarcache.md ์— ์ €์žฅ. Connectorigin ์˜ googlecalendar.py ๋ฅผ TypeScript / native fetch ๋กœ ์˜ฎ๊น€. OAuth ์—†์Œ. ์‚ฌ์šฉ์ž๊ฐ€ Google Calendar ์„ค์ • โ†’ "๋น„๊ณต๊ฐœ ์ฃผ์†Œ(iCal ํ˜•์‹)" ๋ณต -### `media/` โ€” 6 files, ~7,836 lines +### `media/` โ€” 6 files, ~7,582 lines **Key files** -- `media/sidebar.css` (2132 lines) โ€” Stylesheet -- `media/sidebar.js` (3966 lines) -- `media/sidebar.html` (539 lines) โ€” Astra -- `media/settings-panel.html` (440 lines) โ€” Astra Settings -- `media/settings-panel.js` (505 lines) +- `media/sidebar.css` (1957 lines) โ€” Stylesheet +- `media/sidebar.js` (3767 lines) +- `media/settings-panel.html` (541 lines) โ€” Astra Settings +- `media/sidebar.html` (486 lines) โ€” Astra +- `media/settings-panel.js` (577 lines) - `media/settings-panel.css` (254 lines) โ€” Stylesheet -### `tests/` โ€” 58 files, ~8,276 lines +### `tests/` โ€” 86 files, ~11,085 lines *Depends on*: `src/` **Sub-directories** @@ -132,29 +132,29 @@ flowchart LR **Key files** - `tests/helpers/mockLLMClient.ts` (112 lines) โ€” MockLLMClient โ€” IAIService ์˜ Mock ๊ตฌํ˜„์ฒด. ์˜๋„: ํšŒ์‚ฌ ๋ชจ๋“œ dispatcher / ChunkedWriter / ceoPlanner ๋“ฑ LLM ์„ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ CI ํ™˜๊ฒฝ์—์„œ๋„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ฒŒ. ์‹ค์ œ Ollama / LM Studio ์—†์ด๋„ ์‘๋‹ต์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ. ์‚ฌ์šฉ ์˜ˆ: const ai = new - `tests/agentEngine.test.ts` (413 lines) โ€” AgentEngine Tests โ€” Chunked Writer Architecture ์˜ˆ์ „ buildup(planner โ†’ researcher โ†’ reflector โ†’ writer โ†’ synthesizer)์„ ๋‹จ์ผ ChunkedWriter ์˜ outline โ†’ section[N] โ†’ polish ๋กœ ๊ต์ฒดํ•œ ๋’ค์˜ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ. ๋‹ค๋ฃจ๋Š” ๋ฒ”์œ„: 1. ErrorC -- `tests/lmStudioLifecycle.test.ts` (330 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` (334 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/localPathPreflight.test.ts` (520 lines) - `tests/telegramBot.test.ts` (363 lines) โ€” Unit tests for TelegramBot + truncateForTelegram. Strategy: - TelegramBot is driven by an injected ITelegramClient stub. We script getUpdates to return queued batches and assert that: - the offset cur - `tests/criticReflectionEval.test.ts` (200 lines) โ€” Critic Agent / Reflection Store / Task Eval Harness (Self-Evolving OS P1 ์ž”์—ฌ + P3) ํ…Œ์ŠคํŠธ. -- `tests/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/emailCommand.test.ts` (282 lines) โ€” v2.2.269 โ€” /email (Gmail + Outlook) ์ˆœ์ˆ˜ ๋กœ์ง ํ…Œ์ŠคํŠธ. COM/๋„คํŠธ์›Œํฌ๋Š” ํ†ตํ•ฉ ์˜์—ญ์ด๋ผ ์ œ์™ธ โ€” ์ฐธ์กฐ ํŒŒ์‹ฑยทํ”„๋กฌํ”„ํŠธยทํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ ์ปท๋งŒ ๊ณ ์ •. +- `tests/lmStudioStreamer.test.ts` (295 lines) โ€” Unit tests for LMStudioStreamer. Strategy: inject a fake ILMStudioClient that returns a fake model handle whose respond() yields a controllable async iterable. No real SDK or WebSocket touched. +- `tests/meetRegistration.test.ts` (232 lines) โ€” /meet ํ™•์‹  ๊ฒŒ์ดํŠธ โ€” ๋ถ„๋ฅ˜ยทconfirm ํŒŒ์‹ฑยท๋‚ ์งœ ์ •๊ทœํ™” ํ…Œ์ŠคํŠธ. ์ •์ฑ…: ํ™•์ •+๊ธฐํ•œ๋งŒ ์ž๋™, ์ง„ํ–‰๋ฏธ์ •/๊ธฐํ•œ๋ฏธ์ •/์กฐ๊ฑด๋ถ€๋Š” ๋ณด๋ฅ˜, ๋ฐ˜๋ณต์€ ์ฒซ 1ํšŒ, ๊ณผ๊ฑฐ ๋‚ ์งœ๋Š” ๋“ฑ๋กํ•˜๋˜ ์™„๋ฃŒํ™•์ธ ํ‘œ๊ธฐ, ๊ธฐํ•œ ํ•ด์„ ๋ถˆ๊ฐ€ ํ™•์ •๊ฑด์€ ๋ณด๋ฅ˜(์ถ”์ธก ๋“ฑ๋ก ๊ธˆ์ง€). - `tests/secondBrainTrace.test.ts` (407 lines) - `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/compositeScore.test.ts` (131 lines) โ€” ๋ฉ€ํ‹ฐํŒฉํ„ฐ ํ•ฉ์„ฑ์ ์ˆ˜ (v2.2.266) โ€” ๋ฐฑ๋ถ„์œ„ ๋žญํฌยท์ถ• ํ•ฉ์„ฑยทvalue trap ๊ฐ€๋“œยท๊ฒฐ์ธก ์ฒ˜๋ฆฌ. +- `tests/computeBudgetedRequest.test.ts` (147 lines) โ€” Phase 1 โ€” context-window alignment. The budgeter must clamp to the model's ACTUALLY-loaded window when it's smaller than the user's contextLength setting, so a model loaded with a smaller window than - `tests/confidenceEngine.test.ts` (175 lines) โ€” Confidence Engine + Escalation Engine (Self-Evolving OS Phase 2) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ ๊ฒ€์ฆ โ€” vscode ์˜์กด ์—†์Œ. - `tests/correctionLoop.test.ts` (158 lines) โ€” Correction Loop ๋‹จ์œ„ ํ…Œ์ŠคํŠธ โ€” ์ˆœ์ˆ˜ ๋กœ์ง (๊ฐ์ง€ยทํ”„๋กœํ•„ยท๋ ˆ์Šจยทํ ๋“ฑ๋กยท์˜์†ํ™”). LLM ์˜์กด ๋ถ€๋ถ„(classifyCorrection)์€ ์—”๋“œํฌ์ธํŠธ ์‹คํŒจ โ†’ ํœด๋ฆฌ์Šคํ‹ฑ fallback ๊ฒฝ๋กœ๋งŒ ๊ฒ€์ฆ. +- `tests/emailState.test.ts` (121 lines) โ€” v2.2.271 โ€” ์ด๋ฉ”์ผ ์˜์† ์ƒํƒœ ๋จธ์‹  (syncThreads / detectOverdue / setThreadState). "๋ช…๋ น ์•ˆ ์ณ๋„ f/u ๋˜๋Š”" ํ•ต์‹ฌ ๋กœ์ง: ์ฐฝ ๋ฐ– ๋ฏธํšŒ์‹  ๋ณด์กด, done ์ž๋™ ์žฌ๊ฐœ, ์•Œ๋ฆผ ์ค‘๋ณต ์ฐจ๋‹จ. +- `tests/investigationPipeline.test.ts` (193 lines) โ€” Investigation Pipeline โ€” ํŒŒ์ผ๋ช…๋งŒ ๋ณด๊ณ  ์ƒ์ƒํ•˜๋Š” ํ—›์กฐ์‚ฌ ์ฐจ๋‹จ 3์ค‘ ๋ฐฉ์–ด. (v2.2.309) โ‘  ์กฐ์‚ฌํ˜• ์š”์ฒญ ๊ฐ์ง€ + ์ฆ๊ฑฐ ๊ฒŒ์ดํŠธ โ‘ก ๊ฐ•์ œ ์ •๋… Map + ํ•ด์‹œ ์บ์‹œ โ‘ข Hollow ๊ฐ์ง€ - `tests/knowledgeOps.test.ts` (174 lines) โ€” Knowledge Validation / Belief Revision / Decay / Debt (Self-Evolving OS Phase 4 โ€” ์ง€์‹ ์šด์˜) ํ…Œ์ŠคํŠธ. -- `tests/meetRegistration.test.ts` (110 lines) โ€” /meet ํ™•์‹  ๊ฒŒ์ดํŠธ โ€” ๋ถ„๋ฅ˜ยทconfirm ํŒŒ์‹ฑยท๋‚ ์งœ ์ •๊ทœํ™” ํ…Œ์ŠคํŠธ. ์ •์ฑ…: ํ™•์ •+๊ธฐํ•œ๋งŒ ์ž๋™, ์ง„ํ–‰๋ฏธ์ •/๊ธฐํ•œ๋ฏธ์ •/์กฐ๊ฑด๋ถ€๋Š” ๋ณด๋ฅ˜, ๋ฐ˜๋ณต์€ ์ฒซ 1ํšŒ, ๊ณผ๊ฑฐ ๋‚ ์งœ๋Š” ๋“ฑ๋กํ•˜๋˜ ์™„๋ฃŒํ™•์ธ ํ‘œ๊ธฐ, ๊ธฐํ•œ ํ•ด์„ ๋ถˆ๊ฐ€ ํ™•์ •๊ฑด์€ ๋ณด๋ฅ˜(์ถ”์ธก ๋“ฑ๋ก ๊ธˆ์ง€). +- `tests/largeInputMapReduce.test.ts` (159 lines) โ€” Phase 2 โ€” large-input map-reduce core. Pure orchestration with an injected callLLM, so no network / SDK is touched. - `tests/needEngineQueue.test.ts` (159 lines) โ€” Gap Detector / Need Engine / Knowledge Inventory / Learning Queue (Self-Evolving OS Phase 3 โ€” ์„ฑ์žฅ ๋ฃจํ”„ ์ฝ”์–ด) ํ…Œ์ŠคํŠธ. - `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. -- `tests/requirementGraph.test.ts` (126 lines) โ€” Requirement Graph (Self-Evolving OS Phase 1 / Track 2-1) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ ๊ฒ€์ฆ โ€” vscode ์˜์กด ์—†์Œ. +- `tests/requirementGraph.test.ts` (146 lines) โ€” Requirement Graph (Self-Evolving OS Phase 1 / Track 2-1) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ ๊ฒ€์ฆ โ€” vscode ์˜์กด ์—†์Œ. - `tests/researchSkill.test.ts` (122 lines) โ€” Research Agent / Skill Score / Success Pattern DB (Self-Evolving OS Phase 6) ํ…Œ์ŠคํŠธ. - `tests/resilience_stress.test.ts` (197 lines) โ€” Resilience & Boundary Stress Test Suite (v2.77.3) ์ด ํ…Œ์ŠคํŠธ๋Š” ConnectAI ์—”์ง„์ด ๊ทนํ•œ์˜ ํ™˜๊ฒฝ(์ธ์ฆ ์‹คํŒจ, ๋„คํŠธ์›Œํฌ ์ฐจ๋‹จ, ํƒ€์ž„์•„์›ƒ ๋“ฑ)์—์„œ ์–ผ๋งˆ๋‚˜ ์•ˆ์ •์ ์œผ๋กœ ๋ณต๊ตฌ๋˜๊ณ , ์‹ ๋ขฐ์„ฑ ์ง€ํ‘œ(Resilience Metrics)๋ฅผ ์ •ํ™•ํžˆ ๊ธฐ๋กํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. - `tests/retrievalEvalEmbedding.test.ts` (106 lines) โ€” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(sparse+dense) ๊ฒ€์ƒ‰ ์ธก์ • โ€” ์ฒญํฌ TF-IDF vs ์ฒญํฌ+์ž„๋ฒ ๋”ฉ (alpha sweep). ํ‰์†Œ ํ…Œ์ŠคํŠธ ๋Ÿฐ์—์„œ๋Š” skip (์‹ค์ œ ๋‘๋‡Œ + ๋กœ์ปฌ ์ž„๋ฒ ๋”ฉ ์„œ๋ฒ„ ํ•„์š”). ์ˆ˜๋™ ์‹คํ–‰: ASTRAEVALBRAIN="E:/Wiki/2nd/10Wiki/Topics" \ ASTRAEVALEMBEDMODEL="text-embedding-nomic-em -- `tests/skillInjectionService.test.ts` (172 lines) โ€” 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 -- `tests/sleepDigest.test.ts` (101 lines) โ€” Sleep-time ์‚ฌ์ „ ์†Œํ™” โ€” ์ˆœ์ˆ˜ ๋กœ์ง ํ…Œ์ŠคํŠธ (๋Œ€์ƒ ์„ ์ •ยท๋…ธํ›„ํ™” ํŒ์ •ยท๋…ธํŠธ ํ˜•์‹). LLM ํ˜ธ์ถœ(runSleepDigestOnce)์€ ์ œ์™ธ โ€” ํ†ตํ•ฉ ๊ฒ€์ฆ์€ ์ˆ˜๋™ ๋ช…๋ น์œผ๋กœ. -- `tests/stocksCriteria.test.ts` (129 lines) โ€” criteriaEval โ€” /stocks judge ๊ฒฐ์ •๋ก  ํ‰๊ฐ€๊ธฐ ํ…Œ์ŠคํŠธ. ํ”ฝ์Šค์ฒ˜๋Š” ์˜› LLM ํ”„๋กฌํ”„ํŠธ์— ๋ช…์‹œ๋ผ ์žˆ๋˜ ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ ๋ถ„๋ฅ˜ ์˜ˆ์‹œ 3์ข… (๋งˆ๋…€๊ณต์žฅ/๊ธฐ๊ฐ€๋น„์Šค/์—”์ผ) โ€” ์ฝ”๋“œ ํŒ์ •์ด ์‚ฌ์šฉ์ž ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค. -- `tests/alignmentResearch.test.ts` (208 lines) -- `tests/conflictCheck.test.ts` (65 lines) โ€” Schedule Conflict Check (Self-Evolving OS Track 6-2/6-3) ํ…Œ์ŠคํŠธ. -- `tests/dataProcessor.test.ts` (87 lines) โ€” / ### `core_py/` โ€” 6 files, ~409 lines @@ -166,16 +166,16 @@ flowchart LR - `core_py/optimizer.py` (55 lines) - `core_py/queue_worker.py` (82 lines) -### `docs/` โ€” 173 files, ~5,829 lines +### `docs/` โ€” 177 files, ~5,946 lines **Sub-directories** -- `docs/records/` (157) โ€” Bug: /Volumes/Data/project/Antigravity/ConnectAI ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ•ด์ค„ ์ˆ˜ ์žˆ์–ด? ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋Š”์ง€, ๊ทธ๋Ÿฌ๊ณ ... +- `docs/records/` (160) โ€” Bug: /Volumes/Data/project/Antigravity/ConnectAI ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ•ด์ค„ ์ˆ˜ ์žˆ์–ด? ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋Š”์ง€, ๊ทธ๋Ÿฌ๊ณ ... - `docs/docs/` (5) โ€” Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts๋ฅผ ํ†ตํ•ด ... - `docs/plans/` (2) โ€” Alignment Self-Learning ๊ฐœ์„  ๊ณ„ํš (v2 โ€” ์ ๋Œ€์  ๋ฆฌ๋ทฐ ๋ฐ˜์˜) - `docs/Meeting/` (0) **Key files** -- `docs/records/ConnectAI/timeline.md` (422 lines) โ€” Project Timeline +- `docs/records/ConnectAI/timeline.md` (431 lines) โ€” Project Timeline - `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) โ€” Telegram Remote Execution ๊ธฐํš์„œ - `docs/AgentEngine_Architecture.md` (314 lines) โ€” AgentEngine Architecture Document - `docs/SELF_EVOLVING_OS_MASTER_PLAN.md` (275 lines) โ€” ASTRA Self-Evolving Digital Employee OS โ€” ๋งˆ์Šคํ„ฐ ๊ฐœ๋ฐœ ๊ณ„ํš v1.1 @@ -209,6 +209,7 @@ flowchart LR - `g1nation.eval.retrieval` โ€” Astra: ๊ฒ€์ƒ‰ ํ‰๊ฐ€ ์‹คํ–‰ (recall@k / MRR) - `g1nation.eval.tasks` โ€” Astra: ์—…๋ฌด ํ‰๊ฐ€ ์‹คํ–‰ (ํšŒ์˜๋ก ๊ณจ๋“ ์…‹) - `g1nation.growth.report` โ€” Astra: ์„ฑ์žฅ ๋ฆฌํฌํŠธ (Reflection ์ถ”์ด) + - `g1nation.growth.standingRules` โ€” Astra: ์ƒ์‹œ ํ–‰๋™ ๊ทœ์น™ (Standing Rules) - `g1nation.growth.learningQueue` โ€” Astra: ํ•™์Šต ํ ๊ฐฑ์‹  (Need Engine) - `g1nation.knowledge.decayAudit` โ€” Astra: ์ง€์‹ ๋…ธํ›„ ์ ๊ฒ€ (Knowledge Decay) - `g1nation.research.runQueue` โ€” Astra: ํ•™์Šต ์‹คํ–‰ (Research Agent โ€” ์Šน์ธ๋œ ํ ํ•ญ๋ชฉ) @@ -239,17 +240,21 @@ flowchart LR - `g1nation.company.toggle` โ€” Astra: Toggle 1์ธ ๊ธฐ์—… Mode - `g1nation.company.manage` โ€” Astra: Manage 1์ธ ๊ธฐ์—… Agents - `g1nation.company.openSessions` โ€” Astra: Open 1์ธ ๊ธฐ์—… Sessions Folder - - `g1nation.company.pixelOffice.open` โ€” Astra: Open Pixel Office (Full Screen) - `g1nation.calendar.connect` โ€” Astra: Google Calendar (iCal) ์—ฐ๊ฒฐ ๐Ÿ“… - `g1nation.calendar.refresh` โ€” Astra: Google Calendar ์ƒˆ๋กœ๊ณ ์นจ ๐Ÿ“… - `g1nation.calendar.connectOAuth` โ€” Astra: Google Calendar OAuth ์—ฐ๊ฒฐ (์“ฐ๊ธฐ) ๐Ÿ” - `g1nation.devilAgent.toggle` โ€” Astra: Toggle Devil Agent ๐ŸŽญ -- **Configuration** (149 settings): +- **Configuration** (183 settings): - `g1nation.multiAgentEnabled` *(boolean)* _(default: `false`)_ โ€” Enable Multi-Agent Workflow (Planner -> Researcher -> Writer) for complex tasks. - - `g1nation.datacollectBridgeTarget` *(string)* _(default: `"local"`)_ - - `g1nation.datacollectBridgeUrl` *(string)* _(default: `"http://127.0.0.1:3002"`)_ โ€” [local ํƒ€๊นƒ] Wiki/Datacollect MCP Bridge URL. /benchmark, /youtube, /wikify chat slash commands route here. The Bridge must be running (`npm run bridge` in the Datacollect project). - - `g1nation.datacollectBridgeNasUrl` *(string)* _(default: `""`)_ + - `g1nation.datacollectBridgeTarget` *(string)* _(default: `"nas"`)_ + - `g1nation.datacollectBridgeUrl` *(string)* _(default: `"http://127.0.0.1:3002"`)_ โ€” [local ํƒ€๊นƒ] Wiki/Datacollect MCP Bridge URL. /benchmark, /youtube, /wikify chat slash commands route here. The Bridge must be running (`npm run bridge` in the Datacollect project). ๋ฐฑ์—”๋“œ๋ฅผ NAS๋กœ ์˜ฎ๊ธด ๊ฒฝ์šฐ ๋ณดํ†ต ์‚ฌ + - `g1nation.datacollectBridgeNasUrl` *(string)* _(default: `"https://dc.koritips.com"`)_ - `g1nation.datacollectBridgeNasToken` *(string)* _(default: `""`)_ + - `g1nation.domainKnowledge.generalFolder` *(string)* _(default: `""`)_ + - `g1nation.domainKnowledge.mathFolder` *(string)* _(default: `""`)_ + - `g1nation.domainKnowledge.codingFolder` *(string)* _(default: `""`)_ + - `g1nation.domainKnowledge.factsFolder` *(string)* _(default: `""`)_ + - `g1nation.datacollectLocalProjectPath` *(string)* _(default: `""`)_ - `g1nation.datacollectSavePath` *(string)* _(default: `""`)_ - `g1nation.datacollectCrawlDepth` *(number)* _(default: `1`)_ - `g1nation.datacollectMaxPages` *(number)* _(default: `8`)_ @@ -257,7 +262,24 @@ flowchart LR - `g1nation.chatTemperature` *(number)* _(default: `0.3`)_ - `g1nation.meetUsesTasks` *(boolean)* _(default: `true`)_ - `g1nation.meetUsesCalendar` *(boolean)* _(default: `false`)_ - - `g1nation.meetVerifyPass` *(boolean)* _(default: `false`)_ + - `g1nation.meetVerifyPass` *(boolean)* _(default: `true`)_ + - `g1nation.meetVerifyMaxRounds` *(number)* _(default: `2`)_ + - `g1nation.meetEditorPass` *(boolean)* _(default: `true`)_ + - `g1nation.meetTaskDateFallback` *(string)* _(default: `"today"`)_ + - `g1nation.meetTaskDetailExpand` *(boolean)* _(default: `true`)_ + - `g1nation.meetTeamRoster` *(string)* _(default: `""`)_ + - `g1nation.meetMaxOutputTokens` *(number)* _(default: `8000`)_ + - `g1nation.email.watcherEnabled` *(boolean)* _(default: `true`)_ + - `g1nation.email.watchIntervalMinutes` *(number)* _(default: `60`)_ + - `g1nation.email.overdueAlertHours` *(number)* _(default: `0`)_ + - `g1nation.email.outlookEnabled` *(boolean)* _(default: `true`)_ + - `g1nation.email.gmailEnabled` *(boolean)* _(default: `true`)_ + - `g1nation.email.includeSubfolders` *(boolean)* _(default: `true`)_ + - `g1nation.email.wikifySavePath` *(string)* _(default: `""`)_ + - `g1nation.email.syncDays` *(number)* _(default: `7`)_ + - `g1nation.messenger.stocksReportTimes` *(string)* _(default: `"09:00,15:00"`)_ + - `g1nation.messenger.buySignalAlert` *(boolean)* _(default: `true`)_ + - `g1nation.messenger.discoverTopFive` *(boolean)* _(default: `true`)_ - `g1nation.dailyBriefing.enabled` *(boolean)* _(default: `true`)_ - `g1nation.dailyBriefing.time` *(string)* _(default: `"09:30"`)_ - `g1nation.sleepDigest.enabled` *(boolean)* _(default: `true`)_ @@ -280,32 +302,10 @@ flowchart LR - `g1nation.contextOverflowPolicy` *(string)* _(default: `"stopAtLimit"`)_ โ€” Fallback behavior (LM Studio) if the prompt still exceeds the context window after Astra's own budgeting. 'stopAtLimit' fails clearly so you notice; 'truncateMiddle'/'rollingWindow' drop content silen - `g1nation.autoCompactHistory` *(boolean)* _(default: `true`)_ โ€” Automatically drop the oldest conversation messages from the request when the prompt would exceed the context budget (the on-screen chat history is unaffected). Default: true - `g1nation.smallModelContextCap` *(number)* _(default: `0`)_ โ€” Optional safety knob, OFF by default (0). Some very small models (โ‰ค3B) emit an empty/EOS response when given a prompt near their context window even though it nominally fits. If you observe that with - - `g1nation.autoContinueOnOutputLimit` *(boolean)* _(default: `true`)_ โ€” When a reply is cut off because it hit the output-token limit, Astra continues it internally (compressed request โ€” original question + the answer so far, not the whole context again) and shows one mer - - `g1nation.maxAutoContinuations` *(number)* _(default: `4`)_ โ€” Maximum number of automatic continuation rounds per reply (prevents runaway loops). Raise it (e.g. 5โ€“6) for long-form answers on slow local models; set 0 to disable auto-continuation. Default: 4 - - `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. - - `g1nation.secondBrainRepo` *(string)* _(default: `""`)_ โ€” Optional GitHub repository URL used for Second Brain sync. - - `g1nation.autoPushBrain` *(boolean)* _(default: `false`)_ โ€” Automatically commit and push Second Brain changes after updates. - - `g1nation.maxContextSize` *(number)* _(default: `32000`)_ โ€” Maximum character count for active file context. Default: 32000 - - `g1nation.maxAutoSteps` *(number)* _(default: `50`)_ โ€” Maximum autonomous steps the agent can take per request. Default: 50 - - `g1nation.dryRun` *(boolean)* _(default: `false`)_ โ€” If enabled, the agent will ask for approval before committing any file changes. - - _โ€ฆand 89 more_ + - `g1nation.largeInputMapReduce` *(boolean)* _(default: `true`)_ โ€” When a single message is too large to fit the model's context window, split it into chunks, extract only the request-relevant facts from each (no hallucination/summary), integrate them, and answer fro + - `g1nation.mapReduceTriggerRatio` *(number)* _(default: `0.6`)_ โ€” Map-reduce kicks in when a single message exceeds (effective context window ร— this ratio). Lower = engages sooner (safer for big inputs, more LLM calls). Default: 0.6 + - `g1nation.mapReduceConcurrency` *(number)* _(default: `2`)_ โ€” How many chunk extractions run in parallel. Keep low on a single local GPU (one model serves them sequentially anyway). Default: 2 + - _โ€ฆand 123 more_ ## Dependencies - **Runtime** (2): `@lmstudio/sdk`, `pdf-parse` @@ -353,7 +353,7 @@ Astra๋Š” ๋Œ€ํ‘œ๋‹˜์˜ ๋ช…์‹œ์ ์ธ ์Šน์ธ ํ•˜์— ๋กœ์ปฌ ์‹œ์Šคํ…œ์˜ ๊ฐ•๋ ฅํ•œ **Designed for High-Performance Decision Making.** Copyright (C) **g1nation**. All rights reserved. -_Last auto-scan: 2026-06-15T02:56:35.947Z ยท signature `c66695ef`_ +_Last auto-scan: 2026-07-20T04:20:03.384Z ยท signature `ff87bb88`_ ## Purpose diff --git a/.astra/project-context/scan-cache.json b/.astra/project-context/scan-cache.json index 49bcb99..fd7eb54 100644 --- a/.astra/project-context/scan-cache.json +++ b/.astra/project-context/scan-cache.json @@ -1,6 +1,6 @@ { "version": 1, - "generatedAt": "2026-06-15T02:56:36.042Z", + "generatedAt": "2026-07-20T04:20:03.483Z", "files": { "src/agent/actions/brainOps.ts": { "mtimeMs": 1779764602582.9768, @@ -13,6 +13,16 @@ "src/config" ] }, + "src/agent/actions/calculate.ts": { + "mtimeMs": 1783907905554.433, + "size": 5266, + "lines": 91, + "role": "", + "imports": [ + "src/lib/execUtil", + "src/agent/actions/types" + ] + }, "src/agent/actions/calendar.ts": { "mtimeMs": 1781152132419.819, "size": 3755, @@ -47,6 +57,20 @@ "src/agent/actions/types" ] }, + "src/agent/actions/investigateFiles.ts": { + "mtimeMs": 1784004638469.9524, + "size": 3131, + "lines": 53, + "role": " โ€” ํด๋”(๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ) ๊ฐ•์ œ ์ •๋… ์กฐ์‚ฌ. listfiles ๊ฐ€ \"์ด๋ฆ„ ๋ชฉ๋ก\"์„ ์ฃผ๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ์ด ์•ก์…˜์€ ๋Œ€์ƒ ํŒŒ์ผ๋“ค์„ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ์ฝ์–ด ํŒŒ์ผ๋ณ„ ์ถ”์ถœ ๋…ธํŠธ(Map)๋ฅผ ๋งŒ๋“ค๊ณ  ๋ณ‘ํ•ฉ ๋…ธํŠธ๋ฅผ ์ปจํ…์ŠคํŠธ์— ์ฃผ์ž…ํ•œ๋‹ค โ€” ๋ชจ๋ธ์ด ํŒŒ์ผ๋ช…๋งŒ ๋ณด๊ณ  ๋‚ด์šฉ์„ ์ƒ์ƒํ•˜๋Š” ํ—›์กฐ์‚ฌ(ํ• ๋ฃจ์‹œ๋„ค์ด์…˜)๋ฅผ ๊ตฌ์กฐ์ ", + "imports": [ + "src/agent/actions/types", + "src/security", + "src/config", + "src/intelligence/llmCall", + "src/intelligence/investigationPipeline", + "src/utils" + ] + }, "src/agent/actions/listFiles.ts": { "mtimeMs": 1779764602584.9866, "size": 1501, @@ -58,6 +82,17 @@ "src/config" ] }, + "src/agent/actions/runCode.ts": { + "mtimeMs": 1783907905562.3325, + "size": 5771, + "lines": 105, + "role": "", + "imports": [ + "src/security", + "src/lib/execUtil", + "src/agent/actions/types" + ] + }, "src/agent/actions/runCommand.ts": { "mtimeMs": 1779764602585.998, "size": 945, @@ -79,6 +114,13 @@ "src/features/sheets" ] }, + "src/agent/actions/stripForDisplay.ts": { + "mtimeMs": 1784517921694.1846, + "size": 1434, + "lines": 31, + "role": "[v2.2.312] ํ™”๋ฉด ํ‘œ์‹œ์šฉ ์•ก์…˜ ํƒœ๊ทธ ์ œ๊ฑฐ. ์•ก์…˜ ๋ฃจํ”„์˜ ์ค‘๊ฐ„ ๋ผ์šด๋“œ(์•ก์…˜๊ณผ ํ•จ๊ป˜ ๋ณธ๋ฌธ ์„น์…˜์„ ์“ด ๋ผ์šด๋“œ)๋ฅผ ์‚ฌ์šฉ์ž ๋ฒ„๋ธ”์— ํ‘œ์‹œํ•  ๋•Œ, ๊ฐ™์€ ์‹คํ–‰ ํƒœ๊ทธ ์›๋ฌธ์ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๊ฑท์–ด๋‚ธ๋‹ค. ์‹คํ–‰ ์ž์ฒด๋Š” ์ด ํ•จ์ˆ˜์™€ ๋ฌด๊ด€ โ€” executeActions ๋Š” ์›๋ฌธ(cleanedVisible)์„ ๊ทธ๋Œ€๋กœ ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ๋Š” ํ‘œ์‹œ ์ „์šฉ ๊ฒฝ๋กœ๋‹ค", + "imports": [] + }, "src/agent/actions/tasks.ts": { "mtimeMs": 1779764602586.8142, "size": 3658, @@ -147,11 +189,12 @@ ] }, "src/agent/handlePrompt/buildAstraModeSystemPrompt.ts": { - "mtimeMs": 1781491584053.9885, - "size": 7145, - "lines": 108, + "mtimeMs": 1783907905571.8806, + "size": 7249, + "lines": 109, "role": "", "imports": [ + "src/lib/contextBuilders/toneGuard", "src/lib/contextBuilders/localProjectIntent", "src/lib/contextBuilders/promptDetection", "src/lib/contextBuilders/selfIdentity", @@ -189,9 +232,9 @@ ] }, "src/agent/handlePrompt/computeBudgetedRequest.ts": { - "mtimeMs": 1779764602591.863, - "size": 8252, - "lines": 161, + "mtimeMs": 1784510427342.1648, + "size": 12515, + "lines": 234, "role": "", "imports": [ "src/utils", @@ -200,6 +243,16 @@ "src/lib/contextBuilders/droppedHistorySummary" ] }, + "src/agent/handlePrompt/largeInputMapReduce.ts": { + "mtimeMs": 1781858803423.0098, + "size": 11829, + "lines": 265, + "role": "Large-Input Map-Reduce (ํฐ ์ž…๋ ฅ ์ฒญํ‚น + ํ†ตํ•ฉ) ํ•œ ๋ฒˆ์— ์ปจํ…์ŠคํŠธ ์ฐฝ์— ์•ˆ ๋“ค์–ด๊ฐ€๋Š” ๋‹จ์ผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ(๊ธด ํšŒ์˜๋กยท๋ฆฌ์„œ์น˜ ๋คํ”„ ๋“ฑ)์„ 1) ์ฒญํฌ๋กœ ๋ถ„ํ• (Map ๋Œ€์ƒ) 2) ๊ฐ ์ฒญํฌ์—์„œ \"์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ์‚ฌ์‹ค๋งŒ\" ๋ฐœ์ทŒ (์งˆ์˜ ์ธ์ง€ํ˜• ์ถ”์ถœ โ€” ์ผ๋ฐ˜ ์š”์•ฝ X) 3) ๋ฐœ์ทŒ๋“ค์„ ํ†ตํ•ฉ(Reduce). ํ•ฉ๋ณธ์ด ๋˜ ์ฐฝ์„ ๋„˜์œผ๋ฉด ๊ณ„์ธต์ ์œผ๋กœ ์žฌํ†ตํ•ฉ. ํ•œ ๋’ค,", + "imports": [ + "src/agent", + "src/retrieval/chunker" + ] + }, "src/agent/handlePrompt/processFinalAnswer.ts": { "mtimeMs": 1779764602591.863, "size": 6606, @@ -268,11 +321,12 @@ ] }, "src/agent/llm/streamChatOnce.ts": { - "mtimeMs": 1779764602594.8728, - "size": 5970, - "lines": 136, + "mtimeMs": 1784019786242.6387, + "size": 6720, + "lines": 146, "role": "", "imports": [ + "src/lib/contextBuilders/liveReasoningFilter", "src/utils", "src/lib/contextBuilders/lmStudioSampling", "src/agent" @@ -304,9 +358,9 @@ ] }, "src/agent/multiAgent/workflow.ts": { - "mtimeMs": 1779764602595.8782, - "size": 5650, - "lines": 117, + "mtimeMs": 1783907905586.464, + "size": 8395, + "lines": 154, "role": "", "imports": [ "src/utils", @@ -315,13 +369,14 @@ "src/core/errorHandler", "src/core/statusBar", "src/core/responseRecovery", + "src/agents/reportQa", "src/agent" ] }, "src/agent/postAnswerHooks/index.ts": { - "mtimeMs": 1781491584054.991, - "size": 13909, - "lines": 276, + "mtimeMs": 1784018763039.2166, + "size": 15166, + "lines": 295, "role": "Post-answer hook registry โ€” ๋‹ต๋ณ€ ์™„๋ฃŒ ํ›„ ์‹คํ–‰๋˜๋Š” ๋ถ€๊ฐ€ ์ž‘์—… ๋ชจ์Œ. ์ƒˆ hook ์ถ”๊ฐ€ = 1 ๊ฐ์ฒด push. agent.ts ๋Š” ์ด ๋ฐฐ์—ด์„ iterate ๋งŒ ํ•จ. ํ˜„์žฌ ๋“ฑ๋ก ์ˆœ์„œ (v2.2.197): 1. devilRebuttal โ€” Devil Agent ๋ฐ˜๋ฐ• ์นด๋“œ (๋น„ํ™œ์„ฑ ์‹œ silent skip) 2. postHocSelfChec", "imports": [ "src/agent/postAnswerHooks/types", @@ -337,24 +392,28 @@ "src/intelligence/skillScore", "src/config", "src/extension/featureConceptMap", - "src/lib/contextBuilders/selfAssessContext" + "src/lib/contextBuilders/selfAssessContext", + "src/intelligence/investigationPipeline", + "src/utils" ] }, "src/agent/postAnswerHooks/types.ts": { - "mtimeMs": 1781144501440.8574, - "size": 2345, - "lines": 52, + "mtimeMs": 1784018668837.2432, + "size": 2528, + "lines": 54, "role": "Post-Answer Hook ์ธํ„ฐํŽ˜์ด์Šค โ€” ๋‹ต๋ณ€ streaming ์™„๋ฃŒ ํ›„ ์‹คํ–‰๋˜๋Š” ๋ถ€๊ฐ€ ์ž‘์—…. ์˜› ๊ตฌ์กฐ: agent.ts ์˜ maybeEmitDevilRebuttal, maybePostHocSelfCheck, maybeRunTermValidator 3๊ฐœ private method. ์ƒˆ hook ์ถ”๊ฐ€ ์‹œ (1) method ์ •์˜ (2) import (3)", "imports": [ "src/intelligence/confidenceEngine" ] }, "src/agent/postHocSelfCheck.ts": { - "mtimeMs": 1780033021215.5054, - "size": 8943, - "lines": 230, + "mtimeMs": 1783907905606.2039, + "size": 8120, + "lines": 203, "role": "Post-hoc Self-Check โ€” ๋‹ต๋ณ€ ์™„๋ฃŒ ํ›„ LLM ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋กœ 3๊ฐ€์ง€ ํ‰๊ฐ€. ์‚ฌ์šฉ์ž ์ œ์•ˆ: \"[Self-Check] ๋‹จ๊ณ„ โ€” ์ด ๋‹ต๋ณ€์ด ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์— ์ง์ ‘ ๋‹ตํ•˜๋Š”๊ฐ€ / ๊ทœ์น™ ์ค€์ˆ˜ / ๋…ผ๋ฆฌ ๋ชจ์ˆœ ์—†๋Š”๊ฐ€\". ๊ธฐ์กด CoVe (v2.2.184) ์™€ ์ฐจ์ด: - CoVe = ๋‹ต๋ณ€ ์ž‘์„ฑ ์ „ ๋ชจ๋ธ์—๊ฒŒ self-verify ์ง€์‹œ (instructional, 1", - "imports": [] + "imports": [ + "src/core/services" + ] }, "src/agent/sessions/compressSummary.ts": { "mtimeMs": 1779764602596.8809, @@ -377,9 +436,9 @@ ] }, "src/agent.ts": { - "mtimeMs": 1781491584034.31, - "size": 93139, - "lines": 1677, + "mtimeMs": 1784517985649.1714, + "size": 113583, + "lines": 1979, "role": "", "imports": [ "src/utils", @@ -395,6 +454,7 @@ "src/lib/contextBuilders/urlContext", "src/features/web/webFetch", "src/intelligence/correctionLoop", + "src/intelligence/investigationPipeline", "src/lib/contextBuilders/multiAgentRouting", "src/lib/contextBuilders/thinkingPartnerContract", "src/lib/contextBuilders/droppedHistorySummary", @@ -404,6 +464,7 @@ "src/lib/contextBuilders/promptDetection", "src/lib/contextBuilders/systemPromptShaping", "src/lib/contextBuilders/outputSanitization", + "src/lib/contextBuilders/liveReasoningFilter", "src/lib/contextBuilders/engineMessages", "src/lib/contextBuilders/memoryContext", "src/lib/contextBuilders/projectEvidence", @@ -424,6 +485,7 @@ "src/features/secondBrainTrace", "src/memory", "src/retrieval", + "src/retrieval/embeddings", "src/retrieval/lessonHelpers", "src/retrieval/knowledgeMix", "src/core/responseRecovery", @@ -433,6 +495,7 @@ "src/agent", "src/agent/attrParsers", "src/agent/llm/callNonStreaming", + "src/agent/handlePrompt/largeInputMapReduce", "src/agent/llm/createStreamingRequest", "src/agent/llm/streamChatOnce", "src/agent/llm/devilRebuttal", @@ -444,7 +507,10 @@ "src/agent/actions/fileCreateEdit", "src/agent/actions/fileDeleteRead", "src/agent/actions/runCommand", + "src/agent/actions/calculate", + "src/agent/actions/runCode", "src/agent/actions/listFiles", + "src/agent/actions/investigateFiles", "src/agent/actions/webFetch", "src/agent/actions/brainOps", "src/agent/actions/calendar", @@ -461,8 +527,7 @@ "src/agent/handlePrompt/applyAutoContinuation", "src/features/approval/approvalQueue", "src/intelligence/confidenceEngine", - "src/features/providers", - "src/agent/hangulHygiene" + "src/features/providers" ] }, "src/agents/AgentWorkflowManager.ts": { @@ -477,15 +542,27 @@ ] }, "src/agents/factory.ts": { - "mtimeMs": 1779764602598.9656, - "size": 19832, - "lines": 328, + "mtimeMs": 1783907905614.2983, + "size": 17455, + "lines": 271, "role": "", "imports": [ "src/config", + "src/core/services", "src/lib/engine" ] }, + "src/agents/reportQa.ts": { + "mtimeMs": 1783907905615.301, + "size": 15821, + "lines": 259, + "role": "", + "imports": [ + "src/core/services", + "src/config", + "src/utils" + ] + }, "src/bridge.ts": { "mtimeMs": 1779411812096.6685, "size": 10768, @@ -500,9 +577,9 @@ ] }, "src/config.ts": { - "mtimeMs": 1781491584056.0022, - "size": 37540, - "lines": 661, + "mtimeMs": 1784510604793.408, + "size": 42409, + "lines": 727, "role": "", "imports": [] }, @@ -551,12 +628,13 @@ "imports": [] }, "src/core/health.ts": { - "mtimeMs": 1781491584057.009, - "size": 8465, - "lines": 167, + "mtimeMs": 1783907905635.8955, + "size": 10493, + "lines": 192, "role": "", "imports": [ "src/config", + "src/lib/execUtil", "src/utils", "src/features/datacollect/bridgeClient" ] @@ -589,13 +667,14 @@ ] }, "src/core/services.ts": { - "mtimeMs": 1779764602601.9775, - "size": 7622, - "lines": 176, + "mtimeMs": 1783907905645.613, + "size": 9993, + "lines": 218, "role": "", "imports": [ "src/config", - "src/utils" + "src/utils", + "src/features/providers/claudeCode" ] }, "src/core/session.ts": { @@ -705,9 +784,9 @@ ] }, "src/extension/evalCommands.ts": { - "mtimeMs": 1781147900732.2805, - "size": 29561, - "lines": 521, + "mtimeMs": 1783993665585.4663, + "size": 32539, + "lines": 574, "role": "", "imports": [ "src/config", @@ -726,7 +805,8 @@ "src/intelligence/skillScore", "src/intelligence/researchAgent", "src/intelligence/knowledgeValidation", - "src/intelligence/learningQueue" + "src/intelligence/learningQueue", + "src/intelligence/correctionLoop" ] }, "src/extension/featureConceptMap.ts": { @@ -780,9 +860,9 @@ ] }, "src/extension/providerCommands.ts": { - "mtimeMs": 1779764602605.9907, - "size": 7701, - "lines": 136, + "mtimeMs": 1783303469971.2595, + "size": 7366, + "lines": 131, "role": "", "imports": [ "src/sidebarProvider", @@ -826,14 +906,16 @@ ] }, "src/extension.ts": { - "mtimeMs": 1781232046994.3347, - "size": 21727, - "lines": 418, + "mtimeMs": 1784510865982.1218, + "size": 23190, + "lines": 435, "role": "", "imports": [ "src/features/teamops/handlers", "src/features/system/handlers", + "src/features/claude/claudeLauncher", "src/features/datacollect/handlers", + "src/features/email/handlers", "src/utils", "src/config", "src/agent", @@ -857,6 +939,7 @@ "src/extension/initialSetup", "src/features/stocks", "src/features/briefing/dailyBriefing", + "src/features/email/emailWatcher", "src/extension/brainBootstrap", "src/extension/embeddingBootstrap", "src/extension/featureInventory", @@ -869,14 +952,16 @@ "src/extension/telegramCommands", "src/extension/settingsSetup", "src/integrations/telegram/telegramSetup", + "src/retrieval/brainWatch", + "src/retrieval/brainIndex", "src/features/setup/datacollectSetup", "src/features/growth/conflictScan" ] }, "src/features/approval/approvalPanelProvider.ts": { - "mtimeMs": 1778664480470.9922, - "size": 7285, - "lines": 153, + "mtimeMs": 1783303469980.4175, + "size": 7509, + "lines": 155, "role": "", "imports": [ "src/features/approval/approvalQueue", @@ -901,89 +986,21 @@ "src/features/approval/approvalQueue" ] }, - "src/features/astraOffice/index.ts": { - "mtimeMs": 1779065453862.6475, - "size": 807, - "lines": 18, - "role": "Astra Office โ€” public API. ๋‹ค์Œ ์„ธ์…˜์—์„œ ์ถ”๊ฐ€๋  OfficeSnapshot presenter / schema ๋„ ๊ฐ™์€ entry ๋กœ ๋…ธ์ถœ ์˜ˆ์ •. ํ˜„์žฌ ๋…ธ์ถœ: full webview panel HTML ์ƒ์„ฑ ํ•จ์ˆ˜. sidebarProvider.ts ๋Š” ์ด ํ•œ ์ค„๋งŒ import.", - "imports": [ - "src/features/astraOffice/view/panelHtml", - "src/features/astraOffice/schema", - "src/features/astraOffice/presenter", - "src/features/astraOffice/view/layoutSchema" - ] - }, - "src/features/astraOffice/presenter.ts": { - "mtimeMs": 1779065453862.6475, - "size": 7549, - "lines": 181, - "role": "Presenter โ€” ์˜› AgentWorkState + bubble queue + activity items ๋ฅผ OfficeSnapshot ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” pure ํ•จ์ˆ˜. mini / full view ๋‘˜ ๋‹ค ๊ฐ™์€ OfficeSnapshot ์„ ๋ฐ›๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ชฉํ‘œ. ์ด๋ฒˆ ์„ธ์…˜์˜ ๋ฒ”์œ„: ์ธํ„ฐํŽ˜์ด์Šค + ์Šคํ…. ์‹ค์ œ wiring ์€ ๋‹ค์Œ ์„ธ์…˜์—์„œ: - sideb", - "imports": [ - "src/features/company/pixelOfficeState", - "src/features/company/types", - "src/features/astraOffice/schema" - ] - }, - "src/features/astraOffice/schema.ts": { - "mtimeMs": 1779065453864.1523, - "size": 10936, - "lines": 305, - "role": "OfficeSnapshot โ€” Astra Office ์˜ ๋„๋ฉ”์ธ ํƒ€์ž…. ๋™์‹œ์„ฑ ์ง„์‹ค (docs/ASTRAOFFICEREFACTOR.md ยง1): dispatcher ๋Š” ์ง๋ ฌ์ด๋ผ ํ•œ ์‹œ์ ์— active agent ๋Š” 0 ๋˜๋Š” 1๋ช…. ์ด๊ฑธ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ•์ œํ•˜๋Š” ๊ฒŒ ์ด ํƒ€์ž…์˜ ํ•ต์‹ฌ ์—ญํ• . ์ด ์„ธ์…˜์—์„œ๋Š” ํƒ€์ž… + validator + empty factory ๋งŒ. ๋ฐฑ", - "imports": [ - "src/features/company/pixelOfficeState" - ] - }, - "src/features/astraOffice/view/layoutSchema.ts": { - "mtimeMs": 1779065453864.8176, - "size": 6655, - "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, - "lines": 103, - "role": "", - "imports": [] - }, - "src/features/astraOffice/view/officeStyles.ts": { - "mtimeMs": 1779065453866.8667, - "size": 26165, - "lines": 419, - "role": "", - "imports": [] - }, - "src/features/astraOffice/view/panelHtml.ts": { - "mtimeMs": 1779065453867.871, - "size": 949, - "lines": 26, - "role": "Full Astra Office webview HTML composition. ์˜› sidebarProvider.ts ์˜ ๊ฑฐ๋Œ€ํ•œ pixelOfficePanelHtml ์„ 4๊ฐœ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ entry. ์ด๋ฒˆ ์„ธ์…˜์€ ๋™์ž‘ ๋™๋“ฑ ๋ถ„๋ฆฌ ๋งŒ. ๋‹ค์Œ ์„ธ์…˜์— mini view ์™€ ๊ณตํ†ต presenter ๋„์ž….", - "imports": [ - "src/features/astraOffice/view/officeStyles", - "src/features/astraOffice/view/officeBody", - "src/features/astraOffice/view/runtime" - ] - }, - "src/features/astraOffice/view/runtime.ts": { - "mtimeMs": 1779764602610.0264, - "size": 95995, - "lines": 1953, - "role": "์ž๋™ ๋ถ„๋ฆฌ: src/sidebarProvider.ts 4002-5116 (IIFE ๋ณธ๋ฌธ) ์—์„œ ์ถ”์ถœ. ๋™์ž‘ ๋™๋“ฑ. ${assets.derivedBase} placeholder ๋Š” panelHtml ์—์„œ .replace() ๋กœ ์‹ค์ œ ๊ฐ’ ์ฃผ์ž…. ๋‹ค์Œ ์„ธ์…˜์—์„œ OfficeSnapshot ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ๊ณ„์ ์œผ๋กœ ์ž˜๋ผ๋‚ผ ์˜ˆ์ •.", - "imports": [] - }, "src/features/briefing/dailyBriefing.ts": { - "mtimeMs": 1781170096875.4578, - "size": 9101, - "lines": 184, + "mtimeMs": 1783907905665.2756, + "size": 10419, + "lines": 196, "role": "๋ฐ์ผ๋ฆฌ ๋ธŒ๋ฆฌํ•‘ ์›Œ์ฒ˜ โ€” ํ‰์ผ(์›”~๊ธˆ) KST 09:30 ์— \"์˜ค๋Š˜์˜ ํ•  ์ผ\"์„ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฐœ์†ก. ์†Œ์Šค: 1. Google Calendar โ€” iCal ์บ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์˜ค๋Š˜ ์ผ์ • (readCalendarEventsCache) 2. Google Tasks โ€” ์˜ค๋Š˜ ๋งˆ๊ฐ + ๊ธฐํ•œ ์ง€๋‚œ ๋ฏธ์™„๋ฃŒ + ๋‚ ์งœ ์—†๋Š” [์กฐ๊ฑด๋ถ€] task (listTasks) ๋ฐœ์†ก ์กฐ๊ฑด ", "imports": [ + "src/lib/kstSchedule", "src/utils", "src/integrations/telegram/telegramClient", "src/extension/telegramCommands", "src/features/calendar/calendarCache", "src/features/calendar/tasksApi", - "src/features/datacollect/scheduling/meetRegistration" + "src/features/datacollect/scheduling/meetRegistration", + "src/features/email/emailState", + "src/features/email/emailBrief" ] }, "src/features/calendar/calendarApi.ts": { @@ -1034,9 +1051,9 @@ ] }, "src/features/calendar/oauth.ts": { - "mtimeMs": 1780654426655.6082, - "size": 10986, - "lines": 236, + "mtimeMs": 1782992302355.1787, + "size": 11225, + "lines": 239, "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": [] }, @@ -1049,6 +1066,15 @@ "src/features/calendar/calendarApi" ] }, + "src/features/claude/claudeLauncher.ts": { + "mtimeMs": 1783907905666.2817, + "size": 3566, + "lines": 60, + "role": "", + "imports": [ + "src/features/datacollect/slashRouter" + ] + }, "src/features/company/agents.ts": { "mtimeMs": 1779764602611.032, "size": 38122, @@ -1108,9 +1134,9 @@ ] }, "src/features/company/dispatcher.ts": { - "mtimeMs": 1781491584061.5083, - "size": 72574, - "lines": 1400, + "mtimeMs": 1783907905679.0752, + "size": 73464, + "lines": 1417, "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", @@ -1147,9 +1173,9 @@ ] }, "src/features/company/index.ts": { - "mtimeMs": 1781491584062.5142, - "size": 2932, - "lines": 113, + "mtimeMs": 1783303469988.6506, + "size": 2677, + "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": [ "src/features/company/agents", @@ -1161,8 +1187,7 @@ "src/features/company/sessionStore", "src/features/company/intentClassifier", "src/features/company/intentAlignment", - "src/features/company/alignmentResearch", - "src/features/company/pixelOfficeState" + "src/features/company/alignmentResearch" ] }, "src/features/company/intentAlignment.ts": { @@ -1195,13 +1220,6 @@ "src/features/company/types" ] }, - "src/features/company/pixelOfficeState.ts": { - "mtimeMs": 1778843402595.067, - "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, @@ -1300,46 +1318,83 @@ "role": "", "imports": [] }, + "src/features/datacollect/bridgeLauncher.ts": { + "mtimeMs": 1783907905685.1292, + "size": 7884, + "lines": 156, + "role": "", + "imports": [ + "src/lib/execUtil" + ] + }, "src/features/datacollect/handlers.ts": { - "mtimeMs": 1781239638273.816, - "size": 46089, - "lines": 821, + "mtimeMs": 1783907905694.8408, + "size": 74417, + "lines": 1226, "role": "Datacollect handlers โ€” /benchmark ยท /youtube ยท /blog ยท /wikify ยท /meet. (/research(NotebookLM)๋Š” v2.2.205 ์—์„œ ์ œ๊ฑฐ โ€” ๋กœ์ปฌ Datacollect ์•ฑ ์ „์šฉ์œผ๋กœ ๋ถ„๋ฆฌ) v2.2.201 ์—์„œ slashRouter.ts ์—์„œ ๋ถ„๋ฆฌ. Datacollect bridge (port 30", "imports": [ "src/features/datacollect/slashRouter", "src/features/datacollect/llm", + "src/config", + "src/utils", + "src/agents/reportQa", "src/features/datacollect/bridgeClient", + "src/features/datacollect/reviewFiles", + "src/features/datacollect/prompts/reviewPrompt", "src/features/datacollect/prompts/synthesisPrompt", + "src/features/datacollect/prompts/handoffDoc", + "src/features/datacollect/prompts/layoutSkeleton", "src/features/datacollect/prompts/youtubePrompts", "src/features/datacollect/prompts/wikifyPrompt", "src/features/datacollect/prompts/meetPrompt", + "src/features/datacollect/wikiSave", "src/features/calendar", "src/features/datacollect/scheduling/meetRegistration", "src/features/datacollect/scheduling/calendarHelpers", + "src/features/datacollect/wikiFormat", "src/agent/hangulHygiene" ] }, "src/features/datacollect/llm.ts": { - "mtimeMs": 1780281843749.1597, - "size": 6940, - "lines": 122, - "role": "Datacollect LLM ํ˜ธ์ถœ ์ธํ”„๋ผ โ€” bridge /api/lm ํ”„๋ก์‹œ ํ†ตํ•ด OpenAI ํ˜ธํ™˜ chat completion ๋‹จ๋ฐœ ํ˜ธ์ถœ. v2.2.201 ์—์„œ slashRouter.ts ์—์„œ ๋ถ„๋ฆฌ. ์˜› ์œ„์น˜๋Š” slashRouter.callLmSynthesis ์˜€์œผ๋‚˜ datacollect handlers + teamops/communication ์–‘์ชฝ์ด", - "imports": [ - "src/features/datacollect/bridgeClient" - ] + "mtimeMs": 1783907905701.5244, + "size": 15023, + "lines": 242, + "role": "Datacollect LLM ํ˜ธ์ถœ ์ธํ”„๋ผ โ€” OpenAI ํ˜ธํ™˜ chat completion ๋‹จ๋ฐœ ํ˜ธ์ถœ. v2.2.201 ์—์„œ slashRouter.ts ์—์„œ ๋ถ„๋ฆฌ. ์˜› ์œ„์น˜๋Š” slashRouter.callLmSynthesis ์˜€์œผ๋‚˜ datacollect handlers + teamops/communication ์–‘์ชฝ์ด import ํ•˜๋ฏ€๋กœ ๋ณ„๋„ ์ธํ”„๋ผ ๋ชจ๋“ˆ๋กœ", + "imports": [] + }, + "src/features/datacollect/prompts/handoffDoc.ts": { + "mtimeMs": 1783907905702.5261, + "size": 7474, + "lines": 147, + "role": "/benchmark handoff โ€” ํด๋ผ์šฐ๋“œ ๋ชจ๋ธ(Claude CodeยทAntigravity ๋“ฑ) ๊ฐœ๋ฐœ ์ธ์ˆ˜์ธ๊ณ„ ๋ฌธ์„œ. ์„ค๊ณ„ ์›์น™ (v2.2.303): ๋กœ์ปฌ ์†Œํ˜• ๋ชจ๋ธ์˜ ์ž‘๋ฌธ์„ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. 4b ๋ชจ๋ธ์ด ํฐ ๋ชจ๋ธ์—๊ฒŒ ์ค„ ์ง€์‹œ๋ฌธ์„ ์š”์•ฝํ•˜๊ฒŒ ํ•˜๋ฉด ์Šค์บ”์ด ์ •ํ™•ํžˆ ์ธก์ •ํ•œ ๊ฐ’ (rgbยทpxยท์นดํ”ผ ์›๋ฌธ)์ด \"์ ์ ˆํ•œ ์ƒ‰์ƒ\" ๊ฐ™์€ ๋ชจํ˜ธ์–ด๋กœ ํ‡ดํ™”ํ•œ๋‹ค. ํด๋ผ์šฐ๋“œ ๋ชจ๋ธ", + "imports": [] + }, + "src/features/datacollect/prompts/layoutSkeleton.ts": { + "mtimeMs": 1783907905702.5261, + "size": 5430, + "lines": 97, + "role": "๋ ˆ์ด์•„์›ƒ ๊ณจ๊ฒฉ ๋ฆฌํฌํŠธ โ€” ์Šค์บ” ๋ฐ์ดํ„ฐ์—์„œ ๊ฒฐ์ •๋ก ์œผ๋กœ ํŽ˜์ด์ง€๋ณ„ ์œ„โ†’์•„๋ž˜ ๊ตฌ์„ฑ์„ ๊ทธ๋ฆฐ๋‹ค. ๋ฐฐ๊ฒฝ (v2.2.307): /benchmark ๊ฒฐ๊ณผ๊ฐ€ \"์ƒ‰ยทํฐํŠธ\" ์ˆ˜์ค€์— ๋จธ๋ฌผ๊ณ , LLM ํ•ฉ์„ฑ์ด ์ฃฝ์œผ๋ฉด ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๊ฐ€ ์•„์˜ˆ ์‚ฌ๋ผ์กŒ๋‹ค (์‹ค์‚ฌ๋ก€: koritips ์Šค์บ” โ€” ํŒŒํŠธ 2 ํƒ€์ž„์•„์›ƒ โ†’ ์›์‹œ ์š”์•ฝ๋งŒ ๋‚จ์Œ). ๊ณจ๊ฒฉ(์–ด๋–ค ์„น์…˜์ด ์–ด๋–ค ์ˆœ์„œ๋กœ, ๋ฐฐ๋„ˆ/์บ๋Ÿฌ์…€/ํผ ์œ„์ ฏ์ด ์–ด๋””", + "imports": [] }, "src/features/datacollect/prompts/meetPrompt.ts": { - "mtimeMs": 1781160824134.4404, - "size": 13297, - "lines": 201, - "role": "ํšŒ์˜ ๋…น์ทจ ํ…์ŠคํŠธ โ†’ ์‚ฌ์‹ค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐํ™” ํšŒ์˜๋ก(Actionable Minutes) LLM ํ”„๋กฌํ”„ํŠธ. ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™: Fact/Discussion/Decision/Risk/Action ๋ถ„๋ฅ˜, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์šฐ์„ .", + "mtimeMs": 1782980927145.5679, + "size": 32983, + "lines": 375, + "role": "ํšŒ์˜ ๋…น์ทจ ํ…์ŠคํŠธ โ†’ ์‚ฌ์‹ค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐํ™” ํšŒ์˜๋ก(Actionable Minutes) LLM ํ”„๋กฌํ”„ํŠธ. ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™: Fact/Discussion/Decision/Risk/Action ๋ถ„๋ฅ˜, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์šฐ์„ . v2.2.259 ๊ฐœ์„ (์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ โ€” ํšŒ์˜๋ก \"๋ฐฉํ–ฅ์„ฑ\" ๊ฐœ์„ , ์™ธ๋ถ€ ๋ชจ๋ฒ”์‚ฌ๋ก€ ๊ทผ๊ฑฐ): - ๋ฌธ์ฒด: ์„œ์ˆ ํ˜• ์ผ๊ธฐ์ฒด('~๋…ผ์˜ํ•˜์˜€๋‹ค/์™„๋ฃŒํ•˜์˜€๋‹ค') ", + "imports": [] + }, + "src/features/datacollect/prompts/reviewPrompt.ts": { + "mtimeMs": 1781771808523.1663, + "size": 5087, + "lines": 93, + "role": "์ฝ”๋“œ ๋ฆฌ๋ทฐ map-reduce ํ”„๋กฌํ”„ํŠธ. ์ผ๋ฐ˜ ์—์ด์ „ํŠธ ์ฑ„ํŒ…์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์ฒ˜๋Ÿผ ์ž…๋ ฅ์ด ํฐ ์ž‘์—…์„ ๋‹จ์ผ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ•˜๋‹ค ์•ฝํ•œ ๋กœ์ปฌ ๋ชจ๋ธ์—์„œ ๋นˆ ์‘๋‹ต(์ฒซ ํ† ํฐ EOS)์œผ๋กœ ๋ฌด๋„ˆ์ง„๋‹ค. /review ๋Š” /meet ์™€ ๊ฐ™์€ map-reduce ๋กœ ์ด๋ฅผ ์šฐํšŒํ•œ๋‹ค: - Map : ํŒŒ์ผ ํ•˜๋‚˜์”ฉ ๋…๋ฆฝ ๋ฆฌ๋ทฐ โ†’ ํŒŒ์ผ๋ณ„ ๋ฐœ๊ฒฌ์‚ฌํ•ญ(๊ทผ๊ฑฐ ์ธ์šฉ) - Reduce: ํŒŒ์ผ๋ณ„ ๋…ธํŠธ๋ฅผ ํ†ต", "imports": [] }, "src/features/datacollect/prompts/synthesisPrompt.ts": { - "mtimeMs": 1779764602618.1577, - "size": 14095, - "lines": 257, - "role": "/benchmark ๋ณด๊ณ ์„œ์˜ 3 ํŒŒํŠธ ๋ถ„ํ•  โ€” 1: 4-๋ Œ์ฆˆ / 2: IA + ํ† ํฐ / 3: ์žฌ๊ตฌ์ถ• ๋ช…์„ธ.", + "mtimeMs": 1783907905711.6887, + "size": 21429, + "lines": 326, + "role": "/benchmark ๋ณด๊ณ ์„œ์˜ ํŒŒํŠธ ๋ถ„ํ• . 1: 4-๋ Œ์ฆˆ ๋””์ž์ธ ๋ถ„์„ / 2: IA + ๋””์ž์ธ ํ† ํฐ / 3: ์›๋ณธ ์žฌ๊ตฌ์ถ• ๋ช…์„ธ (์žฌํ•ด์„ ๊ธˆ์ง€) 4: ๋น„์ฆˆ๋‹ˆ์Šค ๋ฒค์น˜๋งˆํ‚น ๋ Œ์ฆˆ (v2.2.302 โ€” ํฌ์ง€์…”๋‹ยท๊ฐ€๊ฒฉยท์ˆ˜์ต๊ตฌ์กฐยท์šด์˜ ๋ฐฉํ–ฅ์„ฑ. ํ”ผํ„ฐ ๋ ˆ๋ฒจ์Šค ๋ฅ˜ 1์ธ AI ๊ธฐ์—… ๋ถ„์„ ํ”„๋ ˆ์ž„ ์ด์‹. ์—ฌ๊ธฐ์„œ๋งŒ ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ๋กœ ๋ณ€ํ˜• ์ œ์•ˆ ํ—ˆ์šฉ) 5: ๋‹จ๊ณ„๋ณ„ ๋นŒ๋“œ ํ”„๋กฌํ”„ํŠธ (v2", "imports": [] }, "src/features/datacollect/prompts/weeklyPrompt.ts": { @@ -1350,11 +1405,13 @@ "imports": [] }, "src/features/datacollect/prompts/wikifyPrompt.ts": { - "mtimeMs": 1781239076699.4426, - "size": 8441, - "lines": 158, + "mtimeMs": 1783046744019.2449, + "size": 9696, + "lines": 180, "role": "์ถ”์ถœ๋œ ์›น์‚ฌ์ดํŠธ ๋ณธ๋ฌธ โ†’ P-Reinforce ์œ„ํ‚ค ๋ฌธ์„œ ํ”„๋กฌํ”„ํŠธ. ํฌ๋งท ์ •๋ณธ์€ Datacollect ๋ธŒ๋ฆฌ์ง€์˜ wikiformat.mjs โ€” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ GET /api/wiki/template ๋กœ ๋ฐ›์•„ canonical ๋กœ ์ฃผ์ž…ํ•œ๋‹ค (์–‘์ชฝ ํฌ๋งท ํ†ต์ผ). ๋ธŒ๋ฆฌ์ง€๊ฐ€ ๊ตฌ๋ฒ„์ „(์—”๋“œํฌ์ธํŠธ ์—†์Œ)์ผ ๋•Œ๋งŒ ์•„๋ž˜ ๋‚ด์žฅ ์‚ฌ๋ณธ(fallback)์„ ์“ด๋‹ค. ๋‚ด์žฅ ์‚ฌ๋ณธ์€ ์ •๋ณธ์„ ๋”ฐ", - "imports": [] + "imports": [ + "src/features/datacollect/wikiFormat" + ] }, "src/features/datacollect/prompts/youtubePrompts.ts": { "mtimeMs": 1779852277877.3347, @@ -1363,17 +1420,24 @@ "role": "/youtube slash command ์˜ LLM ์ž…๋ ฅ ๋นŒ๋” + ์ž๋ง‰ ๋ณ€ํ™˜ ํ—ฌํผ. - formatHms / fullScriptFromSegments / bucketSegments โ€” segment list ๊ฐ€๊ณต - YoutubeAnalysisMode โ€” info/benchmark/both ๋ผ์šฐํŒ… enum (slashRouter ๊ฐ€ ์‚ฌ์šฉ) - buildIn", "imports": [] }, + "src/features/datacollect/reviewFiles.ts": { + "mtimeMs": 1781771833526.37, + "size": 4126, + "lines": 102, + "role": "/review ๋Œ€์ƒ ์†Œ์Šค ํŒŒ์ผ ์ˆ˜์ง‘๊ธฐ. ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์žฌ๊ท€ ์ˆœํšŒํ•˜๋ฉฐ \"๋ฆฌ๋ทฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์†Œ์Šค ํŒŒ์ผ\"๋งŒ ๊ณจ๋ผ๋‚ธ๋‹ค. ์˜์กด์„ฑยท๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผยท๋ฐ”์ด๋„ˆ๋ฆฌยท์ƒ์„ฑ๋ฌผ์€ ์ œ์™ธํ•œ๋‹ค. ์ˆœ์ˆ˜ ํŒ์ • ๋กœ์ง(shouldReviewFile)์€ fs ์™€ ๋ถ„๋ฆฌํ•ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋‘”๋‹ค.", + "imports": [] + }, "src/features/datacollect/scheduling/calendarHelpers.ts": { - "mtimeMs": 1781160936476.3435, - "size": 4854, - "lines": 99, + "mtimeMs": 1782113831088.3467, + "size": 8150, + "lines": 160, "role": "/meet ์Šฌ๋ž˜์‹œ ๋ช…๋ น์˜ ํ›„์ฒ˜๋ฆฌ โ€” ํšŒ์˜๋ก์—์„œ action items ๋ฅผ ๋ฝ‘์•„ ์บ˜๋ฆฐ๋” task ์ผ์ •์„ ๊ณ„์‚ฐํ•˜๋Š” stateless helpers. slashRouter ์˜ inline ๋ธ”๋ก์„ ๋ถ„๋ฆฌ. - addBusinessDays(base, n) โ€” ํ† ยท์ผ ์ œ์™ธ ์˜์—…์ผ n ์ผ ํ›„ ๋‚ ์งœ - toYmd(d) โ€” Date โ†’ 'YYYY-MM-DD' - extrac", "imports": [] }, "src/features/datacollect/scheduling/meetRegistration.ts": { - "mtimeMs": 1781170008519.57, - "size": 20511, - "lines": 392, + "mtimeMs": 1782980407235.4438, + "size": 23502, + "lines": 440, "role": "/meet ์•ก์…˜ ์•„์ดํ…œ์˜ \"ํ™•์‹  ๊ฒŒ์ดํŠธ\" ๋“ฑ๋ก ์‹œ์Šคํ…œ. ์ •์ฑ… (์‚ฌ์šฉ์ž ์ •์˜): - ํ™•์ •(ํ•ฉ์˜+๊ธฐํ•œ) โ†’ ์ž๋™ ๋“ฑ๋ก. - ์ง„ํ–‰๋ฏธ์ • / ๊ธฐํ•œ๋ฏธ์ • / ์กฐ๊ฑด๋ถ€ โ†’ ๋“ฑ๋ก ๋ณด๋ฅ˜ + ์‚ฌ์šฉ์ž์—๊ฒŒ ์งˆ๋ฌธ, /meet confirm ๋‹ต๋ณ€์œผ๋กœ ๋“ฑ๋ก ์™„๊ฒฐ. - ๋ฐ˜๋ณต(์˜ˆ: ๋งค์ฃผ ๋ชฉ์š”์ผ) โ†’ ๋ฐ˜๋ณต ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  ์ฒซ 1ํšŒ๋งŒ ๋“ฑ๋ก (๊นŒ๋จน์Œ ๋ฐฉ์ง€). - ๊ณผ๊ฑฐ ๋‚ ์งœ(์˜› ๋…น์ทจ) โ†’ ๊ณผ๊ฑฐ ๋‚ ์งœ", "imports": [ "src/features/calendar/calendarApi", @@ -1384,9 +1448,9 @@ ] }, "src/features/datacollect/slashRouter.ts": { - "mtimeMs": 1780281950731.9368, - "size": 10210, - "lines": 201, + "mtimeMs": 1783044290270.0188, + "size": 10708, + "lines": 211, "role": "", "imports": [ "src/utils", @@ -1396,6 +1460,28 @@ "src/features/stocks" ] }, + "src/features/datacollect/wikiFormat.ts": { + "mtimeMs": 1783043650649.7346, + "size": 9209, + "lines": 176, + "role": "์œ„ํ‚ค ๋ฌธ์„œ ํฌ๋งท โ€” ๋‹จ์ผ ์ •๋ณธ ๋ชจ๋“ˆ (v2.2.278) ๋ฐฐ๊ฒฝ: ์œ„ํ‚ค ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ์ด ๋Š˜ ๋•Œ๋งˆ๋‹ค(/wikify โ†’ /meet โ†’ /email โ†’ โ€ฆ) ํฌ๋งท์ด ํ•˜๋‚˜์”ฉ ์ƒˆ๋กœ ์ƒ๊ธฐ๋Š” ํŒŒํŽธํ™”๊ฐ€ ์ง„ํ–‰๋๋‹ค. ์ด ๋ชจ๋“ˆ์ด ๊ทธ ํ๋ฆ„์„ ๋Š๋Š”๋‹ค โ€” ์•ž์œผ๋กœ ์œ„ํ‚ค ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์—ฌ๊ธฐ๋งŒ ์“ด๋‹ค. 2์ธต ๊ตฌ์กฐ: โ‘  ๋ด‰ํˆฌ(frontmatter) ํ†ต์ผ โ€” ensureFron", + "imports": [ + "src/features/datacollect/bridgeClient", + "src/features/datacollect/prompts/wikifyPrompt" + ] + }, + "src/features/datacollect/wikiSave.ts": { + "mtimeMs": 1783907905721.3022, + "size": 8109, + "lines": 161, + "role": "์ง€์‹ ๋ฌธ์„œ ๋กœ์ปฌ ์ €์žฅ (v2.2.273) ๋ฐฐ๊ฒฝ: /wikifyยท/meetยท/benchmarkยท/youtubeยท/reviewยท/email wikify ๊ฒฐ๊ณผ๋ฌผ์€ ์ง€๊ธˆ๊นŒ์ง€ Bridge ์˜ /api/wiki/save ๋กœ ์ €์žฅํ–ˆ๋Š”๋ฐ, Bridge ๊ฐ€ NAS ์ปจํ…Œ์ด๋„ˆ๋กœ ์ด์ „๋œ ๋’ค๋กœ๋Š” ํŒŒ์ผ์ด NAS ๋ณผ๋ฅจ(outwiki) ์— ์ƒ๊ฒจ ์‚ฌ์šฉ์ž PC ์—์„  ๋ณด์ด์ง€ ์•Š์•˜๋‹ค (\"์–ด๋””", + "imports": [ + "src/config", + "src/features/datacollect/bridgeClient", + "src/utils", + "src/features/datacollect/wikiFormat" + ] + }, "src/features/devilAgent/devilPrompt.ts": { "mtimeMs": 1779065453878.1177, "size": 3662, @@ -1422,6 +1508,94 @@ "src/features/devilAgent/devilService" ] }, + "src/features/email/emailBrief.ts": { + "mtimeMs": 1783070235607.413, + "size": 8213, + "lines": 166, + "role": "/email ๋ธŒ๋ฆฌํ•‘ โ€” ๋ฐ›์€ํŽธ์ง€ํ•จ์„ '์ฃผ์ œ(์Šค๋ ˆ๋“œ)' ๋‹จ์œ„๋กœ ์ •๋ฆฌ (v2.2.270) ์›์‹œ ๋ฉ”์ผ ๋‚˜์—ด ๋Œ€์‹  ์‚ฌ๋žŒ์ด ์ƒํ™ฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ: โ‘  RE:/FW: ๋ฅผ ๋ฒ—๊ฒจ ๊ฐ™์€ ์ฃผ์ œ ๋ฉ”์ผ์„ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ฌถ๊ณ  โ‘ก ๋ณด๋‚ธํŽธ์ง€ํ•จ๊ณผ ๋Œ€์กฐํ•ด \"๋งˆ์ง€๋ง‰ ๋ฐœํ™”๊ฐ€ ๋ˆ„๊ตฌ์ธ๊ฐ€\"๋กœ ๋‹ต๋ณ€ ์—ฌ๋ถ€ ํŒ์ • (๋งˆ์ง€๋ง‰์ด ์ƒ๋Œ€๋ฐฉ โ†’ ๐Ÿ”ด ํšŒ์‹  ๋Œ€๊ธฐ / ๋งˆ์ง€๋ง‰์ด ๋‚˜ โ†’ โœ… ๊ณต ๋„˜๊น€) โ‘ข ๋‰ด", + "imports": [] + }, + "src/features/email/emailCollect.ts": { + "mtimeMs": 1783070235609.415, + "size": 4539, + "lines": 100, + "role": "์ตœ๊ทผ ๋ฉ”์ผ ์ˆ˜์ง‘ ๊ณตํ†ต ๋ชจ๋“ˆ (v2.2.271) โ€” /email ๋ธŒ๋ฆฌํ•‘๊ณผ ์ด๋ฉ”์ผ ์›Œ์ฒ˜๊ฐ€ ๊ณต์œ . Outlook(๋ฐ›์€+๋ณด๋‚ธ) + Gmail(์—ฐ๊ฒฐ ์‹œ)์„ MailLite ๋กœ ์ •๊ทœํ™”ํ•œ๋‹ค. ์ฐธ์กฐ๋ฒˆํ˜ธ(O1../G1..)๋Š” ์—ฌ๊ธฐ์„œ ๋ถ€์—ฌ โ€” ํ˜ธ์ถœ์ž(ํ•ธ๋“ค๋Ÿฌ)๊ฐ€ ๋ชฉ๋ก ์บ์‹œ์— ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ.", + "imports": [ + "src/features/email/gmailApi", + "src/features/email/outlookApi", + "src/features/email/emailBrief" + ] + }, + "src/features/email/emailPrompts.ts": { + "mtimeMs": 1783070235611.8782, + "size": 11633, + "lines": 195, + "role": "/email ํ”„๋กฌํ”„ํŠธ โ€” ์œ„ํ‚คํ™”(์ง€์‹ ๋ฌธ์„œ ํ•ฉ์„ฑ) + ํšŒ์‹  ์ดˆ์•ˆ. (v2.2.269) Datacollect bridge ์˜ email wikify ํ”„๋กฌํ”„ํŠธ์™€ ๊ฐ™์€ P-Reinforce ์„น์…˜ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ brain(์ œ2๋‡Œ) ๋ฌธ์„œ ํฌ๋งท ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ํ™˜๊ฐ ๋ฐฉ์ง€ ๊ทœ์น™ ๋™์ผ.", + "imports": [] + }, + "src/features/email/emailState.ts": { + "mtimeMs": 1783070235610.874, + "size": 12850, + "lines": 294, + "role": "์ด๋ฉ”์ผ ์Šค๋ ˆ๋“œ ์˜์† ์ƒํƒœ โ€” .astra/emailstate.json (v2.2.271) /email ์ด \"์กฐํšŒ ๋„๊ตฌ\"์—์„œ \"๊ด€๋ฆฌ ๋„๊ตฌ\"๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ: ์›Œ์ฒ˜๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ด€์ธกํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๊ธฐ ๋ˆ„์ ํ•˜๋ฏ€๋กœ, ์ˆ˜์ง‘ ์ฐฝ(์ตœ๊ทผ N์ผ) ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚œ ๋ฏธํšŒ์‹  ๊ฑด๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๊ณ„์† ์ถ”์ ๋œ๋‹ค (GTD Waiting-For ๋ฆฌ์ŠคํŠธ์˜ ์ฝ”๋“œํ™”). ์ƒํƒœ ๋จธ์‹ : waiti", + "imports": [ + "src/utils", + "src/features/email/emailBrief" + ] + }, + "src/features/email/emailWatcher.ts": { + "mtimeMs": 1783070235612.8818, + "size": 6716, + "lines": 135, + "role": "์ด๋ฉ”์ผ ์›Œ์ฒ˜ (v2.2.271) โ€” /email ์„ ์•ˆ ์ณ๋„ ์•Œ์•„์„œ ์ถ•์ ยท์ถ”์ ยท์•Œ๋ฆผ. ์ฃผ๊ธฐ(๊ธฐ๋ณธ 60๋ถ„)๋งˆ๋‹ค: 1. Outlook(+Gmail ์—ฐ๊ฒฐ ์‹œ) ์ตœ๊ทผ ๋ฉ”์ผ ์ฆ๋ถ„ ์ˆ˜์ง‘ 2. ์ฃผ์ œ๋ณ„ ์Šค๋ ˆ๋“œ ๋ฌถ์Œ โ†’ .astra/emailstate.json ์— ๋ณ‘ํ•ฉ (์ˆ˜์ง‘ ์ฐฝ ๋ฐ– ๋ฏธํšŒ์‹ ๋„ ๊ณ„์† ๋ณด์กด โ€” GTD Waiting-For) 3. ์ž„๊ณ„(๊ธฐ๋ณธ 24h) ์ดˆ๊ณผ ๋ฏธํšŒ์‹ ", + "imports": [ + "src/utils", + "src/integrations/telegram/telegramClient", + "src/extension/telegramCommands", + "src/features/email/emailCollect", + "src/features/email/emailBrief", + "src/features/email/emailState", + "src/integrations/telegram/messageFormat" + ] + }, + "src/features/email/gmailApi.ts": { + "mtimeMs": 1782992322821.3113, + "size": 7951, + "lines": 187, + "role": "Gmail API v1 โ€” ์ฝ๊ธฐ ์ „์šฉ(read-only) ๋ฉ”์‹œ์ง€ ์ˆ˜์ง‘ (Project Astra, Phase 1) Calendar/Tasks/Sheets ์™€ ๊ฐ™์€ Google OAuth ํ† ํฐ์„ ๊ณต์œ ํ•œ๋‹ค (getFreshAccessToken). scope ์— gmail.readonly ๊ฐ€ ํฌํ•จ๋ผ์•ผ ํ•จ(oauth.ts). ์‚ญ์ œ/๋‹ต์žฅ/์ „๋‹ฌ ๋“ฑ ์“ฐ๊ธฐ ๊ธฐ๋Šฅ์€ ์ผ์ ˆ ", + "imports": [ + "src/features/calendar/calendarApi" + ] + }, + "src/features/email/handlers.ts": { + "mtimeMs": 1783071322137.2522, + "size": 38561, + "lines": 630, + "role": "/email โ€” Gmail + ํด๋ž˜์‹ Outlook ํ†ตํ•ฉ ์ด๋ฉ”์ผ ๋ช…๋ น (v2.2.269) /email โ€” ๋„์›€๋ง + ์—ฐ๊ฒฐ ์ƒํƒœ /email list [gmail|outlook] [์ผ์ˆ˜] โ€” ์ตœ๊ทผ ๋ฉ”์ผ ๋ชฉ๋ก (๊ธฐ๋ณธ ๋‘˜ ๋‹ค, 7์ผ) /email read G3 | O2 โ€” ๋ชฉ๋ก ๋ฒˆํ˜ธ๋กœ ๋‚ด์šฉ ์ฝ๊ธฐ /email wikify G3 | O2 โ€” ์ง€์‹ ๋ฌธ์„œ๋กœ ์œ„ํ‚คํ™” โ†’ ", + "imports": [ + "src/features/email/features/email/handlers", + "src/features/datacollect/slashRouter", + "src/features/datacollect/wikiSave", + "src/features/datacollect/llm", + "src/features/email/gmailApi", + "src/features/email/outlookApi", + "src/features/email/emailPrompts", + "src/features/datacollect/prompts/wikifyPrompt", + "src/features/datacollect/wikiFormat", + "src/features/email/emailBrief", + "src/features/email/emailCollect", + "src/features/email/emailState", + "src/features/email/emailWatcher", + "src/features/calendar/calendarCache" + ] + }, + "src/features/email/outlookApi.ts": { + "mtimeMs": 1783070186274.4316, + "size": 11590, + "lines": 276, + "role": "Outlook (ํด๋ž˜์‹ ๋ฐ์Šคํฌํ†ฑ) โ€” COM ์ž๋™ํ™” via PowerShell (v2.2.269) ์‚ฌ์šฉ์ž PC์— ์„ค์น˜๋œ ํด๋ž˜์‹ Outlook ์„ COM ์œผ๋กœ ์ง์ ‘ ์ฝ๋Š”๋‹ค โ€” ๋ณ„๋„ ์ธ์ฆ ์—†์Œ (Outlook ์ด ์ด๋ฏธ ๋กœ๊ทธ์ธ๋ผ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋™์ž‘). Graph API ๋ฏธ์‚ฌ์šฉ (Azure ์•ฑ ๋“ฑ๋กยท๊ด€๋ฆฌ์ž ๋™์˜๊ฐ€ ํ•„์š”ํ•ด ๊ฐœ์ธ/์‚ฌ๋‚ด ํ™˜๊ฒฝ์—์„œ ๋ถ€๋‹ด). ์•ˆ์ „ ์›์น™: -", + "imports": [] + }, "src/features/feedback/feedbackStore.ts": { "mtimeMs": 1780275889230.5403, "size": 1851, @@ -1446,11 +1620,12 @@ ] }, "src/features/growth/growthCycleWatcher.ts": { - "mtimeMs": 1781231979220.9685, - "size": 19659, - "lines": 318, + "mtimeMs": 1783907905729.0396, + "size": 19324, + "lines": 307, "role": "์ฃผ๊ฐ„ ์„ฑ์žฅ ์‚ฌ์ดํด ์›Œ์ฒ˜ โ€” Self-Evolving OS ์˜ ํ๋ฃจํ”„ ์ž๋™ํ™”. ๊ธฐ์กด์—” ํ‰๊ฐ€ยทํ•™์Šตํยท๋…ธํ›„์ ๊ฒ€ยทํ•™์Šต์‹คํ–‰์ด ์ „๋ถ€ ์ˆ˜๋™ ๋ช…๋ น์ด์—ˆ๋‹ค. ์ด ์›Œ์ฒ˜๊ฐ€ ๋งค์ฃผ (๊ธฐ๋ณธ ์ผ์š”์ผ 20:00 KST) ์ž๋™์œผ๋กœ: 1. ๊ฒ€์ƒ‰ ํ‰๊ฐ€ โ€” ๊ณจ๋“ ์…‹ recall@k/MRR (์ฃผ๊ฐ„ ์ถ”์ด ๋ฐ์ดํ„ฐ, TF-IDF ๊ฒฝ๋กœ) 2. ํ•™์Šต ํ ๊ฐฑ์‹  โ€” Reflection โ†’ Need Engine", "imports": [ + "src/lib/kstSchedule", "src/config", "src/utils", "src/retrieval", @@ -1470,11 +1645,12 @@ ] }, "src/features/growth/sleepDigest.ts": { - "mtimeMs": 1781232042506.8752, - "size": 13185, - "lines": 271, + "mtimeMs": 1783907905738.3445, + "size": 12833, + "lines": 261, "role": "Sleep-time ์ง€์‹ ์‚ฌ์ „ ์†Œํ™” (Sleep-time Compute, arXiv 2504.13171 ์˜ ASTRA ์ด์‹). ์•„์ด๋””์–ด: ๋กœ์ปฌ LLM ์˜ ์ตœ๋Œ€ ์•ฝ์ (๋А๋ฆฐ ์ถ”๋ก )์„ ์‘๋‹ต ์‹œ์ ์—์„œ ์œ ํœด ์‹œ๊ฐ„์œผ๋กœ ์˜ฎ๊ธด๋‹ค. ์œ ํœด ์‹œ๊ฐ„์— ๋‘๋‡Œ์˜ \"raw context\"(์œ„ํ‚ค ์›๋ฌธ ๋”๋ฏธ)๋ฅผ \"learned context\"(์˜ˆ์ƒ ์งˆ์˜๋ณ„ ์••์ถ• ์†Œํ™” ๋…ธํŠธ)๋กœ ๋ณ€ํ™˜ํ•ด ๋‘๋ฉด,", "imports": [ + "src/lib/kstSchedule", "src/config", "src/utils", "src/intelligence/llmCall", @@ -1583,6 +1759,17 @@ "src/features/providers/streamHelpers" ] }, + "src/features/providers/claudeCode.ts": { + "mtimeMs": 1783907905739.5852, + "size": 10309, + "lines": 205, + "role": "Claude Code CLI adapter โ€” ๊ตฌ๋…(Pro/Max) ์ธ์ฆ์œผ๋กœ Claude ๋ฅผ Astra ์—”์ง„์œผ๋กœ. ๋ฐฐ๊ฒฝ (v2.2.305): Anthropic ๊ตฌ๋…์€ API ํ‚ค๊ฐ€ ์•„๋‹ˆ๋ผ Claude Code ๋กœ๊ทธ์ธ ๋ฐฉ์‹์ด๋ผ anthropic: ํ”„๋กœ๋ฐ”์ด๋”(API ํ‚คยท์ข…๋Ÿ‰์ œ)๋กœ๋Š” ์“ธ ์ˆ˜ ์—†๋‹ค. ์ด ์–ด๋Œ‘ํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ๋กœ๊ทธ์ธํ•ด ๋‘” ๋กœ์ปฌ claude CLI ๋ฅผ", + "imports": [ + "src/features/providers/types", + "src/lib/execUtil", + "src/utils" + ] + }, "src/features/providers/gemini.ts": { "mtimeMs": 1779065453881.3628, "size": 4434, @@ -1595,15 +1782,16 @@ ] }, "src/features/providers/index.ts": { - "mtimeMs": 1779065453882.3787, - "size": 3311, - "lines": 69, + "mtimeMs": 1783907905743.8855, + "size": 3897, + "lines": 78, "role": "Cloud LLM provider public API. ์ผ๋ฐ˜ ํ˜ธ์ถœ ํ๋ฆ„: 1. agent.ts ์˜ chat ์ง„์ž…๋ถ€์—์„œ parseModelPrefix(modelId) ํ˜ธ์ถœ 2. null โ†’ local engine ๊ฒฝ๋กœ (์˜› ๋กœ์ง). ๊ฐ์ฒด โ†’ streamCloudCompletion(context, hit, params) ํ˜ธ์ถœ 3. Response ์˜ body ", "imports": [ "src/features/providers/types", "src/features/providers/openrouter", "src/features/providers/anthropic", "src/features/providers/gemini", + "src/features/providers/claudeCode", "src/features/providers/providerConfig" ] }, @@ -1634,9 +1822,9 @@ "imports": [] }, "src/features/providers/types.ts": { - "mtimeMs": 1779065453884.8909, - "size": 2433, - "lines": 63, + "mtimeMs": 1783907905749.0212, + "size": 2918, + "lines": 69, "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": [] }, @@ -1660,11 +1848,12 @@ ] }, "src/features/selfReflector/selfReflectorExecution.ts": { - "mtimeMs": 1779325350825.2378, - "size": 9570, + "mtimeMs": 1783907905750.1067, + "size": 10059, "lines": 207, "role": "Self-Reflector Phase C โ€” ์‹คํ–‰ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ. Phase A/B๋Š” LLM ํ…์ŠคํŠธ ๋ถ„์„์— ์˜์กดํ•˜๋ฏ€๋กœ \"์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์ปดํŒŒ์ผ๋˜๋Š”๊ฐ€?\" ๊ฐ™์€ ์งˆ๋ฌธ์—” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. Phase C๋Š” ์ •๋‹ต: ๊ทธ๋ƒฅ ์‹คํ–‰ํ•ด ๋ณธ๋‹ค. ๋™์ž‘: 1. action-tag executor๊ฐ€ ๋ฐ˜ํ™˜ํ•œ report๋ฅผ ๋ฐ›์•„ โœ… Created: / โœ… Edited: ", "imports": [ + "src/lib/execUtil", "src/utils" ] }, @@ -1693,9 +1882,9 @@ ] }, "src/features/settings/settingsPanelProvider.ts": { - "mtimeMs": 1780968616137.0164, - "size": 35518, - "lines": 734, + "mtimeMs": 1783303470006.2417, + "size": 40143, + "lines": 820, "role": "", "imports": [ "src/integrations/telegram/telegramClient", @@ -1708,68 +1897,104 @@ ] }, "src/features/setup/datacollectSetup.ts": { - "mtimeMs": 1780624672053.5078, - "size": 12679, - "lines": 267, + "mtimeMs": 1783907905764.34, + "size": 12849, + "lines": 268, "role": "Datacollect ์˜์กด์„ฑ(Python ํŒจํ‚ค์ง€) ์ž๋™ ์„ค์น˜/๊ฒ€์ฆ ๋ชจ๋“ˆ. ์˜๋„: Astra extension ๋งŒ ๊น”๊ณ  ๋๋‚˜๋ฉด /youtube, /research ๊ฐ™์€ datacollect ์Šฌ๋ž˜์‹œ ๋ช…๋ น์€ bridge ์˜ Python ์˜์กด์„ฑ (yt-dlp, youtube-transcript-api) ์ด ์—†์–ด์„œ ์‹คํŒจํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๊ฑธ ๋งค๋ฒˆ ์ˆ˜๋™์œผ๋กœ ๊น”์•„์•ผ ํ•˜๋Š”", "imports": [ + "src/lib/execUtil", "src/utils" ] }, "src/features/sheets/index.ts": { - "mtimeMs": 1779065453886.916, - "size": 250, - "lines": 13, + "mtimeMs": 1783303470008.2588, + "size": 293, + "lines": 15, "role": "", "imports": [ "src/features/sheets/sheetsApi" ] }, "src/features/sheets/sheetsApi.ts": { - "mtimeMs": 1779065453887.9194, - "size": 7960, - "lines": 166, + "mtimeMs": 1783303470009.2974, + "size": 11292, + "lines": 235, "role": "Google Sheets API v4 โ€” read / write / append. ํ† ํฐ์€ calendar ์™€ ๊ณต์œ  (๊ฐ™์€ OAuth ์— spreadsheets scope ํฌํ•จ). ๋ณ„๋„ ์…‹์—… ์—†์Œ โ€” \"Astra: Google Calendar OAuth ์—ฐ๊ฒฐ\" ๋ช…๋ น์œผ๋กœ ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธํ•˜๋ฉด ๋‘˜ ๋‹ค ๋™์ž‘ํ•œ๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ ์”€ โ€” Sheets API REST", "imports": [ "src/features/calendar/calendarApi" ] }, + "src/features/stocks/backupSync.ts": { + "mtimeMs": 1783303470009.2974, + "size": 6473, + "lines": 133, + "role": "", + "imports": [ + "src/features/sheets", + "src/utils", + "src/features/stocks/stocksStore", + "src/features/stocks/types" + ] + }, + "src/features/stocks/compositeScore.ts": { + "mtimeMs": 1782985069125.8005, + "size": 9854, + "lines": 204, + "role": "", + "imports": [ + "src/features/stocks/types" + ] + }, "src/features/stocks/criteriaEval.ts": { - "mtimeMs": 1781086243443.0957, - "size": 12293, - "lines": 209, + "mtimeMs": 1782807721058.0144, + "size": 13996, + "lines": 234, "role": "/stocks judge ์˜ ๊ฒฐ์ •๋ก ์  ๊ธฐ์ค€ ํ‰๊ฐ€๊ธฐ. ๊ธฐ์กด์—๋Š” \"์œ ๋ณด์œจ: 5,800%\" ๊ฐ™์€ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ๊ณผ ์ž„๊ณ„๊ฐ’ ๋น„๊ต(ROE โ‰ฅ 10% ๋“ฑ)๊นŒ์ง€ ์ „๋ถ€ LLM ์—๊ฒŒ ๋งก๊ฒผ๋Š”๋ฐ, ๋กœ์ปฌ ์†Œํ˜• ๋ชจ๋ธ์€ ์ฝค๋งˆ ์ˆซ์ž ํŒŒ์‹ฑยท๋‹ค์ค‘ ๊ธฐ์ค€ ๋™์‹œ ๋น„๊ต์—์„œ ์ž์ฃผ ํ‹€๋ฆฐ๋‹ค. ์ˆ˜์น˜ ๊ธฐ์ค€์€ ์ฝ”๋“œ๋กœ 100% ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜๊ณ , LLM ์€ โ‘  '๊ธฐ์ˆ ๋ ฅ' ๋„๋ฉ”์ธ ์ •์„ฑ ํŒ๋‹จ(ํ‚ค์›Œ๋“œ ๋งค์นญ์ด ๋ชจํ˜ธํ• ", "imports": [ "src/features/stocks/types", - "src/features/stocks/naverFundamentals" + "src/features/stocks/naverFundamentals", + "src/features/stocks/marketUtils" ] }, "src/features/stocks/discoveryAnalyzer.ts": { - "mtimeMs": 1779764602625.2075, - "size": 10526, - "lines": 237, + "mtimeMs": 1783047644329.3994, + "size": 12366, + "lines": 256, "role": "", "imports": [ "src/core/services", "src/utils", "src/extension/telegramCommands", "src/integrations/telegram/telegramClient", - "src/features/stocks/stockDiscovery" + "src/features/stocks/stockDiscovery", + "src/integrations/telegram/messageFormat" + ] + }, + "src/features/stocks/fundamentalsRouter.ts": { + "mtimeMs": 1782807657868.5742, + "size": 790, + "lines": 15, + "role": "", + "imports": [ + "src/features/stocks/marketUtils", + "src/features/stocks/naverFundamentals", + "src/features/stocks/yahooFundamentals" ] }, "src/features/stocks/index.ts": { - "mtimeMs": 1779764602625.2075, - "size": 121, - "lines": 2, + "mtimeMs": 1783303470010.3047, + "size": 179, + "lines": 3, "role": "", "imports": [ "src/features/stocks/stocksWatcher", - "src/features/stocks/slashStocks" + "src/features/stocks/slashStocks", + "src/features/stocks/backupSync" ] }, "src/features/stocks/llmJudge.ts": { - "mtimeMs": 1781084049810.22, - "size": 6072, + "mtimeMs": 1782808012183.4006, + "size": 6080, "lines": 125, "role": "", "imports": [ @@ -1780,19 +2005,27 @@ "src/features/stocks/naverFundamentals" ] }, + "src/features/stocks/marketUtils.ts": { + "mtimeMs": 1782807510714.5957, + "size": 2810, + "lines": 61, + "role": "์‹œ์žฅ(ํ•œ๊ตญ/๋ฏธ๊ตญ) ํŒ๋ณ„ + ํ†ตํ™”ยท๊ธˆ์•ก ํฌ๋งคํŒ… ์œ ํ‹ธ. stocks ๋ชจ๋“ˆ ์ „์ฒด๊ฐ€ ์›๋ž˜ ํ•œ๊ตญ ์ „์šฉ(6์ž๋ฆฌ ์ฝ”๋“œ, ์›, ์–ต)์ด์—ˆ๋‹ค. ๋ฏธ๊ตญ ์ข…๋ชฉ์„ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋ ค๋ฉด \"์ด ์‹ฌ๋ณผ์ด ์–ด๋А ์‹œ์žฅ์ธ๊ฐ€\"๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค โ€” ์‹ฌ๋ณผ ๋ชจ์–‘์œผ๋กœ ์ž๋™ ํŒ๋ณ„ํ•˜๋˜, Stock.market ์ด ๋ช…์‹œ๋ผ ์žˆ์œผ๋ฉด ๊ทธ๊ฑธ ์šฐ์„ ํ•œ๋‹ค. - KR: 6์ž๋ฆฌ ์ˆซ์ž ์ฝ”๋“œ (์˜ˆ: 005930). ํ†ตํ™” ์›", + "imports": [] + }, "src/features/stocks/naverFundamentals.ts": { - "mtimeMs": 1781086142605.6724, - "size": 8323, - "lines": 178, + "mtimeMs": 1782807569417.1467, + "size": 9418, + "lines": 192, "role": "", "imports": [ - "src/utils" + "src/utils", + "src/features/stocks/stockSectors" ] }, "src/features/stocks/naverScreener.ts": { - "mtimeMs": 1779764602627.2136, - "size": 6593, - "lines": 151, + "mtimeMs": 1781498592643.6018, + "size": 10428, + "lines": 235, "role": "", "imports": [ "src/utils" @@ -1812,52 +2045,65 @@ ] }, "src/features/stocks/signalClassifier.ts": { - "mtimeMs": 1779764602628.3208, - "size": 2818, - "lines": 69, + "mtimeMs": 1782991641886.1975, + "size": 4017, + "lines": 91, "role": "", "imports": [ "src/features/stocks/types" ] }, "src/features/stocks/slashStocks.ts": { - "mtimeMs": 1781084110909.264, - "size": 34650, - "lines": 629, + "mtimeMs": 1783303470011.3147, + "size": 42856, + "lines": 737, "role": "", "imports": [ "src/utils", "src/features/stocks/stocksStore", "src/features/stocks/yahooClient", "src/features/stocks/naverFundamentals", + "src/features/stocks/fundamentalsRouter", + "src/features/stocks/marketUtils", "src/core/services", "src/features/stocks/signalClassifier", "src/features/stocks/sheetsSync", + "src/features/stocks/backupSync", "src/features/stocks/llmJudge", "src/features/stocks/telegramReport", "src/features/stocks/stocksWatcher", "src/features/stocks/stockDiscovery", + "src/features/stocks/stockSectors", "src/features/stocks/discoveryAnalyzer", "src/features/stocks/types" ] }, "src/features/stocks/stockDiscovery.ts": { - "mtimeMs": 1779769708419.8738, - "size": 9622, - "lines": 196, + "mtimeMs": 1782991459695.8474, + "size": 15048, + "lines": 270, "role": "", "imports": [ "src/utils", "src/features/stocks/naverScreener", "src/features/stocks/naverFundamentals", "src/features/stocks/yahooClient", + "src/features/stocks/compositeScore", + "src/features/stocks/stockSectors", "src/features/stocks/types" ] }, + "src/features/stocks/stockSectors.ts": { + "mtimeMs": 1781498544407.646, + "size": 6402, + "lines": 85, + "role": "์„นํ„ฐ ๋ถ„๋ฅ˜ โ€” /stocks discover sector <์„นํ„ฐ> ์˜ ๊ทธ๋ฃน ์ •์˜. v2 (๊ทผ๋ณธ ์ˆ˜์ •): ๊ธฐ์กด์—” ์ „ ์ข…๋ชฉ์„ ์‹œ์ด์œผ๋กœ ํฌ๋กคํ•œ ๋’ค Fundamentals.sectorHint ๋กœ ํ•„ํ„ฐํ–ˆ๋Š”๋ฐ, ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ API ์— ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋˜ industryInfo.name ํ•„๋“œ๊ฐ€ ์—†์–ด sectorHint ๊ฐ€ ํ•ญ์ƒ ๋น„์–ด ๊ฒฐ๊ณผ 0๊ฐœ๊ฐ€ ๋‚˜์™”๋‹ค. ์‹ค์ œ๋กœ๋Š” โ‘  ํ†ตํ•ฉ ์‘๋‹ต", + "imports": [] + }, "src/features/stocks/stocksStore.ts": { - "mtimeMs": 1779764602630.329, - "size": 4123, - "lines": 96, + "mtimeMs": 1783303470016.6572, + "size": 5283, + "lines": 123, "role": "", "imports": [ "src/utils", @@ -1865,22 +2111,25 @@ ] }, "src/features/stocks/stocksWatcher.ts": { - "mtimeMs": 1779764602630.329, - "size": 6530, - "lines": 163, + "mtimeMs": 1783907905775.5173, + "size": 7863, + "lines": 174, "role": "", "imports": [ + "src/lib/kstSchedule", "src/utils", "src/features/stocks/stocksStore", "src/features/stocks/yahooClient", "src/features/stocks/telegramReport", - "src/features/stocks/sheetsSync" + "src/features/stocks/signalClassifier", + "src/features/stocks/sheetsSync", + "src/integrations/telegram/messageFormat" ] }, "src/features/stocks/telegramReport.ts": { - "mtimeMs": 1779764602631.3562, - "size": 5335, - "lines": 117, + "mtimeMs": 1783047621187.9973, + "size": 8733, + "lines": 174, "role": "", "imports": [ "src/integrations/telegram/telegramClient", @@ -1888,23 +2137,35 @@ "src/utils", "src/features/stocks/stocksStore", "src/features/stocks/signalClassifier", - "src/features/stocks/types" + "src/features/stocks/types", + "src/integrations/telegram/messageFormat" ] }, "src/features/stocks/types.ts": { - "mtimeMs": 1779764602631.3562, - "size": 2188, - "lines": 53, + "mtimeMs": 1782991376283.1997, + "size": 2679, + "lines": 61, "role": "Stocks ๋ชจ๋“ˆ ๊ณต์œ  ํƒ€์ž…. investresults/targetstocks.json ์Šคํ‚ค๋งˆ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„์„œ, ConnectAI ์˜ /.astra/stocks.json ์œผ๋กœ ์˜ฎ๊ธด ๋’ค ๊ฐ™์€ ํ•„๋“œ๋ช…์„ ์œ ์ง€. ํ•œ๊ธ€ ํ•„๋“œ๋ช…์€ ์‚ฌ์šฉ์ž์˜ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค โ€” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ถฉ๋Œ ํšŒํ”ผ + ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ JSON ํŽธ์ง‘ํ•  ๋•Œ frictio", "imports": [] }, "src/features/stocks/yahooClient.ts": { - "mtimeMs": 1779856972057.0444, - "size": 16112, - "lines": 353, + "mtimeMs": 1782807552994.1555, + "size": 16393, + "lines": 358, "role": "", "imports": [ - "src/utils" + "src/utils", + "src/features/stocks/marketUtils" + ] + }, + "src/features/stocks/yahooFundamentals.ts": { + "mtimeMs": 1782808266103.863, + "size": 8215, + "lines": 175, + "role": "", + "imports": [ + "src/utils", + "src/features/stocks/naverFundamentals" ] }, "src/features/system/handlers.ts": { @@ -2031,6 +2292,13 @@ "src/utils" ] }, + "src/integrations/telegram/messageFormat.ts": { + "mtimeMs": 1783047550770.6475, + "size": 5282, + "lines": 121, + "role": "ํ…”๋ ˆ๊ทธ๋žจ ๋ฉ”์‹œ์ง€ โ€” ๋‹จ์ผ ํฌ๋งท ๋ชจ๋“ˆ (v2.2.284) ๋ฐฐ๊ฒฝ: ๊ธฐ๋Šฅ๋งˆ๋‹ค ํ…”๋ ˆ๊ทธ๋žจ ๋ฉ”์‹œ์ง€ ํฌ๋งท์ด ์ œ๊ฐ๊ฐ(์ฃผ์‹ ๋ณด๊ณ ์„œยท๋งค์ˆ˜์‹œ๊ทธ๋„ยท๋ฐœ๊ตด Top5ยท ๋ฐ์ผ๋ฆฌ ๋ธŒ๋ฆฌํ•‘ยท์ด๋ฉ”์ผ ์•Œ๋ฆผ)์ด๋ผ ๋ชจ๋ฐ”์ผ ์‹œ์ธ์„ฑ์ด ๋‚ฎ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŒŒํŽธํ™”๋๋‹ค. wikiFormat ์ด ์œ„ํ‚ค ๋ฌธ์„œ ํฌ๋งท์„ ํ†ต์ผํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์•ž์œผ๋กœ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๋ชจ๋“  ์ •๊ธฐ/์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๋Š” ์ด ๋ชจ๋“ˆ์˜ renderTeleg", + "imports": [] + }, "src/integrations/telegram/promptBuilders.ts": { "mtimeMs": 1779764602632.363, "size": 7663, @@ -2095,9 +2363,9 @@ "imports": [] }, "src/intelligence/correctionLoop.ts": { - "mtimeMs": 1781234941518.895, - "size": 17684, - "lines": 382, + "mtimeMs": 1783993526126.0222, + "size": 26580, + "lines": 557, "role": "Correction Loop โ€” ์‚ฌ์šฉ์ž ์ •์ • 1ํšŒ๊ฐ€ ์‹œ์Šคํ…œ์„ ์„ธ ๊ตฐ๋ฐ์„œ ์„ฑ์žฅ์‹œํ‚ค๋Š” ๋‹จ์ผ ํŒŒ์ดํ”„๋ผ์ธ. ์‚ฌ์šฉ์ž ์ •์ • (\"์•„๋‹ˆ์•ผ, ๊ทธ๊ฑฐ 6์›”์ด์•ผ\") โ‘  ๊ฐ์ง€(looksLikeCorrection) + LLM ์˜ค๋ฅ˜ ๋ถ„๋ฅ˜(classifyCorrection) โ”œโ†’ ํƒœ๊น…๋œ ๋ ˆ์Šจ ์ €์žฅ (lessons/ โ€” error-tag frontmatter) โ””โ†’ ํšŒ๊ท€ ์ผ€์ด์Šค ์ ๋ฆฝ (", "imports": [ "src/intelligence/llmCall", @@ -2141,6 +2409,15 @@ "src/intelligence/confidenceEngine" ] }, + "src/intelligence/investigationPipeline.ts": { + "mtimeMs": 1784517973427.466, + "size": 13722, + "lines": 256, + "role": "Investigation Pipeline โ€” \"ํŒŒ์ผ๋ช…๋งŒ ๋ณด๊ณ  ์ƒ์ƒํ•˜๋Š” ์กฐ์‚ฌ\" ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ฐจ๋‹จ. (v2.2.309) ๋ฌธ์ œ: ์†Œํ˜• ๋กœ์ปฌ ๋ชจ๋ธ์€ ๋กœ ํŒŒ์ผ๋ช… ๋ชฉ๋ก์„ ๋ฐ›์œผ๋ฉด ์„ ๋ถ€๋ฅด์ง€ ์•Š๊ณ  ์ด๋ฆ„์—์„œ ๋‚ด์šฉ์„ ์ƒ์ƒํ•ด ์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ง€์–ด๋‚ธ๋‹ค (lazy tool-use ํ• ๋ฃจ์‹œ๋„ค์ด์…˜). ํ•ด๋ฒ• 3์ค‘: โ‘  ์ฆ๊ฑฐ ๊ฒŒ์ดํŠธ โ€” ์กฐ์‚ฌํ˜• ์š”์ฒญ ", + "imports": [ + "src/config" + ] + }, "src/intelligence/knowledgeDecay.ts": { "mtimeMs": 1781147140600.4475, "size": 5151, @@ -2174,11 +2451,13 @@ ] }, "src/intelligence/llmCall.ts": { - "mtimeMs": 1781144318025.0918, - "size": 2099, - "lines": 52, - "role": "๋‹จ์ˆœ non-streaming LLM ํ˜ธ์ถœ โ€” Ollama / LM Studio(OpenAI ํ˜ธํ™˜) ๋“€์–ผ ์—”๋“œํฌ์ธํŠธ. postHocSelfCheck ์˜ ํ˜ธ์ถœ ํŒจํ„ด์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ—ฌํผ๋กœ ๋ถ„๋ฆฌ. ํ‰๊ฐ€ ํ•˜๋‹ˆ์ŠคยทCritic ๋“ฑ AgentExecutor ๋ฐ–์—์„œ LLM 1ํšŒ ํ˜ธ์ถœ์ด ํ•„์š”ํ•œ ๊ณณ์ด ์‚ฌ์šฉํ•œ๋‹ค (ํ™•์žฅ ๋ช…๋ น ๋“ฑ). agent turn ๋‚ด๋ถ€์—์„œ๋Š” agent.t", - "imports": [] + "mtimeMs": 1783907905783.671, + "size": 1378, + "lines": 35, + "role": "", + "imports": [ + "src/core/services" + ] }, "src/intelligence/needEngine.ts": { "mtimeMs": 1781147322252.6475, @@ -2204,9 +2483,9 @@ "imports": [] }, "src/intelligence/requirementGraph.ts": { - "mtimeMs": 1781144397584.8677, - "size": 12495, - "lines": 273, + "mtimeMs": 1784518036891.6404, + "size": 15359, + "lines": 312, "role": "Requirement Graph โ€” ์—…๋ฌด ์œ ํ˜•๋ณ„ ํ•„์ˆ˜ ์š”์†Œ ์ •์˜ + ๊ฐ์ง€ + ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒ€์‚ฌ. Self-Evolving Digital Employee OS ๋งˆ์Šคํ„ฐ ํ”Œ๋žœ(docs/SELFEVOLVINGOSMASTERPLAN.md) Phase 1 / Track 2-1. ์‹ ๋ขฐ ์กฐ๊ฑด T3 \"ํ’ˆ์งˆ์ด ์ผ๊ด€์ ์ด๋‹ค โ€” ํ•„์ˆ˜ ์š”์†Œ ๋ˆ„๋ฝ ์—†์Œ\" ๋‹ด๋‹น. ๋™์ž‘ 2๋‹จ๊ณ„: 1. In", "imports": [] }, @@ -2292,6 +2571,13 @@ "src/agent" ] }, + "src/lib/contextBuilders/liveReasoningFilter.ts": { + "mtimeMs": 1784020045098.4705, + "size": 12755, + "lines": 245, + "role": "LiveReasoningFilter โ€” ์ŠคํŠธ๋ฆฌ๋ฐ ๋„์ค‘ ๋ชจ๋ธ์˜ ๋‚ด๋ถ€ ์ถ”๋ก ์„ ํ™”๋ฉด์—์„œ ์ฐจ๋‹จํ•˜๋Š” ์ƒํƒœ ๊ธฐ๊ณ„ (per-generation 1 ์ธ์Šคํ„ด์Šค, stateful). ๋ฐฐ๊ฒฝ: liveStreamTokens=true(๊ธฐ๋ณธ) ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์—์„œ <|channel|>thought โ€ฆ / โ€ฆ ๊ฐ™์€ ์ถ”๋ก  ๊ตฌ๊ฐ„์ด ์ƒ์„ฑ ๋‚ด๋‚ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋๋‹ค๊ฐ€ ์™„", + "imports": [] + }, "src/lib/contextBuilders/lmStudioSampling.ts": { "mtimeMs": 1779764602637.9385, "size": 1297, @@ -2303,18 +2589,18 @@ ] }, "src/lib/contextBuilders/localProjectIntent.ts": { - "mtimeMs": 1781240137750.4143, - "size": 14163, - "lines": 233, + "mtimeMs": 1784021179773.8223, + "size": 14642, + "lines": 234, "role": "", "imports": [ "src/lib/contextBuilders/promptDetection" ] }, "src/lib/contextBuilders/localProjectPath.ts": { - "mtimeMs": 1779764602638.9414, - "size": 17046, - "lines": 328, + "mtimeMs": 1784021166513.443, + "size": 17726, + "lines": 332, "role": "", "imports": [ "src/utils", @@ -2324,9 +2610,9 @@ ] }, "src/lib/contextBuilders/memoryContext.ts": { - "mtimeMs": 1781491584066.6763, - "size": 25616, - "lines": 449, + "mtimeMs": 1784510642205.134, + "size": 29407, + "lines": 486, "role": "", "imports": [ "src/agent", @@ -2337,7 +2623,9 @@ "src/retrieval/embeddings", "src/retrieval/brainIndex", "src/intelligence/correctionLoop", + "src/intelligence/investigationPipeline", "src/skills/agentKnowledgeMap", + "src/retrieval/domainRouter", "src/retrieval/knowledgeMix", "src/retrieval/conflictBlock", "src/retrieval/coveBlock", @@ -2362,9 +2650,9 @@ "imports": [] }, "src/lib/contextBuilders/multiAgentRouting.ts": { - "mtimeMs": 1779764602639.947, - "size": 5257, - "lines": 96, + "mtimeMs": 1783907905794.681, + "size": 5728, + "lines": 103, "role": "", "imports": [ "src/config", @@ -2375,9 +2663,9 @@ ] }, "src/lib/contextBuilders/outputSanitization.ts": { - "mtimeMs": 1779764602640.9502, - "size": 5338, - "lines": 99, + "mtimeMs": 1784019840678.9001, + "size": 5958, + "lines": 108, "role": "๋ชจ๋ธ ์ถœ๋ ฅ ํ›„์ฒ˜๋ฆฌ (post-stream sanitization). ๋ชจ๋‘ stateless pure transform. 1) sanitizeAssistantContent โ€” ๋ชจ๋ธ์ด ๋‹ต๋ณ€์— ํ˜๋ ค๋ณด๋‚ธ ๋‚ด๋ถ€ ๋งˆ์ปค (rationale, reasoning channels, Harmony/GPT-OSS ์ฑ„๋„ ๋งˆ์ปค, [PROBLEM]/[GOAL]/[REASONING] ", "imports": [] }, @@ -2485,6 +2773,13 @@ "role": "Thinking partner response contract โ€” system prompt ์— ํ•ญ์ƒ prepend ๋˜๋Š” 6ํ•ญ๋ชฉ ์‘๋‹ต ๊ทœ์•ฝ. 100% stateless ํ•œ ์ •์  ๋ฌธ์ž์—ด์ด๋ผ god-file agent.ts ์— ๋ฐ•ํ˜€ ์žˆ์„ ์ด์œ  ์—†์Œ. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ / ๋‹ค๋ฅธ ๋ชจ๋“œ์—์„œ ์žฌ์‚ฌ์šฉ / contract ์ˆ˜์ • ์‹œ ๋ณ€๊ฒฝ ๋ฒ”์œ„ ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•ด ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๊ฒฉ๋ฆฌ. 6", "imports": [] }, + "src/lib/contextBuilders/toneGuard.ts": { + "mtimeMs": 1783907905795.6836, + "size": 2971, + "lines": 41, + "role": "Tone Guard โ€” AI ์ƒํˆฌ์–ด(ํด๋ฆฌ์…ฐ) ๊ธˆ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ (v2.2.306). ๋ฐฐ๊ฒฝ: ์žก๋‹ด ํ„ด์—์„œ \"ํž˜๋“  ๊ฐ์ •์„ ๋А๋ผ๊ณ  ๊ณ„์‹œ๊ตฐ์š”. ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด โ€ฆ ์ €๋Š” ์–ธ์ œ๋“  ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.\" ๊ฐ™์€ ์ƒ๋‹ด์‚ฌ ํ™”๋ฒ•์ด ๊ทธ๋Œ€๋กœ ๋‚˜์™”๋‹ค (์‹ค์‚ฌ๋ก€). ์ž‘์—… ํ„ด์—๋Š” ๋ฌธ์ฒด ๊ทœ์น™(persona R1~R7)์ด ์žˆ์ง€๋งŒ casual ๋ชจ๋“œ๋Š” ๋ฌด๋ฐฉ๋น„์˜€๋‹ค. ์„ค๊ณ„: ๋ธ”๋กœ๊ทธv3 QA ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๊ฐ™", + "imports": [] + }, "src/lib/contextBuilders/urlContext.ts": { "mtimeMs": 1781491584068.7393, "size": 5546, @@ -2497,9 +2792,9 @@ ] }, "src/lib/contextManager.ts": { - "mtimeMs": 1779764602646.58, - "size": 13536, - "lines": 278, + "mtimeMs": 1781749676103.8655, + "size": 14499, + "lines": 296, "role": "Context Manager (์ปจํ…์ŠคํŠธ ํ•œ๊ณ„ ๊ด€๋ฆฌ) \"context length = 132k\" ๋Š” \"๋‹ต๋ณ€์„ 132k ํ† ํฐ๊นŒ์ง€ ์ƒ์„ฑํ•ด๋„ ๋œ๋‹ค\" ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ๋Œ€ํ™” ๊ธฐ๋ก + ์ž…๋ ฅ ๋ฌธ์„œ + ์ƒ์„ฑ๋  ๋‹ต๋ณ€ + ์—ฌ์œ ๋ถ„ โ‰ค context length ์ด ๋ชจ๋“ˆ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์ž…๋ ฅ ํ† ํฐ์„ ์ถ”์ •ํ•˜๊ณ , - ๋™์ ์œผ๋กœ ์ถœ๋ ฅ ์ƒํ•œ(maxTokens)์„ ๊ณ„", "imports": [] }, @@ -2536,6 +2831,13 @@ "src/config" ] }, + "src/lib/execUtil.ts": { + "mtimeMs": 1783907905795.6836, + "size": 4428, + "lines": 104, + "role": "", + "imports": [] + }, "src/lib/formatter.ts": { "mtimeMs": 1779764602649.5906, "size": 4772, @@ -2545,6 +2847,13 @@ "src/lib/engine" ] }, + "src/lib/kstSchedule.ts": { + "mtimeMs": 1783907905795.6836, + "size": 1955, + "lines": 40, + "role": "[์ฝ”์–ด ์ˆ˜๋ ด] KST(Asia/Seoul) ์Šค์ผ€์ค„ ๊ณต์šฉ ์œ ํ‹ธ. ๋ฐฐ๊ฒฝ(2026-07-11 ์•„ํ‚คํ…์ฒ˜ ๊ฐ์‚ฌ): stocksWatcherยทdailyBriefingยทsleepDigestยท growthCycleWatcher ๋„ค ์›Œ์ฒ˜๊ฐ€ ๊ฐ๊ฐ nowInKst()/HH:MM ํŒŒ์‹ฑ์„ ๋ณต์ œํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. \"๋‹ค์Œ ๋ฐœ์‚ฌ๊นŒ์ง€ ms\" ๊ณ„์‚ฐ์€ ์ •์ฑ…์ด ์ œ๊ฐ๊ฐ(๋ณต์ˆ˜ ์‹œ๊ฐ/ํ‰์ผ๋งŒ/๋งค์ผ/์ฃผ๊ฐ„)", + "imports": [] + }, "src/lib/mtimeFileCache.ts": { "mtimeMs": 1780278539124.1875, "size": 2553, @@ -2567,10 +2876,10 @@ "imports": [] }, "src/lmstudio/client.ts": { - "mtimeMs": 1779764602650.5938, - "size": 11423, - "lines": 255, - "role": "", + "mtimeMs": 1783303470040.1814, + "size": 14371, + "lines": 305, + "role": "[๋ฉ”๋ชจ๋ฆฌยท๊ธฐ๋™ ๊ฐœ์„ ] SDK ๋ฅผ ํƒ€์ž… ์ „์šฉ์œผ๋กœ๋งŒ import โ€” ๊ฐ’ import ๋Š” ๋ฒˆ๋“ค ๋กœ๋“œ(=ํ™•์žฅ ํ™œ์„ฑํ™”) ์‹œ์ ์— SDK ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์‹ค์ œ ๋ชจ๋“ˆ ๋กœ๋“œ๋Š” getSdk() ์ฒซ ํ˜ธ์ถœ ๋•Œ require ๋กœ ์ง€์—ฐํ•œ๋‹ค (LM Studio ๋ฅผ ์•ˆ ์“ฐ๋Š” ์„ธ์…˜์—์„œ๋Š” SDK ๊ฐ€ ์•„์˜ˆ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Œ).", "imports": [ "src/utils" ] @@ -2588,9 +2897,9 @@ ] }, "src/lmstudio/streamer.ts": { - "mtimeMs": 1779764602652.6316, - "size": 13416, - "lines": 252, + "mtimeMs": 1781849993869.691, + "size": 16193, + "lines": 301, "role": "", "imports": [ "src/lmstudio/client", @@ -2699,14 +3008,24 @@ ] }, "src/retrieval/brainIndex.ts": { - "mtimeMs": 1781171738808.4268, - "size": 23847, - "lines": 566, + "mtimeMs": 1784514647788.2046, + "size": 28354, + "lines": 645, "role": "Brain Index โ€” persistent, mtime-keyed tokenized cache of the Second Brain RAG ๊ฒ€์ƒ‰์€ ๋งค ์งˆ์˜๋งˆ๋‹ค ๋ธŒ๋ ˆ์ธ์˜ ๋ชจ๋“  .md ํŒŒ์ผ์„ ์ฝ๊ณ  ํ† ํฌ๋‚˜์ด์ฆˆํ•ด์„œ TF-IDF ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /.astra/brain-index.json ์—", "imports": [ "src/retrieval/scoring", "src/retrieval/lessonHelpers", "src/retrieval/chunker", + "src/utils", + "src/retrieval/brainWatch" + ] + }, + "src/retrieval/brainWatch.ts": { + "mtimeMs": 1784510698674.246, + "size": 6572, + "lines": 140, + "role": "Brain Watch โ€” ์ œ2๋‡Œ ํŒŒ์ผ์‹œ์Šคํ…œ ์›Œ์ฒ˜ + ์ƒ์ฃผ ํŒŒ์ผ ๋ชฉ๋ก ์บ์‹œ (v2.2.311) ๋ฌธ์ œ: ๊ฒ€์ƒ‰์€ ์ด๋ฏธ mtime ํ‚ค ํ† ํฐ ์ธ๋ฑ์Šค(brain-index.json)๋กœ ํŒŒ์ผ ๋‚ด์šฉ ์žฌํŒŒ์‹ฑ์„ ํ”ผํ•˜์ง€๋งŒ, ๋งค ์งˆ์˜๋งˆ๋‹ค (a) ์ „์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ ์žฌ๊ท€ ์›Œํฌ(์ˆ˜์ฒœ ํŒŒ์ผ)์™€ (b) ํŒŒ์ผ๋ณ„ fs.statSync ์ˆ˜์ฒœ ํšŒ๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ–ˆ๋‹ค โ€” ์ธ๋ฑ์Šค๊ฐ€ ์‹ ์„ ํ•œ์ง€ ํ™•์ธํ•  ๋ฐฉ๋ฒ•์ด", + "imports": [ "src/utils" ] }, @@ -2737,12 +3056,13 @@ ] }, "src/retrieval/contextBudget.ts": { - "mtimeMs": 1780654426656.6118, - "size": 6442, - "lines": 156, + "mtimeMs": 1783907905805.3337, + "size": 6162, + "lines": 146, "role": "Context Budget Manager (์ปจํ…์ŠคํŠธ ์˜ˆ์‚ฐ ๊ด€๋ฆฌ) ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ ํ† ํฐ ์˜ˆ์‚ฐ์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋กœ์ปฌ ๋ชจ๋ธ์˜ context window๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.", "imports": [ - "src/retrieval/types" + "src/retrieval/types", + "src/lib/contextManager" ] }, "src/retrieval/coveBlock.ts": { @@ -2754,6 +3074,16 @@ "src/retrieval/types" ] }, + "src/retrieval/domainRouter.ts": { + "mtimeMs": 1783907905806.3352, + "size": 9761, + "lines": 163, + "role": "", + "imports": [ + "src/config", + "src/utils" + ] + }, "src/retrieval/embeddings.ts": { "mtimeMs": 1781171386826.0757, "size": 8182, @@ -2780,13 +3110,14 @@ ] }, "src/retrieval/index.ts": { - "mtimeMs": 1781171760925.9387, - "size": 37706, - "lines": 765, + "mtimeMs": 1784510840914.2502, + "size": 39296, + "lines": 803, "role": "RetrievalOrchestrator โ€” Unified RAG Pipeline Astra์˜ ๋ชจ๋“  ๊ฒ€์ƒ‰ ์†Œ์Šค๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ํ๋ฆ„: โ‘  Query Planning โ€” ์˜๋„ ๋ถ„๋ฅ˜ + ๊ฒ€์ƒ‰ ์ „๋žต ๊ฒฐ์ • โ‘ก Parallel Search โ€” Brain + Memory + Project + Episode ๋™์‹œ ๊ฒ€์ƒ‰ โ‘ข Result Fusio", "imports": [ "src/config", "src/utils", + "src/retrieval/brainWatch", "src/lib/paths", "src/memory", "src/retrieval/types", @@ -2833,12 +3164,13 @@ "imports": [] }, "src/retrieval/semanticRerank.ts": { - "mtimeMs": 1780030762153.9978, - "size": 8205, - "lines": 213, + "mtimeMs": 1783907905828.9187, + "size": 7217, + "lines": 183, "role": "LLM Semantic Re-ranking โ€” TF-IDF / ์ž„๋ฒ ๋”ฉ์ด ๋†“์น˜๋Š” ์˜๋„ ๋งค์น˜๋ฅผ ์ž‘์€ LLM ํ˜ธ์ถœ ํ•œ ๋ฒˆ์œผ๋กœ ์žก๋Š”๋‹ค. ๋™์ž‘: 1. 1์ฐจ ๊ฒ€์ƒ‰(TF-IDF + embedding + ๋ถ€์ŠคํŠธ๋“ค) ๊ฒฐ๊ณผ์˜ ์ƒ์œ„ K (๊ธฐ๋ณธ 15) ํ›„๋ณด๋ฅผ ์ถ”์ถœ 2. ๊ฐ€๋ฒผ์šด ํ”„๋กฌํ”„ํŠธ๋กœ LLM ์—๊ฒŒ \"์ด ์ค‘ query ์˜๋„์— ๊ฐ€์žฅ ๋ถ€ํ•ฉํ•˜๋Š” ์ˆœ์„œ๋กœ ID ๋‚˜์—ด\" ์š”์ฒญ 3. LLM ", "imports": [ - "src/retrieval/types" + "src/retrieval/types", + "src/core/services" ] }, "src/retrieval/terminologyBlock.ts": { @@ -2985,18 +3317,18 @@ ] }, "src/sidebar/builders/companyTurnEmitter.ts": { - "mtimeMs": 1779764602662.786, - "size": 2539, - "lines": 54, + "mtimeMs": 1783303470056.3555, + "size": 2250, + "lines": 50, "role": "", "imports": [ "src/features/company" ] }, "src/sidebar/builders/dispatcherDepsBuilder.ts": { - "mtimeMs": 1781491584069.7515, - "size": 3895, - "lines": 74, + "mtimeMs": 1783907905837.3777, + "size": 4181, + "lines": 77, "role": "", "imports": [ "src/features/company", @@ -3068,9 +3400,9 @@ ] }, "src/sidebar/chatHandlers.ts": { - "mtimeMs": 1779764602667.872, - "size": 26431, - "lines": 451, + "mtimeMs": 1783303470067.838, + "size": 25820, + "lines": 443, "role": "", "imports": [ "src/sidebarProvider", @@ -3093,9 +3425,9 @@ ] }, "src/sidebar/companyHandlers.ts": { - "mtimeMs": 1779764602669.881, - "size": 18453, - "lines": 347, + "mtimeMs": 1783303470077.1797, + "size": 17946, + "lines": 338, "role": "", "imports": [ "src/sidebarProvider", @@ -3169,35 +3501,6 @@ "src/sidebarProvider" ] }, - "src/sidebar/managers/pixelOfficeHelpers.ts": { - "mtimeMs": 1779764602675.0503, - "size": 6355, - "lines": 156, - "role": "", - "imports": [ - "src/features/company", - "src/features/astraOffice" - ] - }, - "src/sidebar/managers/pixelOfficeLayoutStore.ts": { - "mtimeMs": 1779764602675.0503, - "size": 1709, - "lines": 37, - "role": "", - "imports": [ - "src/features/astraOffice" - ] - }, - "src/sidebar/managers/pixelOfficeState.ts": { - "mtimeMs": 1779764602676.0718, - "size": 3571, - "lines": 77, - "role": "", - "imports": [ - "src/features/company", - "src/features/astraOffice" - ] - }, "src/sidebar/managers/sessionStateStore.ts": { "mtimeMs": 1779764602676.0718, "size": 2914, @@ -3217,9 +3520,9 @@ ] }, "src/sidebarProvider.ts": { - "mtimeMs": 1781491584072.7815, - "size": 171258, - "lines": 3468, + "mtimeMs": 1783907905839.3892, + "size": 144400, + "lines": 2992, "role": "", "imports": [ "src/utils", @@ -3234,15 +3537,13 @@ "src/sidebar/brainHandlers", "src/sidebar/chronicleHandlers", "src/sidebar/agentHandlers", + "src/features/datacollect/bridgeLauncher", "src/sidebar/registry", "src/sidebar/managers/approvalGates", "src/sidebar/managers/architectureWatch", "src/sidebar/managers/companyTurn", - "src/sidebar/managers/pixelOfficeState", - "src/sidebar/managers/pixelOfficeHelpers", "src/sidebar/managers/chatSessionStore", "src/sidebar/managers/modelDiscovery", - "src/sidebar/managers/pixelOfficeLayoutStore", "src/sidebar/builders/statusPayloads", "src/sidebar/builders/companyPayloads", "src/sidebar/builders/textHelpers", @@ -3273,8 +3574,7 @@ "src/features/projectArchitecture/intentDetector", "src/features/company", "src/core/services", - "src/core/health", - "src/features/astraOffice" + "src/core/health" ] }, "src/skills/agentKnowledgeMap.ts": { @@ -3335,11 +3635,12 @@ "imports": [] }, "src/utils.ts": { - "mtimeMs": 1781491584073.7837, - "size": 28645, - "lines": 485, + "mtimeMs": 1784510387021.152, + "size": 31846, + "lines": 538, "role": "", "imports": [ + "src/lib/contextBuilders/toneGuard", "src/config", "src/features/selfReflector/selfReflectorPrompt" ] @@ -3352,37 +3653,37 @@ "imports": [] }, "media/settings-panel.html": { - "mtimeMs": 1780882658555.451, - "size": 26332, - "lines": 440, + "mtimeMs": 1783907905531.913, + "size": 33805, + "lines": 541, "role": "Astra Settings", "imports": [] }, "media/settings-panel.js": { - "mtimeMs": 1780881704898.5125, - "size": 24963, - "lines": 505, + "mtimeMs": 1783303469916.4678, + "size": 29080, + "lines": 577, "role": "", "imports": [] }, "media/sidebar.css": { - "mtimeMs": 1781491584030.2747, - "size": 92327, - "lines": 2132, + "mtimeMs": 1782990524722.6748, + "size": 80014, + "lines": 1957, "role": "Stylesheet", "imports": [] }, "media/sidebar.html": { - "mtimeMs": 1779764602576.522, - "size": 35100, - "lines": 539, + "mtimeMs": 1783303469917.4712, + "size": 31988, + "lines": 486, "role": "Astra", "imports": [] }, "media/sidebar.js": { - "mtimeMs": 1781491584032.3035, - "size": 235630, - "lines": 3966, + "mtimeMs": 1783303469919.522, + "size": 225448, + "lines": 3767, "role": "", "imports": [] }, @@ -3417,6 +3718,25 @@ "src/features/approval/approvalQueue" ] }, + "tests/benchmarkModes.test.ts": { + "mtimeMs": 1783907905841.424, + "size": 4386, + "lines": 77, + "role": "", + "imports": [ + "src/features/datacollect/prompts/synthesisPrompt", + "src/features/datacollect/handlers" + ] + }, + "tests/brainCache.test.ts": { + "mtimeMs": 1784514661036.7358, + "size": 4442, + "lines": 98, + "role": "[v2.2.311] ์ œ2๋‡Œ ์ƒ์ฃผ ์บ์‹œ ๊ณ„์ธต โ€” ์›Œ์ฒ˜ ์„ธ๋Œ€ ๊ธฐ๋ฐ˜ stat ์ƒ๋žต + ํŒŒ์ผ ๋ชฉ๋ก ์บ์‹œ. ํ•ต์‹ฌ ๊ณ„์•ฝ: 1. ์›Œ์ฒ˜ ์„ธ๋Œ€๊ฐ€ ๊ทธ๋Œ€๋กœ๋ฉด getBrainTokenIndex ๋Š” ํŒŒ์ผ๋ณ„ statSync ๋ฅผ ์ƒ๋žตํ•œ๋‹ค. 2. ์„ธ๋Œ€๊ฐ€ ๋ฐ”๋€Œ๋ฉด(ํŒŒ์ผ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ) ๋‹ค์‹œ stat ์„ ๊ฑฐ์ณ ๋ณ€๊ฒฝ๋ถ„์„ ์žฌ์ƒ‰์ธํ•œ๋‹ค. 3. ๋ถ€๋ถ„(์Šค์ฝ”ํ”„) ๋ชฉ๋ก์œผ๋กœ ๊ฒ€์ฆ๋œ ์ƒํƒœ์—์„œ ์ „์ฒด ๋ชฉ๋ก ์งˆ์˜๊ฐ€ ", + "imports": [ + "src/retrieval/brainIndex" + ] + }, "tests/brainIndex.test.ts": { "mtimeMs": 1778664139970.806, "size": 5513, @@ -3426,6 +3746,35 @@ "src/retrieval/brainIndex" ] }, + "tests/bridgeLauncher.test.ts": { + "mtimeMs": 1783303470100.9182, + "size": 2711, + "lines": 59, + "role": "bridgeLauncher โ€” NotebookLM ๋กœ์ปฌ ๋ฐฑ์—”๋“œ ์›ํด๋ฆญ ์‹คํ–‰/์ข…๋ฃŒ์˜ ์ˆœ์ˆ˜ ๋กœ์ง ๊ฒ€์ฆ. (ํ„ฐ๋ฏธ๋„ ์ƒ์„ฑยทํ”„๋กœ์„ธ์Šค kill ๊ฐ™์€ ๋ถ€์ˆ˜ํšจ๊ณผ๋Š” VS Code/OS ์˜์กด์ด๋ผ ์—ฌ๊ธฐ์„  ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ.)", + "imports": [ + "src/features/datacollect/bridgeLauncher" + ] + }, + "tests/buySignalWatch.test.ts": { + "mtimeMs": 1782991594594.8955, + "size": 3799, + "lines": 80, + "role": "v2.2.268 โ€” ๋ฐœ๊ตด ์ž๋™ ํŽธ์ž… + ๋งค์ˆ˜ ์‹œ๊ทธ๋„ ์ง„์ž… ์•Œ๋ฆผ. - computeRecommendedBuy: 224์ผ์„  ๊ธฐ๋ฐ˜ ๋งค์ˆ˜๊ถŒ์žฅ๊ฐ€ ์ž๋™ ์‚ฐ์ถœ ๊ทœ์น™ - detectBuyZoneEntries: ๊ด€๋ง/๊ณ ํ‰๊ฐ€ โ†’ ๋งค์ˆ˜์‚ฌ์ •๊ถŒ ์ „์ด ๊ฐ์ง€ + ์ค‘๋ณต ์•Œ๋ฆผ ๋ฐฉ์ง€", + "imports": [ + "src/features/stocks/stockDiscovery", + "src/features/stocks/signalClassifier", + "src/features/stocks/types" + ] + }, + "tests/calculateAction.test.ts": { + "mtimeMs": 1783303470100.9182, + "size": 3760, + "lines": 77, + "role": " ์•ก์…˜ โ€” ์ˆ˜ํ•™ยท์ˆ˜์น˜ ๊ณ„์‚ฐ์˜ Python ์œ„์ž„ ๊ฒ€์ฆ. ์†Œํ˜• ๋ชจ๋ธ ์ถ”๋ก  ๊ฐ•ํ™” ์ „๋žต์˜ 1์ถ•: \"๋ชจ๋ธ์€ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋งŒ, ๊ณ„์‚ฐ์€ ๋„๊ตฌ๊ฐ€\". ์‹คํ–‰ ๊ฒฐ๊ณผ/์—๋Ÿฌ๊ฐ€ chatHistory ์— internal system ๋ฉ”์‹œ์ง€๋กœ ์žฌ์ฃผ์ž…๋˜์–ด agent ์˜ ์ž๋™ ํ›„์† ํ„ด(์ž๊ฐ€์ˆ˜์ • ๋ฃจํ”„)์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ณ„์•ฝ์„ ๊ฒ€์ฆํ•œ๋‹ค.", + "imports": [ + "src/agent/actions/calculate" + ] + }, "tests/calendarApi.test.ts": { "mtimeMs": 1779065453894.5227, "size": 5234, @@ -3436,6 +3785,35 @@ "src/agent" ] }, + "tests/claudeCodeProvider.test.ts": { + "mtimeMs": 1783907905841.424, + "size": 3847, + "lines": 73, + "role": "", + "imports": [ + "src/features/providers/claudeCode", + "src/features/providers/types" + ] + }, + "tests/compositeScore.test.ts": { + "mtimeMs": 1782985309397.3916, + "size": 6070, + "lines": 131, + "role": "๋ฉ€ํ‹ฐํŒฉํ„ฐ ํ•ฉ์„ฑ์ ์ˆ˜ (v2.2.266) โ€” ๋ฐฑ๋ถ„์œ„ ๋žญํฌยท์ถ• ํ•ฉ์„ฑยทvalue trap ๊ฐ€๋“œยท๊ฒฐ์ธก ์ฒ˜๋ฆฌ.", + "imports": [ + "src/features/stocks/compositeScore" + ] + }, + "tests/computeBudgetedRequest.test.ts": { + "mtimeMs": 1784512466208.8608, + "size": 7291, + "lines": 147, + "role": "Phase 1 โ€” context-window alignment. The budgeter must clamp to the model's ACTUALLY-loaded window when it's smaller than the user's contextLength setting, so a model loaded with a smaller window than ", + "imports": [ + "src/agent/handlePrompt/computeBudgetedRequest", + "src/agent" + ] + }, "tests/confidenceEngine.test.ts": { "mtimeMs": 1781142599349.454, "size": 7643, @@ -3460,9 +3838,9 @@ ] }, "tests/contextManager.test.ts": { - "mtimeMs": 1779764602681.109, - "size": 7904, - "lines": 149, + "mtimeMs": 1781750094293.5898, + "size": 8739, + "lines": 166, "role": "", "imports": [ "src/lib/contextManager" @@ -3508,6 +3886,37 @@ "src/features/devilAgent/devilPrompt" ] }, + "tests/domainRouter.test.ts": { + "mtimeMs": 1783907905842.4282, + "size": 4261, + "lines": 81, + "role": "๋‹จ๊ณ„๋ณ„ ์ง€์‹ ์Šค์ฝ”ํ”„ ๋ผ์šฐํ„ฐ โ€” ๋„๋ฉ”์ธ ๋ถ„๋ฅ˜(ํœด๋ฆฌ์Šคํ‹ฑ)์™€ ํด๋” ์กฐํ•ฉ ๊ทœ์น™ ๊ฒ€์ฆ. ์†Œํ˜• ๋ชจ๋ธ ์ •๋ฐ€ ๊ฒ€์ƒ‰์˜ ํ•ต์‹ฌ ๊ณ„์•ฝ: ํ™•์‹  ์—†์œผ๋ฉด 'general'(์ „์ฒด ๋‘๋‡Œ)๋กœ ๋ณด์ˆ˜์  ํด๋ฐฑ.", + "imports": [ + "src/retrieval/domainRouter" + ] + }, + "tests/emailCommand.test.ts": { + "mtimeMs": 1783070268777.1526, + "size": 14593, + "lines": 282, + "role": "v2.2.269 โ€” /email (Gmail + Outlook) ์ˆœ์ˆ˜ ๋กœ์ง ํ…Œ์ŠคํŠธ. COM/๋„คํŠธ์›Œํฌ๋Š” ํ†ตํ•ฉ ์˜์—ญ์ด๋ผ ์ œ์™ธ โ€” ์ฐธ์กฐ ํŒŒ์‹ฑยทํ”„๋กฌํ”„ํŠธยทํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ ์ปท๋งŒ ๊ณ ์ •.", + "imports": [ + "src/features/email/handlers", + "src/features/email/emailPrompts", + "src/features/email/emailBrief", + "src/features/datacollect/prompts/wikifyPrompt" + ] + }, + "tests/emailState.test.ts": { + "mtimeMs": 1783070250484.7273, + "size": 6032, + "lines": 121, + "role": "v2.2.271 โ€” ์ด๋ฉ”์ผ ์˜์† ์ƒํƒœ ๋จธ์‹  (syncThreads / detectOverdue / setThreadState). \"๋ช…๋ น ์•ˆ ์ณ๋„ f/u ๋˜๋Š”\" ํ•ต์‹ฌ ๋กœ์ง: ์ฐฝ ๋ฐ– ๋ฏธํšŒ์‹  ๋ณด์กด, done ์ž๋™ ์žฌ๊ฐœ, ์•Œ๋ฆผ ์ค‘๋ณต ์ฐจ๋‹จ.", + "imports": [ + "src/features/email/emailState", + "src/features/email/emailBrief" + ] + }, "tests/featureInventory.test.ts": { "mtimeMs": 1781232120081.0696, "size": 2613, @@ -3527,6 +3936,17 @@ "src/utils" ] }, + "tests/handoffDoc.test.ts": { + "mtimeMs": 1783907905842.4282, + "size": 4471, + "lines": 85, + "role": "", + "imports": [ + "src/features/datacollect/prompts/handoffDoc", + "src/features/claude/claudeLauncher", + "src/features/datacollect/handlers" + ] + }, "tests/hangulHygiene.test.ts": { "mtimeMs": 1781239721715.7893, "size": 2573, @@ -3573,6 +3993,15 @@ "src/utils" ] }, + "tests/investigationPipeline.test.ts": { + "mtimeMs": 1784518245844.1465, + "size": 9847, + "lines": 193, + "role": "Investigation Pipeline โ€” ํŒŒ์ผ๋ช…๋งŒ ๋ณด๊ณ  ์ƒ์ƒํ•˜๋Š” ํ—›์กฐ์‚ฌ ์ฐจ๋‹จ 3์ค‘ ๋ฐฉ์–ด. (v2.2.309) โ‘  ์กฐ์‚ฌํ˜• ์š”์ฒญ ๊ฐ์ง€ + ์ฆ๊ฑฐ ๊ฒŒ์ดํŠธ โ‘ก ๊ฐ•์ œ ์ •๋… Map + ํ•ด์‹œ ์บ์‹œ โ‘ข Hollow ๊ฐ์ง€", + "imports": [ + "src/intelligence/investigationPipeline" + ] + }, "tests/knowledgeOps.test.ts": { "mtimeMs": 1781147477013.794, "size": 8035, @@ -3586,6 +4015,25 @@ "src/intelligence/orgMemoryBlock" ] }, + "tests/largeInputMapReduce.test.ts": { + "mtimeMs": 1781859199266.967, + "size": 5692, + "lines": 159, + "role": "Phase 2 โ€” large-input map-reduce core. Pure orchestration with an injected callLLM, so no network / SDK is touched.", + "imports": [ + "src/agent/handlePrompt/largeInputMapReduce", + "src/agent" + ] + }, + "tests/layoutSkeleton.test.ts": { + "mtimeMs": 1783907905843.555, + "size": 3698, + "lines": 82, + "role": "", + "imports": [ + "src/features/datacollect/prompts/layoutSkeleton" + ] + }, "tests/lessonHelpers.test.ts": { "mtimeMs": 1778664139972.9592, "size": 9591, @@ -3606,10 +4054,20 @@ "src/retrieval/scoring" ] }, + "tests/liveReasoningFilter.test.ts": { + "mtimeMs": 1784020067983.2505, + "size": 6485, + "lines": 136, + "role": "", + "imports": [ + "src/lib/contextBuilders/liveReasoningFilter", + "src/lib/contextBuilders/outputSanitization" + ] + }, "tests/lmStudioLifecycle.test.ts": { - "mtimeMs": 1780971798141.8428, - "size": 12218, - "lines": 330, + "mtimeMs": 1781850184023.6704, + "size": 12337, + "lines": 334, "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", @@ -3618,9 +4076,9 @@ ] }, "tests/lmStudioStreamer.test.ts": { - "mtimeMs": 1779764602685.173, - "size": 9010, - "lines": 222, + "mtimeMs": 1781857400907.7202, + "size": 12802, + "lines": 295, "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", @@ -3646,13 +4104,33 @@ "src/lib/contextBuilders/multiAgentRouting" ] }, + "tests/meetPrompt.test.ts": { + "mtimeMs": 1782114707092.5818, + "size": 3643, + "lines": 75, + "role": "Regression guard for the /meet prompt policy (v2.2.258). After a real meeting record review, the policy shifted to: 1) STT speaker numbers (\"์ฐธ์„์ž N\") must NEVER appear in output โ€” speakers are normaliz", + "imports": [ + "src/features/datacollect/prompts/meetPrompt" + ] + }, "tests/meetRegistration.test.ts": { - "mtimeMs": 1781162418444.7136, - "size": 5116, - "lines": 110, + "mtimeMs": 1782980521369.3323, + "size": 11673, + "lines": 232, "role": "/meet ํ™•์‹  ๊ฒŒ์ดํŠธ โ€” ๋ถ„๋ฅ˜ยทconfirm ํŒŒ์‹ฑยท๋‚ ์งœ ์ •๊ทœํ™” ํ…Œ์ŠคํŠธ. ์ •์ฑ…: ํ™•์ •+๊ธฐํ•œ๋งŒ ์ž๋™, ์ง„ํ–‰๋ฏธ์ •/๊ธฐํ•œ๋ฏธ์ •/์กฐ๊ฑด๋ถ€๋Š” ๋ณด๋ฅ˜, ๋ฐ˜๋ณต์€ ์ฒซ 1ํšŒ, ๊ณผ๊ฑฐ ๋‚ ์งœ๋Š” ๋“ฑ๋กํ•˜๋˜ ์™„๋ฃŒํ™•์ธ ํ‘œ๊ธฐ, ๊ธฐํ•œ ํ•ด์„ ๋ถˆ๊ฐ€ ํ™•์ •๊ฑด์€ ๋ณด๋ฅ˜(์ถ”์ธก ๋“ฑ๋ก ๊ธˆ์ง€).", "imports": [ - "src/features/datacollect/scheduling/meetRegistration" + "src/features/datacollect/scheduling/meetRegistration", + "src/features/datacollect/scheduling/calendarHelpers", + "src/features/datacollect/llm" + ] + }, + "tests/messageFormat.test.ts": { + "mtimeMs": 1783047877232.4934, + "size": 2488, + "lines": 56, + "role": "v2.2.284 โ€” ํ…”๋ ˆ๊ทธ๋žจ ์ค‘์•™ ํฌ๋งท (renderTelegram / parseTimesCsv). ์œ„ํ‚ค ํฌ๋งท์ฒ˜๋Ÿผ ๋ฉ”์‹œ์ง€ ํฌ๋งท๋„ ๋‹จ์ผ ๋ชจ๋“ˆ โ€” ๋ชจ๋“  ๋ฐœ์‹  ๋นŒ๋”๊ฐ€ ์ด ๊ทœ์•ฝ์„ ๊ณต์œ ํ•œ๋‹ค.", + "imports": [ + "src/integrations/telegram/messageFormat" ] }, "tests/mocks/vscode.js": { @@ -3674,17 +4152,6 @@ "src/intelligence/reflectionStore" ] }, - "tests/officeSchema.test.ts": { - "mtimeMs": 1779065453896.7021, - "size": 10125, - "lines": 241, - "role": "", - "imports": [ - "src/features/astraOffice/schema", - "src/features/astraOffice/view/layoutSchema", - "src/features/astraOffice/presenter" - ] - }, "tests/paths.test.ts": { "mtimeMs": 1778549008931.3582, "size": 2674, @@ -3730,6 +4197,16 @@ "src/scaffolder/projectScaffolder" ] }, + "tests/promptSplit.test.ts": { + "mtimeMs": 1784512099524.3313, + "size": 2832, + "lines": 60, + "role": "[v2.2.311] KV ์บ์‹œ ์นœํ™” ํ”„๋กฌํ”„ํŠธ ๋ถ„๋ฆฌ โ€” ์ •์ /๋™์  ๊ฒฝ๊ณ„ ๊ณ„์•ฝ. ์ •์  ํ”„๋กฌํ”„ํŠธ(getStaticSystemPrompt)์— ๋ถ„ ๋‹จ์œ„ ์‹œ๊ฐ ๊ฐ™์€ ๊ฐ€๋ณ€ ์š”์†Œ๊ฐ€ ์„ž์ด๋Š” ์ˆœ๊ฐ„ llama.cpp prompt cache ๋Š” ์š”์ฒญ ์ฒซ ํ† ํฐ๋ถ€ํ„ฐ ๋ฌดํšจํ™”๋œ๋‹ค (์‹ค์ธก: 13k ํ† ํฐ ์ „์ฒด ์žฌํ”„๋ฆฌํ•„ โ‰ˆ 90์ดˆ/ํ„ด). ์ด ํ…Œ์ŠคํŠธ๋Š” ๊ทธ ํšŒ๊ท€๋ฅผ ๋ง‰๋Š” ๊ฐ€๋“œ๋ ˆ์ผ์ด๋‹ค.", + "imports": [ + "src/utils", + "src/agent/handlePrompt/buildAstraModeSystemPrompt" + ] + }, "tests/providers.test.ts": { "mtimeMs": 1779065453898.3752, "size": 4215, @@ -3740,10 +4217,20 @@ "src/features/providers/streamHelpers" ] }, + "tests/reportQa.test.ts": { + "mtimeMs": 1783907905844.559, + "size": 6419, + "lines": 115, + "role": "", + "imports": [ + "src/agents/reportQa", + "src/core/services" + ] + }, "tests/requirementGraph.test.ts": { - "mtimeMs": 1781140474254.644, - "size": 5535, - "lines": 126, + "mtimeMs": 1784518137093.2422, + "size": 6828, + "lines": 146, "role": "Requirement Graph (Self-Evolving OS Phase 1 / Track 2-1) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ ๊ฒ€์ฆ โ€” vscode ์˜์กด ์—†์Œ.", "imports": [ "src/intelligence/requirementGraph" @@ -3814,6 +4301,25 @@ "src/retrieval/embeddings" ] }, + "tests/reviewFiles.test.ts": { + "mtimeMs": 1781772012554.227, + "size": 1784, + "lines": 39, + "role": "/review ์†Œ์Šค ํŒŒ์ผ ์ˆ˜์ง‘ ํŒ์ •(shouldReviewFile) ํ…Œ์ŠคํŠธ โ€” ๋””๋ ‰ํ„ฐ๋ฆฌ ์Šคํ‚ตยทํ™•์žฅ์ž ํ•„ํ„ฐยท์ƒ์„ฑ๋ฌผ ์ œ์™ธ์˜ ๊ฒฐ์ •์  ๋™์ž‘์„ ๊ณ ์ •ํ•œ๋‹ค.", + "imports": [ + "src/features/datacollect/reviewFiles" + ] + }, + "tests/runCodeAction.test.ts": { + "mtimeMs": 1783303470102.9253, + "size": 4323, + "lines": 87, + "role": " ์•ก์…˜ โ€” ์ฝ”๋”ฉ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„(\"์ƒ์„ฑโ†’์‹คํ–‰โ†’์—๋Ÿฌ ํ™•์ธโ†’์ˆ˜์ •\")์˜ ์‹คํ–‰ ์ถ• ๊ฒ€์ฆ. stdout/stderr/์ข…๋ฃŒ์ฝ”๋“œ๊ฐ€ internal system ๋ฉ”์‹œ์ง€๋กœ ์žฌ์ฃผ์ž…๋˜์–ด ์ž๋™ ํ›„์† ํ„ด์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ณ„์•ฝ + ์ƒŒ๋“œ๋ฐ•์Šค(์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฐ– ์ฐจ๋‹จ)ยทํ™•์žฅ์ž ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ.", + "imports": [ + "src/agent/actions/runCode", + "src/features/selfReflector/selfReflectorExecution" + ] + }, "tests/scoring.test.ts": { "mtimeMs": 1778043314856.5872, "size": 6189, @@ -3883,16 +4389,52 @@ "src/features/growth/sleepDigest" ] }, + "tests/standingRules.test.ts": { + "mtimeMs": 1783998325550.8562, + "size": 7566, + "lines": 151, + "role": "Standing Rules (Correction Loop โ‘ฃ) โ€” ํ–‰๋™/์Šคํƒ€์ผ ๊ต์ •์˜ ์„ธ์…˜ ์˜์†ํ™”. (v2.2.308) ๋ฐฐ๊ฒฝ: self-reflection ์ด ์ปจํ…์ŠคํŠธ ์ฐฝ(๋‹จ๊ธฐ ๊ธฐ์–ต)์— ๊ฐ‡ํ˜€ ์ƒˆ ์„ธ์…˜์—์„œ ์ฆ๋ฐœํ•˜๋Š” ๋ฌธ์ œ. ํ–‰๋™ ์ง€์  โ†’ ๋ช…๋ นํ˜• ๊ทœ์น™ ํŒŒ์ผ ์˜์†ํ™” โ†’ ๋งค ํ„ด ์ฃผ์ž…์œผ๋กœ ๊ตฌ์กฐ์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.", + "imports": [ + "src/intelligence/correctionLoop" + ] + }, "tests/stocksCriteria.test.ts": { - "mtimeMs": 1781086406001.8665, - "size": 7191, - "lines": 129, + "mtimeMs": 1782808065196.9604, + "size": 9540, + "lines": 169, "role": "criteriaEval โ€” /stocks judge ๊ฒฐ์ •๋ก  ํ‰๊ฐ€๊ธฐ ํ…Œ์ŠคํŠธ. ํ”ฝ์Šค์ฒ˜๋Š” ์˜› LLM ํ”„๋กฌํ”„ํŠธ์— ๋ช…์‹œ๋ผ ์žˆ๋˜ ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ ๋ถ„๋ฅ˜ ์˜ˆ์‹œ 3์ข… (๋งˆ๋…€๊ณต์žฅ/๊ธฐ๊ฐ€๋น„์Šค/์—”์ผ) โ€” ์ฝ”๋“œ ํŒ์ •์ด ์‚ฌ์šฉ์ž ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.", "imports": [ "src/features/stocks/criteriaEval", "src/features/stocks/types" ] }, + "tests/stockSectors.test.ts": { + "mtimeMs": 1781498750479.192, + "size": 2439, + "lines": 51, + "role": "์„นํ„ฐ ๋ถ„๋ฅ˜ยทํ•ด์„ (๋„ค์ด๋ฒ„ ์—…์ข… ์ฝ”๋“œ ๊ธฐ๋ฐ˜) โ€” ์ˆœ์ˆ˜ ๋กœ์ง ํ…Œ์ŠคํŠธ.", + "imports": [ + "src/features/stocks/stockSectors" + ] + }, + "tests/stocksMarket.test.ts": { + "mtimeMs": 1782808086891.9287, + "size": 1928, + "lines": 47, + "role": "marketUtils โ€” ์‹œ์žฅ ํŒ๋ณ„ + ํ†ตํ™”/๊ธˆ์•ก ํฌ๋งคํŒ… ํ…Œ์ŠคํŠธ.", + "imports": [ + "src/features/stocks/marketUtils" + ] + }, + "tests/stripForDisplay.test.ts": { + "mtimeMs": 1784518266786.891, + "size": 1749, + "lines": 35, + "role": "[v2.2.312] ์ค‘๊ฐ„ ๋ผ์šด๋“œ ํ‘œ์‹œ์šฉ ์•ก์…˜ ํƒœ๊ทธ ์ œ๊ฑฐ โ€” \"## 4.๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ณด๊ณ ์„œ\" ๋ฒ„๊ทธ์˜ ํ‘œ์‹œ ๊ฒฝ๋กœ ํ—ฌํผ. ํƒœ๊ทธ๋Š” ๊ฑท์–ด๋‚ด๋˜ ๋ณธ๋ฌธ ์„น์…˜์€ ๋ณด์กดํ•ด์•ผ ํ•œ๋‹ค.", + "imports": [ + "src/agent/actions/stripForDisplay" + ] + }, "tests/systemPrompt.test.ts": { "mtimeMs": 1779764602687.5603, "size": 1487, @@ -3932,6 +4474,16 @@ "src/integrations/telegram/types" ] }, + "tests/toneGuard.test.ts": { + "mtimeMs": 1783907905844.559, + "size": 1251, + "lines": 27, + "role": "", + "imports": [ + "src/lib/contextBuilders/toneGuard", + "src/utils" + ] + }, "tests/transaction.test.ts": { "mtimeMs": 1777511752614.9685, "size": 2132, @@ -3970,6 +4522,25 @@ "src/features/web/webFetch" ] }, + "tests/wikiFormat.test.ts": { + "mtimeMs": 1783044027299.6238, + "size": 3405, + "lines": 64, + "role": "v2.2.278 โ€” ์œ„ํ‚ค ๋ฌธ์„œ ํฌ๋งท ํ†ต์ผ (๋ด‰ํˆฌ + ๊ณต์šฉ ๋นŒ๋”).", + "imports": [ + "src/features/datacollect/wikiFormat", + "src/features/datacollect/prompts/wikifyPrompt" + ] + }, + "tests/wikiSave.test.ts": { + "mtimeMs": 1783909149425.9817, + "size": 3823, + "lines": 86, + "role": "v2.2.273 โ€” ์ง€์‹ ๋ฌธ์„œ ๋กœ์ปฌ ์ €์žฅ (์ˆœ์ˆ˜ ๋กœ์ง: ํŒŒ์ผ๋ช… ์•ˆ์ „ํ™” + ์ €์žฅ ํด๋” ์šฐ์„ ์ˆœ์œ„).", + "imports": [ + "src/features/datacollect/wikiSave" + ] + }, "core_py/events.py": { "mtimeMs": 1778028987265.2336, "size": 2438, @@ -4274,8 +4845,8 @@ "imports": [] }, "docs/records/ConnectAI/chronicle.config.json": { - "mtimeMs": 1781491609540.5498, - "size": 427, + "mtimeMs": 1784521189700.969, + "size": 371, "lines": 11, "role": "JSON configuration", "imports": [] @@ -5127,6 +5698,27 @@ "role": "Discussion: ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์‹ค์€ ๊ฐ€์šฐ์‹œ์•ˆ ์Šคํ•„๋ฆฌํ„ฐ, ๊ทธ๋ฆฌ๊ณ  ์›”๋งˆํŠธ์—์„œ ์ด๋จธ์‹œ๋ธŒ ์Šคํ† ์–ด, ๊ทธ๋ฆฌ๊ณ  ai๋กœ ์˜์ƒ, ์‚ฌ์šด๋“œ ์ œ์ž‘ํŒ€์ด ์žˆ์–ด. ์ธ์›์€ 30๋ช…์ •๋„์•ผ. ์—ฌ๊ธฐ์—๋Š”...", "imports": [] }, + "docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md": { + "mtimeMs": 1784509596722.4983, + "size": 514, + "lines": 16, + "role": "Discussion: E:\\Wiki\\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md": { + "mtimeMs": 1784509560559.7527, + "size": 478, + "lines": 16, + "role": "Discussion: E:\\Wiki\\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜", + "imports": [] + }, + "docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md": { + "mtimeMs": 1784517524749.3547, + "size": 1455, + "lines": 16, + "role": "Discussion: E:\\Wiki\\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ๋ณด๊ณ ํ•ด์ค˜.", + "imports": [] + }, "docs/records/ConnectAI/planning/2026-05-02_project-chronicle-guard.md": { "mtimeMs": 1778028987339.2349, "size": 3004, @@ -5191,9 +5783,9 @@ "imports": [] }, "docs/records/ConnectAI/timeline.md": { - "mtimeMs": 1781249962707.1494, - "size": 26348, - "lines": 422, + "mtimeMs": 1784517524755.3872, + "size": 26819, + "lines": 431, "role": "Project Timeline", "imports": [] }, @@ -5224,6 +5816,16 @@ "lines": 44, "role": "UX/UI Consistency Guidelines", "imports": [] + }, + "docs/WIKI_DOC_PIPELINE.md": { + "mtimeMs": 1783044003020.7932, + "size": 3324, + "lines": 60, + "role": "์œ„ํ‚ค ๋ฌธ์„œ ํŒŒ์ดํ”„๋ผ์ธ โ€” ํฌ๋งท ํ†ต์ผ ๊ทœ์•ฝ (v2.2.278)", + "imports": [ + "datacollect/wikiFormat", + "datacollect/wikiSave" + ] } } } \ No newline at end of file diff --git a/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json b/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json index d44548b..56a59ef 100644 --- a/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json +++ b/.astra/tests/engine/.astra/cache/7fa9e2c0ed212d5dbde1172e996cde86955f34dda22a6e02b95c9adc0a456927.json @@ -1,5 +1,5 @@ { "result": "์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค.", - "createdAt": 1784020111869, + "createdAt": 1784521057661, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json b/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json index fbc0c9c..00b8d6e 100644 --- a/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json +++ b/.astra/tests/engine/.astra/cache/8c208151bed9108b665cd93e98fc10d377a9fef641dd359504b8d53aecd0a4c3.json @@ -1,5 +1,5 @@ { - "result": "---\nid: wiki_on\ndate: 2026-07-14T09:08:31.873Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## ๐Ÿ“Œ Brief Summary\n์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค.\n\n์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค.\n---\n## ๐Ÿ›ก๏ธ Reliability & Audit Summary\n> [!NOTE]\n> ์ด ๋ฌธ์„œ๋Š” ConnectAI์˜ **Intelligent Resilience** ์—”์ง„์— ์˜ํ•ด ๊ฒ€์ฆ ๋ฐ ์ •์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | โœ… Low |\n| **Fallbacks Used** | `0` | โœ… None |\n| **Auto Retries** | `0` | โœ… Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | โœ… Fast |\n\n### ๐Ÿ” Decision Audit Trail\n- **[DIRECT]** ๋‹ต๋ณ€ ์ž‘์„ฑ ์ค‘... (๋‹จ์ผ ํ˜ธ์ถœ fast-path) (18ms)\n", - "createdAt": 1784020111873, + "result": "---\nid: wiki_on\ndate: 2026-07-20T04:17:37.663Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## ๐Ÿ“Œ Brief Summary\n์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค.\n\n์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค.\n---\n## ๐Ÿ›ก๏ธ Reliability & Audit Summary\n> [!NOTE]\n> ์ด ๋ฌธ์„œ๋Š” ConnectAI์˜ **Intelligent Resilience** ์—”์ง„์— ์˜ํ•ด ๊ฒ€์ฆ ๋ฐ ์ •์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | โœ… Low |\n| **Fallbacks Used** | `0` | โœ… None |\n| **Auto Retries** | `0` | โœ… Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | โœ… Fast |\n\n### ๐Ÿ” Decision Audit Trail\n- **[DIRECT]** ๋‹ต๋ณ€ ์ž‘์„ฑ ์ค‘... (๋‹จ์ผ ํ˜ธ์ถœ fast-path) (18ms)\n", + "createdAt": 1784521057663, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/engine/.astra/missions/wiki_on.json b/.astra/tests/engine/.astra/missions/wiki_on.json index b50d13d..a0c1b15 100644 --- a/.astra/tests/engine/.astra/missions/wiki_on.json +++ b/.astra/tests/engine/.astra/missions/wiki_on.json @@ -1,8 +1,8 @@ { "missionId": "wiki_on", "status": "completed", - "startTime": "2026-07-14T09:08:31.847Z", - "totalElapsedMs": 27, + "startTime": "2026-07-20T04:17:37.641Z", + "totalElapsedMs": 24, "results": { "direct": "์ง๋‹ต ๊ฒฐ๊ณผ โ€” single-pass mock ์‘๋‹ต์ž…๋‹ˆ๋‹ค." }, @@ -14,14 +14,14 @@ "to": "direct", "durationMs": 18, "message": "๋‹ต๋ณ€ ์ž‘์„ฑ ์ค‘... (๋‹จ์ผ ํ˜ธ์ถœ fast-path)", - "ts": "2026-07-14T09:08:31.865Z" + "ts": "2026-07-20T04:17:37.659Z" }, { "from": "direct", "to": "completed", - "durationMs": 9, + "durationMs": 5, "message": "๋ฏธ์…˜ ์™„๋ฃŒ", - "ts": "2026-07-14T09:08:31.874Z" + "ts": "2026-07-20T04:17:37.664Z" } ], "resilienceMetrics": { diff --git a/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json b/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json index 2285c53..6f27ec7 100644 --- a/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json +++ b/.astra/tests/stress/.astra/cache/21818066876cbf8515758bc351bb3d9d44f32b0e4cd024b2e055db3a0d34417e.json @@ -1,5 +1,5 @@ { "result": "Final report with inconsistencies. This should be long enough to pass validation.", - "createdAt": 1784020117514, + "createdAt": 1784521065426, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json b/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json index 0b84f83..694f01f 100644 --- a/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json +++ b/.astra/tests/stress/.astra/cache/4fc755e372f1dd80d6bffc7b2ef973124fb64ba505f767c53a783833bbc3fa6a.json @@ -1,5 +1,5 @@ { "result": "Final report with inconsistencies. This should be long enough to pass validation.", - "createdAt": 1784020117513, + "createdAt": 1784521065425, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json b/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json index 24683a5..ed33d27 100644 --- a/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json +++ b/.astra/tests/stress/.astra/cache/6e559207c4542d959700ff14f360e6575e54853929e991e579e318f2f5a19030.json @@ -1,5 +1,5 @@ { "result": "[{\"heading\":\"๋ณธ๋ฌธ\",\"scope\":\"์ „์ฒด ๋‹ต๋ณ€\"}]", - "createdAt": 1784020117508, + "createdAt": 1784521065420, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json b/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json index e0c921c..d901206 100644 --- a/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json +++ b/.astra/tests/stress/.astra/cache/f65136cebc95448a7e93a45745cb73b3a5a01af5d82391ec29a25bd72b8239a5.json @@ -1,5 +1,5 @@ { "result": "[CONFLICT WARNING] ์„ฑ๋Šฅ์ด 200% ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. vs ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— 50% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋™์‹œ์— ๋ฐœ๊ฒฌ๋จ.", - "createdAt": 1784020117511, + "createdAt": 1784521065423, "modelVersion": "unknown" } \ No newline at end of file diff --git a/.astra/tests/stress/.astra/missions/stress_conflict_1784020117492.json b/.astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json similarity index 78% rename from .astra/tests/stress/.astra/missions/stress_conflict_1784020117492.json rename to .astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json index 8db9565..c7390a8 100644 --- a/.astra/tests/stress/.astra/missions/stress_conflict_1784020117492.json +++ b/.astra/tests/stress/.astra/missions/stress_conflict_1784521065403.json @@ -1,8 +1,8 @@ { - "missionId": "stress_conflict_1784020117492", + "missionId": "stress_conflict_1784521065403", "status": "completed", - "startTime": "2026-07-14T09:08:37.493Z", - "totalElapsedMs": 22, + "startTime": "2026-07-20T04:17:45.404Z", + "totalElapsedMs": 23, "results": { "outline": "[{\"heading\":\"๋ณธ๋ฌธ\",\"scope\":\"์ „์ฒด ๋‹ต๋ณ€\"}]", "section_0": "[CONFLICT WARNING] ์„ฑ๋Šฅ์ด 200% ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. vs ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— 50% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋™์‹œ์— ๋ฐœ๊ฒฌ๋จ.", @@ -14,30 +14,30 @@ { "from": "idle", "to": "outline", - "durationMs": 14, + "durationMs": 15, "message": "๋‹ต๋ณ€ ๊ตฌ์กฐ ์žก๋Š” ์ค‘...", - "ts": "2026-07-14T09:08:37.507Z" + "ts": "2026-07-20T04:17:45.419Z" }, { "from": "outline", "to": "section", "durationMs": 3, "message": "๋ณธ๋ฌธ ์ž‘์„ฑ ์ค‘...", - "ts": "2026-07-14T09:08:37.510Z" + "ts": "2026-07-20T04:17:45.422Z" }, { "from": "section", "to": "polish", "durationMs": 2, "message": "์ตœ์ข… ๋‹ค๋“ฌ๊ธฐ ์ค‘...", - "ts": "2026-07-14T09:08:37.512Z" + "ts": "2026-07-20T04:17:45.424Z" }, { "from": "polish", "to": "completed", "durationMs": 3, "message": "๋ฏธ์…˜ ์™„๋ฃŒ", - "ts": "2026-07-14T09:08:37.515Z" + "ts": "2026-07-20T04:17:45.427Z" } ], "resilienceMetrics": { diff --git a/docs/records/ConnectAI/chronicle.config.json b/docs/records/ConnectAI/chronicle.config.json index dc88ffb..65fdab3 100644 --- a/docs/records/ConnectAI/chronicle.config.json +++ b/docs/records/ConnectAI/chronicle.config.json @@ -7,5 +7,5 @@ "corePurpose": "", "detailLevel": "standard", "createdAt": "2026-05-20T09:42:40.003Z", - "updatedAt": "2026-06-15T03:00:02.383Z" + "updatedAt": "2026-07-20T04:19:49.700Z" } diff --git a/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md new file mode 100644 index 0000000..ba80a81 --- /dev/null +++ b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md @@ -0,0 +1,16 @@ +# Discussion: E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜ + +## User Request Summary +E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜ + +## Interpreted Intent +Capture a meaningful project discussion automatically instead of requiring manual record selection. + +## Questions +No explicit question was captured. + +## Main Discussion +- E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜ + +## Decisions +No decisions captured yet. diff --git a/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md new file mode 100644 index 0000000..76636c4 --- /dev/null +++ b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md @@ -0,0 +1,16 @@ +# Discussion: E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜ + +## User Request Summary +E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ค˜ + +## Interpreted Intent +Capture a meaningful project discussion automatically instead of requiring manual record selection. + +## Questions +No explicit question was captured. + +## Main Discussion +- ๋ฐ˜๊ฐ€์›Œ์š”. ์–ด๋–ป๊ฒŒ ๋„์™€๋“œ๋ฆด๊นŒ์š”? + +## Decisions +No decisions captured yet. diff --git a/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md new file mode 100644 index 0000000..dca0a38 --- /dev/null +++ b/docs/records/ConnectAI/discussions/2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md @@ -0,0 +1,16 @@ +# Discussion: E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ๋ณด๊ณ ํ•ด์ค˜. + +## User Request Summary +E:\Wiki\connectai ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ๋ณด๊ณ ํ•ด์ค˜. + +## Interpreted Intent +Capture a meaningful project discussion automatically instead of requiring manual record selection. + +## Questions +No explicit question was captured. + +## Main Discussion +- ## 4. ์ข…ํ•ฉ ๋ถ„์„ ๊ฒฐ๊ณผ ํ˜„์žฌ ConnectAI ํ”„๋กœ์ ํŠธ๋Š” ๋กœ์ปฌ LLM๊ณผ RAG ๊ธฐ์ˆ ์„ VS Code๋ผ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ๋งค์šฐ ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ ์œผ๋กœ ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์ด ์„ค๊ณ„๋˜์–ด ์žˆ์–ด, ๋‹จ์ˆœํ•œ ์ฑ—๋ด‡ ์ด์ƒ์˜ '์ง€๋Šฅํ˜• ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ'๋กœ ๋ฐœ์ „ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. **ํ•ต์‹ฌ ์š”์•ฝ:** - **๊ฐ•์ **: ๋กœ์ปฌ LLM ์‚ฌ์šฉ์„ ํ†ตํ•œ ๋ณด์•ˆ์„ฑ ๋ฐ ๋น„์šฉ ํšจ์œจ์„ฑ ํ™•๋ณด, RAG๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ์ธํ™”๋œ ์ง€์‹ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์˜ ๊ตฌ์กฐ์  ์™„์„ฑ๋„. - **๊ธฐํšŒ**: ์—์ด์ „ํŠธ ๊ตฌ์กฐ(Planner, Researcher, Writer)๋ฅผ ํ†ตํ•œ ๋ณต์žกํ•œ ๊ฐœ๋ฐœ ํƒœ์Šคํฌ ์ž๋™ํ™” ๊ฐ€๋Šฅ์„ฑ. - **๊ณผ์ œ**: ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ ์‹œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์˜ ์ง๊ด€์„ฑ ๊ฐ•ํ™”. ๊ฒฐ๋ก ์ ์œผ๋กœ, ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœํ•œ ๋„๊ตฌ ๋ชจ์Œ์„ ๋„˜์–ด ์‚ฌ์šฉ์ž์˜ ์ฝ”๋”ฉ ๋งฅ๋ฝ์„ ์ดํ•ดํ•˜๋Š” '์ง€๋Šฅํ˜• ๋ ˆ์ด์–ด'๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. + +## Decisions +No decisions captured yet. diff --git a/docs/records/ConnectAI/timeline.md b/docs/records/ConnectAI/timeline.md index c8f403a..3cde22b 100644 --- a/docs/records/ConnectAI/timeline.md +++ b/docs/records/ConnectAI/timeline.md @@ -420,3 +420,12 @@ ## 2026-06-12 - Auto development record created: development\2026-06-12_์ง€๊ธˆ๊นŒ์ง€-๋„ˆ๋Š”-๋‚˜์—๊ฒŒ-์•„์ด๋””์–ด-ํ•ต์‹ฌ-๋‚ด์šฉ-๊ธฐ๋Œ€-ํšจ๊ณผ-๋‚ด์šฉ์œผ๋กœ-์จ์คฌ๋Š”๋ฐ-๋ฒ•์ •-์˜๋ฌด-๊ต์œก์€-๋‹ค๋ฅธ-ํฌ๋ฉง์œผ๋กœ-์คฌ์–ด-_implementation.md + +## 2026-07-20 +- Auto discussion record created: discussions\2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜.md + +## 2026-07-20 +- Auto discussion record created: discussions\2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -๊ตฌ์กฐ์—-๋Œ€ํ•ด์„œ-์„ค๋ช…ํ•ด์ค˜-2.md + +## 2026-07-20 +- Auto discussion record created: discussions\2026-07-20_e-wiki-connectai-ํ”„๋กœ์ ํŠธ๋ฅผ-๋ถ„์„ํ•˜๊ณ -์–ด๋–ป๊ฒŒ-๋˜์–ด-์žˆ๋Š”์ง€-๋ณด๊ณ ํ•ด์ค˜.md