/** * ============================================================ * Astra Path Resolver (경로 해결기) * * Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. * 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토리를 해결하여, * 사용자 프로젝트 루트가 아닌 ConnectAI 패키지 내부에 데이터를 저장합니다. * * 이 모듈은 AAL(Astra Autonomous Loop) 프로토콜의 기반이 됩니다. * ============================================================ */ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; let _extensionRootPath: string | null = null; /** * 확장 프로그램 활성화 시 1회 호출하여 extension root를 설정합니다. * extension.ts의 activate()에서 호출되어야 합니다. */ export function initAstraPathResolver(context: vscode.ExtensionContext): void { _extensionRootPath = context.extensionUri.fsPath; } /** * .astra 데이터 디렉토리의 절대 경로를 반환합니다. * 디렉토리가 없으면 자동 생성합니다. * * @returns ConnectAI/.astra/ 의 절대 경로 */ export function getAstraDataDir(): string { const root = _extensionRootPath ?? _fallbackExtensionRoot(); const astraDir = path.join(root, '.astra'); if (!fs.existsSync(astraDir)) { fs.mkdirSync(astraDir, { recursive: true }); } return astraDir; } /** * extensionUri가 아직 설정되지 않은 경우의 fallback. * __dirname 기반으로 ConnectAI 루트를 추정합니다. */ function _fallbackExtensionRoot(): string { // esbuild로 번들된 out/extension.js → 상위 디렉토리가 ConnectAI 루트 return path.resolve(__dirname, '..'); }