아키텍처 및 데이터 흐름 시각화
전체 시스템이 어떻게 상호작용하는지 아래 다이어그램으로 확인할 수 있습니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
flowchart TD
A["AI 에이전트"] --> B["명령어 실행 요청 (Hook)"]
B --> C["Aho-Corasick 필터 검사"]
C -->|위험 키워드 없음| E["시스템 셸로 즉시 전달"]
C -->|위험 키워드 감지| D["AST 기반 문맥 정밀 분석"]
D -->|주석 문자열 등 안전 문맥| E
D -->|실제 파괴적 문맥 확인| F["실행 차단 및 Stderr 피드백 반환"]
F --> A
실제로 파괴적인 명령어가 차단되었을 때, 에이전트와 Guard, 그리고 셸 사이의 상태 전이 생명주기는 다음과 같이 진행됩니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
stateDiagram-v2
direction LR
STATE_RECEIVE : 명령어 훅 수신
STATE_AHO : 1차 텍스트 패턴 스캔
STATE_AST : 2차 AST 문맥 분석
STATE_REJECT : 차단 및 대안 메시지 생성
STATE_ALLOW : 셸 프로세스 위임
STATE_RECEIVE --> STATE_AHO
STATE_AHO --> STATE_ALLOW : 위험요소 없음
STATE_AHO --> STATE_AST : 위험요소 감지
STATE_AST --> STATE_ALLOW : 무해한 문맥
STATE_AST --> STATE_REJECT : 파괴적 행위 확정
Rust 코드베이스를 구성하는 주요 모듈의 관계도는 다음과 같습니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
classDiagram
class CORE_GUARD_SYSTEM {
+validate_execution_request()
+manage_performance_budget()
}
class PATTERN_MATCHER {
+build_aho_corasick_dfa()
+scan_keywords()
}
class AST_ANALYZER_ENGINE {
+parse_shell_syntax()
+extract_heredoc_payload()
}
class FEEDBACK_REPORTER {
+generate_safe_alternatives()
}
CORE_GUARD_SYSTEM --> PATTERN_MATCHER
CORE_GUARD_SYSTEM --> AST_ANALYZER_ENGINE
CORE_GUARD_SYSTEM --> FEEDBACK_REPORTER