diff --git a/CHANGELOG.md b/CHANGELOG.md index 40c404f..31e7e7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # 変更履歴 +## 0.3.6 — 親の実行順に揃えたJevを使う + +- Jevの依存を `1606fc7` へ更新した。操作の選択と実行は親のループに揃え、フォークで追加していた初回BLOCKEDの待機を外した。UTF-8、選択欄の名前、原因コード、クリック位置、入れ子のスクロールとチェック状態の修正は引き続き使う。 +- Browser Harnessのライブラリも、同じ整理済みのソース `9efaa61` へ固定した。 + ## 0.3.5 — モデルAPIの失敗の原因を示し、入口が無い時は呼び出したAIに続きを任せる - 依存するjev-ultrafastのフォークを `1b39904` に上げた。モデルAPIが失敗した時、`BrowserUseError` が `HTTP 400` だけでなく `max_tokens_exceeded` や `authentication_error` などの短い原因コードを含む。通信失敗では `ReadTimeout` などの例外の種類を含む。応答本文と認証値は出さない。 diff --git a/README.en.md b/README.en.md index 28a834b..f52f415 100644 --- a/README.en.md +++ b/README.en.md @@ -16,6 +16,8 @@ jev-bookmarks run 'Show the Example Domain page' The command first checks `/jev-bookmark/bookmarks.json`, then asks the Chrome extension for history candidates if needed. Jev selects an existing URL, `jev-ultrafast` operates Chrome, and Jev judges the page observed after the operation. Only a useful page is saved. The result is JSON; the parent agent does not need to choose or approve intermediate steps. +Version 0.3.6 pins Jev to the maintained source that follows the upstream execution sequence. Jev Bookmarks continues to own the separate usefulness judgment for address-book entries. + ## Install (macOS, Windows, Linux) You need Python 3.12, `uv`, Git, Google Chrome, a TypeSafe API key, and a working `jev-ultrafast` model configuration. diff --git a/README.md b/README.md index 192d188..06e3701 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,8 @@ flowchart LR | 通常のブックマーク | 利用者が登録する | 利用者が判断する | 残る | | Jev Bookmarks | 目的文からJevが選ぶ | Jevがページを判定する | 役立ったURLだけプロジェクトに残る | +0.3.6は、親の実行順に揃えたJevの版を使います。操作の選択と実行はそのループが担当し、電話帳へ残すページの有用性判定は従来どおりJev Bookmarksが行います。 + ## 導入 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 で実行します)。 diff --git a/docs/design.md b/docs/design.md index 030ea62..f6496d3 100644 --- a/docs/design.md +++ b/docs/design.md @@ -64,7 +64,7 @@ sequenceDiagram | Native Messaging host | Chrome拡張とローカルコマンドを接続する。ブラウザの内部DBを読まない。 | | Jev Bookmarksのローカルコマンド | `run` の全工程、Jevへの問合せ、操作後の有用性判定、電話帳の永続化を所有する。別に一覧と削除を提供する。 | | TypeSafe Jev | 有限個のURL候補から選び、操作後のページが目的に役立つかを判定する。 | -| 上流 `jev-ultrafast` | 開始URLと目的を受け取り、Browser Harness経由でChromeを観測・操作する。各操作の選択は上流ループが所有する。上流 browser-use/jev-ultrafast に私たちの修正が入るまでは、フォーク quolu/jev-ultrafast の確認済みの版をコミットで固定して使う。上流に入ったら上流へ戻す。 | +| 上流 `jev-ultrafast` | 開始URLと目的を受け取り、Browser Harness経由でChromeを観測・操作する。各操作の選択は上流ループが所有する。上流 browser-use/jev-ultrafast に私たちの修正が入るまでは、フォーク quolu/jev-ultrafast の確認済みの版をコミットで固定して使う。上流に入ったら上流へ戻す。0.3.6は親の実行ループに揃えた `1606fc7` を使う。 | Chrome拡張からホストへは `connectNative` を使う。拡張が起動したホストは同じユーザーだけが接続できるローカルIPCを開き、コマンドからの履歴要求を拡張へ渡す。macOSとLinuxは所有者だけが入れる一時ディレクトリのUnixソケット、Windowsは起動ごとの鍵で相互認証する名前付きパイプを使う。WindowsのChromeはレジストリ(HKCU)に登録したマニフェストを読む。hostは専用拡張のoriginから起動された時だけ待ち受け、待受先と鍵ファイルは0.2系(普段のChromeへ読み込んでいた旧拡張)のものと分ける。普段のChromeに旧拡張が残っていても、専用Chromeの接続を横取りしない。`install` は0.2系が普段のChrome向けに置いたマニフェストを消す。拡張は要求時に履歴を検索して結果を返す。 diff --git a/pyproject.toml b/pyproject.toml index 1b478ab..f0dbfb1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "jev-bookmarks" -version = "0.3.5" +version = "0.3.6" description = "Chrome履歴から役立つページを選び、Jevで操作してプロジェクトごとに記録する" license = "MIT" requires-python = ">=3.12" @@ -8,7 +8,7 @@ dependencies = [ "filelock>=3.32.7,<4", "httpx[http2]>=0.28,<1", # 上流 browser-use/jev-ultrafast に私たちの修正(UTF-8での読み込みなど)が入るまで、フォークの確認済みの版を使う。 - "jev-ultrafast @ git+https://github.com/quolu/jev-ultrafast.git@1b399041e0920834b1bd0cd2c375db10f2a0dfa8", + "jev-ultrafast @ git+https://github.com/quolu/jev-ultrafast.git@1606fc7319352a08f4d8752eedad87b860d95250", "websockets>=15,<16", ] diff --git a/uv.lock b/uv.lock index 4671f84..9081ad6 100644 --- a/uv.lock +++ b/uv.lock @@ -18,17 +18,13 @@ wheels = [ [[package]] name = "browser-harness" version = "0.1.13" -source = { registry = "https://pypi.org/simple" } +source = { git = "https://github.com/quolu/browser-harness.git?rev=9efaa617eca9efa0ca4d29766a72c31d387cf946#9efaa617eca9efa0ca4d29766a72c31d387cf946" } dependencies = [ { name = "cdp-use" }, { name = "fetch-use" }, { name = "pillow" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/fe/59ab493e7cf76731a7f5aabae3821eea6ea82a628c14c30e7aed48adc362/browser_harness-0.1.13.tar.gz", hash = "sha256:284dc547a042c309feafd9a9f4a74b2a8651b7963ea3ac6cb2f2d64889f6a8f3", size = 114905, upload-time = "2026-09-04T02:53:23.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/bd/f166cf9a465eff436048d25851ab28b0d798af02b56998127a4165227fc4/browser_harness-0.1.13-py3-none-any.whl", hash = "sha256:2491459e4bfc0ee8aea22dc6c4680fc0f791b7ba553446323c50d2883449d769", size = 121123, upload-time = "2026-09-04T02:53:21.841Z" }, -] [[package]] name = "cdp-use" @@ -173,7 +169,7 @@ wheels = [ [[package]] name = "jev-bookmarks" -version = "0.3.5" +version = "0.3.6" source = { editable = "." } dependencies = [ { name = "filelock" }, @@ -192,7 +188,7 @@ dev = [ requires-dist = [ { name = "filelock", specifier = ">=3.32.7,<4" }, { name = "httpx", extras = ["http2"], specifier = ">=0.28,<1" }, - { name = "jev-ultrafast", git = "https://github.com/quolu/jev-ultrafast.git?rev=1b399041e0920834b1bd0cd2c375db10f2a0dfa8" }, + { name = "jev-ultrafast", git = "https://github.com/quolu/jev-ultrafast.git?rev=1606fc7319352a08f4d8752eedad87b860d95250" }, { name = "websockets", specifier = ">=15,<16" }, ] @@ -205,7 +201,7 @@ dev = [ [[package]] name = "jev-ultrafast" version = "0.1.0" -source = { git = "https://github.com/quolu/jev-ultrafast.git?rev=1b399041e0920834b1bd0cd2c375db10f2a0dfa8#1b399041e0920834b1bd0cd2c375db10f2a0dfa8" } +source = { git = "https://github.com/quolu/jev-ultrafast.git?rev=1606fc7319352a08f4d8752eedad87b860d95250#1606fc7319352a08f4d8752eedad87b860d95250" } dependencies = [ { name = "browser-harness" }, { name = "httpx", extra = ["http2"] },