Files
gitea-agent-testbed/docs/interface-contract.md
T
code-agent 52dd589f8c code-agent: implement issue 4
Approval-Correlation: 0543bb321a84cb936bc0ac4988615840
Plan-SHA256: 437a85f68d151ed4db780511812834041cfec5e7cf021fb77e238d5a6196e6fb
Base-SHA: 256be64ac7
2000-01-01 00:00:00 +00:00

39 lines
1.5 KiB
Markdown

# 인터페이스 계약
## 메시지 제출 이벤트
Textual의 `Input.Submitted` 이벤트가 `#user-input`에서 발생하면 `ChatApp.on_input_submitted`가 처리한다.
### 입력 정규화
1. 이벤트의 `value`에 `strip()`을 적용한다.
2. 입력 위젯의 값을 빈 문자열로 초기화한다.
3. 정규화 결과가 빈 문자열이면 추가 처리를 중단한다.
공백만 포함한 입력은 사용자 메시지, 응답 선택, 대화 항목을 생성하지 않는다.
### 유효한 입력 처리
정규화 결과가 비어 있지 않으면 다음 순서로 처리한다.
1. 정규화된 사용자 메시지를 `submitted_inputs`에 추가한다.
2. `random.choice(RESPONSE_MESSAGES)`로 응답을 선택한다.
3. 선택 응답을 `selected_responses`에 추가한다.
4. 대화 영역에 사용자 메시지 `Label`을 추가한다.
5. 바로 이어서 응답 `Label`을 추가한다.
6. 대화 영역을 마지막 항목까지 스크롤한다.
사용자 메시지와 응답은 별도 대화 항목이며, 화면 표시 순서는 항상 사용자 메시지 다음 응답이다.
## 화면 위젯 계약
- 대화 영역은 `#conversation` 식별자의 `VerticalScroll`이다.
- 입력창은 `#user-input` 식별자의 `Input`이다.
- 사용자 메시지는 `user-message` 클래스를 사용한다.
- 응답은 `response-message` 클래스를 사용한다.
- 애플리케이션 마운트 시 입력창에 포커스를 둔다.
## 종료 계약
`Escape`와 `Ctrl+Q`는 기존 `quit` 바인딩을 통해 애플리케이션 종료를 요청한다.