diff --git a/Knowledgebase/server.py b/Knowledgebase/server.py index c926b93..db4ed77 100644 --- a/Knowledgebase/server.py +++ b/Knowledgebase/server.py @@ -411,7 +411,8 @@ def search( try: # ── Full-text search ── - conditions = ["deleted = FALSE", "fts @@ plainto_tsquery('simple', %s)"] + conditions = ["deleted = FALSE", + "fts @@ plainto_tsquery('simple', kb_immutable_unaccent(%s))"] params: list[Any] = [query] if types: @@ -427,14 +428,17 @@ def search( conditions.append("importance >= %s") params.append(min_importance) if not include_sessions: - conditions.append("mem_type != 'summary' OR session_id IS NOT NULL") + # Vyřaď session summaries (summary + session_id), ale ponech + # samostatné summary záznamy. POZOR na závorky — bez nich by se + # OR navázalo na celý WHERE a obešlo všechny ostatní filtry. + conditions.append("(mem_type != 'summary' OR session_id IS NULL)") where = " AND ".join(conditions) rows = conn.execute( f""" SELECT id, mem_type, title, content, summary, tags, project, source, session_id, importance, created_at, - ts_rank(fts, plainto_tsquery('simple', %s)) AS score + ts_rank(fts, plainto_tsquery('simple', kb_immutable_unaccent(%s))) AS score FROM kb_memories WHERE {where} ORDER BY score DESC, importance DESC @@ -446,8 +450,11 @@ def search( fts_ids = {r["id"] for r in rows} results = [_row_to_dict(r) for r in rows] - # ── Vector search (pouze pokud semantic=True) ── - query_emb = get_embedding(query) if semantic else None + # ── Vector search ── + # Spustí se když semantic=True, NEBO jako automatický fallback, + # pokud full-text nic nenašel (synonyma / významová shoda). + need_semantic = semantic or not rows + query_emb = get_embedding(query) if need_semantic else None if query_emb: try: import numpy as np diff --git a/claude-memory/MEMORY.md b/claude-memory/MEMORY.md index f4b89ce..5c9e057 100644 --- a/claude-memory/MEMORY.md +++ b/claude-memory/MEMORY.md @@ -2,6 +2,7 @@ - [Pracovat v maintree](feedback_worktree.md) — vždy pracuj v `U:/janssen/`, ne ve worktree větvích - [Proaktivně navrhuj lepší API](feedback_proactive_suggestions.md) — když vidím optimalizovatelný kus pipeline a znám lepší standard (delta, CDC, webhooks…), nabídnu to, ne čekám +- [Průběžně komentovat postup](feedback_narrate_progress.md) — nemizet do tichých tool callů, psát co dělám a proč - [Statistiky emailů přes MCP, ne SSH](feedback_use_mcp_emaily.md) — pro dotazy nad `emaily` db první volba MCP `emaily`, ne paramiko gymnastika - [Projekt Covance UCO3001](project_covance.md) — report vzorků studie 77242113UCO3001, skript `create_report.py`, zdroj + logika OK statusů - [EDC import do MongoDB](project_edc_mongo.md) — skript `medidata/edc_import.py`, import Data Listing + QueryDetails CSV do MongoDB (192.168.1.76), kolekce `queries` + `queries_snapshots` pro tracking vývoje queries v čase diff --git a/claude-memory/feedback_narrate_progress.md b/claude-memory/feedback_narrate_progress.md new file mode 100644 index 0000000..d3e0c2f --- /dev/null +++ b/claude-memory/feedback_narrate_progress.md @@ -0,0 +1,14 @@ +--- +name: feedback_narrate_progress +description: "Průběžně komentovat co dělám, nemizet na dlouho do tichých tool callů" +metadata: + node_type: memory + type: feedback + originSessionId: 82eef5d6-e90f-4973-8006-61d79b0c640f +--- + +Uživatel psychicky špatně snáší dlouhé ticho během práce. Když něco dělám déle (víc tool callů, SSH, delší příkaz), průběžně píšu co zrovna dělám a proč — krátká věta před každou akcí — místo dlouhého tichého bloku, po kterém se ptá „co se děje?". + +**Why:** Bez průběžného komentáře neví, jestli pracuju nebo to zamrzlo, a stresuje ho to. + +**How to apply:** Před delší akcí napiš jednu větu co se chystám udělat. U sekvence tool callů krátce hlásej postup. Nenech ho čekat naslepo. Souvisí s [[feedback_proactive_suggestions]]. diff --git a/claude-memory/project_python_runner.md b/claude-memory/project_python_runner.md index 9a40d6f..6b601a7 100644 --- a/claude-memory/project_python_runner.md +++ b/claude-memory/project_python_runner.md @@ -30,4 +30,6 @@ Klíčové: `msal`, `asn1crypto`, `pymongo`, `psycopg`, `extract-msg`, `beautifu **Logy:** `/mnt/user/Scripts/logs/pipeline_YYYYMMDD_HHMM.log`, symlink `pipeline_latest.log`, retence 30 dní. +**Centrální logging (2026-06-09):** wrapper `0_run_pipeline` posílá do Grafana Loki (přes [[central-logging]] gateway) **každý řádek konzole** každého kroku — `app="email_pipeline"`, pole `logger=step.`. Klient `central_logging*.py` zkopírován do `/scripts/`. Token+gateway NEjsou v kontejneru — dány přes `os.environ.setdefault` přímo ve wrapperu (kroky je dědí jako subprocesy). Grafana dotaz: `{app="email_pipeline"}`. + Souvisí s [[graph-email-import]], [[project-mcp-emaily]].