diff --git a/electron-builder.yml b/apps/desktop/electron-builder.yml similarity index 100% rename from electron-builder.yml rename to apps/desktop/electron-builder.yml diff --git a/electron.vite.config.ts b/apps/desktop/electron.vite.config.ts similarity index 100% rename from electron.vite.config.ts rename to apps/desktop/electron.vite.config.ts diff --git a/apps/desktop/package.json b/apps/desktop/package.json new file mode 100644 index 0000000..dfe2a7f --- /dev/null +++ b/apps/desktop/package.json @@ -0,0 +1,68 @@ +{ + "name": "@d3ro/desktop", + "version": "1.0.0", + "productName": "d3ro-voice", + "description": "로컬 AI 음성 어시스턴트 (Electron)", + "main": "./out/main/index.js", + "scripts": { + "dev": "electron-vite dev", + "build": "electron-vite build", + "preview": "electron-vite preview", + "typecheck": "tsc --noEmit", + "lint": "eslint . --ext .ts,.tsx", + "format": "prettier --write \"src/**/*.{ts,tsx,css}\"", + "test": "vitest run --config vitest.config.ts", + "test:unit": "vitest run --config vitest.config.ts", + "test:watch": "vitest --config vitest.config.ts", + "pack": "electron-vite build && electron-builder --dir", + "dist": "electron-vite build && electron-builder", + "build:sidecar": "python scripts/build-sidecar.py", + "setup:sox": "powershell -ExecutionPolicy Bypass -File scripts/download-sox.ps1" + }, + "author": "D3RO", + "license": "MIT", + "build": { + "extends": null, + "configFile": "electron-builder.yml" + }, + "devDependencies": { + "@electron-toolkit/tsconfig": "^1.0.1", + "@types/better-sqlite3": "^7.6.13", + "@types/fluent-ffmpeg": "^2.1.28", + "@types/node": "^22.13.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.0", + "electron": "^33.3.0", + "electron-builder": "^26.8.1", + "electron-vite": "^2.3.0", + "vite": "^5.4.0", + "vitest": "^2.1.0" + }, + "dependencies": { + "@electron-toolkit/preload": "^3.0.2", + "@electron-toolkit/utils": "^4.0.0", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@ffmpeg-installer/ffmpeg": "^1.1.0", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@nut-tree-fork/nut-js": "^4.2.6", + "@rollup/rollup-win32-x64-msvc": "^4.60.1", + "better-sqlite3": "^12.8.0", + "docx": "^9.6.1", + "drizzle-orm": "^0.45.2", + "electron-audio-loopback": "^1.0.6", + "electron-log": "^5.2.0", + "electron-store": "^10.0.0", + "fluent-ffmpeg": "^2.1.3", + "nanoid": "^5.1.7", + "node-record-lpcm16": "^1.0.1", + "pdf-parse": "^2.4.5", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1", + "uiohook-napi": "^1.5.5" + } +} diff --git a/resources/sounds/error.wav b/apps/desktop/resources/sounds/error.wav similarity index 100% rename from resources/sounds/error.wav rename to apps/desktop/resources/sounds/error.wav diff --git a/resources/sounds/recording-start.wav b/apps/desktop/resources/sounds/recording-start.wav similarity index 100% rename from resources/sounds/recording-start.wav rename to apps/desktop/resources/sounds/recording-start.wav diff --git a/resources/sounds/recording-stop.wav b/apps/desktop/resources/sounds/recording-stop.wav similarity index 100% rename from resources/sounds/recording-stop.wav rename to apps/desktop/resources/sounds/recording-stop.wav diff --git a/scripts/build-sidecar.py b/apps/desktop/scripts/build-sidecar.py similarity index 100% rename from scripts/build-sidecar.py rename to apps/desktop/scripts/build-sidecar.py diff --git a/scripts/download-sox.ps1 b/apps/desktop/scripts/download-sox.ps1 similarity index 100% rename from scripts/download-sox.ps1 rename to apps/desktop/scripts/download-sox.ps1 diff --git a/scripts/generate-sounds.js b/apps/desktop/scripts/generate-sounds.js similarity index 100% rename from scripts/generate-sounds.js rename to apps/desktop/scripts/generate-sounds.js diff --git a/sidecar/main.py b/apps/desktop/sidecar/main.py similarity index 100% rename from sidecar/main.py rename to apps/desktop/sidecar/main.py diff --git a/sidecar/requirements.txt b/apps/desktop/sidecar/requirements.txt similarity index 100% rename from sidecar/requirements.txt rename to apps/desktop/sidecar/requirements.txt diff --git a/src/main/bootstrap.ts b/apps/desktop/src/main/bootstrap.ts similarity index 100% rename from src/main/bootstrap.ts rename to apps/desktop/src/main/bootstrap.ts diff --git a/src/main/db/index.ts b/apps/desktop/src/main/db/index.ts similarity index 100% rename from src/main/db/index.ts rename to apps/desktop/src/main/db/index.ts diff --git a/src/main/db/schema.ts b/apps/desktop/src/main/db/schema.ts similarity index 100% rename from src/main/db/schema.ts rename to apps/desktop/src/main/db/schema.ts diff --git a/src/main/index.ts b/apps/desktop/src/main/index.ts similarity index 100% rename from src/main/index.ts rename to apps/desktop/src/main/index.ts diff --git a/src/main/ipc/audio-handlers.ts b/apps/desktop/src/main/ipc/audio-handlers.ts similarity index 100% rename from src/main/ipc/audio-handlers.ts rename to apps/desktop/src/main/ipc/audio-handlers.ts diff --git a/src/main/ipc/caption-handlers.ts b/apps/desktop/src/main/ipc/caption-handlers.ts similarity index 100% rename from src/main/ipc/caption-handlers.ts rename to apps/desktop/src/main/ipc/caption-handlers.ts diff --git a/src/main/ipc/chain-handlers.ts b/apps/desktop/src/main/ipc/chain-handlers.ts similarity index 100% rename from src/main/ipc/chain-handlers.ts rename to apps/desktop/src/main/ipc/chain-handlers.ts diff --git a/src/main/ipc/config-handlers.ts b/apps/desktop/src/main/ipc/config-handlers.ts similarity index 100% rename from src/main/ipc/config-handlers.ts rename to apps/desktop/src/main/ipc/config-handlers.ts diff --git a/src/main/ipc/context-handlers.ts b/apps/desktop/src/main/ipc/context-handlers.ts similarity index 100% rename from src/main/ipc/context-handlers.ts rename to apps/desktop/src/main/ipc/context-handlers.ts diff --git a/src/main/ipc/dictionary-handlers.ts b/apps/desktop/src/main/ipc/dictionary-handlers.ts similarity index 100% rename from src/main/ipc/dictionary-handlers.ts rename to apps/desktop/src/main/ipc/dictionary-handlers.ts diff --git a/src/main/ipc/file-transcription-handlers.ts b/apps/desktop/src/main/ipc/file-transcription-handlers.ts similarity index 100% rename from src/main/ipc/file-transcription-handlers.ts rename to apps/desktop/src/main/ipc/file-transcription-handlers.ts diff --git a/src/main/ipc/history-handlers.ts b/apps/desktop/src/main/ipc/history-handlers.ts similarity index 100% rename from src/main/ipc/history-handlers.ts rename to apps/desktop/src/main/ipc/history-handlers.ts diff --git a/src/main/ipc/hotkey-handlers.ts b/apps/desktop/src/main/ipc/hotkey-handlers.ts similarity index 100% rename from src/main/ipc/hotkey-handlers.ts rename to apps/desktop/src/main/ipc/hotkey-handlers.ts diff --git a/src/main/ipc/index.ts b/apps/desktop/src/main/ipc/index.ts similarity index 100% rename from src/main/ipc/index.ts rename to apps/desktop/src/main/ipc/index.ts diff --git a/src/main/ipc/instruction-handlers.ts b/apps/desktop/src/main/ipc/instruction-handlers.ts similarity index 100% rename from src/main/ipc/instruction-handlers.ts rename to apps/desktop/src/main/ipc/instruction-handlers.ts diff --git a/src/main/ipc/license-handlers.ts b/apps/desktop/src/main/ipc/license-handlers.ts similarity index 100% rename from src/main/ipc/license-handlers.ts rename to apps/desktop/src/main/ipc/license-handlers.ts diff --git a/src/main/ipc/llm-handlers.ts b/apps/desktop/src/main/ipc/llm-handlers.ts similarity index 100% rename from src/main/ipc/llm-handlers.ts rename to apps/desktop/src/main/ipc/llm-handlers.ts diff --git a/src/main/ipc/meeting-doc-template-handlers.ts b/apps/desktop/src/main/ipc/meeting-doc-template-handlers.ts similarity index 100% rename from src/main/ipc/meeting-doc-template-handlers.ts rename to apps/desktop/src/main/ipc/meeting-doc-template-handlers.ts diff --git a/src/main/ipc/meeting-mode-handlers.ts b/apps/desktop/src/main/ipc/meeting-mode-handlers.ts similarity index 100% rename from src/main/ipc/meeting-mode-handlers.ts rename to apps/desktop/src/main/ipc/meeting-mode-handlers.ts diff --git a/src/main/ipc/meeting-summary-handlers.ts b/apps/desktop/src/main/ipc/meeting-summary-handlers.ts similarity index 100% rename from src/main/ipc/meeting-summary-handlers.ts rename to apps/desktop/src/main/ipc/meeting-summary-handlers.ts diff --git a/src/main/ipc/memo-handlers.ts b/apps/desktop/src/main/ipc/memo-handlers.ts similarity index 100% rename from src/main/ipc/memo-handlers.ts rename to apps/desktop/src/main/ipc/memo-handlers.ts diff --git a/src/main/ipc/rag-handlers.ts b/apps/desktop/src/main/ipc/rag-handlers.ts similarity index 100% rename from src/main/ipc/rag-handlers.ts rename to apps/desktop/src/main/ipc/rag-handlers.ts diff --git a/src/main/ipc/stt-handlers.ts b/apps/desktop/src/main/ipc/stt-handlers.ts similarity index 100% rename from src/main/ipc/stt-handlers.ts rename to apps/desktop/src/main/ipc/stt-handlers.ts diff --git a/src/main/ipc/system-handlers.ts b/apps/desktop/src/main/ipc/system-handlers.ts similarity index 100% rename from src/main/ipc/system-handlers.ts rename to apps/desktop/src/main/ipc/system-handlers.ts diff --git a/src/main/ipc/template-handlers.ts b/apps/desktop/src/main/ipc/template-handlers.ts similarity index 100% rename from src/main/ipc/template-handlers.ts rename to apps/desktop/src/main/ipc/template-handlers.ts diff --git a/src/main/ipc/voice-action-handlers.ts b/apps/desktop/src/main/ipc/voice-action-handlers.ts similarity index 100% rename from src/main/ipc/voice-action-handlers.ts rename to apps/desktop/src/main/ipc/voice-action-handlers.ts diff --git a/src/main/ipc/voice-command-handlers.ts b/apps/desktop/src/main/ipc/voice-command-handlers.ts similarity index 100% rename from src/main/ipc/voice-command-handlers.ts rename to apps/desktop/src/main/ipc/voice-command-handlers.ts diff --git a/src/main/ipc/voice-conversation-handlers.ts b/apps/desktop/src/main/ipc/voice-conversation-handlers.ts similarity index 100% rename from src/main/ipc/voice-conversation-handlers.ts rename to apps/desktop/src/main/ipc/voice-conversation-handlers.ts diff --git a/src/main/ipc/voice-handlers.ts b/apps/desktop/src/main/ipc/voice-handlers.ts similarity index 100% rename from src/main/ipc/voice-handlers.ts rename to apps/desktop/src/main/ipc/voice-handlers.ts diff --git a/src/main/ipc/window-handlers.ts b/apps/desktop/src/main/ipc/window-handlers.ts similarity index 100% rename from src/main/ipc/window-handlers.ts rename to apps/desktop/src/main/ipc/window-handlers.ts diff --git a/src/main/lifecycle.ts b/apps/desktop/src/main/lifecycle.ts similarity index 100% rename from src/main/lifecycle.ts rename to apps/desktop/src/main/lifecycle.ts diff --git a/src/main/services/AudioCaptureService.ts b/apps/desktop/src/main/services/AudioCaptureService.ts similarity index 100% rename from src/main/services/AudioCaptureService.ts rename to apps/desktop/src/main/services/AudioCaptureService.ts diff --git a/src/main/services/AutoLaunchService.ts b/apps/desktop/src/main/services/AutoLaunchService.ts similarity index 100% rename from src/main/services/AutoLaunchService.ts rename to apps/desktop/src/main/services/AutoLaunchService.ts diff --git a/src/main/services/CaptionService.ts b/apps/desktop/src/main/services/CaptionService.ts similarity index 100% rename from src/main/services/CaptionService.ts rename to apps/desktop/src/main/services/CaptionService.ts diff --git a/src/main/services/ChainService.ts b/apps/desktop/src/main/services/ChainService.ts similarity index 100% rename from src/main/services/ChainService.ts rename to apps/desktop/src/main/services/ChainService.ts diff --git a/src/main/services/ConfigService.ts b/apps/desktop/src/main/services/ConfigService.ts similarity index 100% rename from src/main/services/ConfigService.ts rename to apps/desktop/src/main/services/ConfigService.ts diff --git a/src/main/services/CustomInstructionService.ts b/apps/desktop/src/main/services/CustomInstructionService.ts similarity index 100% rename from src/main/services/CustomInstructionService.ts rename to apps/desktop/src/main/services/CustomInstructionService.ts diff --git a/src/main/services/DictationTemplateService.ts b/apps/desktop/src/main/services/DictationTemplateService.ts similarity index 100% rename from src/main/services/DictationTemplateService.ts rename to apps/desktop/src/main/services/DictationTemplateService.ts diff --git a/src/main/services/DictionaryService.ts b/apps/desktop/src/main/services/DictionaryService.ts similarity index 100% rename from src/main/services/DictionaryService.ts rename to apps/desktop/src/main/services/DictionaryService.ts diff --git a/src/main/services/FileTranscriptionService.ts b/apps/desktop/src/main/services/FileTranscriptionService.ts similarity index 100% rename from src/main/services/FileTranscriptionService.ts rename to apps/desktop/src/main/services/FileTranscriptionService.ts diff --git a/src/main/services/HistoryService.ts b/apps/desktop/src/main/services/HistoryService.ts similarity index 100% rename from src/main/services/HistoryService.ts rename to apps/desktop/src/main/services/HistoryService.ts diff --git a/src/main/services/HotkeyService.ts b/apps/desktop/src/main/services/HotkeyService.ts similarity index 100% rename from src/main/services/HotkeyService.ts rename to apps/desktop/src/main/services/HotkeyService.ts diff --git a/src/main/services/LicenseService.ts b/apps/desktop/src/main/services/LicenseService.ts similarity index 100% rename from src/main/services/LicenseService.ts rename to apps/desktop/src/main/services/LicenseService.ts diff --git a/src/main/services/LocalLLMService.ts b/apps/desktop/src/main/services/LocalLLMService.ts similarity index 100% rename from src/main/services/LocalLLMService.ts rename to apps/desktop/src/main/services/LocalLLMService.ts diff --git a/src/main/services/LocalSTTService.ts b/apps/desktop/src/main/services/LocalSTTService.ts similarity index 100% rename from src/main/services/LocalSTTService.ts rename to apps/desktop/src/main/services/LocalSTTService.ts diff --git a/src/main/services/LoggerService.ts b/apps/desktop/src/main/services/LoggerService.ts similarity index 100% rename from src/main/services/LoggerService.ts rename to apps/desktop/src/main/services/LoggerService.ts diff --git a/src/main/services/MeetingDocTemplateService.ts b/apps/desktop/src/main/services/MeetingDocTemplateService.ts similarity index 100% rename from src/main/services/MeetingDocTemplateService.ts rename to apps/desktop/src/main/services/MeetingDocTemplateService.ts diff --git a/src/main/services/MeetingModeService.ts b/apps/desktop/src/main/services/MeetingModeService.ts similarity index 100% rename from src/main/services/MeetingModeService.ts rename to apps/desktop/src/main/services/MeetingModeService.ts diff --git a/src/main/services/MeetingSummaryService.ts b/apps/desktop/src/main/services/MeetingSummaryService.ts similarity index 100% rename from src/main/services/MeetingSummaryService.ts rename to apps/desktop/src/main/services/MeetingSummaryService.ts diff --git a/src/main/services/MemoService.ts b/apps/desktop/src/main/services/MemoService.ts similarity index 100% rename from src/main/services/MemoService.ts rename to apps/desktop/src/main/services/MemoService.ts diff --git a/src/main/services/RAGService.ts b/apps/desktop/src/main/services/RAGService.ts similarity index 100% rename from src/main/services/RAGService.ts rename to apps/desktop/src/main/services/RAGService.ts diff --git a/src/main/services/ScreenContextService.ts b/apps/desktop/src/main/services/ScreenContextService.ts similarity index 100% rename from src/main/services/ScreenContextService.ts rename to apps/desktop/src/main/services/ScreenContextService.ts diff --git a/src/main/services/SoundEffectService.ts b/apps/desktop/src/main/services/SoundEffectService.ts similarity index 100% rename from src/main/services/SoundEffectService.ts rename to apps/desktop/src/main/services/SoundEffectService.ts diff --git a/src/main/services/TTSPlaybackService.ts b/apps/desktop/src/main/services/TTSPlaybackService.ts similarity index 100% rename from src/main/services/TTSPlaybackService.ts rename to apps/desktop/src/main/services/TTSPlaybackService.ts diff --git a/src/main/services/TextInsertService.ts b/apps/desktop/src/main/services/TextInsertService.ts similarity index 100% rename from src/main/services/TextInsertService.ts rename to apps/desktop/src/main/services/TextInsertService.ts diff --git a/src/main/services/VoiceActionService.ts b/apps/desktop/src/main/services/VoiceActionService.ts similarity index 100% rename from src/main/services/VoiceActionService.ts rename to apps/desktop/src/main/services/VoiceActionService.ts diff --git a/src/main/services/VoiceCommandService.ts b/apps/desktop/src/main/services/VoiceCommandService.ts similarity index 100% rename from src/main/services/VoiceCommandService.ts rename to apps/desktop/src/main/services/VoiceCommandService.ts diff --git a/src/main/services/VoiceConversationService.ts b/apps/desktop/src/main/services/VoiceConversationService.ts similarity index 100% rename from src/main/services/VoiceConversationService.ts rename to apps/desktop/src/main/services/VoiceConversationService.ts diff --git a/src/main/services/VoiceModeService.ts b/apps/desktop/src/main/services/VoiceModeService.ts similarity index 100% rename from src/main/services/VoiceModeService.ts rename to apps/desktop/src/main/services/VoiceModeService.ts diff --git a/src/main/services/index.ts b/apps/desktop/src/main/services/index.ts similarity index 100% rename from src/main/services/index.ts rename to apps/desktop/src/main/services/index.ts diff --git a/src/main/types/node-record-lpcm16.d.ts b/apps/desktop/src/main/types/node-record-lpcm16.d.ts similarity index 100% rename from src/main/types/node-record-lpcm16.d.ts rename to apps/desktop/src/main/types/node-record-lpcm16.d.ts diff --git a/src/main/utils/feature-gate.ts b/apps/desktop/src/main/utils/feature-gate.ts similarity index 100% rename from src/main/utils/feature-gate.ts rename to apps/desktop/src/main/utils/feature-gate.ts diff --git a/src/main/utils/markdown-to-docx.ts b/apps/desktop/src/main/utils/markdown-to-docx.ts similarity index 100% rename from src/main/utils/markdown-to-docx.ts rename to apps/desktop/src/main/utils/markdown-to-docx.ts diff --git a/src/main/utils/meeting-markdown.ts b/apps/desktop/src/main/utils/meeting-markdown.ts similarity index 100% rename from src/main/utils/meeting-markdown.ts rename to apps/desktop/src/main/utils/meeting-markdown.ts diff --git a/src/main/utils/paths.ts b/apps/desktop/src/main/utils/paths.ts similarity index 100% rename from src/main/utils/paths.ts rename to apps/desktop/src/main/utils/paths.ts diff --git a/src/main/windows/TrayManager.ts b/apps/desktop/src/main/windows/TrayManager.ts similarity index 100% rename from src/main/windows/TrayManager.ts rename to apps/desktop/src/main/windows/TrayManager.ts diff --git a/src/main/windows/WindowManager.ts b/apps/desktop/src/main/windows/WindowManager.ts similarity index 100% rename from src/main/windows/WindowManager.ts rename to apps/desktop/src/main/windows/WindowManager.ts diff --git a/src/preload/index.ts b/apps/desktop/src/preload/index.ts similarity index 100% rename from src/preload/index.ts rename to apps/desktop/src/preload/index.ts diff --git a/src/preload/popup.ts b/apps/desktop/src/preload/popup.ts similarity index 100% rename from src/preload/popup.ts rename to apps/desktop/src/preload/popup.ts diff --git a/src/renderer/App.tsx b/apps/desktop/src/renderer/App.tsx similarity index 100% rename from src/renderer/App.tsx rename to apps/desktop/src/renderer/App.tsx diff --git a/src/renderer/components/AppLayout.tsx b/apps/desktop/src/renderer/components/AppLayout.tsx similarity index 100% rename from src/renderer/components/AppLayout.tsx rename to apps/desktop/src/renderer/components/AppLayout.tsx diff --git a/src/renderer/components/FileDropZone.tsx b/apps/desktop/src/renderer/components/FileDropZone.tsx similarity index 100% rename from src/renderer/components/FileDropZone.tsx rename to apps/desktop/src/renderer/components/FileDropZone.tsx diff --git a/src/renderer/components/HotkeyRecordModal.tsx b/apps/desktop/src/renderer/components/HotkeyRecordModal.tsx similarity index 100% rename from src/renderer/components/HotkeyRecordModal.tsx rename to apps/desktop/src/renderer/components/HotkeyRecordModal.tsx diff --git a/src/renderer/components/LicenseModal.tsx b/apps/desktop/src/renderer/components/LicenseModal.tsx similarity index 100% rename from src/renderer/components/LicenseModal.tsx rename to apps/desktop/src/renderer/components/LicenseModal.tsx diff --git a/src/renderer/components/LicenseTab.tsx b/apps/desktop/src/renderer/components/LicenseTab.tsx similarity index 100% rename from src/renderer/components/LicenseTab.tsx rename to apps/desktop/src/renderer/components/LicenseTab.tsx diff --git a/src/renderer/components/OllamaGuideModal.tsx b/apps/desktop/src/renderer/components/OllamaGuideModal.tsx similarity index 100% rename from src/renderer/components/OllamaGuideModal.tsx rename to apps/desktop/src/renderer/components/OllamaGuideModal.tsx diff --git a/src/renderer/components/OnboardingModal.tsx b/apps/desktop/src/renderer/components/OnboardingModal.tsx similarity index 100% rename from src/renderer/components/OnboardingModal.tsx rename to apps/desktop/src/renderer/components/OnboardingModal.tsx diff --git a/src/renderer/components/ProBadge.tsx b/apps/desktop/src/renderer/components/ProBadge.tsx similarity index 100% rename from src/renderer/components/ProBadge.tsx rename to apps/desktop/src/renderer/components/ProBadge.tsx diff --git a/src/renderer/components/SettingsModal.tsx b/apps/desktop/src/renderer/components/SettingsModal.tsx similarity index 100% rename from src/renderer/components/SettingsModal.tsx rename to apps/desktop/src/renderer/components/SettingsModal.tsx diff --git a/src/renderer/components/StatusBar.tsx b/apps/desktop/src/renderer/components/StatusBar.tsx similarity index 100% rename from src/renderer/components/StatusBar.tsx rename to apps/desktop/src/renderer/components/StatusBar.tsx diff --git a/src/renderer/components/TemplateSection.tsx b/apps/desktop/src/renderer/components/TemplateSection.tsx similarity index 100% rename from src/renderer/components/TemplateSection.tsx rename to apps/desktop/src/renderer/components/TemplateSection.tsx diff --git a/src/renderer/components/UpgradePromptModal.tsx b/apps/desktop/src/renderer/components/UpgradePromptModal.tsx similarity index 100% rename from src/renderer/components/UpgradePromptModal.tsx rename to apps/desktop/src/renderer/components/UpgradePromptModal.tsx diff --git a/src/renderer/components/ds/ButtonGroup.tsx b/apps/desktop/src/renderer/components/ds/ButtonGroup.tsx similarity index 100% rename from src/renderer/components/ds/ButtonGroup.tsx rename to apps/desktop/src/renderer/components/ds/ButtonGroup.tsx diff --git a/src/renderer/components/ds/CrtDisplay.tsx b/apps/desktop/src/renderer/components/ds/CrtDisplay.tsx similarity index 100% rename from src/renderer/components/ds/CrtDisplay.tsx rename to apps/desktop/src/renderer/components/ds/CrtDisplay.tsx diff --git a/src/renderer/components/ds/InstrumentPanel.tsx b/apps/desktop/src/renderer/components/ds/InstrumentPanel.tsx similarity index 100% rename from src/renderer/components/ds/InstrumentPanel.tsx rename to apps/desktop/src/renderer/components/ds/InstrumentPanel.tsx diff --git a/src/renderer/components/ds/Led.tsx b/apps/desktop/src/renderer/components/ds/Led.tsx similarity index 100% rename from src/renderer/components/ds/Led.tsx rename to apps/desktop/src/renderer/components/ds/Led.tsx diff --git a/src/renderer/components/ds/MetalCard.tsx b/apps/desktop/src/renderer/components/ds/MetalCard.tsx similarity index 100% rename from src/renderer/components/ds/MetalCard.tsx rename to apps/desktop/src/renderer/components/ds/MetalCard.tsx diff --git a/src/renderer/components/ds/MetalDial.tsx b/apps/desktop/src/renderer/components/ds/MetalDial.tsx similarity index 100% rename from src/renderer/components/ds/MetalDial.tsx rename to apps/desktop/src/renderer/components/ds/MetalDial.tsx diff --git a/src/renderer/components/ds/PhosphorText.tsx b/apps/desktop/src/renderer/components/ds/PhosphorText.tsx similarity index 100% rename from src/renderer/components/ds/PhosphorText.tsx rename to apps/desktop/src/renderer/components/ds/PhosphorText.tsx diff --git a/src/renderer/components/ds/PhysicalButton.tsx b/apps/desktop/src/renderer/components/ds/PhysicalButton.tsx similarity index 100% rename from src/renderer/components/ds/PhysicalButton.tsx rename to apps/desktop/src/renderer/components/ds/PhysicalButton.tsx diff --git a/src/renderer/components/ds/ScreenPanel.tsx b/apps/desktop/src/renderer/components/ds/ScreenPanel.tsx similarity index 100% rename from src/renderer/components/ds/ScreenPanel.tsx rename to apps/desktop/src/renderer/components/ds/ScreenPanel.tsx diff --git a/src/renderer/components/ds/index.ts b/apps/desktop/src/renderer/components/ds/index.ts similarity index 100% rename from src/renderer/components/ds/index.ts rename to apps/desktop/src/renderer/components/ds/index.ts diff --git a/src/renderer/components/meeting/AddDocumentDialog.tsx b/apps/desktop/src/renderer/components/meeting/AddDocumentDialog.tsx similarity index 100% rename from src/renderer/components/meeting/AddDocumentDialog.tsx rename to apps/desktop/src/renderer/components/meeting/AddDocumentDialog.tsx diff --git a/src/renderer/components/meeting/DocumentTab.tsx b/apps/desktop/src/renderer/components/meeting/DocumentTab.tsx similarity index 100% rename from src/renderer/components/meeting/DocumentTab.tsx rename to apps/desktop/src/renderer/components/meeting/DocumentTab.tsx diff --git a/src/renderer/components/meeting/EditableSegment.tsx b/apps/desktop/src/renderer/components/meeting/EditableSegment.tsx similarity index 100% rename from src/renderer/components/meeting/EditableSegment.tsx rename to apps/desktop/src/renderer/components/meeting/EditableSegment.tsx diff --git a/src/renderer/components/meeting/ExportMenu.tsx b/apps/desktop/src/renderer/components/meeting/ExportMenu.tsx similarity index 100% rename from src/renderer/components/meeting/ExportMenu.tsx rename to apps/desktop/src/renderer/components/meeting/ExportMenu.tsx diff --git a/src/renderer/components/meeting/MarkdownEditor.tsx b/apps/desktop/src/renderer/components/meeting/MarkdownEditor.tsx similarity index 100% rename from src/renderer/components/meeting/MarkdownEditor.tsx rename to apps/desktop/src/renderer/components/meeting/MarkdownEditor.tsx diff --git a/src/renderer/components/meeting/MarkdownRenderer.tsx b/apps/desktop/src/renderer/components/meeting/MarkdownRenderer.tsx similarity index 100% rename from src/renderer/components/meeting/MarkdownRenderer.tsx rename to apps/desktop/src/renderer/components/meeting/MarkdownRenderer.tsx diff --git a/src/renderer/components/meeting/MeetingChatPanel.tsx b/apps/desktop/src/renderer/components/meeting/MeetingChatPanel.tsx similarity index 100% rename from src/renderer/components/meeting/MeetingChatPanel.tsx rename to apps/desktop/src/renderer/components/meeting/MeetingChatPanel.tsx diff --git a/src/renderer/components/meeting/MeetingDetailTabs.tsx b/apps/desktop/src/renderer/components/meeting/MeetingDetailTabs.tsx similarity index 100% rename from src/renderer/components/meeting/MeetingDetailTabs.tsx rename to apps/desktop/src/renderer/components/meeting/MeetingDetailTabs.tsx diff --git a/src/renderer/components/meeting/TranscriptTab.tsx b/apps/desktop/src/renderer/components/meeting/TranscriptTab.tsx similarity index 100% rename from src/renderer/components/meeting/TranscriptTab.tsx rename to apps/desktop/src/renderer/components/meeting/TranscriptTab.tsx diff --git a/src/renderer/components/shared/EmptyStateCard.tsx b/apps/desktop/src/renderer/components/shared/EmptyStateCard.tsx similarity index 100% rename from src/renderer/components/shared/EmptyStateCard.tsx rename to apps/desktop/src/renderer/components/shared/EmptyStateCard.tsx diff --git a/src/renderer/components/shared/HistoryEntryCard.tsx b/apps/desktop/src/renderer/components/shared/HistoryEntryCard.tsx similarity index 100% rename from src/renderer/components/shared/HistoryEntryCard.tsx rename to apps/desktop/src/renderer/components/shared/HistoryEntryCard.tsx diff --git a/src/renderer/components/shared/PageHeader.tsx b/apps/desktop/src/renderer/components/shared/PageHeader.tsx similarity index 100% rename from src/renderer/components/shared/PageHeader.tsx rename to apps/desktop/src/renderer/components/shared/PageHeader.tsx diff --git a/src/renderer/components/shared/SearchInput.tsx b/apps/desktop/src/renderer/components/shared/SearchInput.tsx similarity index 100% rename from src/renderer/components/shared/SearchInput.tsx rename to apps/desktop/src/renderer/components/shared/SearchInput.tsx diff --git a/src/renderer/components/shared/index.ts b/apps/desktop/src/renderer/components/shared/index.ts similarity index 100% rename from src/renderer/components/shared/index.ts rename to apps/desktop/src/renderer/components/shared/index.ts diff --git a/src/renderer/electron.d.ts b/apps/desktop/src/renderer/electron.d.ts similarity index 100% rename from src/renderer/electron.d.ts rename to apps/desktop/src/renderer/electron.d.ts diff --git a/src/renderer/hooks/useProFeature.ts b/apps/desktop/src/renderer/hooks/useProFeature.ts similarity index 100% rename from src/renderer/hooks/useProFeature.ts rename to apps/desktop/src/renderer/hooks/useProFeature.ts diff --git a/src/renderer/i18n/de.json b/apps/desktop/src/renderer/i18n/de.json similarity index 100% rename from src/renderer/i18n/de.json rename to apps/desktop/src/renderer/i18n/de.json diff --git a/src/renderer/i18n/en.json b/apps/desktop/src/renderer/i18n/en.json similarity index 100% rename from src/renderer/i18n/en.json rename to apps/desktop/src/renderer/i18n/en.json diff --git a/src/renderer/i18n/es.json b/apps/desktop/src/renderer/i18n/es.json similarity index 100% rename from src/renderer/i18n/es.json rename to apps/desktop/src/renderer/i18n/es.json diff --git a/src/renderer/i18n/fr.json b/apps/desktop/src/renderer/i18n/fr.json similarity index 100% rename from src/renderer/i18n/fr.json rename to apps/desktop/src/renderer/i18n/fr.json diff --git a/src/renderer/i18n/index.tsx b/apps/desktop/src/renderer/i18n/index.tsx similarity index 100% rename from src/renderer/i18n/index.tsx rename to apps/desktop/src/renderer/i18n/index.tsx diff --git a/src/renderer/i18n/ja.json b/apps/desktop/src/renderer/i18n/ja.json similarity index 100% rename from src/renderer/i18n/ja.json rename to apps/desktop/src/renderer/i18n/ja.json diff --git a/src/renderer/i18n/ko.json b/apps/desktop/src/renderer/i18n/ko.json similarity index 100% rename from src/renderer/i18n/ko.json rename to apps/desktop/src/renderer/i18n/ko.json diff --git a/src/renderer/i18n/pt.json b/apps/desktop/src/renderer/i18n/pt.json similarity index 100% rename from src/renderer/i18n/pt.json rename to apps/desktop/src/renderer/i18n/pt.json diff --git a/src/renderer/i18n/ru.json b/apps/desktop/src/renderer/i18n/ru.json similarity index 100% rename from src/renderer/i18n/ru.json rename to apps/desktop/src/renderer/i18n/ru.json diff --git a/src/renderer/i18n/th.json b/apps/desktop/src/renderer/i18n/th.json similarity index 100% rename from src/renderer/i18n/th.json rename to apps/desktop/src/renderer/i18n/th.json diff --git a/src/renderer/i18n/vi.json b/apps/desktop/src/renderer/i18n/vi.json similarity index 100% rename from src/renderer/i18n/vi.json rename to apps/desktop/src/renderer/i18n/vi.json diff --git a/src/renderer/i18n/zh-TW.json b/apps/desktop/src/renderer/i18n/zh-TW.json similarity index 100% rename from src/renderer/i18n/zh-TW.json rename to apps/desktop/src/renderer/i18n/zh-TW.json diff --git a/src/renderer/i18n/zh.json b/apps/desktop/src/renderer/i18n/zh.json similarity index 100% rename from src/renderer/i18n/zh.json rename to apps/desktop/src/renderer/i18n/zh.json diff --git a/src/renderer/index.html b/apps/desktop/src/renderer/index.html similarity index 100% rename from src/renderer/index.html rename to apps/desktop/src/renderer/index.html diff --git a/src/renderer/main.tsx b/apps/desktop/src/renderer/main.tsx similarity index 100% rename from src/renderer/main.tsx rename to apps/desktop/src/renderer/main.tsx diff --git a/src/renderer/pages/CommandsPage.tsx b/apps/desktop/src/renderer/pages/CommandsPage.tsx similarity index 100% rename from src/renderer/pages/CommandsPage.tsx rename to apps/desktop/src/renderer/pages/CommandsPage.tsx diff --git a/src/renderer/pages/DashboardPage.tsx b/apps/desktop/src/renderer/pages/DashboardPage.tsx similarity index 100% rename from src/renderer/pages/DashboardPage.tsx rename to apps/desktop/src/renderer/pages/DashboardPage.tsx diff --git a/src/renderer/pages/DictionaryPage.tsx b/apps/desktop/src/renderer/pages/DictionaryPage.tsx similarity index 100% rename from src/renderer/pages/DictionaryPage.tsx rename to apps/desktop/src/renderer/pages/DictionaryPage.tsx diff --git a/src/renderer/pages/HistoryPage.tsx b/apps/desktop/src/renderer/pages/HistoryPage.tsx similarity index 100% rename from src/renderer/pages/HistoryPage.tsx rename to apps/desktop/src/renderer/pages/HistoryPage.tsx diff --git a/src/renderer/pages/KnowledgeBasePage.tsx b/apps/desktop/src/renderer/pages/KnowledgeBasePage.tsx similarity index 100% rename from src/renderer/pages/KnowledgeBasePage.tsx rename to apps/desktop/src/renderer/pages/KnowledgeBasePage.tsx diff --git a/src/renderer/pages/MeetingModePage.tsx b/apps/desktop/src/renderer/pages/MeetingModePage.tsx similarity index 100% rename from src/renderer/pages/MeetingModePage.tsx rename to apps/desktop/src/renderer/pages/MeetingModePage.tsx diff --git a/src/renderer/pages/VoiceConversationPage.tsx b/apps/desktop/src/renderer/pages/VoiceConversationPage.tsx similarity index 100% rename from src/renderer/pages/VoiceConversationPage.tsx rename to apps/desktop/src/renderer/pages/VoiceConversationPage.tsx diff --git a/src/renderer/popups/caption-overlay/index.html b/apps/desktop/src/renderer/popups/caption-overlay/index.html similarity index 100% rename from src/renderer/popups/caption-overlay/index.html rename to apps/desktop/src/renderer/popups/caption-overlay/index.html diff --git a/src/renderer/popups/caption-overlay/script.js b/apps/desktop/src/renderer/popups/caption-overlay/script.js similarity index 100% rename from src/renderer/popups/caption-overlay/script.js rename to apps/desktop/src/renderer/popups/caption-overlay/script.js diff --git a/src/renderer/popups/caption-overlay/style.css b/apps/desktop/src/renderer/popups/caption-overlay/style.css similarity index 100% rename from src/renderer/popups/caption-overlay/style.css rename to apps/desktop/src/renderer/popups/caption-overlay/style.css diff --git a/src/renderer/popups/command-popup/index.html b/apps/desktop/src/renderer/popups/command-popup/index.html similarity index 100% rename from src/renderer/popups/command-popup/index.html rename to apps/desktop/src/renderer/popups/command-popup/index.html diff --git a/src/renderer/popups/command-popup/script.js b/apps/desktop/src/renderer/popups/command-popup/script.js similarity index 100% rename from src/renderer/popups/command-popup/script.js rename to apps/desktop/src/renderer/popups/command-popup/script.js diff --git a/src/renderer/popups/command-popup/style.css b/apps/desktop/src/renderer/popups/command-popup/style.css similarity index 100% rename from src/renderer/popups/command-popup/style.css rename to apps/desktop/src/renderer/popups/command-popup/style.css diff --git a/src/renderer/popups/history-popup/index.html b/apps/desktop/src/renderer/popups/history-popup/index.html similarity index 100% rename from src/renderer/popups/history-popup/index.html rename to apps/desktop/src/renderer/popups/history-popup/index.html diff --git a/src/renderer/popups/history-popup/script.js b/apps/desktop/src/renderer/popups/history-popup/script.js similarity index 100% rename from src/renderer/popups/history-popup/script.js rename to apps/desktop/src/renderer/popups/history-popup/script.js diff --git a/src/renderer/popups/history-popup/style.css b/apps/desktop/src/renderer/popups/history-popup/style.css similarity index 100% rename from src/renderer/popups/history-popup/style.css rename to apps/desktop/src/renderer/popups/history-popup/style.css diff --git a/src/renderer/popups/recording-tip/index.html b/apps/desktop/src/renderer/popups/recording-tip/index.html similarity index 100% rename from src/renderer/popups/recording-tip/index.html rename to apps/desktop/src/renderer/popups/recording-tip/index.html diff --git a/src/renderer/popups/recording-tip/script.js b/apps/desktop/src/renderer/popups/recording-tip/script.js similarity index 100% rename from src/renderer/popups/recording-tip/script.js rename to apps/desktop/src/renderer/popups/recording-tip/script.js diff --git a/src/renderer/popups/recording-tip/style.css b/apps/desktop/src/renderer/popups/recording-tip/style.css similarity index 100% rename from src/renderer/popups/recording-tip/style.css rename to apps/desktop/src/renderer/popups/recording-tip/style.css diff --git a/src/renderer/popups/result-popup/index.html b/apps/desktop/src/renderer/popups/result-popup/index.html similarity index 100% rename from src/renderer/popups/result-popup/index.html rename to apps/desktop/src/renderer/popups/result-popup/index.html diff --git a/src/renderer/popups/result-popup/script.js b/apps/desktop/src/renderer/popups/result-popup/script.js similarity index 100% rename from src/renderer/popups/result-popup/script.js rename to apps/desktop/src/renderer/popups/result-popup/script.js diff --git a/src/renderer/popups/result-popup/style.css b/apps/desktop/src/renderer/popups/result-popup/style.css similarity index 100% rename from src/renderer/popups/result-popup/style.css rename to apps/desktop/src/renderer/popups/result-popup/style.css diff --git a/src/renderer/theme.ts b/apps/desktop/src/renderer/theme.ts similarity index 100% rename from src/renderer/theme.ts rename to apps/desktop/src/renderer/theme.ts diff --git a/src/renderer/utils/formatters.ts b/apps/desktop/src/renderer/utils/formatters.ts similarity index 100% rename from src/renderer/utils/formatters.ts rename to apps/desktop/src/renderer/utils/formatters.ts diff --git a/src/renderer/utils/systemAudioCapture.ts b/apps/desktop/src/renderer/utils/systemAudioCapture.ts similarity index 100% rename from src/renderer/utils/systemAudioCapture.ts rename to apps/desktop/src/renderer/utils/systemAudioCapture.ts diff --git a/src/shared/constants.ts b/apps/desktop/src/shared/constants.ts similarity index 100% rename from src/shared/constants.ts rename to apps/desktop/src/shared/constants.ts diff --git a/src/shared/errors.ts b/apps/desktop/src/shared/errors.ts similarity index 100% rename from src/shared/errors.ts rename to apps/desktop/src/shared/errors.ts diff --git a/src/shared/ipc-channels.ts b/apps/desktop/src/shared/ipc-channels.ts similarity index 100% rename from src/shared/ipc-channels.ts rename to apps/desktop/src/shared/ipc-channels.ts diff --git a/src/shared/theme-vars.ts b/apps/desktop/src/shared/theme-vars.ts similarity index 100% rename from src/shared/theme-vars.ts rename to apps/desktop/src/shared/theme-vars.ts diff --git a/src/shared/types.ts b/apps/desktop/src/shared/types.ts similarity index 100% rename from src/shared/types.ts rename to apps/desktop/src/shared/types.ts diff --git a/tests/helpers/createTestDb.ts b/apps/desktop/tests/helpers/createTestDb.ts similarity index 100% rename from tests/helpers/createTestDb.ts rename to apps/desktop/tests/helpers/createTestDb.ts diff --git a/tests/main/services/CustomInstructionService.test.ts b/apps/desktop/tests/main/services/CustomInstructionService.test.ts similarity index 100% rename from tests/main/services/CustomInstructionService.test.ts rename to apps/desktop/tests/main/services/CustomInstructionService.test.ts diff --git a/tests/main/services/DictionaryService.test.ts b/apps/desktop/tests/main/services/DictionaryService.test.ts similarity index 100% rename from tests/main/services/DictionaryService.test.ts rename to apps/desktop/tests/main/services/DictionaryService.test.ts diff --git a/tests/main/services/HistoryService.test.ts b/apps/desktop/tests/main/services/HistoryService.test.ts similarity index 100% rename from tests/main/services/HistoryService.test.ts rename to apps/desktop/tests/main/services/HistoryService.test.ts diff --git a/tests/main/services/VoiceModeService.test.ts b/apps/desktop/tests/main/services/VoiceModeService.test.ts similarity index 100% rename from tests/main/services/VoiceModeService.test.ts rename to apps/desktop/tests/main/services/VoiceModeService.test.ts diff --git a/tests/setup.ts b/apps/desktop/tests/setup.ts similarity index 100% rename from tests/setup.ts rename to apps/desktop/tests/setup.ts diff --git a/tests/shared/errors.test.ts b/apps/desktop/tests/shared/errors.test.ts similarity index 100% rename from tests/shared/errors.test.ts rename to apps/desktop/tests/shared/errors.test.ts diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json new file mode 100644 index 0000000..155ebaa --- /dev/null +++ b/apps/desktop/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.node.json" }, + { "path": "./tsconfig.web.json" } + ] +} diff --git a/tsconfig.node.json b/apps/desktop/tsconfig.node.json similarity index 100% rename from tsconfig.node.json rename to apps/desktop/tsconfig.node.json diff --git a/tsconfig.web.json b/apps/desktop/tsconfig.web.json similarity index 100% rename from tsconfig.web.json rename to apps/desktop/tsconfig.web.json diff --git a/vitest.config.ts b/apps/desktop/vitest.config.ts similarity index 100% rename from vitest.config.ts rename to apps/desktop/vitest.config.ts diff --git a/memory/project_status.md b/memory/project_status.md new file mode 100644 index 0000000..06597aa --- /dev/null +++ b/memory/project_status.md @@ -0,0 +1,98 @@ +# D3RO-VOICE 프로젝트 현황 + +> 마지막 갱신: 2026-04-08 +> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무 + +## 현재 단계 + +**V1 (Electron) 완료** → **V2 (Monorepo) 진행 중** +- Phase V2-1a ✅ 완료 (Monorepo 구조 이동) +- 다음: Phase V2-1b (packages/core 추출) — 별도 세션 + +## V1 완료 페이즈 + +| Phase | 내용 | 상태 | +|---|---|---| +| 1~9 | 기본 음성 어시스턴트 (STT/LLM/TTS/핫키/팝업) | ✅ | +| 10 | Killer features (메모, 보이스 커맨드, 스크린 컨텍스트, 체인, 캡션) | ✅ | +| 11 | Monetization (라이선스, 쿼터) | ✅ | +| 12 | Pro features (파일 전사, 회의 요약, 딕테이션 템플릿) | ✅ | +| 13 | 음성 대화, RAG, 보이스 액션 | ✅ | +| 14 | 회의 모드 | ✅ | +| 14.5 | 회의 고도화 (다중 문서 생성/편집/내보내기) | ✅ | +| 15 | Auto Polish + AI 채팅 + 마인드맵 + 공유 | ✅ | +| 15.5 | 화자 구분 (LLM 추정 + pyannote) | ✅ | + +**추가 개선사항 (post-15.5)** +- 히스토리/회의 목록 반응형 그리드 + 카드 UI +- 설정 LLM 모델 드롭다운 +- 오디오 테스트 실시간 레벨 미터 +- Ollama 미실행 시 설치 경로 탐색 후 자동 스폰 (2026-04-08) + +## V2 진행 상황 + +### Phase V2-1: Monorepo + Core 추출 — **진행 중** + +| Sub-phase | 범위 | 상태 | +|---|---|---| +| V2-1a | npm workspaces + apps/desktop으로 V1 이동 | ✅ 완료 | +| V2-1b | packages/core 추출 (types, errors, utils) | ⏸️ 대기 | +| V2-1c | packages/ui 추출 (DS 컴포넌트 + theme) | ⏸️ 대기 | +| V2-1d | packages/i18n 추출 (locale JSON + 훅) | ⏸️ 대기 | + +**V2-1a 완료 내역** +- 루트 `package.json`을 npm workspaces 루트로 재구성 (workspaces: apps/*, packages/*) +- `turbo.json`, `tsconfig.base.json` 추가 (Turborepo 자체 설치는 뒤로 미룸) +- V1 파일 전체를 `apps/desktop/`으로 `git mv`: + - src/, resources/, tests/, sidecar/, scripts/ + - electron.vite.config.ts, electron-builder.yml, vitest.config.ts + - tsconfig.node.json, tsconfig.web.json (+ 새 tsconfig.json) +- `apps/desktop/package.json` 신규 (`name: "@d3ro/desktop"`, 기존 deps 그대로) +- `@electron/rebuild --version=33.4.11`로 native 모듈 재빌드 (better-sqlite3, uiohook-napi) +- 루트 tsconfig.json → apps/desktop references 형태 + +**V2-1a 결정사항** +- **패키지 매니저**: npm workspaces 유지 (pnpm 전환은 별도 sub-phase) + - 이유: Turborepo는 npm workspaces와 호환, 구조 이동과 PM 전환을 동시에 하면 롤백 불가 +- **site/**: 루트 유지 (랜딩 페이지, V2 무관) +- **docs/**, **memory/**, **CLAUDE.md**: 루트 유지 +- **productName: "d3ro-voice"** 필수 — package name을 `@d3ro/desktop`으로 바꾸면 Electron의 `app.getName()`이 바뀌어 userData 경로가 `%APPDATA%\@d3ro\desktop\`으로 이동(기존 DB/설정 유실). `productName`을 명시하면 `app.getName()`이 이를 우선 반환하여 `%APPDATA%\d3ro-voice\` 그대로 유지됨. + +**검증 결과** +- `npm run typecheck` ✅ +- `npm run build` ✅ (electron-vite main+preload+renderer) +- `npm run dev` ✅ 실제 실행 → DB 경로 `d3ro-voice/`로 복원, 기존 핫키(Alt keyCode=2) 로드, Ollama 자동 실행 감지 모두 정상 +- `npm run dist` (electron-builder installer)은 V2-1 완료 후 별도 검증 + +### Phase V2-2~V2-8: 미착수 +Supabase 인프라, Web App MVP, 데스크톱 동기화, Mac 빌드, Mobile App, 팀 기능, 결제/출시 + +## 알려진 차단/이슈 + +- **@nut-tree-fork/nut-js 포크 사용** (V1 잔여 이슈) +- **Ollama 의존성**: 없으면 LLM 기능 사용 불가 (2026-04-08 자동 실행 기능 추가로 UX 개선) + +## 디렉토리 구조 (V2-1a 목표) + +``` +d3ro-voice/ # 루트 (monorepo) +├── apps/ +│ └── desktop/ # 기존 V1 전체 +│ ├── src/ +│ ├── resources/ +│ ├── build/ +│ ├── package.json # name: @d3ro/desktop +│ ├── electron.vite.config.ts +│ ├── electron-builder.yml +│ ├── tsconfig*.json +│ └── drizzle.config.ts +├── packages/ # V2-1b/c/d에서 채움 +├── site/ # 랜딩 페이지 (루트 유지) +├── docs/ # 설계서/페이즈 문서 +├── memory/ # 이 파일 +├── pnpm-workspace.yaml # 또는 package.json "workspaces" +├── turbo.json +├── package.json # 루트 workspace +├── tsconfig.base.json +└── CLAUDE.md +``` diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..476cc6f --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..4cc6421 --- /dev/null +++ b/turbo.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://turbo.build/schema.json", + "ui": "stream", + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["out/**", "dist/**", ".next/**"] + }, + "typecheck": { + "dependsOn": ["^build"], + "outputs": [] + }, + "test": { + "dependsOn": ["^build"], + "outputs": [] + }, + "lint": { + "outputs": [] + }, + "dev": { + "cache": false, + "persistent": true + } + } +}