51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
/**
|
|
* ============================================================
|
|
* 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, '..');
|
|
}
|