refactor: v2.2.195-201 — slashRouter god-file 해체 (–95%) + 인프라 5개 추출
아키텍처 감사 결과 HIGH 2건 + MED 2건 + LOW 1건 — 7 라운드 정리 시리즈.
기능 변경 없음, 순수 구조 정리.
**slashRouter.ts: 4,174 → 201줄 (–3,973, –95%)**
**agent.ts: 1,617 → 1,551줄 (–66, –4%)**
v2.2.195: eventSourcedStore + SystemPromptBlock registry
- createEventStore<E>(opts) — 4 store (customers/hire/runway/feedback) I/O 240줄 중복 제거
- _turnCtx 5 named string field → 1 Map<string, string> (새 verification block 추가 25곳→1곳)
- buildAstraModeSystemPrompt: 5 ternary gate + 5 위치 → 1 for-loop join
v2.2.196: trackers cluster split
- src/features/teamops/handlers/_shared.ts (fmtKrw/parseAmount/daysUntil/parseTaskOwner/stageEmoji/STAGE_ORDER/TERMINAL_STAGES)
- src/features/teamops/handlers/trackers.ts (runway/customers/hire)
- src/features/teamops/handlers/index.ts (barrel)
- extension.ts 에 side-effect import (순환 import 회피)
v2.2.197: mtimeFileCache + PostAnswerHook registry
- src/lib/mtimeFileCache.ts — createMtimeFileCache<T>(name, parse) (terminologyBlock + termValidator 2-cache invariant 자동화)
- src/agent/postAnswerHooks/{types,index}.ts — Devil/SelfCheck/TermValidator 3 _maybeX method → 1 runPostAnswerHooks(ctx) loop
- agent.ts –66줄
v2.2.198: dashboards cluster split
- src/features/teamops/handlers/dashboards.ts (morning/evening/cohort/weekly)
v2.2.199: coordination + communication clusters split
- src/features/teamops/handlers/coordination.ts (task/decisions/onesie/blocked/standup)
- src/features/teamops/handlers/communication.ts (draft/feedback)
- callLmSynthesis export 노출 (communication 이 사용)
- 옛 parseTaskOwner local 정의 삭제 (_shared.ts 사용)
v2.2.200: system cluster split
- src/features/system/handlers.ts (memory/glossary/help)
v2.2.201: datacollect cluster split + LLM 인프라 추출
- src/features/datacollect/handlers.ts (research/benchmark/youtube/blog/wikify/meet)
- src/features/datacollect/llm.ts (callLmSynthesis + repairKoreanGlitches + bridgeErrorRemedy)
- slashRouter import 4개로 축소: vscode/logInfo/getBridgeBaseUrl/bridgeErrorRemedy
**최종 slashRouter (201줄):**
- REGISTRY Map + registerSlashCommand/listSlashCommands/isSlashCommand
- handleSlashCommand (dispatcher + 에러 처리)
- Webview interface + chunk helper
- getRecentSlashCommands ring buffer (actionability scoring 용)
**미래 부담 감소 metrics:**
- 새 슬래시 명령: god-file 끝에 함수 + register → 1 파일 + 1 register call
- 새 verification block: 5곳 편집 → 1 set call
- 새 event store: 60줄 boilerplate → createEventStore 한 줄
- 새 post-answer hook: 3 step → 1 push
- 새 mtime cache: Map + invariant 관리 → createMtimeFileCache 한 줄
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 1,
|
||||
"generatedAt": "2026-05-29T07:30:42.949Z",
|
||||
"generatedAt": "2026-06-01T02:30:44.174Z",
|
||||
"files": {
|
||||
"src/agent/actions/brainOps.ts": {
|
||||
"mtimeMs": 1779764602582.9768,
|
||||
@@ -135,9 +135,9 @@
|
||||
]
|
||||
},
|
||||
"src/agent/handlePrompt/buildAstraModeSystemPrompt.ts": {
|
||||
"mtimeMs": 1780033670993.9626,
|
||||
"size": 8427,
|
||||
"lines": 133,
|
||||
"mtimeMs": 1780276266500.7705,
|
||||
"size": 6433,
|
||||
"lines": 100,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/lib/contextBuilders/localProjectIntent",
|
||||
@@ -298,6 +298,26 @@
|
||||
"src/agent"
|
||||
]
|
||||
},
|
||||
"src/agent/postAnswerHooks/index.ts": {
|
||||
"mtimeMs": 1780278997000.157,
|
||||
"size": 3900,
|
||||
"lines": 96,
|
||||
"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",
|
||||
"src/agent/llm/devilRebuttal",
|
||||
"src/agent/postHocSelfCheck",
|
||||
"src/agent/termValidator",
|
||||
"src/config"
|
||||
]
|
||||
},
|
||||
"src/agent/postAnswerHooks/types.ts": {
|
||||
"mtimeMs": 1780278967597.8257,
|
||||
"size": 2001,
|
||||
"lines": 48,
|
||||
"role": "Post-Answer Hook 인터페이스 — 답변 streaming 완료 후 실행되는 부가 작업. 옛 구조: agent.ts 의 maybeEmitDevilRebuttal, maybePostHocSelfCheck, maybeRunTermValidator 3개 private method. 새 hook 추가 시 (1) method 정의 (2) import (3)",
|
||||
"imports": []
|
||||
},
|
||||
"src/agent/postHocSelfCheck.ts": {
|
||||
"mtimeMs": 1780033021215.5054,
|
||||
"size": 8943,
|
||||
@@ -317,16 +337,18 @@
|
||||
]
|
||||
},
|
||||
"src/agent/termValidator.ts": {
|
||||
"mtimeMs": 1780039129011.7288,
|
||||
"size": 8675,
|
||||
"lines": 221,
|
||||
"mtimeMs": 1780278698973.1787,
|
||||
"size": 8156,
|
||||
"lines": 202,
|
||||
"role": "Post-generation Term Validator — 답변 완료 후 정규식/사전 기반 결정론적 스캔. v2.2.192 의 Terminology Dictionary 가 instructional (LLM 에게 표준 표기 사용 지시) 이면, 이건 deterministic — LLM 이 지시를 안 따랐을 때 catch. Glossary 파싱 — 두 패턴 인식",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/lib/mtimeFileCache"
|
||||
]
|
||||
},
|
||||
"src/agent.ts": {
|
||||
"mtimeMs": 1780039163639.0967,
|
||||
"size": 87154,
|
||||
"lines": 1589,
|
||||
"mtimeMs": 1780278886140.8762,
|
||||
"size": 81193,
|
||||
"lines": 1503,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/utils",
|
||||
@@ -397,8 +419,7 @@
|
||||
"src/agent/handlePrompt/buildAstraModeSystemPrompt",
|
||||
"src/agent/handlePrompt/computeBudgetedRequest",
|
||||
"src/agent/handlePrompt/processFinalAnswer",
|
||||
"src/agent/postHocSelfCheck",
|
||||
"src/agent/termValidator",
|
||||
"src/agent/postAnswerHooks",
|
||||
"src/agent/handlePrompt/applyAutoContinuation",
|
||||
"src/features/approval/approvalQueue",
|
||||
"src/features/providers",
|
||||
@@ -704,11 +725,13 @@
|
||||
]
|
||||
},
|
||||
"src/extension.ts": {
|
||||
"mtimeMs": 1779764602602.9807,
|
||||
"size": 17079,
|
||||
"lines": 354,
|
||||
"mtimeMs": 1780280902153.7483,
|
||||
"size": 17342,
|
||||
"lines": 358,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/features/teamops/handlers",
|
||||
"src/features/system/handlers",
|
||||
"src/utils",
|
||||
"src/config",
|
||||
"src/agent",
|
||||
@@ -1117,11 +1140,13 @@
|
||||
"imports": []
|
||||
},
|
||||
"src/features/customers/customersStore.ts": {
|
||||
"mtimeMs": 1779952731356.5476,
|
||||
"size": 6815,
|
||||
"lines": 176,
|
||||
"mtimeMs": 1780275713140.8125,
|
||||
"size": 5722,
|
||||
"lines": 149,
|
||||
"role": "고객사 / MRR / 갱신 트래커. 4인 기업의 수입 쪽 — /runway 가 통장과 burn 을 본다면, 여기는 어디서 돈이 들어오나. Salesforce / HubSpot 같은 CRM 아닌 가벼운 event-sourced 로그. 저장 형식: JSON Lines (.jsonl) — append-only event log. 같은 customer 의 여러 이",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/features/_shared/eventSourcedStore"
|
||||
]
|
||||
},
|
||||
"src/features/datacollect/bridgeClient.ts": {
|
||||
"mtimeMs": 1779764602617.1548,
|
||||
@@ -1166,9 +1191,9 @@
|
||||
"imports": []
|
||||
},
|
||||
"src/features/datacollect/slashRouter.ts": {
|
||||
"mtimeMs": 1780039211177.6035,
|
||||
"size": 226165,
|
||||
"lines": 4096,
|
||||
"mtimeMs": 1780280990100.2815,
|
||||
"size": 67318,
|
||||
"lines": 1240,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/utils",
|
||||
@@ -1179,6 +1204,7 @@
|
||||
"src/config",
|
||||
"src/retrieval/terminologyBlock",
|
||||
"src/agent/termValidator",
|
||||
"src/features/teamops/handlers/_shared",
|
||||
"src/features/setup/datacollectSetup",
|
||||
"src/features/datacollect/prompts/synthesisPrompt",
|
||||
"src/features/datacollect/prompts/youtubePrompts",
|
||||
@@ -1214,18 +1240,22 @@
|
||||
]
|
||||
},
|
||||
"src/features/feedback/feedbackStore.ts": {
|
||||
"mtimeMs": 1779931731117.0737,
|
||||
"size": 3406,
|
||||
"lines": 81,
|
||||
"mtimeMs": 1780275889230.5403,
|
||||
"size": 1851,
|
||||
"lines": 44,
|
||||
"role": "고객 피드백 누적 저장소. 단일 운영자(대표) 모드에서 슬랙·이메일·CS 채널에 흩어진 고객 피드백을 /feedback <텍스트> 한 줄로 모아 둔다. 패턴 분석은 /feedback summary 로 LLM 이 누적 데이터를 보고 카테고리 분포 + 반복 주제를 추출. 저장 형식: JSON Lines (.jsonl) — 한 줄 = 한 entry. 누적·app",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/features/_shared/eventSourcedStore"
|
||||
]
|
||||
},
|
||||
"src/features/hire/hireStore.ts": {
|
||||
"mtimeMs": 1779964473915.006,
|
||||
"size": 5586,
|
||||
"lines": 150,
|
||||
"mtimeMs": 1780275773463.53,
|
||||
"size": 4567,
|
||||
"lines": 125,
|
||||
"role": "채용 파이프라인 트래커. 4인 → 5인 이상 확장 시점에 후보자가 여러 명, 여러 역할(개발/기획/디자인) 로 들어오기 시작 — 노션·스프레드시트·이메일에 흩어진 정보를 한 명령으로 본다. Event-sourced (customersStore 와 동일 패턴) — append-only 이벤트 로그를 재생해 후보자별 현재 단계 + 노트 누적 도출. 위치: <w",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/features/_shared/eventSourcedStore"
|
||||
]
|
||||
},
|
||||
"src/features/projectArchitecture/index.ts": {
|
||||
"mtimeMs": 1778720117531.2734,
|
||||
@@ -1378,11 +1408,13 @@
|
||||
"imports": []
|
||||
},
|
||||
"src/features/runway/runwayStore.ts": {
|
||||
"mtimeMs": 1779935315716.9917,
|
||||
"size": 6666,
|
||||
"lines": 173,
|
||||
"mtimeMs": 1780275853704.5698,
|
||||
"size": 5511,
|
||||
"lines": 146,
|
||||
"role": "Runway / Cash 누적 저장소. 4인 기업 운영의 가장 중요한 숫자 — 현금 잔고 / 월 소진율 / 남은 개월수 — 를 한 명령 (/runway) 로 본다. 회계 시스템은 아니고, 대표가 머리에 가지고 있는 \"지금 통장에 얼마, 한 달에 얼마 나감\" 을 코드 옆에서 잡는 가벼운 트래커. 저장 형식: JSON Lines (.jsonl) — 한 줄 = ",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/features/_shared/eventSourcedStore"
|
||||
]
|
||||
},
|
||||
"src/features/secondBrainTrace.ts": {
|
||||
"mtimeMs": 1779411561816.5603,
|
||||
@@ -1631,6 +1663,19 @@
|
||||
"src/utils"
|
||||
]
|
||||
},
|
||||
"src/features/system/handlers.ts": {
|
||||
"mtimeMs": 1780280889224.8892,
|
||||
"size": 20518,
|
||||
"lines": 394,
|
||||
"role": "System handlers — /memory · /glossary · /help (인프라·관리·발견). v2.2.200 에서 slashRouter.ts 에서 분리. 4인 팀 운영 도메인 아닌 \"ASTRA 자체 인프라\" 슬래시 명령. teamops handlers 와 같은 패턴.",
|
||||
"imports": [
|
||||
"src/features/datacollect/slashRouter",
|
||||
"src/config",
|
||||
"src/memory",
|
||||
"src/retrieval/terminologyBlock",
|
||||
"src/agent/termValidator"
|
||||
]
|
||||
},
|
||||
"src/features/tasks/index.ts": {
|
||||
"mtimeMs": 1779065453887.9194,
|
||||
"size": 238,
|
||||
@@ -1647,6 +1692,82 @@
|
||||
"role": "Task tracker — .astra/company/shared/tasks.md 단일 파일. 설계 원칙: - 외부 DB 없이 사람이 읽을 수 있는 마크다운 테이블에 누적. git 으로 history 추적 가능. - 파싱은 regex 기반 (셀 구분자 |). 사용자가 손으로 편집해도 fault-tolerant. - 모든 task 는 안정적 id (t001,",
|
||||
"imports": []
|
||||
},
|
||||
"src/features/teamops/handlers/communication.ts": {
|
||||
"mtimeMs": 1780280515102.4714,
|
||||
"size": 13781,
|
||||
"lines": 254,
|
||||
"role": "TeamOps Communication — /draft · /feedback (외부 출력·기록). v2.2.199 에서 slashRouter.ts 에서 분리. (원래는 v2.2.200 예정이었으나 coordination 추출 시 register 라인이 인접해 묶여 함께 진행.)",
|
||||
"imports": [
|
||||
"src/features/datacollect/slashRouter",
|
||||
"src/features/feedback/feedbackStore"
|
||||
]
|
||||
},
|
||||
"src/features/teamops/handlers/coordination.ts": {
|
||||
"mtimeMs": 1780280322364.4475,
|
||||
"size": 30738,
|
||||
"lines": 572,
|
||||
"role": "TeamOps Coordination — /task · /decisions · /onesie · /blocked · /standup. v2.2.199 에서 slashRouter.ts 에서 분리. 작업·결정·1:1·블로커·스탠드업 등 \"팀 운영의 실시간 부분\" 클러스터. 공통 헬퍼는 ./shared.ts 에서. 옛 slashRouter 의 local pars",
|
||||
"imports": [
|
||||
"src/features/datacollect/slashRouter",
|
||||
"src/features/teamops/handlers/_shared",
|
||||
"src/features/calendar",
|
||||
"src/sidebar/managers/chronicleProjectStore"
|
||||
]
|
||||
},
|
||||
"src/features/teamops/handlers/dashboards.ts": {
|
||||
"mtimeMs": 1780279486170.9111,
|
||||
"size": 42079,
|
||||
"lines": 806,
|
||||
"role": "TeamOps Dashboards — /morning · /evening · /cohort · /weekly (CEO 일·주 리듬). v2.2.198 에서 slashRouter.ts 에서 분리. cross-data 합성 (Tasks + customers + hire + runway + Chronicle ADR) 으로 일/주/월 단위 시야 제공. 공통 헬퍼는",
|
||||
"imports": [
|
||||
"src/features/datacollect/slashRouter",
|
||||
"src/features/teamops/handlers/_shared",
|
||||
"src/features/calendar",
|
||||
"src/sidebar/managers/chronicleProjectStore",
|
||||
"src/features/runway/runwayStore",
|
||||
"src/features/customers/customersStore",
|
||||
"src/features/hire/hireStore"
|
||||
]
|
||||
},
|
||||
"src/features/teamops/handlers/index.ts": {
|
||||
"mtimeMs": 1780280542425.257,
|
||||
"size": 501,
|
||||
"lines": 14,
|
||||
"role": "TeamOps handlers 배럴 — extension activate 시 1회 import 로 모든 핸들러 등록. 각 핸들러 파일은 module scope 에서 registerSlashCommand({...}) 호출하므로 import 만으로 등록 완료. 새 핸들러 파일은 여기에 한 줄 추가. v2.2.196 — trackers (runway/custom",
|
||||
"imports": [
|
||||
"src/features/teamops/handlers/trackers",
|
||||
"src/features/teamops/handlers/dashboards",
|
||||
"src/features/teamops/handlers/coordination",
|
||||
"src/features/teamops/handlers/communication"
|
||||
]
|
||||
},
|
||||
"src/features/teamops/handlers/trackers.ts": {
|
||||
"mtimeMs": 1780278032934.0896,
|
||||
"size": 36032,
|
||||
"lines": 704,
|
||||
"role": "TeamOps Trackers — /runway · /customers · /hire (event-sourced 트래커 3종). v2.2.196 에서 slashRouter.ts 에서 분리. 모두 .astra/.jsonl event log 를 읽고 (createEventStore via 각 store 모듈) 대시보드 / 수정 명령 제공. 공통 헬퍼 (fmtK",
|
||||
"imports": [
|
||||
"src/features/datacollect/slashRouter",
|
||||
"src/features/teamops/handlers/_shared",
|
||||
"src/features/runway/runwayStore",
|
||||
"src/features/customers/customersStore",
|
||||
"src/features/hire/hireStore"
|
||||
]
|
||||
},
|
||||
"src/features/teamops/handlers/_shared.ts": {
|
||||
"mtimeMs": 1780277843419.9949,
|
||||
"size": 3647,
|
||||
"lines": 84,
|
||||
"role": "TeamOps handlers 공통 헬퍼 — 4인 팀 운영 슬래시 명령 클러스터가 공유하는 함수·상수. 이전 위치: src/features/datacollect/slashRouter.ts 내부 module-local 함수 (v2.2.196 에서 분리). 핸들러 도메인별 분할 시 공통 항목만 여기에. 추후 datacollect / system 핸들러도 비슷한",
|
||||
"imports": []
|
||||
},
|
||||
"src/features/_shared/eventSourcedStore.ts": {
|
||||
"mtimeMs": 1780275610701.943,
|
||||
"size": 3216,
|
||||
"lines": 83,
|
||||
"role": "Generic event-sourced store — append-only .jsonl 파일 1개를 읽고/쓰는 공통 기반. 배경: customers, hire, runway, feedback 4개 store 가 같은 패턴 4번 반복 (getXFilePath / readX / appendX / countX) — byte-for-byte 중복 ~240줄. 한 ",
|
||||
"imports": []
|
||||
},
|
||||
"src/integrations/telegram/conversationHistory.ts": {
|
||||
"mtimeMs": 1778720117535.294,
|
||||
"size": 6427,
|
||||
@@ -1797,9 +1918,9 @@
|
||||
]
|
||||
},
|
||||
"src/lib/contextBuilders/memoryContext.ts": {
|
||||
"mtimeMs": 1780033602782.2012,
|
||||
"size": 18059,
|
||||
"lines": 352,
|
||||
"mtimeMs": 1780276328602.9944,
|
||||
"size": 16862,
|
||||
"lines": 328,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/agent",
|
||||
@@ -1974,6 +2095,13 @@
|
||||
"src/lib/engine"
|
||||
]
|
||||
},
|
||||
"src/lib/mtimeFileCache.ts": {
|
||||
"mtimeMs": 1780278539124.1875,
|
||||
"size": 2553,
|
||||
"lines": 72,
|
||||
"role": "mtime-keyed file cache utility — 파일을 parse 결과 까지 캐싱. 배경: terminologyBlock.ts 와 termValidator.ts 가 같은 글로서리 파일에 별도 캐시 2개를 보유. \"함께 무효화\" 가 사람이 손으로 보장하는 invariant — 한쪽만 잊고 invalidate 안 하면 stale read 위험. 이 ",
|
||||
"imports": []
|
||||
},
|
||||
"src/lib/paths.ts": {
|
||||
"mtimeMs": 1778664139961.0637,
|
||||
"size": 6567,
|
||||
@@ -2249,11 +2377,13 @@
|
||||
]
|
||||
},
|
||||
"src/retrieval/terminologyBlock.ts": {
|
||||
"mtimeMs": 1780033577419.837,
|
||||
"size": 5735,
|
||||
"lines": 137,
|
||||
"mtimeMs": 1780278609386.6382,
|
||||
"size": 5450,
|
||||
"lines": 127,
|
||||
"role": "Terminology Dictionary — 프로젝트 표준 용어집을 시스템 프롬프트에 주입. 사용자 제안: \"표준 표기 강제 + 답변 내 표기 일관성 검증\". 예: runway vs 런웨이, P-Reinforce vs p-reinforce, Chronicle vs 크로니클. 설계 — 사용자 편집 markdown 파일: - 위치: <workspace>/.as",
|
||||
"imports": []
|
||||
"imports": [
|
||||
"src/lib/mtimeFileCache"
|
||||
]
|
||||
},
|
||||
"src/retrieval/types.ts": {
|
||||
"mtimeMs": 1779764602656.6587,
|
||||
@@ -3356,8 +3486,15 @@
|
||||
"role": "Bug: 논문 Outline Title 인간-AI 상호작용에서 의도 정렬을 높이기 위한 최소 질의 구조 연구 또는 사용자의 인지적 편향을 보완하는 구조화...",
|
||||
"imports": []
|
||||
},
|
||||
"docs/records/ConnectAI/bugs/BUG-0015-짚어둘-관찰-사항-참고용-face-api-js-환경-face-api-js는-원래-브라우저용입니다-node-단.md": {
|
||||
"mtimeMs": 1780281037883.6174,
|
||||
"size": 2482,
|
||||
"lines": 16,
|
||||
"role": "Bug: 짚어둘 관찰 사항 (참고용) face-api.js 환경: face-api.js는 원래 브라우저용입니다. Node 단독 실행 시 @tensorfl...",
|
||||
"imports": []
|
||||
},
|
||||
"docs/records/ConnectAI/chronicle.config.json": {
|
||||
"mtimeMs": 1780039836702.8801,
|
||||
"mtimeMs": 1780281037893.3647,
|
||||
"size": 371,
|
||||
"lines": 11,
|
||||
"role": "JSON configuration",
|
||||
@@ -3910,9 +4047,9 @@
|
||||
"imports": []
|
||||
},
|
||||
"docs/records/ConnectAI/timeline.md": {
|
||||
"mtimeMs": 1780039836694.6646,
|
||||
"size": 14881,
|
||||
"lines": 233,
|
||||
"mtimeMs": 1780281037885.788,
|
||||
"size": 15049,
|
||||
"lines": 236,
|
||||
"role": "Project Timeline",
|
||||
"imports": []
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user