v2.2.15: Astra Office Refactor & Multi-Service Integration
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user