Skip to content

Commit 06c1799

Browse files
committed
fix: preserve local file links
1 parent 1740899 commit 06c1799

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

plugins/codex/scripts/sync.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ def normalize_text_blocks(text: str, image_uploader: ImageUploader | None = None
425425

426426

427427
def append_text_block(blocks: list[dict[str, Any]], text: str) -> None:
428-
value = redact_text(strip_local_markdown_link_targets(text)).strip()
428+
value = redact_text(file_url_local_markdown_link_targets(text)).strip()
429429
if value:
430430
blocks.append({"type": "text", "text": value})
431431

@@ -558,12 +558,12 @@ def should_skip_user_message(content: Any) -> bool:
558558
return any(text.startswith(prefix) for prefix in skipped_prefixes)
559559

560560

561-
def strip_local_markdown_link_targets(text: str) -> str:
561+
def file_url_local_markdown_link_targets(text: str) -> str:
562562
def replace(match: re.Match[str]) -> str:
563563
label = match.group(1).strip()
564564
target = match.group(2).strip()
565565
if target.startswith("/Users/") or target.startswith("/var/") or target.startswith("/private/") or target.startswith("/tmp/"):
566-
return label
566+
return f"[{label}]({Path(target).as_uri()})"
567567
return match.group(0)
568568

569569
return LOCAL_MARKDOWN_LINK_RE.sub(replace, text)

plugins/codex/tests/test_plugin_scripts.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def test_build_payload_skips_loaded_skill_content_block(self):
322322
self.assertNotIn("Spec-Driven Planning", raw_payload)
323323
self.assertNotIn("SKILL.md", raw_payload)
324324

325-
def test_build_payload_strips_local_markdown_link_targets(self):
325+
def test_build_payload_rewrites_local_markdown_link_targets_as_file_urls(self):
326326
from sync import build_payload_from_hook
327327

328328
message = "use [$claude-code-setup:spec-driven-planning](/Users/buru/Library/Mobile Documents/com~apple~CloudDocs/dotfiles/config/claude/skills/spec-driven-planning/SKILL.md)"
@@ -351,8 +351,10 @@ def test_build_payload_strips_local_markdown_link_targets(self):
351351
)
352352

353353
content = payload["thread"]["messages"][0]["content"]
354-
self.assertEqual(content, "use $claude-code-setup:spec-driven-planning")
355-
self.assertNotIn("/Users/buru", json.dumps(payload, ensure_ascii=False))
354+
self.assertEqual(
355+
content,
356+
"use [$claude-code-setup:spec-driven-planning](file:///Users/buru/Library/Mobile%20Documents/com~apple~CloudDocs/dotfiles/config/claude/skills/spec-driven-planning/SKILL.md)",
357+
)
356358

357359
def test_build_payload_includes_raw_repo_url_from_git_remote(self):
358360
from sync import build_payload_from_hook

0 commit comments

Comments
 (0)