Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
75 changes: 32 additions & 43 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
- React + TypeScript + Vite

2. **packages/hub** (`@selection-command/hub`)
- コマンド共有・発見のWebプラットフォーム
- Next.js 15 + App Router
- 11言語対応の国際化
- `ai-services.json` の静的ホスティング + Extension の e2e テストページ配信のみを担う縮小版 Next.js アプリ
- コマンド共有プラットフォームとしてのフル機能は新リポジトリ([selection-command-hub](https://github.com/ujiro99/selection-command-hub)、selection-command.com)に移行済み
- 詳細は `packages/hub/AGENTS.md` を参照

3. **packages/shared** (`@selection-command/shared`)
- 共通ユーティリティと型定義
Expand All @@ -35,7 +35,7 @@
```bash
# 拡張機能の開発
yarn dev # extensionの開発モード開始
yarn dev:hub # hubの開発モード開始
yarn dev:hub # hub(テストページ/ai-services.json配信用)の開発モード開始

# ビルド
yarn build # 全パッケージのビルド
Expand Down Expand Up @@ -73,9 +73,6 @@ yarn zip # 配布用zip作成
```bash
yarn dev # Next.js開発サーバー(Turbo)
yarn build # プロダクションビルド
yarn analytics # GA分析データ更新
yarn tags # タグ統計更新
yarn urls # 検索URL更新
```

**Shared (packages/shared):**
Expand All @@ -93,33 +90,35 @@ yarn dev # watch モード

```
┌────────────────────────┐ ┌─────────────────────┐
│ Chrome Extension │ │ Command Hub
│ Chrome Extension │ │ Hub(静的アセット)
│ (packages/ext) │◄──►│ (packages/hub) │
│ │ │ │
│ • コンテンツスクリプト │ │ • コマンド共有
│ • バックグラウンド │ │ • 検索・発見
│ • オプションページ │ │ • 多言語対応
│ • ページアクション │ │ • 分析機能
│ • コンテンツスクリプト │ │ • ai-services.json
│ • バックグラウンド │ │ 配信
│ • オプションページ │ │ • e2eテストページ
│ • ページアクション │ │
└────────────────────────┘ └─────────────────────┘
│ │
└──────────┬─────────────────┘
┌─────────────────────┐
│ Shared Package │
│ (packages/shared) │
│ │
│ • 共通型定義 │
│ • ユーティリティ │
│ • 型ガード │
└─────────────────────┘
┌─────────────────────┐
│ Shared Package │
│ (packages/shared) │
│ │
│ • 共通型定義 │
│ • ユーティリティ │
│ • 型ガード │
└─────────────────────┘
```

※ コマンド共有・検索・発見のプラットフォーム(旧 Command Hub のフル機能)は
新リポジトリ(selection-command-hub)に移行済み。上記の `packages/hub` は
その旧実装の残骸ではなく、Extension が依存する静的アセット配信専用に縮小した別物。

### 主要な連携ポイント

1. **型システム共有**: SharedパッケージでBaseCommandなどの基本型を定義し、ExtensionとHubで拡張
2. **コマンドデータ**: Hubで管理するcommands.jsonをExtensionで参照
3. **国際化**: Hubの多言語対応とExtensionのlocalesファイルが連携
4. **ページアクション**: ExtensionのPageActionがHubで共有・発見される
2. **AIサービス定義**: `packages/hub/public/data/ai-services.json` を Extension がビルド時/実行時の両方で参照
3. **e2eテスト**: `packages/hub` がデプロイする `/en/test` ページを Extension の Playwright テストが利用

### Chrome拡張機能の構造 (packages/extension)

Expand All @@ -139,22 +138,11 @@ yarn dev # watch モード
- `src/services/pageAction/` - 自動化シーケンス処理
- `src/lib/robula-plus/` - 堅牢なXPathセレクター生成

### Hubプラットフォームの構造 (packages/hub)

**機能:**

- コマンドライブラリの検索・発見
- タグベースでのカテゴライズ
- Google Analytics統合
- 11言語の国際化対応
### Hub の構造 (packages/hub)

**データフロー:**

```
commands.json → フィルタリング・検索 → UI表示
commands.json → scripts/update-tags.mjs → tags.json
Google Analytics → scripts/fetch-ga-data.js → analytics.json
```
`packages/hub` は「ai-services.json の静的ホスティング」と「Extension の
e2eテストページ配信」のみを担う縮小版アプリ。詳細は `packages/hub/AGENTS.md`
を参照。

### 型システムの設計

Expand Down Expand Up @@ -199,7 +187,8 @@ interface PageActionOption {

**Hub開発:**

- 多言語対応時は各言語ファイルの更新が必要
- Hub は縮小版のため新機能は追加しない。コマンド共有プラットフォームとしての機能拡張は新リポジトリ(selection-command-hub)側で行う
- `ai-services.json` とテストページの変更時は Extension 側への影響を確認すること

**テスト:**

Expand All @@ -210,5 +199,5 @@ interface PageActionOption {
**ビルド・配布:**

- Extension: `yarn zip`で配布用zipファイル作成
- Hub: Vercel等での静的サイト配布
- Hub: GitHub Pages(`.github/workflows/pages.yml`)で静的サイト配布
- Shared: TypeScript declarations自動生成
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
## Selection Command Hub

You can share and obtain commands in the Selection Command Hub.
[Selection Command Hub](https://ujiro99.github.io/selection-command/)
[Selection Command Hub](https://selection-command.com/)

## Dependencies

Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
"test:e2e": "yarn workspace @selection-command/extension test:e2e",
"tsc": "yarn workspaces run tsc -b",
"clean": "yarn workspaces run clean && rm -rf node_modules",
"add-command": "yarn workspace @selection-command/hub add-command",
"pretty-quick": "pretty-quick"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extension/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Chrome はこの `css` フィールドに列挙されたスタイルシートを

**対策**: `src/lib/vite-plugin-manifest.ts` の `removeCssFromContentScript` プラグインが、
ビルド後に全 content_script エントリーの `css` フィールドを削除する。
CSS は各スクリプト(`content_script.tsx`, `command_hub.tsx`)の Shadow DOM 初期化時に `insertCss()` で手動注入している。
CSS `content_script.tsx` の Shadow DOM 初期化時に `insertCss()` で手動注入している。

> content_script に CSS import を追加する際は、manifest 経由での自動注入が抑制されていることを確認すること。
> 新たな content_script エントリーを追加した場合も同様に Shadow DOM への手動注入が必要。
Expand Down
5 changes: 3 additions & 2 deletions packages/extension/e2e/page-action.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -256,10 +256,11 @@ test.describe("PageAction Commands", () => {
}) => {
test.skip(!!process.env.CI, "Do not run tests for external services in CI.")

// Open Amazon.com
await page.goto("https://www.amazon.com/")
await page.waitForLoadState("domcontentloaded")
await page.locator(".a-button-text").first().click()
await page.waitForLoadState("domcontentloaded")

// Click the first product link to navigate to a product page
await page.locator(".a-list-item .a-link-normal").first().click()
await page.waitForLoadState("domcontentloaded")

Expand Down
9 changes: 0 additions & 9 deletions packages/extension/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,6 @@
"src/content_script.tsx"
]
},
{
"matches": [
"https://ujiro99.github.io/selection-command/*",
"http://localhost:3000/*"
],
"js": [
"src/command_hub.tsx"
]
},
{
"matches": [
"https://selection-command.com/*",
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/de/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Taste auswählen"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Menü bei Fokuswechsel geöffnet lassen"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Behält das Auswahlmenü und den ausgewählten Text bei, wenn Sie nach dem Ausführen eines Befehls den Tab oder das Fenster wechseln oder die Seitenleiste öffnen, sodass Sie zurückkehren und einen weiteren Befehl für dieselbe Auswahl ausführen können."
},
"Option_keyboardParam_Control_windows": {
"message": "Strg"
},
Expand Down
7 changes: 7 additions & 0 deletions packages/extension/public/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Select a key"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Keep Menu Open on Focus Change",
"description": "Toggle label. When enabled, switching tabs/windows or opening the side panel after running a command does not close the selection menu."
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Keep the selection menu and selected text when you switch tabs or windows, or open the side panel, after running a command, so you can come back and run another command on the same selection."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/es/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Seleccione una tecla"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Mantener el menú abierto al cambiar el foco"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mantiene el menú de selección y el texto seleccionado al cambiar de pestaña o ventana, o abrir el panel lateral, después de ejecutar un comando, para poder volver y ejecutar otro comando sobre la misma selección."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/fr/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Sélectionner une touche"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Garder le menu ouvert lors d'un changement de focus"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Conserve le menu de sélection et le texte sélectionné lorsque vous changez d'onglet ou de fenêtre, ou que vous ouvrez le panneau latéral, après avoir exécuté une commande, afin de pouvoir revenir et exécuter une autre commande sur la même sélection."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/hi/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "कुंजी चुनें"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "फ़ोकस बदलने पर मेनू खुला रखें"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "कमांड चलाने के बाद टैब या विंडो बदलने पर, या साइड पैनल खोलने पर भी चयन मेनू और चयनित टेक्स्ट को बनाए रखता है, ताकि आप वापस आकर उसी चयन पर दूसरा कमांड चला सकें।"
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/id/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Pilih tombol"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Pertahankan Menu Terbuka Saat Fokus Berubah"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mempertahankan menu pilihan dan teks yang dipilih saat Anda berpindah tab atau jendela, atau membuka panel sisi, setelah menjalankan perintah, sehingga Anda dapat kembali dan menjalankan perintah lain pada pilihan yang sama."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/it/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Seleziona tasto"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Mantieni il menu aperto al cambio di focus"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mantiene il menu di selezione e il testo selezionato quando si cambia scheda o finestra, o si apre il pannello laterale, dopo aver eseguito un comando, così da poter tornare ed eseguire un altro comando sulla stessa selezione."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/ja/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "キーを選択"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "フォーカス切替時もメニューを維持する"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "コマンド実行後に別タブやウィンドウへ移動したり、サイドパネルを開いたりしても、選択メニューと選択テキストを維持します。戻ってきたときに続けて別のコマンドを実行できます。"
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/ko/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "키 선택"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "포커스 전환 시에도 메뉴 유지"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "명령 실행 후 탭이나 창을 전환하거나 사이드 패널을 열어도 선택 메뉴와 선택한 텍스트를 유지합니다. 돌아와서 동일한 선택 항목에 다른 명령을 이어서 실행할 수 있습니다."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/ms/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Pilih kekunci"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Kekalkan Menu Terbuka Semasa Tukar Fokus"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mengekalkan menu pemilihan dan teks yang dipilih apabila anda menukar tab atau tetingkap, atau membuka panel sisi, selepas menjalankan arahan, supaya anda boleh kembali dan menjalankan arahan lain pada pilihan yang sama."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/pt_BR/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Selecione uma tecla"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Manter Menu Aberto ao Mudar o Foco"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mantém o menu de seleção e o texto selecionado ao trocar de aba ou janela, ou abrir o painel lateral, após executar um comando, para que você possa voltar e executar outro comando na mesma seleção."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/pt_PT/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Selecione uma tecla"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Manter o Menu Aberto ao Mudar o Foco"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Mantém o menu de seleção e o texto selecionado ao mudar de separador ou janela, ou abrir o painel lateral, depois de executar um comando, para que possa voltar e executar outro comando na mesma seleção."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/ru/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "Выберите клавишу"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "Не закрывать меню при смене фокуса"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "Сохраняет меню выбора и выделенный текст при переключении вкладок или окон, или открытии боковой панели, после выполнения команды, чтобы вы могли вернуться и выполнить другую команду для того же выделения."
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
6 changes: 6 additions & 0 deletions packages/extension/public/_locales/zh_CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@
"Option_startupMethod_keyboard_placeholder": {
"message": "选择键"
},
"Option_keepMenuOpenOnFocusChange": {
"message": "切换焦点时保持菜单打开"
},
"Option_keepMenuOpenOnFocusChange_desc": {
"message": "执行命令后切换标签页、窗口或打开侧边栏时,保持选择菜单和已选文本不变,方便返回后对同一选择内容执行其他命令。"
},
"Option_keyboardParam_Control_windows": {
"message": "Ctrl"
},
Expand Down
Loading
Loading