# 환경 정보 (GCP server-main)

## 현재 위치

이 Oracle은 GCP server-main에서 실행된다.
DB, Data API는 로컬에 있으므로 SSH 터널 없이 직접 접근 가능.
작업자 터미널은 GCP Portal(localhost:7200)에 에이전트 폴더 기반으로 생성한다.
Mac Mini Portal(localhost:7201)은 마스터 전용 웹터미널로 유지.

## 서비스 URL

- Data API: http://localhost:14901
- Portal: http://localhost:7200
- Taskboard: http://localhost:3006
- Stargram: http://localhost:3005

## Data API (localhost)

```bash
# 에이전트 목록
curl -s http://localhost:14901/api/agents | jq length
# WO 생성
curl -s -X POST http://localhost:14901/api/intake -H "Content-Type: application/json" -d '{
  "sender": "oracle",
  "message": "작업 내용",
  "classification": "PROJECT_WORK",
  "domain": "engineering",
  "target_agent_id": "agt_dept_engineering"
}'
# WO 조회
curl -s "http://localhost:14901/api/work-orders?limit=5" | jq '.[] | {status, executor_alias, domain}'
# 결과 보고서
curl -s "http://localhost:14901/api/result-reports?work_order_id={wo_id}" | jq '.[0].summary'
# 에이전트 메모리
curl -s http://localhost:14901/api/memory-items | jq length
# 산출물
curl -s "http://localhost:14901/api/artifacts?limit=5" | jq '.[] | {id, title, type}'
# 도구 레지스트리
curl -s http://localhost:14901/api/tools | jq '.[] | {name, category, server}'
```

## GCP Portal — 작업자 터미널 (localhost:7200)

작업자 터미널은 GCP Portal에 에이전트 폴더 기반으로 생성한다.

```bash
# 터미널 목록
curl -s 'http://localhost:7200/api/terminals?token=0205' | jq '.terminals[] | {id, name, origin}'
# 작업자 터미널 생성 (에이전트 폴더 기반)
curl -s -X POST 'http://localhost:7200/api/terminals?token=0205' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":"[에이전트명]",
    "subtitle":"[프로젝트명] · [역할]",
    "path":"[프로젝트폴더]/agents/[에이전트명]",
    "origin":"system",
    "autoCommand":"claude --chrome --dangerously-skip-permissions",
    "telegram":{"chatId":"<portal-settings.json 확인 후 기입>"}
  }'
# 작업 전달 (webhook)
curl -s -X POST "http://localhost:7200/api/webhook/{terminalId}?token=0205" \
  -H "Content-Type: application/json" -d '{"command":"작업 지시","skipWait":true}'
# 세션 종료 + 삭제
curl -s -X POST "http://localhost:7200/api/terminals/{terminalId}/kill?token=0205"
```

**주의사항:**
- `localhost:7200` = GCP Portal (작업자 터미널 생성)
- `localhost:7201` = Mac Mini Portal SSH 터널 (마스터 전용 웹터미널)
- Worker path: `[프로젝트폴더]/agents/[에이전트명]` (에이전트 폴더 기반)
- autoCommand: `claude --chrome --dangerously-skip-permissions`
- telegram chatId: portal-settings.json에서 터미널별 관리 (하드코딩 금지)
- sys 터미널은 12시간 미사용 시 자동 정리

### 에이전트 폴더 경로 매핑

W 프로젝트:
- `/home/llm/projects/wgolf/agents/builder/` — Builder (구현/코딩)
- `/home/llm/projects/wgolf/agents/planner/` — Planner (설계/기획)
- `/home/llm/projects/wgolf/agents/researcher/` — Researcher (조사/분석)
- `/home/llm/projects/wgolf/agents/deployer/` — Deployer (배포/인프라)
- `/home/llm/projects/wgolf/agents/verifier/` — Verifier (검증/QA)

Starian:
- `/home/llm/starian/agents/kai/` — Kai (유지보수)
- `/home/llm/starian/agents/eno/` — Eno (엔지니어링)
- `/home/llm/starian/agents/pip/` — Pip (PRD)
- `/home/llm/starian/agents/qua/` — Qua (QA)
- `/home/llm/starian/agents/res/` — Res (리서치/조사분석)
- `/home/llm/starian/agents/craw/` — Craw (크롤링/데이터수집)
- `/home/llm/starian/system/Edu/` — Edu (교육)

## Mac Mini Portal (마스터 전용 — localhost:7201)

**포트 7201** = SSH 터널로 Mac Mini Portal(macmini:7200)에 연결됨.
마스터 전용 웹터미널. Oracle은 여기에 작업자 터미널을 생성하지 않는다.

```bash
# 상태 확인
curl -s -o /dev/null -w '%{http_code}' http://localhost:7201/
```

## DB 직접 접근 (GCP 로컬)

```bash
psql -h localhost -p 5434 -U masterplan -d masterplan
```

## 서비스 포트 매핑 (실행 경로 포함 — 반드시 확인 후 답변)

**⚠️ PM2 이름과 실제 프로젝트가 다를 수 있다. 서비스를 언급할 때 반드시 실제 경로를 확인한다.**
**확인 방법: `ss -tlnp | grep <port>` → PID 확인 → `ps aux | grep <PID>`**

GCP 로컬:
- `3000` — Oracle Platform (경로: `/home/llm/projects/oracle-platform/`, oracle.starian.us)
- `7200` — GCP Portal (경로: `/home/llm/.starian/portal/`, server-main.starian.us)
- `14900` — Gemini API Proxy (data-api, uvicorn Python)
- `14901` — Masterplan Data API (REST, SSE, DB workers, Node.js)
- `7201` — Mac Mini Portal SSH 터널 (macmini.starian.us)
- `5434` — PostgreSQL 17 (masterplan DB)
- `3005` — 스타그램 (경로: `/home/llm/projects/stargram/`, stargram.starian.us)
- `3006` — Taskboard (경로: `/home/llm/projects/taskboard/`, starian.us)
- `6379` — Redis

**혼동 주의:**
- `/home/llm/.starian/portal/` = GCP Portal 실행본 (port 7200)
- `/home/llm/webterminal/` = simple-webterminal (별개 서비스, Portal 아님)
- `/home/llm/starian/portal/` = Portal 소스 코드 (삭제 예정, 실행 중인 서비스 아님)

Mac Mini (SSH 경유):
- `7200` — Mac Mini Portal 웹터미널 (macmini.starian.us)
- `3004` — 빌딩 시각화 (macmini.platformmakers.org)
- `14902` — kmsg-api (kakao.starian.us)

## 도메인 매핑

- `oracle.starian.us` → Oracle 통합 플랫폼 (GCP:3000, `/home/llm/projects/oracle-platform/`)
- `server-main.starian.us` → GCP Portal (GCP:7200, `/home/llm/.starian/portal/`)
- `starian.us` → Taskboard (GCP:3006)
- `stargram.starian.us` → 스타그램 (GCP:3005)
- `macmini.starian.us` → Mac Mini Portal (Mac Mini:7200)
- `macmini.platformmakers.org` → 빌딩 프로젝트 (Mac Mini:3004)
- `kakao.starian.us` → kmsg-api (Mac Mini:14902)
- `data-api.starian.us` → Gemini API Proxy (GCP:14900)
- `n8n.starian.us` → n8n 자동화 (GCP:5678)

## SSH 호스트 별칭

```bash
ssh macmini          # Mac Mini M4 (whitegun, macOS)
ssh sm-s936n         # Galaxy S25+ (Termux)
ssh hp-omen-wsl      # HP Omen WSL2 (pasia) — RTX 5070 GPU
ssh hp-omen-win      # HP Omen Windows (pasia)
```

## kmsg (KakaoTalk CLI — Mac Mini 경유)

Mac Mini 전용. Accessibility API를 통한 KakaoTalk 메시지 전송.

```bash
ssh macmini "kmsg send '채팅방이름' '메시지 내용'"
ssh macmini "kmsg chats --limit 10"
```

## Galaxy S25+ Termux API

```bash
ssh sm-s936n "termux-sms-send -n 010XXXXXXXX '메시지'"
ssh sm-s936n "termux-camera-photo ~/photo.jpg"
ssh sm-s936n "termux-location"
ssh sm-s936n "termux-tts-speak '텍스트'"
```

## HP Omen GPU (RTX 5070)

```bash
ssh -tt hp-omen-wsl "bash --norc -c 'nvidia-smi'"
```

## Scrapling 크롤링 도구 (GCP server-main)

웹 크롤링/스크래핑 도구. Craw(agt_crawler)에게 WO 위임 시 사용.
경로: `/home/llm/tools/scrapling/`
Python venv: `/home/llm/tools/scrapling/.venv/bin/python3`

```bash
# 단일 페이지 스크래핑
/home/llm/tools/scrapling/.venv/bin/python3 /home/llm/tools/scrapling/scrape.py <url>
# 옵션: --selector CSS, --format json|text|md, --stealth (안티봇), --dynamic (JS렌더링)

# 검색 + 크롤링
/home/llm/tools/scrapling/.venv/bin/python3 /home/llm/tools/scrapling/search_crawler.py '검색어'
# 옵션: --engine google|naver, --top N, --extract (본문추출), --format json|text

# 고급 안티봇 (DynamicFetcher)
/home/llm/tools/scrapling/.venv/bin/python3 /home/llm/tools/scrapling/stealth_fetch.py <url>
# 옵션: --wait-for CSS, --scroll, --screenshot path, --format json|text
```

## launchd 서비스 관리 (Mac Mini, SSH 경유)

```bash
ssh macmini "launchctl list | grep starian"
ssh macmini "launchctl kickstart -k gui/501/us.starian.masterplan-data-api"
ssh macmini "launchctl kickstart -k gui/501/us.starian.portal"
```

## 도구 레지스트리 (DB)

```bash
curl -s http://localhost:14901/api/tools | jq '.[] | {name, category, server}'
curl -s "http://localhost:14901/api/tools?search=video"     # 키워드 검색
curl -s -X POST http://localhost:14901/api/tools \
  -H "Content-Type: application/json" \
  -d '{"name":"도구명","category":"카테고리","description":"용도","server":"서버별칭","path":"경로","usage_example":"사용법"}'
```
