v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가
- CHANGELOG.md: Phase 1~13 + 랜딩 페이지 전체 변경 이력 - LICENSE: MIT - CONTRIBUTING.md: 개발 환경, 코드 표준, PR 프로세스 - SECURITY.md: 보안 정책, 취약점 보고 절차 - .editorconfig: 에디터 설정 통일 (indent, charset, eol) - .nvmrc: Node.js 20 - .gitattributes: line ending 정규화, 바이너리 선언, linguist 설정 - .gitignore: site/dist, Python, Whisper 모델 등 누락 항목 추가
This commit is contained in:
parent
5892125740
commit
023714442d
8 changed files with 337 additions and 0 deletions
18
.editorconfig
Normal file
18
.editorconfig
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{yml,yaml}]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.py]
|
||||||
|
indent_size = 4
|
||||||
34
.gitattributes
vendored
Normal file
34
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Auto-detect text files and normalize line endings
|
||||||
|
* text=auto eol=lf
|
||||||
|
|
||||||
|
# Explicitly declare text files
|
||||||
|
*.ts text
|
||||||
|
*.tsx text
|
||||||
|
*.js text
|
||||||
|
*.jsx text
|
||||||
|
*.json text
|
||||||
|
*.css text
|
||||||
|
*.html text
|
||||||
|
*.md text
|
||||||
|
*.yml text
|
||||||
|
*.yaml text
|
||||||
|
|
||||||
|
# Declare binary files
|
||||||
|
*.ico binary
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.webp binary
|
||||||
|
*.wav binary
|
||||||
|
*.mp3 binary
|
||||||
|
*.exe binary
|
||||||
|
*.dll binary
|
||||||
|
*.whl binary
|
||||||
|
*.sqlite binary
|
||||||
|
*.db binary
|
||||||
|
|
||||||
|
# Linguist overrides
|
||||||
|
docs/** linguist-documentation
|
||||||
|
site/** linguist-documentation
|
||||||
|
tests/** linguist-detectable=false
|
||||||
20
.gitignore
vendored
20
.gitignore
vendored
|
|
@ -23,5 +23,25 @@ resources/sox/*.dll
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
.idea/
|
.idea/
|
||||||
|
.vscode/
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
|
|
||||||
|
# Site build
|
||||||
|
site/dist/
|
||||||
|
site/node_modules/
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
|
||||||
|
# Whisper models (large files)
|
||||||
|
resources/models/
|
||||||
|
|
|
||||||
1
.nvmrc
Normal file
1
.nvmrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
20
|
||||||
126
CHANGELOG.md
Normal file
126
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to D3RO Voice will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.0.0] - 2026-04-06
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
#### Core Pipeline (Phase 1-3)
|
||||||
|
- Electron 33 + React 19 + MUI 7 + TypeScript strict mode
|
||||||
|
- AudioCaptureService: SoX-based PCM16 16kHz mono microphone capture
|
||||||
|
- LocalSTTService: faster-whisper Python sidecar (dual-condition flush pattern)
|
||||||
|
- VoiceModeService: 9-state RecognitionState + 4-state AudioState dual state machine
|
||||||
|
- HotkeyService: uiohook-napi global keyboard hooking (hold/toggle/double-press)
|
||||||
|
- TextInsertService: clipboard save/set/Ctrl+V/restore via @nut-tree-fork/nut-js
|
||||||
|
- RecordingTip popup: 9 wave bars with cosine distribution, thinking progress bar
|
||||||
|
- ResultPopup: auto-close with mouse hover pause, copy button
|
||||||
|
- Settings modal: General/Audio/STT/LLM tabs
|
||||||
|
- System tray with close-to-tray support
|
||||||
|
|
||||||
|
#### Cursor History Popup (Phase 3.5)
|
||||||
|
- Ctrl+Shift+V global shortcut opens recent transcription history at cursor position
|
||||||
|
- Arrow key navigation, Enter to paste, 1-9 direct select, ESC dismiss
|
||||||
|
- focusable: false maintains active app focus
|
||||||
|
|
||||||
|
#### LLM Integration (Phase 4)
|
||||||
|
- LocalLLMService: Ollama REST API with NDJSON streaming
|
||||||
|
- 6 system prompts: refine/translate/summarize/grammar/expand/custom
|
||||||
|
- VoiceModeService LLM integration with original text fallback
|
||||||
|
|
||||||
|
#### Database & History (Phase 5)
|
||||||
|
- better-sqlite3 + drizzle-orm (WAL mode)
|
||||||
|
- HistoryService: CRUD + search + stats + 30-day retention policy
|
||||||
|
- DictionaryService: custom words + STT initialPrompt injection
|
||||||
|
- Dashboard with real statistics
|
||||||
|
|
||||||
|
#### Custom Instructions & i18n (Phase 6)
|
||||||
|
- CustomInstructionService: 5 presets + user-defined CRUD
|
||||||
|
- i18n system: ko/en with t() function and React context
|
||||||
|
|
||||||
|
#### Build & Test (Phase 7)
|
||||||
|
- vitest: 41 unit tests (HistoryService, DictionaryService, VoiceModeService, etc.)
|
||||||
|
- electron-builder: NSIS installer for Windows x64
|
||||||
|
- GitLab CI/CD: lint, typecheck, test, build, release pipeline
|
||||||
|
- SoX download script, PyInstaller sidecar build script
|
||||||
|
|
||||||
|
#### Speakly Pattern Enhancement (Phase 7.5)
|
||||||
|
- SoundEffectService: WAV preload, fire-and-forget playback
|
||||||
|
- AutoLaunchService: app.setLoginItemSettings
|
||||||
|
- TextInsertService: basic insertion verification
|
||||||
|
- VoiceModeService: sound effect integration on session events
|
||||||
|
|
||||||
|
#### UI Redesign (Phase 8)
|
||||||
|
- Industrial instrument aesthetic (dark theme, amber #f25b29 accent)
|
||||||
|
- Design system: 9 DS components (CrtDisplay, InstrumentPanel, Led, PhysicalButton, MetalCard, PhosphorText, MetalDial, ScreenPanel, ButtonGroup)
|
||||||
|
- d3roPalette SSOT: all colors via CSS custom properties
|
||||||
|
- HotkeyRecordModal: key combination recording UI
|
||||||
|
- DashboardPage: feature-focused layout with stats + history + system status
|
||||||
|
|
||||||
|
#### Quality & UX (Phase 9)
|
||||||
|
- 4-step onboarding wizard (welcome, mic, hotkey, Ollama)
|
||||||
|
- Microphone test UI with level meter
|
||||||
|
- Audio recording WAV file saving
|
||||||
|
- MetalDial component with drag rotation
|
||||||
|
- Ctrl+Shift+C command popup at cursor position
|
||||||
|
- Dictionary inline editing
|
||||||
|
- Ollama installation guide with nudging bubble
|
||||||
|
- Real-time UI refresh on data changes
|
||||||
|
|
||||||
|
#### Killer Features (Phase 10)
|
||||||
|
- CaptionService: 3-second chunk continuous transcription with overlay popup
|
||||||
|
- VoiceCommandService: keyword-to-command matching engine (4 preset keywords)
|
||||||
|
- ScreenContextService: active window detection + selected text capture
|
||||||
|
- ChainService: sequential LLM command pipeline with step-by-step events
|
||||||
|
- MemoService: memo tags DB table + tag CRUD + markdown export
|
||||||
|
- Shared components: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard
|
||||||
|
- Shared utilities: formatters.ts (formatDuration, getDateKey, formatNumber)
|
||||||
|
|
||||||
|
#### Monetization (Phase 11)
|
||||||
|
- LicenseService: Free/Pro/Pro+ 3-tier system
|
||||||
|
- Feature gating with 16 feature enums and tier-based access mapping
|
||||||
|
- Daily usage quota tracking (Free: 20 dictation/day, 10 LLM/day)
|
||||||
|
- LemonSqueezy API integration for license key activation
|
||||||
|
- UpgradePromptModal, ProBadge, useProFeature hook
|
||||||
|
- Settings License tab with tier comparison table
|
||||||
|
|
||||||
|
#### Pro Features (Phase 12)
|
||||||
|
- FileTranscriptionService: ffmpeg PCM conversion, 30s chunk sequential STT
|
||||||
|
- MeetingSummaryService: caption session LLM summarization
|
||||||
|
- DictationTemplateService: CRUD + session state machine, 3 presets
|
||||||
|
|
||||||
|
#### Pro+ Premium (Phase 13)
|
||||||
|
- VoiceConversationService: STT-LLM-TTS loop for voice conversations
|
||||||
|
- TTSPlaybackService: Windows SAPI via PowerShell
|
||||||
|
- RAGService: Ollama nomic-embed-text embeddings, SQLite vector storage, cosine similarity
|
||||||
|
- KnowledgeBasePage: document management, indexing progress, Q&A UI
|
||||||
|
- VoiceActionService: LLM JSON action plans, 6 presets, dangerous command blocking
|
||||||
|
|
||||||
|
#### Landing Page
|
||||||
|
- Promotional website at `site/` directory
|
||||||
|
- Vite + React 19 + Tailwind CSS
|
||||||
|
- 4 design references integrated into D3RO brand identity
|
||||||
|
- CRT screen effects, crosshair decorations, noise textures (CSS only)
|
||||||
|
- 10-language i18n: en/ko/ja/zh/es/fr/de/pt/ru/vi
|
||||||
|
- GitHub Pages auto-deployment workflow
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
- Total IPC channels: ~200+
|
||||||
|
- Total services: 20+
|
||||||
|
- Total error codes: 0-878
|
||||||
|
- Design system components: 9
|
||||||
|
- Supported languages (app): ko, en
|
||||||
|
- Supported languages (landing): 10
|
||||||
|
- Test count: 41 unit tests
|
||||||
|
- Build target: Windows x64 NSIS installer
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Planned
|
||||||
|
- macOS / Linux support
|
||||||
|
- Additional Whisper model management UI
|
||||||
|
- Cloud-optional backup (encrypted, opt-in)
|
||||||
|
- Plugin system for custom pipelines
|
||||||
83
CONTRIBUTING.md
Normal file
83
CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
# Contributing to D3RO Voice
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to D3RO Voice!
|
||||||
|
|
||||||
|
## Development Setup
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
- Node.js 20+
|
||||||
|
- Python 3.10+ (for faster-whisper sidecar)
|
||||||
|
- Ollama (for LLM features)
|
||||||
|
- Windows 10/11 (primary platform)
|
||||||
|
|
||||||
|
### Getting Started
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository
|
||||||
|
git clone https://gitlab.twentyoz.kr:8443/d3r0/voice.git
|
||||||
|
cd voice
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Download SoX binary (Windows)
|
||||||
|
npm run setup:sox
|
||||||
|
|
||||||
|
# Start development
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
main/ # Electron main process (services, IPC, DB)
|
||||||
|
renderer/ # React app (MUI, components, pages)
|
||||||
|
preload/ # contextBridge IPC bridge
|
||||||
|
shared/ # Shared types, IPC channels, errors
|
||||||
|
site/ # Landing page (Vite + React + Tailwind)
|
||||||
|
docs/ # Design documents and phase specs
|
||||||
|
tests/ # Unit tests (vitest)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code Standards
|
||||||
|
|
||||||
|
- TypeScript strict mode (`noImplicitAny`, `strictNullChecks`)
|
||||||
|
- No `any` types
|
||||||
|
- No `console.log` (use electron-log via LoggerService)
|
||||||
|
- Colors via `d3roPalette` CSS variables (no hardcoded hex in components)
|
||||||
|
- UI strings via `t()` i18n function (no hardcoded Korean/English)
|
||||||
|
- Services: singleton + EventEmitter pattern
|
||||||
|
- IPC channels defined in `src/shared/ipc-channels.ts`
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run typecheck # Type checking
|
||||||
|
npm run lint # ESLint
|
||||||
|
npm run test # Unit tests
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run build # Production build
|
||||||
|
npm run dist # Build + NSIS installer
|
||||||
|
```
|
||||||
|
|
||||||
|
## Design Documents
|
||||||
|
|
||||||
|
Before implementing, always reference:
|
||||||
|
- `docs/design/00-master-architecture.md`
|
||||||
|
- `docs/design/01-service-specifications.md`
|
||||||
|
- `docs/design/02-ipc-and-types.md`
|
||||||
|
- `docs/design/03-db-and-ui.md`
|
||||||
|
|
||||||
|
## Pull Request Process
|
||||||
|
|
||||||
|
1. Create a feature branch from `main`
|
||||||
|
2. Follow the coding standards above
|
||||||
|
3. Ensure `npm run typecheck` passes
|
||||||
|
4. Ensure `npm run test` passes
|
||||||
|
5. Update CHANGELOG.md if applicable
|
||||||
|
6. Submit a merge request with a clear description
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 D3RO
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
34
SECURITY.md
Normal file
34
SECURITY.md
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.0.x | :white_check_mark: |
|
||||||
|
|
||||||
|
## Privacy by Design
|
||||||
|
|
||||||
|
D3RO Voice processes all data locally. No audio, text, or telemetry is transmitted to external servers. The application is designed to work completely offline after initial model download.
|
||||||
|
|
||||||
|
- **Audio**: Captured and processed in-memory, optionally saved to local SQLite
|
||||||
|
- **STT**: faster-whisper runs as a local sidecar process
|
||||||
|
- **LLM**: Ollama runs on localhost:11434
|
||||||
|
- **License**: One-time online activation, 30-day offline grace period
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security vulnerability, please report it responsibly:
|
||||||
|
|
||||||
|
1. **DO NOT** open a public issue
|
||||||
|
2. Email: security@d3ro.dev
|
||||||
|
3. Include steps to reproduce and potential impact
|
||||||
|
4. We will respond within 48 hours
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
Security concerns include:
|
||||||
|
- Local data exposure or leakage
|
||||||
|
- IPC channel injection or privilege escalation
|
||||||
|
- Unintended network traffic
|
||||||
|
- Clipboard data exposure
|
||||||
|
- Sidecar process escape
|
||||||
Loading…
Add table
Add a link
Reference in a new issue