# 运行环境与数据路径(account-manager) ## 数据落盘位置 `get_data_root()` / `get_user_id()` 来自 **`scripts/jiangchang_skill_core/runtime_env.py`**;`scripts/util/runtime_paths.py` 在此基础上拼技能子目录。 - **数据根目录**:优先 **`JIANGCHANG_DATA_ROOT`**;未设置且未走本地注入时,Windows 默认 `D:\jiangchang-data`,其它系统 `~/.jiangchang-data`。 - **用户/工作空间 id**:优先 **`JIANGCHANG_USER_ID`**;未设置时为 **`_anon`**。 - **技能数据目录**:`{数据根}/{用户id}/account-manager/` - **SQLite**:`account-manager.db` - **Profile**:`profiles/{domain}/{platform_key}/{safe_label}[_{login_id_suffix}]/` - **日志**:与其它技能共用 `{数据根}/{用户id}/logs/jiangchang.log` ## 调试:为什么「list 没数据」 - 若终端与网关注入的 `JIANGCHANG_*` 不一致,会写到**不同用户目录**。 - 设置 **`JIANGCHANG_ACCOUNT_DEBUG_PATHS=1`** 后,每次 CLI 命令前在 **stderr** 打印实际路径。 ## 本地 CLI 默认值 各技能 `main.py` 调用 `apply_cli_local_defaults()`: - `CLI_LOCAL_DEV_ENABLED = True` 时,未设置环境变量则注入平台默认值。 - 发版前改为 `False` 或依赖宿主注入。 ## Secret 存储 | 方式 | 说明 | 适用场景 | |------|------|----------| | `none` | 不存 secret | 浏览器 profile 登录态 | | `env` | SQLite 只存环境变量名,运行时从 `os.environ` 读取 | 轻量测试 | | `windows_credential` | 真实 secret 存 Windows Credential Manager | Windows 本地正式部署 | - **不把 secret 明文写入 SQLite** - **不在日志中记录 secret 明文** - 只有 `credential pick --reveal` 或 `credential resolve --reveal` 才返回 secret ## 日志 | 变量 | 作用 | |------|------| | `JIANGCHANG_LOG_LEVEL` | 日志级别,默认 `INFO` | | `JIANGCHANG_LOG_TO_STDERR` | 设为 `1`/`true` 等时,WARNING 及以上同步 stderr | | `JIANGCHANG_LOG_FILE` | 覆盖主日志文件绝对路径 | | `JIANGCHANG_LOG_BACKUP_COUNT` | 轮转保留份数,默认 `30` | | `JIANGCHANG_TRACE_ID` | 可选;跨技能子进程由父进程注入 | ## 浏览器(open) - 本机已安装 Chrome 或 Edge - Python 环境需 `playwright` 包(匠厂共享 runtime 已包含) - 使用 **channel 模式**(`channel=chrome|msedge`),**不下载 Chromium** - **不要执行 `playwright install chromium`** ### 关键浏览器参数 - `headless=False` - `no_viewport=True` - `args` 包含 `--start-maximized` - stealth 模式可选(`OPENCLAW_PLAYWRIGHT_STEALTH` 环境变量控制)