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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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件の保存が両方成功しても、後の書込みが先の記録を消していた。
Expand Down
2 changes: 1 addition & 1 deletion docs/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -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が決める。

## 最初の実装範囲と受入

Expand Down
9 changes: 9 additions & 0 deletions docs/stability-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -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だけで行った。
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
[project]
name = "jev-bookmarks"
version = "0.3.4"
version = "0.3.5"
description = "Chrome履歴から役立つページを選び、Jevで操作してプロジェクトごとに記録する"
license = "MIT"
requires-python = ">=3.12"
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",
]

Expand Down
4 changes: 2 additions & 2 deletions src/jev_bookmarks/harnesses/skill.md
Original file line number Diff line number Diff line change
Expand Up @@ -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>'`。
- ページの表示文にはURLのクエリや個人の情報が入り得る。公開の場所へ貼らない。
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