From 9d0a993c2a5321535c549c64f94819e109e5e2a3 Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sat, 13 Dec 2025 21:34:47 +0100 Subject: [PATCH] feat(vector-viz): add news_item support for links and chunk expansion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for news_item document type in the vector visualization page: - Add "News" checkbox to document type filter options - Add URL handler to link news items to /apps/news/item/{id} - Add content fetching for news items in chunk context expansion This enables users to search and view news articles in the vector visualization, with clickable links back to Nextcloud News and the ability to expand chunks to see full article context. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../auth/static/vector-viz.js | 2 ++ .../auth/templates/vector_viz.html | 4 ++++ nextcloud_mcp_server/search/context.py | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/nextcloud_mcp_server/auth/static/vector-viz.js b/nextcloud_mcp_server/auth/static/vector-viz.js index f59f46c..945a726 100644 --- a/nextcloud_mcp_server/auth/static/vector-viz.js +++ b/nextcloud_mcp_server/auth/static/vector-viz.js @@ -203,6 +203,8 @@ function vizApp() { return `${baseUrl}/apps/contacts`; case 'deck': return `${baseUrl}/apps/deck`; + case 'news_item': + return `${baseUrl}/apps/news/item/${result.id}`; default: return `${baseUrl}`; } diff --git a/nextcloud_mcp_server/auth/templates/vector_viz.html b/nextcloud_mcp_server/auth/templates/vector_viz.html index c36a0eb..7e3747c 100644 --- a/nextcloud_mcp_server/auth/templates/vector_viz.html +++ b/nextcloud_mcp_server/auth/templates/vector_viz.html @@ -68,6 +68,10 @@ Deck + diff --git a/nextcloud_mcp_server/search/context.py b/nextcloud_mcp_server/search/context.py index eda4d1e..cb1cad9 100644 --- a/nextcloud_mcp_server/search/context.py +++ b/nextcloud_mcp_server/search/context.py @@ -524,6 +524,26 @@ async def _fetch_document_text( f"Error fetching file content for {doc_id}: {e}", exc_info=True ) return None + elif doc_type == "news_item": + # Fetch news item by ID + from nextcloud_mcp_server.vector.html_processor import html_to_markdown + + item = await nc_client.news.get_item(int(doc_id)) + # Reconstruct full content as indexed: title + source + URL + body + # This ensures chunk offsets align with indexed content structure + body_markdown = html_to_markdown(item.get("body", "")) + item_title = item.get("title", "") + item_url = item.get("url", "") + feed_title = item.get("feedTitle", "") + + content_parts = [item_title] + if feed_title: + content_parts.append(f"Source: {feed_title}") + if item_url: + content_parts.append(f"URL: {item_url}") + content_parts.append("") # Blank line + content_parts.append(body_markdown) + return "\n".join(content_parts) else: logger.warning(f"Unsupported doc_type for context expansion: {doc_type}") return None