feat(infra): auto-commit con 88 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 00:16:46 +02:00
parent 6bc97df5c0
commit eb8dbf66a1
126 changed files with 10933 additions and 287 deletions
@@ -0,0 +1,66 @@
"""Extract wikilink targets from the body of an Obsidian note."""
import re
# Matches both plain wikilinks [[...]] and embeds ![[...]].
# The captured group is everything between the double brackets.
_WIKILINK_RE = re.compile(r"!?\[\[([^\[\]]+?)\]\]")
def extract_obsidian_wikilinks(body: str) -> list:
"""Extract the note targets from the wikilinks in a note body.
Recognizes both plain links `[[...]]` and embeds `![[...]]` (Obsidian
treats embeds as links too). Each target is normalized to the bare note
name:
[[note|alias]] -> "note"
[[note#heading]] -> "note"
[[note#^blockid]] -> "note"
[[note]] -> "note"
![[image.png]] -> "image.png"
The alias (after `|`), the heading/block anchor (after `#`) and surrounding
whitespace are stripped. Targets are deduplicated while preserving the
order of first appearance. Pure and deterministic: no I/O, no mutation.
Args:
body: The Markdown body of an Obsidian note (without frontmatter).
Returns:
A list of unique target note names (strings), in order of appearance.
"""
if not body:
return []
seen = set()
targets = []
for match in _WIKILINK_RE.finditer(body):
inner = match.group(1)
# Drop the alias part after the first pipe.
target = inner.split("|", 1)[0]
# Drop the heading / block anchor after the first hash.
target = target.split("#", 1)[0]
target = target.strip()
if not target:
continue
if target in seen:
continue
seen.add(target)
targets.append(target)
return targets
if __name__ == "__main__":
body = (
"See [[Note A]] and [[Note B|the second]] plus [[Note A#Section]] "
"and [[Note C#^block123]]. Embed: ![[diagram.png]]. Repeat [[Note A]]."
)
links = extract_obsidian_wikilinks(body)
assert links == ["Note A", "Note B", "Note C", "diagram.png"], links
assert extract_obsidian_wikilinks("") == []
assert extract_obsidian_wikilinks("no links here") == []
assert extract_obsidian_wikilinks("[[ spaced |alias]]") == ["spaced"]
print("OK")