52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
"""Built-in obsidian-wiki skill templates.
|
|
|
|
Mirrors the key intent of ``ar9av/obsidian-wiki`` skills so the backend can
|
|
write vault content that stays compatible with the original tooling without
|
|
shelling out to its CLI:
|
|
|
|
- ``wiki-capture`` — how a conversation becomes a *declarative* knowledge note
|
|
(frontmatter schema + Context/Finding/Reasoning/Implications/Related body).
|
|
- ``wiki-query`` — layered retrieval (hot.md → index.md → frontmatter → body).
|
|
- ``wiki-export`` — graph artifacts (graph.json / graph.html / graphml / cypher).
|
|
|
|
These are intentionally lightweight: the structures here are what
|
|
:mod:`deerflow.knowledge.markdown_vault` and :mod:`deerflow.knowledge.extractor`
|
|
produce, and what the first-release LLM prompt (future enhancement) should
|
|
target.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
# Category → vault sub-directory (wiki-capture page taxonomy, §8 of the dev doc).
|
|
CATEGORY_DIRS = {
|
|
"synthesis": "synthesis",
|
|
"concepts": "concepts",
|
|
"concept": "concepts",
|
|
"references": "references",
|
|
"reference": "references",
|
|
"source": "references",
|
|
"decision": "synthesis",
|
|
"journal": "journal",
|
|
"session": "journal",
|
|
}
|
|
|
|
# Body section headings (wiki-capture). Declarative knowledge, never a chat log.
|
|
BODY_SECTIONS = ("Context", "Finding / Decision", "Reasoning", "Implications", "Related")
|
|
|
|
# Inline provenance markers reused from wiki-capture.
|
|
INFERRED_MARKER = "^[inferred]"
|
|
AMBIGUOUS_MARKER = "^[ambiguous]"
|
|
|
|
WIKI_CAPTURE_GUIDANCE = """\
|
|
Capture *declarative* knowledge, not a chat transcript. Classify the note as one
|
|
of: synthesis, concept, source, decision, session. Prefer at least two
|
|
[[wikilinks]]. Mark inferred content with ^[inferred] and uncertain/conflicting
|
|
content with ^[ambiguous]. Project-specific knowledge belongs under
|
|
projects/<project-name>/...
|
|
"""
|
|
|
|
|
|
def category_to_dir(category: str | None) -> str:
|
|
"""Map a wiki-capture category to its vault sub-directory."""
|
|
return CATEGORY_DIRS.get((category or "").strip().lower(), "synthesis")
|