<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ollama-web.git/src/ollama_web, branch v0.5.3</title>
<subtitle>A lightweight personal Ollama Web UI with web search, PDF attachments, and MCP tools.
</subtitle>
<id>https://git.takashi-2521.com/ollama-web.git/atom?h=v0.5.3</id>
<link rel='self' href='https://git.takashi-2521.com/ollama-web.git/atom?h=v0.5.3'/>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/'/>
<updated>2026-09-13T05:44:53+00:00</updated>
<entry>
<title>release: prepare version 0.5.3</title>
<updated>2026-09-13T05:44:53+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-09-13T05:44:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=e1e4036acfb73fede43167264dc26b4e7713c423'/>
<id>urn:sha1:e1e4036acfb73fede43167264dc26b4e7713c423</id>
<content type='text'>
0.5.3 の公開に向けて、プロジェクトおよび実行時のバージョン情報を更新する。

- pyproject.toml と ollama_web.__version__ を 0.5.3 に更新
- uv.lock のルートパッケージバージョンを同期
- CHANGELOG に 2026-09-13 付けの 0.5.3 セクションを追加
- Unreleased と 0.5.3 の GitHub 比較リンクを更新
- MCP 画像・音声 artifact、vision 非対応モデル向け通知、モバイルのセッション削除修正をリリース対象として確定

検証:
- pytest: 150 passed
- ruff check src tests
- mypy src
- node --check src/ollama_web/static/app.js
- uv lock --check --offline
- sdist / wheel ビルドおよび wheel インストール後の起動確認
</content>
</entry>
<entry>
<title>fix(ui): スマホでセッションを削除できるようにする</title>
<updated>2026-09-13T05:36:46+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-09-13T05:36:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=b24aa19ad22f59556fc7bbb63c58836799239588'/>
<id>urn:sha1:b24aa19ad22f59556fc7bbb63c58836799239588</id>
<content type='text'>
セッション削除ボタンが通常時はdisplay:noneで、li:hover時だけ表示されていたため、持続的なhoverを持たないスマートフォンでは安定して操作できなかった。モバイル幅、hover非対応、coarse pointer環境ではボタンを常時表示し、44x44pxのタップ領域とtouch-actionを設定する。

表示修正後もタップ後の処理がネイティブwindow.confirmと複数のclickリスナーに依存していたため、削除とセッション選択をsession-list上の単一イベント委譲へ統合する。削除ボタンを先に判定して行選択とサイドバー閉鎖へ伝播しないようにした。

ネイティブ確認ダイアログを既存modalスタイルに沿ったアプリ内確認ダイアログへ置き換える。キャンセル、背景タップ、Escape、フォーカス復帰に対応し、DELETE実行中の二重送信を防止する。通信失敗はネイティブalertではなくダイアログ内のaria-live領域へ表示する。

削除ボタンへbutton typeとaria-labelを明示し、確認ダイアログへdialog semanticsと日英のキャンセル文言を追加する。CHANGELOGと、タッチ向けCSSのカスケード順・サイズ・ネイティブconfirm非依存を確認する回帰テストも更新する。

Validation: 150 tests passed; ruff check passed; node --check src/ollama_web/static/app.js passed; git diff --check passed.
</content>
</entry>
<entry>
<title>feat(multimedia): MCP画像・音声artifactの安全な表示経路を追加</title>
<updated>2026-09-13T04:35:03+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-09-13T04:35:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=f2d24cb7d437ad099291262d7c1b021809cd66ae'/>
<id>urn:sha1:f2d24cb7d437ad099291262d7c1b021809cd66ae</id>
<content type='text'>
MCP Tool結果をテキストと型付きartifactへ分離し、画像・音声のbase64をMIME、サイズ、件数のallowlistで検証する。annotations.audienceを反映し、ユーザー向けartifactだけをセッションへ保存してSSEにはメタデータのみを公開する。

画像はvision capabilityが明示されたモデルだけへ渡し、非対応時は既存の多言語プロンプト機構による固定通知へ置き換える。MCP生成音声とユーザー添付音声はOllamaへ送らず、誤デコードしたテキストやbase64がモデル入力へ混入しないポリシーに統一する。

保存メディア用の認証済み同一オリジン配信ルートを追加し、セッションスコープ、MIME allowlist、nosniff、private/no-store、Rangeリクエストを適用する。UIはMCP由来HTMLを使わずDOM APIでimgとaudio controlsを生成し、CSPへmedia-src selfを追加する。

web_searchは文字列メタデータだけを返す既存仕様を維持する。scrape_urlとsearch_and_fetchは画像・音声・動画レスポンスを拒否し、search_and_fetchの対象拡張子を明示的allowlistへ変更して標準Webツールをテキスト専用の契約に揃える。

責務境界と導入しない過剰対策をdocs/multimedia.mdへ記録し、README、ツール仕様、CHANGELOGを更新する。MCP artifact変換・永続化、vision分岐、音声非送信、認証、Range配信、MIME偽装拒否をテストで追加確認した。

Validation: 148 tests passed; ruff check passed; mypy src passed; node --check src/ollama_web/static/app.js passed.
</content>
</entry>
<entry>
<title>release: prepare version 0.5.2</title>
<updated>2026-08-26T10:29:40+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-26T10:29:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=f36cc852cc1792bd624ff701fb2476d0b43fa1af'/>
<id>urn:sha1:f36cc852cc1792bd624ff701fb2476d0b43fa1af</id>
<content type='text'>
Finalize the 0.5.2 changelog for lossless PDF pagination, session-scoped attachment continuation, deduplicated fetched files, and token-only cross-conversation resume.

Synchronize the project metadata, runtime package version, and uv lock entry at 0.5.2. Refresh the exceptiongroup typing-extensions marker emitted by the current uv resolver, and move changelog comparison links to the v0.5.2 release boundary.

Validated with uv lock --check, the complete 132-test suite, Ruff, mypy for 30 source files, source and wheel builds, packaged runtime assets, and application initialization from the installed wheel.
</content>
</entry>
<entry>
<title>fix(tools): PDFの会話間継続をトークン単独で再開可能にする</title>
<updated>2026-08-26T10:23:40+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-26T10:23:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=b495dde6810882efc8481ebebd22ff26a6afb902'/>
<id>urn:sha1:b495dde6810882efc8481ebebd22ff26a6afb902</id>
<content type='text'>
長いPDFを複数会話に分けて取得する際、モデルがurl_or_pathを省略したり、過去の添付IDや古い継続トークンを組み合わせたりして、先頭または以前のページへ戻る問題を改善する。PDFカーソル自体は正しく進んでいたため、汎用LLM層やセッション形式を変更せず、pdf_to_textの入出力契約だけを明確化する。

- continue_fromを自己完結した再開情報として扱い、PDFソース、ページ番号、ページ内文字位置をトークンから復元

- 継続時はurl_or_pathを省略可能にし、競合する値が渡されてもトークン内のソースを優先

- Ollama生成スキーマでもurl_or_pathを任意にして、continue_from単独のツール呼び出しを許可

- 未完了結果へ最新トークン、旧トークンの置換、単独再開、上限時の保持を表すPDF専用メタデータを追加

- 継続メタデータを固定キーと真偽値で表現し、会話言語に依存しない形式へ統一

- 無効トークン時は先頭再試行を禁止し、直前の最新トークンを再利用する機械可読情報を返却

- メタデータをpage-info側へ配置して本文連結を汚さず、結果全体を6000文字以内に再調整

- llm.py、チャット処理、セッションJSON、scrape_url、search_and_fetch、MCPツールは変更しない

検証:

- pytest: 132 passed

- ruff check: passed

- mypy src: passed

- 1463891.1463912.pdf: 12ページ、52577文字をcontinue_from単独の10回で完全再構成

- 指定PDFの最大ツール結果長はメタデータ込み5992文字
</content>
</entry>
<entry>
<title>fix(tools): PDFページングを損失なしカーソル方式へ再設計</title>
<updated>2026-08-23T08:28:39+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-23T08:28:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=33f6b4dbb69e9366e312a8b44dbed9d22e7cba5b'/>
<id>urn:sha1:33f6b4dbb69e9366e312a8b44dbed9d22e7cba5b</id>
<content type='text'>
PDF本文をページ単位で抽出した後に文字数上限で切断しつつ、継続位置だけ次ページへ進めていたため、ページ末尾が復元不能になる問題を修正する。ツール側の本文上限とLLM側の結果上限の不整合、25ページの処理上限、添付経路での継続情報欠落も共通契約で解消する。

- 共通PageResultと、メタデータ込みの結果上限内で本文量を決めるフォーマッターを追加

- v2トークンにPDFのページ番号とページ内文字位置を保持し、v1トークンの読み取り互換性を維持

- pdf_to_text、scrape_url、search_and_fetchを返却済み本文だけカーソルが進む方式へ統一

- max_pdf_pagesを文書全体ではなく1呼び出しの処理上限として扱い、長い単一ページと26ページ目以降の継続取得に対応

- attachment:&lt;file_id&gt;をセッション限定で解決し、既存添付も保存済みプレビューではなく元PDFから再解析

- Web取得ファイルをセッションとURL単位で重複排除し、HTMLおよびテキスト経路の全文ページングも維持

- 正常なページング結果の後段切断を禁止し、結果上限・コンテキスト予算・ラウンド上限では未取得状態を明示

- 日英プロンプト、UIメッセージ、ツールスキーマ、変更履歴を実装へ同期

- 実PDF、30ページ超、長い単一ページ、旧トークン、セッション分離、コンテキスト境界の回帰テストを追加

検証:

- pytest: 130 passed

- ruff check src tests: passed

- mypy src: passed

- c2144.pdf: 19ページ、抽出本文46015文字（ページ区切り込み46051文字）を8回で重複・欠落なく完全再構成
</content>
</entry>
<entry>
<title>release: prepare version 0.5.1</title>
<updated>2026-08-16T12:52:23+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-16T12:52:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=68969bfbeea68ded7ff863d229760562072f910b'/>
<id>urn:sha1:68969bfbeea68ded7ff863d229760562072f910b</id>
<content type='text'>
Finalize the 0.5.1 changelog with the logging lifecycle, search error diagnostics, and streaming chat cleanup delivered since v0.5.0.

Synchronize the project metadata and runtime package version at 0.5.1, and update changelog comparison links for the new release boundary.

Validated with uv lock --check, the complete 118-test suite, Ruff, mypy, source and wheel builds, packaged runtime assets, and application initialization from the installed wheel.
</content>
</entry>
<entry>
<title>refactor: streamline chat flow and improve diagnostics</title>
<updated>2026-08-16T12:34:13+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-16T12:34:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=a9f083785a7e961a291e5366013fc89c0b801b01'/>
<id>urn:sha1:a9f083785a7e961a291e5366013fc89c0b801b01</id>
<content type='text'>
Store server.log inside OLLAMA_WEB_DATA_DIR and manage the ollama-web file handler through the Starlette lifespan. Close and detach the handler on shutdown to prevent duplicate records and Windows file locks when applications are recreated.

Stop converting DuckDuckGo provider failures into empty search results. Record a query-safe traceback, re-raise the original exception, and let ToolRegistry expose the exception type and message as a tool error without adding or spoofing Referer headers.

Remove the unused non-streaming chat_with_tools implementation and its private helpers. Move capability, options, standard tool, MCP tool, and final tools=[] regression coverage onto the production streaming path.

Add integration coverage for data/server.log placement, handler cleanup, repeated lifespans, and provider 403 diagnostics. Update the Unreleased changelog entry.

Validated with 118 tests, Ruff, mypy, diff checks, real DuckDuckGo searches, successful result-page fetches, and observable 401/403 responses from sites that reject automated retrieval.
</content>
</entry>
<entry>
<title>release: prepare version 0.5.0</title>
<updated>2026-08-16T10:38:42+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-16T10:38:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=e45e2dbf160445891ec765ffb3e0e14f106cfb56'/>
<id>urn:sha1:e45e2dbf160445891ec765ffb3e0e14f106cfb56</id>
<content type='text'>
Document the project as a lightweight personal Ollama Web UI that runs directly on the host OS without Docker or a virtual machine, and align the English and Japanese highlights.

Add a Keep a Changelog-style history and record the clipboard fallback, final tool-round disabling, packaging metadata compatibility, and runtime asset inclusion fixes delivered in v0.5.0.

Synchronize the package and runtime version at 0.5.0, remove duplicate setuptools license metadata, and explicitly include templates, static assets, translations, prompts, and bundled fonts in built distributions.

Validated with 115 tests, Ruff, mypy, uv lock checking, sdist/wheel builds, and wheel-installed application initialization.
</content>
</entry>
<entry>
<title>fix(llm): 上限到達後のツール呼び出しを無効化</title>
<updated>2026-08-16T10:24:33+00:00</updated>
<author>
<name>tanaka takashi</name>
<email>isazaka@gmail.com</email>
</author>
<published>2026-08-16T10:24:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.takashi-2521.com/ollama-web.git/commit/?id=8ce6627324c258fead9164b1532241a698284fc4'/>
<id>urn:sha1:8ce6627324c258fead9164b1532241a698284fc4</id>
<content type='text'>
ツールラウンド上限到達後の最終回答生成でも effective_tools を渡していたため、コメント上の「ツールなしで最終回答」と実際のリクエストが一致していなかった。モデルが最終段階で再び tool_calls を生成できる状態も残っていた。

非ストリーミング版とストリーミング版の最終Ollama呼び出しを tools=[] に変更する。通常ラウンドでは従来どおり標準ツールとMCPツールを公開し、上限到達後だけ既存のツール結果から回答をまとめるようにする。

標準ツールとMCPツールの回帰テストを追加し、通常ラウンドにはツール定義が渡ること、最終呼び出しでは空になること、ツール実行・上限通知・最終delta・doneイベントが維持されることを検証した。全115テスト、Ruff、mypy、および実モデルによるWeb検索と複数回スクレイピングの確認を完了している。
</content>
</entry>
</feed>
