← 목록
AI 2026-07-17 4KB 읽기 4분

크라우니AI 브라우저 — 탭 새창 분리·타이핑→옴니·집사 로컬CLI 연동 (2026-07-17)

개요

사용자 지시 3건을 신셸(native/crowny-ai-.m)에 구현. sonnet 에이전트 2기 병렬 위임(A=탭분리+타이핑, B=집사CLI), 페블은 판정·통합·검증만.

무엇을 했는지

① 탭 드래그 → 새 창 분리 (tear-off)

  • CAITabItemView(crowny-ai-chrome.m): mouseDown(기존 선택 유지+시작점 기록) / mouseDragged(세로 40px 이탈 → detach 모드, 탭 스냅샷 고스트 창 NSStatusWindowLevel α0.75 커서 추종, 복귀 시 해제) / mouseUp(detach면 chromeDetachTab:).
  • crowny-ai.h: CAChromeDelegate @optional chromeDetachTab: (N4), CAChromeView beginTypingWithString: (N5) — 계약 추가 2건.
  • crowny-ai-main.m: chromeDetachTab:(마지막 1탭 무시, AI홈이면 URL 인자 생략) → openNewInstanceWithURL:(open -n <app> --args <url>) → 로컬 탭 닫기. 단일창 아키텍처(N1)와 정합 — 새 창 = 새 인스턴스.
  • argv URL 수신 신설: applicationDidFinishLaunching이 :// 포함/http 시작 인자를 파싱해 그 URL 탭으로 기동(없으면 기존 AI홈). 분리된 탭의 URL이 새 인스턴스에 전달되는 경로.

② 탭 선택 직후 타이핑 → 주소창(옴니) 입력

  • crowny-ai-main.m: 로컬 keyDown 모니터(N5). 통과 조건: 타 창/Cmd·Ctrl·Opt/이미 텍스트 편집 중(NSText·NSTextView)/웹페이지 포커스(WK 슈퍼뷰 체인)/제어·기능키·공백·탭. 그 외 일반 문자 → beginTypingWithString:(옴니 포커스+기존 내용 대체+이벤트 소비).
  • crowny-ai-chrome.m: beginTypingWithString: — 필드에디터 전체선택+insertText 정상 경로, ⌥Space 칩 숨김.

③ 집사 로컬 CLI 연동

  • crowny-ai-butler.m(N6): cbButlerCLIPath()(env CROWNY_BUTLER_CLI > defaults crowny.ai.butlerCLI > 기본 tools/집사CLI브릿지.sh) + cli 액션. 라우터: ! 접두 = 강제 CLI, 미매칭 폴백 = 웹검색 대신 CLI(브릿지 있을 때). cbRunLocalCLI: NSTask 백그라운드+120s 타임아웃+2000자 캡, 로그 who=집사·CLI.
  • tools/집사CLI브릿지.sh: ①brainq(:9977) 토큰0 정확조회(2s) → HIT 즉답 [출처: 크라우니뇌 토큰0] ②MISS → claude -p --model haiku(100s) [출처: claude CLI(haiku)] ③data/집사CLI로그.psv append.
  • tools/집사CLI브릿지.한선: 동반 정본(4상: 티=뇌HIT/옴=CLI위임/타=빈입력). hanseonc_high 컴파일+3케이스 실행 PASS, 학습DB add(집사CLI브릿지_4상라우팅).

검증 실측

  • make ai 에러·경고 0 (전 모듈 통합, 02:09 → 타 세션 02:58 재빌드에도 포함 확인).
  • 브릿지 3경로 실측: 뇌HIT 0s / claude 폴백 13~23s / 빈입력 exit 1 (로그 psv 3건).
  • GUI E2E(드래그·타이핑·집사토글)는 미실측 — cliclick 자동화 중 사용자 실사용 감지(Space 전환·타 세션 4개 병렬)로 중단. 수동 확인 필요:
1. 탭 2개 상태에서 탭을 아래로 40px+ 드래그 후 놓기 → 그 URL로 새 창(새 인스턴스) 2. 탭 클릭 직후 바로 타이핑 → 주소창에 입력 시작 3. 집사(⌥Space)에서 아무 질문(미매칭 문장) 또는 !질문 → 크라우니뇌/claude 응답 + 출처 라벨

관련 파일

  • /Users/ef/CrownyBrowser/native/{crowny-ai.h, crowny-ai-chrome.m, crowny-ai-main.m, crowny-ai-butler.m}
  • /Users/ef/CrownyBrowser/tools/집사CLI브릿지.{sh,한선}
  • /Users/ef/CrownyBrowser/data/집사CLI로그.psv
  • 배포: CrownyAI.app/Contents/MacOS/CrownyBrowser ← native/CrownyAI(02:58), open -g 복구 기동(pid 35262)

잔여 이슈

  • GUI 3건 수동 육안 확인(위 절차).
  • 탭 드래그 중 원 탭 흐림(α0.4)이 탭뷰 재생성(updateTabs)으로 무효 — 외관만, 동작 무관.
  • 한글 IME 첫 글자: 키 모니터가 자모 원문을 삽입(조합 미시작) — v1 수용, 필요 시 IME 조합 경유 개선.
  • ⚠운영 교훈: cliclick E2E 중 포커스 레이스로 "크라우니터미널 개발 및 통합" 세션 입력줄에 잔여 문자(ㅈ듀.ㅊ개주교.ㅐㄱㅎ) 오입력 — 미실행 상태, 수동 삭제 필요.