v2.2.19: Cloud Model Providers Support (OpenRouter, Anthropic, Gemini)
This commit is contained in:
@@ -3,15 +3,15 @@
|
||||
<!-- ASTRA:AUTO-START -->
|
||||
|
||||
## Snapshot
|
||||
- **Workspace**: `ConnectAI` `v2.2.17` _(absolute path varies by environment; resolved from the active VS Code workspace)_
|
||||
- **Workspace**: `ConnectAI` `v2.2.18` _(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**: 250 source files, ~51,189 lines across 5 top-level modules.
|
||||
- **Stats**: 257 source files, ~52,121 lines across 5 top-level modules.
|
||||
|
||||
## Last Refresh
|
||||
- **Time**: 2026-05-16T13:51:21.324Z
|
||||
- **Files newly analysed**: 8
|
||||
- **Files reused from cache**: 242
|
||||
- **Time**: 2026-05-16T14:34:03.239Z
|
||||
- **Files newly analysed**: 3
|
||||
- **Files reused from cache**: 254
|
||||
|
||||
## Directory Map
|
||||
```mermaid
|
||||
@@ -37,7 +37,7 @@ mindmap
|
||||
> Arrows: which top-level module imports from which.
|
||||
```mermaid
|
||||
flowchart LR
|
||||
src["src/<br/>127 files"]
|
||||
src["src/<br/>134 files"]
|
||||
media["media/<br/>6 files"]
|
||||
tests["tests/<br/>33 files"]
|
||||
core_py["core_py/<br/>6 files"]
|
||||
@@ -64,10 +64,10 @@ flowchart LR
|
||||
|
||||
## Modules
|
||||
|
||||
### `src/` — 127 files, ~34,824 lines
|
||||
### `src/` — 134 files, ~35,756 lines
|
||||
|
||||
**Sub-directories**
|
||||
- `src/features/` (54) — Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel H
|
||||
- `src/features/` (61) — 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
|
||||
@@ -87,25 +87,25 @@ flowchart LR
|
||||
- `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` (4149 lines)
|
||||
- `src/sidebarProvider.ts` (4165 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` (3509 lines)
|
||||
- `src/agent.ts` (3579 lines)
|
||||
- `src/features/providers/types.ts` (63 lines) — Cloud LLM provider routing — model id prefix → provider id 매핑. Prefix 규칙: openrouter:anthropic/claude-3.5-sonnet → { provider: 'openrouter', model: 'anthropic/claude-3.5-sonnet' } anthropic:claude-3-5
|
||||
- `src/lib/engine.ts` (906 lines)
|
||||
- `src/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/providers/providerConfig.ts` (78 lines) — Provider 별 API key + enable 토글 저장소. 설계: - API key 자체는 vscode.SecretStorage (secrets) 에 — settings.json / Settings Sync 침범 안 받음. - enabled 토글은 일반 settings (g1nation.providers.<id>.enabled) — 사용자가 패널에서
|
||||
- `src/features/approval/approvalQueue.ts` (129 lines)
|
||||
- `src/integrations/telegram/telegramClient.ts` (154 lines)
|
||||
- `src/features/astraOffice/view/runtime.ts` (1564 lines) — 자동 분리: src/sidebarProvider.ts 4002-5116 (IIFE 본문) 에서 추출. 동작 동등. ${assets.derivedBase} placeholder 는 panelHtml 에서 .replace() 로 실제 값 주입. 다음 세션에서 OfficeSnapshot 기반으로 단계적으로 잘라낼 예정.
|
||||
- `src/features/astraOffice/view/runtime.ts` (1765 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/extension.ts` (1202 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
|
||||
|
||||
### `media/` — 6 files, ~7,011 lines
|
||||
|
||||
@@ -224,7 +224,7 @@ flowchart LR
|
||||
- `g1nation.calendar.connect` — Astra: Google Calendar (iCal) 연결 📅
|
||||
- `g1nation.calendar.refresh` — Astra: Google Calendar 새로고침 📅
|
||||
- `g1nation.calendar.connectOAuth` — Astra: Google Calendar OAuth 연결 (쓰기) 🔐
|
||||
- **Configuration** (56 settings):
|
||||
- **Configuration** (62 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.
|
||||
- `g1nation.memoryShortTermMessages` *(number)* _(default: `8`)_ — Number of recent conversation messages included as short-term memory.
|
||||
@@ -281,6 +281,11 @@ flowchart LR
|
||||
- `g1nation.google.defaultEventDurationMinutes` *(number)* _(default: `60`)_ — end / duration 둘 다 없는 일정의 기본 길이 (분). agent 가 회의록에서 시각만 추출하고 종료 시각은 명시 안 했을 때 적용.
|
||||
- `g1nation.google.icalUrl` *(string)* _(default: `""`)_
|
||||
- `g1nation.google.icalDaysAhead` *(number)* _(default: `14`)_ — iCal 캐시에 포함할 다가오는 일정 기간 (일). default 14 = 2주치.
|
||||
- `g1nation.providers.openrouter.enabled` *(boolean)* _(default: `false`)_ — OpenRouter cloud provider 활성화 — Claude/Gemini/GPT 등 100+ 모델을 OpenAI 호환 API 로 사용. API key 는 Astra Settings 패널에서 등록 (Secret Storage 사용, settings.json 비저장).
|
||||
- `g1nation.providers.openrouter.defaultModel` *(string)* _(default: `""`)_ — OpenRouter 의 기본 모델 (예: 'anthropic/claude-3.5-sonnet'). 모델 선택 시 'openrouter:<model>' 형식으로 사이드바 dropdown 에 표시.
|
||||
- `g1nation.providers.anthropic.enabled` *(boolean)* _(default: `false`)_ — Anthropic Claude 직접 API 활성화. OpenRouter 보다 마진 적고 prompt caching 등 native 기능 사용 가능. API key 는 Secret Storage.
|
||||
- `g1nation.providers.anthropic.defaultModel` *(string)* _(default: `"claude-3-5-sonnet-20241022"`)_ — Anthropic 의 기본 모델. 예: 'claude-3-5-sonnet-20241022', 'claude-3-5-haiku-20241022'.
|
||||
- _…and 2 more_
|
||||
|
||||
## Dependencies
|
||||
- **Runtime** (2): `@lmstudio/sdk`, `pdf-parse`
|
||||
@@ -328,7 +333,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한
|
||||
**Designed for High-Performance Decision Making.**
|
||||
Copyright (C) **g1nation**. All rights reserved.
|
||||
|
||||
_Last auto-scan: 2026-05-16T13:51:21.324Z · signature `ebf5ecaf`_
|
||||
_Last auto-scan: 2026-05-16T14:34:03.239Z · signature `857a73ab`_
|
||||
<!-- ASTRA:AUTO-END -->
|
||||
|
||||
## Purpose
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"version": 1,
|
||||
"generatedAt": "2026-05-16T13:51:21.336Z",
|
||||
"generatedAt": "2026-05-16T14:34:03.249Z",
|
||||
"files": {
|
||||
"src/agent.ts": {
|
||||
"mtimeMs": 1778936503000,
|
||||
"size": 201748,
|
||||
"lines": 3509,
|
||||
"mtimeMs": 1778941597000,
|
||||
"size": 205909,
|
||||
"lines": 3579,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/utils",
|
||||
@@ -34,7 +34,8 @@
|
||||
"src/core/responseRecovery",
|
||||
"src/lib/contextManager",
|
||||
"src/lmstudio/streamer",
|
||||
"src/features/approval/approvalQueue"
|
||||
"src/features/approval/approvalQueue",
|
||||
"src/features/providers"
|
||||
]
|
||||
},
|
||||
"src/agents/AgentWorkflowManager.ts": {
|
||||
@@ -387,9 +388,9 @@
|
||||
]
|
||||
},
|
||||
"src/features/astraOffice/view/runtime.ts": {
|
||||
"mtimeMs": 1778939265000,
|
||||
"size": 73382,
|
||||
"lines": 1564,
|
||||
"mtimeMs": 1778941900000,
|
||||
"size": 82015,
|
||||
"lines": 1765,
|
||||
"role": "자동 분리: src/sidebarProvider.ts 4002-5116 (IIFE 본문) 에서 추출. 동작 동등. ${assets.derivedBase} placeholder 는 panelHtml 에서 .replace() 로 실제 값 주입. 다음 세션에서 OfficeSnapshot 기반으로 단계적으로 잘라낼 예정.",
|
||||
"imports": []
|
||||
},
|
||||
@@ -731,6 +732,74 @@
|
||||
"role": "",
|
||||
"imports": []
|
||||
},
|
||||
"src/features/providers/anthropic.ts": {
|
||||
"mtimeMs": 1778941456000,
|
||||
"size": 4111,
|
||||
"lines": 108,
|
||||
"role": "Anthropic Messages API adapter. 차이점 (OpenAI 와): 1. base URL: https://api.anthropic.com/v1 2. 인증: x-api-key: <key> + anthropic-version: 2023-06-01 3. system prompt 는 messages 가 아니라 top-level system 필드 ",
|
||||
"imports": [
|
||||
"src/features/providers/types",
|
||||
"src/features/providers/providerConfig",
|
||||
"src/features/providers/streamHelpers"
|
||||
]
|
||||
},
|
||||
"src/features/providers/gemini.ts": {
|
||||
"mtimeMs": 1778941478000,
|
||||
"size": 4326,
|
||||
"lines": 108,
|
||||
"role": "Google Gemini Generative Language API adapter. 차이점 (OpenAI 와): 1. base URL: https://generativelanguage.googleapis.com/v1beta 2. 인증: ?key=<api key> (query parameter) 3. 메시지 형식: contents: [{role: 'user'",
|
||||
"imports": [
|
||||
"src/features/providers/types",
|
||||
"src/features/providers/providerConfig",
|
||||
"src/features/providers/streamHelpers"
|
||||
]
|
||||
},
|
||||
"src/features/providers/index.ts": {
|
||||
"mtimeMs": 1778941521000,
|
||||
"size": 3242,
|
||||
"lines": 69,
|
||||
"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/providerConfig"
|
||||
]
|
||||
},
|
||||
"src/features/providers/openrouter.ts": {
|
||||
"mtimeMs": 1778941431000,
|
||||
"size": 2673,
|
||||
"lines": 75,
|
||||
"role": "OpenRouter — OpenAI 호환 API. 별도 transform 없이 fetch Response 를 그대로 반환. Base: https://openrouter.ai/api/v1 POST /chat/completions — OpenAI 형식 그대로. stream:true 면 SSE. GET /models — 사용 가능 모델 목록. 인증: Author",
|
||||
"imports": [
|
||||
"src/features/providers/types",
|
||||
"src/features/providers/providerConfig"
|
||||
]
|
||||
},
|
||||
"src/features/providers/providerConfig.ts": {
|
||||
"mtimeMs": 1778941498000,
|
||||
"size": 2683,
|
||||
"lines": 78,
|
||||
"role": "Provider 별 API key + enable 토글 저장소. 설계: - API key 자체는 vscode.SecretStorage (secrets) 에 — settings.json / Settings Sync 침범 안 받음. - enabled 토글은 일반 settings (g1nation.providers.<id>.enabled) — 사용자가 패널에서 ",
|
||||
"imports": [
|
||||
"src/features/providers/types"
|
||||
]
|
||||
},
|
||||
"src/features/providers/streamHelpers.ts": {
|
||||
"mtimeMs": 1778941413000,
|
||||
"size": 5904,
|
||||
"lines": 144,
|
||||
"role": "Stream transformer — provider 별 SSE 형식을 OpenAI 호환 SSE 로 변환. 이렇게 하면 agent.ts 의 기존 SSE 파서 (data: {...delta...} 형식 가정) 가 변경 없이 모든 provider 출력을 같은 코드 경로로 소비할 수 있다. 신규 provider 가 들어와도 adapter 하나만 추가하면 됨 (c",
|
||||
"imports": []
|
||||
},
|
||||
"src/features/providers/types.ts": {
|
||||
"mtimeMs": 1778941377000,
|
||||
"size": 2370,
|
||||
"lines": 63,
|
||||
"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": []
|
||||
},
|
||||
"src/features/secondBrainTrace.ts": {
|
||||
"mtimeMs": 1778248166000,
|
||||
"size": 37475,
|
||||
@@ -1184,9 +1253,9 @@
|
||||
]
|
||||
},
|
||||
"src/sidebarProvider.ts": {
|
||||
"mtimeMs": 1778937445000,
|
||||
"size": 189218,
|
||||
"lines": 4149,
|
||||
"mtimeMs": 1778941620000,
|
||||
"size": 189927,
|
||||
"lines": 4165,
|
||||
"role": "",
|
||||
"imports": [
|
||||
"src/utils",
|
||||
@@ -1861,7 +1930,7 @@
|
||||
"imports": []
|
||||
},
|
||||
"docs/records/ConnectAI/chronicle.config.json": {
|
||||
"mtimeMs": 1778937757000,
|
||||
"mtimeMs": 1778940893000,
|
||||
"size": 416,
|
||||
"lines": 11,
|
||||
"role": "JSON configuration",
|
||||
|
||||
Reference in New Issue
Block a user