fix: correct V3 search filter key and response field names in ae_knowledge
- Filter key is "and" not "and_filters" (V3 API format) - Entry IDs use journal_entry_id/id, not id_random (id_random is None) - Dates use updated_on/created_on, not updated_at/created_at - Total count lives in meta.data_list_count, not top-level total/count - Inject query_string="%" when and filters present but no query, since the V3 search engine requires query_string for filters to apply - Normalize tags from string to list in both entry_read and entries_list - Fix order_by to use updated_on (not updated_at) in entries_list - Correct ARCH__AE_INTEGRATION.md: and_filters → and, or_filters → or Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -122,7 +122,10 @@ def _sync_journal_search(
|
|||||||
if priority is not None:
|
if priority is not None:
|
||||||
and_filters.append({"field": "priority", "op": "eq", "value": priority})
|
and_filters.append({"field": "priority", "op": "eq", "value": priority})
|
||||||
if and_filters:
|
if and_filters:
|
||||||
search_body["and_filters"] = and_filters
|
search_body["and"] = and_filters
|
||||||
|
# query_string must be present for `and` filters to apply
|
||||||
|
if "query_string" not in search_body:
|
||||||
|
search_body["query_string"] = "%"
|
||||||
|
|
||||||
params: dict = {}
|
params: dict = {}
|
||||||
if journal_id:
|
if journal_id:
|
||||||
@@ -145,7 +148,7 @@ def _sync_journal_search(
|
|||||||
return f"Journal search error: {e}"
|
return f"Journal search error: {e}"
|
||||||
|
|
||||||
entries = data.get("data", [])
|
entries = data.get("data", [])
|
||||||
total = data.get("total") or data.get("count") or len(entries)
|
total = (data.get("meta") or {}).get("data_list_count") or len(entries)
|
||||||
|
|
||||||
if not entries:
|
if not entries:
|
||||||
desc = query or tags or type_code or topic_code or f"journal {journal_id}"
|
desc = query or tags or type_code or topic_code or f"journal {journal_id}"
|
||||||
@@ -156,12 +159,11 @@ def _sync_journal_search(
|
|||||||
|
|
||||||
for entry in entries:
|
for entry in entries:
|
||||||
title = entry.get("name") or "(untitled)"
|
title = entry.get("name") or "(untitled)"
|
||||||
entry_id = entry.get("id_random", "")
|
entry_id = entry.get("journal_entry_id") or entry.get("id") or ""
|
||||||
journal_name = entry.get("journal_name") or entry.get("parent_name") or ""
|
journal_name = entry.get("journal_name") or entry.get("parent_name") or ""
|
||||||
summary = entry.get("summary") or ""
|
summary = entry.get("summary") or ""
|
||||||
entry_tags = entry.get("tags") or []
|
entry_tags = entry.get("tags") or []
|
||||||
updated = (entry.get("updated_on") or entry.get("updated_at") or
|
updated = (entry.get("updated_on") or entry.get("created_on") or "")[:10]
|
||||||
entry.get("created_on") or entry.get("created_at") or "")[:10]
|
|
||||||
content_preview = (entry.get("content") or "")[:400].replace("\n", " ")
|
content_preview = (entry.get("content") or "")[:400].replace("\n", " ")
|
||||||
|
|
||||||
header = f"**{title}**"
|
header = f"**{title}**"
|
||||||
@@ -357,9 +359,10 @@ def _sync_journal_entry_read(entry_id: str, max_content_chars: int) -> str:
|
|||||||
title = entry.get("name") or "(untitled)"
|
title = entry.get("name") or "(untitled)"
|
||||||
journal = entry.get("journal_name") or entry.get("parent_name") or ""
|
journal = entry.get("journal_name") or entry.get("parent_name") or ""
|
||||||
summary = entry.get("summary") or ""
|
summary = entry.get("summary") or ""
|
||||||
tags = entry.get("tags") or []
|
raw_tags = entry.get("tags") or []
|
||||||
|
tags = raw_tags if isinstance(raw_tags, list) else [t.strip() for t in str(raw_tags).split(",") if t.strip()]
|
||||||
content = entry.get("content") or ""
|
content = entry.get("content") or ""
|
||||||
updated = (entry.get("updated_at") or entry.get("created_at") or "")[:19].replace("T", " ")
|
updated = (entry.get("updated_on") or entry.get("created_on") or "")[:19].replace("T", " ")
|
||||||
enabled = entry.get("enable", True)
|
enabled = entry.get("enable", True)
|
||||||
|
|
||||||
lines = [f"# {title}"]
|
lines = [f"# {title}"]
|
||||||
@@ -407,7 +410,7 @@ def _sync_journal_entries_list(journal_id: str, max_results: int, page: int) ->
|
|||||||
search_body: dict = {
|
search_body: dict = {
|
||||||
"page_size": max_results,
|
"page_size": max_results,
|
||||||
"page": page,
|
"page": page,
|
||||||
"order_by": "-updated_at",
|
"order_by": "-updated_on",
|
||||||
}
|
}
|
||||||
params = {"for_obj_type": "journal", "for_obj_id": journal_id}
|
params = {"for_obj_type": "journal", "for_obj_id": journal_id}
|
||||||
|
|
||||||
@@ -426,7 +429,7 @@ def _sync_journal_entries_list(journal_id: str, max_results: int, page: int) ->
|
|||||||
return f"Journal entries list error: {e}"
|
return f"Journal entries list error: {e}"
|
||||||
|
|
||||||
entries = data.get("data", [])
|
entries = data.get("data", [])
|
||||||
total = data.get("total") or data.get("count") or len(entries)
|
total = (data.get("meta") or {}).get("data_list_count") or len(entries)
|
||||||
|
|
||||||
if not entries:
|
if not entries:
|
||||||
return f"No entries found in journal `{journal_id}`."
|
return f"No entries found in journal `{journal_id}`."
|
||||||
@@ -435,10 +438,11 @@ def _sync_journal_entries_list(journal_id: str, max_results: int, page: int) ->
|
|||||||
lines = [f"Entries in journal `{journal_id}` — showing {offset}–{offset + len(entries) - 1} of {total}:\n"]
|
lines = [f"Entries in journal `{journal_id}` — showing {offset}–{offset + len(entries) - 1} of {total}:\n"]
|
||||||
for i, entry in enumerate(entries, offset):
|
for i, entry in enumerate(entries, offset):
|
||||||
title = entry.get("name") or "(untitled)"
|
title = entry.get("name") or "(untitled)"
|
||||||
entry_id = entry.get("id_random", "")
|
entry_id = entry.get("journal_entry_id") or entry.get("id") or ""
|
||||||
tags = entry.get("tags") or []
|
raw_tags = entry.get("tags") or []
|
||||||
|
tags = raw_tags if isinstance(raw_tags, list) else [t.strip() for t in str(raw_tags).split(",") if t.strip()]
|
||||||
summary = entry.get("summary") or ""
|
summary = entry.get("summary") or ""
|
||||||
updated = (entry.get("updated_at") or entry.get("created_at") or "")[:10]
|
updated = (entry.get("updated_on") or entry.get("created_on") or "")[:10]
|
||||||
enabled = entry.get("enable", True)
|
enabled = entry.get("enable", True)
|
||||||
|
|
||||||
status = "" if enabled else " [disabled]"
|
status = "" if enabled else " [disabled]"
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ POST /v3/crud/journal_entry/search
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"query_string": "fulltext search term",
|
"query_string": "fulltext search term",
|
||||||
"and_filters": [
|
"and": [
|
||||||
{ "field": "tags", "op": "icontains", "value": "networking" },
|
{ "field": "tags", "op": "icontains", "value": "networking" },
|
||||||
{ "field": "created_on", "op": "gte", "value": "2026-01-01" }
|
{ "field": "created_on", "op": "gte", "value": "2026-01-01" }
|
||||||
],
|
],
|
||||||
"or_filters": [...],
|
"or": [...],
|
||||||
"page_size": 20,
|
"page_size": 20,
|
||||||
"page": 1,
|
"page": 1,
|
||||||
"order_by": "-updated_on"
|
"order_by": "-updated_on"
|
||||||
|
|||||||
Reference in New Issue
Block a user