/** obsidian_rag_status tool implementation. */ import type { ObsidianRagConfig } from "../utils/config.js"; import type { ResponseEnvelope } from "../utils/types.js"; import { makeEnvelope } from "../utils/response.js"; import { readSyncResult } from "../services/indexer-bridge.js"; export async function statusTool( config: ObsidianRagConfig, ): Promise> { const sync = readSyncResult(config); const ollamaUp = await checkOllama(config); return makeEnvelope( sync ? "healthy" : "unavailable", { plugin_health: sync ? "healthy" : "unavailable", total_docs: sync?.indexed_files ?? 0, total_chunks: sync?.total_chunks ?? 0, last_sync: sync?.timestamp ?? null, unindexed_files: 0, ollama_status: ollamaUp ? "up" : "down", active_job: null, }, null, ); } async function checkOllama(config: ObsidianRagConfig): Promise { try { const res = await fetch(`${config.embedding.base_url}/api/tags`, { signal: AbortSignal.timeout(3000) }); return res.ok; } catch { return false; } }