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 f59f46c0..945a7266 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 c36a0ebb..7e3747cf 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 eda4d1ee..cb1cad96 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