chore: update graph view scale and set workspace default tab to graph view

This commit is contained in:
Antigravity Agent
2026-05-08 00:47:14 +09:00
parent 30f124fdb7
commit c8e983afe7
1720 changed files with 9189 additions and 62873 deletions
@@ -0,0 +1,34 @@
# 📅 Google Calendar
비서가 본인의 Google Calendar와 양방향 연결됩니다 — 다가오는 일정 자동 동기화 + 마감일(due) 있는 추적 작업을 자동으로 캘린더에 등록 (5분 전·1시간 전 알림 자동).
## 무엇을 추가로 하나요? (vs iCal 읽기 전용)
- ✍️ **자동 일정 생성** — 추적기에 due 들어가면 즉시 캘린더에 일정 만듦
- 🔁 일정 수정·삭제도 가능 (작업 완료/취소 시 캘린더 정리)
- 🔔 알림 자동 셋팅 (5분 전, 1시간 전 팝업)
- 📥 동시에 읽기도 가능 (별도 iCal 셋업 불필요)
## 셋업 (한 번만, 5~10분)
명령 팔레트 → **`Connect AI: Google Calendar 자동 일정 연결 📅`** 실행하면 마법사가 안내합니다:
1. Google Cloud Console에서 OAuth 클라이언트 만들기 (가이드 따라 클릭)
2. Client ID + Secret 붙여넣기
3. 브라우저로 로그인 → 끝
## 동작 방식
- 사용자: *"내일까지 광고주 자료 정리해야 해"* 라고 텔레그램으로 시킴
- 비서: 추적기 등록 + 자동으로 `내일 09:00` Google Calendar에 일정 생성
- 알림: 5분 전, 1시간 전 자동 팝업
## 설정 (⚙️에서 조정 가능)
- `CALENDAR_ID` — 기본 `primary` (본인 메인 캘린더). 다른 캘린더 ID 가능
- `DEFAULT_DURATION_MINUTES` — 기본 60분. 작업 일정 길이가 명시 안 됐을 때 사용
## ▶ 실행하면?
현재 연결 상태와 설정값을 진단 출력합니다 (이벤트 생성 X). 진짜 일정 등록은 추적 작업이 들어올 때 자동.
## 보안
- Client ID/Secret/Refresh Token은 `google_calendar_write.json` 한 파일에. `.gitignore` 처리되어 git에 안 올라갑니다
- 권한 범위: `calendar.events`만 (캘린더 일정 읽기/쓰기). 메일·드라이브·연락처 다 못 봅니다
- 연결 해제: 명령 팔레트에서 같은 명령 → "연결 해제" 선택. 또는 [myaccount.google.com/permissions](https://myaccount.google.com/permissions)에서 직접 권한 회수
@@ -0,0 +1,54 @@
#!/usr/bin/env python3
"""Google Calendar 자동 일정 등록 — secretary_calendar_write_v1.
이 스크립트는 OAuth와 실제 이벤트 생성을 직접 하지 않습니다 — VS Code
호스트(extension.ts)에서 직접 처리해요. 이 도구의 역할은:
1) 설정 상태를 확인해서 사용자에게 알려주기 (▶ 클릭 시)
2) ⚙️ 폼에서 CALENDAR_ID / DEFAULT_DURATION_MINUTES 같은 보조 설정 노출
연결 자체는 명령 팔레트에서:
Cmd+Shift+P → 'Connect AI: Google Calendar 자동 일정 연결 📅'
"""
import os, json, sys
HERE = os.path.dirname(os.path.abspath(__file__))
CONFIG = os.path.join(HERE, "google_calendar_write.json")
def main():
if not os.path.exists(CONFIG):
print("⚠️ 아직 설정이 없어요.")
print(" 명령 팔레트(Cmd+Shift+P) → 'Connect AI: Google Calendar 자동 일정 연결' 실행")
sys.exit(1)
try:
with open(CONFIG, "r", encoding="utf-8") as f:
cfg = json.load(f)
except Exception as e:
print(f"❌ 설정 파일 파싱 실패: {e}")
sys.exit(1)
cid = (cfg.get("CLIENT_ID") or "").strip()
cs = (cfg.get("CLIENT_SECRET") or "").strip()
rt = (cfg.get("REFRESH_TOKEN") or "").strip()
cal = (cfg.get("CALENDAR_ID") or "primary").strip()
dur = int(cfg.get("DEFAULT_DURATION_MINUTES") or 60)
who = (cfg.get("_CONNECTED_AS") or "").strip()
when = (cfg.get("_CONNECTED_AT") or "").strip()
print("─── Google Calendar 자동 일정 등록 상태 ───")
print(f" Client ID : {'설정됨 (' + cid[:8] + '…)' if cid else '(없음)'}")
print(f" Client Secret : {'설정됨' if cs else '(없음)'}")
print(f" Refresh Token : {'유효 ✓' if rt else '(없음)'}")
print(f" Calendar ID : {cal}")
print(f" 기본 일정 길이 : {dur}")
if who:
print(f" 연결 계정 : {who}")
if when:
print(f" 연결 시각 : {when[:19]}")
if not (cid and cs and rt):
print()
print("⚠️ 셋업이 완료되지 않았어요.")
print(" 명령 팔레트(Cmd+Shift+P) → 'Connect AI: Google Calendar 자동 일정 연결'")
sys.exit(1)
print()
print("✅ 연결 정상. 마감일(due) 있는 추적 작업이 등록되면 자동으로 캘린더에 일정이 생성됩니다.")
if __name__ == "__main__":
main()
@@ -0,0 +1,26 @@
# 📨 텔레그램 연결
비서(Secretary)가 텔레그램 메신저로 보고를 보내려면 봇 토큰과 chat_id가 필요해요. **⚙️ 버튼을 누르고 폼에 입력**하면 끝 — config.md를 열 필요 없습니다.
## 어떻게 도와주나요?
- ⚙️ 폼에 입력 → `telegram_setup.json`에 저장 (`.gitignore`로 git에서 제외)
- ▶ 실행 → 텔레그램에 연결 테스트 메시지 1발 발송
- 모든 에이전트(YouTube 도구 포함)가 이 설정을 자동으로 공유
## 봇 만드는 법 (한 번만, 약 2분)
1. 텔레그램에서 [@BotFather](https://t.me/BotFather) 검색 → `/newbot` 입력
2. 봇 이름·핸들 정하면 `123456789:ABC...` 형식 토큰을 줍니다 → ⚙️의 `TELEGRAM_BOT_TOKEN`에 입력
3. 새로 만든 봇한테 `/start` 같은 메시지 1번 보내기 (chat_id 활성화)
4. 브라우저에서 `https://api.telegram.org/bot<토큰>/getUpdates` 열어 `chat.id` 숫자 복사
5. ⚙️의 `TELEGRAM_CHAT_ID`에 입력 → 저장
6. ▶ 실행 → 텔레그램에서 "✅ 비서 연결 정상" 메시지 도착하면 끝
## 이 설정을 누가 사용하나?
- 비서 자체 (데일리 브리핑·할 일 알림 등)
- YouTube 도구 (내 영상 체크·경쟁 채널 분석 보고서 푸시)
- 향후 추가될 모든 에이전트의 텔레그램 알림
## 안전
- 토큰은 `.gitignore` 처리되어 GitHub에 안 올라갑니다
- 폼은 토큰 칸을 자동으로 password 형식으로 가립니다 (다른 사람 화면 공유해도 노출 X)
- 토큰 노출됐다 싶으면 [@BotFather](https://t.me/BotFather) → `/revoke`로 즉시 폐기 가능
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
"""Telegram 연결 — secretary_telegram_v2.
Secretary 에이전트의 텔레그램 연결 도구. 토큰·chat_id를 Skills의 ⚙️ 폼에
입력하면 `telegram_setup.json`에 저장되고, 이 스크립트가 메시지 1발 보내서
연결을 테스트합니다. 회사의 모든 에이전트(YouTube 포함)가 이 설정을
공유합니다."""
import os, json, sys, time
HERE = os.path.dirname(os.path.abspath(__file__))
CONFIG = os.path.join(HERE, "telegram_setup.json")
def main():
if not os.path.exists(CONFIG):
print("❌ telegram_setup.json이 없어요. 먼저 ⚙️ 클릭해서 토큰을 입력해주세요.")
sys.exit(1)
try:
with open(CONFIG, "r", encoding="utf-8") as f:
cfg = json.load(f)
except Exception as e:
print(f"❌ 설정 파일 파싱 실패: {e}")
sys.exit(1)
token = (cfg.get("TELEGRAM_BOT_TOKEN") or "").strip()
chat = (cfg.get("TELEGRAM_CHAT_ID") or "").strip()
if not token or not chat:
print("❌ TELEGRAM_BOT_TOKEN 또는 TELEGRAM_CHAT_ID가 비어있어요.")
print(" 봇 만들기: Telegram → @BotFather → /newbot → 토큰 받기")
print(" chat_id : 봇에 메시지 1번 → https://api.telegram.org/bot<TOKEN>/getUpdates 에서 chat.id")
sys.exit(1)
try:
import requests
except ImportError:
print("❌ pip install requests")
sys.exit(1)
body = f"✅ 비서(Secretary) 텔레그램 연결 정상 — {time.strftime('%Y-%m-%d %H:%M:%S')}\n\n이 메시지가 보이면 모든 에이전트가 이 채널로 보고를 보낼 수 있어요."
try:
r = requests.post(
f"https://api.telegram.org/bot{token}/sendMessage",
json={"chat_id": chat, "text": body, "parse_mode": "Markdown"},
timeout=15,
)
r.raise_for_status()
print(f"✅ 전송 OK — 텔레그램에서 확인하세요. ({len(body)}자)")
except Exception as e:
print(f"❌ 전송 실패: {e}")
if "Bad Request" in str(e):
print(" chat_id가 정확한지, 봇과 한 번이라도 대화를 시작했는지 확인하세요.")
sys.exit(1)
if __name__ == "__main__":
main()