실시간 녹음 + 타임스탬프 메모 + STT 전사 + LLM 구조화 회의록 + PDF/MD 내보내기. CaptionService 연동, 동시 사용 충돌 방지, 긴 회의 2-pass 요약 지원. DB 2테이블, IPC 15채널, UI 3뷰(목록/녹음/상세), 12개 locale i18n.
55 lines
2.1 KiB
Markdown
55 lines
2.1 KiB
Markdown
---
|
|
name: scaffold-component
|
|
description: D3RO-VOICE 프로젝트 컨벤션에 맞게 새 컴포넌트/서비스를 스캐폴딩. 이름을 인자로 전달.
|
|
argument-hint: "[component or service name]"
|
|
allowed-tools: Read Write Glob Grep Edit
|
|
---
|
|
|
|
# Scaffold
|
|
|
|
프로젝트 컨벤션에 맞는 새 모듈을 생성합니다.
|
|
|
|
모듈명: $ARGUMENTS
|
|
|
|
## 0. 중복 방지 가드 (스킵 불가)
|
|
|
|
생성 전 반드시 확인:
|
|
1. **서비스**: `src/main/services/` 내 동일 이름 파일 Glob 검색. 존재 시 유저에게 확인
|
|
2. **컴포넌트**: `src/renderer/components/` 내 동일 이름 Glob 검색. 존재 시 유저에게 확인
|
|
3. **IPC 채널**: `shared/ipc-channels.ts`에서 해당 feature 네임스페이스 Grep 검색. 충돌 시 경고
|
|
4. **i18n 키**: `src/renderer/locales/ko.json`에서 해당 키 접두사 검색. 충돌 시 경고
|
|
|
|
## 서비스 스캐폴딩 (메인 프로세스)
|
|
|
|
Speakly 패턴:
|
|
- 싱글톤 + EventEmitter
|
|
- 로거 태그 `[ServiceName]` (electron-log, console.log 금지)
|
|
- 초기화/종료 메서드 (`initialize()` / `dispose()`)
|
|
- IPC 채널 `shared/ipc-channels.ts`에 추가
|
|
- 에러: D3ROError + ErrorCode enum
|
|
|
|
생성 파일:
|
|
- `src/main/services/$ARGUMENTS.ts` — 서비스 본체
|
|
- `shared/ipc-channels.ts` — 채널 추가 (Edit)
|
|
- `src/main/ipc/` — 핸들러 등록 (Edit)
|
|
|
|
## React 컴포넌트 스캐폴딩 (렌더러)
|
|
|
|
- 함수형 컴포넌트 + TypeScript Props 인터페이스
|
|
- 스타일: d3roPalette/d3roTypo/d3roShadow 토큰만 (hex 리터럴 금지)
|
|
- DS 컴포넌트(MetalCard, PhosphorText, Led, PhysicalButton 등) 적극 활용
|
|
- i18n: t() 함수 사용, 하드코딩 문자열 금지
|
|
- IPC: window.electronAPI.* 호출
|
|
|
|
생성 파일:
|
|
- `src/renderer/components/$ARGUMENTS.tsx` — 컴포넌트 본체
|
|
- `src/renderer/locales/ko.json` — i18n 키 추가 (Edit)
|
|
- `src/renderer/locales/en.json` — i18n 키 추가 (Edit)
|
|
|
|
## Vanilla JS 팝업 스캐폴딩
|
|
|
|
Speakly 패턴:
|
|
- 별도 HTML 엔트리포인트, React 미사용
|
|
- 순수 DOM 조작
|
|
- 2-phase 리사이즈: prepare(측정) → resize → show
|
|
- d3roPalette 토큰의 CSS var 사용
|