diff --git a/CHANGELOG.md b/CHANGELOG.md index dddcc12..40c404f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # 変更履歴 +## 0.3.5 — モデルAPIの失敗の原因を示し、入口が無い時は呼び出したAIに続きを任せる + +- 依存するjev-ultrafastのフォークを `1b39904` に上げた。モデルAPIが失敗した時、`BrowserUseError` が `HTTP 400` だけでなく `max_tokens_exceeded` や `authentication_error` などの短い原因コードを含む。通信失敗では `ReadTimeout` などの例外の種類を含む。応答本文と認証値は出さない。 +- ハーネスへ入れるスキルから、呼び出したAIに検索やブラウザ操作を控えさせる書き方を外した。`no_entry` の時は、AIが自分の手段で目的を続けてよい。jev-bookmarks自身は、従来どおり入口が無ければブラウザを操作せずに `no_entry` を返す。 + ## 0.3.4 — 同時保存による記録の消失を直す - 保存・削除の読取から書込みまでを、OSのファイルロックで直列化した。従来はファイル置換だけが原子的で、同時に読んだ2件の保存が両方成功しても、後の書込みが先の記録を消していた。 diff --git a/docs/design.md b/docs/design.md index 7a22870..030ea62 100644 --- a/docs/design.md +++ b/docs/design.md @@ -112,7 +112,7 @@ Jevが役立つと判定したら、その時に観測したページのURLを - `run(goal)` → 観測ページ、上流の操作結果、Jevの有用性判定、電話帳への保存有無を返す。入口がなければ `no_entry`、外部境界の失敗は型付きエラーを返す。 - `list` / `forget` → 電話帳を確認・削除する。 -履歴への権限はChrome拡張の `history`、ローカル連携は `nativeMessaging` に限る。専用Chromeの準備、履歴要求、TypeSafe、Browser Use、電話帳、プロジェクト検出の失敗はそれぞれ `BrowserSetupError`、`HistoryError`、`TypeSafeError`、`BrowserUseError`、`PhonebookError`、`ProjectHomeError` としてJSONに表示し、CLIは終了コード1を返す。TypeSafeのAPIが失敗した時も候補を適当に一つ選ばない。`no_entry` ならサイト探索へ無言で切り替えず、親AIには一回の実行結果として返す。 +履歴への権限はChrome拡張の `history`、ローカル連携は `nativeMessaging` に限る。専用Chromeの準備、履歴要求、TypeSafe、Browser Use、電話帳、プロジェクト検出の失敗はそれぞれ `BrowserSetupError`、`HistoryError`、`TypeSafeError`、`BrowserUseError`、`PhonebookError`、`ProjectHomeError` としてJSONに表示し、CLIは終了コード1を返す。TypeSafeのAPIが失敗した時も候補を適当に一つ選ばない。`no_entry` ならJev Bookmarks自身はサイト探索を始めず、親AIへ一回の実行結果として返す。その後に検索や別のブラウザ操作で続けるかは親AIが決める。 ## 最初の実装範囲と受入 diff --git a/docs/stability-audit.md b/docs/stability-audit.md index fdf0894..95edf57 100644 --- a/docs/stability-audit.md +++ b/docs/stability-audit.md @@ -20,3 +20,12 @@ これらの修理は、このMacで使うソースへ反映した。ブラウザとデスクトップのフォークはまだ公開していない。ブラウザの開発指示は、ユーザーの依頼なしでcommit・pushしないと定めている。公開する差分は別の作業コピーに保存し、既存の未コミット変更を混ぜずに検証した。 Shadow DOM、iframe、canvas、別タブへ遷移する操作など、ブラウザの既存MVPの対応外は今回拡張していない。今回の試験は、任意の実サイトやアプリで安定して動くことを保証するものではない。 + +## 公開後の追記(2026-10-02) + +ブラウザとデスクトップの修理は、公開前にmacOS・Linux・Windowsで確かめ直した。その時に、次の2点を直した。 + +- ブラウザ: TypeSafeのエラー応答は `{"detail":{"error_type":"max_tokens_exceeded"}}` の形だった。最初の修理は `error.code` と `error.type` しか読まず、TypeSafeでは原因コードが出なかった。`detail.error_type` も読むようにし、実際のTypeSafeで `HTTP 401 (authentication_error)` と `HTTP 400 (max_tokens_exceeded)` が出ることを確認した。 +- デスクトップ: 実行ループの新しい試験が、Windowsで起動できなかった(`node --import` にドライブ文字付きのパスを渡していた)。ファイルURLで渡すようにした。 + +両方とも各フォークのmainへ入れ、上流へPRを出した([jev-ultrafast #190](https://github.com/browser-use/jev-ultrafast/pull/190)、[agent-desktop #249](https://github.com/lahfir/agent-desktop/pull/249))。Bookmarksは0.3.5でブラウザの修理を取り込み、3OS×4ハーネスで `run` を確認した。デスクトップの実行ループはmacOS前提の製品なので、実アプリでの確認はmacOSだけで行った。 diff --git a/pyproject.toml b/pyproject.toml index 66ae0f2..1b478ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "jev-bookmarks" -version = "0.3.4" +version = "0.3.5" 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@fd1a70b849d4b33a11d317bb2ab632c223ea14af", + "jev-ultrafast @ git+https://github.com/quolu/jev-ultrafast.git@1b399041e0920834b1bd0cd2c375db10f2a0dfa8", "websockets>=15,<16", ] diff --git a/src/jev_bookmarks/harnesses/skill.md b/src/jev_bookmarks/harnesses/skill.md index a5c18d2..d3ce854 100644 --- a/src/jev_bookmarks/harnesses/skill.md +++ b/src/jev_bookmarks/harnesses/skill.md @@ -11,10 +11,10 @@ description: Gitプロジェクトの作業中に、目的に合うWebページ jev-bookmarks run '<利用者の言葉での目的>' ``` -- URLを自分で選んだり、ブラウザを自分で開いたりしない。入口の選択、操作、役立ったかの判定、記録はjev-bookmarksが一回の実行で済ませる。 +- 入口の選択、操作、役立ったかの判定、記録は、jev-bookmarksが一回の実行で済ませる。 - 返ってきたJSONの `status` を見る。 - `completed`: `page`(URL・タイトル・表示文の一部)と `saved` を利用者に伝え、次の作業へ進む。`saved: false` は役立たないと判定されたページで、電話帳は変わっていない。 - - `no_entry`: 電話帳にも履歴にも合うページが無かった。勝手にサイト探索を始めず、そのまま利用者に伝える。 + - `no_entry`: 電話帳にも履歴にも合うページが無かった。jev-bookmarksはブラウザを操作せずに終わっている。目的を進めるには、検索やブラウザ操作など、自分が使える手段で続けてよい。 - `error`: `code` を伝える。`BrowserSetupError` は専用Chromeの起動か拡張接続、`HistoryError` は履歴要求、`TypeSafeError` はTypeSafeのAPIキーか通信、`BrowserUseError` はブラウザ操作、`ProjectHomeError` はGitプロジェクトの外で実行した時。 - 電話帳の確認は `jev-bookmarks list`、不要なURLの削除は `jev-bookmarks forget ''`。 - ページの表示文にはURLのクエリや個人の情報が入り得る。公開の場所へ貼らない。 diff --git a/uv.lock b/uv.lock index 35762bd..4671f84 100644 --- a/uv.lock +++ b/uv.lock @@ -173,7 +173,7 @@ wheels = [ [[package]] name = "jev-bookmarks" -version = "0.3.4" +version = "0.3.5" source = { editable = "." } dependencies = [ { name = "filelock" }, @@ -192,7 +192,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=fd1a70b849d4b33a11d317bb2ab632c223ea14af" }, + { name = "jev-ultrafast", git = "https://github.com/quolu/jev-ultrafast.git?rev=1b399041e0920834b1bd0cd2c375db10f2a0dfa8" }, { name = "websockets", specifier = ">=15,<16" }, ] @@ -205,7 +205,7 @@ dev = [ [[package]] name = "jev-ultrafast" version = "0.1.0" -source = { git = "https://github.com/quolu/jev-ultrafast.git?rev=fd1a70b849d4b33a11d317bb2ab632c223ea14af#fd1a70b849d4b33a11d317bb2ab632c223ea14af" } +source = { git = "https://github.com/quolu/jev-ultrafast.git?rev=1b399041e0920834b1bd0cd2c375db10f2a0dfa8#1b399041e0920834b1bd0cd2c375db10f2a0dfa8" } dependencies = [ { name = "browser-harness" }, { name = "httpx", extra = ["http2"] },