집사 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열 행과 혼재 허용
--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와 동일 필드 계약),
가져오기 "문자열.한선" 추가(분리() 사용).검증 (실측)
crowny-ai-butler.m, crowny-ai-settings.m 에러 0.--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.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빌드/링크 검증은 범위 밖(다른 세션 담당) — 이번 세션은 파일별
- GUI 실측(팝업 클릭·직접입력 필드 노출/숨김 토글, 상태 행 자동갱신 화면)은 앱 빌드 후 별도 확인 필요.
~/.claude-profiles/디렉토리가 아직 없어 계정 팝업의 "하위 디렉토리 자동 열거" 분기는