114 lines
3.4 KiB
Python
114 lines
3.4 KiB
Python
"""
|
|
JIANGCHANG_* 数据根与用户目录:解析规则 + 可选本地 CLI 默认值。
|
|
|
|
模板复制后通常无需大改;如组织环境不同,再按项目实际调整。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
CLI_LOCAL_DEV_ENABLED = True
|
|
DEFAULT_LOCAL_USER_ID = "10032"
|
|
WIN_DEFAULT_DATA_ROOT = r"D:\jiangchang-data"
|
|
WIN_DEFAULT_JIANGCHANG_APP_ROOT = r"D:\AI\jiangchang"
|
|
|
|
|
|
def platform_default_data_root() -> str:
|
|
if sys.platform == "win32":
|
|
return WIN_DEFAULT_DATA_ROOT
|
|
return os.path.join(os.path.expanduser("~"), ".jiangchang-data")
|
|
|
|
|
|
def get_data_root() -> str:
|
|
env = (
|
|
os.getenv("CLAW_DATA_ROOT")
|
|
or os.getenv("JIANGCHANG_DATA_ROOT")
|
|
or ""
|
|
).strip()
|
|
if env:
|
|
return env
|
|
return platform_default_data_root()
|
|
|
|
|
|
def get_user_id() -> str:
|
|
return (
|
|
os.getenv("CLAW_USER_ID")
|
|
or os.getenv("JIANGCHANG_USER_ID")
|
|
or ""
|
|
).strip() or "_anon"
|
|
|
|
|
|
def _looks_like_skills_root(path: str) -> bool:
|
|
if not path or not os.path.isdir(path):
|
|
return False
|
|
for marker in (
|
|
"llm-manager",
|
|
"content-manager",
|
|
"account-manager",
|
|
"sohu-publisher",
|
|
"toutiao-publisher",
|
|
"gongzhonghao-publisher",
|
|
"weibo-publisher",
|
|
"skill-template",
|
|
):
|
|
if os.path.isdir(os.path.join(path, marker)):
|
|
return True
|
|
return False
|
|
|
|
|
|
def get_skills_root() -> str:
|
|
for key in ("JIANGCHANG_SKILLS_ROOT", "CLAW_SKILLS_ROOT"):
|
|
v = (os.getenv(key) or "").strip()
|
|
if v:
|
|
return os.path.normpath(v)
|
|
|
|
app = (os.getenv("JIANGCHANG_APP_ROOT") or "").strip()
|
|
if sys.platform == "win32" and not app:
|
|
app = WIN_DEFAULT_JIANGCHANG_APP_ROOT
|
|
if app:
|
|
nested = os.path.join(app, "skills")
|
|
if _looks_like_skills_root(nested):
|
|
return os.path.normpath(nested)
|
|
if _looks_like_skills_root(app):
|
|
return os.path.normpath(app)
|
|
|
|
if sys.platform == "win32":
|
|
nested = os.path.join(WIN_DEFAULT_JIANGCHANG_APP_ROOT, "skills")
|
|
if _looks_like_skills_root(nested):
|
|
return os.path.normpath(nested)
|
|
if _looks_like_skills_root(WIN_DEFAULT_JIANGCHANG_APP_ROOT):
|
|
return os.path.normpath(WIN_DEFAULT_JIANGCHANG_APP_ROOT)
|
|
|
|
return os.path.normpath(os.path.join(os.path.expanduser("~"), ".openclaw", "skills"))
|
|
|
|
|
|
def get_sibling_skills_root(skill_scripts_dir: str | None = None) -> str:
|
|
if skill_scripts_dir:
|
|
scripts = os.path.abspath(skill_scripts_dir)
|
|
skill_root = os.path.dirname(scripts)
|
|
inferred = os.path.dirname(skill_root)
|
|
if _looks_like_skills_root(inferred):
|
|
return os.path.normpath(inferred)
|
|
|
|
for key in ("JIANGCHANG_SKILLS_ROOT", "CLAW_SKILLS_ROOT"):
|
|
v = (os.getenv(key) or "").strip()
|
|
if v:
|
|
return os.path.normpath(v)
|
|
|
|
return get_skills_root()
|
|
|
|
|
|
def apply_cli_local_defaults() -> None:
|
|
enabled = CLI_LOCAL_DEV_ENABLED
|
|
if not enabled:
|
|
v = (os.getenv("JIANGCHANG_CLI_LOCAL_DEV") or "").strip().lower()
|
|
enabled = v in ("1", "true", "yes", "on")
|
|
if not enabled:
|
|
return
|
|
if not (os.getenv("CLAW_DATA_ROOT") or os.getenv("JIANGCHANG_DATA_ROOT") or "").strip():
|
|
os.environ["JIANGCHANG_DATA_ROOT"] = platform_default_data_root()
|
|
if not (os.getenv("CLAW_USER_ID") or os.getenv("JIANGCHANG_USER_ID") or "").strip():
|
|
os.environ["JIANGCHANG_USER_ID"] = DEFAULT_LOCAL_USER_ID.strip()
|