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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
env:
# 上流jev-ultrafastは既定の文字コードでファイルを読むので、WindowsではUTF-8モードが要る(CLIは自動で切り替える)。
# CLIはWindowsでUTF-8モードへ切り替えて動く。試験も同じ条件で動かす。
PYTHONUTF8: "1"
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# 変更履歴

## 0.2.2 — jev-ultrafastをフォークから使う

- 上流 browser-use/jev-ultrafast に私たちの修正が入るまで、フォーク quolu/jev-ultrafast の確認済みの版(`e24e14f`)をコミットで固定して使う。フォークには、同梱ファイルをUTF-8で読む修正(Windowsのcp932で落ちる問題)と、初回のBLOCKED判定後に画面の変化を確かめる修正が入っている。
- WindowsでCLIをUTF-8モードで起動し直す理由を、上流の都合から「ハーネスへ返すJSONと読み書きするファイルをUTF-8にそろえる」に改めた。動きは変わらない。

## 0.2.1 — 入口選びの修正

- 目的のページそのものが候補に無くても、そこへたどれる同じサイトの入口を選ぶようにした。これまでは候補が少ないと、たどれる入口があっても `no_entry` で止まることがあった。Jevへの問いに「数回のクリックでたどり着けるか」という入口の定義を明記し、`none` は目的と関係するサイトの候補が一つも無い時だけにした。
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ node --test tests/extension.test.mjs
uv run ruff check .
```

Windowsでは上流の都合で `PYTHONUTF8=1` を付けてテストを実行してください(CLIは自動でUTF-8モードに切り替えます)。
Windowsでは `PYTHONUTF8=1` を付けてテストを実行してください。CLIは実行時に自動でUTF-8モードへ切り替わるので、試験も同じ条件にそろえます。

通常のテストは公開の `example.com` と一時Gitプロジェクトを使い、Chromeの実履歴やTypeSafeのAPIキーを必要としません。実機確認を行う場合は [README](README.md#導入) の設定を使い、結果に私用URLやページ本文を載せないでください。

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ flowchart LR

## 導入

Python 3.12、`uv`、Git、Google Chrome、[TypeSafe](https://docs.typesafe.ai/)のAPIキー、[jev-ultrafast](https://github.com/browser-use/jev-ultrafast)が使うブラウザ接続とモデル設定が必要です。手順はmacOS・Windows・Linuxで同じです(Windowsは PowerShell で実行します)。
Python 3.12、`uv`、Git、Google Chrome、[TypeSafe](https://docs.typesafe.ai/)のAPIキー、[jev-ultrafast](https://github.com/browser-use/jev-ultrafast)が使うブラウザ接続とモデル設定が必要です。jev-ultrafastは、上流に修正が入るまで[フォーク](https://github.com/quolu/jev-ultrafast)の版を使います(`uv sync` で自動的に入ります)。手順はmacOS・Windows・Linuxで同じです(Windowsは PowerShell で実行します)。

```sh
git clone https://github.com/kitepon/jev-bookmarks.git
Expand Down
4 changes: 2 additions & 2 deletions docs/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@ sequenceDiagram
| Native Messaging host | Chrome拡張とローカルコマンドを接続する。ブラウザの内部DBを読まない。 |
| Jev Bookmarksのローカルコマンド | `run` の全工程、Jevへの問合せ、操作後の有用性判定、電話帳の永続化を所有する。別に一覧と削除を提供する。 |
| TypeSafe Jev | 有限個のURL候補から選び、操作後のページが目的に役立つかを判定する。 |
| 上流 `jev-ultrafast` | 開始URLと目的を受け取り、Browser Harness経由でChromeを観測・操作する。各操作の選択は上流ループが所有する。 |
| 上流 `jev-ultrafast` | 開始URLと目的を受け取り、Browser Harness経由でChromeを観測・操作する。各操作の選択は上流ループが所有する。上流 browser-use/jev-ultrafast に私たちの修正が入るまでは、フォーク quolu/jev-ultrafast の確認済みの版をコミットで固定して使う。上流に入ったら上流へ戻す。 |

Chrome拡張からホストへは `connectNative` を使う。拡張が起動したホストは同じユーザーだけが接続できるローカルIPCを開き、コマンドからの履歴要求を拡張へ渡す。macOSとLinuxは所有者だけが入れる一時ディレクトリのUnixソケット、Windowsは起動ごとの鍵で相互認証する名前付きパイプを使う。WindowsのChromeはレジストリ(HKCU)に登録したマニフェストを読む。拡張は要求時に履歴を検索して結果を返す。拡張IDを固定してホスト側で許可し、Chrome起動中に要求を往復できることはmacOS・Windows・Linuxで実測した。履歴を持つChromeプロファイルと `jev-ultrafast` が操作するプロファイルが同じであることは利用時の設定要件であり、プロファイルIDの自動照合はない。電話帳から入口が選べれば履歴接続は使わない。履歴が必要な時に接続できなければ `HistoryError`、Browser Useの失敗は `BrowserUseError` を返す。

## OSとハーネスへの適合

共通コードは今のOSやハーネスで分岐しない。OSごとの違いは `platforms/` の一つのファイルに、ハーネスごとの違いは `harnesses/` の一つのファイルに閉じる。

- OS適合(`platforms/macos.py`・`windows.py`・`linux.py`): 端末共通データの場所、Native Messagingマニフェストの置き場と登録、hostの実行ファイル、履歴接続のローカルIPC(待受と要求)、CLI起動時の準備を持つ。Windowsは上流 `jev-ultrafast` が既定の文字コードでファイルを読むため、CLIをUTF-8モードで起動し直す。
- OS適合(`platforms/macos.py`・`windows.py`・`linux.py`): 端末共通データの場所、Native Messagingマニフェストの置き場と登録、hostの実行ファイル、履歴接続のローカルIPC(待受と要求)、CLI起動時の準備を持つ。WindowsはCLIをUTF-8モードで起動し直し、ハーネスへ返すJSONと読み書きするファイルをUTF-8にそろえる。
- ハーネス適合(`harnesses/claude.py`・`codex.py`・`cursor.py`・`grok.py`): 親AIとなるハーネスに `run` の呼び方を教えるスキルの置き場と、そのハーネスでの実行上の注意(タイムアウト、サンドボックス)を持つ。スキル本文の共通部分は `harnesses/skill.md`。`jev-bookmarks harness install` が入れ、既存の自作スキルは上書きしない。

## 候補の選び方
Expand Down
5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
[project]
name = "jev-bookmarks"
version = "0.2.1"
version = "0.2.2"
description = "Chrome履歴から役立つページを選び、Jevで操作してプロジェクトごとに記録する"
license = "MIT"
requires-python = ">=3.12"
dependencies = [
"httpx[http2]>=0.28,<1",
"jev-ultrafast @ git+https://github.com/browser-use/jev-ultrafast.git",
# 上流 browser-use/jev-ultrafast に私たちの修正(UTF-8での読み込みなど)が入るまで、フォークの確認済みの版を使う。
"jev-ultrafast @ git+https://github.com/quolu/jev-ultrafast.git@e24e14f1488e8ec35a544a47d78b9747ebefbdcb",
]

[project.scripts]
Expand Down
2 changes: 1 addition & 1 deletion src/jev_bookmarks/platforms/windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def register_host(manifest: Path) -> None:


def prepare_process() -> None:
# 上流のjev-ultrafastはファイルを既定の文字コード(cp932)で読むので、UTF-8モードで動かし直す。
# 既定の文字コード(cp932)ではなくUTF-8で動かし、ハーネスへ返すJSONや読み書きするファイルをUTF-8にそろえる。
if not sys.flags.utf8_mode:
completed = subprocess.run([sys.executable, "-X", "utf8", "-m", "jev_bookmarks.cli", *sys.argv[1:]])
sys.exit(completed.returncode)
Expand Down
6 changes: 3 additions & 3 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading