Files
gravity_control/.agents/references/tech-stack.md
Variet Worker e7631177f8 refactor(cleanup): v0.5.0 Collector 제거 + dead code 정리 + HttpBridgeContext 버그 수정
- DELETE collector.py (523줄)
- main.py: BOT_MODE=remote 분기 제거
- gateway.py: Collector REST 6개 endpoint 제거 (311→168줄)
- bridge.py: RemoteTransport 제거 (480→270줄)
- config.py: REMOTE_BRIDGE_URL 제거
- extension.ts: dead code 4개 + stale module vars 제거
- step-probe.ts: getStepProbeContext() 추가, autoApproveEnabled 제거
- FIX: HttpBridgeContext stale primitive (getter 패턴으로 수정)
- ADD: extension.log rotation (10MB→2MB tail)
- docs: architecture.md, tech-stack.md, known-issues.md 업데이트
2026-03-18 11:08:59 +09:00

100 lines
3.6 KiB
Markdown

# Tech Stack
> AI 에이전트는 구현 전 이 문서를 확인하여 올바른 기술/버전을 사용합니다.
## 언어 & 런타임
| 항목 | 버전 | 경로/비고 |
|------|------|-----------|
| Python | 3.12 (miniforge3) | `C:\ProgramData\miniforge3\envs\gravity_control\python.exe` |
| Node.js | 시스템 설치 | `node`, `npm` (PowerShell에서 `cmd /c npm` 권장) |
| TypeScript | 5.3+ | `extension/src/*.ts``tsc``extension/out/*.js` |
> [!IMPORTANT]
> Python은 **반드시** 위 miniforge3 경로를 사용. WindowsApps의 python stub은 동작하지 않음.
## 프레임워크 & 라이브러리
### Python (서버)
| 패키지 | 버전 | 용도 |
|--------|------|------|
| discord.py | 2.x | Discord 봇 (슬래시 명령, 버튼 UI, 이벤트) |
| aiohttp | 3.x | Gateway HTTP 서버 + WebSocket endpoint |
| watchdog | - | Brain 디렉토리 파일시스템 감시 |
| python-dotenv | - | .env 파일 로드 |
| PyJWT | - | ❌ 미사용 (자체 HMAC-SHA256 구현) |
### TypeScript (Extension)
| 패키지 | 용도 |
|--------|------|
| @types/vscode | VS Code Extension API 타입 |
| @types/node | Node.js 타입 |
| typescript | 컴파일러 |
| ws | WebSocket Hub 연결 (`.vscodeignore``!node_modules/ws/**` 필수) |
| antigravity-sdk | AG RPC 호출 (로컬 임베드 `sdk/`) |
## 패키지 관리
| 측 | 도구 | 파일 |
|----|------|------|
| Python | pip | `requirements.txt` |
| Extension | npm | `extension/package.json` |
## 개발 도구 & 명령어
| 작업 | 명령어 |
|------|--------|
| **봇 실행** | `C:\ProgramData\miniforge3\envs\gravity_control\python.exe main.py` |
| **봇 실행 (gateway)** | `.env`에서 `BOT_MODE=gateway` 설정 후 위 명령 |
| **Extension 구문 검사** | `cd extension && npx tsc --noEmit` |
| **Extension 컴파일** | `cd extension && cmd /c npm run compile` |
| **Extension VSIX** | `cd extension && npx @vscode/vsce package --no-dependencies` |
| **Python 구문 검사** | `python -c "import ast; [ast.parse(open(f).read()) for f in ['bot.py','hub.py',...]]"` |
| **Hub WS 테스트** | `python tests/test_ws_hub.py` (서버 기동 상태에서) |
## 환경 변수 (.env)
### 필수
| 변수명 | 용도 | 기본값 |
|--------|------|--------|
| DISCORD_TOKEN | Discord 봇 토큰 | (필수) |
| DISCORD_GUILD_ID | Discord 서버 ID | (필수) |
### 선택
| 변수명 | 용도 | 기본값 |
|--------|------|--------|
| BRAIN_PATH | AG 브레인 경로 | `~/.gemini/antigravity/brain` |
| BOT_MODE | `local` / `gateway` | `local` |
| DEBOUNCE_SECONDS | Watcher 디바운스 간격 | `5` |
| PROJECT_NAME | 프로젝트 이름 | `gravity_control` |
### Gateway 모드 전용
| 변수명 | 용도 | 기본값 |
|--------|------|--------|
| GATEWAY_PORT | Gateway HTTP/WS 포트 | `8585` |
| GATEWAY_API_KEY | REST API 인증 키 | (미설정 시 인증 미사용) |
| GRAVITY_HUB_SECRET | WS Hub JWT 서명 시크릿 (64char hex) | (미설정 시 인증 생략) |
| GRAVITY_REGISTRATION_CODE | Extension 등록 코드 (32char hex) | (미설정 시 인증 생략) |
## Extension VS Code 설정
| 설정 키 | 용도 |
|---------|------|
| `gravityBridge.bridgePath` | Bridge 디렉토리 경로 |
| `gravityBridge.projectName` | 프로젝트 이름 (기본: git remote) |
| `gravityBridge.hubUrl` | Hub WS URL (예: `ws://localhost:8585/ws`) |
| `gravityBridge.registrationCode` | Hub 등록 코드 |
## 빌드 산출물
| 항목 | 경로 | 설명 |
|------|------|------|
| VSIX | `extension/gravity-bridge-{ver}.vsix` | VS Code 확장 패키지 |
| JS 출력 | `extension/out/*.js` | TypeScript 컴파일 결과물 |
| SDK 복사 | `extension/out/sdk/` | compile 시 자동 복사 |