v2.2.15: Astra Office Refactor & Multi-Service Integration

This commit is contained in:
g1nation
2026-05-16 22:07:06 +09:00
parent 9dcc98ad33
commit 9ca95ab997
46 changed files with 5648 additions and 1299 deletions
+35 -32
View File
@@ -3,15 +3,15 @@
<!-- ASTRA:AUTO-START -->
## Snapshot
- **Workspace**: `ConnectAI` `v2.2.13` _(absolute path varies by environment; resolved from the active VS Code workspace)_
- **Workspace**: `ConnectAI` `v2.2.14` _(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**: 224 source files, ~46,311 lines across 5 top-level modules.
- **Stats**: 248 source files, ~50,110 lines across 5 top-level modules.
## Last Refresh
- **Time**: 2026-05-16T04:18:55.379Z
- **Files newly analysed**: 2
- **Files reused from cache**: 222
- **Time**: 2026-05-16T13:04:11.625Z
- **Files newly analysed**: 6
- **Files reused from cache**: 242
## Directory Map
```mermaid
@@ -37,11 +37,11 @@ mindmap
> Arrows: which top-level module imports from which.
```mermaid
flowchart LR
src["src/<br/>110 files"]
src["src/<br/>127 files"]
media["media/<br/>6 files"]
tests["tests/<br/>27 files"]
tests["tests/<br/>33 files"]
core_py["core_py/<br/>6 files"]
docs["docs/<br/>75 files"]
docs["docs/<br/>76 files"]
tests --> src
```
@@ -55,19 +55,19 @@ flowchart LR
> Imported by many other files — touching these has wide blast radius.
- `src/utils.ts` — referenced by **49** files
- `src/config.ts` — referenced by **16** files
- `src/features/company/types.ts` — referenced by **12** 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/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
- `src/core/services.ts` — referenced by **10** files
- `src/lib/paths.ts` — referenced by **10** files
- `src/agent.ts` — referenced by **7** files
- `src/retrieval/lessonHelpers.ts` — referenced by **6** files · 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/skills/agentKnowledgeMap.ts` — referenced by **6** files
- `src/lib/engine.ts` — referenced by **6** files
## Modules
### `src/` — 110 files, ~31,312 lines
### `src/` — 127 files, ~33,943 lines
**Sub-directories**
- `src/features/` (37) — 기본 에이전트 로스터 — 1인 기업 모드의 출고 디폴트. 설계 의도: 소프트웨어/게임 개발 IT 회사의 1인 기업 운영을 가정. 한 사람이 기획 → 디자인 → 개발 → QA → 출시 → 운영/마케팅을 모두 책임질 때
- `src/features/` (54) — Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel H
- `src/core/` (15) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토
- `src/memory/` (8) — Episodic Memory (일화 기억) 과거 대화/회의/결정의 맥락 흐름을 저장합니다. 세션 종료 시 자동으로 에피소드를 요약하여 저장합니다. "왜 이렇게 결정했는지", "어떤 흐름으로 진행했는지" 기록. 저장
- `src/retrieval/` (8) — Brain Index — persistent, mtime-keyed tokenized cache of the Second Brain RAG 검색은 매 질의마다 브레인의 모든 .md 파일을 읽고 토크나이즈해서 TF-I
@@ -81,43 +81,43 @@ flowchart LR
- `src/scaffolder/` (2) — Scaffolder template catalog. Templates are pure data — (projectName) => { [relativePath]: contents }. New templates are
**Key files**
- `src/utils.ts` (279 lines)
- `src/utils.ts` (360 lines)
- `src/config.ts` (298 lines)
- `src/features/company/types.ts` (446 lines) — Type definitions for the 1인 기업 (One-Person Company) mode. The mode turns the user into a virtual CEO that dispatches work to a roster of specialist agents. Each turn produces a session directory conta
- `src/core/services.ts` (164 lines)
- `src/lib/paths.ts` (151 lines)
- `src/features/company/companyConfig.ts` (896 lines) — State + config plumbing for 1인 기업 모드. Two surfaces: - CompanyState (runtime data: enabled flag, company name, which agents are active, per-agent model overrides). Persisted in VS Code's globalState so
- `src/sidebarProvider.ts` (5505 lines)
- `src/sidebarProvider.ts` (4141 lines)
- `src/memory/types.ts` (126 lines) — Memory Type Definitions (메모리 타입 정의) Astra의 5-Layer Cognitive Memory System의 모든 타입을 정의합니다. ① Short-Term ② Long-Term ③ Project ④ Procedural ⑤ Episodic
- `src/retrieval/scoring.ts` (518 lines) — Scoring Engine — TF-IDF + Bilingual Tokenizer 단순 includes() 키워드 매칭을 넘어서, TF-IDF 가중치 기반의 문서 스코어링을 제공합니다. 한국어/영어 양국어 토크나이저를 포함합니다.
- `src/skills/agentKnowledgeMap.ts` (374 lines)
- `src/retrieval/lessonHelpers.ts` (325 lines) — Lesson / Experience Memory — pure helpers (no vscode dependency) "Lesson" = a markdown file in the active brain that captures a past mistake/risk and how to avoid repeating it. Identified by a lessons
- `src/agent.ts` (3260 lines)
- `src/agent.ts` (3509 lines)
- `src/lib/engine.ts` (906 lines)
- `src/features/company/dispatcher.ts` (1419 lines) — Sequential dispatcher for 1인 기업 모드. Drives one company "turn": user prompt → CEO planner (JSON {brief, tasks}) → for each task in plan: dispatch one specialist (sequentially) - build specialist prompt
- `src/features/company/dispatcher.ts` (1435 lines) — Sequential dispatcher for 1인 기업 모드. Drives one company "turn": user prompt → CEO planner (JSON {brief, tasks}) → for each task in plan: dispatch one specialist (sequentially) - build specialist prompt
- `src/features/approval/approvalQueue.ts` (129 lines)
- `src/integrations/telegram/telegramClient.ts` (154 lines)
- `src/features/astraOffice/view/runtime.ts` (1254 lines) — 자동 분리: src/sidebarProvider.ts 4002-5116 (IIFE 본문) 에서 추출. 동작 동등. ${assets.derivedBase} placeholder 는 panelHtml 에서 .replace() 로 실제 값 주입. 다음 세션에서 OfficeSnapshot 기반으로 단계적으로 잘라낼 예정.
- `src/features/company/agents.ts` (211 lines) — 기본 에이전트 로스터 — 1인 기업 모드의 출고 디폴트. 설계 의도: 소프트웨어/게임 개발 IT 회사의 1인 기업 운영을 가정. 한 사람이 기획 → 디자인 → 개발 → QA → 출시 → 운영/마케팅을 모두 책임질 때 필요한 직군을 빠짐없이 커버하되 역할이 겹치지 않게 분리한다. 직군 구분 (혼동 방지): - 기획자(business) : 무엇을 만들지 정의
- `src/features/company/pixelOfficeState.ts` (286 lines) — Pixel Office — Agent Work Pipeline 상태를 시각화하는 UI Layer 전용 모듈. ─────────────────── 설계 원칙 ─────────────────── 1. Agent 핵심 판단 로직을 절대 바꾸지 않는다. Pipeline 진행, contract 합의, 검수 cycle, 승인 게이트 — 모두 기존 dispatcher
- `src/features/company/sessionStore.ts` (231 lines) — Disk persistence for company-mode session artefacts. Each company turn produces a timestamped directory: <workspaceRoot>/.astra/company/sessions/2026-05-13T21-29/ ├─ brief.md ← CEO's task decompositio
- `src/features/projectArchitecture/scanner.ts` (644 lines) — Deep static analyser for the Project Architecture Context generator. Walks the project tree (skipping the usual nodemodules / out / dist noise), pulls the role of each interesting file from its leadin
- `src/lib/contextManager.ts` (275 lines) — Context Manager (컨텍스트 한계 관리) "context length = 132k" 는 "답변을 132k 토큰까지 생성해도 된다" 가 아닙니다. 시스템 프롬프트 + 대화 기록 + 입력 문서 + 생성될 답변 + 여유분 ≤ context length 이 모듈은 요청을 보내기 전에 입력 토큰을 추정하고, - 동적으로 출력 상한(maxTokens)을 계
- `src/features/company/agents.ts` (196 lines) — 기본 에이전트 로스터 — 1인 기업 모드의 출고 디폴트. 설계 의도: 소프트웨어/게임 개발 IT 회사의 1인 기업 운영을 가정. 한 사람이 기획 → 디자인 → 개발 → QA → 출시 → 운영/마케팅을 모두 책임질 때 필요한 직군을 빠짐없이 커버하되 역할이 겹치지 않게 분리한다. 직군 구분 (혼동 방지): - 기획자(business) : 무엇을 만들지 정의
- `src/extension.ts` (1179 lines)
- `src/features/company/resumeStore.ts` (134 lines) — Disk persistence for company-turn resume state. 각 turn의 sessionDir 안에 resume.json을 두고, dispatcher가 매 의미 있는 시점(plan 확정 / 각 stage 직후 / abort 시점)에 현재 상태를 덮어쓴다. 재개 시점에는 이 파일을 읽어 nextIndex 부터 dispatch 재개.
- `src/core/astraPath.ts` (50 lines) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토리를 해결하여, 사용자 프로젝트 루트가 아닌 ConnectAI 패키지 내부에 데이터를 저장합니다. 이 모듈은 AAL(Astra Autonomou
- `src/extension.ts` (972 lines)
- `src/features/company/intentAlignment.ts` (334 lines) — Intent Alignment — 사용자의 자연어 요청을 실행 가능한 작업 조건으로 변환. 사용자는 자기 의도와 배경지식이 에이전트에게 충분히 전달되었다고 착각하는 경향이 있다 (투명성의 착각·지식의 저주·공통 기반 부족). 그래서 에이전트가 즉시 작업에 돌입하면 사용자가 머릿속에 가진 것과 다른 결과를 만들어 낸다. 이 모듈은 그 격차를 메꾸는 한 단계
- `src/features/projectChronicle/types.ts` (118 lines)
### `media/` — 6 files, ~6,766 lines
### `media/` — 6 files, ~6,863 lines
**Key files**
- `media/sidebar.css` (1986 lines) — Stylesheet
- `media/sidebar.js` (3605 lines)
- `media/sidebar.html` (531 lines) — Astra
- `media/sidebar.css` (2016 lines) — Stylesheet
- `media/sidebar.js` (3657 lines)
- `media/sidebar.html` (546 lines) — Astra
- `media/settings-panel.css` (210 lines) — Stylesheet
- `media/settings-panel.html` (164 lines) — Astra Settings
- `media/settings-panel.js` (270 lines)
### `tests/` — 27 files, ~4,938 lines
### `tests/` — 33 files, ~5,811 lines
*Depends on*: `src/`
**Sub-directories**
@@ -136,19 +136,19 @@ flowchart LR
- `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/dataProcessor.test.ts` (87 lines) — / <reference types="jest" />
- `tests/findBrainFilesCache.test.ts` (80 lines) — Unit tests for findBrainFiles TTL cache.
- `tests/officeSchema.test.ts` (241 lines)
- `tests/paths.test.ts` (84 lines) — Unit tests for the centralized path resolver.
- `tests/systemSpecs.test.ts` (90 lines) — Unit tests for SystemSpecs + HeuristicModelMemoryEstimator. Strategy: - HeuristicModelMemoryEstimator is pure — directly drive it with model ids. - NodeSystemSpecsProvider depends on os. so we test: a
- `tests/transaction.test.ts` (68 lines) — / <reference types="jest" />
- `tests/vulnerability.test.ts` (60 lines) — / <reference types="jest" />
- `tests/brainIndex.test.ts` (107 lines)
- `tests/calendarApi.test.ts` (131 lines)
- `tests/contextManager.test.ts` (129 lines)
- `tests/icsParser.test.ts` (134 lines)
- `tests/lessonHelpers.test.ts` (191 lines)
- `tests/projectChronicle.test.ts` (199 lines)
- `tests/responseRecovery.test.ts` (151 lines)
- `tests/scoring.test.ts` (134 lines)
- `tests/integration_retrieval.test.ts` (91 lines)
- `tests/mocks/vscode.js` (68 lines)
- `tests/projectChronicleGuardPrompt.test.ts` (52 lines)
### `core_py/` — 6 files, ~409 lines
@@ -160,7 +160,7 @@ flowchart LR
- `core_py/optimizer.py` (55 lines)
- `core_py/queue_worker.py` (82 lines)
### `docs/` — 75 files, ~2,886 lines
### `docs/` — 76 files, ~3,084 lines
**Sub-directories**
- `docs/records/` (63) — Astra Project Chronicle Records
@@ -169,6 +169,7 @@ flowchart LR
**Key files**
- `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서
- `docs/AgentEngine_Architecture.md` (314 lines) — AgentEngine Architecture Document
- `docs/ASTRA_OFFICE_REFACTOR.md` (198 lines) — Astra Office Refactor — Design Doc
- `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) — Experience Memory (Mistake / Lesson Loop) — Implementation Plan
- `docs/records/ConnectAI/development/2026-05-02_connectai_project_knowledge_overview.md` (121 lines) — Astra Project Knowledge Overview
- `docs/records/ConnectAI/development/2026-05-03_connectai_project_knowledge_overview.md` (121 lines) — Astra Project Knowledge Overview
@@ -191,12 +192,11 @@ flowchart LR
- `docs/records/ConnectAI/bugs/BUG-0007-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...
- `docs/records/ConnectAI/bugs/BUG-0008-volumes-data-project-antigravity-connectai-내-질문에-대한-답변이-잘-정리.md` (16 lines) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 내 질문에 대한 답변이 잘 정리되서 알려주긴 하는데 focused...
- `docs/records/ConnectAI/bugs/BUG-0009-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...
- `docs/records/ConnectAI/bugs/BUG-0010-문제점을-읽고-어떻게-개선하는게-최선인지-분석해주면-좋겠어-알겠습니다-지금부터-connectai-프로젝트-에.md` (16 lines) — Bug: 문제점을 읽고 어떻게 개선하는게 최선인지 분석해주면 좋겠어. 알겠습니다. 지금부터 ConnectAI 프로젝트에만 완전히 집중하겠습니다. ...
## VS Code Extension Surface
- **Extension ID**: `g1nation.astra`
- **Activation events**: `onStartupFinished`
- **Commands** (24):
- **Commands** (27):
- `g1nation.newChat` — Astra: New Chat
- `g1nation.exportChat` — Astra: Export Chat as Markdown
- `g1nation.explainSelection` — Astra: Explain Selected Code
@@ -221,6 +221,9 @@ flowchart LR
- `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 연결 (쓰기) 🔐
- **Configuration** (50 settings):
- `g1nation.multiAgentEnabled` *(boolean)* _(default: `false`)_ — Enable Multi-Agent Workflow (Planner -> Researcher -> Writer) for complex tasks.
- `g1nation.memoryEnabled` *(boolean)* _(default: `true`)_ — Enable layered memory injection before each model response.
@@ -319,7 +322,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한
**Designed for High-Performance Decision Making.**
Copyright (C) **g1nation**. All rights reserved.
_Last auto-scan: 2026-05-16T04:18:55.379Z · signature `b1025fa`_
_Last auto-scan: 2026-05-16T13:04:11.625Z · signature `b9442404`_
<!-- ASTRA:AUTO-END -->
## Purpose
+261 -39
View File
@@ -1,11 +1,11 @@
{
"version": 1,
"generatedAt": "2026-05-16T04:18:55.389Z",
"generatedAt": "2026-05-16T13:04:11.635Z",
"files": {
"src/agent.ts": {
"mtimeMs": 1778902489000,
"size": 187410,
"lines": 3260,
"mtimeMs": 1778936503000,
"size": 201748,
"lines": 3509,
"role": "",
"imports": [
"src/utils",
@@ -259,9 +259,9 @@
"imports": []
},
"src/extension.ts": {
"mtimeMs": 1778902489000,
"size": 50938,
"lines": 972,
"mtimeMs": 1778935438000,
"size": 61216,
"lines": 1179,
"role": "",
"imports": [
"src/utils",
@@ -290,7 +290,8 @@
"src/retrieval",
"src/retrieval/lessonHelpers",
"src/skills/scopedBrainRetriever",
"src/integrations/telegram/conversationHistory"
"src/integrations/telegram/conversationHistory",
"src/features/calendar"
]
},
"src/features/approval/approvalPanelProvider.ts": {
@@ -321,10 +322,126 @@
"src/features/approval/approvalQueue"
]
},
"src/features/astraOffice/index.ts": {
"mtimeMs": 1778931477000,
"size": 789,
"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": 1778932441000,
"size": 7368,
"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": 1778931632000,
"size": 10631,
"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": 1778931707000,
"size": 6475,
"lines": 180,
"role": "Pixel Office layout 저장 스키마 — workspaceState 의 g1nation.pixelOfficeLayout 키 에 저장되는 객체의 런타임 validator + v1 → v2 migration. 옛 runtime.ts 의 isV2Snap() heuristic 을 정식 schema 로 격상. webview 에서 받는 즉시 한 번 통과시키",
"imports": []
},
"src/features/astraOffice/view/officeBody.ts": {
"mtimeMs": 1778931340000,
"size": 1804,
"lines": 21,
"role": "자동 분리: src/sidebarProvider.ts 3984-4001 에서 추출. 동작 동등.",
"imports": []
},
"src/features/astraOffice/view/officeStyles.ts": {
"mtimeMs": 1778931340000,
"size": 14309,
"lines": 121,
"role": "자동 분리: src/sidebarProvider.ts 3866-3982 에서 추출. 동작 동등. design doc: docs/ASTRAOFFICEREFACTOR.md",
"imports": []
},
"src/features/astraOffice/view/panelHtml.ts": {
"mtimeMs": 1778931468000,
"size": 923,
"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": 1778933617000,
"size": 58118,
"lines": 1254,
"role": "자동 분리: src/sidebarProvider.ts 4002-5116 (IIFE 본문) 에서 추출. 동작 동등. ${assets.derivedBase} placeholder 는 panelHtml 에서 .replace() 로 실제 값 주입. 다음 세션에서 OfficeSnapshot 기반으로 단계적으로 잘라낼 예정.",
"imports": []
},
"src/features/calendar/calendarApi.ts": {
"mtimeMs": 1778935879000,
"size": 8782,
"lines": 205,
"role": "Google Calendar API v3 — event create/list 호출. access token 은 caller 가 직접 주입한다. 만료 처리는 withFreshAccessToken 헬퍼가 refresh token 으로 갱신 → 호출 → 401 발생 시 한 번 더 갱신 + 재시도. 외부 라이브러리(googleapis) 안 씀 — Calendar ",
"imports": [
"src/features/calendar/oauth",
"src/features/calendar/calendarCache"
]
},
"src/features/calendar/calendarCache.ts": {
"mtimeMs": 1778935391000,
"size": 8115,
"lines": 170,
"role": "Google Calendar (iCal) 캐시 — fetch + parse + 회사 shared/calendarcache.md 에 저장. Connectorigin 의 googlecalendar.py 를 TypeScript / native fetch 로 옮김. OAuth 없음. 사용자가 Google Calendar 설정 → \"비공개 주소(iCal 형식)\" 복",
"imports": [
"src/features/calendar/icsParser"
]
},
"src/features/calendar/icsParser.ts": {
"mtimeMs": 1778934638000,
"size": 4823,
"lines": 114,
"role": "Minimal ICS parser — no library deps. Connectorigin 의 Python 버전을 그대로 옮겼고, 본 함수는 pure 라서 단위테스트가 쉽다. 처리 범위: - VEVENT 블록 추출 - line continuation (다음 줄이 공백 시작) 펼치기 - SUMMARY / DESCRIPTION / LOCATION / DTST",
"imports": []
},
"src/features/calendar/index.ts": {
"mtimeMs": 1778935400000,
"size": 561,
"lines": 32,
"role": "",
"imports": [
"src/features/calendar/icsParser",
"src/features/calendar/calendarCache",
"src/features/calendar/oauth",
"src/features/calendar/calendarApi"
]
},
"src/features/calendar/oauth.ts": {
"mtimeMs": 1778935851000,
"size": 10705,
"lines": 235,
"role": "Google OAuth 2.0 — loopback (Desktop app) 흐름. Google 은 Desktop 앱 OAuth client 에 대해 http://127.0.0.1:<ephemeralport> redirect URI 를 허용한다. 본 모듈은: 1. ephemeral port 에 일회용 HTTP 서버 띄움 2. 사용자 브라우저로 Google 로",
"imports": []
},
"src/features/company/agents.ts": {
"mtimeMs": 1778765657000,
"size": 13783,
"lines": 196,
"mtimeMs": 1778936611000,
"size": 15031,
"lines": 211,
"role": "기본 에이전트 로스터 — 1인 기업 모드의 출고 디폴트. 설계 의도: 소프트웨어/게임 개발 IT 회사의 1인 기업 운영을 가정. 한 사람이 기획 → 디자인 → 개발 → QA → 출시 → 운영/마케팅을 모두 책임질 때 필요한 직군을 빠짐없이 커버하되 역할이 겹치지 않게 분리한다. 직군 구분 (혼동 방지): - 기획자(business) : 무엇을 만들지 정의 ",
"imports": [
"src/features/company/types"
@@ -368,9 +485,9 @@
]
},
"src/features/company/dispatcher.ts": {
"mtimeMs": 1778902489000,
"size": 72121,
"lines": 1419,
"mtimeMs": 1778936524000,
"size": 73113,
"lines": 1435,
"role": "Sequential dispatcher for 1인 기업 모드. Drives one company \"turn\": user prompt → CEO planner (JSON {brief, tasks}) → for each task in plan: dispatch one specialist (sequentially) - build specialist prompt",
"imports": [
"src/core/services",
@@ -387,6 +504,8 @@
"src/features/company/telegramReport",
"src/features/company/types",
"src/features/company/intentAlignment",
"src/features/calendar",
"src/features/tasks",
"src/config",
"src/features/selfReflector/selfReflectorVerifier",
"src/features/selfReflector/selfReflectorExecution",
@@ -433,9 +552,9 @@
]
},
"src/features/company/pipelineTemplates.ts": {
"mtimeMs": 1778902489000,
"size": 13681,
"lines": 250,
"mtimeMs": 1778933936000,
"size": 15125,
"lines": 278,
"role": "Built-in pipeline templates for 1인 기업 모드. These are blueprints, not data — they're surfaced in the manage panel's \"템플릿에서 추가\" dropdown so a non-developer user can stamp out a working pipeline in one cl",
"imports": [
"src/features/company/types"
@@ -456,9 +575,9 @@
"imports": []
},
"src/features/company/promptBuilder.ts": {
"mtimeMs": 1778902489000,
"size": 14499,
"lines": 260,
"mtimeMs": 1778936588000,
"size": 18723,
"lines": 314,
"role": "System-prompt construction for company-mode agents. Each specialist needs a prompt that includes: - Their identity (name, role, specialty) + optional persona. - The action-tag contract (<createfile>, ",
"imports": [
"src/features/company/agents",
@@ -668,6 +787,40 @@
"src/lib/paths"
]
},
"src/features/sheets/index.ts": {
"mtimeMs": 1778935930000,
"size": 237,
"lines": 13,
"role": "",
"imports": [
"src/features/sheets/sheetsApi"
]
},
"src/features/sheets/sheetsApi.ts": {
"mtimeMs": 1778936110000,
"size": 7794,
"lines": 166,
"role": "Google Sheets API v4 — read / write / append. 토큰은 calendar 와 공유 (같은 OAuth 에 spreadsheets scope 포함). 별도 셋업 없음 — \"Astra: Google Calendar OAuth 연결\" 명령으로 한 번 로그인하면 둘 다 동작한다. 외부 라이브러리 안 씀 — Sheets API REST",
"imports": [
"src/features/calendar/calendarApi"
]
},
"src/features/tasks/index.ts": {
"mtimeMs": 1778936468000,
"size": 225,
"lines": 13,
"role": "",
"imports": [
"src/features/tasks/taskStore"
]
},
"src/features/tasks/taskStore.ts": {
"mtimeMs": 1778936462000,
"size": 9121,
"lines": 245,
"role": "Task tracker — .astra/company/shared/tasks.md 단일 파일. 설계 원칙: - 외부 DB 없이 사람이 읽을 수 있는 마크다운 테이블에 누적. git 으로 history 추적 가능. - 파싱은 regex 기반 (셀 구분자 |). 사용자가 손으로 편집해도 fault-tolerant. - 모든 task 는 안정적 id (t001,",
"imports": []
},
"src/integrations/telegram/conversationHistory.ts": {
"mtimeMs": 1778684811000,
"size": 6273,
@@ -1006,9 +1159,9 @@
]
},
"src/sidebar/chatHandlers.ts": {
"mtimeMs": 1778902489000,
"size": 34805,
"lines": 630,
"mtimeMs": 1778934077000,
"size": 37222,
"lines": 676,
"role": "",
"imports": [
"src/sidebarProvider",
@@ -1030,9 +1183,9 @@
]
},
"src/sidebarProvider.ts": {
"mtimeMs": 1778904191000,
"size": 245949,
"lines": 5505,
"mtimeMs": 1778933999000,
"size": 188454,
"lines": 4141,
"role": "",
"imports": [
"src/utils",
@@ -1053,6 +1206,7 @@
"src/features/projectArchitecture/intentDetector",
"src/features/company",
"src/core/services",
"src/features/astraOffice",
"src/features/company/dispatcher"
]
},
@@ -1113,9 +1267,9 @@
"imports": []
},
"src/utils.ts": {
"mtimeMs": 1778902489000,
"size": 12155,
"lines": 279,
"mtimeMs": 1778936575000,
"size": 15995,
"lines": 360,
"role": "",
"imports": [
"src/config",
@@ -1144,23 +1298,23 @@
"imports": []
},
"media/sidebar.css": {
"mtimeMs": 1778902489000,
"size": 85387,
"lines": 1986,
"mtimeMs": 1778934126000,
"size": 86702,
"lines": 2016,
"role": "Stylesheet",
"imports": []
},
"media/sidebar.html": {
"mtimeMs": 1778902489000,
"size": 33230,
"lines": 531,
"mtimeMs": 1778934094000,
"size": 34587,
"lines": 546,
"role": "Astra",
"imports": []
},
"media/sidebar.js": {
"mtimeMs": 1778902489000,
"size": 206892,
"lines": 3605,
"mtimeMs": 1778934151000,
"size": 211710,
"lines": 3657,
"role": "",
"imports": []
},
@@ -1191,6 +1345,16 @@
"src/retrieval/brainIndex"
]
},
"tests/calendarApi.test.ts": {
"mtimeMs": 1778935637000,
"size": 5103,
"lines": 131,
"role": "",
"imports": [
"src/features/calendar/calendarApi",
"src/agent"
]
},
"tests/contextManager.test.ts": {
"mtimeMs": 1778594523000,
"size": 6545,
@@ -1218,6 +1382,15 @@
"src/utils"
]
},
"tests/icsParser.test.ts": {
"mtimeMs": 1778934828000,
"size": 5011,
"lines": 134,
"role": "",
"imports": [
"src/features/calendar/icsParser"
]
},
"tests/integration_retrieval.test.ts": {
"mtimeMs": 1777949141000,
"size": 4017,
@@ -1274,6 +1447,17 @@
"role": "",
"imports": []
},
"tests/officeSchema.test.ts": {
"mtimeMs": 1778932509000,
"size": 9884,
"lines": 241,
"role": "",
"imports": [
"src/features/astraOffice/schema",
"src/features/astraOffice/view/layoutSchema",
"src/features/astraOffice/presenter"
]
},
"tests/paths.test.ts": {
"mtimeMs": 1778250990000,
"size": 2590,
@@ -1283,6 +1467,15 @@
"src/lib/paths"
]
},
"tests/pipelineTemplates.test.ts": {
"mtimeMs": 1778934174000,
"size": 2984,
"lines": 69,
"role": "",
"imports": [
"src/features/company/pipelineTemplates"
]
},
"tests/projectChronicle.test.ts": {
"mtimeMs": 1778169995000,
"size": 8359,
@@ -1356,6 +1549,16 @@
"src/features/secondBrainTrace"
]
},
"tests/sheetsApi.test.ts": {
"mtimeMs": 1778936029000,
"size": 3913,
"lines": 113,
"role": "",
"imports": [
"src/features/sheets/sheetsApi",
"src/agent"
]
},
"tests/skillInjectionService.test.ts": {
"mtimeMs": 1778681774000,
"size": 6741,
@@ -1383,6 +1586,16 @@
"src/system/specs"
]
},
"tests/taskStore.test.ts": {
"mtimeMs": 1778936645000,
"size": 7226,
"lines": 185,
"role": "",
"imports": [
"src/features/tasks/taskStore",
"src/agent"
]
},
"tests/telegramBot.test.ts": {
"mtimeMs": 1778253785000,
"size": 13012,
@@ -1455,6 +1668,15 @@
"role": "",
"imports": []
},
"docs/ASTRA_OFFICE_REFACTOR.md": {
"mtimeMs": 1778931177000,
"size": 9395,
"lines": 198,
"role": "Astra Office Refactor — Design Doc",
"imports": [
"docs/features/astraOffice"
]
},
"docs/Advanced_Features_Implementation_Guide.md": {
"mtimeMs": 1777808065000,
"size": 1804,
@@ -1638,7 +1860,7 @@
"imports": []
},
"docs/records/ConnectAI/chronicle.config.json": {
"mtimeMs": 1778902789000,
"mtimeMs": 1778932145000,
"size": 416,
"lines": 11,
"role": "JSON configuration",
@@ -1,5 +1,5 @@
{
"result": "Final report with inconsistencies. This should be long enough to pass validation.",
"createdAt": 1778905142810,
"createdAt": 1778936679275,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
"createdAt": 1778905142809,
"createdAt": 1778936679275,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "Detailed Execution Plan: 1. Research 2. Analyze 3. Write report with high quality.",
"createdAt": 1778905142808,
"createdAt": 1778936679274,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "---\nid: stress_conflict_1778905142797\ndate: 2026-05-16T04:19:02.810Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\nFinal report with inconsistencies. This should be long enough to pass validation.\n\nFinal report with inconsistencies. This should be long enough to pass validation.\n\n---\n## 💡 Astra의 선제적 제안 (Proactive Next Actions)\nFinal report with inconsistencies. This should be long enough to pass validation.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `60/100` | ⚠️ Medium |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[PLANNER]** 전략 수립 중... (11ms)\n- **[RESEARCHER]** 핵심 정보 수집 및 분석 중... (1ms)\n- **[WRITER]** 최종 리포트 작성 및 편집 중... (1ms)\n",
"createdAt": 1778905142810,
"result": "---\nid: stress_conflict_1778936679262\ndate: 2026-05-16T13:04:39.276Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\nFinal report with inconsistencies. This should be long enough to pass validation.\n\nFinal report with inconsistencies. This should be long enough to pass validation.\n\n---\n## 💡 Astra의 선제적 제안 (Proactive Next Actions)\nFinal report with inconsistencies. This should be long enough to pass validation.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `60/100` | ⚠️ Medium |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[PLANNER]** 전략 수립 중... (12ms)\n- **[RESEARCHER]** 핵심 정보 수집 및 분석 중... (0ms)\n- **[WRITER]** 최종 리포트 작성 및 편집 중... (1ms)\n",
"createdAt": 1778936679276,
"modelVersion": "unknown"
}
@@ -1,8 +1,8 @@
{
"missionId": "stress_conflict_1778905142797",
"missionId": "stress_conflict_1778936679262",
"status": "completed",
"startTime": "2026-05-16T04:19:02.797Z",
"totalElapsedMs": 13,
"startTime": "2026-05-16T13:04:39.262Z",
"totalElapsedMs": 14,
"results": {
"planner": "Detailed Execution Plan: 1. Research 2. Analyze 3. Write report with high quality.",
"researcher": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
@@ -16,30 +16,30 @@
{
"from": "idle",
"to": "planner",
"durationMs": 11,
"durationMs": 12,
"message": "전략 수립 중...",
"ts": "2026-05-16T04:19:02.808Z"
"ts": "2026-05-16T13:04:39.274Z"
},
{
"from": "planner",
"to": "researcher",
"durationMs": 1,
"durationMs": 0,
"message": "핵심 정보 수집 및 분석 중...",
"ts": "2026-05-16T04:19:02.809Z"
"ts": "2026-05-16T13:04:39.274Z"
},
{
"from": "researcher",
"to": "writer",
"durationMs": 1,
"message": "최종 리포트 작성 및 편집 중...",
"ts": "2026-05-16T04:19:02.810Z"
"ts": "2026-05-16T13:04:39.275Z"
},
{
"from": "writer",
"to": "completed",
"durationMs": 0,
"durationMs": 1,
"message": "미션 완료",
"ts": "2026-05-16T04:19:02.810Z"
"ts": "2026-05-16T13:04:39.276Z"
}
],
"resilienceMetrics": {