← 목록
기타 2026-07-17 5KB 읽기 5분

집사 CLI 연동 — 신뢰성 강화 + 모델/계정 선택 UI + 상태 모니터링 (N10)

개요

사장님 지시(2026-07-17): "집사를 CLI에 연동하기 기능이 항상 잘 작동 되게 하기. 모델 선택, 계정 선택 상태 모니터링도 되게 하기." — 기존 N6/N8(로컬 CLI 연동, 계정/특성 프로필)을 신뢰성(exit 규약)· UI(드롭다운)·모니터링(--status) 3축으로 보강.

무엇을 했는지

1. 신뢰성 — exit 코드 규약 + 진단 (tools/집사CLI브릿지.sh)

  • exit 0=성공 / 2=빈입력 / 3=CLI없음 / 4=타임아웃(100s) / 5=CLI 비정상종료.
  • 오류 시 stdout 마지막 줄에 [집사CLI오류] <원인> 을 남긴다.
  • ctimeout 의 GNU 관례(타임아웃 시 exit 124)를 이용해 타임아웃(4)과 CLI 자체 오류(5)를 구분.
  • 로그 psv 5열로 확장: 시각|출처|소요초|결과(OK/ERR코드)|질의100자 — 기존 4열 행과 혼재 허용
(파서가 NF로 구분, --status 모드의 통계 집계에서 4열=결과 미상으로 제외).

2. 상태 모니터링 — --status 모드

  • $1 == "--status" 이면 질의 대신 상태 한 줄 출력, exit 0, 로그 미기록(모니터링이 실사용
통계를 오염시키지 않도록).
  • 포맷: CLI:OK(경로)|버전:x|모델:x|계정:x|brainq:OK/DOWN|최근:N/P/A
  • native/crowny-ai-butler.m 라우터: !상태 정확매치 또는 "cli 상태"/"CLI상태" 포함 시
cli|--status|... 액션으로 직행(범용 "!" 프리픽스 분기보다 먼저 검사해 삼킴 방지).

3. 모델/계정 선택 UI — NSPopUpButton (native/crowny-ai-settings.m)

  • CLI 모델: haiku/sonnet/opus/직접입력… 팝업. 직접입력 선택 시 옆 텍스트필드 노출.
  • CLI 계정: 기본 계정 + ~/.claude-profiles/ 하위 디렉토리 자동 열거 + 직접입력… 팝업.
선택한 프로필의 전체경로를 crowny.ai.cliConfigDir 로 저장(기본 계정=키 제거).
  • 헬퍼: caCLIProfileDirs()(프로필 디렉토리 목록), caCLIStatusHumanize()(--status 출력 파싱).

4. CLI 상태 행 — 자동 1회 + 새로고침

  • 크라우니AI 섹션 표시 시 _cliStatusRun 자동 실행(10s 타임아웃) + [새로고침] 버튼.
  • 성공: ✓ claude 2.1.212 (Claude Code) · 모델 haiku · 계정 기본 · 크라우니뇌 연결됨 · 최근 10회 50% · 평균 12초
  • 실패: ✗ <원인>.

5. 한선씨 동반

  • tools/집사CLI브릿지.한선: 상태조회() 함수 추가(브릿지 --status와 동일 필드 계약),
가져오기 "문자열.한선" 추가(분리() 사용).

검증 (실측)

  • syntax-only: crowny-ai-butler.m, crowny-ai-settings.m 에러 0.
  • 브릿지 실측 4건:
  • --status: CLI:OK(/Users/ef/.local/bin/claude)|버전:2.1.212 (Claude Code)|모델:haiku|계정:기본|brainq:OK|최근:10/0/11 (초기), 재조회 시 최근:10/50/12로 갱신 확인.
  • ② 정상 질의: "한 단어로만 답해: 하늘 색깔은?"파랑 + [출처: claude_CLI_haiku], exit 0.
  • CROWNY_CLI_CMD=/없는경로/claude[집사CLI오류] claude CLI 없음: /없는경로/claude, exit 3.
  • ④ 로그 psv 5열 append 확인(awk -F'|' '{print NF}' → 최신 행 5).
  • .한선 3케이스 게이트(hanseonc_high → crownyc run): 빈입력(타|빈입력거부)/상태(상태|CLI:OK(...)...)/일반(티|HIT:상주|...) 3/3 통과.
  • 크라우니코드: lookup HIT 6건(집사CLI브릿지 관련 기존 패턴 확인, 재사용은 구조 참고 수준) / MISS 1건 (N10 exit규약+상태모니터링은 신규 로직, 직접 생성) / learn 추가 1건.

    관련 파일

    • /Users/ef/CrownyBrowser/tools/집사CLI브릿지.sh
    • /Users/ef/CrownyBrowser/tools/집사CLI브릿지.한선
    • /Users/ef/CrownyBrowser/native/crowny-ai-butler.m (cbButlerRespond: 상태 라우팅, cbRunLocalCLI: exit코드 분기)
    • /Users/ef/CrownyBrowser/native/crowny-ai-settings.m (_buildCLIProfileAt:, _cliModelPopupChanged:, _cliAccountPopupChanged:, _cliStatusRun)
    • /Users/ef/CrownyBrowser/data/집사CLI로그.psv (5열 확장, 4열과 혼재)

    잔여 이슈

    • 오케스트레이터의 전체 make ai 빌드/링크 검증은 범위 밖(다른 세션 담당) — 이번 세션은 파일별
    syntax-only만 확인.
    • GUI 실측(팝업 클릭·직접입력 필드 노출/숨김 토글, 상태 행 자동갱신 화면)은 앱 빌드 후 별도 확인 필요.
    • ~/.claude-profiles/ 디렉토리가 아직 없어 계정 팝업의 "하위 디렉토리 자동 열거" 분기는
    빈 배열(= 기본 계정 + 직접입력…만 노출)로만 검증됨 — 실제 프로필 디렉토리 생긴 뒤 재확인 권장.