auto-sync: 2026-05-20 20:35:41

This commit is contained in:
cfdaily
2026-05-20 20:35:41 +08:00
parent a7b9aae712
commit 8faaa71a1d
+47 -1
View File
@@ -231,7 +231,53 @@ class ProjectRegistry:
# 迁移(从 _registry.yaml
# ===================================================================
def migrate_from_yaml(self, yaml_path: Optional[Path] = None) -> int:
def discover_sanguo_projects(self, scan_dir: Optional[Path] = None) -> List[str]:
"""扫描 sanguo_projects 开发目录,自动注册正式项目"""
scan_dir = scan_dir or Path.home() / ".openclaw" / "sanguo_projects"
discovered = []
if not scan_dir.exists():
return discovered
conn = self._connect()
try:
for child in sorted(scan_dir.iterdir()):
if not child.is_dir():
continue
if not child.name.startswith("sanguo_"):
continue
# 跳过已注册的(含 deleted/archived
existing = conn.execute(
"SELECT id, status FROM projects WHERE id=?", (child.name,)
).fetchone()
if existing:
continue
# 自动注册,创建 blackboard.db
project_dir = self.root / child.name
project_dir.mkdir(parents=True, exist_ok=True)
for subdir in ("artifacts", "experiences", "skills", "config"):
(project_dir / subdir).mkdir(exist_ok=True)
now = self._now()
conn.execute(
"""INSERT INTO projects (id, name, description, status, source, created_at)
VALUES (?,?,?,?,?,?)""",
(child.name, child.name, "auto_discovered", "active",
"sanguo_projects_scan", now),
)
discovered.append(child.name)
logger.info("Auto-discovered sanguo project: %s", child.name)
if discovered:
conn.commit()
finally:
conn.close()
return discovered
def migrate_from_yaml(self, yaml_path: Optional[Path] = None) -> int: int:
"""从旧 _registry.yaml 迁移项目数据"""
import yaml