blob: 5c3b1e3185b89b163a712e05d78c149369165eb9 [file]
#!/usr/bin/env vpython3
# Copyright 2026 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import annotations
import os.path
from pathlib import Path
def create_symlink(src: Path, dest: Path) -> None:
try:
symlink = Path(os.path.relpath(src, dest.parent))
dest.symlink_to(symlink)
print(f"Symlinked {src.name} to {symlink}")
except OSError as e:
print(f"Failed to create symlink for {src.name}: {e}")
FILE_PATH = Path(__file__).resolve()
repo_root = FILE_PATH.parents[2]
agents_src = repo_root / "agents"
agents_dest = repo_root / ".agents"
# 1. Check if .agents is a symlink to agents
if agents_dest.is_symlink():
target = agents_dest.readlink()
if str(target) in ("agents", str(agents_src)):
print(f"Removing symlink .agents -> {target}")
agents_dest.unlink()
# 2. Ensure .agents is a real directory
agents_dest.mkdir(parents=True, exist_ok=True)
# 3. Process top-level items in agents/
for item in agents_src.iterdir():
# Skip hidden files/dirs
if item.name.startswith("."):
continue
dest_item = agents_dest / item.name
if item.name not in ["agents", "skills", "rules"]:
# For other items, symlink directly
if not dest_item.exists():
create_symlink(item, dest_item)
continue
# Create real directory in .agents/
dest_item.mkdir(parents=True, exist_ok=True)
# Cleanup dead symlinks
for sub_item in dest_item.iterdir():
if sub_item.is_symlink() and not sub_item.exists():
print(f"Removing dead symlink {sub_item}")
sub_item.unlink()
# Symlink individual items inside
for sub_item in item.iterdir():
dest_sub = dest_item / sub_item.name
if not dest_sub.exists():
create_symlink(sub_item, dest_sub)
agents_md_path = repo_root / "AGENTS.md"
if not agents_md_path.exists():
with agents_md_path.open("w") as f:
f.write("@agents/prompts/templates/modular.md\n")
print(f"Created {agents_md_path}")
else:
print(f"Skipping {agents_md_path} creation since it already exists.")