code-agent: implement issue 4
Approval-Correlation: 0543bb321a84cb936bc0ac4988615840
Plan-SHA256: 437a85f68d151ed4db780511812834041cfec5e7cf021fb77e238d5a6196e6fb
Base-SHA: 256be64ac7
This commit is contained in:
+29
-20
@@ -1,23 +1,32 @@
|
||||
# 프로젝트 구조
|
||||
|
||||
```text
|
||||
.
|
||||
├── pyproject.toml
|
||||
├── README.md
|
||||
├── src/
|
||||
│ └── chat_tui/
|
||||
│ ├── __init__.py
|
||||
│ ├── __main__.py
|
||||
│ └── app.py
|
||||
├── tests/
|
||||
│ └── test_app.py
|
||||
└── docs/
|
||||
├── data-model.md
|
||||
├── interface-contract.md
|
||||
├── project-structure.md
|
||||
├── requirements/
|
||||
│ └── req-001_project-scaffold.md
|
||||
└── runtime-flow.md
|
||||
```
|
||||
## 애플리케이션 구현
|
||||
|
||||
`pyproject.toml`은 Python 3.11 이상, Textual 런타임 의존성, 선택적 테스트 의존성, 콘솔 진입점을 선언한다. `src/chat_tui/app.py`는 Textual 애플리케이션과 실행 함수를 제공하고, `tests/test_app.py`는 입력 표시와 종료 계약을 검증한다.
|
||||
- `src/chat_tui/app.py`
|
||||
- `RESPONSE_MESSAGES`: 수정하지 않는 고정 응답 목록
|
||||
- `ChatApp.on_input_submitted`: 입력 `trim`, 유효성 판정, 난수 응답 선택, 상태 갱신 및 대화 항목 표시
|
||||
- `ChatApp.submitted_inputs`: 정규화된 사용자 메시지 세션 상태
|
||||
- `ChatApp.selected_responses`: 메시지별 선택 응답 세션 상태
|
||||
- 기존 Textual 위젯 구성과 `Escape`, `Ctrl+Q` 종료 바인딩
|
||||
|
||||
응답 기능은 별도 서비스나 외부 모듈을 만들지 않고 현재 단일 TUI 애플리케이션의 제출 이벤트 처리에 배치한다. 난수 선택은 표준 라이브러리 `random.choice`를 직접 사용한다.
|
||||
|
||||
## 테스트
|
||||
|
||||
- `tests/test_app.py`
|
||||
- 사용자 메시지와 응답의 제출 순서 및 화면 순서
|
||||
- `random.choice` 결과 제어와 호출 인자
|
||||
- `trim`된 입력 저장
|
||||
- 공백 입력 무시
|
||||
- 입력창 초기화
|
||||
- `Escape` 종료 요청
|
||||
|
||||
테스트는 Textual의 `run_test()`를 사용해 실제 위젯 트리와 이벤트 흐름을 검증하고, 난수 선택만 `unittest.mock.patch`로 제어한다.
|
||||
|
||||
## 문서
|
||||
|
||||
- `docs/requirements/req-001_project-scaffold.md`: 기능 범위와 수용 기준
|
||||
- `docs/data-model.md`: 응답 목록과 세션 상태 모델
|
||||
- `docs/interface-contract.md`: 제출 이벤트와 화면 표시 계약
|
||||
- `docs/project-structure.md`: 기능 구성 요소와 책임
|
||||
- `docs/runtime-flow.md`: 실행 시나리오와 처리 순서
|
||||
|
||||
Reference in New Issue
Block a user