Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f4eb49a
chore: switch package manager from npm to pnpm
hidetoshi-oya Feb 20, 2026
d8ec3e6
docs: update README and CLAUDE.md for pnpm migration
hidetoshi-oya Feb 20, 2026
356822e
style: darken overlay UI and reduce transparency for better visibility
hidetoshi-oya Feb 20, 2026
72f689a
feat: add dual-stream live transcription (mic + speaker)
hidetoshi-oya Feb 24, 2026
5aa691d
[TDD] chore: migrate to @google/genai SDK, update to gemini-2.5-flash…
hidetoshi-oya Feb 24, 2026
e5c1c8d
chore(U1): upgrade Electron 33 → 40.6.0 (EOL since 2025-04-29)
hidetoshi-oya Feb 24, 2026
0ecdb85
[TDD] feat(1.1): add LLM provider abstraction layer
hidetoshi-oya Feb 24, 2026
b9a178d
[TDD] feat(1.1): add OpenAI and Claude providers
hidetoshi-oya Feb 24, 2026
9448435
[TDD] feat(1.2): add SettingsHelper with safeStorage encryption
hidetoshi-oya Feb 24, 2026
eb374ea
feat(1.3-1.4): multi-provider IPC handlers and ModelSelector UI
hidetoshi-oya Feb 24, 2026
2cb1056
[TDD] feat(2.1-2.5): add Meeting Intelligence (Phase 2)
hidetoshi-oya Feb 24, 2026
011462a
[TDD] feat(3.1-3.3): add real-time coaching and playbook system (Phas…
hidetoshi-oya Feb 24, 2026
3aa3bf0
[TDD] feat(4.2-4.4): add conversation memory, click-through, multi-mo…
hidetoshi-oya Feb 24, 2026
474d4e9
[TDD] feat(5.2-5.3): add export and webhook integration (Phase 5)
hidetoshi-oya Feb 24, 2026
1b24639
[TDD] feat(4.1,4.5,5.1): add region capture, Whisper transcription, c…
hidetoshi-oya Feb 24, 2026
3fab558
docs: update project documentation to reflect current architecture
hidetoshi-oya Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .claude/rules/electron.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
globs: "electron/**"
---
# Electron メインプロセスルール

- AppStateはシングルトン。`AppState.getInstance()`で取得
- Helper間の依存はAppState経由で注入(コンストラクタにthisを渡す)
- IPC通信は`ipcHandlers.ts`に集約。散在させない
- `electron/tsconfig.json`でコンパイル(tsconfig.jsonとは別)
- グローバルショートカットは`shortcuts.ts`で一元管理
- LLMプロバイダーは`electron/llm/`のProviderRegistryパターンで管理(Gemini/OpenAI/Claude/Ollama)
- プロバイダー追加時は`LLMProvider`インターフェース(`llm/types.ts`)を実装し、ProviderRegistryに登録
- APIキーは`SettingsHelper`経由で`safeStorage`暗号化保存
- ミーティングデータは`StorageHelper`経由でJSON永続化(`{userData}/meetings/`)
- プロンプトテンプレートは`electron/prompts/`に集約
9 changes: 9 additions & 0 deletions .claude/rules/security.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# セキュリティルール

- `.env`ファイルは絶対にgit add/commitしない
- APIキー・シークレットをソースコードにハードコードしない
- `process.env`経由でのみ環境変数を参照
- APIキーの永続化は`SettingsHelper.setApiKey()`経由で`safeStorage`暗号化(macOS Keychain / Windows DPAPI / Linux Secret Service)
- Electronの`nodeIntegration`は無効。preloadスクリプト(`contextBridge`)でのみNode APIを公開
- `contentProtection: true`を維持(画面録画対策)
- Webhook URLのバリデーション: ユーザー入力URLへのHTTP POSTのみ。内部ネットワーク宛も許可(ユーザー責任)
87 changes: 87 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Free Cluely

透明オーバーレイ型のデスクトップAIアシスタント(Electron + React + TypeScript)

## アーキテクチャ

```
electron/ → Electronメインプロセス(Node.js)
main.ts → AppState シングルトン(エントリーポイント)
ipcHandlers.ts → IPC通信ハンドラ(全API集約)
shortcuts.ts → グローバルショートカット
WindowHelper.ts → 透明ウィンドウ管理・クリックスルー・マルチモニター
ScreenshotHelper.ts → スクリーンショット撮影
RegionSelectHelper.ts → 画面領域選択(フルスクリーンオーバーレイ)
RegionCropHelper.ts → Sharp画像クロップ
ProcessingHelper.ts → スクリーンショット・音声の処理オーケストレーション
LLMHelper.ts → AI連携ファサード(レガシー互換)
llm/ → LLMプロバイダー抽象化レイヤー
types.ts → LLMProvider / ModelInfo インターフェース
ProviderRegistry.ts → プロバイダー管理・切替・自動フォールバック
GeminiProvider.ts → Google Gemini(@google/genai)
OpenAIProvider.ts → OpenAI(openai SDK)
ClaudeProvider.ts → Anthropic Claude(@anthropic-ai/sdk)
OllamaProvider.ts → Ollama(REST API)
SettingsHelper.ts → 設定永続化(JSON + safeStorage暗号化)
StorageHelper.ts → ミーティングデータ永続化
MeetingHelper.ts → ミーティングセッション管理 + Map-Reduceチャンク分割要約
PlaybookHelper.ts → Playbook管理(ビルトイン6種 + カスタム)
CoachingHelper.ts → リアルタイムAIコーチング
ConversationHelper.ts → チャット履歴永続化(50メッセージ上限)
ExportHelper.ts → ミーティングエクスポート(Markdown / JSON / クリップボード)
WebhookHelper.ts → Webhook連携(meeting.ended イベント POST)
CalendarHelper.ts → カレンダー連携(ICSパース・Playbook自動選択)
WhisperTranscriptionHelper.ts → OpenAI Whisper多言語文字起こし(50+言語)
LiveTranscriptionHelper.ts → Gemini Live APIリアルタイム文字起こし
prompts/ → AIプロンプトテンプレート
meeting-prompts.ts → 要約・アクション抽出・コーチング用プロンプト

src/ → Reactレンダラープロセス
_pages/ → ページコンポーネント(Queue, Solutions)
components/ → UIコンポーネント
Queue/ → QueueCommands等
Solutions/ → ソリューション表示
ui/ → 共通UI(ModelSelector, MeetingPanel, PlaybookSelector等)
hooks/ → カスタムフック(useMeeting, useSpeechRecognition等)
types/ → TypeScript型定義(electron.d.ts, global.d.ts)
lib/ → ユーティリティ
```

## テックスタック

- **Runtime**: Electron 40 + Node.js
- **Frontend**: React 18 + TypeScript 5.6 + Vite 5
- **Styling**: TailwindCSS 3 + Radix UI
- **AI**: Gemini (`@google/genai` v1.42), OpenAI (`openai` v6.23), Claude (`@anthropic-ai/sdk` v0.78), Ollama(ローカル)
- **画像処理**: Sharp + screenshot-desktop
- **テスト**: Vitest(184テスト、TDD)

## コマンド

| コマンド | 説明 |
|---------|------|
| `pnpm start` | 開発モード起動(Vite + Electron) |
| `pnpm dev` | Vite devサーバーのみ(port 5180) |
| `pnpm build` | プロダクションビルド |
| `pnpm dist` | Electronパッケージング(release/) |
| `pnpm clean` | dist, dist-electron削除 |
| `pnpm test` | テスト実行(watchモード) |
| `pnpm test:run` | テスト実行(単発) |

## コーディング規約

- **PascalCase**: クラス、Reactコンポーネント
- **camelCase**: 関数、変数
- **SCREAMING_SNAKE_CASE**: 定数(PROCESSING_EVENTS等)
- Helperクラスはモジュール単位で分離(1クラス1ファイル)
- LLMプロバイダーは `electron/llm/` のProviderRegistryパターンで管理
- IPC通信はipcHandlers.tsに集約
- UIはTailwindユーティリティクラス + Radix UIプリミティブ

## 重要な注意事項

- `.env`にAPIキー(GEMINI_API_KEY等)→ **絶対にコミットしない**
- APIキーはSettingsHelper経由で`safeStorage`暗号化保存も可能
- `renderer/`は旧コード(未使用)→触らない
- tsconfig: `tsconfig.json`(React/Vite用)と `electron/tsconfig.json`(Electron用)は別
- テスト: Vitest(TDDで開発。詳細は `.claude/rules/tdd.md`)
Loading